diff options
-rw-r--r-- | picturelistview.h | 1 | ||||
-rw-r--r-- | pictureswidget.cpp | 90 | ||||
-rw-r--r-- | pictureswidget.h | 1 | ||||
-rw-r--r-- | pictureviewer2.cpp | 85 | ||||
-rw-r--r-- | pictureviewer2.h | 9 | ||||
-rw-r--r-- | shemov.cpp | 128 | ||||
-rw-r--r-- | shemov.h | 24 |
7 files changed, 62 insertions, 276 deletions
diff --git a/picturelistview.h b/picturelistview.h index 9e86372..072a63a 100644 --- a/picturelistview.h +++ b/picturelistview.h @@ -46,7 +46,6 @@ class PictureListView : public SmTreeView { void newMappings(QString); void numSelected(int); void selectedSize(qint64); - void editPicsMappings(); private: HoverWindow *mHoverWin; diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 7cbf288..49a86ec 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -9,54 +9,82 @@ #include <QHBoxLayout> #include <QSqlQuery> #include <QSortFilterProxyModel> -#include <QLocale> -#include <QHideEvent> -#include <QHoverEvent> -#include <QEvent> -#include <QHeaderView> -#include <QSettings> #include <QMessageBox> -#include <QMenu> -#include <QFile> #include <QSettings> -#include <QActionGroup> -#include <QHash> -#include <QApplication> +#include <QAction> +#include <QToolBar> #include "pictureswidget.h" #include "picturelistview.h" -#include "picfilesmodel.h" #include "mappingtreewidget.h" -#include "smtreeitem.h" -#include "helper.h" -#include "hoverwindow.h" -#include "mappingtreemodel.h" #include "delegates.h" #include "smglobals.h" +#include "helper.h" PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleBase(tr("Picture archive")), mPicViewerA(0) { - //setup gui - QSplitter *splitter = new QSplitter; mMappingTree = new MappingTreeWidget; mPictureListView = new PictureListView; mPictureListView->setItemDelegateForColumn(PicFilesModel::Size, new SizeDelegate(this)); - connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureListView, SLOT(mappingChanged(int))); - //change window title when mapping selection changes - connect(mMappingTree, SIGNAL(mappingChanged(int)), this, SLOT(constructWindowTitle())); - connect(mPictureListView, SIGNAL(editPicsMappings()), this, SLOT(editMappings())); - connect(mPictureListView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(showInPicViewer(QModelIndex))); - connect(this, SIGNAL(editMappingsDone()), mPictureListView, SLOT(refresh())); - splitter->addWidget(mMappingTree); - splitter->addWidget(mPictureListView); - splitter->setStretchFactor(0, 1); - splitter->setStretchFactor(1, 3); + connect(mMappingTree, &MappingTreeWidget::mappingChanged, mPictureListView, &PictureListView::mappingChanged); + connect(mMappingTree, &MappingTreeWidget::mappingChanged, this, &PicturesWidget::constructWindowTitle); + connect(mPictureListView, &PictureListView::doubleClicked, this, &PicturesWidget::showInPicViewer); + connect(this, &PicturesWidget::editMappingsDone, mPictureListView, &PictureListView::refresh); //misc mEditDialog = new MappingEditDialog(this); mPicViewer = SmGlobals::instance()->pictureViewer(); mPictureListView->setPV(mPicViewer); - //put it all togehter + setupWidget(); +} + +void PicturesWidget::setupWidget(){ + QToolBar *toolBar = new QToolBar; + QAction *showInPicViewerA = new QAction(QIcon(":/snapshot.png"), tr("Show"), this); + connect(showInPicViewerA, &QAction::triggered, [=] { + QModelIndexList r = mPictureListView->selectionModel()->selectedRows(); + if(!r.isEmpty()){ + showInPicViewer(r.first()); + } + }); + QWidget *spacer1 = new QWidget; + spacer1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + toolBar->addWidget(spacer1); + toolBar->addAction(showInPicViewerA); + mPictureListView->addAction(showInPicViewerA); + QAction *deleteA = new QAction(QIcon(":/delete.png"), tr("Delete"), this); + connect(deleteA, &QAction::triggered, mPictureListView, &PictureListView::deletePics); + toolBar->addAction(deleteA); + mPictureListView->addAction(deleteA); + toolBar->addSeparator(); + mPictureListView->addAction(Helper::createSeparator(mPictureListView)); + QAction *editMappingsA = new QAction(QIcon(":/squirting_nipple.png"), tr("Edit mappings..."), this); + connect(editMappingsA, &QAction::triggered, this, &PicturesWidget::editMappings); + toolBar->addAction(editMappingsA); + mPictureListView->addAction(editMappingsA); + QAction *refreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); + connect(refreshA, &QAction::triggered, mPictureListView, &PictureListView::refresh); + toolBar->addAction(refreshA); + mPictureListView->addAction(refreshA); + toolBar->addSeparator(); + toolBar->addAction(SmGlobals::instance()->globalAction()); + QWidget *spacer2 = new QWidget; + spacer2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + toolBar->addWidget(spacer2); + + QWidget *leftWidget = new QWidget; + QVBoxLayout *leftWidgetL = new QVBoxLayout; + leftWidgetL->setSpacing(2); + leftWidgetL->addWidget(toolBar); + leftWidgetL->addWidget(mPictureListView); + leftWidget->setLayout(leftWidgetL); + + QSplitter *splitter = new QSplitter; + splitter->addWidget(mMappingTree); + splitter->addWidget(leftWidget); + splitter->setStretchFactor(0, 1); + splitter->setStretchFactor(1, 3); + QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(splitter); setLayout(mainLayout); @@ -136,7 +164,5 @@ void PicturesWidget::showInPicViewer(const QModelIndex &idx){ mPicViewer->setShowMarkItem(false); mPicViewer->setFile(pData); mPictureListView->setPVAll(); - if(mPicViewerA){ - mPicViewerA->setChecked(true); - } + mPicViewer->show(); } diff --git a/pictureswidget.h b/pictureswidget.h index d1cdd36..a7134df 100644 --- a/pictureswidget.h +++ b/pictureswidget.h @@ -44,6 +44,7 @@ class PicturesWidget : public QWidget { void editMappingsDone(); private: + void setupWidget(); MappingTreeWidget *mMappingTree; PictureListView *mPictureListView; PictureViewer2 *mPicViewer; diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 42f77fe..5b0c8b0 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -187,7 +187,6 @@ void PictureViewer2::next(){ }else{ ++mCurPos; } - mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); showFile(mFiles.at(mCurPos)); } @@ -200,7 +199,6 @@ void PictureViewer2::previous(){ }else{ --mCurPos; } - mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); showFile(mFiles.at(mCurPos)); } @@ -212,7 +210,6 @@ void PictureViewer2::skip(int amount){ if(next < 0){ next = mFiles.size() + next; } - mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(next))); showFile(mFiles.at(next)); mCurPos = next; } @@ -274,49 +271,9 @@ void PictureViewer2::writeSettings(){ mSlideDlg->mappingEditWidget()->saveMappings("ui/pvmappings"); } -void PictureViewer2::initActions(){ - foreach(QAction *a, actions()){ - //never, ever forget this when casting to int - //an invalid QVariant casts to a valid int! - if(!a->data().isValid()){ - continue; - } - if(a->data().toInt() == HideAction){ - mHideA = a; - } - if(a->data().toInt() == MarkAction){ - mMarkA = a; - } - if(a->data().toInt() == DeleteAction){ - mDeleteA = a; - } - } -} - -void PictureViewer2::copyCurrent(){ - QString fullPath = mFiles.at(mCurPos).at(PicFilesModel::FullPath).toString(); - QSettings s; - QString lastDir = s.value("ui/pvlastdir", QDir::homePath()).toString(); - QString destDir = QFileDialog::getExistingDirectory(this, tr("Copy picture"), lastDir); - if(!destDir.isEmpty()){ - QFileInfo fi(fullPath); - QString copyTo = QString("%1/%2").arg(destDir).arg(fi.fileName()); - bool success = QFile::copy(fullPath, copyTo); - if(!success){ - QString msg = QString(tr("File copy %1 -> %2 failed!")).arg(fullPath).arg(copyTo); - QMessageBox::critical(this, tr("Error"), msg); - }else{ - s.setValue("ui/pvlastdir", destDir); - } - } -} - void PictureViewer2::deleteCurrent(){ int retval = QMessageBox::question(this, tr("Delete file"), tr("Are you sure?"), QMessageBox::No | QMessageBox::Yes); if(retval == QMessageBox::Yes){ - if(mMarkedFiles.contains(mFiles.at(mCurPos))){ - mMarkedFiles.removeAll(mFiles.at(mCurPos)); - } QString fullPath = mFiles.at(mCurPos).at(PicFilesModel::FullPath).toString(); QFile f(fullPath); if(f.remove()){ @@ -328,19 +285,8 @@ void PictureViewer2::deleteCurrent(){ void PictureViewer2::showNewPicsDialog(){ mNewPicsDlg->clearFiles(); QStringList fileList; - if(mMarkedFiles.isEmpty()){ - if(!mCurrentDir.isEmpty()){ - QDir d(mCurrentDir); - foreach(QFileInfo fi, d.entryInfoList()){ - fileList << fi.absoluteFilePath(); - } - }else{ - return; - } - }else{ - foreach(QVariantList v, mMarkedFiles){ - fileList << v.at(PicFilesModel::FullPath).toString(); - } + foreach(QVariantList v, mMarkedFiles){ + fileList << v.at(PicFilesModel::FullPath).toString(); } mNewPicsDlg->addFiles(fileList); mNewPicsDlg->setFocusToMappings(); @@ -352,18 +298,6 @@ void PictureViewer2::addToNewPics(){ mNewPicsDlg->show(); } -void PictureViewer2::markCurrent(){ - if(!mMarkedFiles.contains(mCurPicData)){ - mMarkedFiles << mCurPicData; - mMarkA->setChecked(true); - next(); - }else{ - mMarkedFiles.removeAll(mCurPicData); - mMarkA->setChecked(false); - } - constructInfoItem(mCurPicData, QSize()); -} - void PictureViewer2::clearMarks(){ mMarkedFiles.clear(); constructInfoItem(mCurPicData, QSize()); @@ -446,7 +380,6 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ if(e->key() == Qt::Key_Escape){ stopSlide(); - mHideA->toggle(); } if(e->key() == Qt::Key_Space){ if(mTimer->isActive()){ @@ -455,9 +388,6 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ startSlide(); } } - if(e->key() == Qt::Key_M){ - markCurrent(); - } if((e->key() == Qt::Key_N) || (e->key() == Qt::Key_Down) || (e->key() == Qt::Key_Right)){ next(); @@ -478,17 +408,6 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ e->accept(); } -void PictureViewer2::showEvent(QShowEvent *e){ - mHideA->setChecked(true); - QGraphicsView::showEvent(e); -} - -void PictureViewer2::hideEvent(QHideEvent *e){ - stopSlide(); - mHideA->setChecked(false); - QGraphicsView::hideEvent(e); -} - void PictureViewer2::resizeEvent(QResizeEvent *event){ QGraphicsView::resizeEvent(event); showFile(mCurPicData); diff --git a/pictureviewer2.h b/pictureviewer2.h index 3c57005..3813d93 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -58,7 +58,6 @@ class PictureViewer2 : public QGraphicsView { void setShowMappingItem(bool show) { mShowMappingItem = show; } void setShowMarkItem(bool show) { mShowMarkItem = show; } void setCurrentDir(const QString &curDir) { mCurrentDir = curDir; } - const PicDataList marked() { return mMarkedFiles; } PicData picData(const QString &fullPath, int fileId = -1); public slots: @@ -70,12 +69,9 @@ class PictureViewer2 : public QGraphicsView { void startSlide(); void readSettings(); void writeSettings(); - void initActions(); - void copyCurrent(); void deleteCurrent(); void showNewPicsDialog(); void addToNewPics(); - void markCurrent(); void clearMarks(); void showSlide(); void doSlide(); @@ -84,8 +80,6 @@ class PictureViewer2 : public QGraphicsView { virtual void wheelEvent(QWheelEvent *event); virtual void contextMenuEvent(QContextMenuEvent *e); virtual void keyPressEvent(QKeyEvent *e); - virtual void showEvent(QShowEvent *e); - virtual void hideEvent(QHideEvent *e); virtual void resizeEvent(QResizeEvent *event); private slots: @@ -126,9 +120,6 @@ class PictureViewer2 : public QGraphicsView { QPointF mInfoPos; QPointF mMappingPos; QPointF mBoundingPos; - QAction *mHideA; - QAction *mMarkA; - QAction *mDeleteA; PicFilesModel *mPicFilesModel; PicData mCurPicData; NewPicsDialog *mNewPicsDlg; @@ -211,17 +211,11 @@ void SheMov::configure(){ } void SheMov::tabChanged(int newTab){ - if(newTab == FileManager || newTab == Movies){ + if(newTab == FileManager || newTab == Movies || newTab == Pictures){ menuBar()->setVisible(false); }else{ menuBar()->setVisible(true); } - mEditPicMenuA->setVisible(newTab == Pictures); - mViewPicMenuA->setVisible(newTab == Pictures); - mPicActionGroup->setEnabled(newTab == Pictures); - mPVSelectAllA->disconnect(); - mPVShowNPDialogA->setEnabled(newTab == FileManager); - mPVAddToNPA->setEnabled(newTab == FileManager); mArchiveBrowserViewMenuA->setVisible(newTab == ArchiveBrowserTab); mRandomEditMenuA->setVisible(newTab == RandomDisp); statusbarMessage(QString()); @@ -233,7 +227,6 @@ void SheMov::tabChanged(int newTab){ setWindowTitle(mMovieWidget->wTitle); break; case Pictures: - connect(mPVSelectAllA, &QAction::triggered, mPicWidget->picView(), &PictureListView::setPVAll); mPicWidget->constructWindowTitle(); setDuration(0x0, false); break; @@ -375,102 +368,9 @@ void SheMov::createActions(){ createHeaderMapper(abrowsermodel, mArchiveBrowser->archiveTree(), mArchiveBrowserAG); mArchiveBrowser->archiveTree()->setHeaderGroup(mArchiveBrowserAG); - /* very unfortunate naming of variables: - * picViewer: the actual PictureViewer2 window - * picView: the picture files TreeView - * First: the Treeview -> picView */ - - // Delete... + Edit Mappings... - mPWDeletePicFromA = new QAction(QIcon(":/huge_balls_pierced.png"), tr("Delete..."), this); - mPicWidget->picView()->addAction(mPWDeletePicFromA); - connect(mPWDeletePicFromA, &QAction::triggered, mPicWidget->picView(), &PictureListView::deletePics); - mPWEditPicMappingsA = new QAction(QIcon(":/squirting_nipple.png"), tr("Edit mappings..."), this); - mPicWidget->picView()->addAction(mPWEditPicMappingsA); - connect(mPWEditPicMappingsA, &QAction::triggered, mPicWidget->picView(), &PictureListView::editPicsMappings); - mPicWidget->picView()->addAction(createSeparator()); - - // Show slide dialog PictureViewer2 *picViewer = SmGlobals::instance()->pictureViewer(); - mPVSlideDlgA = new QAction(QIcon(":/hourglass_figure.png"), tr("Show slide dialog..."), this); - mPVSlideDlgA->setData(PictureViewer2::SlideAction); - mPicWidget->picView()->addAction(mPVSlideDlgA); - connect(mPVSlideDlgA, &QAction::triggered, picViewer, &PictureViewer2::showSlide); - mPicWidget->picView()->addAction(createSeparator()); - - // Show/Hide Picture Viewer - mPVToggleA = new QAction(QIcon(":/dick_in_cage.png"), tr("Show/Hide Picture Viewer"), this); - mPVToggleA->setCheckable(true); - mPVToggleA->setData(PictureViewer2::HideAction); - connect(mPVToggleA, &QAction::toggled, picViewer, &PictureViewer2::setVisible); - mPVToggleA->setChecked(false); - mPicWidget->picView()->addAction(mPVToggleA); - - // Add selected + Replace with selected - mPVAddA = new QAction(QIcon(":/used_tampon.png"), tr("Add selected"), this); - connect(mPVAddA, &QAction::triggered, [=] { mPicWidget->picView()->setPVData(false); }); - mPicWidget->picView()->addAction(mPVAddA); - mPVReplaceA = new QAction(QIcon(":/clean_tampon.png"), tr("Replace with selected"), this); - connect(mPVReplaceA, &QAction::triggered, [=] { mPicWidget->picView()->setPVData(true); }); - mPicWidget->picView()->addAction(mPVReplaceA); - - // Refresh - mPicWidget->picView()->addAction(createSeparator()); - mPWRefreshA = new QAction(QIcon(":/huge_bra.png"), tr("Refresh"), this); - mPicWidget->picView()->addAction(mPWRefreshA); - connect(mPWRefreshA, &QAction::triggered, mPicWidget->picView(), &PictureListView::refresh); - mPicWidget->setPicViewerAction(mPVToggleA); - - /* Now the context menu for the actual Viewer - * picViewer -> PictureViewer2 */ - - // Slide Dialog - picViewer->addAction(mPVSlideDlgA); - picViewer->addAction(createSeparator()); - - // Show/Hide Picture Viewer - picViewer->addAction(mPVToggleA); - - // Select all pics - mPVSelectAllA = new QAction(QIcon(":/blue_syringe.png"), tr("Select all pics"), this); - picViewer->addAction(mPVSelectAllA); - - // PictureViewer mark Action - picViewer->addAction(createSeparator()); - mPVMarkA = new QAction(QIcon(":/higheels.png"), tr("(Un-)Mark"), this); - mPVMarkA->setCheckable(true); - mPVMarkA->setData(PictureViewer2::MarkAction); - connect(mPVMarkA, &QAction::triggered, picViewer, &PictureViewer2::markCurrent); - picViewer->addAction(mPVMarkA); - mPVClearMarksA = new QAction(tr("Clear marks"), this); - connect(mPVClearMarksA, &QAction::triggered, picViewer, &PictureViewer2::clearMarks); - picViewer->addAction(mPVClearMarksA); - mPVDeleteA = new QAction(QIcon(":/delete.png"), tr("Delete..."), this); - mPVDeleteA->setData(PictureViewer2::DeleteAction); - connect(mPVDeleteA, &QAction::triggered, picViewer, &PictureViewer2::deleteCurrent); - picViewer->addAction(mPVDeleteA); - picViewer->addAction(createSeparator()); - - // Copy to... - mPVCopyToA = new QAction(tr("Copy to..."), this); - connect(mPVCopyToA, &QAction::triggered, picViewer, &PictureViewer2::copyCurrent); - picViewer->addAction(mPVCopyToA); - - // NewPicsDialog actions - mPVShowNPDialogA = new QAction(tr("Show new pics dialog..."), this); - mPVShowNPDialogA->setShortcut(tr("CTRL+s")); - connect(mPVShowNPDialogA, &QAction::triggered, picViewer, &PictureViewer2::showNewPicsDialog); - picViewer->addAction(mPVShowNPDialogA); - mPVAddToNPA = new QAction(tr("Set file in new pics dialog"), this); - mPVAddToNPA->setShortcut(tr("CTRL+a")); - connect(mPVAddToNPA, &QAction::triggered, picViewer, &PictureViewer2::addToNewPics); - picViewer->addAction(mPVAddToNPA); - - // assign actions to PictureViewer2 members, so they can be toggled from within - picViewer->initActions(); picViewer->hide(); - /* picView(er) END Actions! */ - //ArchiveBrowser Actions mArchiveBrowserMoveToBurnA = new QAction(QIcon(":/shackles.png"), tr("Move to burn..."), this); connect(mArchiveBrowserMoveToBurnA, &QAction::triggered, mArchiveBrowser, &ArchiveBrowser::moveToBurn); @@ -484,16 +384,6 @@ void SheMov::createActions(){ connect(mArchiveBrowserExpandAllA, &QAction::triggered, mArchiveBrowser->archiveTree(), &SmTreeView::expandAll); mArchiveBrowserCollapseAllA = new QAction(tr("Collapse all"), this); connect(mArchiveBrowserCollapseAllA, &QAction::triggered, mArchiveBrowser->archiveTree(), &SmTreeView::collapseAll); - - // db analyzer dialogs - // analyze actors - - - //don't add actions with checkable(true) unless you know what you're doing! - mPicActionGroup = new QActionGroup(this); - mPicActionGroup->addAction(mPWDeletePicFromA); - mPicActionGroup->addAction(mPWEditPicMappingsA); - mPicActionGroup->addAction(mPWRefreshA); } void SheMov::createMenus(){ @@ -505,24 +395,8 @@ void SheMov::createMenus(){ analyzeMenu->addAction(mAnalyzeSeriesA); analyzeMenu->addAction(mAnalyzePartsA); - //Pictures edit menu - mEditPicMenu = new QMenu(tr("&Edit"), this); - mEditPicMenu->addAction(mPWDeletePicFromA); - mEditPicMenu->addAction(mPWEditPicMappingsA); - mEditPicMenuA = menuBar()->addMenu(mEditPicMenu); - - //Pictures view menu - mPicViewMenu = new QMenu(tr("&View"), this); - mPicViewMenu->addAction(mPVToggleA); - mPicViewMenu->addAction(mPVAddA); - mPicViewMenu->addAction(mPVReplaceA); - mPicViewMenu->addSeparator(); QMenu *headerMenu = new QMenu(tr("Show headers"), this); headerMenu->addActions(mPicsTreeHeaderGroup->actions()); - mPicViewMenu->addMenu(headerMenu); - mPicViewMenu->addSeparator(); - mPicViewMenu->addAction(mPWRefreshA); - mViewPicMenuA = menuBar()->addMenu(mPicViewMenu); //Archive Browser view menu mArchiveBrowserViewMenu = new QMenu(tr("&View"), this); @@ -83,26 +83,7 @@ class SheMov : public QMainWindow { QAction *mConsistencyA; QAction *mSearchDialogA; QActionGroup *mPicsTreeHeaderGroup; - - //PictureWidget Actions - //PW = mPicWidget - //PV = pictureViewer - QAction *mPWDeletePicFromA; - QAction *mPWEditPicMappingsA; - QAction *mPWRefreshA; - QAction *mPVToggleA; - QAction *mPVAddA; - QAction *mPVMarkA; - QAction *mPVDeleteA; - QAction *mPVClearMarksA; - QAction *mPVReplaceA; - QAction *mPVSelectAllA; - QAction *mPVCopyToA; - QAction *mPVShowNPDialogA; - QAction *mPVAddToNPA; - QAction *mPVSlideDlgA; QActionGroup *mPicActionGroup; - //EndActions //ArchiveBrowser QAction *mArchiveBrowserViewMenuA; @@ -130,14 +111,9 @@ class SheMov : public QMainWindow { QAction *mAnalyzeSeriesA; QAction *mAnalyzePartsA; - QMenu *mEditPicMenu; QMenu *mPlaySelectedTimesMenuFS; - QMenu *mPicViewMenu; QMenu *mArchiveBrowserViewMenu; QMenu *mRandomEditMenu; - QAction *mEditFSMenuA; - QAction *mEditPicMenuA; - QAction *mViewPicMenuA; QAction *mRandomEditMenuA; |