1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/*
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 <QContextMenuEvent>
#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(), &QItemSelectionModel::selectionChanged, this, &PictureListView::selectedFilesChanged);
mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
//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;
for(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;
for(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::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;
for(QModelIndex i : sel){
fileIds << i.data(PicFilesModel::IdRole);
selSize += i.data(PicFilesModel::SizeRole).toInt();
}
emit numSelected(sel.size());
emit selectedSize(selSize);
}
|