diff options
Diffstat (limited to 'picturelistview.cpp')
-rw-r--r-- | picturelistview.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/picturelistview.cpp b/picturelistview.cpp new file mode 100644 index 0000000..22e27af --- /dev/null +++ b/picturelistview.cpp @@ -0,0 +1,170 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QSettings> +#include <QHeaderView> +#include <QApplication> +#include <QMessageBox> +#include <QMenu> + +#include "picturelistview.h" +#include "smglobals.h" + +PictureListView::PictureListView(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 PictureListView::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 PictureListView::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 PictureListView::refresh(){ + mModel->populate(); +} + +void PictureListView::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 PictureListView::setPVAll(){ + PicDataList data = mModel->allFiles(); + mPV->addFiles(data, true); +} + +void PictureListView::setHoverWinVisible(bool visible) const { + mHoverWin->setVisible(visible); +} + +void PictureListView::hideEvent(QHideEvent *){ + QByteArray pvHeader = header()->saveState(); + QSettings s; + s.setValue("ui/pvheader", pvHeader); +} + +bool PictureListView::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 PictureListView::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 PictureListView::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); +} + |