22 m_include_menu(nullptr), m_class_menu(nullptr) {
24 QWidget::setAttribute(Qt::WA_DeleteOnClose);
28 m_ui->missing_button->hide();
31 setObjectName(QString::fromStdString(
filename));
32 auto sp =
filename.find_last_of(
'/');
33 if (sp == std::string::npos) {
40 QString(
"Schema File: %1").arg(QString::fromStdString(
filename.substr(sp))));
46 m_ui->label->setPalette(pal);
52 QString DUNEDAQ_DB_PATH = getenv (
"DUNEDAQ_DB_PATH" );
53 m_path_list = DUNEDAQ_DB_PATH.split (QLatin1Char(
':'), Qt::SkipEmptyParts );
55 if ( !path.endsWith (
"/" ) ) {
63 m_ui->textBrowser->hide();
67 m_ui->include_list->setContextMenuPolicy ( Qt::ContextMenuPolicy::CustomContextMenu );
68 m_ui->class_list->setContextMenuPolicy ( Qt::ContextMenuPolicy::CustomContextMenu );
69 connect (
m_ui->include_list, SIGNAL (itemActivated(QListWidgetItem*)),
71 connect (
m_ui->include_list, SIGNAL (customContextMenuRequested(QPoint)),
76 connect (
m_ui->active_button, SIGNAL(pressed()),
this, SLOT(
set_active()));
77 connect (
m_ui->add_button, SIGNAL(pressed()),
this, SLOT(
add_include()));
81 connect (
m_ui->class_list, SIGNAL (customContextMenuRequested(QPoint)),
85 m_ui->add_button->setEnabled(
false);
86 m_ui->active_button->setEnabled(
false);
87 m_ui->save_button->setEnabled(
false);
89 connect (
m_ui->save_button, SIGNAL(pressed()),
this, SLOT(
save_schema()));
90 connect (
m_ui->close_button, SIGNAL(pressed()),
this, SLOT(close()));
94 connect (
m_ui->class_list, SIGNAL (itemActivated(QListWidgetItem*)),
99 m_ui->include_list->clear();
103 std::set<std::string> direct_includes;
108 auto item =
new QListWidgetItem(QString::fromStdString(file));
109 item->setToolTip(QString::fromStdString(inc));
110 m_ui->include_list->addItem(item);
111 if (!direct_includes.contains(file)) {
123 m_ui->include_list->update();
129 if (relationships !=
nullptr) {
130 for (
auto rel: *relationships) {
131 auto rel_class = rel->get_class_type();
132 if (rel_class ==
nullptr) {
133 QString warning =
"<b>Warning</b> class <i>"
134 + QString::fromStdString(cls->
get_name())
135 +
"</i> has relationship "
136 + QString::fromStdString(rel->get_name())
137 +
" referring to class <i>"
138 + QString::fromStdString(rel->get_type())
139 +
"</i> which is not loaded<br>";
140 m_ui->textBrowser->insertHtml(warning);
141 m_ui->textBrowser->show();
145 auto file = rel_class->get_file()->get_full_file_name();
148 QString warning =
"<b>Warning</b> class <i>"
149 + QString::fromStdString(cls->
get_name())
150 +
"</i> has relationship "
151 + QString::fromStdString(rel->get_name())
152 +
" referring to class <i>"
153 + QString::fromStdString(rel->get_class_type()->get_name())
154 +
"</i> from " + QString::fromStdString(file)
155 +
" which is not included<br>";
156 m_ui->textBrowser->insertHtml(warning);
157 m_ui->textBrowser->show();
168 if (super_classes !=
nullptr) {
169 for (
auto sc: *super_classes) {
171 if (sclass ==
nullptr) {
172 QString warning =
"<b>Warning</b> class <i>"
173 + QString::fromStdString(cls->
get_name())
174 +
"</i> refers to super class <i>" + QString::fromStdString(*sc)
175 +
"</i> which is not known<br>";
176 m_ui->textBrowser->insertHtml(warning);
177 m_ui->textBrowser->show();
181 auto file = sclass->get_file()->get_full_file_name();
184 QString warning =
"<b>Warning</b> class <i>"
185 + QString::fromStdString(cls->
get_name())
186 +
"</i> refers to super class <i>" + QString::fromStdString(*sc)
187 +
"</i> from " + QString::fromStdString(file)
188 +
" which is not included<br>";
189 m_ui->textBrowser->insertHtml(warning);
190 m_ui->textBrowser->show();
199 std::cout <<
"Removing include file " <<
filename <<
"\n";
206 for (
auto cls: classes) {
208 if (cls->get_file()->get_full_file_name() !=
filename) {
209 auto relationships = cls->direct_relationships();
210 if (relationships !=
nullptr) {
211 for (
auto rel: *relationships) {
212 auto file = rel->get_class_type()->get_file()->get_full_file_name();
213 if (!temp_files.contains(file)) {
214 auto message = QString(
215 "Cannot remove %1 as class %2 has relationship to its %3 class").arg(
216 QString::fromStdString(
filename)).arg(
217 QString::fromStdString(cls->get_name())).arg(
218 QString::fromStdString(rel->get_class_type()->get_name()));
219 QMessageBox::warning ( 0,
"Schema editor", message );
224 auto super_classes = cls->direct_super_classes();
225 if (super_classes !=
nullptr) {
226 for (
auto sc: *super_classes) {
228 auto file = sclass->get_file()->get_full_file_name();
229 if (!temp_files.contains(file)) {
230 auto message = QString(
231 "Cannot remove %1 as class %2 has superclass %3 in %1").arg(
232 QString::fromStdString(
filename)).arg(
233 QString::fromStdString(cls->get_name())).arg(
234 QString::fromStdString(*sc));
235 QMessageBox::warning ( 0,
"Schema editor", message );
248 QMessageBox::warning (0,
"Schema editor", QString::fromStdString(exc.
what()));
283 m_ui->class_list->clear();
284 m_ui->textBrowser->clear();
286 for (
auto cls: classes) {
287 auto item =
new QListWidgetItem(QString::fromStdString(cls->get_name()));
302 m_ui->class_list->addItem(item);
304 m_ui->class_summary->setText (
305 QString(
"Total of %1 classes").arg(classes.size()));
317 m_ui->missing_button->setEnabled(
false);
318 m_ui->missing_button->hide();
321 m_ui->missing_button->setEnabled(
true);
322 m_ui->missing_button->show();
441 if (m_include_menu ==
nullptr) {
442 m_include_menu =
new QMenu (
this);
445 QAction* add =
new QAction ( tr (
"Add New Include File" ),
this );
446 connect (add, SIGNAL ( triggered() ),
this, SLOT ( add_include() ) );
447 QAction* remove =
new QAction ( tr (
"Remove Selected Include File" ),
this );
448 connect (remove, SIGNAL ( triggered() ),
this, SLOT ( remove_include() ) );
449 m_include_menu->addAction ( add );
450 m_include_menu->addAction ( remove );
452 QAction* info =
new QAction ( tr (
"Show file info" ),
this );
453 connect (info, SIGNAL ( triggered() ),
this, SLOT ( show_file_info() ) );
455 m_include_menu->addAction ( info );
458 if (m_ui->include_list->currentIndex().isValid()) {
459 m_include_menu->exec (m_ui->include_list->mapToGlobal(pos));
465 if (m_class_menu ==
nullptr) {
466 m_class_menu =
new QMenu (
this);
468 QAction * add =
new QAction (tr(
"&Add New Class"),
this );
469 connect (add, SIGNAL (triggered()),
this, SLOT (add_new_class()));
471 QAction* remove =
new QAction(tr(
"&Remove Selected Class"),
this );
472 connect (remove, SIGNAL(triggered()),
this, SLOT(remove_class()));
474 QAction* edit =
new QAction(tr(
"&Edit Selected Class"),
this );
475 connect (edit, SIGNAL (triggered()),
this, SLOT (edit_class()));
477 QAction* move =
new QAction(tr(
"&Move Selected Class"),
this );
478 connect (move, SIGNAL (triggered()),
this, SLOT (move_class()));
480 m_class_menu->addAction (add);
481 m_class_menu->addAction (edit);
482 m_class_menu->addAction (move);
483 m_class_menu->addAction (remove);
486 if (m_ui->class_list->currentIndex().isValid()) {
487 m_class_menu->exec (m_ui->class_list->mapToGlobal(pos));