DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
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
7#include "dbe/Exceptions.hpp"
8#include "dbe/MainWindow.hpp"
10#include "dbe/confaccessor.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
23
24dbe::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
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()) {
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
97}
98
99void
101{
102 if (event->key() == Qt::Key_Escape) {
103 close();
104 }
105 QWidget::keyPressEvent(event);
106}
107
108void
110{
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
123void
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
139void
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
170void
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
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
201
202 ui->AddFileLine->clear();
203 ui->AddToIncludeButton->setDisabled(true);
204}
205
206void
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()) {
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
239void
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
254 Removed = true;
255 StatusBar->setPalette(QApplication::palette(this));
256 StatusBar->showMessage(QString("The file %1 was removed from the included files").arg(File));
258 } else {
260 StatusBar->showMessage(QString("The file is NOT selected. Use combo box to select one."));
261 }
262}
263
264void
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
276void
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
288void
290{
292
293 if (ui->AddFileLine->count() == 0) {
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
331void
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}
CreateDatabaseWidget(QWidget *parent=nullptr, bool Include=false, const QString &CreateDir=QString())
void SetDirectory(const QString &Dir)
void AddNewFileToInclude(const QString &File)
CreateDatabaseWidget * CreateWidget
void keyPressEvent(QKeyEvent *event) override
IncludeFileWidget(QString FilePath, QWidget *parent=0)
std::unique_ptr< dbe::Ui::IncludeFileWidget > ui
static MainWindow * findthis()
static QPalette AlertStatusBarPallete
static QStringList inclusions_singlefile(QString const &)
#define WARN(...)
Definition messenger.hpp:82
void remove(QString const &db, QString const &fn)
void add(QString const &db, QString const &fn)