Mercurial > retraceit
annotate src/folderselectdialog.cpp @ 106:32dd6ea6a582
Explicitly use c++11 as newer qt versions need that.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Thu, 08 Dec 2016 15:21:11 +0100 |
parents | 4302ca793c5a |
children | 0ad468912ff3 |
rev | line source |
---|---|
25
64a51a42c01f
Assign copyright correctly
Andre Heinecke <andre.heinecke@intevation.de>
parents:
12
diff
changeset
|
1 /* Copyright (C) 2015 by ETH Zürich |
64a51a42c01f
Assign copyright correctly
Andre Heinecke <andre.heinecke@intevation.de>
parents:
12
diff
changeset
|
2 * Software engineering by Intevation GmbH |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
3 * |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=2) |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
6 * See LICENSE.txt for details. |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
7 */ |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
8 #include "folderselectdialog.h" |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
9 #include "constants.h" |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
10 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
11 #include <QSortFilterProxyModel> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
12 #include <QStandardItemModel> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
13 #include <QTableView> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
14 #include <QVBoxLayout> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
15 #include <QLineEdit> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
16 #include <QLabel> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
17 #include <QApplication> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
18 #include <QStyle> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
19 #include <QFileDialog> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
20 #include <QStandardPaths> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
21 #include <QPushButton> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
22 #include <QHeaderView> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
23 #include <QDebug> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
24 #include <QSettings> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
25 #include <QStringList> |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
26 #include <QStandardItem> |
45
213d9163dab0
Add error handling to the folder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
25
diff
changeset
|
27 #include <QMessageBox> |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
28 |
84
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
29 static ulong ipStringToLong(const QString str) { |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
30 QStringList octets = str.split("."); |
99
0cf81afa82c1
Fix compiler warning about logic error
Andre Heinecke <andre.heinecke@intevation.de>
parents:
90
diff
changeset
|
31 if (!(octets.size() > 3)) { |
84
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
32 qWarning() << "invalid call to str to long"; |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
33 return 0; |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
34 } |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
35 ulong s1 = octets.at(0).toLong(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
36 ulong s2 = octets.at(1).toLong(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
37 ulong s3 = octets.at(2).toLong(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
38 ulong s4 = octets.at(3).toLong(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
39 |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
40 return (s1 << 24) | (s2 << 16) | (s3 << 8) | s4; |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
41 } |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
42 |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
43 class IPAwareSortModel : public QSortFilterProxyModel |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
44 { |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
45 public: |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
46 bool lessThan(const QModelIndex &left, |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
47 const QModelIndex &right) const |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
48 { |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
49 QString leftString = sourceModel()->data(left).toString(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
50 QString rightString = sourceModel()->data(right).toString(); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
51 |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
52 static QRegExp ipPattern("\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
53 if (ipPattern.indexIn(leftString) != -1 && ipPattern.indexIn(rightString) != -1) { |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
54 return ipStringToLong(leftString) > ipStringToLong(rightString); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
55 } else { |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
56 return QSortFilterProxyModel::lessThan(left, right); |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
57 } |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
58 } |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
59 }; |
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
60 |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
61 FolderSelectDialog::FolderSelectDialog(const QString& startFolder, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
62 const QString& folderPattern, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
63 const QString& pathLabel, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
64 QWidget * parent, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
65 Qt::WindowFlags f) : |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
66 QDialog(parent, f), |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
67 mCurFolder(startFolder), |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
68 mFolderPattern(folderPattern), |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
69 mPathLabelString(pathLabel), |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
70 mPathLabel(NULL), |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
71 mPathLineEdit(NULL) |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
72 { |
84
90c297a2a3dd
Sort IP Addresses by their actual number in folder selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
79
diff
changeset
|
73 mSortModel = new IPAwareSortModel(); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
74 mModel = new QStandardItemModel(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
75 mShowPathSelection = !pathLabel.isEmpty(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
76 setupGUI(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
77 if (mShowPathSelection) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
78 mPathLabel->setText("<b>" + pathLabel + ":</b> "); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
79 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
80 setFolder(mCurFolder); |
50
07744e276579
Add icon also for non Windows systems
Andre Heinecke <andre.heinecke@intevation.de>
parents:
45
diff
changeset
|
81 #ifndef Q_OS_WIN |
07744e276579
Add icon also for non Windows systems
Andre Heinecke <andre.heinecke@intevation.de>
parents:
45
diff
changeset
|
82 QIcon windowIcon = QIcon(":/icon-64.png"); |
07744e276579
Add icon also for non Windows systems
Andre Heinecke <andre.heinecke@intevation.de>
parents:
45
diff
changeset
|
83 setWindowIcon(windowIcon); |
07744e276579
Add icon also for non Windows systems
Andre Heinecke <andre.heinecke@intevation.de>
parents:
45
diff
changeset
|
84 #endif |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
85 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
86 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
87 void FolderSelectDialog::setupGUI() { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
88 QVBoxLayout *base = new QVBoxLayout; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
89 QHBoxLayout *folderChangeArea = new QHBoxLayout; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
90 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
91 if (mShowPathSelection) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
92 mPathLabel = new QLabel; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
93 folderChangeArea->addWidget(mPathLabel); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
94 base->addLayout(folderChangeArea); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
95 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
96 QPushButton *folderSelect = new QPushButton(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
97 folderSelect->setToolTip(tr("Select folder")); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
98 folderSelect->setIcon(QApplication::style()->standardIcon(QStyle::SP_DirIcon)); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
99 connect(folderSelect, &QPushButton::clicked, this, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
100 &FolderSelectDialog::changeFolderClicked); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
101 folderChangeArea->addWidget(folderSelect); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
102 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
103 mPathLineEdit = new QLineEdit; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
104 mPathLineEdit->setClearButtonEnabled(true); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
105 connect(mPathLineEdit, &QLineEdit::textChanged, this, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
106 &FolderSelectDialog::pathLineChanged); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
107 folderChangeArea->addWidget(mPathLineEdit); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
108 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
109 mGoButton = new QPushButton(tr("Go")); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
110 mGoButton->setEnabled(false); |
90
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
111 |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
112 QPushButton *backBtn = new QPushButton; |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
113 backBtn->setIcon(QApplication::style()->standardIcon(QStyle::SP_ArrowBack)); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
114 backBtn->setToolTip(tr("Back to exam selection.")); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
115 |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
116 folderChangeArea->addWidget(mGoButton); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
117 connect(mGoButton, &QPushButton::clicked, this, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
118 &FolderSelectDialog::goClicked); |
79
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
119 connect(mPathLineEdit, &QLineEdit::returnPressed, this, |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
120 &FolderSelectDialog::goClicked); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
121 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
122 |
88
3916cb3c9105
Add new FilterSort model that allows to include empty values
Andre Heinecke <andre.heinecke@intevation.de>
parents:
86
diff
changeset
|
123 mFilterWidget = new FilterWidget(mSortModel, false); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
124 base->addWidget(mFilterWidget); |
88
3916cb3c9105
Add new FilterSort model that allows to include empty values
Andre Heinecke <andre.heinecke@intevation.de>
parents:
86
diff
changeset
|
125 connect(mSortModel, &QSortFilterProxyModel::sourceModelChanged, |
3916cb3c9105
Add new FilterSort model that allows to include empty values
Andre Heinecke <andre.heinecke@intevation.de>
parents:
86
diff
changeset
|
126 mFilterWidget, &FilterWidget::headersChanged); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
127 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
128 mView = new QTableView; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
129 mView->setModel(mSortModel); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
130 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
131 mView->setSelectionBehavior(QAbstractItemView::SelectRows); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
132 mView->setSelectionMode(QAbstractItemView::SingleSelection); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
133 mView->setSortingEnabled(true); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
134 mView->setEditTriggers(QAbstractItemView::NoEditTriggers); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
135 connect(mView->selectionModel(), &QItemSelectionModel::selectionChanged, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
136 this, &FolderSelectDialog::selectionChanged); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
137 connect(mView, &QTableView::doubleClicked, this, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
138 &FolderSelectDialog::wantToAccept); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
139 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
140 base->addWidget(mView); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
141 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
142 QHBoxLayout * bottomButtons = new QHBoxLayout; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
143 base->addLayout(bottomButtons); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
144 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
145 mOkButton = new QPushButton(tr("Ok")); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
146 mOkButton->setEnabled(false); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
147 connect(mOkButton, &QPushButton::clicked, this, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
148 &FolderSelectDialog::wantToAccept); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
149 bottomButtons->addStretch(-1); |
90
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
150 |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
151 QPushButton *backBtn = NULL; |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
152 if (!mShowPathSelection) { |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
153 backBtn = new QPushButton(tr("Back")); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
154 backBtn->setToolTip(tr("Back to exam selection.")); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
155 connect(backBtn, &QPushButton::clicked, this, |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
156 &FolderSelectDialog::backClicked); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
157 bottomButtons->addWidget(backBtn); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
158 } |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
159 |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
160 bottomButtons->addWidget(mOkButton); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
161 setLayout(base); |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
162 resize(700, 600); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
163 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
164 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
165 void FolderSelectDialog::selectionChanged (const QItemSelection& selected, |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
166 const QItemSelection& deselected) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
167 mOkButton->setEnabled(!selected.indexes().isEmpty()); |
90
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
168 if (mOkButton->isEnabled()) { |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
169 mOkButton->setFocus(); |
c3000fa6ca56
Add back button to subfolder selection dialog
Andre Heinecke <andre.heinecke@intevation.de>
parents:
88
diff
changeset
|
170 } |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
171 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
172 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
173 void FolderSelectDialog::pathLineChanged() { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
174 const QString path = mPathLineEdit->text(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
175 if (path.isEmpty()) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
176 mGoButton->setEnabled(false); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
177 return; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
178 } |
79
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
179 mGoButton->setEnabled(true); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
180 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
181 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
182 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
183 void FolderSelectDialog::goClicked() { |
79
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
184 const QString path = mPathLineEdit->text(); |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
185 QDir dir(path); |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
186 if (!dir.exists()) { |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
187 QMessageBox::warning(this, tr("Error!"), tr("Failed to access directory: '%1'").arg(path)); |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
188 mGoButton->setEnabled(false); |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
189 return; |
ca8d3cfe8ba1
Do not check path existence while typing
Andre Heinecke <andre.heinecke@intevation.de>
parents:
61
diff
changeset
|
190 } |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
191 setFolder(mPathLineEdit->text()); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
192 QSettings settings; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
193 /* assuming go is only available in root folder mode */ |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
194 settings.setValue(ROOT_FOLDER_KEY, mPathLineEdit->text()); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
195 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
196 |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
197 QString stripQuotes (const QString &in) |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
198 { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
199 QString out = in; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
200 if (in.startsWith("\"")) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
201 out = out.right(out.size()-1); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
202 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
203 if (in.endsWith("\"")) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
204 out = out.left(out.size()-1); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
205 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
206 return out; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
207 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
208 |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
209 QMap <QString, QString> readExtraColumns(const QString &path) |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
210 { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
211 QMap <QString, QString> ret; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
212 |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
213 QFile file(path); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
214 if (!file.open(QIODevice::ReadOnly)) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
215 qDebug () << "Failed to open: " << path; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
216 return ret; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
217 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
218 QTextStream in(&file); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
219 |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
220 while (!in.atEnd()) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
221 QString line = in.readLine(); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
222 int equalsign = line.indexOf("="); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
223 if (equalsign != -1) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
224 QString name = stripQuotes(line.left(equalsign).replace (QStringLiteral("export "), "")); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
225 QString value = stripQuotes(line.right(line.size() - equalsign - 1)); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
226 ret.insert (name, value); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
227 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
228 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
229 return ret; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
230 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
231 |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
232 void FolderSelectDialog::setFolder(const QString& folder) { |
61
de148cd023a1
Do not print errors if the folder is not set.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
50
diff
changeset
|
233 if (folder.isEmpty()) { |
de148cd023a1
Do not print errors if the folder is not set.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
50
diff
changeset
|
234 return; |
de148cd023a1
Do not print errors if the folder is not set.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
50
diff
changeset
|
235 } |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
236 mCurFolder = folder; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
237 if (mPathLineEdit) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
238 mPathLineEdit->setText(mCurFolder); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
239 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
240 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
241 QStringList columns = mFolderPattern.split(PATTERN_SEPERATOR); |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
242 int patternSize = columns.size(); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
243 QDir dir(folder); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
244 mModel->clear(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
245 qDebug() << "Folder set to: " << folder; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
246 foreach (const QString & subfolder, dir.entryList(QDir::Dirs | |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
247 QDir::Readable | |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
248 QDir::NoDotAndDotDot)) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
249 qDebug() << "Looking at: " << subfolder; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
250 QStringList itemData = subfolder.split(PATTERN_SEPERATOR); |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
251 if (itemData.size() != patternSize) { |
100
7c84242971cb
Don't warn if folders do not match pattern
Andre Heinecke <andre.heinecke@intevation.de>
parents:
99
diff
changeset
|
252 qDebug() << "Folder does not match pattern: " << subfolder; |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
253 continue; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
254 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
255 QList<QStandardItem*> items; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
256 foreach (const QString& part, itemData) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
257 QStandardItem * item = new QStandardItem(part); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
258 item->setData(dir.absoluteFilePath(subfolder)); |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
259 QFileInfo fi (dir.absoluteFilePath(subfolder + "/.exam-setup-user")); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
260 items.append(item); |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
261 if (fi.isReadable()) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
262 const QMap<QString, QString> map = readExtraColumns (fi.filePath()); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
263 |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
264 Q_FOREACH (const QString &name, map.keys()) |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
265 { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
266 qDebug() << "Adding extra column: " << name; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
267 if (!columns.contains(name)) { |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
268 columns << name; |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
269 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
270 QStandardItem * subitem = new QStandardItem(map[name]); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
271 items.append(subitem); |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
272 } |
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
273 } |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
274 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
275 mModel->appendRow(items); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
276 } |
101
8ed21aa68021
Read .exam-setup-user in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
100
diff
changeset
|
277 mModel->setHorizontalHeaderLabels(columns); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
278 mSortModel->setSourceModel(mModel); |
86
a32406f8832f
Fix resize to contents in folderselection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
84
diff
changeset
|
279 mView->resizeColumnsToContents(); |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
280 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
281 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
282 void FolderSelectDialog::wantToAccept() { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
283 QItemSelectionModel *selection = mView->selectionModel(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
284 QModelIndexList selected = selection->selectedIndexes(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
285 if (selected.isEmpty()) { /* Ok should not be enabled in that case */ |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
286 return; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
287 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
288 const QString folder = selected[0].data(Qt::UserRole + 1).toString(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
289 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
290 emit folderSelected(folder); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
291 accept(); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
292 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
293 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
294 void FolderSelectDialog::changeFolderClicked() |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
295 { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
296 const QString oldFolder = mCurFolder; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
297 const QString startLoc = mCurFolder.isEmpty() ? |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
298 QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) : |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
299 mCurFolder; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
300 |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
301 QString outFolder = QFileDialog::getExistingDirectory( |
12
971bd39a6116
German translations
Andre Heinecke <andre.heinecke@intevation.de>
parents:
9
diff
changeset
|
302 this, tr("Select %1").arg(mPathLabelString), |
9
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
303 startLoc); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
304 if (outFolder.isEmpty()) { |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
305 /* User aborted */ |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
306 return; |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
307 } |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
308 setFolder(outFolder); |
e3c8f61e45a9
Implement folderselection dialogs
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
309 } |