diff options
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 191 |
1 files changed, 19 insertions, 172 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 59007ca..7cbf288 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -24,6 +24,7 @@ #include <QApplication> #include "pictureswidget.h" +#include "picturelistview.h" #include "picfilesmodel.h" #include "mappingtreewidget.h" #include "smtreeitem.h" @@ -37,23 +38,23 @@ PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleB //setup gui QSplitter *splitter = new QSplitter; mMappingTree = new MappingTreeWidget; - mPictureView = new PictureView; - mPictureView->setItemDelegateForColumn(PicFilesModel::Size, new SizeDelegate(this)); - connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureView, SLOT(mappingChanged(int))); + 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(mPictureView, SIGNAL(editPicsMappings()), this, SLOT(editMappings())); - connect(mPictureView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(showInPicViewer(QModelIndex))); - connect(this, SIGNAL(editMappingsDone()), mPictureView, SLOT(refresh())); + 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(mPictureView); + splitter->addWidget(mPictureListView); splitter->setStretchFactor(0, 1); splitter->setStretchFactor(1, 3); //misc mEditDialog = new MappingEditDialog(this); mPicViewer = SmGlobals::instance()->pictureViewer(); - mPictureView->setPV(mPicViewer); + mPictureListView->setPV(mPicViewer); //put it all togehter QHBoxLayout *mainLayout = new QHBoxLayout; @@ -75,7 +76,7 @@ void PicturesWidget::writeSettings(){ } s.setValue("ui/selectedmapping", v.join(",")); } - mPictureView->writeHeaderConfig(); + mPictureListView->writeHeaderConfig(); } void PicturesWidget::readSettings(){ @@ -85,16 +86,16 @@ void PicturesWidget::readSettings(){ for(int i = 0; i < ps.count(); ++i){ path << ps.at(i).toInt(); } - mPictureView->readHeaderConfig(); + mPictureListView->readHeaderConfig(); } void PicturesWidget::editMappings(){ - QModelIndexList selectedFids = mPictureView->selectionModel()->selectedRows(PicFilesModel::Id); + QModelIndexList selectedFids = mPictureListView->selectionModel()->selectedRows(PicFilesModel::Id); QList<int> fileIds; foreach(QModelIndex idx, selectedFids){ fileIds << idx.data().toInt(); } - QList<MappingData> mappings = mPictureView->filesModel()->mappingDataFromFiles(fileIds); + QList<MappingData> mappings = mPictureListView->filesModel()->mappingDataFromFiles(fileIds); mEditDialog->editWidget()->setMappings(mappings); int retval = mEditDialog->exec(); if(retval == QDialog::Accepted){ @@ -103,12 +104,12 @@ void PicturesWidget::editMappings(){ QMessageBox::critical(this, tr("Error"), tr("No mappings selected! Cowardly bailing out.")); return; } - QModelIndexList selectedFids = mPictureView->selectionModel()->selectedRows(PicFilesModel::Id); + QModelIndexList selectedFids = mPictureListView->selectionModel()->selectedRows(PicFilesModel::Id); QList<int> fileIds; foreach(QModelIndex idx, selectedFids){ fileIds << idx.data().toInt(); } - mPictureView->filesModel()->changeMappings(fileIds, selMappings); + mPictureListView->filesModel()->changeMappings(fileIds, selMappings); } emit editMappingsDone(); } @@ -118,178 +119,24 @@ void PicturesWidget::constructWindowTitle(){ MappingData selected = mMappingTree->selectedItem(); if(!selected.path.isEmpty()){ windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.join("/")); - mPictureView->setHoverWinVisible(false); + mPictureListView->setHoverWinVisible(false); } emit needWindowTitleChange(windowTitle); } void PicturesWidget::showInPicViewer(const QModelIndex &idx){ - QModelIndex real = mPictureView->proxy()->mapToSource(idx); + QModelIndex real = mPictureListView->proxy()->mapToSource(idx); if(!real.isValid()){ return; } - PicData pData = mPictureView->filesModel()->dataList(real); + PicData pData = mPictureListView->filesModel()->dataList(real); mPicViewer->setShowInfoItem(true); mPicViewer->setShowMappingItem(true); mPicViewer->setShowMarkItem(false); mPicViewer->setFile(pData); - mPictureView->setPVAll(); + mPictureListView->setPVAll(); if(mPicViewerA){ mPicViewerA->setChecked(true); } } - -PictureView::PictureView(QWidget *parent) : SmTreeView("ui/picheaderpos", parent) { - //setup models - mModel = static_cast<PicFilesModel*>(SmGlobals::instance()->model("PicFiles")); - mProxy = new QSortFilterProxyModel(this); - mProxy->setSourceModel(mModel); - setModel(mProxy); - connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(selectedFilesChanged())); - mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); - - //read settings - QSettings s; - QByteArray pvHeader = s.value("ui/pvheader").toByteArray(); - mCursorOffset = s.value("ui/cursoroffset").toInt(); - if(!pvHeader.isEmpty()){ - header()->restoreState(pvHeader); - } - - //hover window - mHoverWin = new HoverWindow(this); - - //misc settings - setSortingEnabled(true); - setAttribute(Qt::WA_Hover); - setSelectionMode(QAbstractItemView::ExtendedSelection); - setAlternatingRowColors(true); - setColumnHidden(1, true); - setColumnHidden(4, true); -} - -void PictureView::mappingChanged(int pMapId){ - mModel->setMapping(pMapId); - qApp->setOverrideCursor(Qt::WaitCursor); - mModel->populate(); - for(int i = 0; i < PicFilesModel::NumFields; ++i){ - resizeColumnToContents(i); - } - qApp->restoreOverrideCursor(); -} - -void PictureView::deletePics(){ - QModelIndexList sel = selectionModel()->selectedRows(); - if(sel.isEmpty()){ - return; - } - QString msg = QString(tr("Really delete %1 pics from archive?")).arg(sel.count()); - int retval = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No); - if(retval == QMessageBox::No){ - return; - } - QList<QPair<int, QString> > files; - foreach(QModelIndex i, sel){ - files << qMakePair(i.data(PicFilesModel::IdRole).toInt(), i.data(PicFilesModel::FullPathRole).toString()); - } - mModel->removeFiles(files); -} - -void PictureView::refresh(){ - mModel->populate(); -} - -void PictureView::setPVData(int replace){ - QModelIndexList sel = selectionModel()->selectedRows(); - PicDataList pics; - foreach(QModelIndex i, sel){ - QModelIndex real = mProxy->mapToSource(i); - pics << mModel->dataList(real); - } - mPV->addFiles(pics, replace); -} - -void PictureView::setPVAll(){ - PicDataList data = mModel->allFiles(); - mPV->addFiles(data, true); -} - -void PictureView::setHoverWinVisible(bool visible) const { - mHoverWin->setVisible(visible); -} - -void PictureView::hideEvent(QHideEvent *){ - QByteArray pvHeader = header()->saveState(); - QSettings s; - s.setValue("ui/pvheader", pvHeader); -} - -bool PictureView::event(QEvent *e){ - if(e->type() == QEvent::Leave){ - mHoverWin->setVisible(false); - return SmTreeView::event(e); - } - QHoverEvent *hEvent = static_cast<QHoverEvent*>(e); - if(!hEvent){ - return SmTreeView::event(e); - } - QPoint hotSpot(hEvent->pos().x(), hEvent->pos().y() + mCursorOffset); - QModelIndex curIdx = indexAt(hotSpot); - if(e->type() == QEvent::HoverEnter || e->type() == QEvent::HoverMove){ - if(!curIdx.isValid() || curIdx.column() != PicFilesModel::FileName){ - mHoverWin->setVisible(false); - mCurHover = QModelIndex(); - return true; - } - } - if(e->type() == QEvent::HoverEnter){ - mCurHover = curIdx; - QPixmap pm; - pm.load(mCurHover.data(PicFilesModel::FullPathRole).toString()); - mHoverWin->setPixmap(pm); - mHoverWin->setPos(); - mHoverWin->setCaption(mCurHover.data().toString()); - mHoverWin->setVisible(true); - return true; - } - if(e->type() == QEvent::HoverMove){ - if(curIdx != mCurHover){ - mCurHover = curIdx; - QPixmap pm; - pm.load(mCurHover.data(PicFilesModel::FullPathRole).toString()); - mHoverWin->setPixmap(pm); - mHoverWin->setPos(); - mHoverWin->setVisible(true); - mHoverWin->setCaption(mCurHover.data().toString()); - return true; - } - } - return SmTreeView::event(e); -} - -void PictureView::contextMenuEvent(QContextMenuEvent *e){ - QMenu ctxMenu; - for(int i = 0; i < actions().count(); ++i){ - if(actions().at(i)->text() == "Refresh"){ - ctxMenu.addSeparator(); - } - ctxMenu.addAction(actions().at(i)); - } - ctxMenu.exec(e->globalPos()); -} - -void PictureView::selectedFilesChanged(){ - QModelIndexList sel = selectionModel()->selectedRows(); - if(sel.isEmpty()){ - return; - } - QList<QVariant> fileIds; - qint64 selSize = 0; - foreach(QModelIndex i, sel){ - fileIds << i.data(PicFilesModel::IdRole); - selSize += i.data(PicFilesModel::SizeRole).toInt(); - } - emit numSelected(sel.size()); - emit selectedSize(selSize); -} |