summaryrefslogtreecommitdiffstats
path: root/picturelistview.cpp
blob: 7ec185d73da76cbb92924b3dfe55f0f54c2bfee8 (plain)
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
/*
  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(), &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);
}