summaryrefslogtreecommitdiffstats
path: root/picturelistview.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-07-14 14:30:47 +0200
committerArno <arno@disconnect.de>2018-07-14 14:30:47 +0200
commitf6eb9eb58568b5fde537cc8119914dc77b25b46a (patch)
tree6705b4a8648d1ff495d968f239336a6f41bc2672 /picturelistview.cpp
parentd82fb61156a3addbd798d07f944e9f5a8b51ae5d (diff)
downloadSheMov-f6eb9eb58568b5fde537cc8119914dc77b25b46a.tar.gz
SheMov-f6eb9eb58568b5fde537cc8119914dc77b25b46a.tar.bz2
SheMov-f6eb9eb58568b5fde537cc8119914dc77b25b46a.zip
Rename PictureView to PictureListView
Rename it to make clear(er) that it is a TreeView, not a picture viewer. Also, remove it from pictureswidget.{h,cpp} into a separate file.
Diffstat (limited to 'picturelistview.cpp')
-rw-r--r--picturelistview.cpp170
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);
+}
+