From 32e9f2b74d0e6925e833dd4b2d839c2c4c6d9199 Mon Sep 17 00:00:00 2001 From: Jean-Loup Haberbusch Date: Sun, 24 Nov 2019 14:40:50 +0100 Subject: [PATCH 1/5] DicomDialog Get checkbox item checked for one item list When list of studies only contains one item checkbox wasn't checked by default. It has been changes to be checked. --- imaging/components/dicom/DicomDialog.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/imaging/components/dicom/DicomDialog.cpp b/imaging/components/dicom/DicomDialog.cpp index 9b7f4cf4..d77d8918 100644 --- a/imaging/components/dicom/DicomDialog.cpp +++ b/imaging/components/dicom/DicomDialog.cpp @@ -1,4 +1,4 @@ -/***************************************************************************** +/***************************************************************************** * $CAMITK_LICENCE_BEGIN$ * * CamiTK - Computer Assisted Medical Intervention ToolKit @@ -59,6 +59,10 @@ DicomDialog::DicomDialog(QList elements): QDialog() { ui.tableWidget->setItem(row, column++, new QTableWidgetItem(item->getSeriesName())); row++; } + // To get checkbox checked if there is only one study in list + if (elements.size() == 1) { + ui.tableWidget->itemAt(0, 0)->setCheckState(Qt::Checked); + } ui.tableWidget->resizeColumnsToContents(); -- GitLab From e628ff81a6fa82f13dae379eda80f9e16dc55d82 Mon Sep 17 00:00:00 2001 From: Jean-Loup Haberbusch Date: Sat, 30 Nov 2019 20:32:17 +0100 Subject: [PATCH 2/5] CHANGE the "Open Data Directory" Menu Is Now Specialized To open multiple types of data directory, menu shows all possibilities from extension as QAction under "Open Data Directory" menu. If there is only one type of DirectoryExtension menu appears only as one specialized e-g "Open Dicom Directory" instead of "Open Data Directory". --- sdk/applications/imp/ImpMainWindow.cpp | 74 +++++++++++++------------- sdk/applications/imp/ImpMainWindow.h | 14 ++--- 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/sdk/applications/imp/ImpMainWindow.cpp b/sdk/applications/imp/ImpMainWindow.cpp index 6eccc8d0..c0e26644 100644 --- a/sdk/applications/imp/ImpMainWindow.cpp +++ b/sdk/applications/imp/ImpMainWindow.cpp @@ -1,4 +1,4 @@ -/***************************************************************************** +/***************************************************************************** * $CAMITK_LICENCE_BEGIN$ * * CamiTK - Computer Assisted Medical Intervention ToolKit @@ -68,7 +68,6 @@ ImpMainWindow::ImpMainWindow() : MainWindow("imp") { // initialize architecture updateActionStates(); - updateOpenDirectoryMenu(); // now add the different viewers setCentralViewer(MedicalImageViewer::getInstance()); @@ -111,8 +110,6 @@ void ImpMainWindow::aboutToShow() { void ImpMainWindow::refresh() { MainWindow::refresh(); - // update Data directory menu - updateOpenDirectoryMenu(); // update all the action states updateActionStates(); // update menu @@ -229,10 +226,12 @@ void ImpMainWindow::initMenuBar() { fileMenu = new QMenu(tr("&File")); fileMenu->addAction(fileOpen); - fileOpenDataDirectoryMenu = new QMenu(tr("Open &Data Directory...")); - fileOpenDataDirectoryMenu->setIcon(QPixmap(":/fileOpen")); - fileOpenDataDirectoryMenu->setEnabled(false); - fileMenu->addMenu(fileOpenDataDirectoryMenu); + openDataDirectoryMenuBuilder(fileMenu); + +// fileOpenDataDirectoryMenu = new QMenu(tr("Open &Data Directory...")); +// fileOpenDataDirectoryMenu->setIcon(QPixmap(":/fileOpen")); +// fileOpenDataDirectoryMenu->setEnabled(false); +// fileMenu->addMenu(fileOpenDataDirectoryMenu); fileMenu->addAction(fileClose); fileMenu->addAction(fileCloseAll); @@ -423,32 +422,9 @@ void ImpMainWindow::resetWindows() { move(0, 0); } -// ------------------------ updateDataDirectoryMenu ---------------------------- -void ImpMainWindow::updateOpenDirectoryMenu() { - unsigned int nrOfDataDirectoryManager = 0; - - disconnect(fileOpenDataDirectoryMenu, SIGNAL(triggered(QAction*)), this, SLOT(openDirectory(QAction*))); - fileOpenDataDirectoryMenu->clear(); - fileOpenDataDirectoryMenu->setEnabled(false); - - foreach (QString name, ExtensionManager::getDataDirectoryExtNames()) { - nrOfDataDirectoryManager++; - QAction* openDirectory = new QAction(name, this); - openDirectory->setStatusTip(tr(QString("Opens data directory for " + name).toStdString().c_str())); - openDirectory->setWhatsThis(tr(QString("Opens data directory for " + name).toStdString().c_str())); - - fileOpenDataDirectoryMenu->addAction(openDirectory); - } - - if (nrOfDataDirectoryManager > 0) { - fileOpenDataDirectoryMenu->setEnabled(true); - connect(fileOpenDataDirectoryMenu, SIGNAL(triggered(QAction*)), this, SLOT(openDirectory(QAction*))); - } -} - // ------------- openDataDirectory ----------------- -void ImpMainWindow::openDirectory(QAction* emitter) { - QString pluginName = emitter->text().replace("&", ""); +void ImpMainWindow::openDicomDirectory() { + QString pluginName = QString("DICOM"); statusBar()->showMessage(tr(QString("Opening " + pluginName + " directory...").toStdString().c_str())); @@ -567,9 +543,6 @@ void ImpMainWindow::editSettings() { // update recent docs updateRecentDocumentsMenu(); } - - // check if there are anything to change in the data directory menu (for data directory manager) - updateOpenDirectoryMenu(); } // ------------- setApplicationConsole ----------------- @@ -623,7 +596,36 @@ void ImpMainWindow::saveHistoryAsSCXML() { Application::saveHistoryAsSXML(); } +// ------------------------- openDataDirectoryMenuBuilder --------------------------- +void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { +// QStringList dirExt = { "Arial", "Helvetica", "Times" }; + QStringList dirExt = ExtensionManager::getDataDirectoryExtNames(); + QString dirExtName; + +// Check if there is some dataDirectoryExtension + if (dirExt.size() > 1) { + fileOpenDataDirectoryMenu = new QMenu("Open Data Directory"); + fileOpenDataDirectoryMenu->setIcon(QPixmap(":/fileOpen")); + fm->addMenu(fileOpenDataDirectoryMenu); + foreach (dirExtName, dirExt) { + QAction* openDirectory = new QAction(dirExtName, this); + openDirectory->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); + openDirectory->setWhatsThis(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); + + fileOpenDataDirectoryMenu->addAction(openDirectory); + } + } else if (dirExt.size() == 1) { + dirExtName = dirExt.at(0); + QAction* openDirectoryAct = new QAction("Open " + dirExtName + " Directory", this); + openDirectoryAct->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); + openDirectoryAct->setWhatsThis(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); + + connect(openDirectoryAct, &QAction::triggered, this, &ImpMainWindow::openDicomDirectory); + fm->addAction(openDirectoryAct); + openDirectoryAct->setIcon(QPixmap(":/fileOpen")); + } +} diff --git a/sdk/applications/imp/ImpMainWindow.h b/sdk/applications/imp/ImpMainWindow.h index 4cb294d3..7ec25eaa 100644 --- a/sdk/applications/imp/ImpMainWindow.h +++ b/sdk/applications/imp/ImpMainWindow.h @@ -1,4 +1,4 @@ -/***************************************************************************** +/***************************************************************************** * $CAMITK_LICENCE_BEGIN$ * * CamiTK - Computer Assisted Medical Intervention ToolKit @@ -80,9 +80,14 @@ public slots: /// @name file menu slot ///@{ /// open a data directory, "called" from the fileOpenDataDirectoryMenu - void openDirectory(QAction*); + void openDicomDirectory(); ///@} + /// @name file menu slot + ///@{ + /// Build the open data directory menu + void openDataDirectoryMenuBuilder(QMenu *); + /// @name viewers' slot ///@{ /// this slot is connected to all the viewers selectionChanged() signal, this will call the refresh method of all viewers but whoIsAsking @@ -122,11 +127,6 @@ protected: /// update the viewer's menu void updateViewMenu(); - /** @name Extension and ComponentPlugin attributes */ - ///@{ - /// update the data directory menu depending on registered plugins - void updateOpenDirectoryMenu(); - /// update the recent document menu void updateRecentDocumentsMenu(); ///@} -- GitLab From 5304d077255beb93ea1ffbea2444b9bbee77df91 Mon Sep 17 00:00:00 2001 From: Jean-Loup Haberbusch Date: Sat, 30 Nov 2019 22:20:09 +0100 Subject: [PATCH 3/5] CHANGE The to open data directory in CamiTK has changed Depending on how many directory Extension are available the menu is created consequently. --- sdk/applications/imp/ImpMainWindow.cpp | 9 +++++---- sdk/applications/imp/ImpMainWindow.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sdk/applications/imp/ImpMainWindow.cpp b/sdk/applications/imp/ImpMainWindow.cpp index c0e26644..7c426d2d 100644 --- a/sdk/applications/imp/ImpMainWindow.cpp +++ b/sdk/applications/imp/ImpMainWindow.cpp @@ -423,8 +423,8 @@ void ImpMainWindow::resetWindows() { } // ------------- openDataDirectory ----------------- -void ImpMainWindow::openDicomDirectory() { - QString pluginName = QString("DICOM"); +void ImpMainWindow::openDicomDirectory(QString plugin) { + QString pluginName = plugin; statusBar()->showMessage(tr(QString("Opening " + pluginName + " directory...").toStdString().c_str())); @@ -598,7 +598,7 @@ void ImpMainWindow::saveHistoryAsSCXML() { // ------------------------- openDataDirectoryMenuBuilder --------------------------- void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { -// QStringList dirExt = { "Arial", "Helvetica", "Times" }; + QStringList dirExt = ExtensionManager::getDataDirectoryExtNames(); QString dirExtName; @@ -611,6 +611,7 @@ void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { QAction* openDirectory = new QAction(dirExtName, this); openDirectory->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); openDirectory->setWhatsThis(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); + connect(openDirectory, &QAction::triggered, this, [=]() {this->openDicomDirectory(dirExtName);}); fileOpenDataDirectoryMenu->addAction(openDirectory); @@ -621,7 +622,7 @@ void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { openDirectoryAct->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); openDirectoryAct->setWhatsThis(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); - connect(openDirectoryAct, &QAction::triggered, this, &ImpMainWindow::openDicomDirectory); + connect(openDirectoryAct, &QAction::triggered, this, [=]() {this->openDicomDirectory(dirExtName);}); fm->addAction(openDirectoryAct); openDirectoryAct->setIcon(QPixmap(":/fileOpen")); diff --git a/sdk/applications/imp/ImpMainWindow.h b/sdk/applications/imp/ImpMainWindow.h index 7ec25eaa..5fdaca92 100644 --- a/sdk/applications/imp/ImpMainWindow.h +++ b/sdk/applications/imp/ImpMainWindow.h @@ -80,7 +80,7 @@ public slots: /// @name file menu slot ///@{ /// open a data directory, "called" from the fileOpenDataDirectoryMenu - void openDicomDirectory(); + void openDicomDirectory(QString plugin); ///@} /// @name file menu slot -- GitLab From 22040dd2853233311332e353080ad01f7a43d3d8 Mon Sep 17 00:00:00 2001 From: Jean-Loup Haberbusch Date: Sat, 30 Nov 2019 22:25:35 +0100 Subject: [PATCH 4/5] ADD Case without any plugin loaded to open data directory is taking into account When no plugin are available to open a directory, a message is displayed instead of the normal menu --- sdk/applications/imp/ImpMainWindow.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sdk/applications/imp/ImpMainWindow.cpp b/sdk/applications/imp/ImpMainWindow.cpp index 7c426d2d..f5eed26b 100644 --- a/sdk/applications/imp/ImpMainWindow.cpp +++ b/sdk/applications/imp/ImpMainWindow.cpp @@ -626,6 +626,11 @@ void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { fm->addAction(openDirectoryAct); openDirectoryAct->setIcon(QPixmap(":/fileOpen")); + } else { + fileOpenDataDirectoryMenu = new QMenu("No plugins loaded to Open Data Directory"); + fileOpenDataDirectoryMenu->setIcon(QPixmap(":/fileOpen")); + fileOpenDataDirectoryMenu->setEnabled(false); + fm->addMenu(fileOpenDataDirectoryMenu); } } -- GitLab From 9077f3730409be98e94c850933ef464e77c68982 Mon Sep 17 00:00:00 2001 From: Jean-Loup Haberbusch Date: Sun, 1 Dec 2019 20:33:39 +0100 Subject: [PATCH 5/5] ADD Update method for resetting parameters case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If directoryExtension are reloaded while a running session, ‘Open Data Directory’ is rechecked to take into account potential new plugin. --- sdk/applications/imp/ImpMainWindow.cpp | 38 ++++++++++++++++++++------ sdk/applications/imp/ImpMainWindow.h | 16 +++++++---- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/sdk/applications/imp/ImpMainWindow.cpp b/sdk/applications/imp/ImpMainWindow.cpp index f5eed26b..b835e144 100644 --- a/sdk/applications/imp/ImpMainWindow.cpp +++ b/sdk/applications/imp/ImpMainWindow.cpp @@ -112,6 +112,7 @@ void ImpMainWindow::refresh() { // update all the action states updateActionStates(); + // update menu updateRecentDocumentsMenu(); } @@ -543,6 +544,9 @@ void ImpMainWindow::editSettings() { // update recent docs updateRecentDocumentsMenu(); } + + // check if there are anything to change in the data directory menu (for data directory manager) + ImpMainWindow::openDataDirectoryMenuBuilder(fileMenu); } // ------------- setApplicationConsole ----------------- @@ -598,15 +602,18 @@ void ImpMainWindow::saveHistoryAsSCXML() { // ------------------------- openDataDirectoryMenuBuilder --------------------------- void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { - QStringList dirExt = ExtensionManager::getDataDirectoryExtNames(); QString dirExtName; -// Check if there is some dataDirectoryExtension if (dirExt.size() > 1) { - fileOpenDataDirectoryMenu = new QMenu("Open Data Directory"); + if (fileOpenDataDirectoryMenu == nullptr){ + fileOpenDataDirectoryMenu = new QMenu("Open Data Directory"); + fm->addMenu(fileOpenDataDirectoryMenu); + } else { + disconnect(fileOpenDataDirectoryMenu,0,0,0); + fileOpenDataDirectoryMenu->clear(); + } fileOpenDataDirectoryMenu->setIcon(QPixmap(":/fileOpen")); - fm->addMenu(fileOpenDataDirectoryMenu); foreach (dirExtName, dirExt) { QAction* openDirectory = new QAction(dirExtName, this); openDirectory->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); @@ -617,14 +624,31 @@ void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { } } else if (dirExt.size() == 1) { + QAction* openDirectoryAct; + dirExtName = dirExt.at(0); - QAction* openDirectoryAct = new QAction("Open " + dirExtName + " Directory", this); + int indexAction = 0; + bool updateAction = false; + foreach (QAction * action, fileMenu->actions()) { + if (action->text().contains(" Directory")) { + action->destroyed(); + updateAction = true; + break; + } + indexAction++; + } + if (!updateAction) { + openDirectoryAct = new QAction("Open " + dirExtName + " Directory", this); + fm->addAction(openDirectoryAct); + } else { + openDirectoryAct = new QAction("Open " + dirExtName + " Directory", this); + } + openDirectoryAct->setStatusTip(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); openDirectoryAct->setWhatsThis(tr(QString("Opens data directory for " + dirExtName).toStdString().c_str())); connect(openDirectoryAct, &QAction::triggered, this, [=]() {this->openDicomDirectory(dirExtName);}); - fm->addAction(openDirectoryAct); openDirectoryAct->setIcon(QPixmap(":/fileOpen")); } else { fileOpenDataDirectoryMenu = new QMenu("No plugins loaded to Open Data Directory"); @@ -633,5 +657,3 @@ void ImpMainWindow::openDataDirectoryMenuBuilder(QMenu * fm) { fm->addMenu(fileOpenDataDirectoryMenu); } } - - diff --git a/sdk/applications/imp/ImpMainWindow.h b/sdk/applications/imp/ImpMainWindow.h index 5fdaca92..41c78c7a 100644 --- a/sdk/applications/imp/ImpMainWindow.h +++ b/sdk/applications/imp/ImpMainWindow.h @@ -83,11 +83,6 @@ public slots: void openDicomDirectory(QString plugin); ///@} - /// @name file menu slot - ///@{ - /// Build the open data directory menu - void openDataDirectoryMenuBuilder(QMenu *); - /// @name viewers' slot ///@{ /// this slot is connected to all the viewers selectionChanged() signal, this will call the refresh method of all viewers but whoIsAsking @@ -127,6 +122,15 @@ protected: /// update the viewer's menu void updateViewMenu(); + /// Build the open data directory menu + void openDataDirectoryMenuBuilder(QMenu *); + + /** @name Extension and ComponentPlugin attributes */ + ///@{ + /// update the data directory menu depending on registered plugins + void updateOpenDirectoryMenu(); + + /// update the recent document menu void updateRecentDocumentsMenu(); ///@} @@ -161,7 +165,7 @@ private: ///@{ /** file_menu contains all items of the menubar entry "File" */ QMenu* fileMenu; - QMenu* fileOpenDataDirectoryMenu; + QMenu* fileOpenDataDirectoryMenu = nullptr; QAction* fileOpen; QAction* fileClose; QAction* fileCloseAll; -- GitLab