DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
dbe
src
widgets
IncludeFileWidget.cpp
Go to the documentation of this file.
1
// DUNE DAQ modification notice:
2
// This file has been modified from the original ATLAS dbe source for the DUNE DAQ project.
3
// Fork baseline commit: dbe-02-12-17 (2022-05-12).
4
// Renamed since fork: no.
5
6
#include "
dbe/IncludeFileWidget.hpp
"
7
#include "
dbe/Exceptions.hpp
"
8
#include "
dbe/MainWindow.hpp
"
9
#include "
dbe/StyleUtility.hpp
"
10
#include "
dbe/confaccessor.hpp
"
11
#include "
dbe/config_api_commands.hpp
"
12
#include "
dbe/config_api_get.hpp
"
13
#include "
dbe/messenger.hpp
"
14
#include "ui_IncludeFileWidget.h"
15
16
#include <QApplication>
17
#include <QUrl>
18
19
#include <boost/scope_exit.hpp>
20
#include <cstdlib>
21
22
dbe::IncludeFileWidget::~IncludeFileWidget
() =
default
;
23
24
dbe::IncludeFileWidget::IncludeFileWidget
(QString FilePath, QWidget* parent)
25
: QWidget(parent)
26
,
ui
(new
Ui
::
IncludeFileWidget
)
27
,
CreateWidget
(nullptr)
28
,
DatabasePath
(FilePath)
29
,
Removed
(false)
30
,
StatusBar
(nullptr)
31
,
SelectFile
(nullptr)
32
{
33
ui
->setupUi(
this
);
34
36
ui
->AddLabel->setStyleSheet(
"QLabel{background-color:#8DAA2E; color:#facd64; font:bold14px; border-style:outset; "
37
"border-width:2px; border-radius:10px;"
38
"border-color:beige; font:bold14px; min-width:10em; padding: 6px;}"
);
39
ui
->RemoveLabel->setStyleSheet(
40
"QLabel{background-color:#b5351b; color:#facd64; font:bold14px; border-style:outset;"
41
"border-width:2px; border-radius:10px; border-color:beige; font:bold14px; min-width:10em; padding:6px;}"
);
42
setWindowTitle(QString(
"Edit Included Files for Database : %1"
).arg(QFileInfo(FilePath).fileName()));
43
44
StatusBar
=
new
QStatusBar(
ui
->StatusFrame);
45
StatusBar
->setSizeGripEnabled(
false
);
46
ui
->StatusFrame->setFrameStyle(QFrame::NoFrame);
47
ui
->StatusLayout->addWidget(
StatusBar
);
48
49
StatusBar
->setAutoFillBackground(
true
);
50
StatusBar
->showMessage(
"Select files to include or to remove from include!"
);
51
52
SetRemoveComboBox
();
53
54
SelectFile
=
new
QFileDialog(
this
, tr(
"Open File"
),
"."
, tr(
"XML files (*.xml)"
));
55
SelectFile
->setFileMode(QFileDialog::ExistingFiles);
56
SelectFile
->setViewMode(QFileDialog::Detail);
57
SelectFile
->setAcceptMode(QFileDialog::AcceptOpen);
58
59
QString TDAQ_DB_REPOSITORY = getenv(
"TDAQ_DB_REPOSITORY"
);
60
if
(TDAQ_DB_REPOSITORY.isEmpty() ==
false
) {
61
QString TDAQ_DB_USER_REPOSITORY = getenv(
"TDAQ_DB_USER_REPOSITORY"
);
62
FolderPathList
= TDAQ_DB_USER_REPOSITORY.split(
":"
, Qt::SkipEmptyParts);
63
64
FolderPathList
.append(
dbe::MainWindow::findthis
()->find_db_repository_dir());
65
}
else
{
66
QString DUNEDAQ_DB_PATH = getenv(
"DUNEDAQ_DB_PATH"
);
67
FolderPathList
= DUNEDAQ_DB_PATH.split(
":"
, Qt::SkipEmptyParts);
68
}
69
70
for
(QString& PathName :
FolderPathList
) {
71
if
(!PathName.endsWith(
"/"
)) {
72
PathName.append(
"/"
);
73
}
74
}
75
76
QList<QUrl> List =
SelectFile
->sidebarUrls();
77
78
if
(!
FolderPathList
.isEmpty()) {
79
dbPath
=
FolderPathList
;
80
81
for
(
const
QString& Dir :
dbPath
) {
82
ui
->DirectoryCombo->addItem(Dir);
83
QString TDAqDir = QString(
"file://"
).append(Dir);
84
QUrl URL = QUrl(TDAqDir);
85
List << URL;
86
}
87
}
88
89
SelectFile
->setSidebarUrls(List);
90
SelectFile
->setOption(QFileDialog::DontResolveSymlinks,
true
);
91
ui
->AddToIncludeButton->setDisabled(
true
);
92
ui
->RemoveButton->setDisabled(
true
);
93
94
ui
->AddFileLine->setSelectionMode(QAbstractItemView::NoSelection);
95
96
SetController
();
97
}
98
99
void
100
dbe::IncludeFileWidget::keyPressEvent
(QKeyEvent* event)
101
{
102
if
(event->key() == Qt::Key_Escape) {
103
close();
104
}
105
QWidget::keyPressEvent(event);
106
}
107
108
void
109
dbe::IncludeFileWidget::SetRemoveComboBox
()
110
{
111
QStringList IncludeList(
dbe::config::api::get::file::inclusions_singlefile
(
DatabasePath
));
112
113
if
(!IncludeList.isEmpty()) {
114
if
(IncludeList.contains(
DatabasePath
)) {
115
IncludeList.removeOne(
DatabasePath
);
116
}
117
118
ui
->RemoveCombo->clear();
119
ui
->RemoveCombo->addItems(IncludeList);
120
}
121
}
122
123
void
124
dbe::IncludeFileWidget::SetController
()
125
{
126
connect(
ui
->SelectFileButton, SIGNAL(clicked()),
this
, SLOT(
SelectFileToInclude
()), Qt::UniqueConnection);
127
connect(
ui
->CreateFileButton, SIGNAL(clicked()),
this
, SLOT(
CreateFileToInclude
()), Qt::UniqueConnection);
128
connect(
ui
->AddToIncludeButton, SIGNAL(clicked()),
this
, SLOT(
AddFileToInclude
()), Qt::UniqueConnection);
129
connect(
ui
->RemoveButton, SIGNAL(clicked()),
this
, SLOT(
RemoveFileFromInclude
()), Qt::UniqueConnection);
130
connect(
ui
->RemoveCombo, SIGNAL(activated(
int
)),
this
, SLOT(
RemoveFileFromInclude
(
int
)), Qt::UniqueConnection);
131
connect(
ui
->DirectoryCombo,
132
SIGNAL(activated(
const
QString&)),
133
this
,
134
SLOT(
SetDirectory
(
const
QString&)),
135
Qt::UniqueConnection);
136
connect(
ui
->ExitButton, SIGNAL(clicked()),
this
, SLOT(close()));
137
}
138
139
void
140
dbe::IncludeFileWidget::SelectFileToInclude
()
141
{
142
ui
->AddFileLine->clear();
143
QStringList Files;
144
145
if
(!
Directory
.isEmpty()) {
146
SelectFile
->setDirectory(
Directory
);
147
}
148
149
if
(
SelectFile
->exec()) {
150
Files =
SelectFile
->selectedFiles();
151
}
152
153
if
(Files.isEmpty()) {
154
return
;
155
}
156
157
for
(
const
QString& FileToInclude : Files) {
158
QFileInfo f(FileToInclude);
159
160
if
(
Directory
.isEmpty()) {
161
ui
->AddFileLine->addItem(f.absoluteFilePath());
162
}
else
{
163
ui
->AddFileLine->addItem(f.absoluteFilePath().remove(
Directory
+ QString(
'/'
), Qt::CaseSensitive));
164
}
165
}
166
167
CheckInclude
();
168
}
169
170
void
171
dbe::IncludeFileWidget::AddFileToInclude
()
172
{
173
BOOST_SCOPE_EXIT(
void
)
174
{
175
QApplication::restoreOverrideCursor();
176
}
177
BOOST_SCOPE_EXIT_END
178
179
QApplication::setOverrideCursor(Qt::WaitCursor);
180
181
for
(
int
i = 0; i <
ui
->AddFileLine->count(); ++i) {
182
QString File =
ui
->AddFileLine->item(i)->text();
183
184
if
(!File.isEmpty()) {
186
for
(QString& PathFile :
FolderPathList
) {
187
if
(File.startsWith(PathFile)) {
188
File = File.replace(0, PathFile.size(),
""
);
189
break
;
190
}
191
}
192
193
config::api::commands::file::add
(
DatabasePath
, File);
194
195
StatusBar
->setPalette(QApplication::palette(
this
));
196
StatusBar
->showMessage(QString(
"The file %1 was added to the included files"
).arg(File));
197
}
198
}
199
200
SetRemoveComboBox
();
201
202
ui
->AddFileLine->clear();
203
ui
->AddToIncludeButton->setDisabled(
true
);
204
}
205
206
void
207
dbe::IncludeFileWidget::AddNewFileToInclude
(
const
QString& File)
208
{
209
ui
->AddFileLine->clear();
210
211
QString includeFilePath;
212
includeFilePath = File;
213
214
if
(includeFilePath.isEmpty()) {
215
return
;
216
}
217
218
QFileInfo includeFile = QFileInfo(includeFilePath);
219
220
if
(!includeFile.isFile()) {
221
StatusBar
->setPalette(
StyleUtility::AlertStatusBarPallete
);
222
StatusBar
->showMessage(QString(
"The file is NOT accessible. Check before usage"
));
223
}
else
{
224
QString fileToInclude;
225
226
if
(
Directory
.isEmpty()) {
227
fileToInclude = includeFile.absoluteFilePath();
228
}
else
if
((includeFile.absoluteDir().canonicalPath()).compare(
Directory
) == 0)
229
fileToInclude = includeFile.absoluteFilePath().remove(
Directory
+ QString(
'/'
), Qt::CaseSensitive);
230
else
{
231
fileToInclude = includeFile.absoluteFilePath();
232
}
233
234
ui
->AddFileLine->addItem(fileToInclude);
235
ui
->AddToIncludeButton->setDisabled(
false
);
236
}
237
}
238
239
void
240
dbe::IncludeFileWidget::RemoveFileFromInclude
()
241
{
242
if
(
ui
->RemoveCombo->currentIndex() != -1) {
243
BOOST_SCOPE_EXIT(
void
)
244
{
245
QApplication::restoreOverrideCursor();
246
}
247
BOOST_SCOPE_EXIT_END
248
249
QApplication::setOverrideCursor(Qt::WaitCursor);
250
251
QString File =
ui
->RemoveCombo->currentText();
252
253
config::api::commands::file::remove
(
DatabasePath
, File);
254
Removed
=
true
;
255
StatusBar
->setPalette(QApplication::palette(
this
));
256
StatusBar
->showMessage(QString(
"The file %1 was removed from the included files"
).arg(File));
257
SetRemoveComboBox
();
258
}
else
{
259
StatusBar
->setPalette(
StyleUtility::AlertStatusBarPallete
);
260
StatusBar
->showMessage(QString(
"The file is NOT selected. Use combo box to select one."
));
261
}
262
}
263
264
void
265
dbe::IncludeFileWidget::RemoveFileFromInclude
(
int
)
266
{
267
if
(
ui
->RemoveCombo->currentIndex() != -1) {
268
ui
->RemoveButton->setEnabled(
true
);
269
StatusBar
->setPalette(QApplication::palette(
this
));
270
StatusBar
->showMessage(QString(
"The file %1 will be removed from the included files of %2"
)
271
.arg(QFileInfo(
ui
->RemoveCombo->currentText()).fileName())
272
.arg(QFileInfo(
DatabasePath
).fileName()));
273
}
274
}
275
276
void
277
dbe::IncludeFileWidget::SetDirectory
(
const
QString& Dir)
278
{
279
if
(
dbPath
.contains(Dir, Qt::CaseSensitivity::CaseSensitive) && QDir(Dir).exists()) {
280
Directory
= Dir;
281
SelectFile
->setDirectory(
Directory
);
282
}
else
{
283
Directory
.clear();
284
SelectFile
->setDirectory(QDir(
"."
));
285
}
286
}
287
288
void
289
dbe::IncludeFileWidget::CheckInclude
()
290
{
291
SetRemoveComboBox
();
292
293
if
(
ui
->AddFileLine->count() == 0) {
294
StatusBar
->setPalette(
StyleUtility::AlertStatusBarPallete
);
295
StatusBar
->showMessage(QString(
"Select existing file!"
));
296
ui
->AddToIncludeButton->setDisabled(
true
);
297
298
return
;
299
}
300
301
std::vector<int> removedItems;
302
for
(
int
i = 0; i <
ui
->AddFileLine->count(); ++i) {
303
const
QString inc =
ui
->AddFileLine->item(i)->text();
304
305
if
(inc ==
DatabasePath
) {
306
removedItems.push_back(i);
307
}
else
{
308
for
(
int
j = 0; j <
ui
->RemoveCombo->count(); ++j) {
309
if
(
ui
->RemoveCombo->itemText(j).compare(inc) == 0) {
310
removedItems.push_back(i);
311
}
312
}
313
}
314
}
315
316
if
(removedItems.empty() ==
false
) {
317
QString message =
"The following files will not be included because already included:"
;
318
319
for
(
int
i : removedItems) {
320
QListWidgetItem* item =
ui
->AddFileLine->takeItem(i);
321
message +=
"\n- "
+ item->text();
322
delete
item;
323
}
324
325
WARN
(
"File inclusion issue"
, message.toStdString());
326
}
327
328
ui
->AddToIncludeButton->setDisabled((
ui
->AddFileLine->count() == 0) ?
true
:
false
);
329
}
330
331
void
332
dbe::IncludeFileWidget::CreateFileToInclude
()
333
{
334
CreateWidget
=
new
CreateDatabaseWidget
(
nullptr
,
true
,
Directory
);
335
connect(
CreateWidget
,
336
SIGNAL(CanIncludeDatabase(
const
QString&)),
337
this
,
338
SLOT(
AddNewFileToInclude
(
const
QString&)),
339
Qt::UniqueConnection);
340
CreateWidget
->show();
341
}
Exceptions.hpp
IncludeFileWidget.hpp
MainWindow.hpp
StyleUtility.hpp
dbe::CreateDatabaseWidget::CreateDatabaseWidget
CreateDatabaseWidget(QWidget *parent=nullptr, bool Include=false, const QString &CreateDir=QString())
Definition
CreateDatabaseWidget.cpp:22
dbe::IncludeFileWidget::SetDirectory
void SetDirectory(const QString &Dir)
Definition
IncludeFileWidget.cpp:277
dbe::IncludeFileWidget::AddNewFileToInclude
void AddNewFileToInclude(const QString &File)
Definition
IncludeFileWidget.cpp:207
dbe::IncludeFileWidget::~IncludeFileWidget
~IncludeFileWidget()
dbe::IncludeFileWidget::CreateWidget
CreateDatabaseWidget * CreateWidget
Definition
IncludeFileWidget.hpp:35
dbe::IncludeFileWidget::SelectFileToInclude
void SelectFileToInclude()
Definition
IncludeFileWidget.cpp:140
dbe::IncludeFileWidget::SetController
void SetController()
Definition
IncludeFileWidget.cpp:124
dbe::IncludeFileWidget::AddFileToInclude
void AddFileToInclude()
Definition
IncludeFileWidget.cpp:171
dbe::IncludeFileWidget::keyPressEvent
void keyPressEvent(QKeyEvent *event) override
Definition
IncludeFileWidget.cpp:100
dbe::IncludeFileWidget::IncludeFileWidget
IncludeFileWidget(QString FilePath, QWidget *parent=0)
Definition
IncludeFileWidget.cpp:24
dbe::IncludeFileWidget::ui
std::unique_ptr< dbe::Ui::IncludeFileWidget > ui
Definition
IncludeFileWidget.hpp:33
dbe::IncludeFileWidget::Directory
QString Directory
Definition
IncludeFileWidget.hpp:37
dbe::IncludeFileWidget::SetRemoveComboBox
void SetRemoveComboBox()
Definition
IncludeFileWidget.cpp:109
dbe::IncludeFileWidget::SelectFile
QFileDialog * SelectFile
Definition
IncludeFileWidget.hpp:40
dbe::IncludeFileWidget::dbPath
QStringList dbPath
Definition
IncludeFileWidget.hpp:42
dbe::IncludeFileWidget::Removed
bool Removed
Definition
IncludeFileWidget.hpp:38
dbe::IncludeFileWidget::DatabasePath
QString DatabasePath
Definition
IncludeFileWidget.hpp:36
dbe::IncludeFileWidget::FolderPathList
QStringList FolderPathList
Definition
IncludeFileWidget.hpp:41
dbe::IncludeFileWidget::CreateFileToInclude
void CreateFileToInclude()
Definition
IncludeFileWidget.cpp:332
dbe::IncludeFileWidget::RemoveFileFromInclude
void RemoveFileFromInclude()
Definition
IncludeFileWidget.cpp:240
dbe::IncludeFileWidget::CheckInclude
void CheckInclude()
Definition
IncludeFileWidget.cpp:289
dbe::IncludeFileWidget::StatusBar
QStatusBar * StatusBar
Definition
IncludeFileWidget.hpp:39
dbe::MainWindow::findthis
static MainWindow * findthis()
Definition
MainWindow.cpp:1562
dbe::StyleUtility::AlertStatusBarPallete
static QPalette AlertStatusBarPallete
Definition
StyleUtility.hpp:35
dbe::config::api::get::file::inclusions_singlefile
static QStringList inclusions_singlefile(QString const &)
Definition
config_api_get.cpp:282
confaccessor.hpp
config_api_commands.hpp
config_api_get.hpp
messenger.hpp
WARN
#define WARN(...)
Definition
messenger.hpp:82
Ui
Definition
SchemaSettings.hpp:9
dbe::config::api::commands::file::remove
void remove(QString const &db, QString const &fn)
Definition
config_api_commands.cpp:235
dbe::config::api::commands::file::add
void add(QString const &db, QString const &fn)
Definition
config_api_commands.cpp:254
Generated on
for DUNE-DAQ by
1.18.0