DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dbse::SchemaMainWindow Class Reference

#include <SchemaMainWindow.hpp>

Inheritance diagram for dbse::SchemaMainWindow:
[legend]
Collaboration diagram for dbse::SchemaMainWindow:
[legend]

Public Slots

void modifiedView (bool modified)
void update_models ()

Public Member Functions

 ~SchemaMainWindow ()
 SchemaMainWindow (QString SchemaFile, QWidget *parent=nullptr)

Protected Member Functions

void closeEvent (QCloseEvent *event)
void OpenSchemaFile (QString SchemaFile)

Private Slots

void OpenSchemaFile ()
void CreateNewSchema ()
void show_file_info_active_schema ()
void show_file_info (QModelIndex)
void show_file_info (QString)
void show_file_info ()
void connect_file_info (SchemaFileInfo *win)
void edit_settings ()
void SaveSchema ()
void SaveSchemaFile ()
bool SaveModifiedSchema ()
void ChangeCursorRelationship (bool State)
void ChangeCursorInheritance (bool State)
void add_tab ()
void SaveView ()
void SaveViewAs ()
void LoadView ()
void NameView ()
void LaunchClassEditor (QModelIndex Index)
void RemoveTab (int i)
void close_tab ()
void CustomContextMenuFileView (QPoint Pos)
void CustomContextMenuTableView (QPoint Pos)
void AddNewClass ()
void RemoveClass ()
void editClass ()
void SetSchemaFileActive ()
void PrintCurrentView ()
void export_current_view ()
void toggle_case_sensitive (int)
void update_view ()
void save_layout ()
void restore_layout ()
void default_layout ()

Private Member Functions

void InitialSettings ()
void InitialTab ()
void InitialTabCorner ()
void SetController ()
void BuildFileModel ()
void BuildTableModel ()
void update_window_title (QString text)
void write_view_file (const QString &fn, SchemaTab *tab)
int ShouldSaveChanges () const
int ShouldSaveViewChanges () const
bool check_schema_file (QString file)
bool save_schema_file (QString file)

Private Attributes

std::unique_ptr< dbse::Ui::SchemaMainWindow > ui
CustomFileModelFileModel
CustomTableModelTableModel
QSortFilterProxyModel * m_proxyModel
SchemaSettingsm_settings {nullptr}
QMenu * ContextMenuFileView
QMenu * ContextMenuTableView
QString m_title {"DUNE DAQ Configuration Schema editor"}
QString m_view_dir {"."}
QString m_export_path {"."}
QDir m_schema_directory {"."}
QList< QUrl > m_path_urls
bool m_save_layout_on_exit
QByteArray m_default_state
QByteArray m_default_geometry
QSize m_default_size
QPrinter * m_printer {}

Detailed Description

Definition at line 32 of file SchemaMainWindow.hpp.

Constructor & Destructor Documentation

◆ ~SchemaMainWindow()

dbse::SchemaMainWindow::~SchemaMainWindow ( )
default

◆ SchemaMainWindow()

dbse::SchemaMainWindow::SchemaMainWindow ( QString SchemaFile,
QWidget * parent = nullptr )
explicit

Definition at line 36 of file SchemaMainWindow.cpp.

37 : QMainWindow ( parent ),
38 ui ( new Ui::SchemaMainWindow ),
39 FileModel ( nullptr ),
40 TableModel ( nullptr ),
41 m_proxyModel ( new QSortFilterProxyModel() ),
42 ContextMenuFileView ( nullptr ),
43 ContextMenuTableView ( nullptr )
44{
46 m_default_state = saveState();
47 m_default_geometry = saveGeometry();
48 m_default_size = QSize(1400, 880);
49 QCoreApplication::setOrganizationName("dunedaq");
50 QCoreApplication::setApplicationName("dbse");
53
54 InitialTab();
57 setFocusPolicy( Qt::StrongFocus );
58
59 OpenSchemaFile(SchemaFile);
60}
CustomFileModel * FileModel
QSortFilterProxyModel * m_proxyModel
CustomTableModel * TableModel
std::unique_ptr< dbse::Ui::SchemaMainWindow > ui
static void load()

Member Function Documentation

◆ add_tab

void dbse::SchemaMainWindow::add_tab ( )
privateslot

Definition at line 782 of file SchemaMainWindow.cpp.

783{
784 auto index = ui->TabWidget->addTab ( new SchemaTab(), "unnamed Schema View" );
785 ui->TabWidget->setCurrentIndex ( index );
786 auto tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
787 connect (tab->GetScene(), &SchemaGraphicsScene::sceneModified,
789 connect (tab->GetScene(), &SchemaGraphicsScene::saveRequested,
791}
void modifiedView(bool modified)

◆ AddNewClass

void dbse::SchemaMainWindow::AddNewClass ( )
privateslot

Definition at line 290 of file SchemaMainWindow.cpp.

◆ BuildFileModel()

void dbse::SchemaMainWindow::BuildFileModel ( )
private

Definition at line 218 of file SchemaMainWindow.cpp.

219{
220 QStringList Headers { "File Name", "Access", "Status" };
221
222 if ( FileModel != nullptr )
223 {
224 delete FileModel;
225 }
226 FileModel = new CustomFileModel ( Headers );
227
228 ui->FileView->setModel ( FileModel );
229 ui->FileView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
230 ui->FileView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
231 ui->FileView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
232}

◆ BuildTableModel()

void dbse::SchemaMainWindow::BuildTableModel ( )
private

Definition at line 234 of file SchemaMainWindow.cpp.

235{
236 QStringList Headers
237 { "Class Name" };
238
239 if ( TableModel != nullptr )
240 {
241 delete TableModel;
242 }
243 TableModel = new CustomTableModel ( Headers );
244
245 m_proxyModel->setSourceModel(TableModel);
246 ui->ClassTableView->setModel ( m_proxyModel );
247}

◆ ChangeCursorInheritance

void dbse::SchemaMainWindow::ChangeCursorInheritance ( bool State)
privateslot

Definition at line 763 of file SchemaMainWindow.cpp.

764{
765 if ( ui->SetRelationship->isChecked() )
766 {
767 ui->SetRelationship->setChecked ( false );
768 }
769
770 if ( State )
771 {
772 ui->TabWidget->setCursor ( Qt::CrossCursor );
773 }
774 else
775 {
776 ui->TabWidget->setCursor ( Qt::ArrowCursor );
777 }
778
780}
static KernelWrapper & GetInstance()
void SetInheritanceMode(bool Mode)
Editor Functions.

◆ ChangeCursorRelationship

void dbse::SchemaMainWindow::ChangeCursorRelationship ( bool State)
privateslot

Definition at line 744 of file SchemaMainWindow.cpp.

745{
746 if ( ui->SetInheritance->isChecked() )
747 {
748 ui->SetInheritance->setChecked ( false );
749 }
750
751 if ( State )
752 {
753 ui->TabWidget->setCursor ( Qt::CrossCursor );
754 }
755 else
756 {
757 ui->TabWidget->setCursor ( Qt::ArrowCursor );
758 }
759
761}

◆ check_schema_file()

bool dbse::SchemaMainWindow::check_schema_file ( QString file)
private

Definition at line 380 of file SchemaMainWindow.cpp.

380 {
381 std::string filename = qfilename.toStdString();
382 std::set<std::string> includes;
384
385 QString advice{"<br><br>Use the File info window to fix the problem."};
386 for (auto cls: KernelWrapper::GetInstance().get_schema_classes(filename)) {
387 auto relationships = cls->direct_relationships();
388 if (relationships != nullptr) {
389 for (auto rel: *relationships) {
390 auto rel_class = rel->get_class_type();
391 if (rel_class == nullptr) {
392 QString warning = "<b>Warning</b> class <i>"
393 + QString::fromStdString(cls->get_name())
394 + "</i> has relationship "
395 + QString::fromStdString(rel->get_name())
396 + " referring to class <i>"
397 + QString::fromStdString(rel->get_type())
398 + "</i> which is not loaded<br>";
399 QMessageBox::warning(0,
400 "Check Schema",
401 warning+advice,
402 QMessageBox::Ok);
403 show_file_info(qfilename);
404 return false;
405 }
406 auto file = rel_class->get_file()->get_full_file_name();
407 if (file != filename && !includes.contains(file)) {
408 QString warning = "<b>Warning</b> class <i>"
409 + QString::fromStdString(cls->get_name())
410 + "</i> has relationship "
411 + QString::fromStdString(rel->get_name())
412 + " referring to class <i>"
413 + QString::fromStdString(rel->get_class_type()->get_name())
414 + "</i> from " + QString::fromStdString(file)
415 + " which is not included by " + qfilename;
416 QMessageBox::warning(0,
417 "Check Schema",
418 warning+advice,
419 QMessageBox::Ok);
420 show_file_info(qfilename);
421 return false;
422 }
423 }
424 }
425
426 auto super_classes = cls->direct_super_classes();
427 if (super_classes != nullptr) {
428 for (auto sc: *super_classes) {
429 auto sclass = KernelWrapper::GetInstance().FindClass(*sc);
430 if (sclass == nullptr) {
431 QString warning = "<b>Warning</b> class <i>"
432 + QString::fromStdString(cls->get_name())
433 + "</i> refers to super class <i>" + QString::fromStdString(*sc)
434 + "</i> which is not known<br>";
435 QMessageBox::warning(0,
436 "Check Schema",
437 warning+advice,
438 QMessageBox::Ok);
439 show_file_info(qfilename);
440 return false;
441 }
442 auto file = sclass->get_file()->get_full_file_name();
443 if (file != filename && !includes.contains(file)) {
444 QString warning = "<b>Warning</b> class <i>"
445 + QString::fromStdString(cls->get_name())
446 + "</i> refers to super class <i>" + QString::fromStdString(*sc)
447 + "</i> from " + QString::fromStdString(file)
448 + " which is not included by" + qfilename;
449 QMessageBox::warning(0,
450 "Check Schema",
451 warning+advice,
452 QMessageBox::Ok);
453 show_file_info(qfilename);
454 return false;
455 }
456 }
457 }
458 }
459 return true;
460}
dunedaq::oks::OksClass * FindClass(std::string ClassName) const
void get_all_includes(const std::string &FileName, std::set< std::string > &IncludedFiles)
void warning(const Issue &issue)
Definition ers.hpp:126

◆ close_tab

void dbse::SchemaMainWindow::close_tab ( )
privateslot

Definition at line 989 of file SchemaMainWindow.cpp.

989 {
990 RemoveTab(ui->TabWidget->currentIndex());
991}

◆ closeEvent()

void dbse::SchemaMainWindow::closeEvent ( QCloseEvent * event)
protected

Definition at line 541 of file SchemaMainWindow.cpp.

542{
543 int UserChoice = ShouldSaveChanges();
544
545 if ( UserChoice == QMessageBox::Save )
546 {
547 if (!SaveModifiedSchema()) {
548 event->ignore();
549 return;
550 }
551 }
552 else if ( UserChoice == QMessageBox::Cancel )
553 {
554 event->ignore();
555 return;
556 }
557
558 UserChoice = ShouldSaveViewChanges();
559 if ( UserChoice == QMessageBox::Cancel )
560 {
561 event->ignore();
562 return;
563 }
564
566
568 save_layout();
569 }
570
571 for ( QWidget * Widget : QApplication::allWidgets() )
572 {
573 Widget->close();
574 }
575
576 event->accept();
577}

◆ connect_file_info

void dbse::SchemaMainWindow::connect_file_info ( SchemaFileInfo * win)
privateslot

Definition at line 214 of file SchemaMainWindow.cpp.

◆ CreateNewSchema

void dbse::SchemaMainWindow::CreateNewSchema ( )
privateslot

Definition at line 691 of file SchemaMainWindow.cpp.

692{
693 QFileDialog FileDialog (
694 this, tr ( "Create New schema File" ), ".",
695 tr ( "XML schema files (*.schema.xml);;All files (*)" ) );
696 FileDialog.setAcceptMode ( QFileDialog::AcceptSave );
697 FileDialog.setFileMode ( QFileDialog::AnyFile );
698 FileDialog.setViewMode ( QFileDialog::Detail );
699 FileDialog.setDirectory ( m_schema_directory );
700 FileDialog.setSidebarUrls(m_path_urls);
701 FileDialog.setLabelText(QFileDialog::Accept, "Create");
702 if ( !FileDialog.exec() )
703 {
704 return;
705 }
706
707 QStringList FilesSelected = FileDialog.selectedFiles();
708 if ( FilesSelected.isEmpty() )
709 {
710 QMessageBox::warning ( 0, "Schema editor",
711 QString ( "Please provide a name for the schema !" ) );
712 return;
713 }
714
715 QString FileName = FilesSelected.at(0);
716 if ( !FileName.endsWith ( ".schema.xml" ) )
717 {
718 FileName.append ( ".schema.xml" );
719 }
720
721 QFile FileInfo ( FileName );
722 std::string FileNameStd = FileInfo.fileName().toStdString();
723
724 try
725 {
727 KernelWrapper::GetInstance().SaveSchema ( FileNameStd );
730 ui->CreateNewSchema->setDisabled (true );
731 ui->OpenFileSchema->setDisabled (true );
732 }
733 catch ( oks::exception & Ex )
734 {
735 QMessageBox::warning (
736 0,
737 "Schema editor",
738 QString ( "Could not create file : %1.\n\n%2" ).arg ( QString::fromStdString (
739 FileNameStd ) ).arg (
740 QString ( Ex.what() ) ) );
741 }
742}
void SaveSchema(const std::string &file) const
void CreateNewSchema(const std::string &SchemaName) const

◆ CustomContextMenuFileView

void dbse::SchemaMainWindow::CustomContextMenuFileView ( QPoint Pos)
privateslot

Definition at line 1017 of file SchemaMainWindow.cpp.

1018{
1019 if ( ContextMenuFileView == nullptr )
1020 {
1021 ContextMenuFileView = new QMenu ( this );
1022
1023 QAction * Act = new QAction ( tr ( "Set as Active Schema" ), this );
1024 connect ( Act, SIGNAL ( triggered() ), this, SLOT ( SetSchemaFileActive() ) );
1025 QAction * Sav = new QAction ( tr ( "Save Schema File" ), this );
1026 connect ( Sav, SIGNAL ( triggered() ), this, SLOT ( SaveSchemaFile() ) );
1027 QAction * info = new QAction ( tr ( "Show file info" ), this );
1028 connect ( info, SIGNAL ( triggered() ), this, SLOT ( show_file_info() ) );
1029
1030 ContextMenuFileView->addAction ( info );
1031 ContextMenuFileView->addAction ( Act );
1032 ContextMenuFileView->addAction ( Sav );
1033 }
1034
1035 QModelIndex index = ui->FileView->currentIndex();
1036
1037 if ( index.isValid() )
1038 {
1039 QStringList row = FileModel->getRowFromIndex ( index );
1040 if (row.at(1) == "RW") {
1041 ContextMenuFileView->actions().at(2)->setVisible(true);
1042 if (!row.at(2).contains("Active")) {
1043 ContextMenuFileView->actions().at(1)->setVisible(true);
1044 }
1045 else {
1046 ContextMenuFileView->actions().at(1)->setVisible(false);
1047 }
1048 }
1049 else {
1050 ContextMenuFileView->actions().at(2)->setVisible(false);
1051 ContextMenuFileView->actions().at(1)->setVisible(false);
1052 }
1053 ContextMenuFileView->exec ( ui->FileView->mapToGlobal ( Pos ) );
1054 }
1055}

◆ CustomContextMenuTableView

void dbse::SchemaMainWindow::CustomContextMenuTableView ( QPoint Pos)
privateslot

Definition at line 1057 of file SchemaMainWindow.cpp.

1058{
1059 if ( ContextMenuTableView == nullptr )
1060 {
1061 ContextMenuTableView = new QMenu ( this );
1062
1063 QAction * add = new QAction ( tr ( "&Add New Class" ), this );
1064 connect ( add, SIGNAL ( triggered() ), this, SLOT ( AddNewClass() ) );
1065
1066 QAction * remove = new QAction ( tr ( "&Remove Selected Class" ), this );
1067 connect ( remove, SIGNAL ( triggered() ), this, SLOT ( RemoveClass() ) );
1068
1069 QAction * edit = new QAction ( tr ( "&Edit Selected Class" ), this );
1070 connect ( edit, SIGNAL ( triggered() ), this, SLOT ( editClass() ) );
1071
1072 ContextMenuTableView->addAction ( add );
1073 ContextMenuTableView->addAction ( edit );
1074 ContextMenuTableView->addAction ( remove );
1075 }
1076
1077 QModelIndex Index = ui->ClassTableView->currentIndex();
1078
1079 if ( Index.isValid() )
1080 {
1081 ContextMenuTableView->exec ( ui->ClassTableView->mapToGlobal ( Pos ) );
1082 }
1083}
void remove(QString const &db, QString const &fn)
void add(QString const &db, QString const &fn)

◆ default_layout

void dbse::SchemaMainWindow::default_layout ( )
privateslot

Definition at line 1154 of file SchemaMainWindow.cpp.

1154 {
1155 restoreGeometry(m_default_geometry);
1156 restoreState(m_default_state);
1157 resize(m_default_size);
1158
1159 ui->displayDiagrams->setChecked(true);
1160 ui->TabWidget->setVisible(true);
1161 ui->StatusBar->setVisible(true);
1162 ui->displayStatus_bar->setChecked(true);
1163}

◆ edit_settings

void dbse::SchemaMainWindow::edit_settings ( )
privateslot

Definition at line 1102 of file SchemaMainWindow.cpp.

1102 {
1103 if (m_settings == nullptr) {
1104 m_settings = new SchemaSettings(this);
1105 connect(m_settings, SIGNAL(settings_updated()), this, SLOT(update_view()));
1106 }
1107 m_settings->show();
1108}
SchemaSettings * m_settings

◆ editClass

void dbse::SchemaMainWindow::editClass ( )
privateslot

Definition at line 326 of file SchemaMainWindow.cpp.

326 {
327 QModelIndex Index = ui->ClassTableView->currentIndex();
328 QModelIndex proxyIndex = m_proxyModel->mapToSource( Index );
329 QStringList Row = TableModel->getRowFromIndex ( proxyIndex );
330
331 if ( !Row.isEmpty() ) {
332 bool widget_found = false;
333 QString class_name = Row.at ( 0 );
334 OksClass * class_info = KernelWrapper::GetInstance().FindClass (
335 class_name.toStdString() );
336
337 for ( QWidget * widget : QApplication::allWidgets() ) {
338 auto editor = dynamic_cast<SchemaClassEditor *> ( widget );
339 if ( editor != nullptr ) {
340 if ( ( editor->objectName() ).compare ( class_name ) == 0 ) {
341 editor->raise();
342 editor->setVisible ( true );
343 editor->activateWindow();
344 widget_found = true;
345 }
346 }
347 }
348 if ( !widget_found ) {
349 SchemaClassEditor * editor = new SchemaClassEditor ( class_info );
350 editor->show();
351 }
352 }
353}

◆ export_current_view

void dbse::SchemaMainWindow::export_current_view ( )
privateslot

Definition at line 507 of file SchemaMainWindow.cpp.

507 {
508 auto tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
509
510 auto file = QFileDialog::getSaveFileName(
511 this, tr("Export to SVG"),
513 tr("SVG files (*.svg);;All files (*)"));
514 if (file.isEmpty()) {
515 return;
516 }
517
518 auto spos = file.lastIndexOf('/');
519 if (spos != -1) {
521 m_export_path.truncate(spos);
522 }
523
524 if (!file.endsWith(".svg")) {
525 file.append(".svg");
526 }
527 QSvgGenerator generator;
528 generator.setFileName(file);
529 auto view = tab->GetView();
530 auto vpr=view->viewport()->rect();
531 generator.setSize(QSize(vpr.width(),vpr.height()));
532 generator.setViewBox(vpr);
533
534 QPainter painter;
535 painter.begin(&generator);
536 auto scene = tab->GetScene();
537 scene->render ( &painter, QRectF(), view->viewport()->rect() );
538 painter.end();
539}

◆ InitialSettings()

void dbse::SchemaMainWindow::InitialSettings ( )
private

Definition at line 64 of file SchemaMainWindow.cpp.

65{
66 ui->setupUi ( this );
67 setWindowTitle ( m_title );
68 ui->UndoView->setStack ( KernelWrapper::GetInstance().GetUndoStack() );
69 ui->ClassTableView->horizontalHeader()->setSectionResizeMode ( QHeaderView::Stretch );
70 ui->ClassTableView->setDragEnabled ( true );
71 ui->ClassTableView->setContextMenuPolicy ( Qt::ContextMenuPolicy::CustomContextMenu );
72 ui->FileView->horizontalHeader()->setSectionResizeMode ( QHeaderView::Stretch );
73 ui->FileView->setContextMenuPolicy ( Qt::ContextMenuPolicy::CustomContextMenu );
74 ui->FileView->setSelectionBehavior ( QAbstractItemView::SelectRows );
75 ui->TabWidget->setTabsClosable ( true );
76 ui->ClassTableSearchLine->setProperty ( "placeholderText",
77 QVariant ( QString ( "Search for classes regex" ) ) );
78 ui->ClassTableSearchLine->setClearButtonEnabled(true);
79 m_proxyModel->setFilterCaseSensitivity (Qt::CaseInsensitive);
80
81 QString DUNEDAQ_DB_PATH = getenv ( "DUNEDAQ_DB_PATH" );
82 auto path_list = DUNEDAQ_DB_PATH.split (QLatin1Char(':'), Qt::SkipEmptyParts );
83 for ( QString & path : path_list ) {
84 if ( !path.endsWith ( "/" ) ) {
85 path.append ( "/" );
86 }
87 m_path_urls.append(QUrl::fromLocalFile(path));
88 }
89}

◆ InitialTab()

void dbse::SchemaMainWindow::InitialTab ( )
private

Definition at line 92 of file SchemaMainWindow.cpp.

93{
94 add_tab();
95 ui->TabWidget->removeTab ( 0 );
96}

◆ InitialTabCorner()

void dbse::SchemaMainWindow::InitialTabCorner ( )
private

Definition at line 98 of file SchemaMainWindow.cpp.

99{
100 QPushButton * new_tab_button = new QPushButton ( "+" );
101 new_tab_button->setToolTip("Open new schema view tab");
102 ui->TabWidget->setCornerWidget ( new_tab_button, Qt::TopLeftCorner );
103 connect ( new_tab_button, SIGNAL ( clicked() ), this, SLOT ( add_tab() ) );
104}

◆ LaunchClassEditor

void dbse::SchemaMainWindow::LaunchClassEditor ( QModelIndex Index)
privateslot

Definition at line 979 of file SchemaMainWindow.cpp.

980{
981 QModelIndex proxyIndex = m_proxyModel->mapToSource( Index );
982 QStringList Row = TableModel->getRowFromIndex ( proxyIndex );
983
984 if ( !Row.isEmpty() ) {
985 SchemaClassEditor::launch(Row.at ( 0 ));
986 }
987}
static void launch(QString class_name)

◆ LoadView

void dbse::SchemaMainWindow::LoadView ( )
privateslot

Definition at line 902 of file SchemaMainWindow.cpp.

902 {
903 QString ViewPath = QFileDialog::getOpenFileName (
904 this,
905 tr ("Open view file"),
907 tr("View files (*.view);;All files (*)"));
908
909 if ( !ViewPath.isEmpty() )
910 {
911 auto spos = ViewPath.lastIndexOf('/');
912 if (spos != -1) {
913 m_view_dir = ViewPath;
914 m_view_dir.truncate(spos);
915 }
916 QFile ViewFile ( ViewPath );
917 ViewFile.open ( QIODevice::ReadOnly );
918
919 auto text = QFileInfo(ViewPath).baseName();
920 auto tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
921 if (!tab->getName().isEmpty() || tab->GetScene()->IsModified()) {
922 add_tab();
923 tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
924 }
925 auto index = ui->TabWidget->currentIndex();
926 ui->TabWidget->setTabText(index, text);
927 tab->setName(text);
928 tab->setFileName(ViewPath);
929
930 QStringList ClassesNames;
931 QList<QPointF> Positions;
932 QList<QPointF> note_positions;
933 QStringList notes;
934 while ( !ViewFile.atEnd() )
935 {
936 QString Line ( ViewFile.readLine() );
937 if (!Line.isEmpty()) {
938 QStringList ObjectDescription = Line.split ( "," );
939 QPointF Position;
940 Position.setX ( ObjectDescription.at ( 1 ).toInt() );
941 Position.setY ( ObjectDescription.at ( 2 ).toInt() );
942 if (ObjectDescription.at ( 0 ) == "#") {
943 note_positions.append (Position);
944 auto note_text = ObjectDescription.at(3);
945 if (note_text.back() == '\n') {
946 note_text.chop(1);
947 }
948 note_text = note_text.replace("<br>", "\n");
949 note_text = note_text.replace("<comma>", ",");
950 notes.append ( note_text );
951 }
952 else {
953 ClassesNames.append ( ObjectDescription.at ( 0 ) );
954 Positions.append ( Position );
955 }
956 }
957 }
958 ViewFile.close();
959
960 auto message = QString("Loaded view from %1").arg(ViewPath);
961 ui->StatusBar->showMessage( message );
962
963 auto scene = tab->GetScene();
964 scene->CleanItemMap();
965 auto missing = scene->AddItemsToScene ( ClassesNames, Positions );
966 if (!missing.empty()) {
967 QString warning_text{"The following classes in "};
968 warning_text.append(QFileInfo(ViewPath).fileName());
969 warning_text.append(" are not present in the loaded schema:\n ");
970 warning_text.append(missing.join(",\n "));
971 QMessageBox::warning(this, tr("Load View"), warning_text);
972 }
973 scene->ClearModified();
974
975 scene->add_notes(notes, note_positions);
976 }
977}
Only Configuration DB opened by rdbconfig or oksconflibs plug in can be message

◆ modifiedView

void dbse::SchemaMainWindow::modifiedView ( bool modified)
slot

Definition at line 793 of file SchemaMainWindow.cpp.

793 {
794 auto index = ui->TabWidget->currentIndex();
795 auto label = ui->TabWidget->tabText(index);
796 if (modified && !label.endsWith("*")) {
797 label += "*";
798 }
799 if (!modified && label.endsWith("*")) {
800 label = label.remove('*');
801 }
802 ui->TabWidget->setTabText(index, label);
803}

◆ NameView

void dbse::SchemaMainWindow::NameView ( )
privateslot

Definition at line 805 of file SchemaMainWindow.cpp.

805 {
806 auto index = ui->TabWidget->currentIndex();
807 bool ok;
808 QString text = QInputDialog::getText(nullptr,
809 "Schema editor: rename class view",
810 "New view name:",
811 QLineEdit::Normal,
812 "New Class View",
813 &ok);
814 if(ok && !text.isEmpty()) {
815 ui->TabWidget->setTabText(index, text);
816 SchemaTab * CurrentTab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
817 CurrentTab->setName(text);
818 }
819
820 auto newtext = ui->TabWidget->tabText(index);
821}

◆ OpenSchemaFile [1/2]

void dbse::SchemaMainWindow::OpenSchemaFile ( )
privateslot

Definition at line 638 of file SchemaMainWindow.cpp.

639{
640 QFileDialog FileDialog ( this, tr ( "Open Schema File" ), ".",
641 tr ( "XML schema files (*.schema.xml);;All files (*)" ) );
642 FileDialog.setAcceptMode ( QFileDialog::AcceptOpen );
643 FileDialog.setFileMode ( QFileDialog::AnyFile );
644 FileDialog.setViewMode ( QFileDialog::Detail );
645 FileDialog.setDirectory ( m_schema_directory );
646 FileDialog.setSidebarUrls(m_path_urls);
647 QStringList FilesSelected;
648 QString SchemaPath;
649
650 if ( FileDialog.exec() )
651 {
652 FilesSelected = FileDialog.selectedFiles();
653 }
654
655 if ( FilesSelected.size() )
656 {
657 m_schema_directory = FileDialog.directory();
658 SchemaPath = FilesSelected.value ( 0 );
659 }
660
661 OpenSchemaFile(SchemaPath);
662}

◆ OpenSchemaFile() [2/2]

void dbse::SchemaMainWindow::OpenSchemaFile ( QString SchemaFile)
protected

Definition at line 584 of file SchemaMainWindow.cpp.

584 {
585 OksFile* file{nullptr};
586 if(!SchemaFile.isEmpty()) {
587 try {
588 file = KernelWrapper::GetInstance().LoadSchema(SchemaFile.toStdString());
589
590 if (m_schema_directory == QString(".")) {
591 std::vector<std::string> fnames;
593 std::string dir = fnames[0].substr(0,fnames[0].find_last_of('/'));
594 m_schema_directory.setPath(QString::fromStdString(dir));
595 }
596
597#ifdef QT_DEBUG
599#endif
600 }
601 catch(oks::exception &Ex) {
602 QMessageBox::warning(0,
603 "Load Schema",
604 QString("Could not load schema!\n\n").append(QString(Ex.what())),
605 QMessageBox::Ok);
606 }
607
608 if (KernelWrapper::GetInstance().GetActiveSchema().empty()) {
609 try {
610 KernelWrapper::GetInstance().SetActiveSchema(SchemaFile.toStdString());
611 }
612 catch (oks::CanNotSetActiveFile& exc) {
613 QMessageBox::warning(0,
614 "Load Schema",
615 QString("Could not make schema active!\n\n").append(QString(exc.what())),
616 QMessageBox::Ok);
617 }
618 }
619
622
623 update_window_title(QFileInfo(SchemaFile).fileName());
624 //ui->CreateNewSchema->setDisabled (true );
625 //ui->OpenFileSchema->setDisabled (true );
626 if (file != nullptr) {
627 check_schema_file(QString::fromStdString(file->get_full_file_name()));
628 }
629 }
630}
dunedaq::oks::OksFile * LoadSchema(const std::string &SchemaName) const
void SetActiveSchema(const std::string &ActiveSchema)
void GetSchemaFiles(std::vector< std::string > &SchemaFiles)
void update_window_title(QString text)
bool check_schema_file(QString file)

◆ PrintCurrentView

void dbse::SchemaMainWindow::PrintCurrentView ( )
privateslot

Definition at line 489 of file SchemaMainWindow.cpp.

490{
491 SchemaTab * CurrentTab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
492
493 if (m_printer == nullptr) {
494 m_printer = new QPrinter;
495 }
496
497 if ( QPrintDialog ( m_printer ).exec() == QDialog::Accepted )
498 {
499 QPainter painter ( m_printer );
500 painter.setRenderHint ( QPainter::Antialiasing );
501
502 SchemaGraphicsScene * Scene = CurrentTab->GetScene();
503 QGraphicsView * View = CurrentTab->GetView();
504 Scene->render ( &painter, QRectF(), View->viewport()->rect() );
505 }
506}

◆ RemoveClass

void dbse::SchemaMainWindow::RemoveClass ( )
privateslot

Definition at line 296 of file SchemaMainWindow.cpp.

297{
298 QModelIndex Index = ui->ClassTableView->currentIndex();
299 QModelIndex proxyIndex = m_proxyModel->mapToSource( Index );
300 QStringList Row = TableModel->getRowFromIndex ( proxyIndex );
301 OksClass * SchemaClass = KernelWrapper::GetInstance().FindClass ( Row.at (
302 0 ).toStdString() );
303
304 if ( SchemaClass->all_sub_classes()->size() != 0 )
305 {
306 QMessageBox::warning ( 0, "Schema editor",
307 QString ( "Cannot delete class because it has sub-classes." ) );
308 return;
309 }
310 else if ( KernelWrapper::GetInstance().AnyClassReferenceThis ( SchemaClass ) )
311 {
312 QMessageBox::warning ( 0, "Schema editor",
313 QString ( "Cannot delete class because some classes references it." ) );
314 return;
315 }
316 else
317 {
318 QString Name = QString::fromStdString ( SchemaClass->get_name() );
319 KernelWrapper::GetInstance().PushRemoveClassCommand ( SchemaClass, SchemaClass->get_name(),
320 SchemaClass->get_description(),
321 SchemaClass->get_is_abstract() );
323 }
324}
void PushRemoveClassCommand(dunedaq::oks::OksClass *Class, std::string ClassName, std::string ClassDescription, bool Abstract)
bool get_is_abstract() const noexcept
Definition class.hpp:389
const FList * all_sub_classes() const noexcept
Definition class.hpp:471
const std::string & get_name() const noexcept
Definition class.hpp:368
const std::string & get_description() const noexcept
Definition class.hpp:373

◆ RemoveTab

void dbse::SchemaMainWindow::RemoveTab ( int i)
privateslot

Definition at line 993 of file SchemaMainWindow.cpp.

994{
995 if ( index == -1 ) {
996 return;
997 }
998
999 auto tab = dynamic_cast<SchemaTab *> (ui->TabWidget->widget(index));
1000 if (tab->GetScene()->IsModified()) {
1001 auto choice = QMessageBox::question (
1002 0, tr ( "SchemaEditor" ),
1003 QString ( "There are unsaved changes in the schema view:\n"
1004 "Do you really want to delete this schema view?\n" ),
1005 QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel );
1006 if (choice == QMessageBox::Cancel) {
1007 return;
1008 }
1009 }
1010 ui->TabWidget->removeTab ( index );
1011 delete tab;
1012 if ( ui->TabWidget->count() == 0 ) {
1013 add_tab();
1014 }
1015}

◆ restore_layout

void dbse::SchemaMainWindow::restore_layout ( )
privateslot

Definition at line 1122 of file SchemaMainWindow.cpp.

1122 {
1123 QSettings settings;
1124 settings.beginGroup("MainWindow-layout");
1125 if (settings.contains("size")) {
1126 resize(settings.value("size").toSize());
1127 }
1128 if (settings.contains("pos")) {
1129 move(settings.value("pos").toPoint());
1130 }
1131 if (settings.contains("geometry")) {
1132 restoreGeometry(settings.value("geometry").toByteArray());
1133 }
1134 if (settings.contains("state")) {
1135 restoreState(settings.value("state").toByteArray());
1136 }
1137
1138 auto visible = settings.value("diagrams-visible", true).toBool();
1139 ui->displayDiagrams->setChecked(visible);
1140 ui->TabWidget->setVisible(visible);
1141
1142 visible = settings.value("statusbar-visible", true).toBool();
1143 ui->StatusBar->setVisible(visible);
1144 ui->displayStatus_bar->setChecked(visible);
1145
1146 ui->displayToolbar->setChecked(ui->MainToolBar->isVisible());
1147 settings.endGroup();
1148
1149 settings.beginGroup("MainWindow");
1150 m_save_layout_on_exit = settings.value("saveLayout", false).toBool();
1151 settings.endGroup();
1152}

◆ save_layout

void dbse::SchemaMainWindow::save_layout ( )
privateslot

Definition at line 1110 of file SchemaMainWindow.cpp.

1110 {
1111 QSettings settings;
1112 settings.beginGroup("MainWindow-layout");
1113 settings.setValue("size", size());
1114 settings.setValue("pos", pos());
1115 settings.setValue("geometry", saveGeometry());
1116 settings.setValue("state", saveState());
1117 settings.setValue("diagrams-visible", ui->TabWidget->isVisible());
1118 settings.setValue("statusbar-visible", ui->StatusBar->isVisible());
1119 settings.endGroup();
1120}
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size

◆ save_schema_file()

bool dbse::SchemaMainWindow::save_schema_file ( QString file)
private

Definition at line 462 of file SchemaMainWindow.cpp.

462 {
464 return false;
465 }
466 bool status;
467 QString message;
468 try {
470 message = QString ( "File %1 saved" ).arg (filename);
471 status = true;
472 }
473 catch (const oks::exception& exc) {
474 message = QString ( "Failed to save file %1" ).arg (filename);
475 status = false;
476 }
477 ui->StatusBar->showMessage( message );
478 return status;
479}

◆ SaveModifiedSchema

bool dbse::SchemaMainWindow::SaveModifiedSchema ( )
privateslot

Definition at line 664 of file SchemaMainWindow.cpp.

665{
666 bool result = true;
667 for (auto file: KernelWrapper::GetInstance().get_modified_schema_files()) {
668 if (!save_schema_file(QString::fromStdString(file))) {
669 result = false;
670 }
671 }
673 return result;
674}
bool save_schema_file(QString file)

◆ SaveSchema

void dbse::SchemaMainWindow::SaveSchema ( )
privateslot

Definition at line 676 of file SchemaMainWindow.cpp.

677{
679 if (modified.empty())
680 {
681 QMessageBox::information ( 0, "Schema editor",
682 QString ( "No modified schema files need saving" ) );
683
684 }
685 else {
687 }
689}
std::string ModifiedSchemaFiles() const

◆ SaveSchemaFile

void dbse::SchemaMainWindow::SaveSchemaFile ( )
privateslot

Definition at line 481 of file SchemaMainWindow.cpp.

482{
483 QModelIndex index = ui->FileView->currentIndex();
484 const auto file = FileModel->getRowFromIndex (index).at (0);
485 save_schema_file (file);
487}

◆ SaveView

void dbse::SchemaMainWindow::SaveView ( )
privateslot

Definition at line 823 of file SchemaMainWindow.cpp.

823 {
824 SchemaTab * tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
825 if ( tab->GetScene()->items().size() != 0 )
826 {
827 auto file_name = tab->getFileName();
828 if (file_name == "./") {
829 SaveViewAs();
830 return;
831 }
832 write_view_file(file_name, tab);
833 }
834}
void write_view_file(const QString &fn, SchemaTab *tab)

◆ SaveViewAs

void dbse::SchemaMainWindow::SaveViewAs ( )
privateslot

Definition at line 835 of file SchemaMainWindow.cpp.

835 {
836 SchemaTab * CurrentTab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
837 if ( CurrentTab->GetScene()->items().size() != 0 )
838 {
839 auto defName = CurrentTab->getFileName();
840 if (defName == "./") {
841 defName = m_view_dir;
842 }
843 QString FileName = QFileDialog::getSaveFileName (
844 this, tr ( "Save View" ), defName,
845 tr("View files (*.view);;All files (*)") );
846
847 if (! FileName.isEmpty()) {
848 auto spos = FileName.lastIndexOf('/');
849 if (spos != -1) {
850 m_view_dir = FileName;
851 m_view_dir.truncate(spos);
852 }
853
854 if ( !FileName.endsWith ( ".view" ) ) {
855 FileName.append ( ".view" );
856 }
857
858 CurrentTab->setFileName ( FileName );
859 auto text = QFileInfo(FileName).baseName();
860 CurrentTab->setName(text);
861 auto index = ui->TabWidget->currentIndex();
862 ui->TabWidget->setTabText(index, text);
863
864 write_view_file(FileName, CurrentTab);
865 }
866 }
867}

◆ SetController()

void dbse::SchemaMainWindow::SetController ( )
private

Definition at line 106 of file SchemaMainWindow.cpp.

107{
108 connect ( ui->OpenFileSchema, SIGNAL ( triggered() ), this, SLOT ( OpenSchemaFile() ) );
109 connect ( ui->CreateNewSchema, SIGNAL ( triggered() ), this, SLOT ( CreateNewSchema() ) );
110 connect ( ui->ShowSchema, SIGNAL ( triggered() ), this, SLOT ( show_file_info_active_schema() ) );
111 connect ( ui->SaveSchema, SIGNAL ( triggered() ), this, SLOT ( SaveSchema() ) );
112 connect ( ui->actionSave_layout, SIGNAL ( triggered() ), this, SLOT ( save_layout() ) );
113 connect ( ui->actionRestore_layout, SIGNAL ( triggered() ), this, SLOT ( restore_layout() ) );
114 connect ( ui->actionDefault_layout, SIGNAL ( triggered() ), this, SLOT ( default_layout() ) );
115 connect ( ui->SetRelationship, SIGNAL ( triggered ( bool ) ), this,
116 SLOT ( ChangeCursorRelationship ( bool ) ) );
117 connect ( ui->SetInheritance, SIGNAL ( triggered ( bool ) ), this,
118 SLOT ( ChangeCursorInheritance ( bool ) ) );
119 connect ( ui->AddClass, SIGNAL ( triggered() ), this, SLOT ( AddNewClass() ) );
120 connect ( ui->SaveView, SIGNAL ( triggered() ), this, SLOT ( SaveView() ) );
121 connect ( ui->SaveViewAs, SIGNAL ( triggered() ), this, SLOT ( SaveViewAs() ) );
122 connect ( ui->LoadView, SIGNAL ( triggered() ), this, SLOT ( LoadView() ) );
123 connect ( ui->NameView, SIGNAL ( triggered() ), this, SLOT ( NameView() ) );
124 connect ( ui->Exit, SIGNAL ( triggered() ), this, SLOT ( close() ) );
125
126 connect ( ui->actionSettings, SIGNAL (triggered() ), this, SLOT ( edit_settings() ));
127
128 connect ( ui->displayClasses, SIGNAL ( triggered ( bool ) ), ui->ClassWidget,
129 SLOT ( setVisible ( bool ) ) );
130 connect ( ui->displayDiagrams, SIGNAL ( triggered ( bool ) ), ui->TabWidget,
131 SLOT ( setVisible ( bool ) ) );
132 connect ( ui->displayInfo_tabs, SIGNAL ( triggered ( bool ) ), ui->DockWidget,
133 SLOT ( setVisible ( bool ) ) );
134 connect ( ui->displayToolbar, SIGNAL ( triggered ( bool ) ), ui->MainToolBar,
135 SLOT ( setVisible ( bool ) ) );
136 connect ( ui->displayStatus_bar, SIGNAL ( triggered ( bool ) ), ui->StatusBar,
137 SLOT ( setVisible ( bool ) ) );
138
139 connect ( ui->ClassWidget, SIGNAL ( visibilityChanged ( bool ) ), ui->displayClasses,
140 SLOT ( setChecked ( bool ) ) );
141 connect ( ui->DockWidget, SIGNAL ( visibilityChanged ( bool ) ), ui->displayInfo_tabs,
142 SLOT ( setChecked ( bool ) ) );
143 connect ( ui->MainToolBar, SIGNAL ( visibilityChanged ( bool ) ), ui->displayToolbar,
144 SLOT ( setChecked ( bool ) ) );
145
146 connect ( ui->ClassTableView, SIGNAL ( activated ( QModelIndex ) ), this,
147 SLOT ( LaunchClassEditor ( QModelIndex ) ) );
148 connect ( ui->close_tab, SIGNAL ( triggered() ), this, SLOT ( close_tab() ) );
149
150 connect ( &KernelWrapper::GetInstance(), SIGNAL ( ClassCreated( QString ) ), this,
151 SLOT ( update_models() ) );
152 connect ( &KernelWrapper::GetInstance(), SIGNAL ( ClassUpdated ( QString ) ), this,
153 SLOT ( update_models() ) );
154 connect ( &KernelWrapper::GetInstance(), SIGNAL ( ClassRemoved ( QString ) ), this,
155 SLOT ( update_models() ) );
156 connect ( &KernelWrapper::GetInstance(), SIGNAL ( active_updated ( ) ), this,
157 SLOT ( update_models() ) );
158 connect ( ui->TabWidget, SIGNAL ( tabCloseRequested ( int ) ), this,
159 SLOT ( RemoveTab ( int ) ) );
160
161 connect ( ui->FileView, SIGNAL ( customContextMenuRequested ( QPoint ) ), this,
162 SLOT ( CustomContextMenuFileView ( QPoint ) ) );
163 connect ( ui->FileView, SIGNAL ( activated(QModelIndex) ), this, SLOT ( show_file_info(QModelIndex) ) );
164
165
166 connect ( ui->ClassTableView, SIGNAL ( customContextMenuRequested ( QPoint ) ), this,
167 SLOT ( CustomContextMenuTableView ( QPoint ) ) );
168 connect ( ui->PrintView, SIGNAL ( triggered() ), this, SLOT ( PrintCurrentView() ) );
169 connect ( ui->exportView, SIGNAL ( triggered() ), this, SLOT ( export_current_view() ) );
170 connect ( ui->ClassTableSearchLine, SIGNAL( textChanged ( QString ) ), m_proxyModel, SLOT( setFilterRegExp( QString ) ) );
171 connect ( ui->case_sensitive, SIGNAL ( stateChanged(int) ), this,
172 SLOT (toggle_case_sensitive(int)) );
173}
void LaunchClassEditor(QModelIndex Index)
void CustomContextMenuTableView(QPoint Pos)
void ChangeCursorInheritance(bool State)
void CustomContextMenuFileView(QPoint Pos)
void ChangeCursorRelationship(bool State)

◆ SetSchemaFileActive

void dbse::SchemaMainWindow::SetSchemaFileActive ( )
privateslot

Definition at line 355 of file SchemaMainWindow.cpp.

356{
357 QModelIndex index = ui->FileView->currentIndex();
358 QString file = FileModel->getRowFromIndex ( index ).at(0);
359 try {
361 }
362 catch (oks::CanNotSetActiveFile& exc) {
363 QMessageBox::warning(0,
364 "Set Active Schema",
365 QString("Could not make schema active!\n\n").append(QString(exc.what())),
366 QMessageBox::Ok);
367 return;
368 }
370
371 // In case we are highlighting classes in the active file, redraw current
372 // view tab now we've changed active file
373 SchemaTab * current_tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
374 SchemaGraphicsScene * scene = current_tab->GetScene();
375 scene->update();
376
378}

◆ ShouldSaveChanges()

int dbse::SchemaMainWindow::ShouldSaveChanges ( ) const
nodiscardprivate

Definition at line 273 of file SchemaMainWindow.cpp.

274{
275 // if ( KernelWrapper::GetInstance().GetUndoStack()->isClean() )
277 if (modified.empty())
278 {
279 return QMessageBox::Discard;
280 }
281
282 std::string msg = "There are unsaved changes in the following files:\n\n"
283 + modified + "Do you want to save the changes in the schema?\n";
284 return QMessageBox::question (
285 0, tr ( "SchemaEditor" ),
286 QString ( msg.c_str() ),
287 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save );
288}

◆ ShouldSaveViewChanges()

int dbse::SchemaMainWindow::ShouldSaveViewChanges ( ) const
nodiscardprivate

Definition at line 249 of file SchemaMainWindow.cpp.

250{
251 QString modified_views;
252 for (int index=0; index<ui->TabWidget->count(); ++index) {
253 auto tab = dynamic_cast<SchemaTab *> (ui->TabWidget->widget(index));
254 if (tab->GetScene()->IsModified()) {
255 auto label = ui->TabWidget->tabText(index);
256 label = label.remove('*');
257 modified_views.append(" " + label + "\n");
258 }
259 }
260 if (!modified_views.isEmpty()) {
261 QString message ( "There are unsaved changes in the schema views:\n");
262 message.append (modified_views);
263 message.append ("Do you want to save the changes in the schema views?\n" );
264 return QMessageBox::question (
265 0, tr ( "SchemaEditor" ),
266 message,
267 QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard );
268 }
269
270 return QMessageBox::Discard;
271}

◆ show_file_info [1/3]

void dbse::SchemaMainWindow::show_file_info ( )
privateslot

Definition at line 181 of file SchemaMainWindow.cpp.

182{
183 QModelIndex index = ui->FileView->currentIndex();
184 show_file_info(index);
185}

◆ show_file_info [2/3]

void dbse::SchemaMainWindow::show_file_info ( QModelIndex index)
privateslot

Definition at line 186 of file SchemaMainWindow.cpp.

187{
188 QStringList row = FileModel->getRowFromIndex ( index );
189 show_file_info(row.at ( 0 ));
190}

◆ show_file_info [3/3]

void dbse::SchemaMainWindow::show_file_info ( QString fn)
privateslot

Definition at line 191 of file SchemaMainWindow.cpp.

191 {
192 bool widget_found = false;
193 for ( QWidget * widget : QApplication::allWidgets() ) {
194 auto sfi = dynamic_cast<SchemaFileInfo *> ( widget );
195 if ( sfi != nullptr ) {
196 if ( (sfi->objectName() ).compare ( fn ) == 0 ) {
197 sfi->raise();
198 sfi->setVisible ( true );
199 sfi->activateWindow();
200 widget_found = true;
201 break;
202 }
203 }
204 }
205 if ( !widget_found ) {
206 auto info = new SchemaFileInfo(fn.toStdString());
207 connect (info, &SchemaFileInfo::files_updated,
209 connect (info, &SchemaFileInfo::new_window,
211 info->show();
212 }
213}
void new_window(SchemaFileInfo *win)
void connect_file_info(SchemaFileInfo *win)

◆ show_file_info_active_schema

void dbse::SchemaMainWindow::show_file_info_active_schema ( )
privateslot

Definition at line 175 of file SchemaMainWindow.cpp.

176{
177 show_file_info(QString::fromStdString(
178 KernelWrapper::GetInstance().GetActiveSchema()));
179}

◆ toggle_case_sensitive

void dbse::SchemaMainWindow::toggle_case_sensitive ( int )
privateslot

Definition at line 1085 of file SchemaMainWindow.cpp.

1086{
1087 if ( ui->case_sensitive->isChecked() ) {
1088 m_proxyModel->setFilterCaseSensitivity ( Qt::CaseSensitive );
1089 }
1090 else {
1091 m_proxyModel->setFilterCaseSensitivity ( Qt::CaseInsensitive );
1092 }
1093}

◆ update_models

void dbse::SchemaMainWindow::update_models ( )
slot

Definition at line 579 of file SchemaMainWindow.cpp.

579 {
582}

◆ update_view

void dbse::SchemaMainWindow::update_view ( )
privateslot

Definition at line 1094 of file SchemaMainWindow.cpp.

1094 {
1095 auto tab = dynamic_cast<SchemaTab *> ( ui->TabWidget->currentWidget() );
1096 tab->GetScene()->update();
1097
1100}

◆ update_window_title()

void dbse::SchemaMainWindow::update_window_title ( QString text)
private

Definition at line 632 of file SchemaMainWindow.cpp.

632 {
633 m_title.remove(QRegularExpression(": --.*"));
634 m_title.append(QString(": -- ") + text);
635 setWindowTitle ( m_title );
636}

◆ write_view_file()

void dbse::SchemaMainWindow::write_view_file ( const QString & fn,
SchemaTab * tab )
private

Definition at line 869 of file SchemaMainWindow.cpp.

870 {
871 QFile file ( file_name );
872 file.open ( QIODevice::WriteOnly );
873
874 for ( QGraphicsItem * item : tab->GetScene()->items() ) {
875 auto object = dynamic_cast<SchemaGraphicObject *> ( item );
876 if ( object != nullptr ) {
877 QString description = object->GetClassName() + ","
878 + QString::number ( object->scenePos().x() ) + ","
879 + QString::number ( object->scenePos().y() ) + "\n";
880 file.write ( description.toUtf8() );
881 }
882 else {
883 auto note = dynamic_cast<SchemaGraphicNote*> (item);
884 if ( note != nullptr && !note->text().isEmpty()) {
885 auto text = note->text().replace("\n", "<br>");
886 text = text.replace(",", "<comma>");
887 QString line = "#,"
888 + QString::number ( note->scenePos().x() ) + ","
889 + QString::number ( note->scenePos().y() ) + ","
890 + text + "\n";
891 file.write ( line.toUtf8() );
892 }
893 }
894 }
895
896 file.close();
897 auto message = QString("Saved view to %1").arg(file_name);
898 ui->StatusBar->showMessage( message );
899 tab->GetScene()->ClearModified();
900}
std::vector< T > object(tref const &)

Member Data Documentation

◆ ContextMenuFileView

QMenu* dbse::SchemaMainWindow::ContextMenuFileView
private

Definition at line 46 of file SchemaMainWindow.hpp.

◆ ContextMenuTableView

QMenu* dbse::SchemaMainWindow::ContextMenuTableView
private

Definition at line 47 of file SchemaMainWindow.hpp.

◆ FileModel

CustomFileModel* dbse::SchemaMainWindow::FileModel
private

Definition at line 42 of file SchemaMainWindow.hpp.

◆ m_default_geometry

QByteArray dbse::SchemaMainWindow::m_default_geometry
private

Definition at line 55 of file SchemaMainWindow.hpp.

◆ m_default_size

QSize dbse::SchemaMainWindow::m_default_size
private

Definition at line 56 of file SchemaMainWindow.hpp.

◆ m_default_state

QByteArray dbse::SchemaMainWindow::m_default_state
private

Definition at line 54 of file SchemaMainWindow.hpp.

◆ m_export_path

QString dbse::SchemaMainWindow::m_export_path {"."}
private

Definition at line 50 of file SchemaMainWindow.hpp.

50{"."};

◆ m_path_urls

QList<QUrl> dbse::SchemaMainWindow::m_path_urls
private

Definition at line 52 of file SchemaMainWindow.hpp.

◆ m_printer

QPrinter* dbse::SchemaMainWindow::m_printer {}
private

Definition at line 57 of file SchemaMainWindow.hpp.

57{};

◆ m_proxyModel

QSortFilterProxyModel* dbse::SchemaMainWindow::m_proxyModel
private

Definition at line 44 of file SchemaMainWindow.hpp.

◆ m_save_layout_on_exit

bool dbse::SchemaMainWindow::m_save_layout_on_exit
private

Definition at line 53 of file SchemaMainWindow.hpp.

◆ m_schema_directory

QDir dbse::SchemaMainWindow::m_schema_directory {"."}
private

Definition at line 51 of file SchemaMainWindow.hpp.

51{"."};

◆ m_settings

SchemaSettings* dbse::SchemaMainWindow::m_settings {nullptr}
private

Definition at line 45 of file SchemaMainWindow.hpp.

45{nullptr};

◆ m_title

QString dbse::SchemaMainWindow::m_title {"DUNE DAQ Configuration Schema editor"}
private

Definition at line 48 of file SchemaMainWindow.hpp.

48{"DUNE DAQ Configuration Schema editor"};

◆ m_view_dir

QString dbse::SchemaMainWindow::m_view_dir {"."}
private

Definition at line 49 of file SchemaMainWindow.hpp.

49{"."};

◆ TableModel

CustomTableModel* dbse::SchemaMainWindow::TableModel
private

Definition at line 43 of file SchemaMainWindow.hpp.

◆ ui

std::unique_ptr<dbse::Ui::SchemaMainWindow> dbse::SchemaMainWindow::ui
private

Definition at line 40 of file SchemaMainWindow.hpp.


The documentation for this class was generated from the following files: