diff --git a/Applications/ctkDICOMVisualBrowser/ctkDICOMVisualBrowserMain.cpp b/Applications/ctkDICOMVisualBrowser/ctkDICOMVisualBrowserMain.cpp index 6879cc8227..caafa4b82d 100644 --- a/Applications/ctkDICOMVisualBrowser/ctkDICOMVisualBrowserMain.cpp +++ b/Applications/ctkDICOMVisualBrowser/ctkDICOMVisualBrowserMain.cpp @@ -110,8 +110,8 @@ int main(int argc, char** argv) DICOMVisualBrowser.setDatabaseDirectorySettingsKey("DatabaseDirectory"); DICOMVisualBrowser.setDatabaseDirectory(databaseDirectory); - QObject::connect(&directoryButton, SIGNAL(directoryChanged(const QString&)), - &DICOMVisualBrowser, SLOT(setDatabaseDirectory(const QString&))); + QObject::connect(&directoryButton, SIGNAL(directoryChanged(QString)), + &DICOMVisualBrowser, SLOT(setDatabaseDirectory(QString))); mainLayout.addWidget(&DICOMVisualBrowser); mainWidget.setLayout(&mainLayout); diff --git a/Applications/ctkPluginBrowser/ctkQtResourcesTreeModel.h b/Applications/ctkPluginBrowser/ctkQtResourcesTreeModel.h index 49f5d8fcb3..6115a93388 100644 --- a/Applications/ctkPluginBrowser/ctkQtResourcesTreeModel.h +++ b/Applications/ctkPluginBrowser/ctkQtResourcesTreeModel.h @@ -29,6 +29,7 @@ class ctkQtResourceTreeItem; class ctkQtResourcesTreeModel : public QAbstractItemModel { + Q_OBJECT public: ctkQtResourcesTreeModel(QObject* parent = 0); diff --git a/CMake/ctkWrapPythonQt.py b/CMake/ctkWrapPythonQt.py index 477e294759..fbb254e7fb 100644 --- a/CMake/ctkWrapPythonQt.py +++ b/CMake/ctkWrapPythonQt.py @@ -112,7 +112,7 @@ def ctk_wrap_pythonqt(target, namespace, output_dir, input_files, extra_verbose) # Skip wrapping if object has a virtual pure method # "x3b" is the unicode for semicolon - regex = r"virtual[\w\n\s\*\(\)]+\=[\s\n]*(0|NULL|nullptr)[\s\n]*\x3b" + regex = r"virtual[\w\n\s\*\&\(\),:<>]+\=[\s\n]*(0|NULL|nullptr)[\s\n]*\x3b" res = re.search(regex, content, re.MULTILINE) if res is not None: if extra_verbose: diff --git a/CMakeExternals/VTK.cmake b/CMakeExternals/VTK.cmake index 83f1853039..90a3fd57c1 100644 --- a/CMakeExternals/VTK.cmake +++ b/CMakeExternals/VTK.cmake @@ -32,16 +32,12 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}) if(NOT DEFINED CTK_VTK_VERSION_MAJOR) set(CTK_VTK_VERSION_MAJOR "9") endif() - if(NOT CTK_VTK_VERSION_MAJOR MATCHES "^(8|9)$") - message(FATAL_ERROR "Expected value for CTK_VTK_VERSION_MAJOR is either '8' or '9'") + if(NOT CTK_VTK_VERSION_MAJOR MATCHES "^(9)$") + message(FATAL_ERROR "Expected value for CTK_VTK_VERSION_MAJOR is '9'") endif() ExternalProject_Message(${proj} "VTK[CTK_VTK_VERSION_MAJOR:${CTK_VTK_VERSION_MAJOR}]") - if(CTK_VTK_VERSION_MAJOR VERSION_EQUAL "8") - set(revision_tag v8.0.1) - elseif(CTK_VTK_VERSION_MAJOR VERSION_EQUAL "9") - set(revision_tag v9.5.2) - endif() + set(revision_tag v9.5.2) if(${proj}_REVISION_TAG) set(revision_tag ${${proj}_REVISION_TAG}) endif() @@ -59,7 +55,6 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}) endif() set(additional_vtk_cmakevars ) - set(additional_vtk8_cmakevars ) set(additional_vtk9_cmakevars ) if(MINGW) list(APPEND additional_vtk_cmakevars -DCMAKE_USE_PTHREADS:BOOL=OFF) @@ -107,16 +102,6 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}) message(FATAL_ERROR "Support for Qt${CTK_QT_VERSION} is not implemented") endif() - # VTK 8 - list(APPEND additional_vtk8_cmakevars - -DModule_vtkChartsCore:BOOL=ON - -DModule_vtkRenderingContext2D:BOOL=ON - -DModule_vtkRenderingContextOpenGL2:BOOL=ON - -DModule_vtkGUISupportQt:BOOL=ON - -DModule_vtkGUISupportQtOpenGL:BOOL=ON # OpenGL2 rendering backend - -DModule_vtkTestingRendering:BOOL=ON - ) - # VTK 9 list(APPEND additional_vtk9_cmakevars -DVTK_MODULE_ENABLE_VTK_ChartsCore:STRING=YES @@ -137,10 +122,6 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}) if(UNIX AND NOT APPLE) find_package(FontConfig QUIET) if(FONTCONFIG_FOUND) - # VTK8 - list(APPEND additional_vtk8_cmakevars - -DModule_vtkRenderingFreeTypeFontConfig:BOOL=ON - ) # VTK9 list(APPEND additional_vtk9_cmakevars -DVTK_MODULE_ENABLE_VTK_RenderingFreeTypeFontConfig:BOOL=ON @@ -176,8 +157,6 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj}) -DVTK_WRAP_PYTHON:BOOL=${CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK} -DVTK_WRAP_JAVA:BOOL=OFF -DBUILD_SHARED_LIBS:BOOL=ON - -DVTK_Group_Qt:BOOL=ON - -DVTK_QT_VERSION:STRING=${CTK_QT_VERSION} -DVTK_LEGACY_REMOVE:BOOL=ON DEPENDS ${${proj}_DEPENDENCIES} diff --git a/CMakeLists.txt b/CMakeLists.txt index 10b94f3c19..e4231ae6ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -882,6 +882,8 @@ set(CTK_LIB_QtTesting ${CTK_USE_QTTESTING}) if(CTK_USE_QTTESTING) list(APPEND CTK_LIBS QtTesting) list(APPEND target_directories "${CMAKE_CURRENT_SOURCE_DIR}/Libs/QtTesting^^CTK_LIB_QtTesting") + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Libs/QtTesting) + include_directories(${CMAKE_CURRENT_BINARY_DIR}/Libs/QtTesting) endif() #message(STATUS target_directories:${target_directories}) diff --git a/Libs/CommandLineModules/Core/ctkCmdLineModuleCache.cpp b/Libs/CommandLineModules/Core/ctkCmdLineModuleCache.cpp index 8e495115e0..b6c1ad9c20 100644 --- a/Libs/CommandLineModules/Core/ctkCmdLineModuleCache.cpp +++ b/Libs/CommandLineModules/Core/ctkCmdLineModuleCache.cpp @@ -182,8 +182,8 @@ void ctkCmdLineModuleCache::removeCacheEntry(const QUrl& moduleLocation) void ctkCmdLineModuleCache::clearCache() { - foreach(const QUrl &url, d->LocationToXmlDescription.keys()) + for (auto it = d->LocationToXmlDescription.constBegin(); it != d->LocationToXmlDescription.constEnd(); ++it) { - removeCacheEntry(url); + removeCacheEntry(it.key()); } } diff --git a/Libs/CommandLineModules/Frontend/QtGui/ctkCmdLineModuleObjectTreeWalker.cpp b/Libs/CommandLineModules/Frontend/QtGui/ctkCmdLineModuleObjectTreeWalker.cpp index 2a42d8e6b9..e9f9608e88 100644 --- a/Libs/CommandLineModules/Frontend/QtGui/ctkCmdLineModuleObjectTreeWalker.cpp +++ b/Libs/CommandLineModules/Frontend/QtGui/ctkCmdLineModuleObjectTreeWalker.cpp @@ -27,10 +27,26 @@ namespace { -static QString PREFIX_EXECUTABLE = "executable:"; -static QString PREFIX_PARAMETER_GROUP = "paramGroup:"; -static QString PREFIX_PARAMETER_CONTAINER = "paramContainer:"; -static QString PREFIX_PARAMETER = "parameter:"; +static const QString& PREFIX_EXECUTABLE() +{ + static const QString s = QStringLiteral("executable:"); + return s; +} +static const QString& PREFIX_PARAMETER_GROUP() +{ + static const QString s = QStringLiteral("paramGroup:"); + return s; +} +static const QString& PREFIX_PARAMETER_CONTAINER() +{ + static const QString s = QStringLiteral("paramContainer:"); + return s; +} +static const QString& PREFIX_PARAMETER() +{ + static const QString s = QStringLiteral("parameter:"); + return s; +} } @@ -93,10 +109,10 @@ QString ctkCmdLineModuleObjectTreeWalker::name() const if (CurrentObject == 0) return QString(); switch(CurrentToken) { - case Executable: return CurrentObject->objectName().mid(PREFIX_EXECUTABLE.size()); - case ParameterGroup: return CurrentObject->objectName().mid(PREFIX_PARAMETER_GROUP.size()); - case ParameterContainer: return CurrentObject->objectName().mid(PREFIX_PARAMETER_CONTAINER.size()); - case Parameter: return CurrentObject->objectName().mid(PREFIX_PARAMETER.size()); + case Executable: return CurrentObject->objectName().mid(PREFIX_EXECUTABLE().size()); + case ParameterGroup: return CurrentObject->objectName().mid(PREFIX_PARAMETER_GROUP().size()); + case ParameterContainer: return CurrentObject->objectName().mid(PREFIX_PARAMETER_CONTAINER().size()); + case Parameter: return CurrentObject->objectName().mid(PREFIX_PARAMETER().size()); default: return QString(); } } @@ -107,7 +123,7 @@ QString ctkCmdLineModuleObjectTreeWalker::label() const if (CurrentObject == 0) return QString(); switch(CurrentToken) { - case Executable: return CurrentObject->objectName().mid(PREFIX_EXECUTABLE.size()); + case Executable: return CurrentObject->objectName().mid(PREFIX_EXECUTABLE().size()); case ParameterGroup: return property("title").toString(); case ParameterContainer: return property("name").toString(); case Parameter: return property("label").toString(); @@ -276,10 +292,10 @@ QVariant ctkCmdLineModuleObjectTreeWalker::prefixedProperty(const QString& propN QString prefixedName; switch(CurrentToken) { - case ctkCmdLineModuleObjectTreeWalker::Executable: prefixedName = PREFIX_EXECUTABLE + propName; break; - case ctkCmdLineModuleObjectTreeWalker::ParameterGroup: prefixedName = PREFIX_PARAMETER_GROUP + propName; break; - case ctkCmdLineModuleObjectTreeWalker::ParameterContainer: prefixedName = PREFIX_PARAMETER_CONTAINER + propName; break; - case ctkCmdLineModuleObjectTreeWalker::Parameter: prefixedName = PREFIX_PARAMETER + propName; break; + case ctkCmdLineModuleObjectTreeWalker::Executable: prefixedName = PREFIX_EXECUTABLE() + propName; break; + case ctkCmdLineModuleObjectTreeWalker::ParameterGroup: prefixedName = PREFIX_PARAMETER_GROUP() + propName; break; + case ctkCmdLineModuleObjectTreeWalker::ParameterContainer: prefixedName = PREFIX_PARAMETER_CONTAINER() + propName; break; + case ctkCmdLineModuleObjectTreeWalker::Parameter: prefixedName = PREFIX_PARAMETER() + propName; break; default: ; } @@ -292,10 +308,10 @@ ctkCmdLineModuleObjectTreeWalker::token(QObject* obj) { if (obj == 0) return ctkCmdLineModuleObjectTreeWalker::NoToken; QString name = obj->objectName(); - if (name.startsWith(PREFIX_EXECUTABLE)) return ctkCmdLineModuleObjectTreeWalker::Executable; - if (name.startsWith(PREFIX_PARAMETER_GROUP)) return ctkCmdLineModuleObjectTreeWalker::ParameterGroup; - if (name.startsWith(PREFIX_PARAMETER_CONTAINER)) return ctkCmdLineModuleObjectTreeWalker::ParameterContainer; - if (name.startsWith(PREFIX_PARAMETER)) return ctkCmdLineModuleObjectTreeWalker::Parameter; + if (name.startsWith(PREFIX_EXECUTABLE())) return ctkCmdLineModuleObjectTreeWalker::Executable; + if (name.startsWith(PREFIX_PARAMETER_GROUP())) return ctkCmdLineModuleObjectTreeWalker::ParameterGroup; + if (name.startsWith(PREFIX_PARAMETER_CONTAINER())) return ctkCmdLineModuleObjectTreeWalker::ParameterContainer; + if (name.startsWith(PREFIX_PARAMETER())) return ctkCmdLineModuleObjectTreeWalker::Parameter; return ctkCmdLineModuleObjectTreeWalker::NoToken; } diff --git a/Libs/Core/CMakeLists.txt b/Libs/Core/CMakeLists.txt index a16b50ecd6..cb953402e3 100644 --- a/Libs/Core/CMakeLists.txt +++ b/Libs/Core/CMakeLists.txt @@ -71,7 +71,6 @@ set(KIT_SRCS ctkHighPrecisionTimer.cpp ctkJobScheduler.cpp ctkJobScheduler.h - ctkJobScheduler_p.h ctkLinearValueProxy.cpp ctkLinearValueProxy.h ctkLogger.cpp @@ -110,7 +109,6 @@ set_source_files_properties( ctkAbstractJob.h ctkAbstractWorker.h ctkJobScheduler.h - ctkJobScheduler_p.h WRAP_EXCLUDE ) diff --git a/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp b/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp index b0ea3bd426..45a886e7ca 100644 --- a/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkBackTraceTest.cpp @@ -36,7 +36,7 @@ void Q_DECL_EXPORT bt_func1() bool foundBackTrace = false; bool foundFunc1 = false; bool foundFunc2 = false; - for (const QString& frame : trace) + for (const QString& frame : std::as_const(trace)) { if (frame.contains("ctkBackTrace")) { diff --git a/Libs/Core/Testing/Cpp/ctkBooleanMapperTest.cpp b/Libs/Core/Testing/Cpp/ctkBooleanMapperTest.cpp index 69efc85406..15a188a0e4 100644 --- a/Libs/Core/Testing/Cpp/ctkBooleanMapperTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkBooleanMapperTest.cpp @@ -32,7 +32,7 @@ class ctkObjectWithBoolProp: public QObject Q_OBJECT Q_PROPERTY(bool checked READ checked WRITE setChecked NOTIFY toggled); public: - ctkObjectWithBoolProp(){this->Checked = false;} + ctkObjectWithBoolProp(QObject* parent = nullptr) : QObject(parent) {this->Checked = false;} bool checked()const {return this->Checked;} public Q_SLOTS: @@ -52,6 +52,8 @@ public Q_SLOTS: class ctkBooleanMapperTester: public QObject { Q_OBJECT +public: + explicit ctkBooleanMapperTester(QObject* parent = nullptr) : QObject(parent) {} private Q_SLOTS: void testValue(); void testComplement(); diff --git a/Libs/Core/Testing/Cpp/ctkCoreSettingsTest.cpp b/Libs/Core/Testing/Cpp/ctkCoreSettingsTest.cpp index 0f228c2aa1..12ea2d5251 100644 --- a/Libs/Core/Testing/Cpp/ctkCoreSettingsTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkCoreSettingsTest.cpp @@ -33,6 +33,8 @@ class ctkCoreSettingsTester: public QObject { Q_OBJECT +public: + explicit ctkCoreSettingsTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void initTestCase(); diff --git a/Libs/Core/Testing/Cpp/ctkExampleWorkflowStepUsingSignalsAndSlots.h b/Libs/Core/Testing/Cpp/ctkExampleWorkflowStepUsingSignalsAndSlots.h index d3eedfad51..f9fbbf5e86 100644 --- a/Libs/Core/Testing/Cpp/ctkExampleWorkflowStepUsingSignalsAndSlots.h +++ b/Libs/Core/Testing/Cpp/ctkExampleWorkflowStepUsingSignalsAndSlots.h @@ -102,9 +102,9 @@ protected Q_SLOTS: /// /// Signals indicating to the workflow that these processes have /// completed - void validationComplete(bool validationSucceeded, const QString& branchId = "")const; - void onEntryComplete()const; - void onExitComplete()const; + void validationComplete(bool validationSucceeded, const QString& branchId = ""); + void onEntryComplete(); + void onExitComplete(); protected: QScopedPointer d_ptr; diff --git a/Libs/Core/Testing/Cpp/ctkFileLoggerTest.cpp b/Libs/Core/Testing/Cpp/ctkFileLoggerTest.cpp index 08df392b8c..7a247c8ca1 100644 --- a/Libs/Core/Testing/Cpp/ctkFileLoggerTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkFileLoggerTest.cpp @@ -7,6 +7,8 @@ class ctkFileLoggerTester: public QObject { Q_OBJECT +public: + explicit ctkFileLoggerTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void initTestCase(); diff --git a/Libs/Core/Testing/Cpp/ctkLinearValueProxyTest.cpp b/Libs/Core/Testing/Cpp/ctkLinearValueProxyTest.cpp index 1627c31817..85beb175a9 100644 --- a/Libs/Core/Testing/Cpp/ctkLinearValueProxyTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkLinearValueProxyTest.cpp @@ -29,6 +29,8 @@ class ctkLinearValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkLinearValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private Q_SLOTS: void testSimpleSetValue(); void testSimpleSetValue_data(); diff --git a/Libs/Core/Testing/Cpp/ctkLoggerTest1.cpp b/Libs/Core/Testing/Cpp/ctkLoggerTest1.cpp index 871cbcf022..33b14fdf37 100644 --- a/Libs/Core/Testing/Cpp/ctkLoggerTest1.cpp +++ b/Libs/Core/Testing/Cpp/ctkLoggerTest1.cpp @@ -38,9 +38,10 @@ namespace // ---------------------------------------------------------------------------- class ctkQtMessageHandler : public QObject { + Q_OBJECT public: typedef ctkQtMessageHandler Self ; - explicit ctkQtMessageHandler() + explicit ctkQtMessageHandler(QObject* parent = nullptr) : QObject(parent) { qInstallMessageHandler(ctkQtMessageHandler::messageHandler); Self::Handlers.push(this); @@ -194,3 +195,5 @@ int TestSoftAssert() return EXIT_SUCCESS; } + +#include "ctkLoggerTest1.moc" diff --git a/Libs/Core/Testing/Cpp/ctkModelTesterTest1.cpp b/Libs/Core/Testing/Cpp/ctkModelTesterTest1.cpp index 0cba00fddb..8eae8378d8 100644 --- a/Libs/Core/Testing/Cpp/ctkModelTesterTest1.cpp +++ b/Libs/Core/Testing/Cpp/ctkModelTesterTest1.cpp @@ -34,15 +34,19 @@ #include //----------------------------------------------------------------------------- +namespace { class QAbstractItemModelHelper : public QAbstractItemModel { + Q_OBJECT public: + explicit QAbstractItemModelHelper(QObject* parent = nullptr) : QAbstractItemModel(parent) {} virtual QModelIndex index(int, int, const QModelIndex&) const { return QModelIndex(); } virtual QModelIndex parent(const QModelIndex&) const { return QModelIndex(); } virtual int rowCount(const QModelIndex&) const { return 0; } virtual int columnCount(const QModelIndex&) const { return 0; } virtual QVariant data(const QModelIndex&, int) const { return QVariant(); } }; +} // namespace //----------------------------------------------------------------------------- int ctkModelTesterTest1(int argc, char * argv [] ) @@ -140,3 +144,5 @@ int ctkModelTesterTest1(int argc, char * argv [] ) return EXIT_SUCCESS; } + +#include "ctkModelTesterTest1.moc" diff --git a/Libs/Core/Testing/Cpp/ctkModelTesterTest2.cpp b/Libs/Core/Testing/Cpp/ctkModelTesterTest2.cpp index 1882834d9e..8a4a6b2ee0 100644 --- a/Libs/Core/Testing/Cpp/ctkModelTesterTest2.cpp +++ b/Libs/Core/Testing/Cpp/ctkModelTesterTest2.cpp @@ -32,9 +32,12 @@ #include //----------------------------------------------------------------------------- +namespace { class QAbstractItemModelHelper : public QAbstractItemModel { + Q_OBJECT public: + explicit QAbstractItemModelHelper(QObject* parent = nullptr) : QAbstractItemModel(parent) {} virtual QModelIndex index(int, int, const QModelIndex&) const { return QModelIndex(); } virtual QModelIndex parent(const QModelIndex&) const { return QModelIndex(); } virtual int rowCount(const QModelIndex&) const { return 0; } @@ -43,6 +46,7 @@ class QAbstractItemModelHelper : public QAbstractItemModel void emitInvalidHeaderDataChanged() { emit this->headerDataChanged(Qt::Vertical, 10, 10);} }; +} // namespace //----------------------------------------------------------------------------- int ctkModelTesterTest2(int argc, char * argv [] ) @@ -117,3 +121,5 @@ int ctkModelTesterTest2(int argc, char * argv [] ) return EXIT_SUCCESS; } + +#include "ctkModelTesterTest2.moc" diff --git a/Libs/Core/Testing/Cpp/ctkUtilsCopyDirRecursivelyTest1.cpp b/Libs/Core/Testing/Cpp/ctkUtilsCopyDirRecursivelyTest1.cpp index a81d74be4a..423c149562 100644 --- a/Libs/Core/Testing/Cpp/ctkUtilsCopyDirRecursivelyTest1.cpp +++ b/Libs/Core/Testing/Cpp/ctkUtilsCopyDirRecursivelyTest1.cpp @@ -47,7 +47,11 @@ bool createFile(int line, const QDir& dir, const QString& relativePath, const QS newDir.cd(relativePath); QString filePath = QFileInfo(newDir, fileName).filePath(); QFile file(filePath); - file.open(QIODevice::Text | QIODevice::WriteOnly); + if (!file.open(QIODevice::Text | QIODevice::WriteOnly)) + { + std::cerr << "Failed to open file for writing: " << qPrintable(filePath) << std::endl; + return EXIT_FAILURE; + } QTextStream out(&file); out << "Generated by ctkUtilsCopyDirRecursivelyTest1" << ctk::endl; file.close(); diff --git a/Libs/Core/Testing/Cpp/ctkUtilsIsDirEmptyTest1.cpp b/Libs/Core/Testing/Cpp/ctkUtilsIsDirEmptyTest1.cpp index e464407e8c..6b9573f4be 100644 --- a/Libs/Core/Testing/Cpp/ctkUtilsIsDirEmptyTest1.cpp +++ b/Libs/Core/Testing/Cpp/ctkUtilsIsDirEmptyTest1.cpp @@ -51,7 +51,11 @@ int ctkUtilsIsDirEmptyTest1(int argc, char * argv [] ) // Create file QString filePath = tempDir.filePath("file.txt"); QFile file(filePath); - file.open(QIODevice::Text | QIODevice::WriteOnly); + if (!file.open(QIODevice::Text | QIODevice::WriteOnly)) + { + qWarning() << "Failed to open file for writing:" << filePath; + return EXIT_FAILURE; + } QTextStream out(&file); out << "Generated by ctkUtilsIsDirEmptyTest1" << ctk::endl; file.close(); diff --git a/Libs/Core/Testing/Cpp/ctkUtilsTest.cpp b/Libs/Core/Testing/Cpp/ctkUtilsTest.cpp index 6aab2bf364..4f7e0a632c 100644 --- a/Libs/Core/Testing/Cpp/ctkUtilsTest.cpp +++ b/Libs/Core/Testing/Cpp/ctkUtilsTest.cpp @@ -37,6 +37,8 @@ class ctkUtilsTester: public QObject { Q_OBJECT +public: + explicit ctkUtilsTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void initTestCase(); diff --git a/Libs/Core/Testing/Cpp/ctkUtilsTest4.cpp b/Libs/Core/Testing/Cpp/ctkUtilsTest4.cpp index ba4c35f55a..cd8ecb795f 100644 --- a/Libs/Core/Testing/Cpp/ctkUtilsTest4.cpp +++ b/Libs/Core/Testing/Cpp/ctkUtilsTest4.cpp @@ -43,7 +43,11 @@ int createFile(int line, const QDir& dir, const QString& relativePath, const QSt newDir.cd(relativePath); QString filePath = QFileInfo(newDir, fileName).filePath(); QFile file(filePath); - file.open(QIODevice::Text | QIODevice::WriteOnly); + if (!file.open(QIODevice::Text | QIODevice::WriteOnly)) + { + std::cerr << "Failed to open file for writing: " << qPrintable(filePath) << std::endl; + return EXIT_FAILURE; + } QTextStream out(&file); out << "Generated by ctkUtilsTest4" << ctk::endl; file.close(); diff --git a/Libs/Core/Testing/Cpp/ctkWorkflowTest1.cpp b/Libs/Core/Testing/Cpp/ctkWorkflowTest1.cpp index 97be48f9a2..5edd7393ea 100644 --- a/Libs/Core/Testing/Cpp/ctkWorkflowTest1.cpp +++ b/Libs/Core/Testing/Cpp/ctkWorkflowTest1.cpp @@ -305,9 +305,9 @@ int ctkWorkflowTest1(int argc, char * argv [] ) } if (workflow->forwardSteps(step1).length() != 1 - || workflow->forwardSteps(step1).first() != step2 + || workflow->forwardSteps(step1).constFirst() != step2 || workflow->forwardSteps(step2).length() != 1 - || workflow->forwardSteps(step2).first() != step3 + || workflow->forwardSteps(step2).constFirst() != step3 || workflow->forwardSteps(step3).length() != 0) { std::cerr << "error in list of forward steps" << std::endl; @@ -316,9 +316,9 @@ int ctkWorkflowTest1(int argc, char * argv [] ) if (workflow->backwardSteps(step1).length() != 0 || workflow->backwardSteps(step2).length() != 1 - || workflow->backwardSteps(step2).first() != step1 + || workflow->backwardSteps(step2).constFirst() != step1 || workflow->backwardSteps(step3).length() != 1 - || workflow->backwardSteps(step3).first() != step2) + || workflow->backwardSteps(step3).constFirst() != step2) { std::cerr << "error in list of backward steps" << std::endl; return EXIT_FAILURE; diff --git a/Libs/Core/ctkAbstractFactory.h b/Libs/Core/ctkAbstractFactory.h index b8c809961e..5d8279c68f 100644 --- a/Libs/Core/ctkAbstractFactory.h +++ b/Libs/Core/ctkAbstractFactory.h @@ -141,7 +141,7 @@ class ctkAbstractFactory protected: - void displayStatusMessage(const QtMsgType& type, const QString& description, + void displayStatusMessage(QtMsgType type, const QString& description, const QString& status, bool display); /// \brief Call the load method associated with the item. diff --git a/Libs/Core/ctkAbstractFactory.tpp b/Libs/Core/ctkAbstractFactory.tpp index 965cea9747..6e7e380bfc 100644 --- a/Libs/Core/ctkAbstractFactory.tpp +++ b/Libs/Core/ctkAbstractFactory.tpp @@ -291,7 +291,7 @@ QStringList ctkAbstractFactory::itemKeys() const //---------------------------------------------------------------------------- template void ctkAbstractFactory::displayStatusMessage( - const QtMsgType& type, const QString& description, const QString& status, bool display) + QtMsgType type, const QString& description, const QString& status, bool display) { QString msg = QString("%1 [%2]").arg(description + " ", -70, QChar('.')).arg(status); if (display) diff --git a/Libs/Core/ctkAbstractJob.cpp b/Libs/Core/ctkAbstractJob.cpp index 79da019d2d..6e7b0d8b2c 100644 --- a/Libs/Core/ctkAbstractJob.cpp +++ b/Libs/Core/ctkAbstractJob.cpp @@ -27,7 +27,8 @@ #include // -------------------------------------------------------------------------- -ctkAbstractJob::ctkAbstractJob() +ctkAbstractJob::ctkAbstractJob(QObject* parent) + : QObject(parent) { this->Status = JobStatus::Initialized; this->Persistent = false; @@ -177,7 +178,7 @@ QThread::Priority ctkAbstractJob::priority() const } //---------------------------------------------------------------------------- -void ctkAbstractJob::setPriority(const QThread::Priority &priority) +void ctkAbstractJob::setPriority(QThread::Priority priority) { this->Priority = priority; } @@ -207,7 +208,7 @@ QString ctkAbstractJob::runningThreadID() const } //---------------------------------------------------------------------------- -void ctkAbstractJob::setRunningThreadID(QString runningThreadID) +void ctkAbstractJob::setRunningThreadID(const QString& runningThreadID) { this->RunningThreadID = runningThreadID; } @@ -219,7 +220,7 @@ QString ctkAbstractJob::log() const } //---------------------------------------------------------------------------- -void ctkAbstractJob::addLog(QString log) +void ctkAbstractJob::addLog(const QString& log) { this->Log += log; } diff --git a/Libs/Core/ctkAbstractJob.h b/Libs/Core/ctkAbstractJob.h index 124493f89d..48ea4c5b63 100644 --- a/Libs/Core/ctkAbstractJob.h +++ b/Libs/Core/ctkAbstractJob.h @@ -58,7 +58,7 @@ class CTK_CORE_EXPORT ctkAbstractJob : public QObject Q_PROPERTY(bool destroyAfterUse READ destroyAfterUse WRITE setDestroyAfterUse); public: - explicit ctkAbstractJob(); + explicit ctkAbstractJob(QObject* parent = nullptr); virtual ~ctkAbstractJob(); ///@{ @@ -90,7 +90,7 @@ class CTK_CORE_EXPORT ctkAbstractJob : public QObject Failed, Finished, }; - Q_ENUM(JobStatus) + Q_ENUM(JobStatus); JobStatus status() const; virtual void setStatus(JobStatus status); ///@} @@ -132,7 +132,7 @@ class CTK_CORE_EXPORT ctkAbstractJob : public QObject ///@{ /// Priority QThread::Priority priority() const; - void setPriority(const QThread::Priority& priority); + void setPriority(QThread::Priority priority); ///@} ///@{ @@ -153,13 +153,13 @@ class CTK_CORE_EXPORT ctkAbstractJob : public QObject ///@{ /// Running ThreadID QString runningThreadID() const; - void setRunningThreadID(QString runningThreadID); + void setRunningThreadID(const QString& runningThreadID); ///@} ///@{ /// Logged Text QString log() const; - void addLog(QString log); + void addLog(const QString& log); ///@} /// Generate worker for job diff --git a/Libs/Core/ctkAbstractWorker.cpp b/Libs/Core/ctkAbstractWorker.cpp index 211b70d87b..04becf1f12 100644 --- a/Libs/Core/ctkAbstractWorker.cpp +++ b/Libs/Core/ctkAbstractWorker.cpp @@ -31,7 +31,8 @@ #include "ctkAbstractWorker.h" // -------------------------------------------------------------------------- -ctkAbstractWorker::ctkAbstractWorker() +ctkAbstractWorker::ctkAbstractWorker(QObject* parent) + : QObject(parent) { this->setAutoDelete(false); } @@ -109,7 +110,7 @@ void ctkAbstractWorker::startNextJob() } //---------------------------------------------------------------------------- -void ctkAbstractWorker::onJobCanceled(const bool& wasCanceled) +void ctkAbstractWorker::onJobCanceled(bool wasCanceled) { if (!this->Job) { diff --git a/Libs/Core/ctkAbstractWorker.h b/Libs/Core/ctkAbstractWorker.h index 4da9bd53c6..27357f0104 100644 --- a/Libs/Core/ctkAbstractWorker.h +++ b/Libs/Core/ctkAbstractWorker.h @@ -42,7 +42,7 @@ class CTK_CORE_EXPORT ctkAbstractWorker : public QObject, public QRunnable Q_OBJECT public: - explicit ctkAbstractWorker(); + explicit ctkAbstractWorker(QObject* parent = nullptr); virtual ~ctkAbstractWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe @@ -72,7 +72,7 @@ class CTK_CORE_EXPORT ctkAbstractWorker : public QObject, public QRunnable public slots: /// These slots are thread safe virtual void startNextJob(); - virtual void onJobCanceled(const bool& wasCanceled); + virtual void onJobCanceled(bool wasCanceled); protected: QSharedPointer Job; diff --git a/Libs/Core/ctkCommandLineParser.cpp b/Libs/Core/ctkCommandLineParser.cpp index d34a6f1338..83f86452bc 100644 --- a/Libs/Core/ctkCommandLineParser.cpp +++ b/Libs/Core/ctkCommandLineParser.cpp @@ -237,7 +237,7 @@ QString CommandLineParserArgumentDescription::helpText(int fieldWidth, const cha QString shortAndLongArg; if (!this->ShortArg.isEmpty()) { - shortAndLongArg += QString(" %1%2").arg(this->ShortArgPrefix).arg(this->ShortArg); + shortAndLongArg += QString(" %1%2").arg(this->ShortArgPrefix, this->ShortArg); } if (!this->LongArg.isEmpty()) @@ -251,7 +251,7 @@ QString CommandLineParserArgumentDescription::helpText(int fieldWidth, const cha shortAndLongArg.append(", "); } - shortAndLongArg += QString("%1%2").arg(this->LongArgPrefix).arg(this->LongArg); + shortAndLongArg += QString("%1%2").arg(this->LongArgPrefix, this->LongArg); } if(!this->ArgHelp.isEmpty()) @@ -516,7 +516,7 @@ QHash ctkCommandLineParser::parseArguments(const QStringList& { this->Internal->ErrorString = QString( "Value(s) associated with argument %1 are incorrect. %2"). - arg(argument).arg(currentArgDesc->ExactMatchFailedMessage); + arg(argument, currentArgDesc->ExactMatchFailedMessage); if (this->Internal->Debug) { qDebug() << this->Internal->ErrorString; } if (ok) { *ok = false; } @@ -555,7 +555,7 @@ QHash ctkCommandLineParser::parseArguments(const QStringList& { this->Internal->ErrorString = QString( "Value(s) associated with argument %1 are incorrect. %2"). - arg(argument).arg(currentArgDesc->ExactMatchFailedMessage); + arg(argument, currentArgDesc->ExactMatchFailedMessage); if (this->Internal->Debug) { qDebug() << this->Internal->ErrorString; } if (ok) { *ok = false; } diff --git a/Libs/Core/ctkErrorLogAbstractModel.cpp b/Libs/Core/ctkErrorLogAbstractModel.cpp index 868dd5b17d..b4eb7223f4 100644 --- a/Libs/Core/ctkErrorLogAbstractModel.cpp +++ b/Libs/Core/ctkErrorLogAbstractModel.cpp @@ -92,10 +92,9 @@ ctkErrorLogAbstractModelPrivate::ctkErrorLogAbstractModelPrivate(ctkErrorLogAbst // -------------------------------------------------------------------------- ctkErrorLogAbstractModelPrivate::~ctkErrorLogAbstractModelPrivate() { - foreach(const QString& handlerName, this->RegisteredHandlers.keys()) + for (auto it = this->RegisteredHandlers.constBegin(); it != this->RegisteredHandlers.constEnd(); ++it) { - ctkErrorLogAbstractMessageHandler * msgHandler = - this->RegisteredHandlers.value(handlerName); + ctkErrorLogAbstractMessageHandler * msgHandler = it.value(); Q_ASSERT(msgHandler); msgHandler->setEnabled(false); delete msgHandler; @@ -117,8 +116,8 @@ void ctkErrorLogAbstractModelPrivate::init(QAbstractItemModel* itemModel) this->ItemModel = itemModel; QObject::connect(q, - SIGNAL(entryPosted(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString)), - q, SLOT(addEntry(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString)), + SIGNAL(entryPosted(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString)), + q, SLOT(addEntry(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString)), this->AsynchronousLogging ? Qt::QueuedConnection : Qt::BlockingQueuedConnection); } @@ -162,7 +161,7 @@ bool ctkErrorLogAbstractModel::registerMsgHandler(ctkErrorLogAbstractMessageHand { return false; } - if (d->RegisteredHandlers.keys().contains(msgHandler->handlerName())) + if (d->RegisteredHandlers.contains(msgHandler->handlerName())) { return false; } @@ -187,7 +186,7 @@ QStringList ctkErrorLogAbstractModel::msgHandlerNames()const bool ctkErrorLogAbstractModel::msgHandlerEnabled(const QString& handlerName) const { Q_D(const ctkErrorLogAbstractModel); - if (!d->RegisteredHandlers.keys().contains(handlerName)) + if (!d->RegisteredHandlers.contains(handlerName)) { return false; } @@ -198,7 +197,7 @@ bool ctkErrorLogAbstractModel::msgHandlerEnabled(const QString& handlerName) con void ctkErrorLogAbstractModel::setMsgHandlerEnabled(const QString& handlerName, bool enabled) { Q_D(ctkErrorLogAbstractModel); - if (!d->RegisteredHandlers.keys().contains(handlerName)) + if (!d->RegisteredHandlers.contains(handlerName)) { // qCritical() << "Failed to enable/disable message handler " << handlerName // << "- Handler not registered !"; @@ -212,11 +211,11 @@ QStringList ctkErrorLogAbstractModel::msgHandlerEnabled() const { Q_D(const ctkErrorLogAbstractModel); QStringList msgHandlers; - foreach(const QString& handlerName, d->RegisteredHandlers.keys()) + for (auto it = d->RegisteredHandlers.constBegin(); it != d->RegisteredHandlers.constEnd(); ++it) { - if (d->RegisteredHandlers.value(handlerName)->enabled()) + if (it.value()->enabled()) { - msgHandlers << handlerName; + msgHandlers << it.key(); } } return msgHandlers; @@ -247,9 +246,9 @@ void ctkErrorLogAbstractModel::disableAllMsgHandler() void ctkErrorLogAbstractModel::setAllMsgHandlerEnabled(bool enabled) { Q_D(ctkErrorLogAbstractModel); - foreach(const QString& msgHandlerName, d->RegisteredHandlers.keys()) + for (auto it = d->RegisteredHandlers.constBegin(); it != d->RegisteredHandlers.constEnd(); ++it) { - this->setMsgHandlerEnabled(msgHandlerName, enabled); + this->setMsgHandlerEnabled(it.key(), enabled); } } @@ -265,7 +264,7 @@ ctkErrorLogTerminalOutput::TerminalOutputs ctkErrorLogAbstractModel::terminalOut //------------------------------------------------------------------------------ void ctkErrorLogAbstractModel::setTerminalOutputs( - const ctkErrorLogTerminalOutput::TerminalOutputs& terminalOutput) + ctkErrorLogTerminalOutput::TerminalOutputs terminalOutput) { Q_D(ctkErrorLogAbstractModel); d->StdErrTerminalOutput.setEnabled(terminalOutput & ctkErrorLogTerminalOutput::StandardOutput); @@ -371,7 +370,7 @@ void ctkErrorLogAbstractModel::clear() } //------------------------------------------------------------------------------ -void ctkErrorLogAbstractModel::filterEntry(const ctkErrorLogLevel::LogLevels& logLevel, +void ctkErrorLogAbstractModel::filterEntry(ctkErrorLogLevel::LogLevels logLevel, bool disableFilter) { Q_D(ctkErrorLogAbstractModel); @@ -478,19 +477,18 @@ void ctkErrorLogAbstractModel::setAsynchronousLogging(bool value) return; } - foreach(const QString& handlerName, d->RegisteredHandlers.keys()) + for (auto it = d->RegisteredHandlers.constBegin(); it != d->RegisteredHandlers.constEnd(); ++it) { - d->setMessageHandlerConnection( - d->RegisteredHandlers.value(handlerName), value); + d->setMessageHandlerConnection(it.value(), value); } QObject::disconnect(this, - SIGNAL(entryPosted(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString)), - this, SLOT(addEntry(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString))); + SIGNAL(entryPosted(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString)), + this, SLOT(addEntry(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString))); QObject::connect(this, - SIGNAL(entryPosted(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString)), - this, SLOT(addEntry(QDateTime, QString, ctkErrorLogLevel::LogLevel, QString, ctkErrorLogContext, QString)), + SIGNAL(entryPosted(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString)), + this, SLOT(addEntry(QDateTime,QString,ctkErrorLogLevel::LogLevel,QString,ctkErrorLogContext,QString)), value ? Qt::QueuedConnection : Qt::BlockingQueuedConnection); d->AsynchronousLogging = value; @@ -521,7 +519,7 @@ int ctkErrorLogAbstractModel::numberOfFilesToKeep()const void ctkErrorLogAbstractModel::setNumberOfFilesToKeep(int value) { Q_D(ctkErrorLogAbstractModel); - return d->FileLogger.setNumberOfFilesToKeep(value); + d->FileLogger.setNumberOfFilesToKeep(value); } // -------------------------------------------------------------------------- @@ -582,7 +580,7 @@ int ctkErrorLogAbstractModel::logEntryCount()const ctkErrorLogAbstractMessageHandler* ctkErrorLogAbstractModel::msgHandler(const QString& handlerName)const { Q_D(const ctkErrorLogAbstractModel); - if (!d->RegisteredHandlers.keys().contains(handlerName)) + if (!d->RegisteredHandlers.contains(handlerName)) { return nullptr; } diff --git a/Libs/Core/ctkErrorLogAbstractModel.h b/Libs/Core/ctkErrorLogAbstractModel.h index 65ebe123ab..cd5c50b7ab 100644 --- a/Libs/Core/ctkErrorLogAbstractModel.h +++ b/Libs/Core/ctkErrorLogAbstractModel.h @@ -99,11 +99,11 @@ class CTK_CORE_EXPORT ctkErrorLogAbstractModel : public QSortFilterProxyModel /// Set terminal output mode /// \sa terminalOutputs() /// \sa TerminalOutput - void setTerminalOutputs(const ctkErrorLogTerminalOutput::TerminalOutputs& terminalOutput); + void setTerminalOutputs(ctkErrorLogTerminalOutput::TerminalOutputs terminalOutput); ctkErrorLogLevel::LogLevels logLevelFilter()const; - void filterEntry(const ctkErrorLogLevel::LogLevels& logLevel = ctkErrorLogLevel::Unknown, bool disableFilter = false); + void filterEntry(ctkErrorLogLevel::LogLevels logLevel = ctkErrorLogLevel::Unknown, bool disableFilter = false); bool logEntryGrouping()const; void setLogEntryGrouping(bool value); diff --git a/Libs/Core/ctkErrorLogFDMessageHandler.cpp b/Libs/Core/ctkErrorLogFDMessageHandler.cpp index d7a24c127c..a7ed5603a5 100644 --- a/Libs/Core/ctkErrorLogFDMessageHandler.cpp +++ b/Libs/Core/ctkErrorLogFDMessageHandler.cpp @@ -254,8 +254,8 @@ ctkErrorLogFDMessageHandlerPrivate::~ctkErrorLogFDMessageHandlerPrivate() QString ctkErrorLogFDMessageHandler::HandlerName = QLatin1String("FD"); // -------------------------------------------------------------------------- -ctkErrorLogFDMessageHandler::ctkErrorLogFDMessageHandler() : - Superclass(), d_ptr(new ctkErrorLogFDMessageHandlerPrivate()) +ctkErrorLogFDMessageHandler::ctkErrorLogFDMessageHandler(QObject* parent) : + Superclass(parent), d_ptr(new ctkErrorLogFDMessageHandlerPrivate()) { Q_D(ctkErrorLogFDMessageHandler); d->StdOutFDHandler = new ctkFDHandler(this, ctkErrorLogLevel::Info, ctkErrorLogTerminalOutput::StandardOutput); diff --git a/Libs/Core/ctkErrorLogFDMessageHandler.h b/Libs/Core/ctkErrorLogFDMessageHandler.h index 96372987fe..71274912f4 100644 --- a/Libs/Core/ctkErrorLogFDMessageHandler.h +++ b/Libs/Core/ctkErrorLogFDMessageHandler.h @@ -31,10 +31,11 @@ class ctkErrorLogFDMessageHandlerPrivate; /// \ingroup Core class CTK_CORE_EXPORT ctkErrorLogFDMessageHandler : public ctkErrorLogAbstractMessageHandler { + Q_OBJECT public: typedef ctkErrorLogAbstractMessageHandler Superclass; - ctkErrorLogFDMessageHandler(); + ctkErrorLogFDMessageHandler(QObject* parent = nullptr); virtual ~ctkErrorLogFDMessageHandler(); static QString HandlerName; diff --git a/Libs/Core/ctkErrorLogStreamMessageHandler.cpp b/Libs/Core/ctkErrorLogStreamMessageHandler.cpp index 444bbecf4c..cad4dffd24 100644 --- a/Libs/Core/ctkErrorLogStreamMessageHandler.cpp +++ b/Libs/Core/ctkErrorLogStreamMessageHandler.cpp @@ -213,8 +213,8 @@ ctkErrorLogStreamMessageHandlerPrivate::~ctkErrorLogStreamMessageHandlerPrivate( QString ctkErrorLogStreamMessageHandler::HandlerName = QLatin1String("Stream"); // -------------------------------------------------------------------------- -ctkErrorLogStreamMessageHandler::ctkErrorLogStreamMessageHandler() : - Superclass(), d_ptr(new ctkErrorLogStreamMessageHandlerPrivate()) +ctkErrorLogStreamMessageHandler::ctkErrorLogStreamMessageHandler(QObject* parent) : + Superclass(parent), d_ptr(new ctkErrorLogStreamMessageHandlerPrivate()) { Q_D(ctkErrorLogStreamMessageHandler); d->CoutStreamHandler = new ctkStreamHandler(this, ctkErrorLogLevel::Info, std::cout); diff --git a/Libs/Core/ctkErrorLogStreamMessageHandler.h b/Libs/Core/ctkErrorLogStreamMessageHandler.h index 608c057c14..1607e86268 100644 --- a/Libs/Core/ctkErrorLogStreamMessageHandler.h +++ b/Libs/Core/ctkErrorLogStreamMessageHandler.h @@ -32,10 +32,11 @@ class ctkErrorLogStreamMessageHandlerPrivate; class CTK_CORE_EXPORT ctkErrorLogStreamMessageHandler : public ctkErrorLogAbstractMessageHandler { + Q_OBJECT public: typedef ctkErrorLogAbstractMessageHandler Superclass; - ctkErrorLogStreamMessageHandler(); + ctkErrorLogStreamMessageHandler(QObject* parent = nullptr); virtual ~ctkErrorLogStreamMessageHandler(); static QString HandlerName; diff --git a/Libs/Core/ctkJobScheduler.cpp b/Libs/Core/ctkJobScheduler.cpp index 392cd23628..72ccb62731 100644 --- a/Libs/Core/ctkJobScheduler.cpp +++ b/Libs/Core/ctkJobScheduler.cpp @@ -33,11 +33,11 @@ // CTK includes #include "ctkAbstractJob.h" #include "ctkJobScheduler.h" -#include "ctkJobScheduler_p.h" #include "ctkAbstractWorker.h" #include "ctkLogger.h" +#include -static ctkLogger logger("org.commontk.core.AbstractScheduler"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.core.AbstractScheduler")) // -------------------------------------------------------------------------- // ctkJobSchedulerPrivate methods @@ -115,7 +115,7 @@ void ctkJobSchedulerPrivate::queueJobsInThreadPool() return; } - logger.debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") .arg(job->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); @@ -144,17 +144,15 @@ bool ctkJobSchedulerPrivate::insertJob(QSharedPointer job) if (this->FreezeJobsScheduling) { - logger.debug(QString("ctkJobScheduler: job object %1 of type %2 in thread %3 " + logger->debug(QString("ctkJobScheduler: job object %1 of type %2 in thread %3 " "not added to the job list since jobs are being stopped.\n") - .arg(job->jobUID()) - .arg(job->className()) + .arg(job->jobUID(), job->className()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); return false; } - logger.debug(QString("ctkJobScheduler: creating job object %1 of type %2 in thread %3.\n") - .arg(job->jobUID()) - .arg(job->className()) + logger->debug(QString("ctkJobScheduler: creating job object %1 of type %2 in thread %3.\n") + .arg(job->jobUID(), job->className()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); QMetaObject::Connection startedConnection = QObject::connect(job.data(), &ctkAbstractJob::started, q, [q, job](){ @@ -188,7 +186,7 @@ bool ctkJobSchedulerPrivate::insertJob(QSharedPointer job) emit q->jobInitialized(job->toVariant()); - logger.debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") .arg(job->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); @@ -206,7 +204,7 @@ bool ctkJobSchedulerPrivate::insertJob(QSharedPointer job) return false; } - logger.debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMScheduler: creating worker for job %1 in thread %2.\n") .arg(job->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); @@ -226,9 +224,8 @@ bool ctkJobSchedulerPrivate::insertJob(QSharedPointer job) //------------------------------------------------------------------------------ bool ctkJobSchedulerPrivate::cleanJob(const QString &jobUID) { - logger.debug(QString("ctkJobScheduler: deleting job object %1 in thread %2.\n") - .arg(jobUID) - .arg(QString::number(reinterpret_cast(QThread::currentThreadId()), 16))); + logger->debug(QString("ctkJobScheduler: deleting job object %1 in thread %2.\n") + .arg(jobUID, QString::number(reinterpret_cast(QThread::currentThreadId()), 16))); { // The QWriteLocker is enclosed within brackets to restrict its scope and @@ -277,9 +274,8 @@ void ctkJobSchedulerPrivate::cleanJobs(const QStringList &jobUIDs) //------------------------------------------------------------------------------ bool ctkJobSchedulerPrivate::removeJob(const QString& jobUID) { - logger.debug(QString("ctkJobScheduler: deleting job object %1 in thread %2.\n") - .arg(jobUID) - .arg(QString::number(reinterpret_cast(QThread::currentThreadId()), 16))); + logger->debug(QString("ctkJobScheduler: deleting job object %1 in thread %2.\n") + .arg(jobUID, QString::number(reinterpret_cast(QThread::currentThreadId()), 16))); { // The QWriteLocker is enclosed within brackets to restrict its scope and @@ -410,11 +406,11 @@ ctkJobScheduler::~ctkJobScheduler() } //------------------------------------------------------------------------------ -CTK_SET_CPP(ctkJobScheduler, const bool&, setFreezeJobsScheduling, FreezeJobsScheduling); +CTK_SET_CPP(ctkJobScheduler, bool, setFreezeJobsScheduling, FreezeJobsScheduling); CTK_GET_CPP(ctkJobScheduler, bool, freezeJobsScheduling, FreezeJobsScheduling) -CTK_SET_CPP(ctkJobScheduler, const int&, setMaximumNumberOfRetry, MaximumNumberOfRetry); +CTK_SET_CPP(ctkJobScheduler, int, setMaximumNumberOfRetry, MaximumNumberOfRetry); CTK_GET_CPP(ctkJobScheduler, int, maximumNumberOfRetry, MaximumNumberOfRetry) -CTK_SET_CPP(ctkJobScheduler, const int&, setRetryDelay, RetryDelay); +CTK_SET_CPP(ctkJobScheduler, int, setRetryDelay, RetryDelay); CTK_GET_CPP(ctkJobScheduler, int, retryDelay, RetryDelay) //---------------------------------------------------------------------------- @@ -782,7 +778,7 @@ int ctkJobScheduler::maximumThreadCount() const } //---------------------------------------------------------------------------- -void ctkJobScheduler::setMaximumThreadCount(const int& maximumThreadCount) +void ctkJobScheduler::setMaximumThreadCount(int maximumThreadCount) { Q_D(ctkJobScheduler); d->ThreadPool->setMaxThreadCount(maximumThreadCount); @@ -811,7 +807,7 @@ void ctkJobScheduler::onJobStarted(ctkAbstractJob* job) return; } - logger.debug(job->loggerReport(tr("started"))); + logger->debug(job->loggerReport(tr("started"))); d->BatchedJobsStarted.append(job->toVariant()); if (!d->ThrottleTimer->isActive()) @@ -829,7 +825,7 @@ void ctkJobScheduler::onJobUserStopped(ctkAbstractJob* job) return; } - logger.debug(job->loggerReport(tr("user stopped"))); + logger->debug(job->loggerReport(tr("user stopped"))); QString jobUID = job->jobUID(); this->deleteWorker(jobUID); @@ -858,7 +854,7 @@ void ctkJobScheduler::onJobFinished(ctkAbstractJob* job) return; } - logger.debug(job->loggerReport(tr("finished"))); + logger->debug(job->loggerReport(tr("finished"))); QString jobUID = job->jobUID(); this->deleteWorker(jobUID); @@ -887,7 +883,7 @@ void ctkJobScheduler::onJobAttemptFailed(ctkAbstractJob* job) return; } - logger.debug(job->loggerReport(tr("attempt failed"))); + logger->debug(job->loggerReport(tr("attempt failed"))); QString jobUID = job->jobUID(); this->deleteWorker(jobUID); @@ -916,7 +912,7 @@ void ctkJobScheduler::onJobFailed(ctkAbstractJob* job) return; } - logger.debug(job->loggerReport(tr("failed"))); + logger->debug(job->loggerReport(tr("failed"))); QString jobUID = job->jobUID(); this->deleteWorker(jobUID); @@ -937,7 +933,7 @@ void ctkJobScheduler::onJobFailed(ctkAbstractJob* job) } //---------------------------------------------------------------------------- -void ctkJobScheduler::onProgressJobDetail(QVariant data) +void ctkJobScheduler::onProgressJobDetail(const QVariant& data) { Q_D(ctkJobScheduler); diff --git a/Libs/Core/ctkJobScheduler.h b/Libs/Core/ctkJobScheduler.h index 2ed8039fad..32788cb003 100644 --- a/Libs/Core/ctkJobScheduler.h +++ b/Libs/Core/ctkJobScheduler.h @@ -28,15 +28,21 @@ #include #include #include +// Qt includes +#include +#include +#include class QThreadPool; // CTK includes #include "ctkCoreExport.h" class ctkAbstractJob; class ctkJobSchedulerPrivate; +class ctkAbstractWorker; //------------------------------------------------------------------------------ /// \ingroup Core +class ctkJobSchedulerPrivate; //Forward declaration needed within this file class CTK_CORE_EXPORT ctkJobScheduler : public QObject { Q_OBJECT @@ -78,28 +84,28 @@ class CTK_CORE_EXPORT ctkJobScheduler : public QObject /// if set to true, new jobs will not be queued /// default: false bool freezeJobsScheduling() const; - void setFreezeJobsScheduling(const bool& freezeJobsScheduling); + void setFreezeJobsScheduling(bool freezeJobsScheduling); ///@} ///@{ /// Maximum number of concurrent QThreads spawned by the threadPool in the Job pool /// default: 20 int maximumThreadCount() const; - void setMaximumThreadCount(const int& maximumThreadCount); + void setMaximumThreadCount(int maximumThreadCount); ///@} ///@{ /// Maximum number of retries that the Job pool will try on each failed Job /// default: 3 int maximumNumberOfRetry() const; - void setMaximumNumberOfRetry(const int& maximumNumberOfRetry); + void setMaximumNumberOfRetry(int maximumNumberOfRetry); ///@} ///@{ /// Retry delay in millisec /// default: 100 msec int retryDelay() const; - void setRetryDelay(const int& retryDelay); + void setRetryDelay(int retryDelay); ///@} /// Return the threadPool. @@ -125,7 +131,7 @@ public Q_SLOTS: virtual void onJobFinished(ctkAbstractJob*); virtual void onJobAttemptFailed(ctkAbstractJob*); virtual void onJobFailed(ctkAbstractJob*); - virtual void onProgressJobDetail(QVariant); + virtual void onProgressJobDetail(const QVariant&); virtual void emitThrottledSignals(); protected: @@ -137,4 +143,53 @@ public Q_SLOTS: Q_DISABLE_COPY(ctkJobScheduler) }; + +//------------------------------------------------------------------------------ +class CTK_CORE_EXPORT ctkJobSchedulerPrivate : public QObject +{ + Q_OBJECT + Q_DECLARE_PUBLIC(ctkJobScheduler) + +protected: + ctkJobScheduler* const q_ptr; + +public: + ctkJobSchedulerPrivate(ctkJobScheduler& object); + virtual ~ctkJobSchedulerPrivate(); + + /// Convenient setup methods + virtual void init(); + + virtual bool insertJob(QSharedPointer job); + virtual bool cleanJob(const QString& jobUID); + virtual void cleanJobs(const QStringList& jobUIDs); + virtual bool removeJob(const QString& jobUID); + virtual void removeJobs(const QStringList& jobUIDs); + virtual int getSameTypeJobsInThreadPoolQueueOrRunning(QSharedPointer job); + virtual QString generateUniqueJobUID(); + virtual void queueJobsInThreadPool(); + virtual void clearBactchedJobsLists(); + + QReadWriteLock QueueLock; + + int RetryDelay{100}; + int MaximumNumberOfRetry{3}; + bool FreezeJobsScheduling{false}; + + QSharedPointer ThreadPool; + QMap> JobsQueue; + QMap> JobsConnections; + QMap> Workers; + QMap RunningJobsByJobClass; + QList BatchedJobsStarted; + QList BatchedJobsUserStopped; + QList BatchedJobsFinished; + QList BatchedJobsAttemptFailed; + QList BatchedJobsFailed; + QList BatchedJobsProgress; + QSharedPointer ThrottleTimer; + int ThrottleTimeInterval{300}; + int MaximumBatchedSignalsForTimeInterval{20}; +}; + #endif // ctkJobScheduler_h diff --git a/Libs/Core/ctkJobScheduler_p.h b/Libs/Core/ctkJobScheduler_p.h deleted file mode 100644 index e3810c44a6..0000000000 --- a/Libs/Core/ctkJobScheduler_p.h +++ /dev/null @@ -1,86 +0,0 @@ -/*========================================================================= - - Library: CTK - - Copyright (c) Kitware Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0.txt - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -=========================================================================*/ - -#ifndef __ctkJobSchedulerPrivate_h -#define __ctkJobSchedulerPrivate_h - -// Qt includes -#include -#include -#include -class QThreadPool; - -// ctkCore includes -#include "ctkCoreExport.h" -class ctkAbstractJob; -class ctkAbstractWorker; - -// ctkDICOMCore includes -#include "ctkJobScheduler.h" - -//------------------------------------------------------------------------------ -class CTK_CORE_EXPORT ctkJobSchedulerPrivate : public QObject -{ - Q_OBJECT - Q_DECLARE_PUBLIC(ctkJobScheduler) - -protected: - ctkJobScheduler* const q_ptr; - -public: - ctkJobSchedulerPrivate(ctkJobScheduler& object); - virtual ~ctkJobSchedulerPrivate(); - - /// Convenient setup methods - virtual void init(); - - virtual bool insertJob(QSharedPointer job); - virtual bool cleanJob(const QString& jobUID); - virtual void cleanJobs(const QStringList& jobUIDs); - virtual bool removeJob(const QString& jobUID); - virtual void removeJobs(const QStringList& jobUIDs); - virtual int getSameTypeJobsInThreadPoolQueueOrRunning(QSharedPointer job); - virtual QString generateUniqueJobUID(); - virtual void queueJobsInThreadPool(); - virtual void clearBactchedJobsLists(); - - QReadWriteLock QueueLock; - - int RetryDelay{100}; - int MaximumNumberOfRetry{3}; - bool FreezeJobsScheduling{false}; - - QSharedPointer ThreadPool; - QMap> JobsQueue; - QMap> JobsConnections; - QMap> Workers; - QMap RunningJobsByJobClass; - QList BatchedJobsStarted; - QList BatchedJobsUserStopped; - QList BatchedJobsFinished; - QList BatchedJobsAttemptFailed; - QList BatchedJobsFailed; - QList BatchedJobsProgress; - QSharedPointer ThrottleTimer; - int ThrottleTimeInterval{300}; - int MaximumBatchedSignalsForTimeInterval{20}; -}; - -#endif diff --git a/Libs/Core/ctkLogger.cpp b/Libs/Core/ctkLogger.cpp index 1330f01258..01b2a68ba3 100644 --- a/Libs/Core/ctkLogger.cpp +++ b/Libs/Core/ctkLogger.cpp @@ -37,7 +37,7 @@ class ctkLoggerPrivate }; //----------------------------------------------------------------------------- -ctkLogger::ctkLogger(QString name, QObject* _parent) +ctkLogger::ctkLogger(const QString& name, QObject* _parent) : Superclass(_parent) , d_ptr(new ctkLoggerPrivate) { @@ -108,7 +108,7 @@ void ctkLogger::fatal(const QString& s) } //----------------------------------------------------------------------------- -void ctkLogger::setLogLevel(const ctkErrorLogLevel::LogLevel& level) +void ctkLogger::setLogLevel(ctkErrorLogLevel::LogLevel level) { Q_D(ctkLogger); d->LogLevel = level; diff --git a/Libs/Core/ctkLogger.h b/Libs/Core/ctkLogger.h index 2ceaec0c9c..be9318b663 100644 --- a/Libs/Core/ctkLogger.h +++ b/Libs/Core/ctkLogger.h @@ -40,7 +40,7 @@ class CTK_CORE_EXPORT ctkLogger : public QObject typedef QObject Superclass; /// Default level is ctkErrorLogLevel::LogLevel::Warning - explicit ctkLogger(QString name, QObject* parent = 0); + explicit ctkLogger(const QString& name, QObject* parent = 0); virtual ~ctkLogger(); Q_INVOKABLE void trace(const QString& s); @@ -50,7 +50,7 @@ class CTK_CORE_EXPORT ctkLogger : public QObject Q_INVOKABLE void error(const QString& s); Q_INVOKABLE void fatal(const QString& s); - void setLogLevel(const ctkErrorLogLevel::LogLevel& level); + void setLogLevel(ctkErrorLogLevel::LogLevel level); ctkErrorLogLevel::LogLevel logLevel() const; protected: diff --git a/Libs/Core/ctkWorkflow.cpp b/Libs/Core/ctkWorkflow.cpp index 971e3c369e..9dd76b8dc0 100644 --- a/Libs/Core/ctkWorkflow.cpp +++ b/Libs/Core/ctkWorkflow.cpp @@ -296,12 +296,12 @@ void ctkWorkflowPrivate::createTransitionToPreviousStartingStep(ctkWorkflowStep* // -------------------------------------------------------------------------- ctkWorkflowStep* ctkWorkflowPrivate::stepFromId(const QString& id)const { - foreach(ctkWorkflowStep* step, this->StepToForwardAndBackwardStepMap.keys()) + for (auto it = this->StepToForwardAndBackwardStepMap.constBegin(); it != this->StepToForwardAndBackwardStepMap.constEnd(); ++it) { - Q_ASSERT(step); - if (QString::compare(step->id(), id, Qt::CaseInsensitive) == 0) + Q_ASSERT(it.key()); + if (QString::compare(it.key()->id(), id, Qt::CaseInsensitive) == 0) { - return step; + return it.key(); } } return 0; @@ -345,7 +345,7 @@ void ctkWorkflowPrivate::validateInternal(ctkWorkflowStep* step) void ctkWorkflowPrivate::onEntryInternal( ctkWorkflowStep* step, ctkWorkflowStep* comingFrom, - const ctkWorkflowInterstepTransition::InterstepTransitionType& transitionType) + ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { Q_ASSERT(step); @@ -433,7 +433,7 @@ void ctkWorkflowPrivate::processingAfterOnEntry() void ctkWorkflowPrivate::onExitInternal( ctkWorkflowStep* step, ctkWorkflowStep* goingTo, - const ctkWorkflowInterstepTransition::InterstepTransitionType& transitionType) + ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { Q_ASSERT(step); @@ -739,11 +739,11 @@ QList ctkWorkflow::finishSteps()const // iterate through our list of steps, and keep the steps that don't have anything following them QList finishSteps; - foreach (ctkWorkflowStep* step, d->StepToForwardAndBackwardStepMap.keys()) + for (auto it = d->StepToForwardAndBackwardStepMap.constBegin(); it != d->StepToForwardAndBackwardStepMap.constEnd(); ++it) { - if (!this->canGoForward(step)) + if (!this->canGoForward(it.key())) { - finishSteps.append(step); + finishSteps.append(it.key()); } } return finishSteps; diff --git a/Libs/Core/ctkWorkflowStep.cpp b/Libs/Core/ctkWorkflowStep.cpp index 7153c0dc0b..1d6ec5f34d 100644 --- a/Libs/Core/ctkWorkflowStep.cpp +++ b/Libs/Core/ctkWorkflowStep.cpp @@ -36,8 +36,9 @@ // ctkWorkflowStepPrivate methods // -------------------------------------------------------------------------- -ctkWorkflowStepPrivate::ctkWorkflowStepPrivate(ctkWorkflowStep& object) - :q_ptr(&object) +ctkWorkflowStepPrivate::ctkWorkflowStepPrivate(ctkWorkflowStep& object, QObject* parent) + : QObject(parent) + , q_ptr(&object) { qRegisterMetaType("ctkWorkflowStep*"); this->Workflow = 0; @@ -82,37 +83,37 @@ ctkWorkflowStepPrivate::~ctkWorkflowStepPrivate() } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::validationCompleteInternal(bool validationResults, const QString& branchId)const +void ctkWorkflowStepPrivate::validationCompleteInternal(bool validationResults, const QString& branchId) { emit validationComplete(validationResults, branchId); } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::onEntryCompleteInternal()const +void ctkWorkflowStepPrivate::onEntryCompleteInternal() { emit onEntryComplete(); } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::onExitCompleteInternal()const +void ctkWorkflowStepPrivate::onExitCompleteInternal() { emit onExitComplete(); } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::invokeValidateCommandInternal(const QString& desiredBranchId)const +void ctkWorkflowStepPrivate::invokeValidateCommandInternal(const QString& desiredBranchId) { emit invokeValidateCommand(desiredBranchId); } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::invokeOnEntryCommandInternal(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const +void ctkWorkflowStepPrivate::invokeOnEntryCommandInternal(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { emit invokeOnEntryCommand(comingFrom, transitionType); } // -------------------------------------------------------------------------- -void ctkWorkflowStepPrivate::invokeOnExitCommandInternal(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const +void ctkWorkflowStepPrivate::invokeOnExitCommandInternal(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { emit invokeOnExitCommand(goingTo, transitionType); } @@ -160,7 +161,7 @@ void ctkWorkflowStep::setId(const QString& newId) if (d->Workflow && d->Workflow->hasStep(newId) && !this->id().isEmpty()) { qWarning() << QString("ctkWorkflowStep - Failed to change id from '%1' to '%2' - " - "Step already added to a workflow !").arg(this->id()).arg(newId); + "Step already added to a workflow !").arg(this->id(), newId); return; } d->Id = newId; @@ -210,44 +211,44 @@ QObject* ctkWorkflowStep::ctkWorkflowStepQObject() } // -------------------------------------------------------------------------- -void ctkWorkflowStep::validationComplete(bool validationResults, const QString& branchId)const +void ctkWorkflowStep::validationComplete(bool validationResults, const QString& branchId) { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->validationCompleteInternal(validationResults, branchId); } // -------------------------------------------------------------------------- -void ctkWorkflowStep::onEntryComplete()const +void ctkWorkflowStep::onEntryComplete() { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->onEntryCompleteInternal(); } // -------------------------------------------------------------------------- -void ctkWorkflowStep::onExitComplete()const +void ctkWorkflowStep::onExitComplete() { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->onExitCompleteInternal(); } // -------------------------------------------------------------------------- -void ctkWorkflowStep::invokeValidateCommand(const QString& desiredBranchId)const +void ctkWorkflowStep::invokeValidateCommand(const QString& desiredBranchId) { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->invokeValidateCommandInternal(desiredBranchId); } // -------------------------------------------------------------------------- -void ctkWorkflowStep::invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const +void ctkWorkflowStep::invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->invokeOnEntryCommandInternal(comingFrom, transitionType); } // -------------------------------------------------------------------------- -void ctkWorkflowStep::invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const +void ctkWorkflowStep::invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType) { - Q_D(const ctkWorkflowStep); + Q_D(ctkWorkflowStep); d->invokeOnExitCommandInternal(goingTo, transitionType); } diff --git a/Libs/Core/ctkWorkflowStep.h b/Libs/Core/ctkWorkflowStep.h index d2836636cd..eb8fbc5f0f 100644 --- a/Libs/Core/ctkWorkflowStep.h +++ b/Libs/Core/ctkWorkflowStep.h @@ -208,37 +208,37 @@ class CTK_CORE_EXPORT ctkWorkflowStep /// step's processing should be performed. /// /// \sa validation() - void invokeValidateCommand(const QString& desiredBranchId = QString())const; + void invokeValidateCommand(const QString& desiredBranchId = QString()); /// \brief Signal (emitted by the private implementation) indicating that validation of this /// step's processing has completed. /// /// \sa validation() - void validationComplete(bool validationSuceeded, const QString& branchId = QString())const; + void validationComplete(bool validationSuceeded, const QString& branchId = QString()); /// \brief Signal (emitted by the private implementation) indicating that the step's 'onEntry' /// processing should be performed. /// /// \sa onEntry() - void invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); /// \brief Signal (emitted by the private implementation) indicating that the step's 'onEntry' /// processing has completed. /// /// \sa onEntry() - void onEntryComplete()const; + void onEntryComplete(); /// \brief Signal (emitted by the private implementation) indicating that the step's 'onExit' /// processing should be performed. /// /// \sa onExit() - void invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); /// \brief Signal (emitted by the private implementation) indicating that the step's 'onExit' /// processing has completed. /// /// \sa onExit() - void onExitComplete()const; + void onExitComplete(); protected: QScopedPointer d_ptr; diff --git a/Libs/Core/ctkWorkflowStep_p.h b/Libs/Core/ctkWorkflowStep_p.h index 994b50698f..a990e5cba7 100644 --- a/Libs/Core/ctkWorkflowStep_p.h +++ b/Libs/Core/ctkWorkflowStep_p.h @@ -48,7 +48,7 @@ class CTK_CORE_EXPORT ctkWorkflowStepPrivate: public QObject public: ctkWorkflowStep* q_ptr; - ctkWorkflowStepPrivate(ctkWorkflowStep& object); + ctkWorkflowStepPrivate(ctkWorkflowStep& object, QObject* parent = nullptr); ~ctkWorkflowStepPrivate(); protected: @@ -71,31 +71,31 @@ class CTK_CORE_EXPORT ctkWorkflowStepPrivate: public QObject bool HasOnEntryCommand; bool HasOnExitCommand; - void invokeValidateCommandInternal(const QString& desiredBranchId)const; + void invokeValidateCommandInternal(const QString& desiredBranchId); - void validationCompleteInternal(bool validationSuceeded, const QString& branchId)const; + void validationCompleteInternal(bool validationSuceeded, const QString& branchId); - void invokeOnEntryCommandInternal(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnEntryCommandInternal(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); - void onEntryCompleteInternal()const; + void onEntryCompleteInternal(); - void invokeOnExitCommandInternal(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnExitCommandInternal(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); - void onExitCompleteInternal()const; + void onExitCompleteInternal(); Q_SIGNALS: - void invokeValidateCommand(const QString& desiredBranchId)const; + void invokeValidateCommand(const QString& desiredBranchId); - void validationComplete(bool validationSuceeded, const QString& branchId)const; + void validationComplete(bool validationSuceeded, const QString& branchId); - void invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); - void onEntryComplete()const; + void onEntryComplete(); - void invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const; + void invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); - void onExitComplete()const; + void onExitComplete(); private: friend class ctkWorkflowPrivate; // for access to invoke...Internal() methods diff --git a/Libs/Core/ctkWorkflowTransitions.h b/Libs/Core/ctkWorkflowTransitions.h index 19367f1f48..7cc0694043 100644 --- a/Libs/Core/ctkWorkflowTransitions.h +++ b/Libs/Core/ctkWorkflowTransitions.h @@ -74,8 +74,9 @@ class CTK_CORE_EXPORT ctkWorkflowIntrastepTransition : public QAbstractTransitio ValidationFailedTransition }; - ctkWorkflowIntrastepTransition(IntrastepTransitionType newTransitionType) - : TransitionType(newTransitionType){} + ctkWorkflowIntrastepTransition(IntrastepTransitionType newTransitionType, + QState* sourceState = nullptr) + : QAbstractTransition(sourceState), TransitionType(newTransitionType){} IntrastepTransitionType transitionType() {return this->TransitionType;} @@ -143,10 +144,12 @@ class CTK_CORE_EXPORT ctkWorkflowInterstepTransition : public QAbstractTransitio TransitionToPreviousStartingStepAfterSuccessfulGoToFinishStep }; Q_ENUM(InterstepTransitionType) - ctkWorkflowInterstepTransition(InterstepTransitionType newTransitionType) - : TransitionType(newTransitionType){} - ctkWorkflowInterstepTransition(InterstepTransitionType newTransitionType, const QString& newId) - : TransitionType(newTransitionType), + ctkWorkflowInterstepTransition(InterstepTransitionType newTransitionType, + QState* sourceState = nullptr) + : QAbstractTransition(sourceState), TransitionType(newTransitionType){} + ctkWorkflowInterstepTransition(InterstepTransitionType newTransitionType, const QString& newId, + QState* sourceState = nullptr) + : QAbstractTransition(sourceState), TransitionType(newTransitionType), Id(newId) {} InterstepTransitionType transitionType() {return this->TransitionType;} diff --git a/Libs/Core/ctkWorkflow_p.h b/Libs/Core/ctkWorkflow_p.h index 4dfd93c002..bfb11470b6 100644 --- a/Libs/Core/ctkWorkflow_p.h +++ b/Libs/Core/ctkWorkflow_p.h @@ -62,13 +62,13 @@ struct forwardAndBackwardSteps return this->BackwardBranchIds; } - void appendForwardStep(ctkWorkflowStep* step, QString id) + void appendForwardStep(ctkWorkflowStep* step, const QString& id) { this->ForwardSteps.append(step); this->ForwardBranchIds.append(id); } - void appendBackwardStep(ctkWorkflowStep* step, QString id) + void appendBackwardStep(ctkWorkflowStep* step, const QString& id) { this->BackwardSteps.append(step); this->BackwardBranchIds.append(id); @@ -86,7 +86,7 @@ struct forwardAndBackwardSteps } } - ctkWorkflowStep* forwardStep(QString branchId) + ctkWorkflowStep* forwardStep(const QString& branchId) { int index = this->ForwardBranchIds.indexOf(branchId); if (index != -1) @@ -211,14 +211,14 @@ class ctkWorkflowPrivate : public QObject /// Does some sanity checks and then either calls onEntry() or emits the invokeOnEntryCommand(), /// depending on whether the user indicates that there is an onEntryCommand. void onEntryInternal(ctkWorkflowStep* step, ctkWorkflowStep* comingFrom, - const ctkWorkflowInterstepTransition::InterstepTransitionType& transitionType); + ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); /// \brief Performs computation required when exiting this step. /// /// Does some sanity checks and then either calls onExit() or emits the invokeOnExitCommand(), /// depending on whether the user indicates that there is an onExitCommand. void onExitInternal(ctkWorkflowStep* step, ctkWorkflowStep* goingTo, - const ctkWorkflowInterstepTransition::InterstepTransitionType& transitionType); + ctkWorkflowInterstepTransition::InterstepTransitionType transitionType); /// Get the step in the workflow with a given id. ctkWorkflowStep* stepFromId(const QString& id)const; diff --git a/Libs/DICOM/Core/CMakeLists.txt b/Libs/DICOM/Core/CMakeLists.txt index f3260b7b79..8d3c540a61 100644 --- a/Libs/DICOM/Core/CMakeLists.txt +++ b/Libs/DICOM/Core/CMakeLists.txt @@ -68,7 +68,6 @@ set(KIT_SRCS ctkDICOMRetrieveWorker_p.h ctkDICOMScheduler.cpp ctkDICOMScheduler.h - ctkDICOMScheduler_p.h ctkDICOMSeriesFilterProxyModel.cpp ctkDICOMSeriesFilterProxyModel.h ctkDICOMSeriesModel.cpp @@ -122,6 +121,7 @@ set(KIT_SRCS set_source_files_properties( ctkDICOMAbstractThumbnailGenerator.h ctkDICOMDisplayedFieldGeneratorAbstractRule.h + ctkDICOMJob.h WRAP_EXCLUDE ) @@ -147,8 +147,6 @@ set(KIT_MOC_SRCS ctkDICOMJobResponseSet.h ctkDICOMFilterProxyModel.h ctkDICOMModel.h - ctkDICOMPatientFilterProxyModel.h - ctkDICOMPatientModel.h ctkDICOMQuery.h ctkDICOMQueryJob.h ctkDICOMQueryJob_p.h @@ -160,12 +158,6 @@ set(KIT_MOC_SRCS ctkDICOMRetrieveWorker.h ctkDICOMRetrieveWorker_p.h ctkDICOMScheduler.h - ctkDICOMScheduler_p.h - ctkDICOMSeriesFilterProxyModel.h - ctkDICOMSeriesModel.h - ctkDICOMStudyFilterProxyModel.h - ctkDICOMStudyMergedFilterProxyModel.h - ctkDICOMStudyModel.h ctkDICOMServer.h ctkDICOMStorageListener.h ctkDICOMStorageListenerJob.h diff --git a/Libs/DICOM/Core/ctkDICOMAbstractThumbnailGenerator.cpp b/Libs/DICOM/Core/ctkDICOMAbstractThumbnailGenerator.cpp index 9fa9764c29..6cf912dbd2 100644 --- a/Libs/DICOM/Core/ctkDICOMAbstractThumbnailGenerator.cpp +++ b/Libs/DICOM/Core/ctkDICOMAbstractThumbnailGenerator.cpp @@ -22,8 +22,9 @@ // ctkDICOMCore includes #include "ctkDICOMAbstractThumbnailGenerator.h" #include "ctkLogger.h" +#include -static ctkLogger logger ( "org.commontk.dicom.DICOMAbstractThumbnailGenerator" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMAbstractThumbnailGenerator")) struct Node; //------------------------------------------------------------------------------ diff --git a/Libs/DICOM/Core/ctkDICOMDatabase.cpp b/Libs/DICOM/Core/ctkDICOMDatabase.cpp index b43e59060e..9b6e639cfd 100644 --- a/Libs/DICOM/Core/ctkDICOMDatabase.cpp +++ b/Libs/DICOM/Core/ctkDICOMDatabase.cpp @@ -39,6 +39,7 @@ #include "ctkDICOMJobResponseSet.h" #include "ctkLogger.h" +#include #include "ctkUtils.h" // DCMTK includes @@ -58,17 +59,33 @@ #include /* for DcmRLEEncoderRegistration */ //------------------------------------------------------------------------------ -static ctkLogger logger("org.commontk.dicom.DICOMDatabase" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMDatabase")) //------------------------------------------------------------------------------ /// Flag for tag cache to avoid repeated searches for tags that do no exist -static QString TagNotInInstance("__TAG_NOT_IN_INSTANCE__"); +static const QString& TagNotInInstance() +{ + static const QString s = QStringLiteral("__TAG_NOT_IN_INSTANCE__"); + return s; +} /// Flag for tag cache indicating that the value really is the empty string -static QString ValueIsEmptyString("__VALUE_IS_EMPTY_STRING__"); +static const QString& ValueIsEmptyString() +{ + static const QString s = QStringLiteral("__VALUE_IS_EMPTY_STRING__"); + return s; +} /// Tag exists in the instance and non-empty but its value is not stored (e.g., because it is too long) -static QString ValueIsNotStored("__VALUE_IS_NOT_STORED__"); +static const QString& ValueIsNotStored() +{ + static const QString s = QStringLiteral("__VALUE_IS_NOT_STORED__"); + return s; +} /// Separator character for table and field names to be used in display rules manager -static QString TableFieldSeparator(":"); +static const QString& TableFieldSeparator() +{ + static const QString s = QStringLiteral(":"); + return s; +} //------------------------------------------------------------------------------ // ctkDICOMDatabasePrivate methods @@ -97,7 +114,7 @@ void ctkDICOMDatabasePrivate::resetLastInsertedValues() } //------------------------------------------------------------------------------ -void ctkDICOMDatabasePrivate::init(QString databaseFilename) +void ctkDICOMDatabasePrivate::init(const QString& databaseFilename) { Q_Q(ctkDICOMDatabase); @@ -137,7 +154,7 @@ int ctkDICOMDatabasePrivate::rowCount(const QString& tableName) } else { - logger.error("SQLITE ERROR: " + numberOfItemsQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + numberOfItemsQuery.lastError().driverText()); } return numberOfItems; } @@ -166,8 +183,8 @@ bool ctkDICOMDatabasePrivate::loggedExec(QSqlQuery& query, const QString& queryS { QString sqlError = query.lastError().text(); QString lastQuery = query.lastQuery(); - logger.error(QString("SQL failed: \n%1 \nError: \n%2") - .arg(lastQuery).arg(sqlError)); + logger->error(QString("SQL failed: \n%1 \nError: \n%2") + .arg(lastQuery, sqlError)); } return (success); @@ -182,8 +199,8 @@ bool ctkDICOMDatabasePrivate::loggedExecBatch(QSqlQuery& query) { QString sqlError = query.lastError().text(); QString lastQuery = query.lastQuery(); - logger.error(QString("SQL failed: \n%1 \nError: \n%2") - .arg(lastQuery).arg(sqlError)); + logger->error(QString("SQL failed: \n%1 \nError: \n%2") + .arg(lastQuery, sqlError)); } return (success); } @@ -223,7 +240,7 @@ QString ctkDICOMDatabasePrivate::readValueFromFile(const QString& fileName, cons dataset.InitializeFromFile(fileName); if (!dataset.IsInitialized()) { - logger.error("File " + fileName + " could not be initialized."); + logger->error("File " + fileName + " could not be initialized."); return ""; } @@ -236,11 +253,11 @@ QString ctkDICOMDatabasePrivate::readValueFromFile(const QString& fileName, cons { if (dataset.TagExists(tagKey)) { - value = ValueIsNotStored; + value = ValueIsNotStored(); } else { - value = TagNotInInstance; + value = TagNotInInstance(); } } else @@ -255,11 +272,10 @@ QString ctkDICOMDatabasePrivate::readValueFromFile(const QString& fileName, cons } //------------------------------------------------------------------------------ -bool ctkDICOMDatabasePrivate::executeScript(const QString script) +bool ctkDICOMDatabasePrivate::executeScript(const QString& script) { QFile scriptFile(script); - scriptFile.open(QIODevice::ReadOnly); - if ( !scriptFile.isOpen() ) + if ( !scriptFile.open(QIODevice::ReadOnly) ) { qDebug() << "Script file " << script << " could not be opened!\n"; return false; @@ -291,7 +307,7 @@ bool ctkDICOMDatabasePrivate::executeScript(const QString script) } //------------------------------------------------------------------------------ -QStringList ctkDICOMDatabasePrivate::filenames(QString table) +QStringList ctkDICOMDatabasePrivate::filenames(const QString& table) { /// get all filenames from the database QSqlQuery allFilesQuery(this->Database); @@ -333,8 +349,8 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatient( { // patient found dbPatientID = checkPatientExistsQuery.value(checkPatientExistsQuery.record().indexOf("UID")).toInt(); - logger.debug("Found patient in the database as UID: " + QString::number(dbPatientID)); - logger.debug("New patient ID cache item: " + compositeID + "->" + QString::number(dbPatientID)); + logger->debug("Found patient in the database as UID: " + QString::number(dbPatientID)); + logger->debug("New patient ID cache item: " + compositeID + "->" + QString::number(dbPatientID)); } else { @@ -364,7 +380,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatient( } dbPatientID = insertPatientStatement.lastInsertId().toInt(); - logger.debug("New patient inserted: database item ID = " + QString().setNum(dbPatientID)); + logger->debug("New patient inserted: database item ID = " + QString().setNum(dbPatientID)); } this->InsertedPatientsCompositeIDCache[compositeID] = dbPatientID; @@ -374,7 +390,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatient( //------------------------------------------------------------------------------ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertConnectionName( - const int& dbPatientID, const QString& connectionName) + int dbPatientID, const QString& connectionName) { Q_Q(ctkDICOMDatabase); // check if connection name is already stored @@ -386,8 +402,8 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertConnectionName( if (connectionNameFound) { // connection name found - logger.debug("Found connection name in the patient database as UID: " + QString::number(dbPatientID)); - logger.debug("New connection name ID cache item: " + QString::number(dbPatientID) + "->" + connectionName); + logger->debug("Found connection name in the patient database as UID: " + QString::number(dbPatientID)); + logger->debug("New connection name ID cache item: " + QString::number(dbPatientID) + "->" + connectionName); } else if (!denyList.contains(connectionName)) { @@ -404,7 +420,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertConnectionName( { return ctkDICOMDatabase::InsertResult::Failed; } - logger.debug("New connection name inserted: patient database item ID = " + QString().setNum(dbPatientID)); + logger->debug("New connection name inserted: patient database item ID = " + QString().setNum(dbPatientID)); } if (this->InsertedConnectionsIDCache.contains(dbPatientID)) @@ -443,7 +459,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::updateConnections( //------------------------------------------------------------------------------ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertStudy( - const ctkDICOMItem& dataset, const int& dbPatientID) + const ctkDICOMItem& dataset, int dbPatientID) { QString studyInstanceUID(dataset.GetElementAsString(DCM_StudyInstanceUID) ); QSqlQuery checkStudyExistsQuery(this->Database); @@ -455,7 +471,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertStudy( } if (!checkStudyExistsQuery.next()) { - logger.debug("Need to insert new study: " + studyInstanceUID); + logger->debug("Need to insert new study: " + studyInstanceUID); QString studyID(dataset.GetElementAsString(DCM_StudyID) ); QString studyDate(dataset.GetElementAsString(DCM_StudyDate) ); @@ -486,7 +502,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertStudy( insertStudyStatement.addBindValue(QDateTime::currentDateTime()); if (!insertStudyStatement.exec()) { - logger.error("Error executing statement: " + insertStudyStatement.lastQuery() + " Error: " + insertStudyStatement.lastError().text() ); + logger->error("Error executing statement: " + insertStudyStatement.lastQuery() + " Error: " + insertStudyStatement.lastError().text() ); return ctkDICOMDatabase::InsertResult::Failed; } else @@ -498,7 +514,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertStudy( } else { - logger.debug("Used existing study: " + studyInstanceUID); + logger->debug("Used existing study: " + studyInstanceUID); this->InsertedStudyUIDsCache.insert(studyInstanceUID); return ctkDICOMDatabase::InsertResult::NotInserted; } @@ -512,14 +528,14 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertSeries( QSqlQuery checkSeriesExistsQuery(this->Database); checkSeriesExistsQuery.prepare( "SELECT * FROM Series WHERE SeriesInstanceUID = ?" ); checkSeriesExistsQuery.bindValue( 0, seriesInstanceUID ); - logger.debug("Statement: " + checkSeriesExistsQuery.lastQuery() ); + logger->debug("Statement: " + checkSeriesExistsQuery.lastQuery() ); if (!loggedExec(checkSeriesExistsQuery)) { return ctkDICOMDatabase::InsertResult::Failed; } if (!checkSeriesExistsQuery.next()) { - logger.debug("Need to insert new series: " + seriesInstanceUID); + logger->debug("Need to insert new series: " + seriesInstanceUID); QString seriesDate(dataset.GetElementAsString(DCM_SeriesDate) ); QString seriesTime(dataset.GetElementAsString(DCM_SeriesTime) ); @@ -556,7 +572,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertSeries( insertSeriesStatement.addBindValue(QDateTime::currentDateTime()); if (!insertSeriesStatement.exec()) { - logger.error("Error executing statement: " + logger->error("Error executing statement: " + insertSeriesStatement.lastQuery() + " Error: " + insertSeriesStatement.lastError().text()); return ctkDICOMDatabase::InsertResult::Failed; @@ -570,7 +586,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertSeries( } else { - logger.debug("Used existing series: " + seriesInstanceUID); + logger->debug("Used existing series: " + seriesInstanceUID); this->InsertedSeriesUIDsCache.insert(seriesInstanceUID); return ctkDICOMDatabase::InsertResult::NotInserted; } @@ -609,7 +625,7 @@ bool ctkDICOMDatabasePrivate::openTagCacheDatabase() } //------------------------------------------------------------------------------ -void ctkDICOMDatabasePrivate::precacheTags(const ctkDICOMItem& dataset, const QString sopInstanceUID) +void ctkDICOMDatabasePrivate::precacheTags(const ctkDICOMItem& dataset, const QString& sopInstanceUID) { Q_Q(ctkDICOMDatabase); @@ -625,11 +641,11 @@ void ctkDICOMDatabasePrivate::precacheTags(const ctkDICOMItem& dataset, const QS { if (dataset.TagExists(tagKey)) { - value = ValueIsNotStored; + value = ValueIsNotStored(); } else { - value = TagNotInInstance; + value = TagNotInInstance(); } } else @@ -654,7 +670,7 @@ bool ctkDICOMDatabasePrivate::removeImage(const QString& sopInstanceUID) bool success = deleteFile.exec(); if (!success) { - logger.error("SQLITE ERROR deleting old image row: " + deleteFile.lastError().driverText()); + logger->error("SQLITE ERROR deleting old image row: " + deleteFile.lastError().driverText()); } return success; } @@ -712,10 +728,10 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons if (originalFilePath.isEmpty()) { - logger.debug("Saving file: " + storedFilePath); + logger->debug("Saving file: " + storedFilePath); if (!dataset.SaveToFile(storedFilePath)) { - logger.error("Error saving file: " + storedFilePath); + logger->error("Error saving file: " + storedFilePath); return false; } } @@ -736,7 +752,7 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons copySuccess = QFile::copy(originalFilePath, storedFilePath); if (!copySuccess) { - logger.error("Failed to copy file from: " + originalFilePath + " to: " + storedFilePath); + logger->error("Failed to copy file from: " + originalFilePath + " to: " + storedFilePath); return false; } } @@ -750,7 +766,7 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons if (!sourceFile.open(QIODevice::ReadOnly) || !destFile.open(QIODevice::WriteOnly)) { - logger.error("Failed to copy file from: " + originalFilePath + " to: " + storedFilePath); + logger->error("Failed to copy file from: " + originalFilePath + " to: " + storedFilePath); return false; } @@ -765,7 +781,7 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons delete[] buffer; sourceFile.close(); destFile.close(); - logger.error("Failed to write to: " + storedFilePath); + logger->error("Failed to write to: " + storedFilePath); return false; } } @@ -776,7 +792,7 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons if (bytesRead < 0) { - logger.error("Failed to read from: " + originalFilePath); + logger->error("Failed to read from: " + originalFilePath); return false; } @@ -785,7 +801,7 @@ bool ctkDICOMDatabasePrivate::storeDatasetFile(const ctkDICOMItem& dataset, cons if (copySuccess) { - logger.debug("Copy file from: " + originalFilePath + " to: " + storedFilePath); + logger->debug("Copy file from: " + originalFilePath + " to: " + storedFilePath); } } @@ -806,7 +822,7 @@ bool ctkDICOMDatabasePrivate::indexingStatusForFile(const QString& filePath, con bool success = fileExistsQuery.exec(); if (!success) { - logger.error("SQLITE ERROR: " + fileExistsQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + fileExistsQuery.lastError().driverText()); return false; } bool foundSOPInstanceUID = fileExistsQuery.next(); @@ -863,7 +879,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatientStudySeries } else { - logger.debug("Insert new patient if not already in database: " + patientID + " " + patientsName); + logger->debug("Insert new patient if not already in database: " + patientID + " " + patientsName); ctkDICOMDatabase::InsertResult patientMetadataInsertOperationResult = this->insertPatient(dataset, patientID, patientsName, dbPatientID); if (patientMetadataInsertOperationResult == ctkDICOMDatabase::InsertResult::Inserted) @@ -886,7 +902,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatientStudySeries } if (connections.count() == 0 || !connections.contains(connectionName)) { - logger.debug("Insert new connection name if not already in database: " + connectionName); + logger->debug("Insert new connection name if not already in database: " + connectionName); ctkDICOMDatabase::InsertResult connectionMetadataInsertOperationResult = this->insertConnectionName(dbPatientID, connectionName); if (connectionMetadataInsertOperationResult == ctkDICOMDatabase::InsertResult::Inserted) @@ -900,7 +916,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatientStudySeries } } - logger.debug("Going to insert this instance with dbPatientID: " + QString::number(dbPatientID)); + logger->debug("Going to insert this instance with dbPatientID: " + QString::number(dbPatientID)); // Insert new study if needed QString studyInstanceUID(dataset.GetElementAsString(DCM_StudyInstanceUID)); @@ -910,7 +926,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatientStudySeries this->insertStudy(dataset, dbPatientID); if (studyMetadataInsertOperationResult == ctkDICOMDatabase::InsertResult::Inserted) { - logger.debug("Study Added"); + logger->debug("Study Added"); databaseWasChanged = true; // let users of this class track when things happen emit q->studyAdded(studyInstanceUID); @@ -928,7 +944,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabasePrivate::insertPatientStudySeries this->insertSeries(dataset, studyInstanceUID); if (seriesMetadataInsertOperationResult == ctkDICOMDatabase::InsertResult::Inserted) { - logger.debug("Series Added"); + logger->debug("Series Added"); databaseWasChanged = true; emit q->seriesAdded(seriesInstanceUID); } @@ -961,7 +977,7 @@ bool ctkDICOMDatabasePrivate::uidsForDataSet(QString& patientsName, QString& pat { // Use study instance uid as patient id if patient id is empty - can happen on anonymized datasets // see: http://www.na-mic.org/Bug/view.php?id=2040 - logger.warn(QString("Patient ID is empty, using studyInstanceUID (%1) as patient ID").arg(studyInstanceUID)); + logger->warn(QString("Patient ID is empty, using studyInstanceUID (%1) as patient ID").arg(studyInstanceUID)); patientID = studyInstanceUID; } if (patientsName.isEmpty() && !patientID.isEmpty()) @@ -973,7 +989,7 @@ bool ctkDICOMDatabasePrivate::uidsForDataSet(QString& patientsName, QString& pat // We accept the dataset without seriesInstanceUID, as query/retrieve result may not contain it if (patientsName.isEmpty() || studyInstanceUID.isEmpty() || patientID.isEmpty()) { - logger.error("Required information (patient name, patient ID, study instance UID) is missing from dataset"); + logger->error("Required information (patient name, patient ID, study instance UID) is missing from dataset"); return false; } // Valid data set @@ -1006,13 +1022,13 @@ void ctkDICOMDatabasePrivate::insert(const ctkDICOMItem& dataset, const QString& { if (datasetUpToDate) { - logger.debug("File " + databaseFilename + " already added"); + logger->debug("File " + databaseFilename + " already added"); return; } // File is updated, delete record and re-index if (!this->removeImage(sopInstanceUID)) { - logger.debug("File " + filePath + " cannot be added, failed to update existing values in the database"); + logger->debug("File " + filePath + " cannot be added, failed to update existing values in the database"); return; } } @@ -1031,7 +1047,7 @@ void ctkDICOMDatabasePrivate::insert(const ctkDICOMItem& dataset, const QString& { if (!this->storeDatasetFile(dataset, filePath, studyInstanceUID, seriesInstanceUID, sopInstanceUID, storedFilePath)) { - logger.error("Error saving file: " + filePath); + logger->error("Error saving file: " + filePath); return; } } @@ -1078,7 +1094,7 @@ void ctkDICOMDatabasePrivate::insert(const ctkDICOMItem& dataset, const QString& if (!insertImageStatement.exec()) { - logger.error("Error executing statement: " + logger->error("Error executing statement: " + insertImageStatement.lastQuery() + " Error: " + insertImageStatement.lastError().text()); } @@ -1124,12 +1140,12 @@ QString ctkDICOMDatabasePrivate::getDisplayPatientFieldsKey(const QString& patie displayPatientsQuery.bindValue(":patientsName", patientsName); if (!displayPatientsQuery.exec()) { - logger.error("SQLITE ERROR: " + displayPatientsQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + displayPatientsQuery.lastError().driverText()); return QString(); } if (displayPatientsQuery.size() > 1) { - logger.warn("Multiple patients found with PatientsName=" + patientsName + " and PatientID=" + patientID); + logger->warn("Multiple patients found with PatientsName=" + patientsName + " and PatientID=" + patientID); } if (displayPatientsQuery.next()) { @@ -1143,7 +1159,7 @@ QString ctkDICOMDatabasePrivate::getDisplayPatientFieldsKey(const QString& patie return compositeID; } - logger.error("Failed to find patient with PatientsName=" + patientsName + " and PatientID=" + patientID); + logger->error("Failed to find patient with PatientsName=" + patientsName + " and PatientID=" + patientID); return QString(); } @@ -1151,9 +1167,9 @@ QString ctkDICOMDatabasePrivate::getDisplayPatientFieldsKey(const QString& patie QString ctkDICOMDatabasePrivate::getDisplayStudyFieldsKey(QString studyInstanceUID, QMap > &displayedFieldsMapStudy) { // Look for the study in the displayed fields cache first - foreach (QString currentStudyInstanceUid, displayedFieldsMapStudy.keys()) + for (auto it = displayedFieldsMapStudy.constBegin(); it != displayedFieldsMapStudy.constEnd(); ++it) { - if ( !displayedFieldsMapStudy[currentStudyInstanceUid]["StudyInstanceUID"].compare(studyInstanceUID) ) + if ( !it.value()["StudyInstanceUID"].compare(studyInstanceUID) ) { return studyInstanceUID; } @@ -1165,12 +1181,12 @@ QString ctkDICOMDatabasePrivate::getDisplayStudyFieldsKey(QString studyInstanceU displayStudiesQuery.bindValue(":studyInstanceUID", studyInstanceUID); if (!displayStudiesQuery.exec()) { - logger.error("SQLITE ERROR: " + displayStudiesQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + displayStudiesQuery.lastError().driverText()); return QString(); } if (displayStudiesQuery.size() > 1) { - logger.warn("Multiple studies found with StudyInstanceUID=" + studyInstanceUID); + logger->warn("Multiple studies found with StudyInstanceUID=" + studyInstanceUID); } if (displayStudiesQuery.next()) { @@ -1184,7 +1200,7 @@ QString ctkDICOMDatabasePrivate::getDisplayStudyFieldsKey(QString studyInstanceU return studyInstanceUID; } - logger.error("Failed to find study with StudyInstanceUID=" + studyInstanceUID); + logger->error("Failed to find study with StudyInstanceUID=" + studyInstanceUID); return QString(); } @@ -1192,9 +1208,9 @@ QString ctkDICOMDatabasePrivate::getDisplayStudyFieldsKey(QString studyInstanceU QString ctkDICOMDatabasePrivate::getDisplaySeriesFieldsKey(QString seriesInstanceUID, QMap > &displayedFieldsMapSeries) { // Look for the series in the displayed fields cache first - foreach (QString currentSeriesInstanceUid, displayedFieldsMapSeries.keys()) + for (auto it = displayedFieldsMapSeries.constBegin(); it != displayedFieldsMapSeries.constEnd(); ++it) { - if ( !displayedFieldsMapSeries[currentSeriesInstanceUid]["SeriesInstanceUID"].compare(seriesInstanceUID) ) + if ( !it.value()["SeriesInstanceUID"].compare(seriesInstanceUID) ) { return seriesInstanceUID; } @@ -1206,12 +1222,12 @@ QString ctkDICOMDatabasePrivate::getDisplaySeriesFieldsKey(QString seriesInstanc displaySeriesQuery.bindValue(":seriesInstanceUID", seriesInstanceUID); if (!displaySeriesQuery.exec()) { - logger.error("SQLITE ERROR: " + displaySeriesQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + displaySeriesQuery.lastError().driverText()); return QString(); } if (displaySeriesQuery.size() > 1) { - logger.warn("Multiple series found with SeriesInstanceUID=" + seriesInstanceUID); + logger->warn("Multiple series found with SeriesInstanceUID=" + seriesInstanceUID); } if (displaySeriesQuery.next()) { @@ -1225,7 +1241,7 @@ QString ctkDICOMDatabasePrivate::getDisplaySeriesFieldsKey(QString seriesInstanc return seriesInstanceUID; } - logger.error("in getDisplaySeriesFieldsKey: Failed to find series with SeriesInstanceUID=" + seriesInstanceUID); + logger->error("in getDisplaySeriesFieldsKey: Failed to find series with SeriesInstanceUID=" + seriesInstanceUID); return QString(); } @@ -1238,17 +1254,18 @@ bool ctkDICOMDatabasePrivate::applyDisplayedFieldsChanges( QMap currentPatient = displayedFieldsMapPatient[compositeID]; + QMap currentPatient = it.value(); if (currentPatient["PatientID"].isEmpty() || currentPatient["PatientsName"].isEmpty()) { - logger.error("Unable to locate the patient due to missing values for PatientsName and/or PatientID. " + logger->error("Unable to locate the patient due to missing values for PatientsName and/or PatientID. " "If this error recurs, please manually remove the patient from the database, ensuring to" " address the missing PatientsName/PatientID."); continue; @@ -1260,21 +1277,21 @@ bool ctkDICOMDatabasePrivate::applyDisplayedFieldsChanges( QMaperror("SQLITE ERROR: " + displayPatientsQuery.lastError().driverText()); return false; } if (displayPatientsQuery.next()) { QString displayPatientsFieldUpdateString; QList boundValues; - foreach (QString tagName, currentPatient.keys()) + for (auto tagIt = currentPatient.constBegin(); tagIt != currentPatient.constEnd(); ++tagIt) { - if (tagName == "PatientCompositeID") + if (tagIt.key() == "PatientCompositeID") { continue; // Do not write patient index that is only used internally and temporarily } - displayPatientsFieldUpdateString.append( tagName + " = ? , " ); - boundValues << currentPatient[tagName]; + displayPatientsFieldUpdateString.append( tagIt.key() + " = ? , " ); + boundValues << tagIt.value(); } // Trim the separators from the end @@ -1301,33 +1318,35 @@ bool ctkDICOMDatabasePrivate::applyDisplayedFieldsChanges( QMaperror("Failed to find patient with PatientsName=" + currentPatient["PatientsName"] + " and PatientID=" + currentPatient["PatientID"]); continue; } } // For each patient in displayedFieldsVectorPatient // Update study fields - foreach (QString currentStudyInstanceUid, displayedFieldsMapStudy.keys()) + for (auto studyIt = displayedFieldsMapStudy.constBegin(); studyIt != displayedFieldsMapStudy.constEnd(); ++studyIt) { + const QString& currentStudyInstanceUid = studyIt.key(); if (currentStudyInstanceUid.isEmpty()) { continue; } - QMap currentStudy = displayedFieldsMapStudy[currentStudyInstanceUid]; + QMap currentStudy = studyIt.value(); QSqlQuery displayStudiesQuery(this->Database); displayStudiesQuery.prepare("SELECT StudyInstanceUID FROM Studies WHERE StudyInstanceUID = ? ;"); displayStudiesQuery.addBindValue(currentStudyInstanceUid); if (!displayStudiesQuery.exec()) { - logger.error("SQLITE ERROR: " + displayStudiesQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + displayStudiesQuery.lastError().driverText()); return false; } if (displayStudiesQuery.next()) { QString displayStudiesFieldUpdateString; QList boundValues; - foreach (QString tagName, currentStudy.keys()) + for (auto tagIt = currentStudy.constBegin(); tagIt != currentStudy.constEnd(); ++tagIt) { + const QString& tagName = tagIt.key(); if (!tagName.compare("PatientCompositeID")) { displayStudiesFieldUpdateString.append( "PatientsUID = ? , " ); @@ -1358,36 +1377,37 @@ bool ctkDICOMDatabasePrivate::applyDisplayedFieldsChanges( QMaperror("SQLITE ERROR: " + displaySeriesQuery.lastError().driverText()); return false; } if (displaySeriesQuery.next()) { QString displaySeriesFieldUpdateString; QList boundValues; - foreach (QString tagName, currentSeries.keys()) + for (auto tagIt = currentSeries.constBegin(); tagIt != currentSeries.constEnd(); ++tagIt) { - displaySeriesFieldUpdateString.append( tagName + " = ? , " ); - boundValues << currentSeries[tagName]; + displaySeriesFieldUpdateString.append( tagIt.key() + " = ? , " ); + boundValues << tagIt.value(); } // Trim the separators from the end displaySeriesFieldUpdateString = displaySeriesFieldUpdateString.left(displaySeriesFieldUpdateString.size() - 3); @@ -1408,7 +1428,7 @@ bool ctkDICOMDatabasePrivate::applyDisplayedFieldsChanges( QMapwarn(QString("SEG thumbnail generation is not available")); return false; } else @@ -2542,7 +2562,7 @@ QStringList ctkDICOMDatabase::allFiles() } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::loadInstanceHeader(QString sopInstanceUID) +void ctkDICOMDatabase::loadInstanceHeader(const QString& sopInstanceUID) { Q_D(ctkDICOMDatabase); QSqlQuery query(d->Database); @@ -2560,7 +2580,7 @@ void ctkDICOMDatabase::loadInstanceHeader(QString sopInstanceUID) } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::loadFileHeader(QString fileName) +void ctkDICOMDatabase::loadFileHeader(const QString& fileName) { Q_D(ctkDICOMDatabase); d->LoadedHeader.clear(); @@ -2594,7 +2614,7 @@ QStringList ctkDICOMDatabase::headerKeys () } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::headerValue (QString key) +QString ctkDICOMDatabase::headerValue (const QString& key) { Q_D(ctkDICOMDatabase); return (d->LoadedHeader[key]); @@ -2605,13 +2625,13 @@ QString ctkDICOMDatabase::headerValue (QString key) // //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::instanceValue(QString sopInstanceUID, QString tag) +QString ctkDICOMDatabase::instanceValue(const QString& sopInstanceUID, const QString& tag) { Q_D(ctkDICOMDatabase); - tag = tag.toUpper(); + QString upperTag = tag.toUpper(); // Read from cache, if available - QString value = this->cachedTag(sopInstanceUID, tag); - if (value == TagNotInInstance || value == ValueIsEmptyString || value == ValueIsNotStored) + QString value = this->cachedTag(sopInstanceUID, upperTag); + if (value == TagNotInInstance() || value == ValueIsEmptyString() || value == ValueIsNotStored()) { return ""; } @@ -2626,19 +2646,19 @@ QString ctkDICOMDatabase::instanceValue(QString sopInstanceUID, QString tag) { return ""; } - value = d->readValueFromFile(filePath, sopInstanceUID, tag); + value = d->readValueFromFile(filePath, sopInstanceUID, upperTag); return value; } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::instanceValue(const QString sopInstanceUID, const unsigned short group, const unsigned short element) +QString ctkDICOMDatabase::instanceValue(const QString& sopInstanceUID, const unsigned short group, const unsigned short element) { QString tag = this->groupElementToTag(group,element); return instanceValue(sopInstanceUID, tag); } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::fileValue(const QString fileName, QString tag) +QString ctkDICOMDatabase::fileValue(const QString& fileName, const QString& tag) { Q_D(ctkDICOMDatabase); @@ -2647,6 +2667,8 @@ QString ctkDICOMDatabase::fileValue(const QString fileName, QString tag) return ""; } + QString upperTag = tag.toUpper(); + // Read value from the database, if the instance is found there // First, try treating argument as filePath @@ -2666,9 +2688,8 @@ QString ctkDICOMDatabase::fileValue(const QString fileName, QString tag) if (!sopInstanceUID.isEmpty()) { // The instance is available in the database, look for the value - tag = tag.toUpper(); - QString value = this->cachedTag(sopInstanceUID, tag); - if (value == TagNotInInstance || value == ValueIsEmptyString || value == ValueIsNotStored) + QString value = this->cachedTag(sopInstanceUID, upperTag); + if (value == TagNotInInstance() || value == ValueIsEmptyString() || value == ValueIsNotStored()) { return ""; } @@ -2685,12 +2706,12 @@ QString ctkDICOMDatabase::fileValue(const QString fileName, QString tag) // local file is not available return ""; } - QString value = d->readValueFromFile(fileName, sopInstanceUID, tag); + QString value = d->readValueFromFile(fileName, sopInstanceUID, upperTag); return value; } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::fileValue(const QString fileName, const unsigned short group, const unsigned short element) +QString ctkDICOMDatabase::fileValue(const QString& fileName, const unsigned short group, const unsigned short element) { QString tag = this->groupElementToTag(group, element); return this->fileValue(fileName, tag); @@ -2759,9 +2780,9 @@ QMap ctkDICOMDatabase::instanceValues(const QStringList& sopIn // Only include non-empty values that are not special markers if (!value.isEmpty() && - value != TagNotInInstance && - value != ValueIsEmptyString && - value != ValueIsNotStored) + value != TagNotInInstance() && + value != ValueIsEmptyString() && + value != ValueIsNotStored()) { result[sopInstanceUID] = value; } @@ -2772,16 +2793,16 @@ QMap ctkDICOMDatabase::instanceValues(const QStringList& sopIn } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::instanceValueExists(const QString sopInstanceUID, const QString tag) +bool ctkDICOMDatabase::instanceValueExists(const QString& sopInstanceUID, const QString& tag) { Q_D(ctkDICOMDatabase); QString upperTag = tag.toUpper(); QString value = this->cachedTag(sopInstanceUID, upperTag); - if (value == TagNotInInstance || value == ValueIsEmptyString) + if (value == TagNotInInstance() || value == ValueIsEmptyString()) { return false; } - if (value == ValueIsNotStored || !value.isEmpty()) + if (value == ValueIsNotStored() || !value.isEmpty()) { return true; } @@ -2793,18 +2814,18 @@ bool ctkDICOMDatabase::instanceValueExists(const QString sopInstanceUID, const Q return false; } value = d->readValueFromFile(filePath, sopInstanceUID, upperTag); - return (value != TagNotInInstance && value != ValueIsEmptyString); + return (value != TagNotInInstance() && value != ValueIsEmptyString()); } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::instanceValueExists(const QString sopInstanceUID, const unsigned short group, const unsigned short element) +bool ctkDICOMDatabase::instanceValueExists(const QString& sopInstanceUID, const unsigned short group, const unsigned short element) { QString tag = this->groupElementToTag(group, element); return this->instanceValueExists(sopInstanceUID, tag); } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::fileValueExists(const QString fileName, QString tag) +bool ctkDICOMDatabase::fileValueExists(const QString& fileName, const QString& tag) { Q_D(ctkDICOMDatabase); @@ -2813,33 +2834,33 @@ bool ctkDICOMDatabase::fileValueExists(const QString fileName, QString tag) return false; } - tag = tag.toUpper(); + QString upperTag = tag.toUpper(); QString sopInstanceUID = this->instanceForFile(fileName); - QString value = this->cachedTag(sopInstanceUID, tag); - if (value == TagNotInInstance || value == ValueIsEmptyString) + QString value = this->cachedTag(sopInstanceUID, upperTag); + if (value == TagNotInInstance() || value == ValueIsEmptyString()) { return false; } - if (value == ValueIsNotStored || !value.isEmpty()) + if (value == ValueIsNotStored() || !value.isEmpty()) { return true; } // Read value from file - value = d->readValueFromFile(fileName, sopInstanceUID, tag); - return (value != TagNotInInstance && value != ValueIsEmptyString); + value = d->readValueFromFile(fileName, sopInstanceUID, upperTag); + return (value != TagNotInInstance() && value != ValueIsEmptyString()); } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::fileValueExists(const QString fileName, const unsigned short group, const unsigned short element) +bool ctkDICOMDatabase::fileValueExists(const QString& fileName, const unsigned short group, const unsigned short element) { QString tag = this->groupElementToTag(group, element); return this->fileValueExists(fileName, tag); } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::tagToGroupElement(const QString tag, unsigned short& group, unsigned short& element) +bool ctkDICOMDatabase::tagToGroupElement(const QString& tag, unsigned short& group, unsigned short& element) { QStringList groupElement = tag.split(","); bool groupOK, elementOK; @@ -2854,7 +2875,7 @@ bool ctkDICOMDatabase::tagToGroupElement(const QString tag, unsigned short& grou } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::groupElementToTag(const unsigned short& group, const unsigned short& element) +QString ctkDICOMDatabase::groupElementToTag(unsigned short group, unsigned short element) { QString groupElement = QString("%1,%2").arg(group,4,16,QLatin1Char('0')).arg(element,4,16,QLatin1Char('0')); return groupElement.toUpper(); @@ -2906,7 +2927,7 @@ void ctkDICOMDatabase::insert( const QString& filePath, bool storeFile, bool gen /// first we check if the file is already in the database if (fileExistsAndUpToDate(filePath)) { - logger.debug( "File " + filePath + " already added."); + logger->debug( "File " + filePath + " already added."); return; } @@ -2919,7 +2940,7 @@ void ctkDICOMDatabase::insert( const QString& filePath, bool storeFile, bool gen } else { - logger.warn(QString("Could not read DICOM file:") + filePath); + logger->warn(QString("Could not read DICOM file:") + filePath); } } @@ -2971,7 +2992,7 @@ void ctkDICOMDatabase::insert(const QList& ind // File is updated, delete record and re-index if (!d->removeImage(sopInstanceUID)) { - logger.error("Failed to insert file into database (cannot update pre-existing item): " + filePath); + logger->error("Failed to insert file into database (cannot update pre-existing item): " + filePath); continue; } } @@ -2980,7 +3001,7 @@ void ctkDICOMDatabase::insert(const QList& ind QString patientsName, patientID, studyInstanceUID, seriesInstanceUID; if (!d->uidsForDataSet(dataset, patientsName, patientID, studyInstanceUID, seriesInstanceUID)) { - logger.error("Failed to insert file into database (required fields missing): " + filePath); + logger->error("Failed to insert file into database (required fields missing): " + filePath); continue; } @@ -3014,11 +3035,11 @@ void ctkDICOMDatabase::insert(const QList& ind { if (dataset.TagExists(tagKey)) { - value = ValueIsNotStored; + value = ValueIsNotStored(); } else { - value = TagNotInInstance; + value = TagNotInInstance(); } } else @@ -3028,7 +3049,7 @@ void ctkDICOMDatabase::insert(const QList& ind insertTags.bindValue(1, tag); if (value.isEmpty()) { - insertTags.bindValue(2, TagNotInInstance); + insertTags.bindValue(2, TagNotInInstance()); } else { @@ -3085,9 +3106,9 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabase::insert(const QListcopyFile(); QMap datasets = jobResponseSet->datasets(); - for(QString key : datasets.keys()) + for (auto it = datasets.constBegin(); it != datasets.constEnd(); ++it) { - ctkDICOMItem* dataset = datasets.value(key); + ctkDICOMItem* dataset = it.value(); if (!dataset) { continue; @@ -3102,7 +3123,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabase::insert(const QListerror("ctkDICOMDatabase::insert: dataset has no patientID"); continue; } if (patientName.isEmpty()) { - logger.error("ctkDICOMDatabase::insert: dataset has no patientName"); + logger->error("ctkDICOMDatabase::insert: dataset has no patientName"); continue; } if (studyInstanceUID.isEmpty() && jobType != ctkDICOMJobResponseSet::JobType::QueryPatients) { - logger.error("ctkDICOMDatabase::insert: dataset has no studyInstanceUID"); + logger->error("ctkDICOMDatabase::insert: dataset has no studyInstanceUID"); continue; } @@ -3246,7 +3267,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabase::insert(const QListremoveImage(sopInstanceUID)) { - logger.error("Failed to insert file into database (cannot update pre-existing item): " + filePath); + logger->error("Failed to insert file into database (cannot update pre-existing item): " + filePath); continue; } } @@ -3317,7 +3338,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabase::insert(const QListerror("Error executing statement: " + insertImageStatement.lastQuery() + " Error: " + insertImageStatement.lastError().text()); insertFailed = true; @@ -3360,7 +3381,7 @@ ctkDICOMDatabase::InsertResult ctkDICOMDatabase::insert(const QListTagsToPrecache == tags) @@ -3379,7 +3400,7 @@ const QStringList ctkDICOMDatabase::tagsToPrecache() } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::setTagsToExcludeFromStorage(const QStringList tags) +void ctkDICOMDatabase::setTagsToExcludeFromStorage(const QStringList& tags) { Q_D(ctkDICOMDatabase); QStringList upperTags; @@ -3468,7 +3489,7 @@ bool ctkDICOMDatabase::removeSeries(const QString& seriesInstanceUID, bool clear bool success = fileExistsQuery.exec(); if (!success) { - logger.error("SQLITE ERROR: " + fileExistsQuery.lastError().driverText()); + logger->error("SQLITE ERROR: " + fileExistsQuery.lastError().driverText()); return false; } @@ -3490,12 +3511,12 @@ bool ctkDICOMDatabase::removeSeries(const QString& seriesInstanceUID, bool clear QSqlQuery fileRemove(d->Database); fileRemove.prepare("DELETE FROM Images WHERE SeriesInstanceUID == :seriesID"); fileRemove.bindValue(":seriesID", seriesInstanceUID); - logger.debug("SQLITE: removing seriesInstanceUID " + seriesInstanceUID); + logger->debug("SQLITE: removing seriesInstanceUID " + seriesInstanceUID); success = fileRemove.exec(); if (!success) { - logger.error("SQLITE ERROR: could not remove seriesInstanceUID " + seriesInstanceUID); - logger.error("SQLITE ERROR: " + fileRemove.lastError().driverText()); + logger->error("SQLITE ERROR: could not remove seriesInstanceUID " + seriesInstanceUID); + logger->error("SQLITE ERROR: " + fileRemove.lastError().driverText()); } if (!removeTagCacheSOPInstanceUIDs.isEmpty()) @@ -3533,7 +3554,7 @@ bool ctkDICOMDatabase::removeSeries(const QString& seriesInstanceUID, bool clear } else { - logger.warn("Failed to remove file " + absPath); + logger->warn("Failed to remove file " + absPath); } } } @@ -3543,7 +3564,7 @@ bool ctkDICOMDatabase::removeSeries(const QString& seriesInstanceUID, bool clear { if (!thumbnailFile.remove()) { - logger.warn("Failed to remove thumbnail " + thumbnailFile.fileName()); + logger->warn("Failed to remove thumbnail " + thumbnailFile.fileName()); } QString fileFolder = QFileInfo(thumbnailFile).absoluteDir().path(); if (foldersToRemove.isEmpty() || foldersToRemove.last() != fileFolder) @@ -3601,7 +3622,7 @@ bool ctkDICOMDatabase::removeStudy(const QString& studyInstanceUID, bool cleanup bool success = seriesForStudy.exec(); if (!success) { - logger.error("SQLITE ERROR: " + seriesForStudy.lastError().driverText()); + logger->error("SQLITE ERROR: " + seriesForStudy.lastError().driverText()); return false; } bool result = true; @@ -3636,7 +3657,7 @@ bool ctkDICOMDatabase::removePatient(const QString& patientUID, bool cleanup/*=t bool success = studiesForPatient.exec(); if (!success) { - logger.error("SQLITE ERROR: " + studiesForPatient.lastError().driverText()); + logger->error("SQLITE ERROR: " + studiesForPatient.lastError().driverText()); return false; } bool result = true; @@ -3725,7 +3746,7 @@ bool ctkDICOMDatabase::initializeTagCache() } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::cachedTag(const QString sopInstanceUID, const QString tag) +QString ctkDICOMDatabase::cachedTag(const QString& sopInstanceUID, const QString& tag) { Q_D(ctkDICOMDatabase); if ( !this->tagCacheExists() ) @@ -3746,14 +3767,14 @@ QString ctkDICOMDatabase::cachedTag(const QString sopInstanceUID, const QString result = selectValue.value(0).toString(); if (result == QString("")) { - result = ValueIsEmptyString; + result = ValueIsEmptyString(); } } return( result ); } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::getCachedTags(const QString sopInstanceUID, QMap &cachedTags) +void ctkDICOMDatabase::getCachedTags(const QString& sopInstanceUID, QMap &cachedTags) { Q_D(ctkDICOMDatabase); cachedTags.clear(); @@ -3775,7 +3796,7 @@ void ctkDICOMDatabase::getCachedTags(const QString sopInstanceUID, QMaperror("Failed to cache tags: number of inputs do not match"); return false; } @@ -3817,9 +3838,9 @@ bool ctkDICOMDatabase::cacheTags(const QStringList sopInstanceUIDs, const QStrin QSqlQuery insertTags(d->TagCacheDatabase); insertTags.prepare( "INSERT OR REPLACE INTO TagCache VALUES(?,?,?)" ); - QStringList::const_iterator sopInstanceUIDsIt = sopInstanceUIDs.begin(); - QStringList::const_iterator tagsIt = tags.begin(); - QStringList::const_iterator valuesIt = values.begin(); + QStringList::const_iterator sopInstanceUIDsIt = sopInstanceUIDs.cbegin(); + QStringList::const_iterator tagsIt = tags.cbegin(); + QStringList::const_iterator valuesIt = values.cbegin(); bool success = true; for (int i = 0; iisEmpty()) { // replace empty strings with special flag string - insertTags.bindValue(2, TagNotInInstance); + insertTags.bindValue(2, TagNotInInstance()); } else { @@ -3849,7 +3870,7 @@ bool ctkDICOMDatabase::cacheTags(const QStringList sopInstanceUIDs, const QStrin } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::removeCachedTags(const QString sopInstanceUID) +void ctkDICOMDatabase::removeCachedTags(const QString& sopInstanceUID) { Q_D(ctkDICOMDatabase); if (!this->tagCacheExists()) @@ -3862,7 +3883,7 @@ void ctkDICOMDatabase::removeCachedTags(const QString sopInstanceUID) bool success = deleteFile.exec(); if (!success) { - logger.error("SQLITE ERROR deleting tag cache row: " + deleteFile.lastError().driverText()); + logger->error("SQLITE ERROR deleting tag cache row: " + deleteFile.lastError().driverText()); } } @@ -3911,7 +3932,7 @@ void ctkDICOMDatabase::updateDisplayedFields() QString compositeId = d->getDisplayPatientFieldsKey(patientID, patientsName, patientsBirthDate, displayedFieldsMapPatient); if (compositeId.isEmpty()) { - logger.error("Failed to find patient for SOP Instance UID = " + sopInstanceUID); + logger->error("Failed to find patient for SOP Instance UID = " + sopInstanceUID); continue; } QMap displayedFieldsForCurrentPatient = displayedFieldsMapPatient[compositeId]; @@ -3921,7 +3942,7 @@ void ctkDICOMDatabase::updateDisplayedFields() cachedTags[ctkDICOMItem::TagKeyStripped(DCM_StudyInstanceUID)], displayedFieldsMapStudy ); if (displayedFieldsKeyForCurrentStudy.isEmpty()) { - logger.error("Failed to find study for SOP Instance UID = " + sopInstanceUID); + logger->error("Failed to find study for SOP Instance UID = " + sopInstanceUID); continue; } QMap displayedFieldsForCurrentStudy = displayedFieldsMapStudy[ displayedFieldsKeyForCurrentStudy ]; @@ -3931,7 +3952,7 @@ void ctkDICOMDatabase::updateDisplayedFields() QString displayedFieldsKeyForCurrentSeries = d->getDisplaySeriesFieldsKey(seriesInstanceUID, displayedFieldsMapSeries); if (displayedFieldsKeyForCurrentSeries.isEmpty()) { - logger.error("Failed to find series for SOP Instance UID = " + sopInstanceUID); + logger->error("Failed to find series for SOP Instance UID = " + sopInstanceUID); continue; } QMap displayedFieldsForCurrentSeries = displayedFieldsMapSeries[ displayedFieldsKeyForCurrentSeries ]; @@ -3980,7 +4001,7 @@ void ctkDICOMDatabase::updateDisplayedFields() } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::displayedNameForField(QString table, QString field) const +QString ctkDICOMDatabase::displayedNameForField(const QString& table, const QString& field) const { Q_D(const ctkDICOMDatabase); @@ -3990,7 +4011,7 @@ QString ctkDICOMDatabase::displayedNameForField(QString table, QString field) co query.addBindValue(field); if (!query.exec()) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return QString(); } @@ -3999,13 +4020,13 @@ QString ctkDICOMDatabase::displayedNameForField(QString table, QString field) co } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::setDisplayedNameForField(QString table, QString field, QString displayedName) +void ctkDICOMDatabase::setDisplayedNameForField(const QString& table, const QString& field, const QString& displayedName) { Q_D(ctkDICOMDatabase); if (!this->isOpen()) { - logger.warn("Database needs to be open to set column display properties"); + logger->warn("Database needs to be open to set column display properties"); return; } @@ -4016,7 +4037,7 @@ void ctkDICOMDatabase::setDisplayedNameForField(QString table, QString field, QS query.addBindValue(field); if (!d->loggedExec(query)) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return; } @@ -4024,7 +4045,7 @@ void ctkDICOMDatabase::setDisplayedNameForField(QString table, QString field, QS } //------------------------------------------------------------------------------ -bool ctkDICOMDatabase::visibilityForField(QString table, QString field) const +bool ctkDICOMDatabase::visibilityForField(const QString& table, const QString& field) const { Q_D(const ctkDICOMDatabase); @@ -4034,7 +4055,7 @@ bool ctkDICOMDatabase::visibilityForField(QString table, QString field) const query.addBindValue(field); if (!query.exec()) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return false; } @@ -4043,13 +4064,13 @@ bool ctkDICOMDatabase::visibilityForField(QString table, QString field) const } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::setVisibilityForField(QString table, QString field, bool visibility) +void ctkDICOMDatabase::setVisibilityForField(const QString& table, const QString& field, bool visibility) { Q_D(ctkDICOMDatabase); if (!this->isOpen()) { - logger.warn("Database needs to be open to set column display properties"); + logger->warn("Database needs to be open to set column display properties"); return; } @@ -4060,7 +4081,7 @@ void ctkDICOMDatabase::setVisibilityForField(QString table, QString field, bool query.addBindValue(field); if (!d->loggedExec(query)) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return; } @@ -4068,7 +4089,7 @@ void ctkDICOMDatabase::setVisibilityForField(QString table, QString field, bool } //------------------------------------------------------------------------------ -int ctkDICOMDatabase::weightForField(QString table, QString field) const +int ctkDICOMDatabase::weightForField(const QString& table, const QString& field) const { Q_D(const ctkDICOMDatabase); @@ -4078,7 +4099,7 @@ int ctkDICOMDatabase::weightForField(QString table, QString field) const query.addBindValue(field); if (!query.exec()) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return INT_MAX; } @@ -4087,13 +4108,13 @@ int ctkDICOMDatabase::weightForField(QString table, QString field) const } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::setWeightForField(QString table, QString field, int weight) +void ctkDICOMDatabase::setWeightForField(const QString& table, const QString& field, int weight) { Q_D(ctkDICOMDatabase); if (!this->isOpen()) { - logger.warn("Database needs to be open to set column display properties"); + logger->warn("Database needs to be open to set column display properties"); return; } @@ -4104,7 +4125,7 @@ void ctkDICOMDatabase::setWeightForField(QString table, QString field, int weigh query.addBindValue(field); if (!d->loggedExec(query)) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return; } @@ -4112,7 +4133,7 @@ void ctkDICOMDatabase::setWeightForField(QString table, QString field, int weigh } //------------------------------------------------------------------------------ -QString ctkDICOMDatabase::formatForField(QString table, QString field) const +QString ctkDICOMDatabase::formatForField(const QString& table, const QString& field) const { Q_D(const ctkDICOMDatabase); @@ -4122,7 +4143,7 @@ QString ctkDICOMDatabase::formatForField(QString table, QString field) const query.addBindValue(field); if (!query.exec()) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return QString(); } @@ -4131,13 +4152,13 @@ QString ctkDICOMDatabase::formatForField(QString table, QString field) const } //------------------------------------------------------------------------------ -void ctkDICOMDatabase::setFormatForField(QString table, QString field, QString format) +void ctkDICOMDatabase::setFormatForField(const QString& table, const QString& field, const QString& format) { Q_D(ctkDICOMDatabase); if (!this->isOpen()) { - logger.warn("Database needs to be open to set column display properties"); + logger->warn("Database needs to be open to set column display properties"); return; } @@ -4148,7 +4169,7 @@ void ctkDICOMDatabase::setFormatForField(QString table, QString field, QString f query.addBindValue(field); if (!d->loggedExec(query)) { - logger.error("SQLITE ERROR: " + query.lastError().driverText()); + logger->error("SQLITE ERROR: " + query.lastError().driverText()); return; } @@ -4158,7 +4179,7 @@ void ctkDICOMDatabase::setFormatForField(QString table, QString field, QString f //------------------------------------------------------------------------------ QString ctkDICOMDatabase::compositePatientID(const QString& patientID, const QString& patientsName, const QString& patientsBirthDate) { - return QString("%1~%2~%3").arg(patientID).arg(patientsBirthDate).arg(patientsName); + return QString("%1~%2~%3").arg(patientID, patientsBirthDate, patientsName); } //------------------------------------------------------------------------------ diff --git a/Libs/DICOM/Core/ctkDICOMDatabase.h b/Libs/DICOM/Core/ctkDICOMDatabase.h index 8638ce1ff8..73d34e3a92 100644 --- a/Libs/DICOM/Core/ctkDICOMDatabase.h +++ b/Libs/DICOM/Core/ctkDICOMDatabase.h @@ -83,7 +83,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject }; explicit ctkDICOMDatabase(QObject *parent = 0); - explicit ctkDICOMDatabase(QString databaseFile); + explicit ctkDICOMDatabase(const QString& databaseFile); virtual ~ctkDICOMDatabase(); const QSqlDatabase& database() const; @@ -164,55 +164,55 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject Q_INVOKABLE QString schemaVersionLoaded(); /// Set schema version externally in case a non-standard schema is used - Q_INVOKABLE void setSchemaVersion(QString schemaVersion); + Q_INVOKABLE void setSchemaVersion(const QString& schemaVersion); /// \brief database accessors Q_INVOKABLE QStringList patients(); - Q_INVOKABLE QStringList studiesForPatient(const QString patientUID); - Q_INVOKABLE QStringList seriesForStudy(const QString studyUID); + Q_INVOKABLE QStringList studiesForPatient(const QString& patientUID); + Q_INVOKABLE QStringList seriesForStudy(const QString& studyUID); /// Since a series may consists of many hundreds of instances, this method may be slow. /// If hits > 0 is specified then returned instances will be limited to that number. /// This is useful for retrieving first file, for example for getting access to fields within that file /// using instanceValue() method. - Q_INVOKABLE QStringList instancesForSeries(const QString seriesUID, int hits = -1); - Q_INVOKABLE QString studyForSeries(QString seriesUID); - Q_INVOKABLE QString patientForStudy(QString studyUID); + Q_INVOKABLE QStringList instancesForSeries(const QString& seriesUID, int hits = -1); + Q_INVOKABLE QString studyForSeries(const QString& seriesUID); + Q_INVOKABLE QString patientForStudy(const QString& studyUID); /// Since a series may consists of many hundreds of files, this method may be slow. /// If hits > 0 is specified then returned filenames will be limited to that number. /// This is useful for retrieving first file, for example for getting access to fields within that file /// using fileValue() method. - Q_INVOKABLE QStringList filesForSeries(const QString seriesUID, int hits=-1); - Q_INVOKABLE QStringList urlsForSeries(const QString seriesUID, int hits=-1); - - Q_INVOKABLE QHash descriptionsForFile(QString fileName); - Q_INVOKABLE QString descriptionForSeries(const QString seriesUID); - Q_INVOKABLE QString descriptionForStudy(const QString studyUID); - Q_INVOKABLE QString nameForPatient(const QString patientUID); - Q_INVOKABLE QString displayedNameForPatient(const QString patientUID); - Q_INVOKABLE QDateTime insertDateTimeForPatient(const QString patientUID); - Q_INVOKABLE QDateTime insertDateTimeForStudy(const QString studyInstanceUID); - Q_INVOKABLE QDateTime insertDateTimeForSeries(const QString seriesInstanceUID); - Q_INVOKABLE QString fieldForPatient(const QString field, const QString patientUID); - Q_INVOKABLE QString fieldForStudy(const QString field, const QString studyInstanceUID); - Q_INVOKABLE QString fieldForSeries(const QString field, const QString seriesInstanceUID); + Q_INVOKABLE QStringList filesForSeries(const QString& seriesUID, int hits=-1); + Q_INVOKABLE QStringList urlsForSeries(const QString& seriesUID, int hits=-1); + + Q_INVOKABLE QHash descriptionsForFile(const QString& fileName); + Q_INVOKABLE QString descriptionForSeries(const QString& seriesUID); + Q_INVOKABLE QString descriptionForStudy(const QString& studyUID); + Q_INVOKABLE QString nameForPatient(const QString& patientUID); + Q_INVOKABLE QString displayedNameForPatient(const QString& patientUID); + Q_INVOKABLE QDateTime insertDateTimeForPatient(const QString& patientUID); + Q_INVOKABLE QDateTime insertDateTimeForStudy(const QString& studyInstanceUID); + Q_INVOKABLE QDateTime insertDateTimeForSeries(const QString& seriesInstanceUID); + Q_INVOKABLE QString fieldForPatient(const QString& field, const QString& patientUID); + Q_INVOKABLE QString fieldForStudy(const QString& field, const QString& studyInstanceUID); + Q_INVOKABLE QString fieldForSeries(const QString& field, const QString& seriesInstanceUID); /// Provide lists of allow and deny servers associated with the patient. - Q_INVOKABLE QMap connectionsInformationForPatient(const QString patientUID); + Q_INVOKABLE QMap connectionsInformationForPatient(const QString& patientUID); /// Set the allow and deny servers for the patient - Q_INVOKABLE bool updateConnectionsForPatient(const QString patientUID, - const QStringList allowList, - const QStringList denyList); + Q_INVOKABLE bool updateConnectionsForPatient(const QString& patientUID, + const QStringList& allowList, + const QStringList& denyList); QStringList patientFieldNames() const; QStringList studyFieldNames() const; QStringList seriesFieldNames() const; - Q_INVOKABLE QString fileForInstance(const QString sopInstanceUID); - Q_INVOKABLE QString urlForInstance(const QString sopInstanceUID); - Q_INVOKABLE QString instanceForURL(const QString url); - Q_INVOKABLE QString seriesForFile(QString fileName); - Q_INVOKABLE QString instanceForFile(const QString fileName); - Q_INVOKABLE QDateTime insertDateTimeForInstance(const QString fileName); + Q_INVOKABLE QString fileForInstance(const QString& sopInstanceUID); + Q_INVOKABLE QString urlForInstance(const QString& sopInstanceUID); + Q_INVOKABLE QString instanceForURL(const QString& url); + Q_INVOKABLE QString seriesForFile(const QString& fileName); + Q_INVOKABLE QString instanceForFile(const QString& fileName); + Q_INVOKABLE QDateTime insertDateTimeForInstance(const QString& fileName); Q_INVOKABLE QString thumbnailPathForInstance(const QString& studyInstanceUID, const QString& seriesInstanceUID, const QString& sopInstanceUID); @@ -236,10 +236,10 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// (corresponding file will be found via the database) /// @param fileName Full path to a dicom file to load. /// @param key A group,element tag in zero-filled hex - Q_INVOKABLE void loadInstanceHeader(const QString sopInstanceUID); - Q_INVOKABLE void loadFileHeader(const QString fileName); + Q_INVOKABLE void loadInstanceHeader(const QString& sopInstanceUID); + Q_INVOKABLE void loadFileHeader(const QString& fileName); Q_INVOKABLE QStringList headerKeys(); - Q_INVOKABLE QString headerValue(const QString key); + Q_INVOKABLE QString headerValue(const QString& key); /// \brief Application-defined tags of interest /// This list of tags is added to the internal tag cache during import @@ -250,7 +250,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// be able to use the cache rather than re-reading the file. /// @param tags should be a list of ascii hex group/element tags /// like "0008,0008" as in the instanceValue and fileValue calls - void setTagsToPrecache(const QStringList tags); + void setTagsToPrecache(const QStringList& tags); const QStringList tagsToPrecache(); /// \brief Tags that must not be stored in the tag cache. @@ -258,7 +258,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// or if content of this field is usually very large. /// Presence of non-empty tag can still be checked using instanceValueExists or fileValueExists. /// By default, only PixelData tag is excluded from storage. - void setTagsToExcludeFromStorage(const QStringList tags); + void setTagsToExcludeFromStorage(const QStringList& tags); const QStringList tagsToExcludeFromStorage(); /// Insert into the database if not already existing. @@ -368,10 +368,10 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// @param group The group portion of the tag as an integer /// @param element The element portion of the tag as an integer /// @Returns empty string if element is missing or excluded from storage. - Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const QString tag); - Q_INVOKABLE QString instanceValue (const QString sopInstanceUID, const unsigned short group, const unsigned short element); - Q_INVOKABLE QString fileValue (const QString fileName, const QString tag); - Q_INVOKABLE QString fileValue (const QString fileName, const unsigned short group, const unsigned short element); + Q_INVOKABLE QString instanceValue (const QString& sopInstanceUID, const QString& tag); + Q_INVOKABLE QString instanceValue (const QString& sopInstanceUID, const unsigned short group, const unsigned short element); + Q_INVOKABLE QString fileValue (const QString& fileName, const QString& tag); + Q_INVOKABLE QString fileValue (const QString& fileName, const unsigned short group, const unsigned short element); /// \brief Efficiently retrieve tag values for multiple instances in a single query /// @param sopInstanceUIDs List of instance UIDs to query @@ -380,8 +380,8 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject Q_INVOKABLE QMap instanceValues(const QStringList& sopInstanceUIDs, const QString& tag); /// Convert between string and (unsigned short int, unsigned short int) representation of a DICOM tag. - Q_INVOKABLE bool tagToGroupElement (const QString tag, unsigned short& group, unsigned short& element); - Q_INVOKABLE QString groupElementToTag (const unsigned short& group, const unsigned short& element); + Q_INVOKABLE bool tagToGroupElement (const QString& tag, unsigned short& group, unsigned short& element); + Q_INVOKABLE QString groupElementToTag (unsigned short group, unsigned short element); /// \brief Check if an element with the given attribute tag exists in the dataset and has a non-empty value. /// @param sopInstanceUID A string with the uid for a given instance @@ -390,10 +390,10 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// @param group The group portion of the tag as an integer /// @param element The element portion of the tag as an integer /// @Returns true if tag exists and has non-empty value. Returns true even if the value is excluded from storage in the database. - Q_INVOKABLE bool instanceValueExists(const QString sopInstanceUID, const QString tag); - Q_INVOKABLE bool instanceValueExists(const QString sopInstanceUID, const unsigned short group, const unsigned short element); - Q_INVOKABLE bool fileValueExists(const QString fileName, const QString tag); - Q_INVOKABLE bool fileValueExists(const QString fileName, const unsigned short group, const unsigned short element); + Q_INVOKABLE bool instanceValueExists(const QString& sopInstanceUID, const QString& tag); + Q_INVOKABLE bool instanceValueExists(const QString& sopInstanceUID, const unsigned short group, const unsigned short element); + Q_INVOKABLE bool fileValueExists(const QString& fileName, const QString& tag); + Q_INVOKABLE bool fileValueExists(const QString& fileName, const unsigned short group, const unsigned short element); /// \brief Store values of previously requested instance elements /// These are meant to be internal methods used by the instanceValue and fileValue @@ -409,38 +409,38 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabase : public QObject /// Create a tagCache in the current database. Delete the existing one if it exists. Q_INVOKABLE bool initializeTagCache (); /// Return the value of a cached tag - Q_INVOKABLE QString cachedTag (const QString sopInstanceUID, const QString tag); + Q_INVOKABLE QString cachedTag (const QString& sopInstanceUID, const QString& tag); /// Return the list of all cached tags and values for the specified sopInstanceUID. Returns with empty string if the tag is not present in the cache. - Q_INVOKABLE void getCachedTags(const QString sopInstanceUID, QMap &cachedTags); + Q_INVOKABLE void getCachedTags(const QString& sopInstanceUID, QMap &cachedTags); /// Insert an instance tag's value into to the cache - Q_INVOKABLE bool cacheTag (const QString sopInstanceUID, const QString tag, const QString value); + Q_INVOKABLE bool cacheTag (const QString& sopInstanceUID, const QString& tag, const QString& value); /// Insert lists of tags into the cache as a batch query operation - Q_INVOKABLE bool cacheTags (const QStringList sopInstanceUIDs, const QStringList tags, const QStringList values); + Q_INVOKABLE bool cacheTags (const QStringList& sopInstanceUIDs, const QStringList& tags, const QStringList& values); /// Remove all tags corresponding to a SOP instance UID - Q_INVOKABLE void removeCachedTags(const QString sopInstanceUID); + Q_INVOKABLE void removeCachedTags(const QString& sopInstanceUID); /// Get displayed name of a given field - Q_INVOKABLE QString displayedNameForField(QString table, QString field) const; + Q_INVOKABLE QString displayedNameForField(const QString& table, const QString& field) const; /// Set displayed name of a given field - Q_INVOKABLE void setDisplayedNameForField(QString table, QString field, QString displayedName); + Q_INVOKABLE void setDisplayedNameForField(const QString& table, const QString& field, const QString& displayedName); /// Get visibility of a given field - Q_INVOKABLE bool visibilityForField(QString table, QString field) const; + Q_INVOKABLE bool visibilityForField(const QString& table, const QString& field) const; /// Set visibility of a given field - Q_INVOKABLE void setVisibilityForField(QString table, QString field, bool visibility); + Q_INVOKABLE void setVisibilityForField(const QString& table, const QString& field, bool visibility); /// Get weight of a given field. /// Weight specifies the order of the field columns in the table. Smaller values are positioned towards the left ("heaviest sinks down") - Q_INVOKABLE int weightForField(QString table, QString field) const; + Q_INVOKABLE int weightForField(const QString& table, const QString& field) const; /// Set weight of a given field /// Weight specifies the order of the field columns in the table. Smaller values are positioned towards the left ("heaviest sinks down") - Q_INVOKABLE void setWeightForField(QString table, QString field, int weight); + Q_INVOKABLE void setWeightForField(const QString& table, const QString& field, int weight); /// Get format of a given field /// It contains a json document with the following fields: /// - resizeMode: column resize mode. Accepted values are: "interactive" (default), "stretch", or "resizeToContents". /// - sort: default sort order. Accepted values are: empty (default), "ascending" or "descending". /// Only one column (or none) should have non-empty sort order in each table. - Q_INVOKABLE QString formatForField(QString table, QString field) const; + Q_INVOKABLE QString formatForField(const QString& table, const QString& field) const; /// Set format of a given field - Q_INVOKABLE void setFormatForField(QString table, QString field, QString format); + Q_INVOKABLE void setFormatForField(const QString& table, const QString& field, const QString& format); /// There is no patient UID in DICOM, so we need to use use this composite ID to uniquely identify a patient with a string. /// Used when inserting a patient (InsertedPatientsCompositeIDCache) and in the display field update process. diff --git a/Libs/DICOM/Core/ctkDICOMDatabase_p.h b/Libs/DICOM/Core/ctkDICOMDatabase_p.h index 2f4bb1cbdf..d659de1050 100644 --- a/Libs/DICOM/Core/ctkDICOMDatabase_p.h +++ b/Libs/DICOM/Core/ctkDICOMDatabase_p.h @@ -46,9 +46,9 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabasePrivate public: ctkDICOMDatabasePrivate(ctkDICOMDatabase&); ~ctkDICOMDatabasePrivate(); - void init(QString databaseFile); + void init(const QString& databaseFile); void registerCompressionLibraries(); - bool executeScript(const QString script); + bool executeScript(const QString& script); /// Run a query and prints debug output of status bool loggedExec(QSqlQuery& query); @@ -108,7 +108,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabasePrivate QString getDisplaySeriesFieldsKey(QString seriesInstanceUID, QMap > &displayedFieldsMapSeries); /// Get all Filename values from table - QStringList filenames(QString table); + QStringList filenames(const QString& table); int rowCount(const QString& tableName); @@ -174,7 +174,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabasePrivate QStringList TagsToPrecache; QStringList TagsToExcludeFromStorage; bool openTagCacheDatabase(); - void precacheTags(const ctkDICOMItem& dataset, const QString sopInstanceUID); + void precacheTags(const ctkDICOMItem& dataset, const QString& sopInstanceUID); /// Insert metadata ctkDICOMDatabase::InsertResult insertPatientStudySeries(const ctkDICOMItem& dataset, @@ -185,10 +185,10 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDatabasePrivate const QString& patientID, const QString& patientsName, int& databasePatientID); - ctkDICOMDatabase::InsertResult insertConnectionName(const int& dbPatientID, + ctkDICOMDatabase::InsertResult insertConnectionName(int dbPatientID, const QString& connectionName); ctkDICOMDatabase::InsertResult insertStudy(const ctkDICOMItem& dataset, - const int& dbPatientID); + int dbPatientID); ctkDICOMDatabase::InsertResult insertSeries(const ctkDICOMItem& dataset, const QString& studyInstanceUID); diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGenerator.cpp b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGenerator.cpp index 8d94fd7a79..03e2f0117a 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGenerator.cpp +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGenerator.cpp @@ -23,6 +23,7 @@ // ctkDICOM includes #include "ctkLogger.h" +#include #include "ctkDICOMDatabase.h" #include "ctkDICOMDisplayedFieldGenerator.h" #include "ctkDICOMDisplayedFieldGenerator_p.h" @@ -30,7 +31,7 @@ #include "ctkDICOMDisplayedFieldGeneratorRuleFactory.h" //------------------------------------------------------------------------------ -static ctkLogger logger("org.commontk.dicom.DICOMDisplayedFieldGenerator" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMDisplayedFieldGenerator")) //------------------------------------------------------------------------------ diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorAbstractRule.h b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorAbstractRule.h index 1b91f9aa2d..8a439c705c 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorAbstractRule.h +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorAbstractRule.h @@ -126,9 +126,9 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDisplayedFieldGeneratorAbstractRule /// Used when merging the original database content with the displayed fields generated by the rules. /// Example: SeriesDescription -> Unnamed Series virtual void registerEmptyFieldNames( - QMultiMap emptyFieldsSeries, - QMultiMap emptyFieldsStudies, - QMultiMap emptyFieldsPatients) + const QMultiMap& emptyFieldsSeries, + const QMultiMap& emptyFieldsStudies, + const QMultiMap& emptyFieldsPatients) { Q_UNUSED(emptyFieldsSeries); Q_UNUSED(emptyFieldsStudies); diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.cpp b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.cpp index 6a89104cff..8c553acc05 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.cpp +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.cpp @@ -82,14 +82,14 @@ QStringList ctkDICOMDisplayedFieldGeneratorDefaultRule::getRequiredDICOMTags() //------------------------------------------------------------------------------ void ctkDICOMDisplayedFieldGeneratorDefaultRule::registerEmptyFieldNames( - QMultiMap emptyFieldsDisplaySeries, - QMultiMap emptyFieldsDisplayStudies, - QMultiMap emptyFieldsDisplayPatients ) + const QMultiMap& emptyFieldsDisplaySeries, + const QMultiMap& emptyFieldsDisplayStudies, + const QMultiMap& emptyFieldsDisplayPatients ) { - Q_UNUSED(emptyFieldsDisplaySeries); Q_UNUSED(emptyFieldsDisplayStudies); Q_UNUSED(emptyFieldsDisplayPatients); - emptyFieldsDisplaySeries.insert("SeriesDescription", EMPTY_SERIES_DESCRIPTION); + QMultiMap localSeries = emptyFieldsDisplaySeries; + localSeries.insert("SeriesDescription", EMPTY_SERIES_DESCRIPTION); } //------------------------------------------------------------------------------ @@ -119,7 +119,7 @@ void ctkDICOMDisplayedFieldGeneratorDefaultRule::getDisplayedFieldsForInstance( { QString rows = cachedTagsForInstance[dicomTagToString(DCM_Rows)]; QString columns = cachedTagsForInstance[dicomTagToString(DCM_Columns)]; - displayedFieldsForCurrentSeries["DisplayedSize"] = QString("%1x%2").arg(columns).arg(rows); + displayedFieldsForCurrentSeries["DisplayedSize"] = QString("%1x%2").arg(columns, rows); } } @@ -153,7 +153,7 @@ void ctkDICOMDisplayedFieldGeneratorDefaultRule::mergeDisplayedFieldsForInstance } //------------------------------------------------------------------------------ -QString ctkDICOMDisplayedFieldGeneratorDefaultRule::humanReadablePatientName(QString dicomPatientName) +QString ctkDICOMDisplayedFieldGeneratorDefaultRule::humanReadablePatientName(const QString& dicomPatientName) { OFString dicomName(dicomPatientName.toUtf8().constData()); OFString formattedName; diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.h b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.h index 9af1d22d1e..1dca3235f9 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.h +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorDefaultRule.h @@ -46,7 +46,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDisplayedFieldGeneratorDefaultRule : public /// Register placeholder strings that still mean that a given field can be considered empty. /// Used when merging the original database content with the displayed fields generated by the rules. /// Example: SeriesDescription -> Unnamed Series - void registerEmptyFieldNames(QMultiMap emptyFieldsSeries, QMultiMap emptyFieldstudies, QMultiMap emptyFieldsPatients) override; + void registerEmptyFieldNames(const QMultiMap& emptyFieldsSeries, const QMultiMap& emptyFieldstudies, const QMultiMap& emptyFieldsPatients) override; /// Generate displayed fields for a certain instance based on its cached tags /// The way these generated fields will be used is defined by \sa mergeDisplayedFieldsForInstance @@ -62,7 +62,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDisplayedFieldGeneratorDefaultRule : public const QMultiMap &emptyFieldsSeries, const QMultiMap &emptyFieldsStudy, const QMultiMap &emptyFieldsPatient ) override; protected: - QString humanReadablePatientName(QString dicomPatientName); + QString humanReadablePatientName(const QString& dicomPatientName); }; #endif diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.cpp b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.cpp index 7b1bf24544..48d23e50c1 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.cpp +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.cpp @@ -68,16 +68,17 @@ QStringList ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule::ge //------------------------------------------------------------------------------ void ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule::registerEmptyFieldNames( - QMultiMap emptyFieldsDisplaySeries, - QMultiMap emptyFieldsDisplayStudies, - QMultiMap emptyFieldsDisplayPatients ) + const QMultiMap& emptyFieldsDisplaySeries, + const QMultiMap& emptyFieldsDisplayStudies, + const QMultiMap& emptyFieldsDisplayPatients ) { Q_UNUSED(emptyFieldsDisplayStudies); Q_UNUSED(emptyFieldsDisplayPatients); - emptyFieldsDisplaySeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtPlan); - emptyFieldsDisplaySeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtStruct); - emptyFieldsDisplaySeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtImage); + QMultiMap localSeries = emptyFieldsDisplaySeries; + localSeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtPlan); + localSeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtStruct); + localSeries.insert("SeriesDescription", this->EmptySeriesDescriptionRtImage); } //------------------------------------------------------------------------------ diff --git a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.h b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.h index a9d947aa4b..3bdf50c3ba 100644 --- a/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.h +++ b/Libs/DICOM/Core/ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDescriptionRule.h @@ -50,7 +50,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMDisplayedFieldGeneratorRadiotherapySeriesDes /// Register placeholder strings that still mean that a given field can be considered empty. /// Used when merging the original database content with the displayed fields generated by the rules. /// Example: SeriesDescription -> Unnamed Series - void registerEmptyFieldNames(QMultiMap emptyFieldsSeries, QMultiMap emptyFieldsStudies, QMultiMap emptyFieldsPatients) override; + void registerEmptyFieldNames(const QMultiMap& emptyFieldsSeries, const QMultiMap& emptyFieldsStudies, const QMultiMap& emptyFieldsPatients) override; /// Generate displayed fields for a certain instance based on its cached tags /// The way these generated fields will be used is defined by \sa mergeDisplayedFieldsForInstance diff --git a/Libs/DICOM/Core/ctkDICOMEcho.cpp b/Libs/DICOM/Core/ctkDICOMEcho.cpp index e9bd798fc6..882bda9c35 100644 --- a/Libs/DICOM/Core/ctkDICOMEcho.cpp +++ b/Libs/DICOM/Core/ctkDICOMEcho.cpp @@ -148,13 +148,13 @@ CTK_SET_CPP(ctkDICOMEcho, const QString&, setCalledAETitle, CalledAETitle); CTK_GET_CPP(ctkDICOMEcho, QString, calledAETitle, CalledAETitle) CTK_SET_CPP(ctkDICOMEcho, const QString&, setHost, Host); CTK_GET_CPP(ctkDICOMEcho, QString, host, Host) -CTK_SET_CPP(ctkDICOMEcho, const int&, setPort, Port); +CTK_SET_CPP(ctkDICOMEcho, int, setPort, Port); CTK_GET_CPP(ctkDICOMEcho, int, port, Port) CTK_SET_CPP(ctkDICOMEcho, const QString&, setJobUID, JobUID); CTK_GET_CPP(ctkDICOMEcho, QString, jobUID, JobUID) //----------------------------------------------------------------------------- -void ctkDICOMEcho::setConnectionTimeout(const int& timeout) +void ctkDICOMEcho::setConnectionTimeout(int timeout) { Q_D(ctkDICOMEcho); d->SCU->setACSETimeout(timeout); diff --git a/Libs/DICOM/Core/ctkDICOMEcho.h b/Libs/DICOM/Core/ctkDICOMEcho.h index cb201cc81e..5dfd30836f 100644 --- a/Libs/DICOM/Core/ctkDICOMEcho.h +++ b/Libs/DICOM/Core/ctkDICOMEcho.h @@ -77,13 +77,13 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMEcho : public QObject /// Specify a port for the packet headers. /// \a port ranges from 0 to 65535. /// 80 by default. - void setPort(const int& port); + void setPort(int port); int port() const; ///@} ///@{ /// Connection timeout, default 3 sec. - void setConnectionTimeout(const int& timeout); + void setConnectionTimeout(int timeout); int connectionTimeout() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMEchoJob.cpp b/Libs/DICOM/Core/ctkDICOMEchoJob.cpp index 2006d664e3..b784e4d709 100644 --- a/Libs/DICOM/Core/ctkDICOMEchoJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMEchoJob.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" // For ctkDICOMJobDetail @@ -30,7 +31,7 @@ #include "ctkDICOMEchoWorker.h" #include "ctkDICOMServer.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMEchoJob" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMEchoJob")) //------------------------------------------------------------------------------ // ctkDICOMEchoJobPrivate methods @@ -56,8 +57,8 @@ ctkDICOMEchoJobPrivate::~ctkDICOMEchoJobPrivate() // ctkDICOMEchoJob methods //------------------------------------------------------------------------------ -ctkDICOMEchoJob::ctkDICOMEchoJob() - : d_ptr(new ctkDICOMEchoJobPrivate(this)) +ctkDICOMEchoJob::ctkDICOMEchoJob(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMEchoJobPrivate(this)) { } diff --git a/Libs/DICOM/Core/ctkDICOMEchoJob.h b/Libs/DICOM/Core/ctkDICOMEchoJob.h index 8c5e1188e4..609263ee7f 100644 --- a/Libs/DICOM/Core/ctkDICOMEchoJob.h +++ b/Libs/DICOM/Core/ctkDICOMEchoJob.h @@ -44,7 +44,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMEchoJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMEchoJob(); + explicit ctkDICOMEchoJob(QObject* parent = nullptr); virtual ~ctkDICOMEchoJob(); ///@{ diff --git a/Libs/DICOM/Core/ctkDICOMEchoWorker.cpp b/Libs/DICOM/Core/ctkDICOMEchoWorker.cpp index b6287907be..46814c2c0d 100644 --- a/Libs/DICOM/Core/ctkDICOMEchoWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMEchoWorker.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMEchoWorker_p.h" @@ -33,7 +34,7 @@ // DCMTK includes #include -static ctkLogger logger ("org.commontk.dicom.DICOMRetrieveWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMRetrieveWorker")) //------------------------------------------------------------------------------ // ctkDICOMEchoWorkerPrivate methods @@ -79,8 +80,8 @@ void ctkDICOMEchoWorkerPrivate::setRetrieveParameters() // ctkDICOMEchoWorker methods //------------------------------------------------------------------------------ -ctkDICOMEchoWorker::ctkDICOMEchoWorker() - : d_ptr(new ctkDICOMEchoWorkerPrivate(this)) +ctkDICOMEchoWorker::ctkDICOMEchoWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMEchoWorkerPrivate(this)) { } @@ -127,7 +128,7 @@ void ctkDICOMEchoWorker::run() echoJob->setStatus(ctkAbstractJob::JobStatus::Running); - logger.debug(QString("ctkDICOMEchoWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMEchoWorker : running job %1 in thread %2.\n") .arg(echoJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); diff --git a/Libs/DICOM/Core/ctkDICOMEchoWorker.h b/Libs/DICOM/Core/ctkDICOMEchoWorker.h index 183e88ba3b..e831d14e36 100644 --- a/Libs/DICOM/Core/ctkDICOMEchoWorker.h +++ b/Libs/DICOM/Core/ctkDICOMEchoWorker.h @@ -41,7 +41,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMEchoWorker : public ctkAbstractWorker public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMEchoWorker(); + explicit ctkDICOMEchoWorker(QObject* parent = nullptr); virtual ~ctkDICOMEchoWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp b/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp index 36e0b4b133..87d628e1d6 100644 --- a/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMFilterProxyModel.cpp @@ -27,7 +27,8 @@ //logger #include -static ctkLogger logger("org.commontk.DICOM.Core.ctkDICOMFilterProxyModel"); +#include +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Core.ctkDICOMFilterProxyModel")) //---------------------------------------------------------------------------- @@ -66,29 +67,57 @@ ctkDICOMFilterProxyModel::~ctkDICOMFilterProxyModel(){ //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setNameSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextName = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setStudySearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextStudy = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setSeriesSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextSeries = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //---------------------------------------------------------------------------- void ctkDICOMFilterProxyModel::setIdSearchText(const QString &text){ Q_D(ctkDICOMFilterProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + this->beginFilterChange(); +#endif d->searchTextID = text; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } bool ctkDICOMFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const{ diff --git a/Libs/DICOM/Core/ctkDICOMIndexer.cpp b/Libs/DICOM/Core/ctkDICOMIndexer.cpp index 4c8d446531..7ef4b866e2 100644 --- a/Libs/DICOM/Core/ctkDICOMIndexer.cpp +++ b/Libs/DICOM/Core/ctkDICOMIndexer.cpp @@ -36,6 +36,7 @@ // ctkDICOM includes #include "ctkLogger.h" +#include #include "ctkDICOMIndexer.h" #include "ctkDICOMIndexer_p.h" #include "ctkDICOMDatabase.h" @@ -54,7 +55,7 @@ //------------------------------------------------------------------------------ -static ctkLogger logger("org.commontk.dicom.DICOMIndexer" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMIndexer")) /// How many files to parse before inserting results into the database. /// Increasing cache size increases maximum memory usage, very low cache size @@ -68,8 +69,9 @@ static int REQUEST_RESULTS_CACHE_MAXIMUM_SIZE = 5000; //------------------------------------------------------------------------------ -ctkDICOMIndexerPrivateWorker::ctkDICOMIndexerPrivateWorker(DICOMIndexingQueue* queue) -: RequestQueue(queue) +ctkDICOMIndexerPrivateWorker::ctkDICOMIndexerPrivateWorker(DICOMIndexingQueue* queue, QObject* parent) +: QObject(parent) +, RequestQueue(queue) , TimePercentageIndexing(95.0) , RemainingRequestCount(0) , CompletedRequestCount(0) @@ -138,7 +140,7 @@ void ctkDICOMIndexerPrivateWorker::start() imagesCountAfter = database.imagesCount(); double elapsedTimeInSeconds = timeProbe.elapsed() / 1000.0; - logger.info(QString("DICOM indexer has updated display fields for %1 files [%2s]") + logger->info(QString("DICOM indexer has updated display fields for %1 files [%2s]") .arg(imagesCountAfter-imagesCountBefore).arg(QString::number(elapsedTimeInSeconds, 'f', 2))); // restart if new requests has been queued during displayed fields update @@ -224,7 +226,7 @@ void ctkDICOMIndexerPrivateWorker::processIndexingRequest(DICOMIndexingQueue::In } else { - logger.warn(QString("Could not read DICOM file:") + filePath); + logger->warn(QString("Could not read DICOM file:") + filePath); } if (this->RequestQueue->isStopRequested()) @@ -235,7 +237,7 @@ void ctkDICOMIndexerPrivateWorker::processIndexingRequest(DICOMIndexingQueue::In if (alreadyAddedFileCount > 0) { - logger.debug( + logger->debug( QString("Skipped %1 files that were already in the database: %2...") .arg(alreadyAddedFileCount) .arg(alreadyAddedFiles.join(", ")) @@ -250,7 +252,7 @@ void ctkDICOMIndexerPrivateWorker::processIndexingRequest(DICOMIndexingQueue::In } float elapsedTimeInSeconds = timeProbe.elapsed() / 1000.0; - logger.info(QString("DICOM indexer has successfully processed %1 files [%2s]") + logger->info(QString("DICOM indexer has successfully processed %1 files [%2s]") .arg(currentFileIndex).arg(QString::number(elapsedTimeInSeconds, 'f', 2))); } @@ -279,7 +281,7 @@ void ctkDICOMIndexerPrivateWorker::writeIndexingResultsToDatabase(ctkDICOMDataba this->NumberOfInstancesInserted = 0; float elapsedTimeInSeconds = timeProbe.elapsed() / 1000.0; - logger.info(QString("DICOM indexer has successfully inserted %1 files [%2s]") + logger->info(QString("DICOM indexer has successfully inserted %1 files [%2s]") .arg(indexingResults.count()).arg(QString::number(elapsedTimeInSeconds, 'f', 2))); } @@ -441,14 +443,14 @@ ctkDICOMDatabase* ctkDICOMIndexer::database() } //------------------------------------------------------------------------------ - void ctkDICOMIndexer::addFile(ctkDICOMDatabase* db, const QString filePath, bool copyFile/*=false*/) + void ctkDICOMIndexer::addFile(ctkDICOMDatabase* db, const QString& filePath, bool copyFile/*=false*/) { this->setDatabase(db); this->addFile(filePath, copyFile); } //------------------------------------------------------------------------------ -void ctkDICOMIndexer::addFile(const QString filePath, bool copyFile/*=false*/) +void ctkDICOMIndexer::addFile(const QString& filePath, bool copyFile/*=false*/) { Q_D(ctkDICOMIndexer); DICOMIndexingQueue::IndexingRequest request; @@ -559,10 +561,10 @@ bool ctkDICOMIndexer::addDicomdir(const QString& directoryName, bool copyFile/*= { while ((patientRecord = rootRecord->nextSub(patientRecord)) != NULL) { - logger.debug( "Reading new Patient:" ); + logger->debug( "Reading new Patient:" ); if (patientRecord->findAndGetOFString(DCM_PatientName, patientsName).bad()) { - logger.warn( + logger->warn( QString("DICOMDIR file at %1 is invalid: patient name not found. " "All records belonging to this patient will be ignored.") .arg(directoryName) @@ -570,13 +572,13 @@ bool ctkDICOMIndexer::addDicomdir(const QString& directoryName, bool copyFile/*= success = false; continue; } - logger.debug( "Patient's Name: " + QString(patientsName.c_str()) ); + logger->debug( "Patient's Name: " + QString(patientsName.c_str()) ); while ((studyRecord = patientRecord->nextSub(studyRecord)) != NULL) { - logger.debug( "Reading new Study:" ); + logger->debug( "Reading new Study:" ); if (studyRecord->findAndGetOFString(DCM_StudyInstanceUID, studyInstanceUID).bad()) { - logger.warn( + logger->warn( QString("DICOMDIR file at %1 is invalid: study instance UID not found for patient %2. " "All records belonging to this study will be ignored.") .arg(directoryName) @@ -585,14 +587,14 @@ bool ctkDICOMIndexer::addDicomdir(const QString& directoryName, bool copyFile/*= success = false; continue; } - logger.debug( "Study instance UID: " + QString(studyInstanceUID.c_str()) ); + logger->debug( "Study instance UID: " + QString(studyInstanceUID.c_str()) ); while ((seriesRecord = studyRecord->nextSub(seriesRecord)) != NULL) { - logger.debug( "Reading new Series:" ); + logger->debug( "Reading new Series:" ); if (seriesRecord->findAndGetOFString(DCM_SeriesInstanceUID, seriesInstanceUID).bad()) { - logger.warn( + logger->warn( QString("DICOMDIR file at %1 is invalid: series instance UID not found for patient %2, study %3. " "All records belonging to this series will be ignored.") .arg(directoryName) @@ -602,14 +604,14 @@ bool ctkDICOMIndexer::addDicomdir(const QString& directoryName, bool copyFile/*= success = false; continue; } - logger.debug( "Series instance UID: " + QString(seriesInstanceUID.c_str()) ); + logger->debug( "Series instance UID: " + QString(seriesInstanceUID.c_str()) ); while ((fileRecord = seriesRecord->nextSub(fileRecord)) != NULL) { if (fileRecord->findAndGetOFStringArray(DCM_ReferencedSOPInstanceUIDInFile, sopInstanceUID).bad() || fileRecord->findAndGetOFStringArray(DCM_ReferencedFileID,referencedFileName).bad()) { - logger.warn( + logger->warn( QString("DICOMDIR file at %1 is invalid: " "referenced SOP instance UID or file name is invalid for patient %2, study %3, series %4. " "This file will be ignored.") @@ -633,9 +635,8 @@ bool ctkDICOMIndexer::addDicomdir(const QString& directoryName, bool copyFile/*= } } float elapsedTimeInSeconds = timeProbe.elapsed() / 1000.0; - logger.info(QString("DICOM indexer has successfully processed DICOMDIR in %1 [%2s]") - .arg(directoryName) - .arg(QString::number(elapsedTimeInSeconds,'f', 2))); + logger->info(QString("DICOM indexer has successfully processed DICOMDIR in %1 [%2s]") + .arg(directoryName, QString::number(elapsedTimeInSeconds,'f', 2))); this->addListOfFiles(listOfInstances, copyFile); } return success; diff --git a/Libs/DICOM/Core/ctkDICOMIndexer.h b/Libs/DICOM/Core/ctkDICOMIndexer.h index a53f1c0256..dece790ea3 100644 --- a/Libs/DICOM/Core/ctkDICOMIndexer.h +++ b/Libs/DICOM/Core/ctkDICOMIndexer.h @@ -111,9 +111,9 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMIndexer : public QObject /// Scan the file using Dcmtk and populate the database with all the /// DICOM fields accordingly. /// - Q_INVOKABLE void addFile(const QString filePath, bool copyFile = false); + Q_INVOKABLE void addFile(const QString& filePath, bool copyFile = false); /// Kept for backward compatibility - Q_INVOKABLE void addFile(ctkDICOMDatabase* db, const QString filePath, bool copyFile = false); + Q_INVOKABLE void addFile(ctkDICOMDatabase* db, const QString& filePath, bool copyFile = false); /// /// \brief Wait for all the indexing operations to complete diff --git a/Libs/DICOM/Core/ctkDICOMIndexer_p.h b/Libs/DICOM/Core/ctkDICOMIndexer_p.h index 731b49682f..5d187aca37 100644 --- a/Libs/DICOM/Core/ctkDICOMIndexer_p.h +++ b/Libs/DICOM/Core/ctkDICOMIndexer_p.h @@ -215,7 +215,7 @@ class ctkDICOMIndexerPrivateWorker : public QObject Q_OBJECT public: - ctkDICOMIndexerPrivateWorker(DICOMIndexingQueue* queue); + ctkDICOMIndexerPrivateWorker(DICOMIndexingQueue* queue, QObject* parent = nullptr); virtual ~ctkDICOMIndexerPrivateWorker(); public Q_SLOTS: diff --git a/Libs/DICOM/Core/ctkDICOMInserterJob.cpp b/Libs/DICOM/Core/ctkDICOMInserterJob.cpp index a5704c10b4..db649f9319 100644 --- a/Libs/DICOM/Core/ctkDICOMInserterJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMInserterJob.cpp @@ -25,14 +25,16 @@ #include "ctkDICOMInserterJob.h" #include "ctkDICOMInserterWorker.h" #include "ctkLogger.h" +#include -static ctkLogger logger ("org.commontk.dicom.DICOMInserterJob"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMInserterJob")) //------------------------------------------------------------------------------ // ctkDICOMInserterJob methods //------------------------------------------------------------------------------ -ctkDICOMInserterJob::ctkDICOMInserterJob() +ctkDICOMInserterJob::ctkDICOMInserterJob(QObject* parent) + : Superclass(parent) { this->MaximumConcurrentJobsPerType = 1; } diff --git a/Libs/DICOM/Core/ctkDICOMInserterJob.h b/Libs/DICOM/Core/ctkDICOMInserterJob.h index cb6c9b8c3d..24fbc9e645 100644 --- a/Libs/DICOM/Core/ctkDICOMInserterJob.h +++ b/Libs/DICOM/Core/ctkDICOMInserterJob.h @@ -46,7 +46,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMInserterJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMInserterJob(); + explicit ctkDICOMInserterJob(QObject* parent = nullptr); virtual ~ctkDICOMInserterJob(); /// Logger report string formatting for specific task diff --git a/Libs/DICOM/Core/ctkDICOMInserterWorker.cpp b/Libs/DICOM/Core/ctkDICOMInserterWorker.cpp index 1c80dbb572..2ed28cffa1 100644 --- a/Libs/DICOM/Core/ctkDICOMInserterWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMInserterWorker.cpp @@ -26,6 +26,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMInserterJob.h" @@ -35,7 +36,7 @@ // DCMTK includes #include -static ctkLogger logger ("org.commontk.dicom.DICOMInserterWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMInserterWorker")) //------------------------------------------------------------------------------ // ctkDICOMInserterWorkerPrivate methods @@ -71,8 +72,8 @@ void ctkDICOMInserterWorkerPrivate::setInserterParameters() // ctkDICOMInserterWorker methods //------------------------------------------------------------------------------ -ctkDICOMInserterWorker::ctkDICOMInserterWorker() - : d_ptr(new ctkDICOMInserterWorkerPrivate(this)) +ctkDICOMInserterWorker::ctkDICOMInserterWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMInserterWorkerPrivate(this)) { } @@ -114,7 +115,7 @@ void ctkDICOMInserterWorker::run() inserterJob->setStatus(ctkAbstractJob::JobStatus::Running); - logger.debug(QString("ctkDICOMInserterWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMInserterWorker : running job %1 in thread %2.\n") .arg(inserterJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); diff --git a/Libs/DICOM/Core/ctkDICOMInserterWorker.h b/Libs/DICOM/Core/ctkDICOMInserterWorker.h index 29d9736844..9ea845e5fd 100644 --- a/Libs/DICOM/Core/ctkDICOMInserterWorker.h +++ b/Libs/DICOM/Core/ctkDICOMInserterWorker.h @@ -41,7 +41,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMInserterWorker : public ctkAbstractWorker public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMInserterWorker(); + explicit ctkDICOMInserterWorker(QObject* parent = nullptr); virtual ~ctkDICOMInserterWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Core/ctkDICOMItem.cpp b/Libs/DICOM/Core/ctkDICOMItem.cpp index d099c009bb..3b8e16a6ce 100644 --- a/Libs/DICOM/Core/ctkDICOMItem.cpp +++ b/Libs/DICOM/Core/ctkDICOMItem.cpp @@ -729,7 +729,7 @@ int ctkDICOMItem::GetElementAsUnsignedShort( const DcmTag& tag, unsigned long po return i; } -bool ctkDICOMItem::SetElementAsString( const DcmTag& tag, QString string ) +bool ctkDICOMItem::SetElementAsString( const DcmTag& tag, const QString& string ) { Q_D(ctkDICOMItem); this->EnsureDcmDataSetIsInitialized(); @@ -737,7 +737,7 @@ bool ctkDICOMItem::SetElementAsString( const DcmTag& tag, QString string ) return CheckCondition( d->m_DcmItem->putAndInsertString( tag, string.toLatin1().data() ) ); } -bool ctkDICOMItem::SetElementAsStringList( const DcmTag& /*tag*/, QStringList /*stringList*/ ) +bool ctkDICOMItem::SetElementAsStringList( const DcmTag& /*tag*/, const QStringList& /*stringList*/ ) { this->EnsureDcmDataSetIsInitialized(); // TODO: Find out how this can be implemented with DcmDataset methods; there is no method for @@ -745,7 +745,7 @@ bool ctkDICOMItem::SetElementAsStringList( const DcmTag& /*tag*/, QStringList /* return false; } -bool ctkDICOMItem::SetElementAsPersonName( const DcmTag& tag, ctkDICOMPersonName personName ) +bool ctkDICOMItem::SetElementAsPersonName( const DcmTag& tag, const ctkDICOMPersonName& personName ) { Q_D(ctkDICOMItem); this->EnsureDcmDataSetIsInitialized(); @@ -764,7 +764,7 @@ bool ctkDICOMItem::SetElementAsPersonName( const DcmTag& tag, ctkDICOMPersonName return false; } -bool ctkDICOMItem::SetElementAsPersonNameList( const DcmTag& tag, ctkDICOMPersonNameList personNameList ) +bool ctkDICOMItem::SetElementAsPersonNameList( const DcmTag& tag, const ctkDICOMPersonNameList& personNameList ) { Q_UNUSED(tag); Q_UNUSED(personNameList); @@ -804,7 +804,7 @@ bool ctkDICOMItem::SetElementAsTime( const DcmTag& tag, QTime time ) return false; } -bool ctkDICOMItem::SetElementAsDateTime( const DcmTag& tag, QDateTime dateTime ) +bool ctkDICOMItem::SetElementAsDateTime( const DcmTag& tag, const QDateTime& dateTime ) { Q_D(ctkDICOMItem); this->EnsureDcmDataSetIsInitialized(); @@ -1037,7 +1037,7 @@ QString ctkDICOMItem::GetStoredSerialization() -void ctkDICOMItem::SetStoredSerialization(QString serializedDataset) +void ctkDICOMItem::SetStoredSerialization(const QString& serializedDataset) { Q_UNUSED(serializedDataset); throw std::runtime_error("No serialization implemented for this object!"); diff --git a/Libs/DICOM/Core/ctkDICOMItem.h b/Libs/DICOM/Core/ctkDICOMItem.h index 9a42b73bd1..1aa3897a8f 100644 --- a/Libs/DICOM/Core/ctkDICOMItem.h +++ b/Libs/DICOM/Core/ctkDICOMItem.h @@ -205,13 +205,13 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMItem /// /// \brief Set-methods for for all subtypes of DcmByteString /// - bool SetElementAsString( const DcmTag& tag, QString string ); - bool SetElementAsStringList( const DcmTag& tag, QStringList stringList ); //> Currently not implemented - bool SetElementAsPersonName( const DcmTag& tag, ctkDICOMPersonName personName ); - bool SetElementAsPersonNameList( const DcmTag& tag, ctkDICOMPersonNameList personNameList ); //> Currently not implemented + bool SetElementAsString( const DcmTag& tag, const QString& string ); + bool SetElementAsStringList( const DcmTag& tag, const QStringList& stringList ); //> Currently not implemented + bool SetElementAsPersonName( const DcmTag& tag, const ctkDICOMPersonName& personName ); + bool SetElementAsPersonNameList( const DcmTag& tag, const ctkDICOMPersonNameList& personNameList ); //> Currently not implemented bool SetElementAsDate( const DcmTag& tag, QDate date ); bool SetElementAsTime( const DcmTag& tag, QTime time ); - bool SetElementAsDateTime( const DcmTag& tag, QDateTime dateTime ); + bool SetElementAsDateTime( const DcmTag& tag, const QDateTime& dateTime ); bool SetElementAsInteger( const DcmTag& tag, long value, unsigned long pos = 0 ); // type IS bool SetElementAsSignedShort( const DcmTag& tag, int value, unsigned long pos = 0 ); // type SS bool SetElementAsUnsignedShort( const DcmTag& tag, int value, unsigned long pos = 0 ); // type US @@ -276,7 +276,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMItem /// You can override this method in a subclass to store a serialized /// version of the object to some storage mechanism, eg a database /// - virtual void SetStoredSerialization(QString serializedDataset); + virtual void SetStoredSerialization(const QString& serializedDataset); QScopedPointer d_ptr; diff --git a/Libs/DICOM/Core/ctkDICOMJob.cpp b/Libs/DICOM/Core/ctkDICOMJob.cpp index 6bab33a7c0..9e579a47f4 100644 --- a/Libs/DICOM/Core/ctkDICOMJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMJob.cpp @@ -23,18 +23,20 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJob.h" #include "ctkDICOMJobResponseSet.h" -static ctkLogger logger ("org.commontk.dicom.DICOMJob"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMJob")) //------------------------------------------------------------------------------ // ctkDICOMJob methods //------------------------------------------------------------------------------ -ctkDICOMJob::ctkDICOMJob() +ctkDICOMJob::ctkDICOMJob(QObject* parent) + : Superclass(parent) { this->DICOMLevel = DICOMLevels::None; } @@ -43,7 +45,7 @@ ctkDICOMJob::ctkDICOMJob() ctkDICOMJob::~ctkDICOMJob() = default; //------------------------------------------------------------------------------ -void ctkDICOMJob::setDICOMLevel(const DICOMLevels& dicomLevel) +void ctkDICOMJob::setDICOMLevel(DICOMLevels dicomLevel) { this->DICOMLevel = dicomLevel; } diff --git a/Libs/DICOM/Core/ctkDICOMJob.h b/Libs/DICOM/Core/ctkDICOMJob.h index 763ae33dcc..2f2edd0b54 100644 --- a/Libs/DICOM/Core/ctkDICOMJob.h +++ b/Libs/DICOM/Core/ctkDICOMJob.h @@ -49,7 +49,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMJob : public ctkAbstractJob public: typedef ctkAbstractJob Superclass; - explicit ctkDICOMJob(); + explicit ctkDICOMJob(QObject* parent = nullptr); virtual ~ctkDICOMJob(); enum DICOMLevels @@ -60,11 +60,11 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMJob : public ctkAbstractJob Series, Instances }; - Q_ENUM(DICOMLevels) + Q_ENUM(DICOMLevels); ///@{ /// DICOM Level - void setDICOMLevel(const DICOMLevels& dicomLevel); + void setDICOMLevel(DICOMLevels dicomLevel); DICOMLevels dicomLevel() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMJobResponseSet.cpp b/Libs/DICOM/Core/ctkDICOMJobResponseSet.cpp index 865b5c0b48..a02e27f139 100644 --- a/Libs/DICOM/Core/ctkDICOMJobResponseSet.cpp +++ b/Libs/DICOM/Core/ctkDICOMJobResponseSet.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMItem.h" @@ -32,11 +33,11 @@ // DCMTK includes #include -static ctkLogger logger("org.commontk.dicom.DICOMJobResponseSet"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMJobResponseSet")) //------------------------------------------------------------------------------ -class ctkDICOMJobResponseSetPrivate : public QObject -{ +class ctkDICOMJobResponseSetPrivate : public QObject { + Q_OBJECT Q_DECLARE_PUBLIC(ctkDICOMJobResponseSet); protected: @@ -215,9 +216,9 @@ QSharedPointer ctkDICOMJobResponseSet::datasetShared() const void ctkDICOMJobResponseSet::setDatasets(const QMap& dcmItems, bool takeOwnership) { Q_D(ctkDICOMJobResponseSet); - for (const QString& key : dcmItems.keys()) + for (auto it = dcmItems.constBegin(); it != dcmItems.constEnd(); ++it) { - DcmItem* dcmItem = dcmItems.value(key); + DcmItem* dcmItem = it.value(); if (!dcmItem) { continue; @@ -227,7 +228,7 @@ void ctkDICOMJobResponseSet::setDatasets(const QMap& dcmItems QSharedPointer(new ctkDICOMItem); dataset->InitializeFromItem(dcmItem, takeOwnership); - d->Datasets.insert(key, dataset); + d->Datasets.insert(it.key(), dataset); } } @@ -237,15 +238,15 @@ QMap ctkDICOMJobResponseSet::datasets() const Q_D(const ctkDICOMJobResponseSet); QMap datasets; - for (const QString& key : d->Datasets.keys()) + for (auto it = d->Datasets.constBegin(); it != d->Datasets.constEnd(); ++it) { - QSharedPointer dcmItem = d->Datasets.value(key); + QSharedPointer dcmItem = it.value(); if (!dcmItem) { continue; } - datasets.insert(key, dcmItem.data()); + datasets.insert(it.key(), dcmItem.data()); } return datasets; @@ -276,16 +277,16 @@ ctkDICOMJobResponseSet* ctkDICOMJobResponseSet::clone() // Clone datasets QMap datasets = this->datasets(); - for (const QString& key : datasets.keys()) + for (auto it = datasets.constBegin(); it != datasets.constEnd(); ++it) { - ctkDICOMItem* dataset = datasets.value(key); + ctkDICOMItem* dataset = it.value(); if (!dataset) { continue; } QSharedPointer newDataset = QSharedPointer(dataset->Clone()); - newJobResponseSet->d_func()->Datasets.insert(key, newDataset); + newJobResponseSet->d_func()->Datasets.insert(it.key(), newDataset); } return newJobResponseSet; @@ -296,3 +297,5 @@ QVariant ctkDICOMJobResponseSet::toVariant() { return QVariant::fromValue(ctkDICOMJobDetail(*this)); } + +#include "ctkDICOMJobResponseSet.moc" diff --git a/Libs/DICOM/Core/ctkDICOMModalities.h b/Libs/DICOM/Core/ctkDICOMModalities.h index d20375d591..d141c05b0c 100644 --- a/Libs/DICOM/Core/ctkDICOMModalities.h +++ b/Libs/DICOM/Core/ctkDICOMModalities.h @@ -38,110 +38,122 @@ namespace ctkDICOMModalities { /// Complete list of all current (non-retired) DICOM modality codes - static const QStringList AllModalities = { - "Any", // Special filter value for "all modalities" - "AR", // Autorefraction - "ASMT", // Content Assessment Results - "AU", // Audio - "BDUS", // Bone Densitometry (ultrasound) - "BI", // Biomagnetic imaging - "BMD", // Bone Densitometry (X-Ray) - "CR", // Computed Radiography - "CT", // Computed Tomography - "DG", // Diaphanography - "DOC", // Document - "DX", // Digital Radiography - "ECG", // Electrocardiography - "EPS", // Cardiac Electrophysiology - "ES", // Endoscopy - "FID", // Fiducials - "GM", // General Microscopy - "HC", // Hard Copy - "HD", // Hemodynamic Waveform - "IO", // Intra-Oral Radiography - "IOL", // Intraocular Lens Data - "IVOCT", // Intravascular Optical Coherence Tomography - "IVUS", // Intravascular Ultrasound - "KER", // Keratometry - "KO", // Key Object Selection - "LEN", // Lensometry - "LS", // Laser surface scan - "MG", // Mammography - "MR", // Magnetic Resonance - "NM", // Nuclear Medicine - "OAM", // Ophthalmic Axial Measurements - "OCT", // Optical Coherence Tomography (non-Ophthalmic) - "OP", // Ophthalmic Photography - "OPM", // Ophthalmic Mapping - "OPT", // Ophthalmic Tomography - "OPV", // Ophthalmic Visual Field - "OSS", // Optical Surface Scan - "OT", // Other - "PLAN", // Plan - "PR", // Presentation State - "PT", // Positron emission tomography (PET) - "PX", // Panoramic X-Ray - "REG", // Registration - "RESP", // Respiratory Waveform - "RF", // Radio Fluoroscopy - "RG", // Radiographic imaging (conventional film/screen) - "RTDOSE", // Radiotherapy Dose - "RTIMAGE", // Radiotherapy Image - "RTPLAN", // Radiotherapy Plan - "RTRECORD", // RT Treatment Record - "RTSTRUCT", // Radiotherapy Structure Set - "RWV", // Real World Value Map - "SEG", // Segmentation - "SM", // Slide Microscopy - "SMR", // Stereometric Relationship - "SR", // SR Document - "SRF", // Subjective Refraction - "STAIN", // Automated Slide Stainer - "TG", // Thermography - "US", // Ultrasound - "VA", // Visual Acuity - "XA", // X-Ray Angiography - "XC" // External-camera Photography - }; + inline const QStringList& AllModalities() + { + static const QStringList list = { + "Any", // Special filter value for "all modalities" + "AR", // Autorefraction + "ASMT", // Content Assessment Results + "AU", // Audio + "BDUS", // Bone Densitometry (ultrasound) + "BI", // Biomagnetic imaging + "BMD", // Bone Densitometry (X-Ray) + "CR", // Computed Radiography + "CT", // Computed Tomography + "DG", // Diaphanography + "DOC", // Document + "DX", // Digital Radiography + "ECG", // Electrocardiography + "EPS", // Cardiac Electrophysiology + "ES", // Endoscopy + "FID", // Fiducials + "GM", // General Microscopy + "HC", // Hard Copy + "HD", // Hemodynamic Waveform + "IO", // Intra-Oral Radiography + "IOL", // Intraocular Lens Data + "IVOCT", // Intravascular Optical Coherence Tomography + "IVUS", // Intravascular Ultrasound + "KER", // Keratometry + "KO", // Key Object Selection + "LEN", // Lensometry + "LS", // Laser surface scan + "MG", // Mammography + "MR", // Magnetic Resonance + "NM", // Nuclear Medicine + "OAM", // Ophthalmic Axial Measurements + "OCT", // Optical Coherence Tomography (non-Ophthalmic) + "OP", // Ophthalmic Photography + "OPM", // Ophthalmic Mapping + "OPT", // Ophthalmic Tomography + "OPV", // Ophthalmic Visual Field + "OSS", // Optical Surface Scan + "OT", // Other + "PLAN", // Plan + "PR", // Presentation State + "PT", // Positron emission tomography (PET) + "PX", // Panoramic X-Ray + "REG", // Registration + "RESP", // Respiratory Waveform + "RF", // Radio Fluoroscopy + "RG", // Radiographic imaging (conventional film/screen) + "RTDOSE", // Radiotherapy Dose + "RTIMAGE", // Radiotherapy Image + "RTPLAN", // Radiotherapy Plan + "RTRECORD", // RT Treatment Record + "RTSTRUCT", // Radiotherapy Structure Set + "RWV", // Real World Value Map + "SEG", // Segmentation + "SM", // Slide Microscopy + "SMR", // Stereometric Relationship + "SR", // SR Document + "SRF", // Subjective Refraction + "STAIN", // Automated Slide Stainer + "TG", // Thermography + "US", // Ultrasound + "VA", // Visual Acuity + "XA", // X-Ray Angiography + "XC" // External-camera Photography + }; + return list; + } /// Modalities that should be excluded from thumbnail generation /// because they do not have meaningful image thumbnails - static const QStringList ExcludedFromThumbnailGeneration = { - "SEG", // Segmentation - "SR", // Structured Report - "RTSTRUCT", // Radiotherapy Structure Set - "RTPLAN", // Radiotherapy Plan - "RTDOSE", // Radiotherapy Dose - "RTRECORD", // RT Treatment Record - "PR", // Presentation State - "DOC", // Document - "REG", // Registration - "PLAN", // Plan - "FID", // Fiducials - "KO", // Key Object Selection - "RWV", // Real World Value Map - "AU", // Audio - "ECG", // Electrocardiography - "EPS", // Cardiac Electrophysiology - "HD", // Hemodynamic Waveform - "RESP" // Respiratory Waveform - }; + inline const QStringList& ExcludedFromThumbnailGeneration() + { + static const QStringList list = { + "SEG", // Segmentation + "SR", // Structured Report + "RTSTRUCT", // Radiotherapy Structure Set + "RTPLAN", // Radiotherapy Plan + "RTDOSE", // Radiotherapy Dose + "RTRECORD", // RT Treatment Record + "PR", // Presentation State + "DOC", // Document + "REG", // Registration + "PLAN", // Plan + "FID", // Fiducials + "KO", // Key Object Selection + "RWV", // Real World Value Map + "AU", // Audio + "ECG", // Electrocardiography + "EPS", // Cardiac Electrophysiology + "HD", // Hemodynamic Waveform + "RESP" // Respiratory Waveform + }; + return list; + } /// Common imaging modalities typically used for filtering in UI - static const QStringList CommonImagingModalities = { - "CR", // Computed Radiography - "CT", // Computed Tomography - "DX", // Digital Radiography - "MG", // Mammography - "MR", // Magnetic Resonance - "NM", // Nuclear Medicine - "PT", // Positron emission tomography - "RF", // Radio Fluoroscopy - "SEG", // Segmentation - "SR", // Structured Report - "US", // Ultrasound - "XA" // X-Ray Angiography - }; + inline const QStringList& CommonImagingModalities() + { + static const QStringList list = { + "CR", // Computed Radiography + "CT", // Computed Tomography + "DX", // Digital Radiography + "MG", // Mammography + "MR", // Magnetic Resonance + "NM", // Nuclear Medicine + "PT", // Positron emission tomography + "RF", // Radio Fluoroscopy + "SEG", // Segmentation + "SR", // Structured Report + "US", // Ultrasound + "XA" // X-Ray Angiography + }; + return list; + } } #endif // __ctkDICOMModalities_h diff --git a/Libs/DICOM/Core/ctkDICOMModel.cpp b/Libs/DICOM/Core/ctkDICOMModel.cpp index b03a60e517..9a200af40f 100644 --- a/Libs/DICOM/Core/ctkDICOMModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMModel.cpp @@ -38,8 +38,9 @@ // ctkDICOMCore includes #include "ctkDICOMModel.h" #include "ctkLogger.h" +#include -static ctkLogger logger ( "org.commontk.dicom.DICOMModel" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMModel")) struct Node; Q_DECLARE_METATYPE(Qt::CheckState); @@ -303,7 +304,7 @@ QString ctkDICOMModelPrivate::generateQuery(const QString& fields, const QString { res += QString(" ORDER BY ") + this->Sort; } - logger.debug ( "ctkDICOMModelPrivate::generateQuery: query is: " + res ); + logger->debug ( "ctkDICOMModelPrivate::generateQuery: query is: " + res ); return res; } @@ -324,7 +325,7 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const condition.append("PatientsName LIKE \"%" + this->SearchParameters["Name"].toString() + "%\""); } query = this->generateQuery("UID as UID, PatientsName as Name, PatientsAge as Age, PatientsBirthDate as Date, PatientID as \"Subject ID\"","Patients", condition); - logger.debug ( "ctkDICOMModelPrivate::updateQueries for Root: query is: " + query ); + logger->debug ( "ctkDICOMModelPrivate::updateQueries for Root: query is: " + query ); break; case ctkDICOMModel::PatientType: //query = QString("SELECT FROM Studies WHERE PatientsUID='%1'").arg(node->UID); @@ -343,7 +344,7 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const + "\' AND \'" + QDate::fromString(this->SearchParameters["EndDate"].toString(), "yyyyMMdd").toString("yyyy-MM-dd") + "\' ) AND "); } query = this->generateQuery("StudyInstanceUID as UID, StudyDescription as Name, ModalitiesInStudy as Scan, StudyDate as Date, AccessionNumber as Number, InstitutionName as Institution, ReferringPhysician as Referrer, PerformingPhysiciansName as Performer", "Studies", condition + QString("PatientsUID='%1'").arg(node->UID)); - logger.debug ( "ctkDICOMModelPrivate::updateQueries for Patient: query is: " + query ); + logger->debug ( "ctkDICOMModelPrivate::updateQueries for Patient: query is: " + query ); break; case ctkDICOMModel::StudyType: //query = QString("SELECT SeriesInstanceUID as UID, SeriesDescription as Name, BodyPartExamined as Scan, SeriesDate as Date, AcquisitionNumber as Number FROM Series WHERE StudyInstanceUID='%1'").arg(node->UID); @@ -352,7 +353,7 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const condition.append("SeriesDescription LIKE \"%" + this->SearchParameters["Series"].toString() + "%\"" + " AND "); } query = this->generateQuery("SeriesInstanceUID as UID, SeriesDescription as Name, Modality as Age, SeriesNumber as Scan, BodyPartExamined as \"Subject ID\", SeriesDate as Date, AcquisitionNumber as Number","Series",condition + QString("StudyInstanceUID='%1'").arg(node->UID)); - logger.debug ( "ctkDICOMModelPrivate::updateQueries for Study: query is: " + query ); + logger->debug ( "ctkDICOMModelPrivate::updateQueries for Study: query is: " + query ); break; case ctkDICOMModel::SeriesType: if(this->SearchParameters["ID"].toString() != "") @@ -361,7 +362,7 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const } //query = QString("SELECT Filename as UID, Filename as Name, SeriesInstanceUID as Date FROM Images WHERE SeriesInstanceUID='%1'").arg(node->UID); query = this->generateQuery("SOPInstanceUID as UID, Filename as Name, SeriesInstanceUID as Date", "Images", condition + QString("SeriesInstanceUID='%1'").arg(node->UID)); - logger.debug ( "ctkDICOMModelPrivate::updateQueries for Series: query is: " + query ); + logger->debug ( "ctkDICOMModelPrivate::updateQueries for Series: query is: " + query ); break; case ctkDICOMModel::ImageType: break; diff --git a/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp b/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp index f9d806bacc..c488a097e2 100644 --- a/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMPatientFilterProxyModel.cpp @@ -107,7 +107,12 @@ void ctkDICOMPatientFilterProxyModel::setDisplayMode(DisplayMode mode) d->DisplayMode = mode; // Trigger re-filtering +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif emit displayModeChanged(mode); } @@ -217,7 +222,12 @@ void ctkDICOMPatientFilterProxyModel::setWidgetWidth(int width) { d->WidgetWidth = width; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -236,7 +246,12 @@ void ctkDICOMPatientFilterProxyModel::setMaxTextWidth(int width) { d->MaxTextWidth = width; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -255,7 +270,12 @@ void ctkDICOMPatientFilterProxyModel::setIconSize(int size) { d->IconSize = size; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } @@ -274,7 +294,12 @@ void ctkDICOMPatientFilterProxyModel::setSpacing(int spacing) { d->Spacing = spacing; d->FirstOutOfBoundsRow = -1; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } } diff --git a/Libs/DICOM/Core/ctkDICOMPatientModel.cpp b/Libs/DICOM/Core/ctkDICOMPatientModel.cpp index 9d3e26841b..3a7732920c 100644 --- a/Libs/DICOM/Core/ctkDICOMPatientModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMPatientModel.cpp @@ -28,6 +28,7 @@ // CTK includes #include +#include // ctkDICOMCore includes #include "ctkDICOMPatientModel.h" @@ -41,7 +42,7 @@ #include "ctkDICOMJobResponseSet.h" #include "ctkDICOMJob.h" -static ctkLogger logger("org.commontk.DICOM.Core.ctkDICOMPatientModel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Core.ctkDICOMPatientModel")) //------------------------------------------------------------------------------ // Helper function for setDicomDatabase/setScheduler @@ -143,7 +144,7 @@ ctkDICOMPatientModelPrivate::ctkDICOMPatientModelPrivate(ctkDICOMPatientModel& o this->IsUpdating = false; this->QueryInProgress = false; - this->ModalityFilter = ctkDICOMModalities::AllModalities; + this->ModalityFilter = ctkDICOMModalities::AllModalities(); } //------------------------------------------------------------------------------ @@ -193,7 +194,7 @@ void ctkDICOMPatientModelPrivate::populatePatients() if (!this->DicomDatabase) { - logger.error("populatePatients: No database set"); + logger->error("populatePatients: No database set"); return; } @@ -224,7 +225,7 @@ void ctkDICOMPatientModelPrivate::populatePatients() // Create a set of existing patient items for quick lookup QSet existingPatientUIDs; - for (const PatientData& patient : this->Patients) + for (const PatientData& patient : std::as_const(this->Patients)) { existingPatientUIDs.insert(patient.patientUID); } @@ -360,7 +361,7 @@ void ctkDICOMPatientModelPrivate::populatePatients() // Update allowed servers from database for newly added patients if (!newPatients.isEmpty()) { - for (const PatientData& patientData : newPatients) + for (const PatientData& patientData : std::as_const(newPatients)) { q->updateAllowedServersFromDB(patientData.patientUID); } @@ -433,7 +434,7 @@ int ctkDICOMPatientModelPrivate::getSeriesCountForPatient(const QString& patient { return 0; } - QStringList studyInstanceUIDs = studyModel->studyInstanceUIDs(); + const QStringList studyInstanceUIDs = studyModel->studyInstanceUIDs(); int totalSeriesCount = 0; for (const QString& studyInstanceUID : studyInstanceUIDs) { @@ -458,7 +459,7 @@ int ctkDICOMPatientModelPrivate::getFilteredSeriesCountForPatient(const QString& { return 0; } - QStringList filteredStudyInstanceUIDs = studyModel->filteredStudyInstanceUIDs(); + const QStringList filteredStudyInstanceUIDs = studyModel->filteredStudyInstanceUIDs(); int totalFilteredSeriesCount = 0; for (const QString& studyInstanceUID : filteredStudyInstanceUIDs) { @@ -500,7 +501,7 @@ ctkDICOMStudyModel* ctkDICOMPatientModelPrivate::createStudyModel(const QString& if (!this->DicomDatabase) { - logger.warn("createStudyModel: No database set"); + logger->warn("createStudyModel: No database set"); return nullptr; } @@ -1072,7 +1073,7 @@ void ctkDICOMPatientModel::setDateFilter(DateType dateType) } //------------------------------------------------------------------------------ -void ctkDICOMPatientModel::setCustomDateRange(const QDate& startDate, const QDate& endDate) +void ctkDICOMPatientModel::setCustomDateRange(QDate startDate, QDate endDate) { Q_D(ctkDICOMPatientModel); if (d->CustomStartDate == startDate && d->CustomEndDate == endDate) @@ -1540,7 +1541,7 @@ bool ctkDICOMPatientModel::queryStudies(const QString &patientID) Q_D(ctkDICOMPatientModel); if (!d->Scheduler) { - logger.warn("queryStudies: No scheduler set"); + logger->warn("queryStudies: No scheduler set"); return false; } QString patientUID; @@ -1760,20 +1761,20 @@ void ctkDICOMPatientModel::updateAllowedServersFromDB(const QString& patientUID) if (!d->DicomDatabase) { - logger.error("updateAllowedServersFromDB: No database set"); + logger->error("updateAllowedServersFromDB: No database set"); return; } if (!d->Scheduler) { - logger.error("updateAllowedServersFromDB: No scheduler set"); + logger->error("updateAllowedServersFromDB: No scheduler set"); return; } int patientIndex = d->PatientUIDToIndex.value(patientUID, -1); if (patientIndex < 0 || patientIndex >= d->Patients.count()) { - logger.error("updateAllowedServersFromDB: Invalid patient item"); + logger->error("updateAllowedServersFromDB: Invalid patient item"); return; } @@ -1791,7 +1792,7 @@ void ctkDICOMPatientModel::updateAllowedServersFromDB(const QString& patientUID) QStringList denyList = connectionsInformation["deny"]; QStringList allowedServers; - for (const QString& connectionName : allActiveConnectionNames) + for (const QString& connectionName : std::as_const(allActiveConnectionNames)) { if (allowList.contains(connectionName)) { @@ -1829,20 +1830,20 @@ void ctkDICOMPatientModel::saveAllowedServersToDB(const QString& patientUID, con if (!d->DicomDatabase) { - logger.error("saveAllowedServersToDB: No database set"); + logger->error("saveAllowedServersToDB: No database set"); return; } if (!d->Scheduler) { - logger.error("saveAllowedServersToDB: No scheduler set"); + logger->error("saveAllowedServersToDB: No scheduler set"); return; } int patientIndex = d->PatientUIDToIndex.value(patientUID, -1); if (patientIndex < 0 || patientIndex >= d->Patients.count()) { - logger.error("saveAllowedServersToDB: Invalid patient item"); + logger->error("saveAllowedServersToDB: Invalid patient item"); return; } @@ -1853,7 +1854,7 @@ void ctkDICOMPatientModel::saveAllowedServersToDB(const QString& patientUID, con QStringList databaseAllowList; QStringList databaseDenyList; - for (const QString& connectionName : allActiveConnectionNames) + for (const QString& connectionName : std::as_const(allActiveConnectionNames)) { if (allowedServers.contains(connectionName)) { diff --git a/Libs/DICOM/Core/ctkDICOMPatientModel.h b/Libs/DICOM/Core/ctkDICOMPatientModel.h index d02559d8d2..13a993f153 100644 --- a/Libs/DICOM/Core/ctkDICOMPatientModel.h +++ b/Libs/DICOM/Core/ctkDICOMPatientModel.h @@ -161,7 +161,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMPatientModel : public QAbstractListModel void setDateFilter(DateType dateType); /// Set custom date range filter (when dateFilter is CustomRange) - void setCustomDateRange(const QDate& startDate, const QDate& endDate); + void setCustomDateRange(QDate startDate, QDate endDate); QDate customStartDate() const; QDate customEndDate() const; diff --git a/Libs/DICOM/Core/ctkDICOMQuery.cpp b/Libs/DICOM/Core/ctkDICOMQuery.cpp index def431c064..ed490547d7 100644 --- a/Libs/DICOM/Core/ctkDICOMQuery.cpp +++ b/Libs/DICOM/Core/ctkDICOMQuery.cpp @@ -56,22 +56,22 @@ // logging is filtered by threadID and reported in the GUI per job. dcmtk::log4cplus::Logger rootLogQuery = dcmtk::log4cplus::Logger::getRoot(); -#define LOG_AND_EMIT_DEBUG(debugStr, signal) \ +#define LOG_AND_EMIT_DEBUG(debugStr, emitSignal) \ { \ DCMTK_LOG4CPLUS_DEBUG_STR(rootLogQuery, debugStr.toStdString().c_str()); \ - emit signal(debugStr); \ + emitSignal(debugStr); \ } \ -#define LOG_AND_EMIT_WARN(warnStr, signal) \ +#define LOG_AND_EMIT_WARN(warnStr, emitSignal) \ { \ DCMTK_LOG4CPLUS_WARN_STR(rootLogQuery, warnStr.toStdString().c_str()); \ - emit signal(warnStr); \ + emitSignal(warnStr); \ } \ -#define LOG_AND_EMIT_ERROR(errorStr, signal) \ +#define LOG_AND_EMIT_ERROR(errorStr, emitSignal) \ { \ DCMTK_LOG4CPLUS_ERROR_STR(rootLogQuery, errorStr.toStdString().c_str()); \ - emit signal(errorStr); \ + emitSignal(errorStr); \ } \ //------------------------------------------------------------------------------ @@ -103,7 +103,7 @@ class ctkDICOMQuerySCUPrivate : public DcmSCU return EC_IllegalCall; } - LOG_AND_EMIT_DEBUG(QString("FIND RESPONSE"), this->query->debug); + LOG_AND_EMIT_DEBUG(QString("FIND RESPONSE"), emit this->query->debug); return this->DcmSCU::handleFINDResponse(presID, response, waitForNextResponse); }; }; @@ -240,15 +240,15 @@ CTK_SET_CPP(ctkDICOMQuery, const QString&, setCalledAETitle, CalledAETitle); CTK_GET_CPP(ctkDICOMQuery, QString, calledAETitle, CalledAETitle) CTK_SET_CPP(ctkDICOMQuery, const QString&, setHost, Host); CTK_GET_CPP(ctkDICOMQuery, QString, host, Host) -CTK_SET_CPP(ctkDICOMQuery, const int&, setPort, Port); +CTK_SET_CPP(ctkDICOMQuery, int, setPort, Port); CTK_GET_CPP(ctkDICOMQuery, int, port, Port) -CTK_SET_CPP(ctkDICOMQuery, const int&, setMaximumPatientsQuery, MaximumPatientsQuery); +CTK_SET_CPP(ctkDICOMQuery, int, setMaximumPatientsQuery, MaximumPatientsQuery); CTK_GET_CPP(ctkDICOMQuery, int, maximumPatientsQuery, MaximumPatientsQuery); CTK_SET_CPP(ctkDICOMQuery, const QString&, setJobUID, JobUID); CTK_GET_CPP(ctkDICOMQuery, QString, jobUID, JobUID) //----------------------------------------------------------------------------- -void ctkDICOMQuery::setConnectionTimeout(const int& timeout) +void ctkDICOMQuery::setConnectionTimeout(int timeout) { Q_D(ctkDICOMQuery); d->SCU->setACSETimeout(timeout); @@ -316,11 +316,11 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) Q_D(ctkDICOMQuery); if (database.database().isOpen()) { - LOG_AND_EMIT_DEBUG(QString("DB open in Query"), debug); + LOG_AND_EMIT_DEBUG(QString("DB open in Query"), emit debug); } else { - LOG_AND_EMIT_WARN(QString("DB not open in Query"), warn); + LOG_AND_EMIT_WARN(QString("DB not open in Query"), emit warn); } emit progress(0); @@ -374,11 +374,11 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) presentationContext = d->SCU->findPresentationContextID(UID_FINDStudyRootQueryRetrieveInformationModel, ""); if (presentationContext == 0) { - LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), error); + LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), emit error); } else { - LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), debug) + LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), emit debug) } emit progress(40); @@ -391,13 +391,13 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) OFCondition status = d->SCU->sendFINDRequest(presentationContext, d->QueryDcmDataset.data(), &responses); if (!status.good()) { - LOG_AND_EMIT_ERROR(QString("Find failed"), error); + LOG_AND_EMIT_ERROR(QString("Find failed"), emit error); d->releaseAssociation(); emit done(false); return false; } - LOG_AND_EMIT_DEBUG(QString("Find succeeded"), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded"), emit debug) emit progress(50); if (d->Canceled) @@ -445,14 +445,15 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) float progressRatio = 25. / d->StudyDatasets.count(); int i = 0; - foreach(QString studyInstanceUID, d->StudyDatasets.keys()) + for (auto it = d->StudyDatasets.constBegin(); it != d->StudyDatasets.constEnd(); ++it) { - DcmDataset *studyDataset = d->StudyDatasets.value(studyInstanceUID); + const QString& studyInstanceUID = it.key(); + DcmDataset *studyDataset = it.value(); DcmElement *patientName, *patientID; studyDataset->findAndGetElement(DCM_PatientName, patientName); studyDataset->findAndGetElement(DCM_PatientID, patientID); - LOG_AND_EMIT_DEBUG(QString("Starting Series C-FIND for Study: %1").arg(studyInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Starting Series C-FIND for Study: %1").arg(studyInstanceUID), emit debug) emit progress(50 + (progressRatio * i++)); if (d->Canceled) { @@ -481,7 +482,7 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) } } - LOG_AND_EMIT_DEBUG(QString("Find succeeded at Series level for Study: %1").arg(studyInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded at Series level for Study: %1").arg(studyInstanceUID), emit debug) emit progress(50 + (progressRatio * i++)); if (d->Canceled) { @@ -491,7 +492,7 @@ bool ctkDICOMQuery::query(ctkDICOMDatabase& database) } else { - LOG_AND_EMIT_ERROR(QString("Find at Series level failed for Study: %1").arg(studyInstanceUID), error) + LOG_AND_EMIT_ERROR(QString("Find at Series level failed for Study: %1").arg(studyInstanceUID), emit error) } emit progress(50 + (progressRatio * i++)); if (d->Canceled) @@ -554,11 +555,11 @@ bool ctkDICOMQuery::queryPatients() presentationContext = d->SCU->findPresentationContextID(UID_FINDStudyRootQueryRetrieveInformationModel, ""); if (presentationContext == 0) { - LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), error) + LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), emit error) } else { - LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), debug) + LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), emit debug) } emit progress(40); if (d->Canceled) @@ -567,7 +568,7 @@ bool ctkDICOMQuery::queryPatients() return false; } - LOG_AND_EMIT_DEBUG(QString("Starting patients C-FIND"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting patients C-FIND"), emit debug) emit progress(50); if (d->Canceled) { @@ -593,7 +594,7 @@ bool ctkDICOMQuery::queryPatients() if (contResponses > d->MaximumPatientsQuery) { LOG_AND_EMIT_WARN(QString("The number of responses of the query task at patients level " - "surpassed the maximum value of permitted results (i.e. %1).").arg(d->MaximumPatientsQuery), warn) + "surpassed the maximum value of permitted results (i.e. %1).").arg(d->MaximumPatientsQuery), emit warn) break; } DcmDataset *dataset = (*it)->m_dataset; @@ -607,17 +608,17 @@ bool ctkDICOMQuery::queryPatients() if (contResponses == 0) { - LOG_AND_EMIT_WARN(QString("The patients query provided no results. Please refine your filters."), warn) + LOG_AND_EMIT_WARN(QString("The patients query provided no results. Please refine your filters."), emit warn) } JobResponseSet->setDatasets(datasetsMap); d->JobResponseSets.append(JobResponseSet); - LOG_AND_EMIT_DEBUG(QString("Find succeeded at patient level"), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded at patient level"), emit debug) } else { - LOG_AND_EMIT_ERROR(QString("Find at patient level failed"), error) + LOG_AND_EMIT_ERROR(QString("Find at patient level failed"), emit error) } emit progress(100); @@ -693,11 +694,11 @@ bool ctkDICOMQuery::queryStudies(const QString& patientID) presentationContext = d->SCU->findPresentationContextID(UID_FINDStudyRootQueryRetrieveInformationModel, ""); if (presentationContext == 0) { - LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), error); + LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), emit error); } else { - LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), debug); + LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), emit debug); } emit progress(40); if (d->Canceled) @@ -706,7 +707,7 @@ bool ctkDICOMQuery::queryStudies(const QString& patientID) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting studies C-FIND for patient: %1").arg(patientID), debug) + LOG_AND_EMIT_DEBUG(QString("Starting studies C-FIND for patient: %1").arg(patientID), emit debug) emit progress(50); if (d->Canceled) { @@ -743,11 +744,11 @@ bool ctkDICOMQuery::queryStudies(const QString& patientID) JobResponseSet->setDatasets(datasetsMap); d->JobResponseSets.append(JobResponseSet); - LOG_AND_EMIT_DEBUG(QString("Find succeeded at study level for patient: %1").arg(patientID), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded at study level for patient: %1").arg(patientID), emit debug) } else { - LOG_AND_EMIT_ERROR(QString("Find at study level failed for patient: %1").arg(patientID), error) + LOG_AND_EMIT_ERROR(QString("Find at study level failed for patient: %1").arg(patientID), emit error) } emit progress(100); @@ -819,11 +820,11 @@ bool ctkDICOMQuery::querySeries(const QString& patientID, presentationContext = d->SCU->findPresentationContextID(UID_FINDStudyRootQueryRetrieveInformationModel, ""); if (presentationContext == 0) { - LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), error); + LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), emit error); } else { - LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), debug); + LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), emit debug); } emit progress(40); if (d->Canceled) @@ -832,7 +833,7 @@ bool ctkDICOMQuery::querySeries(const QString& patientID, return false; } - LOG_AND_EMIT_DEBUG(QString("Starting series C-FIND for study: %1").arg(studyInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Starting series C-FIND for study: %1").arg(studyInstanceUID), emit debug) emit progress(50); if (d->Canceled) { @@ -889,11 +890,11 @@ bool ctkDICOMQuery::querySeries(const QString& patientID, JobResponseSet->setDatasets(datasetsMap); d->JobResponseSets.append(JobResponseSet); - LOG_AND_EMIT_DEBUG(QString("Find succeeded at series level for study: %1").arg(studyInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded at series level for study: %1").arg(studyInstanceUID), emit debug) } else { - LOG_AND_EMIT_ERROR(QString("Find at series level failed for study: %1").arg(studyInstanceUID), error) + LOG_AND_EMIT_ERROR(QString("Find at series level failed for study: %1").arg(studyInstanceUID), emit error) } emit progress(100); @@ -963,11 +964,11 @@ bool ctkDICOMQuery::queryInstances(const QString& patientID, d->PresentationContext = d->SCU->findPresentationContextID(UID_FINDStudyRootQueryRetrieveInformationModel, ""); if (d->PresentationContext == 0) { - LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), error) + LOG_AND_EMIT_ERROR(QString("Failed to find acceptable presentation context"), emit error) } else { - LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), debug) + LOG_AND_EMIT_DEBUG(QString("Found useful presentation context"), emit debug) } emit progress(40); if (d->Canceled) @@ -976,7 +977,7 @@ bool ctkDICOMQuery::queryInstances(const QString& patientID, return false; } - LOG_AND_EMIT_DEBUG(QString("Starting sop instances C-FIND for series: %1").arg(seriesInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Starting sop instances C-FIND for series: %1").arg(seriesInstanceUID), emit debug) emit progress(50); if (d->Canceled) { @@ -1032,11 +1033,11 @@ bool ctkDICOMQuery::queryInstances(const QString& patientID, } } - LOG_AND_EMIT_DEBUG(QString("Find succeeded at sop instance level for series: %1").arg(seriesInstanceUID), debug) + LOG_AND_EMIT_DEBUG(QString("Find succeeded at sop instance level for series: %1").arg(seriesInstanceUID), emit debug) } else { - LOG_AND_EMIT_ERROR(QString("Find at sop instance level failed for series: %1").arg(seriesInstanceUID), error) + LOG_AND_EMIT_ERROR(QString("Find at sop instance level failed for series: %1").arg(seriesInstanceUID), emit error) } JobResponseSet->setDatasets(datasetsMap); @@ -1084,7 +1085,7 @@ bool ctkDICOMQuery::initializeSCU() d->SCU->setPeerHostName(OFString(this->host().toStdString().c_str())); d->SCU->setPeerPort(this->port()); - LOG_AND_EMIT_DEBUG(QString("Setting Transfer Syntaxes"), debug) + LOG_AND_EMIT_DEBUG(QString("Setting Transfer Syntaxes"), emit debug) emit progress(10); if (d->Canceled) { @@ -1099,11 +1100,11 @@ bool ctkDICOMQuery::initializeSCU() d->SCU->addPresentationContext(UID_FINDStudyRootQueryRetrieveInformationModel, transferSyntaxes); if (!d->SCU->initNetwork().good()) { - LOG_AND_EMIT_ERROR(QString("Error initializing the network"), error) + LOG_AND_EMIT_ERROR(QString("Error initializing the network"), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Negotiating Association"), debug) + LOG_AND_EMIT_DEBUG(QString("Negotiating Association"), emit debug) emit progress(20); if (d->Canceled) { @@ -1113,7 +1114,7 @@ bool ctkDICOMQuery::initializeSCU() OFCondition result = d->SCU->negotiateAssociation(); if (result.bad()) { - LOG_AND_EMIT_ERROR(QString("Error negotiating the association: %1").arg(result.text()), error) + LOG_AND_EMIT_ERROR(QString("Error negotiating the association: %1").arg(result.text()), emit error) return false; } @@ -1130,58 +1131,59 @@ QString ctkDICOMQuery::applyFilters(QMap filters) * Study Description, Modalities in Study, and Study Date are used. */ QString seriesDescription; - foreach(QString key, filters.keys()) + for (auto it = filters.constBegin(); it != filters.constEnd(); ++it) { - if (key == QString("Name") && !filters[key].toString().isEmpty()) + const QString& key = it.key(); + if (key == QString("Name") && !it.value().toString().isEmpty()) { // make the filter a wildcard in dicom style d->QueryDcmDataset->putAndInsertString(DCM_PatientName, - (QString("*") + filters[key].toString() + QString("*")).toLatin1().data()); + (QString("*") + it.value().toString() + QString("*")).toLatin1().data()); } - else if (key == QString("ID") && !filters[key].toString().isEmpty()) + else if (key == QString("ID") && !it.value().toString().isEmpty()) { // make the filter a wildcard in dicom style d->QueryDcmDataset->putAndInsertString(DCM_PatientID, - (QString("*") + filters[key].toString() + QString("*")).toLatin1().data()); + (QString("*") + it.value().toString() + QString("*")).toLatin1().data()); } - else if (key == QString("Study") && !filters[key].toString().isEmpty()) + else if (key == QString("Study") && !it.value().toString().isEmpty()) { // make the filter a wildcard in dicom style d->QueryDcmDataset->putAndInsertString(DCM_StudyDescription, - (QString("*") + filters[key].toString() + QString("*")).toLatin1().data()); + (QString("*") + it.value().toString() + QString("*")).toLatin1().data()); } - else if (key == QString("AccessionNumber") && !filters[key].toString().isEmpty()) + else if (key == QString("AccessionNumber") && !it.value().toString().isEmpty()) { // make the filter a wildcard in dicom style d->QueryDcmDataset->putAndInsertString(DCM_AccessionNumber, - (QString("*") + filters[key].toString() + QString("*")).toLatin1().data()); + (QString("*") + it.value().toString() + QString("*")).toLatin1().data()); } - else if (key == QString("Modalities") && filters[key].toStringList().count() != 0) + else if (key == QString("Modalities") && it.value().toStringList().count() != 0) { // make the filter be an "OR" of modalities using backslash (dicom-style) QString modalitySearch(""); - foreach (const QString& modality, filters[key].toStringList()) + foreach (const QString& modality, it.value().toStringList()) { modalitySearch += modality + QString("\\"); } modalitySearch.chop(1); // remove final backslash - LOG_AND_EMIT_DEBUG(QString("modalityInStudySearch %1").arg(modalitySearch), debug) + LOG_AND_EMIT_DEBUG(QString("modalityInStudySearch %1").arg(modalitySearch), emit debug) d->QueryDcmDataset->putAndInsertString(DCM_ModalitiesInStudy, modalitySearch.toLatin1().data()); } // Remember Series Description for later series query if we go through the keys now - else if (key == QString("Series") && !filters[key].toString().isEmpty()) + else if (key == QString("Series") && !it.value().toString().isEmpty()) { // make the filter a wildcard in dicom style - seriesDescription = "*" + filters[key].toString() + "*"; + seriesDescription = "*" + it.value().toString() + "*"; } else { - LOG_AND_EMIT_DEBUG(QString("Ignoring unknown search key: %1").arg(key), debug) + LOG_AND_EMIT_DEBUG(QString("Ignoring unknown search key: %1").arg(key), emit debug) } } - if (filters.keys().contains("StartDate") && filters.keys().contains("EndDate") && + if (filters.contains("StartDate") && filters.contains("EndDate") && !filters["StartDate"].toString().isEmpty() && !filters["EndDate"].toString().isEmpty()) { QString dateRange = filters["StartDate"].toString() + @@ -1189,7 +1191,7 @@ QString ctkDICOMQuery::applyFilters(QMap filters) filters["EndDate"].toString(); d->QueryDcmDataset->putAndInsertString (DCM_StudyDate, dateRange.toLatin1().data()); - LOG_AND_EMIT_DEBUG(QString("Query on study date: %1").arg(dateRange), debug) + LOG_AND_EMIT_DEBUG(QString("Query on study date: %1").arg(dateRange), emit debug) } emit progress(30); diff --git a/Libs/DICOM/Core/ctkDICOMQuery.h b/Libs/DICOM/Core/ctkDICOMQuery.h index 07ed6a436e..aa6afdd43e 100644 --- a/Libs/DICOM/Core/ctkDICOMQuery.h +++ b/Libs/DICOM/Core/ctkDICOMQuery.h @@ -80,20 +80,20 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMQuery : public QObject /// Specify a port for the packet headers. /// \a port ranges from 0 to 65535. /// 0 by default. - void setPort(const int& port); + void setPort(int port); int port() const; ///@} ///@{ /// connection timeout, default 10 sec. - void setConnectionTimeout(const int& timeout); + void setConnectionTimeout(int timeout); int connectionTimeout() const; ///@} ///@{ /// maximum number of responses allowed in one query /// when query is at Patient level. Default is 25. - void setMaximumPatientsQuery(const int& maximumPatientsQuery); + void setMaximumPatientsQuery(int maximumPatientsQuery); int maximumPatientsQuery() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMQueryJob.cpp b/Libs/DICOM/Core/ctkDICOMQueryJob.cpp index e9cb50bfc0..dc9b1231da 100644 --- a/Libs/DICOM/Core/ctkDICOMQueryJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMQueryJob.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" // For ctkDICOMJobDetail @@ -30,7 +31,7 @@ #include "ctkDICOMQueryWorker.h" #include "ctkDICOMServer.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMQueryJob" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMQueryJob")) //------------------------------------------------------------------------------ // ctkDICOMQueryJobPrivate methods @@ -57,8 +58,8 @@ ctkDICOMQueryJobPrivate::~ctkDICOMQueryJobPrivate() // ctkDICOMQueryJob methods //------------------------------------------------------------------------------ -ctkDICOMQueryJob::ctkDICOMQueryJob() - : d_ptr(new ctkDICOMQueryJobPrivate(this)) +ctkDICOMQueryJob::ctkDICOMQueryJob(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMQueryJobPrivate(this)) { } @@ -72,7 +73,7 @@ ctkDICOMQueryJob::ctkDICOMQueryJob(ctkDICOMQueryJobPrivate* pimpl) } //------------------------------------------------------------------------------ -CTK_SET_CPP(ctkDICOMQueryJob, const int&, setMaximumPatientsQuery, MaximumPatientsQuery); +CTK_SET_CPP(ctkDICOMQueryJob, int, setMaximumPatientsQuery, MaximumPatientsQuery); CTK_GET_CPP(ctkDICOMQueryJob, int, maximumPatientsQuery, MaximumPatientsQuery) //---------------------------------------------------------------------------- @@ -114,9 +115,7 @@ QString ctkDICOMQueryJob::loggerReport(const QString& status) fullLogMsg = QString("ctkDICOMQueryJob: query job at patients level %1.\n" "JobUID: %2\n" "Server: %3\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()); + .arg(status, this->jobUID(), this->server()->connectionName()); logMsg = QString("Query job at patients level %1.\n") .arg(status); break; @@ -125,10 +124,7 @@ QString ctkDICOMQueryJob::loggerReport(const QString& status) "JobUID: %2\n" "Server: %3\n" "PatientID: %4\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID()); logMsg = QString("Query job at studies level %1.\n") .arg(status); break; @@ -138,11 +134,7 @@ QString ctkDICOMQueryJob::loggerReport(const QString& status) "Server: %3\n" "PatientID: %4\n" "StudyInstanceUID: %5\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()) - .arg(this->studyInstanceUID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID(), this->studyInstanceUID()); logMsg = QString("Query job at studies level %1.\n") .arg(status); break; @@ -153,12 +145,7 @@ QString ctkDICOMQueryJob::loggerReport(const QString& status) "PatientID: %4\n" "StudyInstanceUID: %5\n" "SeriesInstanceUID: %6\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()) - .arg(this->studyInstanceUID()) - .arg(this->seriesInstanceUID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID(), this->studyInstanceUID(), this->seriesInstanceUID()); logMsg = QString("Query job at instances level %1.\n") .arg(status); break; diff --git a/Libs/DICOM/Core/ctkDICOMQueryJob.h b/Libs/DICOM/Core/ctkDICOMQueryJob.h index c3d5566941..263a56c0f1 100644 --- a/Libs/DICOM/Core/ctkDICOMQueryJob.h +++ b/Libs/DICOM/Core/ctkDICOMQueryJob.h @@ -47,7 +47,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMQueryJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMQueryJob(); + explicit ctkDICOMQueryJob(QObject* parent = nullptr); virtual ~ctkDICOMQueryJob(); ///@{ @@ -74,7 +74,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMQueryJob : public ctkDICOMJob ///@{ /// maximum number of responses allowed in one query /// when query is at Patient level. Default is 25. - void setMaximumPatientsQuery(const int& maximumPatientsQuery); + void setMaximumPatientsQuery(int maximumPatientsQuery); int maximumPatientsQuery() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMQueryWorker.cpp b/Libs/DICOM/Core/ctkDICOMQueryWorker.cpp index 31de0665d6..cb8d670e0d 100644 --- a/Libs/DICOM/Core/ctkDICOMQueryWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMQueryWorker.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMQueryWorker_p.h" @@ -33,7 +34,7 @@ // DCMTK includes #include -static ctkLogger logger ("org.commontk.dicom.DICOMQueryWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMQueryWorker")) //------------------------------------------------------------------------------ // ctkDICOMQueryWorkerPrivate methods @@ -80,8 +81,8 @@ void ctkDICOMQueryWorkerPrivate::setQueryParameters() // ctkDICOMQueryWorker methods //------------------------------------------------------------------------------ -ctkDICOMQueryWorker::ctkDICOMQueryWorker() - : d_ptr(new ctkDICOMQueryWorkerPrivate(this)) +ctkDICOMQueryWorker::ctkDICOMQueryWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMQueryWorkerPrivate(this)) { } @@ -126,14 +127,14 @@ void ctkDICOMQueryWorker::run() queryJob->setStatus(ctkAbstractJob::JobStatus::Running); - logger.debug(QString("ctkDICOMQueryWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMQueryWorker : running job %1 in thread %2.\n") .arg(queryJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); switch (queryJob->dicomLevel()) { case ctkDICOMJob::DICOMLevels::None: - logger.warn("ctkDICOMQueryWorker : DICOMLevels was not set."); + logger->warn("ctkDICOMQueryWorker : DICOMLevels was not set."); this->Job->setStatus(ctkAbstractJob::JobStatus::Finished); return; case ctkDICOMJob::DICOMLevels::Patients: diff --git a/Libs/DICOM/Core/ctkDICOMQueryWorker.h b/Libs/DICOM/Core/ctkDICOMQueryWorker.h index d9edde7121..dd30f84346 100644 --- a/Libs/DICOM/Core/ctkDICOMQueryWorker.h +++ b/Libs/DICOM/Core/ctkDICOMQueryWorker.h @@ -42,7 +42,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMQueryWorker : public ctkAbstractWorker public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMQueryWorker(); + explicit ctkDICOMQueryWorker(QObject* parent = nullptr); virtual ~ctkDICOMQueryWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Core/ctkDICOMRetrieve.cpp b/Libs/DICOM/Core/ctkDICOMRetrieve.cpp index c90478fbe4..62ea37da3a 100644 --- a/Libs/DICOM/Core/ctkDICOMRetrieve.cpp +++ b/Libs/DICOM/Core/ctkDICOMRetrieve.cpp @@ -53,19 +53,19 @@ dcmtk::log4cplus::Logger rootLogRetrieve = dcmtk::log4cplus::Logger::getRoot(); #define LOG_AND_EMIT_DEBUG(debugStr, signal) \ { \ DCMTK_LOG4CPLUS_DEBUG_STR(rootLogRetrieve, debugStr.toStdString().c_str()); \ - emit signal(debugStr); \ + signal(debugStr); \ } \ #define LOG_AND_EMIT_WARN(warnStr, signal) \ { \ DCMTK_LOG4CPLUS_WARN_STR(rootLogRetrieve, warnStr.toStdString().c_str()); \ - emit signal(warnStr); \ + signal(warnStr); \ } \ #define LOG_AND_EMIT_ERROR(errorStr, signal) \ { \ DCMTK_LOG4CPLUS_ERROR_STR(rootLogRetrieve, errorStr.toStdString().c_str()); \ - emit signal(errorStr); \ + signal(errorStr); \ } \ //------------------------------------------------------------------------------ @@ -211,6 +211,7 @@ class ctkDICOMRetrieveSCUPrivate : public DcmSCU //------------------------------------------------------------------------------ class ctkDICOMRetrievePrivate: public QObject { + Q_OBJECT Q_DECLARE_PUBLIC( ctkDICOMRetrieve ); protected: @@ -580,10 +581,7 @@ bool ctkDICOMRetrievePrivate::move(const QString& patientID, "%2 images transferred, and\n" "%3 images transferred with warning, and\n" "%4 images transfers failed") - .arg(studyInstanceUID) - .arg(QString::number(static_cast((*it)->m_numberOfCompletedSubops))) - .arg(QString::number(static_cast((*it)->m_numberOfWarningSubops))) - .arg(QString::number(static_cast((*it)->m_numberOfFailedSubops))), + .arg(studyInstanceUID, QString::number(static_cast((*it)->m_numberOfCompletedSubops)), QString::number(static_cast((*it)->m_numberOfWarningSubops)), QString::number(static_cast((*it)->m_numberOfFailedSubops))), q->debug) if (this->Canceled) @@ -772,10 +770,7 @@ bool ctkDICOMRetrievePrivate::get(const QString& patientID, "%2 images transferred, and\n" "%3 images transferred with warning, and\n" "%4 images transfers failed") - .arg(studyInstanceUID) - .arg(QString::number(static_cast((*it)->m_numberOfCompletedSubops))) - .arg(QString::number(static_cast((*it)->m_numberOfWarningSubops))) - .arg(QString::number(static_cast((*it)->m_numberOfFailedSubops))), + .arg(studyInstanceUID, QString::number(static_cast((*it)->m_numberOfCompletedSubops)), QString::number(static_cast((*it)->m_numberOfWarningSubops)), QString::number(static_cast((*it)->m_numberOfFailedSubops))), q->debug) emit q->progress(100); @@ -1011,11 +1006,11 @@ bool ctkDICOMRetrieve::moveStudy(const QString& studyInstanceUID, if (studyInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive study: Study Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive study: Study Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting moveStudy"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting moveStudy"), emit debug) return d->move(patientID, studyInstanceUID, "", "", ctkDICOMRetrieve::RetrieveStudy); } @@ -1027,11 +1022,11 @@ bool ctkDICOMRetrieve::getStudy(const QString& studyInstanceUID, if (studyInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive study: Study Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive study: Study Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting getStudy"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting getStudy"), emit debug) return d->get(patientID, studyInstanceUID, "", "", ctkDICOMRetrieve::RetrieveStudy); } @@ -1045,11 +1040,11 @@ bool ctkDICOMRetrieve::moveSeries(const QString& studyInstanceUID, if (studyInstanceUID.isEmpty() || seriesInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive series: Study or Series Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive series: Study or Series Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting moveSeries"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting moveSeries"), emit debug) return d->move(patientID, studyInstanceUID, seriesInstanceUID, "", ctkDICOMRetrieve::RetrieveSeries); } @@ -1063,11 +1058,11 @@ bool ctkDICOMRetrieve::getSeries(const QString& studyInstanceUID, if (studyInstanceUID.isEmpty() || seriesInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive series: Study or Series Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive series: Study or Series Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting getSeries"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting getSeries"), emit debug) return d->get(patientID, studyInstanceUID, seriesInstanceUID, "", ctkDICOMRetrieve::RetrieveSeries); } @@ -1083,11 +1078,11 @@ bool ctkDICOMRetrieve::moveSOPInstance(const QString& studyInstanceUID, seriesInstanceUID.isEmpty() || SOPInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive SOPInstance: Study, Series or SOP Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive SOPInstance: Study, Series or SOP Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting moveSOPInstance"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting moveSOPInstance"), emit debug) return d->move(patientID, studyInstanceUID, seriesInstanceUID, SOPInstanceUID, ctkDICOMRetrieve::RetrieveSOPInstance); } @@ -1103,11 +1098,11 @@ bool ctkDICOMRetrieve::getSOPInstance(const QString& studyInstanceUID, seriesInstanceUID.isEmpty() || SOPInstanceUID.isEmpty()) { - LOG_AND_EMIT_ERROR(QString("Cannot receive SOPInstance: Study, Series or SOP Instance UID empty."), error) + LOG_AND_EMIT_ERROR(QString("Cannot receive SOPInstance: Study, Series or SOP Instance UID empty."), emit error) return false; } - LOG_AND_EMIT_DEBUG(QString("Starting getSOPInstance"), debug) + LOG_AND_EMIT_DEBUG(QString("Starting getSOPInstance"), emit debug) return d->get(patientID, studyInstanceUID, seriesInstanceUID, SOPInstanceUID, ctkDICOMRetrieve::RetrieveSOPInstance); } @@ -1130,3 +1125,5 @@ void ctkDICOMRetrieve::releaseAssociation() Q_D(ctkDICOMRetrieve); d->releaseAssociation(); } + +#include "ctkDICOMRetrieve.moc" diff --git a/Libs/DICOM/Core/ctkDICOMRetrieveJob.cpp b/Libs/DICOM/Core/ctkDICOMRetrieveJob.cpp index bc16767ff5..b04d7955d6 100644 --- a/Libs/DICOM/Core/ctkDICOMRetrieveJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMRetrieveJob.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" // For ctkDICOMJobDetail @@ -30,7 +31,7 @@ #include "ctkDICOMRetrieveWorker.h" #include "ctkDICOMServer.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMRetrieveJob" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMRetrieveJob")) //------------------------------------------------------------------------------ // ctkDICOMRetrieveJobPrivate methods @@ -56,8 +57,8 @@ ctkDICOMRetrieveJobPrivate::~ctkDICOMRetrieveJobPrivate() // ctkDICOMRetrieveJob methods //------------------------------------------------------------------------------ -ctkDICOMRetrieveJob::ctkDICOMRetrieveJob() - : d_ptr(new ctkDICOMRetrieveJobPrivate(this)) +ctkDICOMRetrieveJob::ctkDICOMRetrieveJob(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMRetrieveJobPrivate(this)) { } @@ -100,10 +101,7 @@ QString ctkDICOMRetrieveJob::loggerReport(const QString& status) "JobUID: %2\n" "Server: %3\n" "PatientID: %4\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID()); logMsg = QString("Retrieve task at patients level %1.\n") .arg(status); break; @@ -113,11 +111,7 @@ QString ctkDICOMRetrieveJob::loggerReport(const QString& status) "Server: %3\n" "PatientID: %4\n" "StudyInstanceUID: %5\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()) - .arg(this->studyInstanceUID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID(), this->studyInstanceUID()); logMsg = QString("Retrieve task at studies level %1.\n") .arg(status); break; @@ -128,12 +122,7 @@ QString ctkDICOMRetrieveJob::loggerReport(const QString& status) "PatientID: %4\n" "StudyInstanceUID: %5\n" "SeriesInstanceUID: %6\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()) - .arg(this->studyInstanceUID()) - .arg(this->seriesInstanceUID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID(), this->studyInstanceUID(), this->seriesInstanceUID()); logMsg = QString("Retrieve task at series level %1.\n") .arg(status); break; @@ -145,13 +134,7 @@ QString ctkDICOMRetrieveJob::loggerReport(const QString& status) "StudyInstanceUID: %5\n" "SeriesInstanceUID: %6\n" "SOPInstanceUID: %7\n") - .arg(status) - .arg(this->jobUID()) - .arg(this->server()->connectionName()) - .arg(this->patientID()) - .arg(this->studyInstanceUID()) - .arg(this->seriesInstanceUID()) - .arg(this->sopInstanceUID()); + .arg(status, this->jobUID(), this->server()->connectionName(), this->patientID(), this->studyInstanceUID(), this->seriesInstanceUID(), this->sopInstanceUID()); logMsg = QString("Retrieve task at instances level %1.\n") .arg(status); break; diff --git a/Libs/DICOM/Core/ctkDICOMRetrieveJob.h b/Libs/DICOM/Core/ctkDICOMRetrieveJob.h index 661705458c..dcf5ae2227 100644 --- a/Libs/DICOM/Core/ctkDICOMRetrieveJob.h +++ b/Libs/DICOM/Core/ctkDICOMRetrieveJob.h @@ -44,7 +44,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMRetrieveJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMRetrieveJob(); + explicit ctkDICOMRetrieveJob(QObject* parent = nullptr); virtual ~ctkDICOMRetrieveJob(); ///@{ diff --git a/Libs/DICOM/Core/ctkDICOMRetrieveWorker.cpp b/Libs/DICOM/Core/ctkDICOMRetrieveWorker.cpp index d0bdd92b27..8d438766a1 100644 --- a/Libs/DICOM/Core/ctkDICOMRetrieveWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMRetrieveWorker.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" @@ -34,7 +35,7 @@ // DCMTK includes #include -static ctkLogger logger ("org.commontk.dicom.DICOMRetrieveWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMRetrieveWorker")) //------------------------------------------------------------------------------ // ctkDICOMRetrieveWorkerPrivate methods @@ -100,8 +101,8 @@ void ctkDICOMRetrieveWorkerPrivate::setRetrieveParameters() // ctkDICOMRetrieveWorker methods //------------------------------------------------------------------------------ -ctkDICOMRetrieveWorker::ctkDICOMRetrieveWorker() - : d_ptr(new ctkDICOMRetrieveWorkerPrivate(this)) +ctkDICOMRetrieveWorker::ctkDICOMRetrieveWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMRetrieveWorkerPrivate(this)) { } @@ -148,7 +149,7 @@ void ctkDICOMRetrieveWorker::run() retrieveJob->setStatus(ctkAbstractJob::JobStatus::Running); - logger.debug(QString("ctkDICOMRetrieveWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMRetrieveWorker : running job %1 in thread %2.\n") .arg(retrieveJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); @@ -158,11 +159,11 @@ void ctkDICOMRetrieveWorker::run() switch(retrieveJob->dicomLevel()) { case ctkDICOMJob::DICOMLevels::None: - logger.warn("ctkDICOMRetrieveWorker : DICOMLevels was not set."); + logger->warn("ctkDICOMRetrieveWorker : DICOMLevels was not set."); this->Job->setStatus(ctkAbstractJob::JobStatus::Finished); return; case ctkDICOMJob::DICOMLevels::Patients: - logger.warn("ctkDICOMRetrieveWorker : get operation for a full patient is not implemented."); + logger->warn("ctkDICOMRetrieveWorker : get operation for a full patient is not implemented."); this->Job->setStatus(ctkAbstractJob::JobStatus::Finished); return; case ctkDICOMJob::DICOMLevels::Studies: @@ -198,11 +199,11 @@ void ctkDICOMRetrieveWorker::run() switch(retrieveJob->dicomLevel()) { case ctkDICOMJob::DICOMLevels::None: - logger.warn("ctkDICOMRetrieveWorker : DICOMLevels was not set."); + logger->warn("ctkDICOMRetrieveWorker : DICOMLevels was not set."); this->Job->setStatus(ctkAbstractJob::JobStatus::Finished); return; case ctkDICOMJob::DICOMLevels::Patients: - logger.warn("ctkDICOMRetrieveTask : move operation for a full patient is not implemented."); + logger->warn("ctkDICOMRetrieveTask : move operation for a full patient is not implemented."); retrieveJob->setStatus(ctkAbstractJob::JobStatus::Finished); return; case ctkDICOMJob::DICOMLevels::Studies: diff --git a/Libs/DICOM/Core/ctkDICOMRetrieveWorker.h b/Libs/DICOM/Core/ctkDICOMRetrieveWorker.h index 68ba2ef129..15e3be356a 100644 --- a/Libs/DICOM/Core/ctkDICOMRetrieveWorker.h +++ b/Libs/DICOM/Core/ctkDICOMRetrieveWorker.h @@ -41,7 +41,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMRetrieveWorker : public ctkAbstractWorker public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMRetrieveWorker(); + explicit ctkDICOMRetrieveWorker(QObject* parent = nullptr); virtual ~ctkDICOMRetrieveWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Core/ctkDICOMScheduler.cpp b/Libs/DICOM/Core/ctkDICOMScheduler.cpp index 32cce1e90e..df46f903ae 100644 --- a/Libs/DICOM/Core/ctkDICOMScheduler.cpp +++ b/Libs/DICOM/Core/ctkDICOMScheduler.cpp @@ -23,7 +23,7 @@ // ctkCore includes #include -#include +#include #include // ctkDICOMCore includes @@ -35,7 +35,6 @@ #include "ctkDICOMQueryJob.h" #include "ctkDICOMRetrieveJob.h" #include "ctkDICOMScheduler.h" -#include "ctkDICOMScheduler_p.h" #include "ctkDICOMServer.h" #include "ctkDICOMStorageListenerJob.h" #include "ctkDICOMUtil.h" @@ -46,7 +45,7 @@ #include #include "dcmtk/oflog/spi/logevent.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMScheduler" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMScheduler")) //------------------------------------------------------------------------------ // JobAppender class (custom DCMTK Appender) @@ -63,7 +62,7 @@ class ctkDICOMJobsAppender : public dcmtk::log4cplus::Appender { return this->MessagesPerThread; } - QString messageByThreadID(QString threadID) + QString messageByThreadID(const QString& threadID) { if (!this->MessagesPerThread.contains(threadID)) { @@ -481,7 +480,7 @@ void ctkDICOMScheduler::generateThumbnail(const QString &originalFilePath, Q_D(ctkDICOMScheduler); // Do not generate thumbnails for modalities that do not have meaningful image thumbnails - if (ctkDICOMModalities::ExcludedFromThumbnailGeneration.contains(modality)) + if (ctkDICOMModalities::ExcludedFromThumbnailGeneration().contains(modality)) { // Do not generate thumbnails for excluded modalities // To Do: refactor the ctkDICOMThumbnailGenerator to handle properly these cases @@ -826,7 +825,7 @@ void ctkDICOMScheduler::waitForFinishByDICOMUIDs(const QStringList& patientIDs, if (numberOfInputLists == 0) { - logger.warn("ctkDICOMScheduler::waitForFinishByDICOMUIDs failed: all the provided lists with UIDs are empty."); + logger->warn("ctkDICOMScheduler::waitForFinishByDICOMUIDs failed: all the provided lists with UIDs are empty."); return; } @@ -879,7 +878,7 @@ QList> ctkDICOMScheduler::getJobsByDICOMUIDs(cons const QStringList &studyInstanceUIDs, const QStringList &seriesInstanceUIDs, const QStringList &sopInstanceUIDs, - QList statusFilters) + const QList& statusFilters) { Q_D(ctkDICOMScheduler); @@ -902,7 +901,7 @@ QList> ctkDICOMScheduler::getJobsByDICOMUIDs(cons if (numberOfInputLists == 0) { - logger.warn("ctkDICOMScheduler::getJobsByDICOMUIDs failed: all the provided lists with UIDs are empty."); + logger->warn("ctkDICOMScheduler::getJobsByDICOMUIDs failed: all the provided lists with UIDs are empty."); return jobs; } @@ -920,7 +919,7 @@ QList> ctkDICOMScheduler::getJobsByDICOMUIDs(cons ctkDICOMJob* dicomJob = qobject_cast(job.data()); if (!dicomJob) { - logger.debug("ctkDICOMScheduler::getJobsByDICOMUIDs: unexpected type of job."); + logger->debug("ctkDICOMScheduler::getJobsByDICOMUIDs: unexpected type of job."); continue; } @@ -967,7 +966,7 @@ void ctkDICOMScheduler::stopJobsByDICOMUIDs(const QStringList& patientIDs, if (numberOfInputLists == 0) { - logger.debug("ctkDICOMScheduler::stopJobsByDICOMUIDs: all the provided lists with UIDs are empty."); + logger->debug("ctkDICOMScheduler::stopJobsByDICOMUIDs: all the provided lists with UIDs are empty."); return; } @@ -987,7 +986,7 @@ void ctkDICOMScheduler::stopJobsByDICOMUIDs(const QStringList& patientIDs, ctkDICOMJob* dicomJob = qobject_cast(job.data()); if (!dicomJob) { - logger.debug("ctkDICOMScheduler::stopJobsByDICOMUIDs: unexpected type of job."); + logger->debug("ctkDICOMScheduler::stopJobsByDICOMUIDs: unexpected type of job."); continue; } @@ -1029,7 +1028,7 @@ void ctkDICOMScheduler::raiseJobsPriorityForSeries(const QStringList& selectedSe ctkDICOMJob* dicomJob = qobject_cast(job.data()); if (!dicomJob) { - logger.debug("ctkDICOMScheduler::raiseJobsPriorityForSeries: unexpected type of job."); + logger->debug("ctkDICOMScheduler::raiseJobsPriorityForSeries: unexpected type of job."); continue; } @@ -1184,5 +1183,4 @@ void ctkDICOMScheduler::onJobFailed(ctkAbstractJob* job) ctkJobScheduler::onJobFailed(job); } -#include "moc_ctkDICOMScheduler_p.cpp" #include "moc_ctkDICOMScheduler.cpp" diff --git a/Libs/DICOM/Core/ctkDICOMScheduler.h b/Libs/DICOM/Core/ctkDICOMScheduler.h index ed5a389aa0..64e22f52d6 100644 --- a/Libs/DICOM/Core/ctkDICOMScheduler.h +++ b/Libs/DICOM/Core/ctkDICOMScheduler.h @@ -27,6 +27,7 @@ // Qt includes #include #include +#include // ctkCore includes #include @@ -37,12 +38,12 @@ #include "ctkDICOMDatabase.h" class ctkDICOMJob; class ctkDICOMIndexer; -class ctkDICOMSchedulerPrivate; class ctkDICOMServer; class ctkDICOMStorageListenerJob; struct ctkDICOMJobDetail; /// \ingroup DICOM_Core +class ctkDICOMSchedulerPrivate; // Forward decalaration needed within this file class CTK_DICOM_CORE_EXPORT ctkDICOMScheduler : public ctkJobScheduler { Q_OBJECT @@ -197,7 +198,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMScheduler : public ctkJobScheduler const QStringList& studyInstanceUIDs = {}, const QStringList& seriesInstanceUIDs = {}, const QStringList& sopInstanceUIDs = {}, - QList statusFilters = + const QList& statusFilters = { ctkAbstractJob::JobStatus::Initialized, ctkAbstractJob::JobStatus::Queued, @@ -239,4 +240,35 @@ public Q_SLOTS: Q_DISABLE_COPY(ctkDICOMScheduler); }; +//------------------------------------------------------------------------------ +class ctkDICOMSchedulerPrivate : public ctkJobSchedulerPrivate +{ + Q_OBJECT + Q_DECLARE_PUBLIC(ctkDICOMScheduler); + +public: + ctkDICOMSchedulerPrivate(ctkDICOMScheduler& obj); + virtual ~ctkDICOMSchedulerPrivate(); + + bool isServerAllowed(ctkDICOMServer* server, const QStringList& allowedSeversForPatient); + ctkDICOMServer* getServerFromProxyServersByConnectionName(const QString&); + bool isJobDuplicate(ctkDICOMJob* job); + + QSharedPointer DicomDatabase; + QList> Servers; + QMap ServersConnections; + QMap Filters; + + int MaximumPatientsQuery{25}; + + dcmtk::log4cplus::SharedAppenderPtr Appender; +}; + +//------------------------------------------------------------------------------ +struct ThumbnailUID +{ + QString studyInstanceUID; + QString seriesInstanceUID; + QString SOPInstanceUID; +} ; #endif diff --git a/Libs/DICOM/Core/ctkDICOMScheduler_p.h b/Libs/DICOM/Core/ctkDICOMScheduler_p.h deleted file mode 100644 index 89aed8a9a3..0000000000 --- a/Libs/DICOM/Core/ctkDICOMScheduler_p.h +++ /dev/null @@ -1,76 +0,0 @@ -/*========================================================================= - - Library: CTK - - Copyright (c) Kitware Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0.txt - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - This file was originally developed by Davide Punzo, punzodavide@hotmail.it, - and development was supported by the Program for Intelligent Image-Guided Interventions (PI3). - -=========================================================================*/ - -#ifndef __ctkDICOMQueryJobPrivate_h -#define __ctkDICOMQueryJobPrivate_h - -// Qt includes -#include -#include -#include -#include -class QVariant; - -// ctkCore includes -#include -class ctkAbstractJob; -class ctkAbstractWorker; -class ctkDICOMDatabase; -class ctkDICOMServer; - -// ctkDICOMCore includes -#include "ctkDICOMScheduler.h" - -//------------------------------------------------------------------------------ -struct ThumbnailUID -{ - QString studyInstanceUID; - QString seriesInstanceUID; - QString SOPInstanceUID; -} ; - -//------------------------------------------------------------------------------ -class ctkDICOMSchedulerPrivate : public ctkJobSchedulerPrivate -{ - Q_OBJECT - Q_DECLARE_PUBLIC(ctkDICOMScheduler); - -public: - ctkDICOMSchedulerPrivate(ctkDICOMScheduler& obj); - virtual ~ctkDICOMSchedulerPrivate(); - - bool isServerAllowed(ctkDICOMServer* server, const QStringList& allowedSeversForPatient); - ctkDICOMServer* getServerFromProxyServersByConnectionName(const QString&); - bool isJobDuplicate(ctkDICOMJob* job); - - QSharedPointer DicomDatabase; - QList> Servers; - QMap ServersConnections; - QMap Filters; - - int MaximumPatientsQuery{25}; - - dcmtk::log4cplus::SharedAppenderPtr Appender; -}; - -#endif diff --git a/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp b/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp index bed26f42e2..45d2fc898a 100644 --- a/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMSeriesModel.cpp @@ -30,6 +30,7 @@ // CTK includes #include +#include // ctkDICOMCore includes #include "ctkDICOMModalities.h" @@ -39,7 +40,7 @@ #include "ctkDICOMJobResponseSet.h" #include "ctkDICOMJob.h" -static ctkLogger logger("org.commontk.DICOM.Core.DICOMSeriesModel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Core.DICOMSeriesModel")) //---------------------------------------------------------------------------- static void skipDelete(QObject* obj) @@ -132,7 +133,7 @@ ctkDICOMSeriesModelPrivate::ctkDICOMSeriesModelPrivate(ctkDICOMSeriesModel& obj) this->Scheduler = nullptr; this->PatientID = ""; this->StudyFilter = ""; - this->ModalityFilter = ctkDICOMModalities::AllModalities; + this->ModalityFilter = ctkDICOMModalities::AllModalities(); this->SeriesDescriptionFilter = ""; } @@ -163,7 +164,7 @@ void ctkDICOMSeriesModelPrivate::populateSeriesData() if (!this->DicomDatabase) { - logger.error("populateSeriesData: No database set"); + logger->error("populateSeriesData: No database set"); return; } @@ -594,7 +595,7 @@ void ctkDICOMSeriesModel::setDicomDatabase(QSharedPointer data Q_D(ctkDICOMSeriesModel); if (!database.data()) { - logger.error("setDicomDatabase: Invalid (null) database pointer"); + logger->error("setDicomDatabase: Invalid (null) database pointer"); return; } if (d->DicomDatabase == database) @@ -1009,7 +1010,7 @@ void ctkDICOMSeriesModel::forceUpdateSeriesJobs(const QString &seriesInstanceUID // Stop running or waiting jobs QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : runningJobs) + for (const QSharedPointer& job : std::as_const(runningJobs)) { jobUIDs.append(job->jobUID()); } @@ -1019,7 +1020,7 @@ void ctkDICOMSeriesModel::forceUpdateSeriesJobs(const QString &seriesInstanceUID { QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : failedJobs) + for (const QSharedPointer& job : std::as_const(failedJobs)) { jobUIDs.append(job->jobUID()); } @@ -1045,7 +1046,7 @@ void ctkDICOMSeriesModel::forceRetrieveSeries(const QString &seriesInstanceUID) ctkDICOMSeriesModelPrivate::SeriesData& seriesData = d->SeriesList[linearIndex]; if (d->AllowedServers.isEmpty()) { - logger.warn("ctkDICOMSeriesModel::forceRetrieveSeries: No allowed servers specified, cannot retrieve series."); + logger->warn("ctkDICOMSeriesModel::forceRetrieveSeries: No allowed servers specified, cannot retrieve series."); seriesData.operationStatus = ctkDICOMSeriesModel::Failed; } else @@ -1119,7 +1120,7 @@ QVariant ctkDICOMSeriesModel::data(const QModelIndex& index, int role) const switch (role) { case Qt::DisplayRole: - return QString("Series %1: %2").arg(series.seriesNumber).arg(series.seriesDescription); + return QString("Series %1: %2").arg(series.seriesNumber, series.seriesDescription); case Qt::ToolTipRole: { @@ -1504,7 +1505,7 @@ QHash ctkDICOMSeriesModel::roleNames() const } //------------------------------------------------------------------------------ -void ctkDICOMSeriesModel::updateGUIFromScheduler(const QVariant& data, const bool& studyIsCollapsed) +void ctkDICOMSeriesModel::updateGUIFromScheduler(const QVariant& data, bool studyIsCollapsed) { Q_D(ctkDICOMSeriesModel); if (d->IsUpdating) @@ -1542,7 +1543,7 @@ void ctkDICOMSeriesModel::updateGUIFromScheduler(const QVariant& data, const boo this->refresh(); - for (const QString& seriesInstanceUID : td.QueriedSeriesInstanceUIDs) + for (const QString& seriesInstanceUID : std::as_const(td.QueriedSeriesInstanceUIDs)) { int linearIndex = d->findSeriesLinearIndex(seriesInstanceUID); if (linearIndex < 0) diff --git a/Libs/DICOM/Core/ctkDICOMSeriesModel.h b/Libs/DICOM/Core/ctkDICOMSeriesModel.h index 01e30a1de9..542fa7d3f8 100644 --- a/Libs/DICOM/Core/ctkDICOMSeriesModel.h +++ b/Libs/DICOM/Core/ctkDICOMSeriesModel.h @@ -210,7 +210,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMSeriesModel : public QAbstractTableModel public slots: /// Update GUI from scheduler progress - void updateGUIFromScheduler(const QVariant&, const bool&); + void updateGUIFromScheduler(const QVariant&, bool); void onJobStarted(const QVariant& data); void onJobFinished(const QVariant& data); void onJobFailed(const QVariant& data); diff --git a/Libs/DICOM/Core/ctkDICOMServer.cpp b/Libs/DICOM/Core/ctkDICOMServer.cpp index 85fa7c4bcd..ff1c92280f 100644 --- a/Libs/DICOM/Core/ctkDICOMServer.cpp +++ b/Libs/DICOM/Core/ctkDICOMServer.cpp @@ -27,15 +27,17 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMServer.h" -static ctkLogger logger("org.commontk.dicom.DICOMServer"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMServer")) //------------------------------------------------------------------------------ class ctkDICOMServerPrivate : public QObject { + Q_OBJECT Q_DECLARE_PUBLIC(ctkDICOMServer); protected: @@ -123,7 +125,7 @@ void ctkDICOMServer::setConnectionName(const QString& connectionName) } //------------------------------------------------------------------------------ -void ctkDICOMServer::setQueryRetrieveEnabled(const bool& queryRetrieveEnabled) +void ctkDICOMServer::setQueryRetrieveEnabled(bool queryRetrieveEnabled) { Q_D(ctkDICOMServer); d->QueryRetrieveEnabled = queryRetrieveEnabled; @@ -131,7 +133,7 @@ void ctkDICOMServer::setQueryRetrieveEnabled(const bool& queryRetrieveEnabled) } //------------------------------------------------------------------------------ -void ctkDICOMServer::setStorageEnabled(const bool& storageEnabled) +void ctkDICOMServer::setStorageEnabled(bool storageEnabled) { Q_D(ctkDICOMServer); d->StorageEnabled = storageEnabled; @@ -139,7 +141,7 @@ void ctkDICOMServer::setStorageEnabled(const bool& storageEnabled) } //------------------------------------------------------------------------------ -void ctkDICOMServer::setTrustedEnabled(const bool& trustedEnabled) +void ctkDICOMServer::setTrustedEnabled(bool trustedEnabled) { Q_D(ctkDICOMServer); d->TrustedEnabled = trustedEnabled; @@ -171,7 +173,7 @@ void ctkDICOMServer::setHost(const QString& host) } //------------------------------------------------------------------------------ -void ctkDICOMServer::setPort(const int& port) +void ctkDICOMServer::setPort(int port) { Q_D(ctkDICOMServer); d->Port = port; @@ -238,7 +240,7 @@ void ctkDICOMServer::setMoveDestinationAETitle(const QString& moveDestinationAET } //------------------------------------------------------------------------------ -void ctkDICOMServer::setKeepAssociationOpen(const bool& keepAssociationOpen) +void ctkDICOMServer::setKeepAssociationOpen(bool keepAssociationOpen) { Q_D(ctkDICOMServer); d->KeepAssociationOpen = keepAssociationOpen; @@ -246,7 +248,7 @@ void ctkDICOMServer::setKeepAssociationOpen(const bool& keepAssociationOpen) } //------------------------------------------------------------------------------ -void ctkDICOMServer::setConnectionTimeout(const int& timeout) +void ctkDICOMServer::setConnectionTimeout(int timeout) { Q_D(ctkDICOMServer); d->ConnectionTimeout = timeout; @@ -291,3 +293,5 @@ ctkDICOMServer *ctkDICOMServer::clone() const return newServer; } + +#include "ctkDICOMServer.moc" diff --git a/Libs/DICOM/Core/ctkDICOMServer.h b/Libs/DICOM/Core/ctkDICOMServer.h index 8d4739d9a5..c07da917ea 100644 --- a/Libs/DICOM/Core/ctkDICOMServer.h +++ b/Libs/DICOM/Core/ctkDICOMServer.h @@ -61,21 +61,21 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMServer : public QObject ///@{ /// Query/Retrieve operations /// true as default - void setQueryRetrieveEnabled(const bool& queryRetrieveEnabled); + void setQueryRetrieveEnabled(bool queryRetrieveEnabled); bool queryRetrieveEnabled() const; ///}@ ///@{ /// Storage operations /// true as default - void setStorageEnabled(const bool& storageEnabled); + void setStorageEnabled(bool storageEnabled); bool storageEnabled() const; ///}@ ///@{ /// Trusted server /// true as default - void setTrustedEnabled(const bool& trustedEnabled); + void setTrustedEnabled(bool trustedEnabled); bool trustedEnabled() const; ///}@ @@ -102,7 +102,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMServer : public QObject ///@{ /// [0, 65365] port on peer host /// 80 as default - void setPort(const int& port); + void setPort(int port); int port() const; ///}@ @@ -133,13 +133,13 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMServer : public QObject ///@{ /// prefer to keep using the existing association to peer host when doing /// multiple requests (default true) - void setKeepAssociationOpen(const bool& keepOpen); + void setKeepAssociationOpen(bool keepOpen); bool keepAssociationOpen() const; ///}@ ///@{ /// connection timeout in seconds, default 10 s. - void setConnectionTimeout(const int& timeout); + void setConnectionTimeout(int timeout); int connectionTimeout() const; ///}@ diff --git a/Libs/DICOM/Core/ctkDICOMStorageListener.cpp b/Libs/DICOM/Core/ctkDICOMStorageListener.cpp index 0a3a2d0de6..563061564b 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListener.cpp +++ b/Libs/DICOM/Core/ctkDICOMStorageListener.cpp @@ -275,7 +275,7 @@ ctkDICOMStorageListener::~ctkDICOMStorageListener() //------------------------------------------------------------------------------ CTK_SET_CPP(ctkDICOMStorageListener, const QString&, setAETitle, AETitle); CTK_GET_CPP(ctkDICOMStorageListener, QString, AETitle, AETitle) -CTK_SET_CPP(ctkDICOMStorageListener, const int&, setPort, Port); +CTK_SET_CPP(ctkDICOMStorageListener, int, setPort, Port); CTK_GET_CPP(ctkDICOMStorageListener, int, port, Port) CTK_SET_CPP(ctkDICOMStorageListener, const QString&, setJobUID, JobUID); CTK_GET_CPP(ctkDICOMStorageListener, QString, jobUID, JobUID) @@ -336,7 +336,7 @@ bool ctkDICOMStorageListener::initializeSCU() } //----------------------------------------------------------------------------- -void ctkDICOMStorageListener::setConnectionTimeout(const int& timeout) +void ctkDICOMStorageListener::setConnectionTimeout(int timeout) { Q_D(ctkDICOMStorageListener); d->SCU.setACSETimeout(timeout); diff --git a/Libs/DICOM/Core/ctkDICOMStorageListener.h b/Libs/DICOM/Core/ctkDICOMStorageListener.h index 4e7c727d6d..fe9ce8fdd1 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListener.h +++ b/Libs/DICOM/Core/ctkDICOMStorageListener.h @@ -58,14 +58,14 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStorageListener : public QObject ///@{ /// Storage port /// 11112 by default - void setPort(const int& port); + void setPort(int port); int port() const; ///@} ///@{ /// Connection timeout /// 1 sec by default - void setConnectionTimeout(const int& timeout); + void setConnectionTimeout(int timeout); int connectionTimeout() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMStorageListenerJob.cpp b/Libs/DICOM/Core/ctkDICOMStorageListenerJob.cpp index c823ae54f2..44da6b32fe 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListenerJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMStorageListenerJob.cpp @@ -23,12 +23,13 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMStorageListenerJob_p.h" #include "ctkDICOMStorageListenerWorker.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMStorageListenerJob" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMStorageListenerJob")) //------------------------------------------------------------------------------ // ctkDICOMStorageListenerJobPrivate methods @@ -49,8 +50,8 @@ ctkDICOMStorageListenerJobPrivate::~ctkDICOMStorageListenerJobPrivate() = defaul // ctkDICOMStorageListenerJob methods //------------------------------------------------------------------------------ -ctkDICOMStorageListenerJob::ctkDICOMStorageListenerJob() - : d_ptr(new ctkDICOMStorageListenerJobPrivate(this)) +ctkDICOMStorageListenerJob::ctkDICOMStorageListenerJob(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMStorageListenerJobPrivate(this)) { this->Persistent = true; } @@ -65,9 +66,9 @@ ctkDICOMStorageListenerJob::ctkDICOMStorageListenerJob(ctkDICOMStorageListenerJo ctkDICOMStorageListenerJob::~ctkDICOMStorageListenerJob() = default; //------------------------------------------------------------------------------ -CTK_SET_CPP(ctkDICOMStorageListenerJob, const int&, setPort, Port); +CTK_SET_CPP(ctkDICOMStorageListenerJob, int, setPort, Port); CTK_GET_CPP(ctkDICOMStorageListenerJob, int, port, Port) -CTK_SET_CPP(ctkDICOMStorageListenerJob, const int&, setConnectionTimeout, ConnectionTimeout); +CTK_SET_CPP(ctkDICOMStorageListenerJob, int, setConnectionTimeout, ConnectionTimeout); CTK_GET_CPP(ctkDICOMStorageListenerJob, int, connectionTimeout, ConnectionTimeout) CTK_SET_CPP(ctkDICOMStorageListenerJob, const QString&, setAETitle, AETitle); CTK_GET_CPP(ctkDICOMStorageListenerJob, QString, AETitle, AETitle) @@ -77,8 +78,7 @@ QString ctkDICOMStorageListenerJob::loggerReport(const QString& status) { QString fullLogMsg = QString("ctkDICOMStorageListenerJob: listener job %1.\n" "JobUID: %2\n") - .arg(status) - .arg(this->jobUID()); + .arg(status, this->jobUID()); QString logMsg = QString("Listener job %1.\n") .arg(status); QString currentDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"); diff --git a/Libs/DICOM/Core/ctkDICOMStorageListenerJob.h b/Libs/DICOM/Core/ctkDICOMStorageListenerJob.h index c880bf26f9..ca9839d027 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListenerJob.h +++ b/Libs/DICOM/Core/ctkDICOMStorageListenerJob.h @@ -47,12 +47,12 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStorageListenerJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMStorageListenerJob(); + explicit ctkDICOMStorageListenerJob(QObject* parent = nullptr); virtual ~ctkDICOMStorageListenerJob(); ///@{ /// Port, default: 11112 - void setPort(const int& port); + void setPort(int port); int port() const; ///@} @@ -64,7 +64,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStorageListenerJob : public ctkDICOMJob ///@{ /// Connection timeout, default 1 sec. - void setConnectionTimeout(const int& timeout); + void setConnectionTimeout(int timeout); int connectionTimeout() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.cpp b/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.cpp index 939bcf69c5..4570935450 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.cpp @@ -26,6 +26,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" @@ -36,7 +37,7 @@ // DCMTK includes #include -static ctkLogger logger ("org.commontk.dicom.DICOMStorageListenerWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMStorageListenerWorker")) //------------------------------------------------------------------------------ // ctkDICOMStorageListenerWorkerPrivate methods @@ -92,8 +93,8 @@ void ctkDICOMStorageListenerWorkerPrivate::init() // ctkDICOMStorageListenerWorker methods //------------------------------------------------------------------------------ -ctkDICOMStorageListenerWorker::ctkDICOMStorageListenerWorker() - : d_ptr(new ctkDICOMStorageListenerWorkerPrivate(this)) +ctkDICOMStorageListenerWorker::ctkDICOMStorageListenerWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMStorageListenerWorkerPrivate(this)) { Q_D(ctkDICOMStorageListenerWorker); d->init(); @@ -141,7 +142,7 @@ void ctkDICOMStorageListenerWorker::run() storageListenerJob->setStatus(ctkAbstractJob::JobStatus::Running); emit storageListenerJob->started(); - logger.debug(QString("ctkDICOMStorageListenerWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMStorageListenerWorker : running job %1 in thread %2.\n") .arg(storageListenerJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); diff --git a/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.h b/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.h index c380d350fc..b094f17b5e 100644 --- a/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.h +++ b/Libs/DICOM/Core/ctkDICOMStorageListenerWorker.h @@ -42,7 +42,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStorageListenerWorker : public ctkAbstractWo public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMStorageListenerWorker(); + explicit ctkDICOMStorageListenerWorker(QObject* parent = nullptr); virtual ~ctkDICOMStorageListenerWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.cpp b/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.cpp index f81adce355..23194c3b4f 100644 --- a/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.cpp @@ -220,7 +220,7 @@ void ctkDICOMStudyMergedFilterProxyModel::clearSourceProxyFilterModels() } //------------------------------------------------------------------------------ -void ctkDICOMStudyMergedFilterProxyModel::refreshStudies(QList models) +void ctkDICOMStudyMergedFilterProxyModel::refreshStudies(const QList& models) { this->beginResetModel(); diff --git a/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.h b/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.h index 94b846011d..e516c8bbe4 100644 --- a/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.h +++ b/Libs/DICOM/Core/ctkDICOMStudyMergedFilterProxyModel.h @@ -52,27 +52,27 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStudyMergedFilterProxyModel : public QAbstra virtual ~ctkDICOMStudyMergedFilterProxyModel(); /// Set the list of source proxy models to merge - Q_INVOKABLE void setSourceProxyFilterModels(const QList& models); + Q_INVOKABLE void setSourceProxyFilterModels(const QList& models); /// Clear all source models Q_INVOKABLE void clearSourceProxyFilterModels(); /// Refresh studies by rebuilding the merged rows - Q_INVOKABLE void refreshStudies(QList models = QList()); + Q_INVOKABLE void refreshStudies(const QList& models = QList()); /// Get the list of source filter proxy models - Q_INVOKABLE QList sourceProxyFilterModels() const; - Q_INVOKABLE QList sourceModels() const; + Q_INVOKABLE QList sourceProxyFilterModels() const; + Q_INVOKABLE QList sourceModels() const; /// Reimplemented from QAbstractListModel Q_INVOKABLE int rowCount(const QModelIndex& parent = QModelIndex()) const override; Q_INVOKABLE QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; /// Map from merged index to source model and source index - Q_INVOKABLE QPair mapToSource(const QModelIndex& proxyIndex) const; + Q_INVOKABLE QPair mapToSource(const QModelIndex& proxyIndex) const; /// Map from source model and source index to merged index - Q_INVOKABLE QModelIndex mapFromSource(const QPair& sourceInfo) const; + Q_INVOKABLE QModelIndex mapFromSource(const QPair& sourceInfo) const; protected slots: void onSourceDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector& roles); diff --git a/Libs/DICOM/Core/ctkDICOMStudyModel.cpp b/Libs/DICOM/Core/ctkDICOMStudyModel.cpp index 852c949f6c..03d0a2724f 100644 --- a/Libs/DICOM/Core/ctkDICOMStudyModel.cpp +++ b/Libs/DICOM/Core/ctkDICOMStudyModel.cpp @@ -28,6 +28,7 @@ // CTK includes #include +#include // ctkDICOMCore includes #include "ctkDICOMStudyModel.h" @@ -39,7 +40,7 @@ #include "ctkDICOMJobResponseSet.h" #include "ctkDICOMJob.h" -static ctkLogger logger("org.commontk.DICOM.Core.ctkDICOMStudyModel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Core.ctkDICOMStudyModel")) //------------------------------------------------------------------------------ // Helper function for setDicomDatabase/setScheduler @@ -141,7 +142,7 @@ ctkDICOMStudyModelPrivate::ctkDICOMStudyModelPrivate(ctkDICOMStudyModel& obj) this->NumberOfOpenedStudies = 2; this->ThumbnailSize = 128; this->IsUpdating = false; - this->ModalityFilter = ctkDICOMModalities::AllModalities; + this->ModalityFilter = ctkDICOMModalities::AllModalities(); } //------------------------------------------------------------------------------ @@ -198,7 +199,7 @@ void ctkDICOMStudyModelPrivate::populateStudies() if (!this->DicomDatabase) { - logger.error("populateStudies: No database set"); + logger->error("populateStudies: No database set"); return; } @@ -263,7 +264,7 @@ void ctkDICOMStudyModelPrivate::populateStudies() // Create a set of existing study instance UIDs for quick lookup QSet existingStudyUIDs; - for (const StudyData& study : this->Studies) + for (const StudyData& study : std::as_const(this->Studies)) { existingStudyUIDs.insert(study.studyInstanceUID); } @@ -579,7 +580,7 @@ void ctkDICOMStudyModelPrivate::updateFilteredSeriesCounts() study.isQueryResult = isQueryResult; } - q->emit dataChanged(topLeft, bottomRight, QVector() << q->FilteredSeriesCountRole << q->IsVisibleRole); + emit q->dataChanged(topLeft, bottomRight, QVector() << q->FilteredSeriesCountRole << q->IsVisibleRole); } //------------------------------------------------------------------------------ @@ -604,7 +605,7 @@ ctkDICOMSeriesModel* ctkDICOMStudyModelPrivate::createSeriesModel(const QString& if (!this->DicomDatabase) { - logger.warn("createSeriesModel: No database set"); + logger->warn("createSeriesModel: No database set"); return nullptr; } @@ -1150,7 +1151,7 @@ void ctkDICOMStudyModel::setDateFilter(DateType dateType) } //------------------------------------------------------------------------------ -void ctkDICOMStudyModel::setCustomDateRange(const QDate& startDate, const QDate& endDate) +void ctkDICOMStudyModel::setCustomDateRange(QDate startDate, QDate endDate) { Q_D(ctkDICOMStudyModel); @@ -1563,7 +1564,7 @@ void ctkDICOMStudyModel::forceUpdateStudyJobs(const QString &studyInstanceUID) // Stop running or waiting jobs QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : runningJobs) + for (const QSharedPointer& job : std::as_const(runningJobs)) { jobUIDs.append(job->jobUID()); } @@ -1573,7 +1574,7 @@ void ctkDICOMStudyModel::forceUpdateStudyJobs(const QString &studyInstanceUID) { QStringList jobUIDs; // Restart the failed job - for (QSharedPointer job : failedJobs) + for (const QSharedPointer& job : std::as_const(failedJobs)) { jobUIDs.append(job->jobUID()); } @@ -1611,7 +1612,7 @@ void ctkDICOMStudyModel::updateGUIFromScheduler(const QVariant& data) // Sort study UIDs by date/time (most recent first) using the same logic as proxy models QList> studyDateTimePairs; - for (const QString& studyInstanceUID : td.QueriedStudyInstanceUIDs) + for (const QString& studyInstanceUID : std::as_const(td.QueriedStudyInstanceUIDs)) { QModelIndex idx = this->indexFromStudyInstanceUID(studyInstanceUID); QString studyDate = this->data(idx, ctkDICOMStudyModel::StudyDateRole).toString(); diff --git a/Libs/DICOM/Core/ctkDICOMStudyModel.h b/Libs/DICOM/Core/ctkDICOMStudyModel.h index 67ee3692bb..967bb00112 100644 --- a/Libs/DICOM/Core/ctkDICOMStudyModel.h +++ b/Libs/DICOM/Core/ctkDICOMStudyModel.h @@ -159,7 +159,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMStudyModel : public QAbstractListModel void setDateFilter(DateType dateType); /// Set custom date range filter (when dateFilter is CustomRange) - void setCustomDateRange(const QDate& startDate, const QDate& endDate); + void setCustomDateRange(QDate startDate, QDate endDate); QDate customStartDate() const; QDate customEndDate() const; diff --git a/Libs/DICOM/Core/ctkDICOMTester.cpp b/Libs/DICOM/Core/ctkDICOMTester.cpp index 899f0d8eea..f1783124cd 100644 --- a/Libs/DICOM/Core/ctkDICOMTester.cpp +++ b/Libs/DICOM/Core/ctkDICOMTester.cpp @@ -28,9 +28,10 @@ // ctkDICOM includes #include "ctkDICOMTester.h" #include "ctkLogger.h" +#include //------------------------------------------------------------------------------ -static ctkLogger logger("org.commontk.dicom.DICOMTester" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMTester")) //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.cpp b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.cpp index 8fac1c2903..a0d84e2155 100644 --- a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.cpp +++ b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.cpp @@ -23,13 +23,14 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMJobResponseSet.h" // For ctkDICOMJobDetail #include "ctkDICOMThumbnailGeneratorJob_p.h" #include "ctkDICOMThumbnailGeneratorWorker.h" -static ctkLogger logger ( "org.commontk.dicom.DICOMThumbnailGeneratorJob" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMThumbnailGeneratorJob")) //------------------------------------------------------------------------------ // ctkDICOMThumbnailGeneratorJobPrivate methods @@ -48,11 +49,11 @@ ctkDICOMThumbnailGeneratorJobPrivate::~ctkDICOMThumbnailGeneratorJobPrivate() //------------------------------------------------------------------------------ CTK_GET_CPP(ctkDICOMThumbnailGeneratorJob, QString, databaseFilename, DatabaseFilename); -CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, QString, setDatabaseFilename, DatabaseFilename); +CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, const QString&, setDatabaseFilename, DatabaseFilename); CTK_GET_CPP(ctkDICOMThumbnailGeneratorJob, QString, dicomFilePath, DicomFilePath); -CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, QString, setDicomFilePath, DicomFilePath); +CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, const QString&, setDicomFilePath, DicomFilePath); CTK_GET_CPP(ctkDICOMThumbnailGeneratorJob, QString, modality, Modality); -CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, QString, setModality, Modality); +CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, const QString&, setModality, Modality); CTK_GET_CPP(ctkDICOMThumbnailGeneratorJob, QColor, backgroundColor, BackgroundColor); CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, QColor, setBackgroundColor, BackgroundColor); @@ -60,8 +61,8 @@ CTK_SET_CPP(ctkDICOMThumbnailGeneratorJob, QColor, setBackgroundColor, Backgroun // ctkDICOMThumbnailGeneratorJob methods //------------------------------------------------------------------------------ -ctkDICOMThumbnailGeneratorJob::ctkDICOMThumbnailGeneratorJob() - : d_ptr(new ctkDICOMThumbnailGeneratorJobPrivate(this)) +ctkDICOMThumbnailGeneratorJob::ctkDICOMThumbnailGeneratorJob(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMThumbnailGeneratorJobPrivate(this)) { } diff --git a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.h b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.h index b99243fa4d..fcd7af4de5 100644 --- a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.h +++ b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorJob.h @@ -48,24 +48,24 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMThumbnailGeneratorJob : public ctkDICOMJob public: typedef ctkDICOMJob Superclass; - explicit ctkDICOMThumbnailGeneratorJob(); + explicit ctkDICOMThumbnailGeneratorJob(QObject* parent = nullptr); virtual ~ctkDICOMThumbnailGeneratorJob(); ///@{ /// Database Filename - void setDatabaseFilename(QString databaseFilename); + void setDatabaseFilename(const QString& databaseFilename); QString databaseFilename() const; ///}@ ///@{ /// Dicom file path - void setDicomFilePath(QString dicomFilePath); + void setDicomFilePath(const QString& dicomFilePath); QString dicomFilePath() const; ///@} ///@{ /// Modality - void setModality(QString modality); + void setModality(const QString& modality); QString modality() const; ///@} diff --git a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.cpp b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.cpp index c087fba81e..4657dbcaf5 100644 --- a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.cpp +++ b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.cpp @@ -23,6 +23,7 @@ // ctkCore includes #include +#include // ctkDICOMCore includes #include "ctkDICOMThumbnailGenerator.h" @@ -30,7 +31,7 @@ #include "ctkDICOMThumbnailGeneratorJob.h" #include "ctkDICOMScheduler.h" -static ctkLogger logger ("org.commontk.dicom.DICOMRetrieveWorker"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMRetrieveWorker")) //------------------------------------------------------------------------------ // ctkDICOMThumbnailGeneratorWorkerPrivate methods @@ -49,8 +50,8 @@ ctkDICOMThumbnailGeneratorWorkerPrivate::~ctkDICOMThumbnailGeneratorWorkerPrivat // ctkDICOMThumbnailGeneratorWorker methods //------------------------------------------------------------------------------ -ctkDICOMThumbnailGeneratorWorker::ctkDICOMThumbnailGeneratorWorker() - : d_ptr(new ctkDICOMThumbnailGeneratorWorkerPrivate(this)) +ctkDICOMThumbnailGeneratorWorker::ctkDICOMThumbnailGeneratorWorker(QObject* parent) + : Superclass(parent), d_ptr(new ctkDICOMThumbnailGeneratorWorkerPrivate(this)) { } @@ -97,7 +98,7 @@ void ctkDICOMThumbnailGeneratorWorker::run() thumbnailGeneratorJob->setStatus(ctkAbstractJob::JobStatus::Running); - logger.debug(QString("ctkDICOMThumbnailGeneratorWorker : running job %1 in thread %2.\n") + logger->debug(QString("ctkDICOMThumbnailGeneratorWorker : running job %1 in thread %2.\n") .arg(thumbnailGeneratorJob->jobUID()) .arg(QString::number(reinterpret_cast(QThread::currentThreadId())), 16)); @@ -130,7 +131,7 @@ void ctkDICOMThumbnailGeneratorWorker::run() jobResponseSet->setSOPInstanceUID(thumbnailGeneratorJob->sopInstanceUID()); jobResponseSet->setJobUID(thumbnailGeneratorJob->jobUID()); - thumbnailGeneratorJob->progressJobDetail(jobResponseSet->toVariant()); + emit thumbnailGeneratorJob->progressJobDetail(jobResponseSet->toVariant()); thumbnailGeneratorJob->setStatus(ctkAbstractJob::JobStatus::Finished); } diff --git a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.h b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.h index a009729fd3..572d9de3be 100644 --- a/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.h +++ b/Libs/DICOM/Core/ctkDICOMThumbnailGeneratorWorker.h @@ -41,7 +41,7 @@ class CTK_DICOM_CORE_EXPORT ctkDICOMThumbnailGeneratorWorker : public ctkAbstrac public: typedef ctkAbstractWorker Superclass; - explicit ctkDICOMThumbnailGeneratorWorker(); + explicit ctkDICOMThumbnailGeneratorWorker(QObject* parent = nullptr); virtual ~ctkDICOMThumbnailGeneratorWorker(); /// Execute worker. This method is run by the QThreadPool and is thread safe diff --git a/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMBrowserTest.cpp b/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMBrowserTest.cpp index 855bbe1c0d..855afe6650 100644 --- a/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMBrowserTest.cpp +++ b/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMBrowserTest.cpp @@ -34,6 +34,8 @@ class ctkDICOMBrowserTester: public QObject { Q_OBJECT +public: + explicit ctkDICOMBrowserTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void initTestCase(); diff --git a/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMServerNodeWidgetTest1.cpp b/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMServerNodeWidgetTest1.cpp index e0b0b769de..e54005003d 100644 --- a/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMServerNodeWidgetTest1.cpp +++ b/Libs/DICOM/Widgets/Testing/Cpp/ctkDICOMServerNodeWidgetTest1.cpp @@ -121,7 +121,7 @@ int ctkDICOMServerNodeWidgetTest1( int argc, char * argv [] ) serverNode["Port"] = 12345; widget.addServerNode(serverNode); if (widget.serverNodes().count() != 2 || - widget.serverNodes()[1] != "TestName" || + widget.serverNodes().at(1) != "TestName" || widget.selectedServerNodes().count() != 1 || widget.serverNodeParameters("TestName") != serverNode || widget.serverNodeParameters(1) != serverNode) @@ -129,7 +129,7 @@ int ctkDICOMServerNodeWidgetTest1( int argc, char * argv [] ) std::cout << "ctkDICOMServerNodeWidget::addServerNode() failed:" << widget.serverNodes().count() << " " << (widget.serverNodes().count() > 1? - qPrintable(widget.serverNodes()[1]) : "none") << " " + qPrintable(widget.serverNodes().at(1)) : "none") << " " << widget.selectedServerNodes().count() << " " << (widget.serverNodeParameters("TestName") == serverNode) << " " << (widget.serverNodeParameters(1) == serverNode) << std::endl; diff --git a/Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp index 206972e8d1..8010b5ffcf 100644 --- a/Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp @@ -61,7 +61,7 @@ //logger #include -static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMAppWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.ctkDICOMAppWidget")) Q_DECLARE_METATYPE(QPersistentModelIndex); @@ -219,7 +219,7 @@ void ctkDICOMAppWidgetPrivate::showIndexerDialog() q->connect(DICOMIndexer.data(), SIGNAL(indexingComplete(int,int,int,int)), q, SLOT(setIndexingResult(int,int,int,int))); // reset the database to show new data - q->connect(DICOMIndexer.data(), SIGNAL(indexingComplete(int, int, int, int)), + q->connect(DICOMIndexer.data(), SIGNAL(indexingComplete(int,int,int,int)), &DICOMModel, SLOT(reset())); // stop indexing and reset the database if canceled q->connect(IndexerProgress, SIGNAL(canceled()), @@ -230,7 +230,7 @@ void ctkDICOMAppWidgetPrivate::showIndexerDialog() // allow users of this widget to know that the process has finished q->connect(IndexerProgress, SIGNAL(canceled()), q, SIGNAL(directoryImported())); - q->connect(DICOMIndexer.data(), SIGNAL(indexingComplete(int, int, int, int)), + q->connect(DICOMIndexer.data(), SIGNAL(indexingComplete(int,int,int,int)), q, SIGNAL(directoryImported())); } IndexerProgress->show(); @@ -459,7 +459,7 @@ bool ctkDICOMAppWidget::searchWidgetPopUpMode(){ } //------------------------------------------------------------------------------ -void ctkDICOMAppWidget::setTagsToPrecache( const QStringList tags) +void ctkDICOMAppWidget::setTagsToPrecache( const QStringList& tags) { Q_D(ctkDICOMAppWidget); d->DICOMDatabase->setTagsToPrecache(tags); @@ -659,7 +659,7 @@ void ctkDICOMAppWidget::setIndexingResult(int patientsAdded, int studiesAdded, i } //---------------------------------------------------------------------------- -void ctkDICOMAppWidget::onImportDirectory(QString directory) +void ctkDICOMAppWidget::onImportDirectory(const QString& directory) { Q_D(ctkDICOMAppWidget); if (QDir(directory).exists()) @@ -684,10 +684,7 @@ void ctkDICOMAppWidget::onImportDirectory(QString directory) "%2 New Studies\n" "%3 New Series\n" "%4 New Instances\n") - .arg(QString::number(d->PatientsAddedDuringImport)) - .arg(QString::number(d->StudiesAddedDuringImport)) - .arg(QString::number(d->SeriesAddedDuringImport)) - .arg(QString::number(d->InstancesAddedDuringImport)); + .arg(QString::number(d->PatientsAddedDuringImport), QString::number(d->StudiesAddedDuringImport), QString::number(d->SeriesAddedDuringImport), QString::number(d->InstancesAddedDuringImport)); QMessageBox::information(this, tr("DICOM Directory Import"), message); } } diff --git a/Libs/DICOM/Widgets/ctkDICOMAppWidget.h b/Libs/DICOM/Widgets/ctkDICOMAppWidget.h index 8192974ef8..503f0c28df 100644 --- a/Libs/DICOM/Widgets/ctkDICOMAppWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMAppWidget.h @@ -54,7 +54,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMAppWidget : public QWidget /// delegate to the corresponding routines of the internal /// instance of the database. /// @see ctkDICOMDatabase - void setTagsToPrecache(const QStringList tags); + void setTagsToPrecache(const QStringList& tags); const QStringList tagsToPrecache(); /// Updates schema of loaded database to match the one @@ -96,7 +96,7 @@ public Q_SLOTS: /// Import a directory - this is used when the user selects a directory /// from the Import Dialog, but can also be used externally to trigger /// an import (i.e. for testing or to support drag-and-drop) - void onImportDirectory(QString directory); + void onImportDirectory(const QString& directory); /// Save number of added patients, studies, series, images void setIndexingResult(int, int, int, int); diff --git a/Libs/DICOM/Widgets/ctkDICOMBrowser.cpp b/Libs/DICOM/Widgets/ctkDICOMBrowser.cpp index 9cb7bfbb2c..ee610bb171 100644 --- a/Libs/DICOM/Widgets/ctkDICOMBrowser.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMBrowser.cpp @@ -78,7 +78,7 @@ class ctkDICOMBrowserPrivate: public Ui_ctkDICOMBrowser void init(); - void importDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode); + void importDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode); void importFiles(const QStringList& files, ctkDICOMBrowser::ImportDirectoryMode mode); @@ -278,28 +278,28 @@ void ctkDICOMBrowserPrivate::init() this->dicomTableManager->setDICOMDatabase(this->DICOMDatabase.data()); // TableView signals - q->connect(this->dicomTableManager, SIGNAL(patientsSelectionChanged(const QItemSelection&, const QItemSelection&)), + q->connect(this->dicomTableManager, SIGNAL(patientsSelectionChanged(QItemSelection,QItemSelection)), this->InformationMessageFrame, SLOT(hide())); - q->connect(this->dicomTableManager, SIGNAL(studiesSelectionChanged(const QItemSelection&, const QItemSelection&)), + q->connect(this->dicomTableManager, SIGNAL(studiesSelectionChanged(QItemSelection,QItemSelection)), this->InformationMessageFrame, SLOT(hide())); - q->connect(this->dicomTableManager, SIGNAL(seriesSelectionChanged(const QItemSelection&, const QItemSelection&)), + q->connect(this->dicomTableManager, SIGNAL(seriesSelectionChanged(QItemSelection,QItemSelection)), this->InformationMessageFrame, SLOT(hide())); - q->connect(this->dicomTableManager, SIGNAL(patientsSelectionChanged(const QItemSelection&, const QItemSelection&)), - q, SLOT(onModelSelected(const QItemSelection&, const QItemSelection&))); - q->connect(this->dicomTableManager, SIGNAL(studiesSelectionChanged(const QItemSelection&, const QItemSelection&)), - q, SLOT(onModelSelected(const QItemSelection&, const QItemSelection&))); - q->connect(this->dicomTableManager, SIGNAL(seriesSelectionChanged(const QItemSelection&, const QItemSelection&)), - q, SLOT(onModelSelected(const QItemSelection&, const QItemSelection&))); + q->connect(this->dicomTableManager, SIGNAL(patientsSelectionChanged(QItemSelection,QItemSelection)), + q, SLOT(onModelSelected(QItemSelection,QItemSelection))); + q->connect(this->dicomTableManager, SIGNAL(studiesSelectionChanged(QItemSelection,QItemSelection)), + q, SLOT(onModelSelected(QItemSelection,QItemSelection))); + q->connect(this->dicomTableManager, SIGNAL(seriesSelectionChanged(QItemSelection,QItemSelection)), + q, SLOT(onModelSelected(QItemSelection,QItemSelection))); // set up context menus for working on selected patients, studies, series - q->connect(this->dicomTableManager, SIGNAL(patientsRightClicked(const QPoint&)), - q, SLOT(onPatientsRightClicked(const QPoint&))); - q->connect(this->dicomTableManager, SIGNAL(studiesRightClicked(const QPoint&)), - q, SLOT(onStudiesRightClicked(const QPoint&))); - q->connect(this->dicomTableManager, SIGNAL(seriesRightClicked(const QPoint&)), - q, SLOT(onSeriesRightClicked(const QPoint&))); + q->connect(this->dicomTableManager, SIGNAL(patientsRightClicked(QPoint)), + q, SLOT(onPatientsRightClicked(QPoint))); + q->connect(this->dicomTableManager, SIGNAL(studiesRightClicked(QPoint)), + q, SLOT(onStudiesRightClicked(QPoint))); + q->connect(this->dicomTableManager, SIGNAL(seriesRightClicked(QPoint)), + q, SLOT(onSeriesRightClicked(QPoint))); // Initialize directoryMode widget QFormLayout *layout = new QFormLayout; @@ -691,7 +691,7 @@ void ctkDICOMBrowser::setDatabaseDirectorySettingsKey(const QString& key) } //------------------------------------------------------------------------------ -void ctkDICOMBrowser::setTagsToPrecache( const QStringList tags) +void ctkDICOMBrowser::setTagsToPrecache( const QStringList& tags) { Q_D(ctkDICOMBrowser); d->DICOMDatabase->setTagsToPrecache(tags); @@ -831,9 +831,7 @@ void ctkDICOMBrowser::onRepairAction() "Study Description: %2\n" "Series Description: %3\n" "Do you want to remove the series from the DICOM database?" - ).arg(descriptions["PatientsName"]) - .arg(descriptions["StudyDescription"]) - .arg(descriptions["SeriesDescription"]) + ).arg(descriptions["PatientsName"], descriptions["StudyDescription"], descriptions["SeriesDescription"]) ); repairMessageBox->setDetailedText(unavailableFileNames); @@ -865,11 +863,11 @@ void ctkDICOMBrowser::onRepairAction() repairMessageBox->deleteLater(); // Force refresh of table views - d->DICOMDatabase->databaseChanged(); + emit d->DICOMDatabase->databaseChanged(); } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::onImportDirectoriesSelected(QStringList directories) +void ctkDICOMBrowser::onImportDirectoriesSelected(const QStringList& directories) { Q_D(ctkDICOMBrowser); this->importDirectories(directories, this->importDirectoryMode()); @@ -906,7 +904,7 @@ void ctkDICOMBrowser::importFiles(const QStringList& files, ctkDICOMBrowser::Imp } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::importDirectories(QStringList directories, ctkDICOMBrowser::ImportDirectoryMode mode) +void ctkDICOMBrowser::importDirectories(const QStringList& directories, ctkDICOMBrowser::ImportDirectoryMode mode) { Q_D(ctkDICOMBrowser); if (!d->DICOMDatabase || !d->DICOMIndexer) @@ -921,14 +919,14 @@ void ctkDICOMBrowser::importDirectories(QStringList directories, ctkDICOMBrowser } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::importDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode) +void ctkDICOMBrowser::importDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode) { Q_D(ctkDICOMBrowser); d->importDirectory(directory, mode); } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::onImportDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode) +void ctkDICOMBrowser::onImportDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode) { this->importDirectory(directory, mode); } @@ -941,7 +939,7 @@ void ctkDICOMBrowser::waitForImportFinished() } //---------------------------------------------------------------------------- -void ctkDICOMBrowserPrivate::importDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode) +void ctkDICOMBrowserPrivate::importDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode) { if (!QDir(directory).exists()) { @@ -1042,7 +1040,7 @@ void ctkDICOMBrowser::onModelSelected(const QItemSelection &item1, const QItemSe } //---------------------------------------------------------------------------- -bool ctkDICOMBrowser::confirmDeleteSelectedUIDs(QStringList uids) +bool ctkDICOMBrowser::confirmDeleteSelectedUIDs(const QStringList& uids) { Q_D(ctkDICOMBrowser); @@ -1122,7 +1120,7 @@ bool ctkDICOMBrowser::confirmDeleteSelectedUIDs(QStringList uids) } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::onPatientsRightClicked(const QPoint &point) +void ctkDICOMBrowser::onPatientsRightClicked(QPoint point) { Q_D(ctkDICOMBrowser); @@ -1196,7 +1194,7 @@ void ctkDICOMBrowser::onPatientsRightClicked(const QPoint &point) } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::onStudiesRightClicked(const QPoint &point) +void ctkDICOMBrowser::onStudiesRightClicked(QPoint point) { Q_D(ctkDICOMBrowser); @@ -1274,7 +1272,7 @@ void ctkDICOMBrowser::onStudiesRightClicked(const QPoint &point) } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::onSeriesRightClicked(const QPoint &point) +void ctkDICOMBrowser::onSeriesRightClicked(QPoint point) { Q_D(ctkDICOMBrowser); @@ -1353,7 +1351,7 @@ void ctkDICOMBrowser::onSeriesRightClicked(const QPoint &point) } //---------------------------------------------------------------------------- -void ctkDICOMBrowser::exportSeries(QString dirPath, QStringList uids) +void ctkDICOMBrowser::exportSeries(const QString& dirPath, const QStringList& uids) { Q_D(ctkDICOMBrowser); @@ -1467,8 +1465,7 @@ void ctkDICOMBrowser::exportSeries(QString dirPath, QStringList uids) //: %1 and %2 refers to source and destination file paths QString errorString = tr("Failed to copy\n\n%1\n\nto\n\n%2" "\n\nHalting export.") - .arg(filePath) - .arg(destinationFileName); + .arg(filePath, destinationFileName); ctkMessageBox copyErrorMessageBox(this); copyErrorMessageBox.setText(errorString); copyErrorMessageBox.setIcon(QMessageBox::Warning); @@ -1770,10 +1767,7 @@ void ctkDICOMBrowser::onIndexingComplete(int patientsAdded, int studiesAdded, in { //: Arguments correspond to the number of patients, studies, series and instancies QString message = tr("Import completed: added %1 patients, %2 studies, %3 series, %4 instances.") - .arg(QString::number(patientsAdded)) - .arg(QString::number(studiesAdded)) - .arg(QString::number(seriesAdded)) - .arg(QString::number(imagesAdded)); + .arg(QString::number(patientsAdded), QString::number(studiesAdded), QString::number(seriesAdded), QString::number(imagesAdded)); d->InformationMessageLabel->setText(message); d->InformationMessageFrame->show(); } diff --git a/Libs/DICOM/Widgets/ctkDICOMBrowser.h b/Libs/DICOM/Widgets/ctkDICOMBrowser.h index d555409a24..7aa7190294 100644 --- a/Libs/DICOM/Widgets/ctkDICOMBrowser.h +++ b/Libs/DICOM/Widgets/ctkDICOMBrowser.h @@ -105,7 +105,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMBrowser : public QWidget /// delegate to the corresponding routines of the internal /// instance of the database. /// @see ctkDICOMDatabase - void setTagsToPrecache(const QStringList tags); + void setTagsToPrecache(const QStringList& tags); const QStringList tagsToPrecache(); Q_INVOKABLE ctkDICOMDatabase* database(); @@ -191,14 +191,14 @@ public Q_SLOTS: /// By default, \a mode is ImportDirectoryMode::ImportDirectoryAddLink is set. /// /// \sa importDirectory(QString directory, int mode) - void importDirectories(QStringList directories, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); + void importDirectories(const QStringList& directories, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); /// \brief Import a directory /// /// This can be used to externally trigger an import (i.e. for testing or to support drag-and-drop) /// /// By default, \a mode is ImportDirectoryMode::ImportDirectoryAddLink is set. - void importDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); + void importDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); /// \brief Import a list of files /// @@ -214,7 +214,7 @@ public Q_SLOTS: void waitForImportFinished(); /// \deprecated importDirectory() should be used - void onImportDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); + void onImportDirectory(const QString& directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink); /// slots to capture status updates from the database during an /// import operation @@ -268,7 +268,7 @@ public Q_SLOTS: /// empty, uses the UID. /// Returns true if the user confirms the delete, false otherwise. /// Remembers if the user doesn't want to show the confirmation again. - bool confirmDeleteSelectedUIDs(QStringList uids); + bool confirmDeleteSelectedUIDs(const QStringList& uids); protected Q_SLOTS: /// \brief Import directories @@ -277,24 +277,24 @@ protected Q_SLOTS: /// directories from the Import Dialog. /// /// \sa importDirectories(QString directory, int mode) - void onImportDirectoriesSelected(QStringList directories); + void onImportDirectoriesSelected(const QStringList& directories); void onImportDirectoryComboBoxCurrentIndexChanged(int index); void onModelSelected(const QItemSelection&, const QItemSelection&); /// Called when a right mouse click is made in the patients table - void onPatientsRightClicked(const QPoint &point); + void onPatientsRightClicked(QPoint point); /// Called when a right mouse click is made in the studies table - void onStudiesRightClicked(const QPoint &point); + void onStudiesRightClicked(QPoint point); /// Called when a right mouse click is made in the series table - void onSeriesRightClicked(const QPoint &point); + void onSeriesRightClicked(QPoint point); /// Called to export the series associated with the selected UIDs /// \sa exportSelectedStudies, exportSelectedPatients - void exportSeries(QString dirPath, QStringList uids); + void exportSeries(const QString& dirPath, const QStringList& uids); /// Called to export the studies associated with the selected UIDs /// \sa exportSelectedSeries, exportSelectedPatients diff --git a/Libs/DICOM/Widgets/ctkDICOMDirectoryListWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMDirectoryListWidget.cpp index 24d5c30c46..31d3717709 100644 --- a/Libs/DICOM/Widgets/ctkDICOMDirectoryListWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMDirectoryListWidget.cpp @@ -136,8 +136,7 @@ void ctkDICOMDirectoryListWidget::setDICOMDatabase(ctkDICOMDatabase* dicomDataba connect ( d->directoryListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, - SLOT(directorySelectionChanged(const QItemSelection & , - const QItemSelection & ))); + SLOT(directorySelectionChanged(QItemSelection,QItemSelection))); } //---------------------------------------------------------------------------- diff --git a/Libs/DICOM/Widgets/ctkDICOMImage.cpp b/Libs/DICOM/Widgets/ctkDICOMImage.cpp index 6dd6a02d78..d083936abc 100644 --- a/Libs/DICOM/Widgets/ctkDICOMImage.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMImage.cpp @@ -31,7 +31,7 @@ #include #include -static ctkLogger logger ( "org.commontk.dicom.DICOMImage" ); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.dicom.DICOMImage")) struct Node; //------------------------------------------------------------------------------ @@ -129,7 +129,7 @@ QImage ctkDICOMImage::frame(int frame) const if (!image.loadFromData( buffer )) { - logger.error("QImage couldn't created"); + logger->error("QImage couldn't created"); } } } diff --git a/Libs/DICOM/Widgets/ctkDICOMItemTreeModel.h b/Libs/DICOM/Widgets/ctkDICOMItemTreeModel.h index 48e3519ef9..dfd4e495ff 100644 --- a/Libs/DICOM/Widgets/ctkDICOMItemTreeModel.h +++ b/Libs/DICOM/Widgets/ctkDICOMItemTreeModel.h @@ -32,6 +32,7 @@ class ctkDICOMItemTreeModelPrivate; /// \ingroup DICOM_Widgets class CTK_DICOM_WIDGETS_EXPORT ctkDICOMItemTreeModel : public QAbstractItemModel { + Q_OBJECT public: typedef QAbstractItemModel Superclass; explicit ctkDICOMItemTreeModel(QObject* parent=0); diff --git a/Libs/DICOM/Widgets/ctkDICOMItemView.cpp b/Libs/DICOM/Widgets/ctkDICOMItemView.cpp index 586d37c5c0..abfd6fff85 100644 --- a/Libs/DICOM/Widgets/ctkDICOMItemView.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMItemView.cpp @@ -47,7 +47,7 @@ #include #include -static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMItemView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.ctkDICOMItemView")) //-------------------------------------------------------------------------- class ctkDICOMItemViewPrivate @@ -272,7 +272,7 @@ void ctkDICOMItemView::addImage( DicomImage & dcmImage, bool defaultIntensity ) EI_Status result = dcmImage.getStatus(); if (result != EIS_Normal) { - logger.error(QString("Rendering of DICOM image failed for thumbnail failed: ") + DicomImage::getString(result)); + logger->error(QString("Rendering of DICOM image failed for thumbnail failed: ") + DicomImage::getString(result)); return; } // Select first window defined in image. If none, compute min/max window as best guess. @@ -328,7 +328,7 @@ void ctkDICOMItemView::addImage( DicomImage & dcmImage, bool defaultIntensity ) { if (!image.loadFromData( buffer )) { - logger.error("QImage couldn't created"); + logger->error("QImage couldn't created"); } } this->addImage(image); @@ -424,7 +424,7 @@ void ctkDICOMItemView::displayImage(int imageIndex){ } else { - logger.debug("out of index"); + logger->debug("out of index"); } } } diff --git a/Libs/DICOM/Widgets/ctkDICOMJobListWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMJobListWidget.cpp index f00ce0a2e2..19b397f612 100644 --- a/Libs/DICOM/Widgets/ctkDICOMJobListWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMJobListWidget.cpp @@ -37,11 +37,11 @@ #include "ctkDICOMJobListWidget.h" #include "ui_ctkDICOMJobListWidget.h" -static ctkLogger logger("org.commontk.DICOM.Widgets.DICOMJobListWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.DICOMJobListWidget")) //---------------------------------------------------------------------------- -class ProgressBarDelegate : public QStyledItemDelegate -{ +class ProgressBarDelegate : public QStyledItemDelegate { + Q_OBJECT public: using QStyledItemDelegate::QStyledItemDelegate; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const @@ -79,6 +79,7 @@ class ProgressBarDelegate : public QStyledItemDelegate //---------------------------------------------------------------------------- class QCenteredItemModel : public QStandardItemModel { + Q_OBJECT public: using QStandardItemModel::QStandardItemModel; @@ -114,18 +115,18 @@ class QCenteredItemModel : public QStandardItemModel }; Q_ENUM(Columns); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - QString getJobTypeAsString(QString jobClass, ctkDICOMJob::DICOMLevels dicomLevel); + QString getJobTypeAsString(const QString& jobClass, ctkDICOMJob::DICOMLevels dicomLevel); void addJob(const ctkDICOMJobDetail &td, ctkDICOMDatabase* database); - void updateJobStatus(const ctkDICOMJobDetail &td, const JobStatus &status); + void updateJobStatus(const ctkDICOMJobDetail &td, JobStatus status); void updateProgressBar(const ctkDICOMJobDetail &td, ctkDICOMDatabase* database); void setProgressBar(int row, const ctkDICOMJobDetail &td, ctkDICOMDatabase* database); - QStringList clearJobsByType(QString type); + QStringList clearJobsByType(const QString& type); QStringList clearCompletedJobs(); QStringList clearFailedJobs(); QStringList clearUserStoppedJobs(); QStringList clearQueuedJobs(); void removeRowsByJobUIDs(QStringList jobUIDs); - static Columns getColumnIndexFromString(QString columnString); + static Columns getColumnIndexFromString(const QString& columnString); static QString getColumnStringFromIndex(Columns columnIndex); }; @@ -143,14 +144,14 @@ QVariant QCenteredItemModel::data(const QModelIndex &index, int role) const } //---------------------------------------------------------------------------- -QString QCenteredItemModel::getJobTypeAsString(QString jobClass, ctkDICOMJob::DICOMLevels dicomLevel) +QString QCenteredItemModel::getJobTypeAsString(const QString& jobClass, ctkDICOMJob::DICOMLevels dicomLevel) { if (jobClass == "ctkDICOMQueryJob") { switch (dicomLevel) { case ctkDICOMJob::DICOMLevels::None: - logger.warn("ctkDICOMScheduler : DICOMLevels was not set."); + logger->warn("ctkDICOMScheduler : DICOMLevels was not set."); return ""; case ctkDICOMJob::DICOMLevels::Patients: return ctkDICOMJobListWidget::tr("Query patients"); @@ -167,7 +168,7 @@ QString QCenteredItemModel::getJobTypeAsString(QString jobClass, ctkDICOMJob::DI switch (dicomLevel) { case ctkDICOMJob::DICOMLevels::None: - logger.warn("ctkDICOMScheduler : DICOMLevels was not set."); + logger->warn("ctkDICOMScheduler : DICOMLevels was not set."); return ""; case ctkDICOMJob::DICOMLevels::Patients: return ctkDICOMJobListWidget::tr("Retrieve patients"); @@ -287,7 +288,7 @@ void QCenteredItemModel::addJob(const ctkDICOMJobDetail &td, } //---------------------------------------------------------------------------- -void QCenteredItemModel::updateJobStatus(const ctkDICOMJobDetail &td, const JobStatus &status) +void QCenteredItemModel::updateJobStatus(const ctkDICOMJobDetail &td, JobStatus status) { QList list = this->findItems(td.JobUID, Qt::MatchExactly, Columns::JobUID); if (list.empty()) @@ -436,7 +437,7 @@ void QCenteredItemModel::setProgressBar(int row, const ctkDICOMJobDetail &td, ct } //---------------------------------------------------------------------------- -QStringList QCenteredItemModel::clearJobsByType(QString type) +QStringList QCenteredItemModel::clearJobsByType(const QString& type) { #if (QT_VERSION >= QT_VERSION_CHECK(5,15,0)) QList list = this->findItems(type, Qt::MatchRegularExpression, Columns::Status); @@ -501,7 +502,7 @@ void QCenteredItemModel::removeRowsByJobUIDs(QStringList jobUIDs) } //---------------------------------------------------------------------------- -QCenteredItemModel::Columns QCenteredItemModel::getColumnIndexFromString(QString columnString) +QCenteredItemModel::Columns QCenteredItemModel::getColumnIndexFromString(const QString& columnString) { if (columnString == ctkDICOMJobListWidget::tr("Type")) { @@ -642,7 +643,7 @@ class ctkDICOMJobListWidgetPrivate: public Ui_ctkDICOMJobListWidget void init(); void disconnectScheduler(); void connectScheduler(); - void setFilterKeyColumn(QString); + void setFilterKeyColumn(const QString&); void updateJobsDetailsWidget(); void retryJobs(); @@ -818,7 +819,7 @@ void ctkDICOMJobListWidgetPrivate::connectScheduler() } //---------------------------------------------------------------------------- -void ctkDICOMJobListWidgetPrivate::setFilterKeyColumn(QString text) +void ctkDICOMJobListWidgetPrivate::setFilterKeyColumn(const QString& text) { int columnIndex = QCenteredItemModel::getColumnIndexFromString(text); this->proxyModel->setFilterKeyColumn(columnIndex); @@ -971,7 +972,7 @@ void ctkDICOMJobListWidgetPrivate::updateJobsDetailsWidget() if (count == 0) { - q->patientSelected(patientID, patientName, patientBirthDate); + emit q->patientSelected(patientID, patientName, patientBirthDate); } count++; } @@ -1069,7 +1070,7 @@ void ctkDICOMJobListWidget::setScheduler(QSharedPointer sched } //---------------------------------------------------------------------------- -void ctkDICOMJobListWidget::onJobInitialized(QVariant data) +void ctkDICOMJobListWidget::onJobInitialized(const QVariant& data) { Q_D(ctkDICOMJobListWidget); ctkDICOMJobDetail td = data.value(); @@ -1091,7 +1092,7 @@ void ctkDICOMJobListWidget::onJobInitialized(QVariant data) } //---------------------------------------------------------------------------- -void ctkDICOMJobListWidget::onJobQueued(QVariant data) +void ctkDICOMJobListWidget::onJobQueued(const QVariant& data) { Q_D(ctkDICOMJobListWidget); ctkDICOMJobDetail td = data.value(); @@ -1207,14 +1208,14 @@ void ctkDICOMJobListWidget::onJobUserStopped(QList datas) } //---------------------------------------------------------------------------- -void ctkDICOMJobListWidget::onFilterTextChanged(QString text) +void ctkDICOMJobListWidget::onFilterTextChanged(const QString& text) { Q_D(ctkDICOMJobListWidget); d->proxyModel->setFilterRegularExpression(text); } //---------------------------------------------------------------------------- -void ctkDICOMJobListWidget::onFilterColumnChanged(QString text) +void ctkDICOMJobListWidget::onFilterColumnChanged(const QString& text) { Q_D(ctkDICOMJobListWidget); d->setFilterKeyColumn(text); @@ -1325,11 +1326,7 @@ void ctkDICOMJobListWidget::onShowCompletedButtonToggled(bool toggled) if (!toggled) { filterText = QString("^%1$|^%2$|^%3$|^%4$|^%5$") - .arg(tr("initialized")) - .arg(tr("queued")) - .arg(tr("in-progress")) - .arg(tr("user-stopped")) - .arg(tr("failed")); + .arg(tr("initialized"), tr("queued"), tr("in-progress"), tr("user-stopped"), tr("failed")); } d->showCompletedProxyModel->setFilterRegularExpression(filterText); } @@ -1366,3 +1363,5 @@ void ctkDICOMJobListWidget::onClearAllButtonClicked() QApplication::restoreOverrideCursor(); } + +#include "ctkDICOMJobListWidget.moc" diff --git a/Libs/DICOM/Widgets/ctkDICOMJobListWidget.h b/Libs/DICOM/Widgets/ctkDICOMJobListWidget.h index af03e21fbd..aa59accf50 100644 --- a/Libs/DICOM/Widgets/ctkDICOMJobListWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMJobListWidget.h @@ -55,8 +55,8 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMJobListWidget : public QWidget void setScheduler(QSharedPointer scheduler); public Q_SLOTS: - void onJobInitialized(QVariant); - void onJobQueued(QVariant); + void onJobInitialized(const QVariant&); + void onJobQueued(const QVariant&); void onJobStarted(QList); void onJobAttemptFailed(QList); void onJobFailed(QList); @@ -64,8 +64,8 @@ public Q_SLOTS: void onJobFinished(QList); void onProgressJobDetail(QList); - void onFilterTextChanged(QString); - void onFilterColumnChanged(QString); + void onFilterTextChanged(const QString&); + void onFilterColumnChanged(const QString&); void onJobsViewSelectionChanged(); void onSelectAllButtonClicked(); diff --git a/Libs/DICOM/Widgets/ctkDICOMListenerWidget.h b/Libs/DICOM/Widgets/ctkDICOMListenerWidget.h index 0fdd723542..12f6f4ead9 100644 --- a/Libs/DICOM/Widgets/ctkDICOMListenerWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMListenerWidget.h @@ -29,8 +29,7 @@ class ctkDICOMListenerWidgetPrivate; /// \ingroup DICOM_Widgets -class CTK_DICOM_WIDGETS_EXPORT ctkDICOMListenerWidget : public QWidget -{ +class CTK_DICOM_WIDGETS_EXPORT ctkDICOMListenerWidget : public QWidget { Q_OBJECT public: typedef QWidget Superclass; diff --git a/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.cpp index 73c75d4dfe..f5d41a66dd 100644 --- a/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.cpp @@ -36,10 +36,10 @@ //CTK includes #include #include -static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMObjectListWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.ctkDICOMObjectListWidget")) -class qRecursiveTreeProxyFilter : public QSortFilterProxyModel -{ +class qRecursiveTreeProxyFilter : public QSortFilterProxyModel { + Q_OBJECT public: qRecursiveTreeProxyFilter(QObject *parent = NULL): QSortFilterProxyModel(parent) @@ -64,7 +64,7 @@ class qRecursiveTreeProxyFilter : public QSortFilterProxyModel } private: - bool filterAcceptsIndex(const QModelIndex index) const + bool filterAcceptsIndex(const QModelIndex& index) const { // Accept item if its tag, attribute, or value text matches QRegularExpression re = filterRegularExpression(); @@ -102,7 +102,7 @@ class ctkDICOMObjectListWidgetPrivate: public Ui_ctkDICOMObjectListWidget ~ctkDICOMObjectListWidgetPrivate(); void populateDICOMObjectTreeView(const QString& fileName); void setPathLabel(const QString& currentFile); - QString dicomObjectModelAsString(QAbstractItemModel* dicomObjectModel, QModelIndex parent = QModelIndex(), int indent = 0, QString rowPrefix = QString()); + QString dicomObjectModelAsString(QAbstractItemModel* dicomObjectModel, const QModelIndex& parent = QModelIndex(), int indent = 0, const QString& rowPrefix = QString()); void setFilterExpressionInModel(qRecursiveTreeProxyFilter* filterModel, const QString& expr); QString endOfLine; @@ -167,7 +167,7 @@ void ctkDICOMObjectListWidgetPrivate::setPathLabel(const QString& currentFile) } // -------------------------------------------------------------------------- -QString ctkDICOMObjectListWidgetPrivate::dicomObjectModelAsString(QAbstractItemModel* aDicomObjectModel, QModelIndex parent /*=QModelIndex()*/, int indent /*=0*/, QString rowPrefix /*=QString()*/) +QString ctkDICOMObjectListWidgetPrivate::dicomObjectModelAsString(QAbstractItemModel* aDicomObjectModel, const QModelIndex& parent /*=QModelIndex()*/, int indent /*=0*/, const QString& rowPrefix /*=QString()*/) { QString dump; QString indentString(indent, '\t'); // add tab characters, (indent) number of times @@ -229,8 +229,8 @@ ctkDICOMObjectListWidget::ctkDICOMObjectListWidget(QWidget* _parent):Superclass( d->currentPathLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); connect(d->fileSliderWidget, SIGNAL(valueChanged(double)), this, SLOT(updateWidget())); - connect(d->dcmObjectTreeView, SIGNAL(doubleClicked(const QModelIndex&)), - this, SLOT(itemDoubleClicked(const QModelIndex&))); + connect(d->dcmObjectTreeView, SIGNAL(doubleClicked(QModelIndex)), + this, SLOT(itemDoubleClicked(QModelIndex))); connect(d->copyPathPushButton , SIGNAL(clicked(bool)),this, SLOT(copyPath())); connect(d->expandAllPushButton, SIGNAL(clicked(bool)), d->dcmObjectTreeView, SLOT(expandAll())); @@ -300,7 +300,7 @@ QStringList ctkDICOMObjectListWidget::fileList() } // -------------------------------------------------------------------------- -void ctkDICOMObjectListWidget::openLookupUrl(QString tag) +void ctkDICOMObjectListWidget::openLookupUrl(const QString& tag) { QString lookupUrl = "http://dicomlookup.com/lookup.asp?sw=Tnumber&q=" + tag; QUrl url(lookupUrl); @@ -478,3 +478,5 @@ bool ctkDICOMObjectListWidget::isThumbnailVisible()const Q_D(const ctkDICOMObjectListWidget); return d->thumbnailVisible; } + +#include "ctkDICOMObjectListWidget.moc" diff --git a/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.h b/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.h index b7bd501451..d005a62b9e 100644 --- a/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMObjectListWidget.h @@ -57,7 +57,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMObjectListWidget : public QWidget QString metadataAsText(bool allFiles = false); /// Open DICOM tag definition in a web browser - void openLookupUrl(QString tag); + void openLookupUrl(const QString& tag); bool isThumbnailVisible()const; diff --git a/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.cpp b/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.cpp index f0665b3b99..4e95ccc9bb 100644 --- a/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.cpp @@ -155,7 +155,7 @@ void ctkDICOMPatientDelegate::paintTabMode(QPainter* painter, const QStyleOption } //------------------------------------------------------------------------------ -void ctkDICOMPatientDelegate::paintPatientsTabs(QPainter *painter, const QRect &rect, +void ctkDICOMPatientDelegate::paintPatientsTabs(QPainter *painter, QRect rect, const QStyleOptionViewItem &option, const QModelIndex &index) const { @@ -265,7 +265,7 @@ void ctkDICOMPatientDelegate::paintPatientsTabs(QPainter *painter, const QRect & } //------------------------------------------------------------------------------ -void ctkDICOMPatientDelegate::paintPatientHeader(QPainter *painter, const QRect &rect, +void ctkDICOMPatientDelegate::paintPatientHeader(QPainter *painter, QRect rect, const QStyleOptionViewItem &option, const QModelIndex &index) const { @@ -631,7 +631,7 @@ ctkDICOMPatientView::DisplayMode ctkDICOMPatientDelegate::getDisplayMode(const Q } //------------------------------------------------------------------------------ -QRect ctkDICOMPatientDelegate::patientsRect(const QRect &itemRect, +QRect ctkDICOMPatientDelegate::patientsRect(QRect itemRect, const QStyleOptionViewItem& option, const QModelIndex& index) const { @@ -667,7 +667,7 @@ QRect ctkDICOMPatientDelegate::patientsRect(const QRect &itemRect, } //------------------------------------------------------------------------------ -QRect ctkDICOMPatientDelegate::patientHeaderRect(const QRect& patientsRect, +QRect ctkDICOMPatientDelegate::patientHeaderRect(QRect patientsRect, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMPatientDelegate); @@ -761,7 +761,7 @@ int ctkDICOMPatientDelegate::patientHeaderHeight() const } //------------------------------------------------------------------------------ -QRect ctkDICOMPatientDelegate::contextMenuButtonRect(const QRect& itemRect, const QStyleOptionViewItem& option) const +QRect ctkDICOMPatientDelegate::contextMenuButtonRect(QRect itemRect, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMPatientDelegate); @@ -789,14 +789,14 @@ QRect ctkDICOMPatientDelegate::contextMenuButtonRect(const QRect& itemRect, cons } //------------------------------------------------------------------------------ -bool ctkDICOMPatientDelegate::isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect, const QStyleOptionViewItem& option) const +bool ctkDICOMPatientDelegate::isContextMenuButtonAt(QPoint pos, QRect itemRect, const QStyleOptionViewItem& option) const { QRect buttonRect = this->contextMenuButtonRect(itemRect, option); return buttonRect.contains(pos); } //------------------------------------------------------------------------------ -QRect ctkDICOMPatientDelegate::selectAllIconRect(const QRect& itemRect, const QStyleOptionViewItem& option) const +QRect ctkDICOMPatientDelegate::selectAllIconRect(QRect itemRect, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMPatientDelegate); @@ -810,7 +810,7 @@ QRect ctkDICOMPatientDelegate::selectAllIconRect(const QRect& itemRect, const QS } //------------------------------------------------------------------------------ -bool ctkDICOMPatientDelegate::isSelectAllIconAt(const QPoint& pos, const QRect& itemRect, const QStyleOptionViewItem& option) const +bool ctkDICOMPatientDelegate::isSelectAllIconAt(QPoint pos, QRect itemRect, const QStyleOptionViewItem& option) const { QRect iconRect = this->selectAllIconRect(itemRect, option); return iconRect.contains(pos); @@ -818,7 +818,7 @@ bool ctkDICOMPatientDelegate::isSelectAllIconAt(const QPoint& pos, const QRect& //------------------------------------------------------------------------------ void ctkDICOMPatientDelegate::paintContextMenuButton(QPainter* painter, - const QRect& itemRect, + QRect itemRect, const QModelIndex& index, const QStyleOptionViewItem& option) const { @@ -898,7 +898,7 @@ void ctkDICOMPatientDelegate::paintContextMenuButton(QPainter* painter, //------------------------------------------------------------------------------ void ctkDICOMPatientDelegate::paintSelectAllIcon(QPainter* painter, - const QRect& itemRect, + QRect itemRect, const QModelIndex& index, const QStyleOptionViewItem& option) const { diff --git a/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.h b/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.h index 80001df8b6..04ed1b4e88 100644 --- a/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.h +++ b/Libs/DICOM/Widgets/ctkDICOMPatientDelegate.h @@ -95,24 +95,24 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMPatientDelegate : public QStyledItemDeleg Q_INVOKABLE ctkDICOMPatientView::DisplayMode getDisplayMode(const QStyleOptionViewItem& option) const; /// Get the study area rect within the item rect - Q_INVOKABLE QRect patientsRect(const QRect& itemRect, const QStyleOptionViewItem& option, + Q_INVOKABLE QRect patientsRect(QRect itemRect, const QStyleOptionViewItem& option, const QModelIndex& index) const; /// Get the patient header rect within the item rect - Q_INVOKABLE QRect patientHeaderRect(const QRect& patientsRect, + Q_INVOKABLE QRect patientHeaderRect(QRect patientsRect, const QStyleOptionViewItem& option) const; /// Get the context menu button rect (3-dots) within the patient item - Q_INVOKABLE QRect contextMenuButtonRect(const QRect& itemRect, const QStyleOptionViewItem& option) const; + Q_INVOKABLE QRect contextMenuButtonRect(QRect itemRect, const QStyleOptionViewItem& option) const; /// Check if a point is within the context menu button area - Q_INVOKABLE bool isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect, const QStyleOptionViewItem& option) const; + Q_INVOKABLE bool isContextMenuButtonAt(QPoint pos, QRect itemRect, const QStyleOptionViewItem& option) const; /// Get the select all icon rect within the patient item - Q_INVOKABLE QRect selectAllIconRect(const QRect& itemRect, const QStyleOptionViewItem& option) const; + Q_INVOKABLE QRect selectAllIconRect(QRect itemRect, const QStyleOptionViewItem& option) const; /// Check if a point is within the select all icon area - Q_INVOKABLE bool isSelectAllIconAt(const QPoint& pos, const QRect& itemRect, const QStyleOptionViewItem& option) const; + Q_INVOKABLE bool isSelectAllIconAt(QPoint pos, QRect itemRect, const QStyleOptionViewItem& option) const; Q_SIGNALS: /// Emitted when spacing changes @@ -136,19 +136,19 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMPatientDelegate : public QStyledItemDeleg /// Paint for TabMode void paintTabMode(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; - void paintPatientsTabs(QPainter* painter, const QRect& rect, const QStyleOptionViewItem& option, + void paintPatientsTabs(QPainter* painter, QRect rect, const QStyleOptionViewItem& option, const QModelIndex& index) const; - void paintPatientHeader(QPainter* painter, const QRect &rect, + void paintPatientHeader(QPainter* painter, QRect rect, const QStyleOptionViewItem& option, const QModelIndex& index) const; /// Paint for ListMode void paintListMode(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; /// Paint the context menu button (3 dots) - void paintContextMenuButton(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintContextMenuButton(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the select all icon - void paintSelectAllIcon(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintSelectAllIcon(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; private: Q_DECLARE_PRIVATE(ctkDICOMPatientDelegate); diff --git a/Libs/DICOM/Widgets/ctkDICOMPatientView.cpp b/Libs/DICOM/Widgets/ctkDICOMPatientView.cpp index 0ede76152b..f52d64a79e 100644 --- a/Libs/DICOM/Widgets/ctkDICOMPatientView.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMPatientView.cpp @@ -2160,7 +2160,7 @@ void ctkDICOMPatientView::onStudiesSelectionChanged(const QStringList &selectedS } //------------------------------------------------------------------------------ -void ctkDICOMPatientView::onPatientContextMenuRequested(const QPoint& globalPos, const QModelIndex& clickedPatientIndex) +void ctkDICOMPatientView::onPatientContextMenuRequested(QPoint globalPos, const QModelIndex& clickedPatientIndex) { Q_D(ctkDICOMPatientView); diff --git a/Libs/DICOM/Widgets/ctkDICOMPatientView.h b/Libs/DICOM/Widgets/ctkDICOMPatientView.h index fe0c6bd13f..93659fb101 100644 --- a/Libs/DICOM/Widgets/ctkDICOMPatientView.h +++ b/Libs/DICOM/Widgets/ctkDICOMPatientView.h @@ -184,7 +184,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMPatientView : public QListView public slots: /// Called when context menu is requested from the delegate - void onPatientContextMenuRequested(const QPoint& globalPos, const QModelIndex& clickedPatientIndex); + void onPatientContextMenuRequested(QPoint globalPos, const QModelIndex& clickedPatientIndex); /// Called when select all icon is clicked from the delegate void onSelectAllIconClicked(const QModelIndex& patientIndex); diff --git a/Libs/DICOM/Widgets/ctkDICOMQueryResultsTabWidget.h b/Libs/DICOM/Widgets/ctkDICOMQueryResultsTabWidget.h index 53b7cd9021..a473c73e10 100644 --- a/Libs/DICOM/Widgets/ctkDICOMQueryResultsTabWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMQueryResultsTabWidget.h @@ -31,7 +31,7 @@ /// \ingroup DICOM_Widgets class CTK_DICOM_WIDGETS_EXPORT ctkDICOMQueryResultsTabWidget : public QTabWidget { - Q_OBJECT + Q_OBJECT public: typedef QTabWidget Superclass; explicit ctkDICOMQueryResultsTabWidget(QWidget* parent=0); diff --git a/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp index a0558b8a8f..3928aa2fa6 100644 --- a/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp @@ -44,7 +44,7 @@ #include "ctkDICOMQueryRetrieveWidget.h" #include "ui_ctkDICOMQueryRetrieveWidget.h" -static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryRetrieveWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.ctkDICOMQueryRetrieveWidget")) //---------------------------------------------------------------------------- class ctkDICOMQueryRetrieveWidgetPrivate: public Ui_ctkDICOMQueryRetrieveWidget @@ -87,13 +87,13 @@ ctkDICOMQueryRetrieveWidgetPrivate::ctkDICOMQueryRetrieveWidgetPrivate( //---------------------------------------------------------------------------- ctkDICOMQueryRetrieveWidgetPrivate::~ctkDICOMQueryRetrieveWidgetPrivate() { - foreach(ctkDICOMQuery* query, this->QueriesByServer.values()) + for (auto it = this->QueriesByServer.constBegin(); it != this->QueriesByServer.constEnd(); ++it) { - delete query; + delete it.value(); } - foreach(ctkDICOMRetrieve* retrieval, this->RetrievalsByStudyUID.values()) + for (auto it = this->RetrievalsByStudyUID.constBegin(); it != this->RetrievalsByStudyUID.constEnd(); ++it) { - delete retrieval; + delete it.value(); } } @@ -188,7 +188,7 @@ void ctkDICOMQueryRetrieveWidget::query() catch (const std::exception& e) { Q_UNUSED(e); - logger.error("Database error: " + d->QueryResultDatabase.lastError()); + logger->error("Database error: " + d->QueryResultDatabase.lastError()); d->QueryResultDatabase.closeDatabase(); return; } @@ -258,14 +258,15 @@ void ctkDICOMQueryRetrieveWidget::query() catch (const std::exception& e) { Q_UNUSED(e); - logger.error ( "Query error: " + parameters["Name"].toString() ); + logger->error ( "Query error: " + parameters["Name"].toString() ); progress.setLabelText("Query error: " + parameters["Name"].toString()); delete query; } d->QueriesByServer[d->CurrentServer] = query; - for (const auto & StudyAndSeriesInstanceUIDPair : query->studyAndSeriesInstanceUIDQueried() ) + const auto queriedPairs = query->studyAndSeriesInstanceUIDQueried(); + for (const auto & StudyAndSeriesInstanceUIDPair : queriedPairs ) { d->QueriesByStudyUID[StudyAndSeriesInstanceUIDPair.first] = query; d->StudyAndSeriesInstanceUIDPairList.push_back(qMakePair( StudyAndSeriesInstanceUIDPair.first, StudyAndSeriesInstanceUIDPair.second )); @@ -278,7 +279,7 @@ void ctkDICOMQueryRetrieveWidget::query() d->dicomTableManager->setDICOMDatabase(&(d->QueryResultDatabase)); } - d->RetrieveButton->setEnabled(d->QueriesByStudyUID.keys().size() != 0); + d->RetrieveButton->setEnabled(!d->QueriesByStudyUID.isEmpty()); // We would need to call database.updateDisplayedFields() now, but currently // updateDisplayedFields requires entries in the Image table and tag cache @@ -353,7 +354,7 @@ void ctkDICOMQueryRetrieveWidget::retrieve() ctkDICOMQuery* currentQuery = (queryIt == d->QueriesByStudyUID.end() ? nullptr : *queryIt); if (!currentQuery) { - logger.warn("Retrieve of series " + seriesUID + " failed. No query found for study " + studyUID + "."); + logger->warn("Retrieve of series " + seriesUID + " failed. No query found for study " + studyUID + "."); continue; } @@ -364,8 +365,8 @@ void ctkDICOMQueryRetrieveWidget::retrieve() retrieve->setHost( currentQuery->host() ); // TODO: check the model item to see if it is checked // for now, assume all studies queried and shown to the user will be retrieved - logger.debug("About to retrieve " + seriesUID + " from " + currentQuery->host()); - logger.info ( "Starting to retrieve" ); + logger->debug("About to retrieve " + seriesUID + " from " + currentQuery->host()); + logger->info ( "Starting to retrieve" ); if(d->UseProgressDialog) { @@ -379,12 +380,12 @@ void ctkDICOMQueryRetrieveWidget::retrieve() { // perform the retrieve QMap parameters; - foreach(QString server, d->QueriesByServer.keys()) + for (auto it = d->QueriesByServer.constBegin(); it != d->QueriesByServer.constEnd(); ++it) { - ctkDICOMQuery* query = d->QueriesByServer[server]; + ctkDICOMQuery* query = it.value(); if (query == currentQuery) { - parameters = d->ServerNodeWidget->serverNodeParameters(server); + parameters = d->ServerNodeWidget->serverNodeParameters(it.key()); break; } } @@ -401,7 +402,7 @@ void ctkDICOMQueryRetrieveWidget::retrieve() catch (const std::exception& e) { Q_UNUSED(e); - logger.error ( "Retrieve failed" ); + logger->error ( "Retrieve failed" ); if(d->UseProgressDialog) { if ( QMessageBox::question ( this, @@ -425,7 +426,7 @@ void ctkDICOMQueryRetrieveWidget::retrieve() this, SLOT(updateRetrieveProgress(int))); disconnect(&progress, SIGNAL(canceled()), retrieve, SLOT(cancel())); } - logger.info ( "Retrieve success" ); + logger->info ( "Retrieve success" ); } if (retrieve->dicomDatabase()) @@ -504,7 +505,7 @@ void ctkDICOMQueryRetrieveWidget::updateRetrieveProgress(int value) d->ProgressDialog->resize(targetWidth, d->ProgressDialog->height()); } d->ProgressDialog->setValue( value ); - logger.error(QString("setting value to %1").arg(value) ); + logger->error(QString("setting value to %1").arg(value) ); QApplication::processEvents(); } diff --git a/Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp index 809b1b2d9c..5f9d858269 100644 --- a/Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMQueryWidget.cpp @@ -30,7 +30,7 @@ //logger #include -static ctkLogger logger("org.commontk.DICOM.Widgets.ctkDICOMQueryWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.ctkDICOMQueryWidget")) //---------------------------------------------------------------------------- diff --git a/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.cpp b/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.cpp index 614acc7512..36b9acf100 100644 --- a/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.cpp @@ -183,7 +183,7 @@ QSize ctkDICOMSeriesDelegate::sizeHint(const QStyleOptionViewItem& option, const } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintThumbnail(QPainter* painter, const QRect& rect, const QModelIndex& index) const +void ctkDICOMSeriesDelegate::paintThumbnail(QPainter* painter, QRect rect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); @@ -279,7 +279,7 @@ void ctkDICOMSeriesDelegate::paintThumbnail(QPainter* painter, const QRect& rect } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintText(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const +void ctkDICOMSeriesDelegate::paintText(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMSeriesDelegate); @@ -470,7 +470,7 @@ void ctkDICOMSeriesDelegate::paintText(QPainter* painter, const QRect& rect, con } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintThumbnailOverlay(QPainter* painter, const QRect& rect, const QModelIndex& index) const +void ctkDICOMSeriesDelegate::paintThumbnailOverlay(QPainter* painter, QRect rect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); // Only paint modality overlay on thumbnail if thumbnail has been generated @@ -522,7 +522,7 @@ void ctkDICOMSeriesDelegate::paintThumbnailOverlay(QPainter* painter, const QRec } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintSelection(QPainter* painter, const QRect& rect, const QStyleOptionViewItem& option) const +void ctkDICOMSeriesDelegate::paintSelection(QPainter* painter, QRect rect, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMSeriesDelegate); @@ -571,14 +571,14 @@ void ctkDICOMSeriesDelegate::paintSelection(QPainter* painter, const QRect& rect } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::selectionRect(const QRect& itemRect) const +QRect ctkDICOMSeriesDelegate::selectionRect(QRect itemRect) const { Q_D(const ctkDICOMSeriesDelegate); return itemRect.marginsRemoved(QMargins(d->Spacing, d->Spacing, d->Spacing, d->Spacing)); } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::thumbnailRect(const QRect& itemRect, const QModelIndex& index) const +QRect ctkDICOMSeriesDelegate::thumbnailRect(QRect itemRect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); // Query the model for thumbnail size using the role @@ -606,7 +606,7 @@ QRect ctkDICOMSeriesDelegate::thumbnailRect(const QRect& itemRect, const QModelI } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::progressBarRect(const QRect& itemRect, const QModelIndex& index) const +QRect ctkDICOMSeriesDelegate::progressBarRect(QRect itemRect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); QRect thumbRect = this->thumbnailRect(itemRect, index); @@ -622,7 +622,7 @@ QRect ctkDICOMSeriesDelegate::progressBarRect(const QRect& itemRect, const QMode } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::textRect(const QRect& itemRect, const QModelIndex& index) const +QRect ctkDICOMSeriesDelegate::textRect(QRect itemRect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); QRect progressBarRect = this->progressBarRect(itemRect, index); @@ -676,7 +676,7 @@ int ctkDICOMSeriesDelegate::cornerRadius() const } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintContextMenuButton(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const +void ctkDICOMSeriesDelegate::paintContextMenuButton(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMSeriesDelegate); @@ -752,7 +752,7 @@ void ctkDICOMSeriesDelegate::paintContextMenuButton(QPainter* painter, const QRe } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::contextMenuButtonRect(const QRect& itemRect, const QModelIndex& index) const +QRect ctkDICOMSeriesDelegate::contextMenuButtonRect(QRect itemRect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); QRect thumbRect = this->thumbnailRect(itemRect, index); @@ -763,14 +763,14 @@ QRect ctkDICOMSeriesDelegate::contextMenuButtonRect(const QRect& itemRect, const } //------------------------------------------------------------------------------ -bool ctkDICOMSeriesDelegate::isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect, const QModelIndex& index) const +bool ctkDICOMSeriesDelegate::isContextMenuButtonAt(QPoint pos, QRect itemRect, const QModelIndex& index) const { QRect buttonRect = this->contextMenuButtonRect(itemRect, index); return buttonRect.contains(pos); } //------------------------------------------------------------------------------ -QRect ctkDICOMSeriesDelegate::statusButtonRect(const QRect &itemRect, const QModelIndex &index) const +QRect ctkDICOMSeriesDelegate::statusButtonRect(QRect itemRect, const QModelIndex &index) const { Q_D(const ctkDICOMSeriesDelegate); QRect thumbRect = this->thumbnailRect(itemRect, index); @@ -781,14 +781,14 @@ QRect ctkDICOMSeriesDelegate::statusButtonRect(const QRect &itemRect, const QMod } //------------------------------------------------------------------------------ -bool ctkDICOMSeriesDelegate::isStatusButtonAt(const QPoint &pos, const QRect &itemRect, const QModelIndex &index) const +bool ctkDICOMSeriesDelegate::isStatusButtonAt(QPoint pos, QRect itemRect, const QModelIndex &index) const { QRect buttonRect = this->statusButtonRect(itemRect, index); return buttonRect.contains(pos); } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintStatusButton(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const +void ctkDICOMSeriesDelegate::paintStatusButton(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMSeriesDelegate); @@ -909,7 +909,7 @@ void ctkDICOMSeriesDelegate::paintStatusButton(QPainter* painter, const QRect& r } //------------------------------------------------------------------------------ -void ctkDICOMSeriesDelegate::paintProgressBar(QPainter* painter, const QRect& rect, const QModelIndex& index) const +void ctkDICOMSeriesDelegate::paintProgressBar(QPainter* painter, QRect rect, const QModelIndex& index) const { Q_D(const ctkDICOMSeriesDelegate); diff --git a/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.h b/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.h index 2dd815110f..389215bd02 100644 --- a/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.h +++ b/Libs/DICOM/Widgets/ctkDICOMSeriesDelegate.h @@ -71,16 +71,16 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMSeriesDelegate : public QStyledItemDelega int cornerRadius() const; /// Check if a point is within the context menu button area - bool isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect, const QModelIndex& index) const; + bool isContextMenuButtonAt(QPoint pos, QRect itemRect, const QModelIndex& index) const; /// Get the context menu button rect - QRect contextMenuButtonRect(const QRect& itemRect, const QModelIndex& index) const; + QRect contextMenuButtonRect(QRect itemRect, const QModelIndex& index) const; /// Check if a point is within the status button area - bool isStatusButtonAt(const QPoint& pos, const QRect& itemRect, const QModelIndex& index) const; + bool isStatusButtonAt(QPoint pos, QRect itemRect, const QModelIndex& index) const; /// Get the status button rect - QRect statusButtonRect(const QRect& itemRect, const QModelIndex& index) const; + QRect statusButtonRect(QRect itemRect, const QModelIndex& index) const; Q_SIGNALS: /// Emitted when spacing changes @@ -91,37 +91,37 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMSeriesDelegate : public QStyledItemDelega protected: /// Paint the thumbnail area - void paintThumbnail(QPainter* painter, const QRect& rect, const QModelIndex& index) const; + void paintThumbnail(QPainter* painter, QRect rect, const QModelIndex& index) const; /// Paint the text information - void paintText(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintText(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint overlay information on thumbnail - void paintThumbnailOverlay(QPainter* painter, const QRect& rect, const QModelIndex& index) const; + void paintThumbnailOverlay(QPainter* painter, QRect rect, const QModelIndex& index) const; /// Paint cloud/downloading status button in top-right corner of thumbnail - void paintStatusButton(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintStatusButton(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint progress bar below thumbnail when downloading - void paintProgressBar(QPainter* painter, const QRect& rect, const QModelIndex& index) const; + void paintProgressBar(QPainter* painter, QRect rect, const QModelIndex& index) const; /// Paint the selection state - void paintSelection(QPainter* painter, const QRect& rect, const QStyleOptionViewItem& option) const; + void paintSelection(QPainter* painter, QRect rect, const QStyleOptionViewItem& option) const; /// Paint the context menu button (3 dots) when hovering or when context menu is active - void paintContextMenuButton(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintContextMenuButton(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Get the selection highlight rect (contentRect minus selection margins) - QRect selectionRect(const QRect& itemRect) const; + QRect selectionRect(QRect itemRect) const; /// Get the thumbnail rect within the item rect - QRect thumbnailRect(const QRect& itemRect, const QModelIndex& index) const; + QRect thumbnailRect(QRect itemRect, const QModelIndex& index) const; /// Get the progress bar rect within the item rect - QRect progressBarRect(const QRect& itemRect, const QModelIndex& index) const; + QRect progressBarRect(QRect itemRect, const QModelIndex& index) const; /// Get the text rect within the item rect - QRect textRect(const QRect& itemRect, const QModelIndex& index) const; + QRect textRect(QRect itemRect, const QModelIndex& index) const; private: Q_DECLARE_PRIVATE(ctkDICOMSeriesDelegate); diff --git a/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.cpp b/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.cpp index 1a900bfcdd..179b8e3eb2 100644 --- a/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.cpp @@ -831,7 +831,7 @@ void ctkDICOMSeriesTableView::onSeriesSelectionChanged() } //------------------------------------------------------------------------------ -void ctkDICOMSeriesTableView::onDelegateContextMenuRequested(const QPoint& globalPos, const QModelIndex& index) +void ctkDICOMSeriesTableView::onDelegateContextMenuRequested(QPoint globalPos, const QModelIndex& index) { Q_D(ctkDICOMSeriesTableView); diff --git a/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.h b/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.h index 4567007b35..067eca961f 100644 --- a/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.h +++ b/Libs/DICOM/Widgets/ctkDICOMSeriesTableView.h @@ -177,7 +177,7 @@ protected slots: void onModelReset(); /// Called when delegate requests context menu - void onDelegateContextMenuRequested(const QPoint& globalPos, const QModelIndex& index); + void onDelegateContextMenuRequested(QPoint globalPos, const QModelIndex& index); signals: /// Emitted when the mouse enters the study list view diff --git a/Libs/DICOM/Widgets/ctkDICOMServerNodeWidget2.cpp b/Libs/DICOM/Widgets/ctkDICOMServerNodeWidget2.cpp index b633e4332e..57509098ad 100644 --- a/Libs/DICOM/Widgets/ctkDICOMServerNodeWidget2.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMServerNodeWidget2.cpp @@ -54,7 +54,7 @@ #include "ctkDICOMServerNodeWidget2.h" #include "ui_ctkDICOMServerNodeWidget2.h" -static ctkLogger logger("org.commontk.DICOM.Widgets.DICOMServerNodeWidget2"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.DICOMServerNodeWidget2")) QColor ctkDICOMServerNodeWidget2DefaultColor(Qt::white); QColor ctkDICOMServerNodeWidget2DarkModeDefaultColor(50, 50, 50); QColor ctkDICOMServerNodeWidget2ModifiedColor(Qt::darkYellow); @@ -62,8 +62,8 @@ QColor ctkDICOMServerNodeWidget2ServerSuccesColor(Qt::darkGreen); QColor ctkDICOMServerNodeWidget2ServerProgressColor(Qt::darkCyan); QColor ctkDICOMServerNodeWidget2ServerFailedColor(Qt::darkRed); -class QSelectionColorStyledItemDelegate : public QStyledItemDelegate -{ +class QSelectionColorStyledItemDelegate : public QStyledItemDelegate { + Q_OBJECT public: using QStyledItemDelegate::QStyledItemDelegate; void initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const override @@ -90,6 +90,7 @@ class QSelectionColorStyledItemDelegate : public QStyledItemDelegate class QCheckStateStyledItemDelegate : public QStyledItemDelegate { + Q_OBJECT public: using QStyledItemDelegate::QStyledItemDelegate; void initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const override @@ -270,7 +271,7 @@ class ctkDICOMServerNodeWidget2Private : public Ui_ctkDICOMServerNodeWidget2 const QString& status); void settingsModified(); - void restoreFocus(QModelIndexList selectedIndexes, + void restoreFocus(const QModelIndexList& selectedIndexes, int horizontalScrollBarValue, int verticalScrollBarValue, bool resetServerStatus = true); @@ -578,7 +579,7 @@ int ctkDICOMServerNodeWidget2Private::addServerNode(const QMapgetServerNodeRowFromConnectionName(node["Name"].toString()) != -1) { - logger.warn("addServerNode failed: the server has a duplicate. The connection name has to be unique \n"); + logger->warn("addServerNode failed: the server has a duplicate. The connection name has to be unique \n"); return -1; } @@ -698,7 +699,7 @@ int ctkDICOMServerNodeWidget2Private::addServerNode(ctkDICOMServer* server) if (this->getServerNodeRowFromConnectionName(server->connectionName()) != -1) { - logger.debug("addServerNode failed: the server has a duplicate. The connection name has to be unique \n"); + logger->debug("addServerNode failed: the server has a duplicate. The connection name has to be unique \n"); return -1; } @@ -932,7 +933,7 @@ void ctkDICOMServerNodeWidget2Private::settingsModified() } //---------------------------------------------------------------------------- -void ctkDICOMServerNodeWidget2Private::restoreFocus(QModelIndexList selectedIndexes, +void ctkDICOMServerNodeWidget2Private::restoreFocus(const QModelIndexList& selectedIndexes, int horizontalScrollBarValue, int verticalScrollBarValue, bool resetServerStatus) @@ -1664,7 +1665,7 @@ int ctkDICOMServerNodeWidget2::serversCount() Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("serversCount failed, no task pool has been set. \n"); + logger->error("serversCount failed, no task pool has been set. \n"); return -1; } @@ -1677,7 +1678,7 @@ ctkDICOMServer* ctkDICOMServerNodeWidget2::server(int id) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("server failed, no task pool has been set. \n"); + logger->error("server failed, no task pool has been set. \n"); return nullptr; } @@ -1690,7 +1691,7 @@ ctkDICOMServer* ctkDICOMServerNodeWidget2::server(const QString& connectionName) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("server failed, no task pool has been set. \n"); + logger->error("server failed, no task pool has been set. \n"); return nullptr; } @@ -1703,7 +1704,7 @@ int ctkDICOMServerNodeWidget2::addServer(ctkDICOMServer* server) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("addServer failed, no task pool has been set. \n"); + logger->error("addServer failed, no task pool has been set. \n"); return -1; } @@ -1718,7 +1719,7 @@ void ctkDICOMServerNodeWidget2::removeServer(const QString& connectionName) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("removeServer failed, no task pool has been set. \n"); + logger->error("removeServer failed, no task pool has been set. \n"); return; } @@ -1731,7 +1732,7 @@ void ctkDICOMServerNodeWidget2::removeServer(int id) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("removeServer failed, no task pool has been set. \n"); + logger->error("removeServer failed, no task pool has been set. \n"); return; } @@ -1747,7 +1748,7 @@ void ctkDICOMServerNodeWidget2::removeAllServers() Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("removeAllServers failed, no task pool has been set. \n"); + logger->error("removeAllServers failed, no task pool has been set. \n"); return; } @@ -1762,7 +1763,7 @@ QString ctkDICOMServerNodeWidget2::getServerNameFromIndex(int id) Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("getServerNameFromIndex failed, no task pool has been set. \n"); + logger->error("getServerNameFromIndex failed, no task pool has been set. \n"); return ""; } @@ -1775,7 +1776,7 @@ int ctkDICOMServerNodeWidget2::getServerIndexFromName(const QString& connectionN Q_D(ctkDICOMServerNodeWidget2); if (!d->Scheduler) { - logger.error("getServerIndexFromName failed, no task pool has been set. \n"); + logger->error("getServerIndexFromName failed, no task pool has been set. \n"); return -1; } @@ -1797,15 +1798,17 @@ void ctkDICOMServerNodeWidget2::stopAllJobs() } //---------------------------------------------------------------------------- -ctkCollapsibleGroupBox *ctkDICOMServerNodeWidget2::storageCollapsibleGroupBox() const +ctkCollapsibleGroupBox* ctkDICOMServerNodeWidget2::storageCollapsibleGroupBox() const { Q_D(const ctkDICOMServerNodeWidget2); return d->StorageCollapsibleGroupBox; } //---------------------------------------------------------------------------- -ctkCollapsibleGroupBox *ctkDICOMServerNodeWidget2::serversCollapsibleGroupBox() const +ctkCollapsibleGroupBox* ctkDICOMServerNodeWidget2::serversCollapsibleGroupBox() const { Q_D(const ctkDICOMServerNodeWidget2); return d->ServersCollapsibleGroupBox; } + +#include "ctkDICOMServerNodeWidget2.moc" diff --git a/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.cpp b/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.cpp index fb91f0f12c..69aa2472ff 100644 --- a/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.cpp @@ -228,7 +228,7 @@ int ctkDICOMStudyDelegate::expandedHeight() const //------------------------------------------------------------------------------ void ctkDICOMStudyDelegate::paintStudyHeader(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option, int numberOfSeriesSelected) const @@ -259,7 +259,7 @@ void ctkDICOMStudyDelegate::paintStudyHeader(QPainter* painter, } //------------------------------------------------------------------------------ -void ctkDICOMStudyDelegate::paintCollapseIndicator(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const +void ctkDICOMStudyDelegate::paintCollapseIndicator(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMStudyDelegate); @@ -320,7 +320,7 @@ void ctkDICOMStudyDelegate::paintCollapseIndicator(QPainter* painter, const QRec } //------------------------------------------------------------------------------ -void ctkDICOMStudyDelegate::paintStudyInfo(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const +void ctkDICOMStudyDelegate::paintStudyInfo(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { Q_D(const ctkDICOMStudyDelegate); painter->save(); @@ -424,7 +424,7 @@ void ctkDICOMStudyDelegate::paintStudyInfo(QPainter* painter, const QRect& rect, } //------------------------------------------------------------------------------ -void ctkDICOMStudyDelegate::paintSeriesInfo(QPainter* painter, const QRect& rect, const QModelIndex& index, int numberOfSeriesSelected) const +void ctkDICOMStudyDelegate::paintSeriesInfo(QPainter* painter, QRect rect, const QModelIndex& index, int numberOfSeriesSelected) const { painter->save(); @@ -470,7 +470,7 @@ void ctkDICOMStudyDelegate::paintSeriesInfo(QPainter* painter, const QRect& rect //------------------------------------------------------------------------------ void ctkDICOMStudyDelegate::paintSelectAllIcon(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { @@ -540,7 +540,7 @@ void ctkDICOMStudyDelegate::paintSelectAllIcon(QPainter* painter, //------------------------------------------------------------------------------ void ctkDICOMStudyDelegate::paintCardBackground(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { @@ -600,21 +600,21 @@ void ctkDICOMStudyDelegate::paintCardBackground(QPainter* painter, } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::studyCardRect(const QRect& itemRect) const +QRect ctkDICOMStudyDelegate::studyCardRect(QRect itemRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(itemRect.left() + d->Spacing * 0.5, itemRect.top() + d->Spacing * 0.5, itemRect.width() - d->Spacing * 2, itemRect.height() - d->Spacing); } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::studyHeaderRect(const QRect& itemRect) const +QRect ctkDICOMStudyDelegate::studyHeaderRect(QRect itemRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(itemRect.left() + d->Spacing * 0.5, itemRect.top() + d->Spacing * 0.5, itemRect.width() - d->Spacing, d->CollapsedHeight); } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::collapseIndicatorRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::collapseIndicatorRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(headerRect.left() + d->Spacing, @@ -623,7 +623,7 @@ QRect ctkDICOMStudyDelegate::collapseIndicatorRect(const QRect& headerRect) cons } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::studyInfoRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::studyInfoRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); QRect collapseRect = this->collapseIndicatorRect(headerRect); @@ -637,7 +637,7 @@ QRect ctkDICOMStudyDelegate::studyInfoRect(const QRect& headerRect) const } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::seriesInfoRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::seriesInfoRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(headerRect.right() - d->seriesInfoWidth - d->Spacing - d->IconSize * 2, @@ -646,7 +646,7 @@ QRect ctkDICOMStudyDelegate::seriesInfoRect(const QRect& headerRect) const } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::seriesAreaRect(const QRect& itemRect, const QModelIndex& index) const +QRect ctkDICOMStudyDelegate::seriesAreaRect(QRect itemRect, const QModelIndex& index) const { Q_D(const ctkDICOMStudyDelegate); if (this->isStudyCollapsed(index)) @@ -669,7 +669,7 @@ QRect ctkDICOMStudyDelegate::seriesAreaRect(const QRect& itemRect, const QModelI } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::selectAllIconRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::selectAllIconRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(headerRect.right() - d->Spacing * 10 - d->IconSize * 2, @@ -825,7 +825,7 @@ QString ctkDICOMStudyDelegate::formatStudyTime(const QString& time) const } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::contextMenuButtonRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::contextMenuButtonRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(headerRect.right() - d->Spacing * 9 - d->IconSize, @@ -835,7 +835,7 @@ QRect ctkDICOMStudyDelegate::contextMenuButtonRect(const QRect& headerRect) cons } //------------------------------------------------------------------------------ -QRect ctkDICOMStudyDelegate::operationStatusButtonRect(const QRect& headerRect) const +QRect ctkDICOMStudyDelegate::operationStatusButtonRect(QRect headerRect) const { Q_D(const ctkDICOMStudyDelegate); return QRect(headerRect.right() - d->Spacing * 8, @@ -845,7 +845,7 @@ QRect ctkDICOMStudyDelegate::operationStatusButtonRect(const QRect& headerRect) } //------------------------------------------------------------------------------ -bool ctkDICOMStudyDelegate::isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect) const +bool ctkDICOMStudyDelegate::isContextMenuButtonAt(QPoint pos, QRect itemRect) const { QRect headerRect = this->studyHeaderRect(itemRect); QRect buttonRect = this->contextMenuButtonRect(headerRect); @@ -854,7 +854,7 @@ bool ctkDICOMStudyDelegate::isContextMenuButtonAt(const QPoint& pos, const QRect //------------------------------------------------------------------------------ void ctkDICOMStudyDelegate::paintContextMenuButton(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { @@ -924,7 +924,7 @@ void ctkDICOMStudyDelegate::paintContextMenuButton(QPainter* painter, //------------------------------------------------------------------------------ void ctkDICOMStudyDelegate::paintOperationStatusButton(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const { diff --git a/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.h b/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.h index f08759ae06..f8a02cb64a 100644 --- a/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.h +++ b/Libs/DICOM/Widgets/ctkDICOMStudyDelegate.h @@ -88,37 +88,37 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyDelegate : public QStyledItemDelegat Q_INVOKABLE bool isStudyCollapsed(const QModelIndex& index) const; /// Get the series area rect within the item rect (when expanded) - Q_INVOKABLE QRect seriesAreaRect(const QRect& itemRect, const QModelIndex& index) const; + Q_INVOKABLE QRect seriesAreaRect(QRect itemRect, const QModelIndex& index) const; /// Calculate the required height for the series area based on series count, grid columns, and thumbnail size Q_INVOKABLE int calculateSeriesAreaHeight(const QModelIndex& studyIndex) const; /// Get the study header rect within the item rect - Q_INVOKABLE QRect studyCardRect(const QRect& itemRect) const; + Q_INVOKABLE QRect studyCardRect(QRect itemRect) const; /// Get the study header rect within the item rect - Q_INVOKABLE QRect studyHeaderRect(const QRect& itemRect) const; + Q_INVOKABLE QRect studyHeaderRect(QRect itemRect) const; /// Get the study info rect within the header rect - Q_INVOKABLE QRect studyInfoRect(const QRect& headerRect) const; + Q_INVOKABLE QRect studyInfoRect(QRect headerRect) const; /// Get the collapse indicator rect within the header rect - Q_INVOKABLE QRect collapseIndicatorRect(const QRect& headerRect) const; + Q_INVOKABLE QRect collapseIndicatorRect(QRect headerRect) const; /// Get the series info rect within the header rect - Q_INVOKABLE QRect seriesInfoRect(const QRect& headerRect) const; + Q_INVOKABLE QRect seriesInfoRect(QRect headerRect) const; /// Get the select all icon rect within the header rect - Q_INVOKABLE QRect selectAllIconRect(const QRect& headerRect) const; + Q_INVOKABLE QRect selectAllIconRect(QRect headerRect) const; /// Get the context menu button rect within the header rect - Q_INVOKABLE QRect contextMenuButtonRect(const QRect& headerRect) const; + Q_INVOKABLE QRect contextMenuButtonRect(QRect headerRect) const; /// Get the operation status button rect within the header rect - Q_INVOKABLE QRect operationStatusButtonRect(const QRect& headerRect) const; + Q_INVOKABLE QRect operationStatusButtonRect(QRect headerRect) const; /// Check if a point is within the context menu button area - Q_INVOKABLE bool isContextMenuButtonAt(const QPoint& pos, const QRect& itemRect) const; + Q_INVOKABLE bool isContextMenuButtonAt(QPoint pos, QRect itemRect) const; Q_SIGNALS: /// Emitted when spacing changes @@ -136,41 +136,41 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyDelegate : public QStyledItemDelegat protected: /// Paint the study header area void paintStudyHeader(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option, int numberOfSeriesSelected) const; /// Paint the collapse/expand indicator - void paintCollapseIndicator(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintCollapseIndicator(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the study information (description, date, modalities) - void paintStudyInfo(QPainter* painter, const QRect& rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; + void paintStudyInfo(QPainter* painter, QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the series count and status - void paintSeriesInfo(QPainter* painter, const QRect& rect, const QModelIndex& index, int numberOfSeriesSelected) const; + void paintSeriesInfo(QPainter* painter, QRect rect, const QModelIndex& index, int numberOfSeriesSelected) const; /// Paint the series count and status void paintSelectAllIcon(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the context menu button (3 dots) when hovering void paintContextMenuButton(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the operation status button (progress, error, etc.) void paintOperationStatusButton(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; /// Paint the card background container void paintCardBackground(QPainter* painter, - const QRect& rect, + QRect rect, const QModelIndex& index, const QStyleOptionViewItem& option) const; diff --git a/Libs/DICOM/Widgets/ctkDICOMStudyListView.cpp b/Libs/DICOM/Widgets/ctkDICOMStudyListView.cpp index 9ec6775916..7b83907496 100644 --- a/Libs/DICOM/Widgets/ctkDICOMStudyListView.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMStudyListView.cpp @@ -951,7 +951,7 @@ void ctkDICOMStudyListView::clean() } //------------------------------------------------------------------------------ -void ctkDICOMStudyListView::refreshStudiesModels(QList models) +void ctkDICOMStudyListView::refreshStudiesModels(const QList& models) { Q_D(ctkDICOMStudyListView); QAbstractItemModel* model = this->model(); @@ -1737,7 +1737,7 @@ void ctkDICOMStudyListView::onSeriesSelectionChanged(const QString& studyInstanc } //------------------------------------------------------------------------------ -void ctkDICOMStudyListView::onSeriesContextMenuRequested(const QPoint& globalPos, const QStringList& selectedSeriesInstanceUIDs) +void ctkDICOMStudyListView::onSeriesContextMenuRequested(QPoint globalPos, const QStringList& selectedSeriesInstanceUIDs) { Q_D(ctkDICOMStudyListView); Q_UNUSED(selectedSeriesInstanceUIDs); @@ -1765,7 +1765,7 @@ void ctkDICOMStudyListView::onSeriesContextMenuRequested(const QPoint& globalPos } //------------------------------------------------------------------------------ -void ctkDICOMStudyListView::onStudyContextMenuRequested(const QPoint& globalPos, const QModelIndex& studyIndex) +void ctkDICOMStudyListView::onStudyContextMenuRequested(QPoint globalPos, const QModelIndex& studyIndex) { Q_D(ctkDICOMStudyListView); @@ -2027,7 +2027,7 @@ void ctkDICOMStudyListView::selectAllSeries(QItemSelectionModel::SelectionFlags } //------------------------------------------------------------------------------ -void ctkDICOMStudyListView::selectAllSeriesByPatient(QString patientUID, +void ctkDICOMStudyListView::selectAllSeriesByPatient(const QString& patientUID, QItemSelectionModel::SelectionFlags selectionMode) { Q_D(ctkDICOMStudyListView); @@ -2073,7 +2073,7 @@ void ctkDICOMStudyListView::selectSeriesInstanceUIDs(const QStringList &seriesIn } //------------------------------------------------------------------------------ -QStringList ctkDICOMStudyListView::selectedStudiesInstanceUIDsByPatient(QString patientUID) const +QStringList ctkDICOMStudyListView::selectedStudiesInstanceUIDsByPatient(const QString& patientUID) const { if (!this->model()) { @@ -2108,7 +2108,7 @@ QStringList ctkDICOMStudyListView::selectedStudiesInstanceUIDsByPatient(QString } //------------------------------------------------------------------------------ -QStringList ctkDICOMStudyListView::selectedSeriesInstanceUIDsByPatient(QString patientUID) const +QStringList ctkDICOMStudyListView::selectedSeriesInstanceUIDsByPatient(const QString& patientUID) const { if (!this->model()) { @@ -2179,13 +2179,13 @@ QStringList ctkDICOMStudyListView::selectedSeriesInstanceUIDs() const } //------------------------------------------------------------------------------ -int ctkDICOMStudyListView::numberOfStudiesSelectedByPatient(QString patientUID) const +int ctkDICOMStudyListView::numberOfStudiesSelectedByPatient(const QString& patientUID) const { return this->selectedStudiesInstanceUIDsByPatient(patientUID).count(); } //------------------------------------------------------------------------------ -int ctkDICOMStudyListView::numberOfSeriesSelectedByPatient(QString patientUID) const +int ctkDICOMStudyListView::numberOfSeriesSelectedByPatient(const QString& patientUID) const { return this->selectedSeriesInstanceUIDsByPatient(patientUID).count(); } diff --git a/Libs/DICOM/Widgets/ctkDICOMStudyListView.h b/Libs/DICOM/Widgets/ctkDICOMStudyListView.h index 427c6ccdc8..e84b65ea6b 100644 --- a/Libs/DICOM/Widgets/ctkDICOMStudyListView.h +++ b/Libs/DICOM/Widgets/ctkDICOMStudyListView.h @@ -73,7 +73,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView Q_INVOKABLE QStringList selectedStudyInstanceUIDs() const; /// Get selected studies for a patient - Q_INVOKABLE QStringList selectedStudiesInstanceUIDsByPatient(QString patientUID) const; + Q_INVOKABLE QStringList selectedStudiesInstanceUIDsByPatient(const QString& patientUID) const; /// Get current study instance UID Q_INVOKABLE QString currentStudyInstanceUID() const; @@ -83,10 +83,10 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView QItemSelectionModel::SelectionFlag flag = QItemSelectionModel::Select); /// Return the numer of selected series for a patient - Q_INVOKABLE int numberOfStudiesSelectedByPatient(QString patientUID) const; + Q_INVOKABLE int numberOfStudiesSelectedByPatient(const QString& patientUID) const; /// Get selected series for a patient - Q_INVOKABLE QStringList selectedSeriesInstanceUIDsByPatient(QString patientUID) const; + Q_INVOKABLE QStringList selectedSeriesInstanceUIDsByPatient(const QString& patientUID) const; /// Get selected series for a study Q_INVOKABLE QStringList selectedSeriesInstanceUIDsByStudy(const QModelIndex& studyIndex) const; @@ -98,7 +98,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView Q_INVOKABLE void selectAllSeries(QItemSelectionModel::SelectionFlags selectionMode = QItemSelectionModel::Select); /// Select select all series for a patient - Q_INVOKABLE void selectAllSeriesByPatient(QString patientUID, + Q_INVOKABLE void selectAllSeriesByPatient(const QString& patientUID, QItemSelectionModel::SelectionFlags selectionMode = QItemSelectionModel::Select); /// Toggle select all series for a study @@ -109,7 +109,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView Q_INVOKABLE void selectSeriesInstanceUIDs(const QStringList& seriesInstanceUIDs); /// Return the numer of selected series for a patient - Q_INVOKABLE int numberOfSeriesSelectedByPatient(QString patientUID) const; + Q_INVOKABLE int numberOfSeriesSelectedByPatient(const QString& patientUID) const; /// Return the numer of selected series for a study Q_INVOKABLE int numberOfSeriesSelectedByStudy(const QModelIndex& studyIndex) const; @@ -196,7 +196,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView Q_INVOKABLE void clean(); /// Refresh all studies models - Q_INVOKABLE void refreshStudiesModels(QList models = QList()); + Q_INVOKABLE void refreshStudiesModels(const QList& models = QList()); ///@} /// \name Series view management @@ -205,12 +205,12 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMStudyListView : public QListView /// The view is owned and managed by this study list view Q_INVOKABLE ctkDICOMSeriesTableView* createSeriesViewForStudy(const QModelIndex& studyIndex); Q_INVOKABLE ctkDICOMSeriesTableView* createSeriesViewForStudy(const QString& studyInstanceUID); - Q_INVOKABLE QMap createAllSeriesView(); + Q_INVOKABLE QMap createAllSeriesView(); /// Get a series table view for the given study Q_INVOKABLE ctkDICOMSeriesTableView* getSeriesViewForStudy(const QModelIndex& studyIndex); Q_INVOKABLE ctkDICOMSeriesTableView* getSeriesViewForStudy(const QString& studyInstanceUID); - Q_INVOKABLE QMap getAllSeriesView(); + Q_INVOKABLE QMap getAllSeriesView(); /// Remove and cleanup series view for a study Q_INVOKABLE void removeSeriesViewForStudy(const QModelIndex& studyIndex); @@ -229,7 +229,7 @@ public slots: void setStudyCollapsed(const QString& studyInstanceUID, bool collapsed); /// Called when study context menu is requested from delegate (3-dot button click) - void onStudyContextMenuRequested(const QPoint& globalPos, const QModelIndex& studyIndex); + void onStudyContextMenuRequested(QPoint globalPos, const QModelIndex& studyIndex); /// Called when scroll bar value changes void onScrollBarValueChanged(int value); @@ -285,7 +285,7 @@ protected slots: void onModelReset(); /// Called when series context menu is requested - void onSeriesContextMenuRequested(const QPoint& globalPos, const QStringList& selectedSeriesInstanceUIDs); + void onSeriesContextMenuRequested(QPoint globalPos, const QStringList& selectedSeriesInstanceUIDs); /// Called when series grid columns change (requires study item size hint update) void onSeriesGridColumnsChanged(const QString& studyInstanceUID); diff --git a/Libs/DICOM/Widgets/ctkDICOMTableManager.cpp b/Libs/DICOM/Widgets/ctkDICOMTableManager.cpp index 7e7981c35d..839a70942a 100644 --- a/Libs/DICOM/Widgets/ctkDICOMTableManager.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMTableManager.cpp @@ -113,38 +113,38 @@ void ctkDICOMTableManagerPrivate::init() q, SLOT(showSeriesFilterActiveWarning(bool))); // For propagating patient selection changes - QObject::connect(this->patientsTable, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), - q, SIGNAL(patientsSelectionChanged(const QItemSelection&, const QItemSelection&))); - QObject::connect(this->patientsTable, SIGNAL(selectionChanged(const QStringList&)), - q, SIGNAL(patientsSelectionChanged(const QStringList&))); + QObject::connect(this->patientsTable, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + q, SIGNAL(patientsSelectionChanged(QItemSelection,QItemSelection))); + QObject::connect(this->patientsTable, SIGNAL(selectionChanged(QStringList)), + q, SIGNAL(patientsSelectionChanged(QStringList))); // For propagating study selection changes - QObject::connect(this->studiesTable, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), - q, SIGNAL(studiesSelectionChanged(const QItemSelection&, const QItemSelection&))); - QObject::connect(this->studiesTable, SIGNAL(selectionChanged(const QStringList&)), - q, SIGNAL(studiesSelectionChanged(const QStringList&))); + QObject::connect(this->studiesTable, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + q, SIGNAL(studiesSelectionChanged(QItemSelection,QItemSelection))); + QObject::connect(this->studiesTable, SIGNAL(selectionChanged(QStringList)), + q, SIGNAL(studiesSelectionChanged(QStringList))); // For propagating series selection changes - QObject::connect(this->seriesTable, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), - q, SIGNAL(seriesSelectionChanged(const QItemSelection&, const QItemSelection&))); - QObject::connect(this->seriesTable, SIGNAL(selectionChanged(const QStringList&)), - q, SIGNAL(seriesSelectionChanged(const QStringList&))); - - QObject::connect( this->patientsTable, SIGNAL( doubleClicked( const QModelIndex& ) ), - q, SIGNAL( patientsDoubleClicked( const QModelIndex& ) ) ); - QObject::connect( this->studiesTable, SIGNAL( doubleClicked( const QModelIndex& ) ), - q, SIGNAL( studiesDoubleClicked( const QModelIndex& ) ) ); - QObject::connect(this->seriesTable, SIGNAL(doubleClicked(const QModelIndex&)), - q, SIGNAL(seriesDoubleClicked(const QModelIndex&))); + QObject::connect(this->seriesTable, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + q, SIGNAL(seriesSelectionChanged(QItemSelection,QItemSelection))); + QObject::connect(this->seriesTable, SIGNAL(selectionChanged(QStringList)), + q, SIGNAL(seriesSelectionChanged(QStringList))); + + QObject::connect(this->patientsTable, SIGNAL(doubleClicked(QModelIndex)), + q, SIGNAL(patientsDoubleClicked(QModelIndex))); + QObject::connect(this->studiesTable, SIGNAL(doubleClicked(QModelIndex)), + q, SIGNAL(studiesDoubleClicked(QModelIndex))); + QObject::connect(this->seriesTable, SIGNAL(doubleClicked(QModelIndex)), + q, SIGNAL(seriesDoubleClicked(QModelIndex))); // For propagating right clicks, the table takes care of translating to a global position - QObject::connect(this->patientsTable, SIGNAL(customContextMenuRequested(const QPoint&)), - q, SIGNAL(patientsRightClicked(const QPoint&))); - QObject::connect(this->studiesTable, SIGNAL(customContextMenuRequested(const QPoint&)), - q, SIGNAL(studiesRightClicked(const QPoint&))); + QObject::connect(this->patientsTable, SIGNAL(customContextMenuRequested(QPoint)), + q, SIGNAL(patientsRightClicked(QPoint))); + QObject::connect(this->studiesTable, SIGNAL(customContextMenuRequested(QPoint)), + q, SIGNAL(studiesRightClicked(QPoint))); - QObject::connect(this->seriesTable, SIGNAL(customContextMenuRequested(const QPoint&)), - q, SIGNAL(seriesRightClicked(const QPoint&))); + QObject::connect(this->seriesTable, SIGNAL(customContextMenuRequested(QPoint)), + q, SIGNAL(seriesRightClicked(QPoint))); q->setTableOrientation(this->tableSplitter->orientation()); } @@ -216,7 +216,7 @@ void ctkDICOMTableManager::setDICOMDatabase(ctkDICOMDatabase* db) } //------------------------------------------------------------------------------ -void ctkDICOMTableManager::setTableOrientation(const Qt::Orientation &o) +void ctkDICOMTableManager::setTableOrientation(Qt::Orientation o) { Q_D(ctkDICOMTableManager); d->tableSplitter->setOrientation(o); @@ -353,20 +353,20 @@ void ctkDICOMTableManager::setAutoSelectSeries(bool autoSelect) QAbstractItemView::SelectionMode selectionMode = static_cast(this->selectionMode()); if (selectionMode == QAbstractItemView::SingleSelection) { - QObject::connect( d->studiesTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::connect( d->studiesTable, SIGNAL(selectionChanged(QStringList)), d->seriesTable, SLOT(selectFirst()) ); } else { - QObject::connect( d->studiesTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::connect( d->studiesTable, SIGNAL(selectionChanged(QStringList)), d->seriesTable, SLOT(selectAll()) ); } } else { - QObject::disconnect( d->studiesTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::disconnect( d->studiesTable, SIGNAL(selectionChanged(QStringList)), d->seriesTable, SLOT(selectAll()) ); - QObject::disconnect( d->studiesTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::disconnect( d->studiesTable, SIGNAL(selectionChanged(QStringList)), d->seriesTable, SLOT(selectFirst()) ); // Remove selection to avoid loading any previously auto-selected series d->seriesTable->clearSelection(); @@ -398,18 +398,18 @@ void ctkDICOMTableManager::setSelectionMode(int mode) d->seriesTable->tableView()->setSelectionMode(selectionMode); // Re-connect the proper slots for studies - QObject::disconnect( d->patientsTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::disconnect( d->patientsTable, SIGNAL(selectionChanged(QStringList)), d->studiesTable, SLOT(selectAll()) ); - QObject::disconnect( d->patientsTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::disconnect( d->patientsTable, SIGNAL(selectionChanged(QStringList)), d->studiesTable, SLOT(selectFirst()) ); if (selectionMode == QAbstractItemView::SingleSelection) { - QObject::connect( d->patientsTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::connect( d->patientsTable, SIGNAL(selectionChanged(QStringList)), d->studiesTable, SLOT(selectFirst()) ); } else { - QObject::connect( d->patientsTable, SIGNAL(selectionChanged(const QStringList&)), + QObject::connect( d->patientsTable, SIGNAL(selectionChanged(QStringList)), d->studiesTable, SLOT(selectAll()) ); } diff --git a/Libs/DICOM/Widgets/ctkDICOMTableManager.h b/Libs/DICOM/Widgets/ctkDICOMTableManager.h index cccd549aa6..2879eb1675 100644 --- a/Libs/DICOM/Widgets/ctkDICOMTableManager.h +++ b/Libs/DICOM/Widgets/ctkDICOMTableManager.h @@ -74,7 +74,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableManager : public QWidget */ Q_INVOKABLE void setDICOMDatabase(ctkDICOMDatabase* db); - void setTableOrientation(const Qt::Orientation&); + void setTableOrientation(Qt::Orientation); Qt::Orientation tableOrientation(); /** diff --git a/Libs/DICOM/Widgets/ctkDICOMTableView.cpp b/Libs/DICOM/Widgets/ctkDICOMTableView.cpp index f864bf7432..2841744b2d 100644 --- a/Libs/DICOM/Widgets/ctkDICOMTableView.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMTableView.cpp @@ -174,21 +174,21 @@ void ctkDICOMTableViewPrivate::init() this->tblDicomDatabaseView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); QObject::connect(this->tblDicomDatabaseView->selectionModel(), - SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), q, SLOT(onSelectionChanged())); QObject::connect(this->tblDicomDatabaseView->selectionModel(), - SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)), - q, SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&))); + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + q, SIGNAL(selectionChanged(QItemSelection,QItemSelection))); - QObject::connect(this->tblDicomDatabaseView, SIGNAL(doubleClicked(const QModelIndex&)), - q, SIGNAL(doubleClicked(const QModelIndex&))); + QObject::connect(this->tblDicomDatabaseView, SIGNAL(doubleClicked(QModelIndex)), + q, SIGNAL(doubleClicked(QModelIndex))); // enable right click menu, with mapping to global position (for use within the DICOM table manager) this->tblDicomDatabaseView->setContextMenuPolicy(Qt::CustomContextMenu); QObject::connect(this->tblDicomDatabaseView, - SIGNAL(customContextMenuRequested(const QPoint&)), - q, SLOT(onCustomContextMenuRequested(const QPoint&))); + SIGNAL(customContextMenuRequested(QPoint)), + q, SLOT(onCustomContextMenuRequested(QPoint))); QObject::connect(this->leSearchBox, SIGNAL(textChanged(QString)), q, SLOT(onFilterChanged(QString))); } @@ -387,7 +387,7 @@ ctkDICOMTableView::ctkDICOMTableView(QWidget *parent) } //---------------------------------------------------------------------------- -ctkDICOMTableView::ctkDICOMTableView(QString queryTableName, QWidget *parent) +ctkDICOMTableView::ctkDICOMTableView(const QString& queryTableName, QWidget *parent) : Superclass(parent) , d_ptr(new ctkDICOMTableViewPrivate(*this)) { @@ -397,7 +397,7 @@ ctkDICOMTableView::ctkDICOMTableView(QString queryTableName, QWidget *parent) } //------------------------------------------------------------------------------ -ctkDICOMTableView::ctkDICOMTableView (ctkDICOMDatabase* dicomDataBase, QString queryTableName, QWidget* parent) +ctkDICOMTableView::ctkDICOMTableView (ctkDICOMDatabase* dicomDataBase, const QString& queryTableName, QWidget* parent) : Superclass(parent) , d_ptr(new ctkDICOMTableViewPrivate(*this)) { @@ -436,7 +436,7 @@ void ctkDICOMTableView::setDicomDataBase(ctkDICOMDatabase *dicomDatabase) if (d->dicomDatabase) { //Create connections for new database - QObject::connect(d->dicomDatabase, SIGNAL(instanceAdded(const QString&)), this, SLOT(onInstanceAdded())); + QObject::connect(d->dicomDatabase, SIGNAL(instanceAdded(QString)), this, SLOT(onInstanceAdded())); QObject::connect(d->dicomDatabase, SIGNAL(databaseChanged()), this, SLOT(onDatabaseChanged())); QObject::connect(d->dicomDatabase, SIGNAL(opened()), this, SLOT(onDatabaseOpened())); QObject::connect(d->dicomDatabase, SIGNAL(closed()), this, SLOT(onDatabaseClosed())); @@ -677,8 +677,8 @@ void ctkDICOMTableView::setQuery(const QStringList &uids) } // Add where statements - QHash::const_iterator filterIt = d->sqlWhereConditions.begin(); - while (filterIt != d->sqlWhereConditions.end()) + QHash::const_iterator filterIt = d->sqlWhereConditions.constBegin(); + while (filterIt != d->sqlWhereConditions.constEnd()) { if (!filterIt.value().empty()) { @@ -691,25 +691,25 @@ void ctkDICOMTableView::setQuery(const QStringList &uids) } ++filterIt; } - foreach (const QString& column, d->sqlGreaterWhereConditions.keys()) + for (auto it = d->sqlGreaterWhereConditions.constBegin(); it != d->sqlGreaterWhereConditions.constEnd(); ++it) { - queryString += " AND " + column + " > ?" ; - boundValues << d->sqlGreaterWhereConditions[column]; + queryString += " AND " + it.key() + " > ?" ; + boundValues << it.value(); } - foreach (const QString& column, d->sqlLessWhereConditions.keys()) + for (auto it = d->sqlLessWhereConditions.constBegin(); it != d->sqlLessWhereConditions.constEnd(); ++it) { - queryString += " AND " + column + " < ?" ; - boundValues << d->sqlLessWhereConditions[column]; + queryString += " AND " + it.key() + " < ?" ; + boundValues << it.value(); } - foreach (const QString& column, d->sqlGreaterEqualWhereConditions.keys()) + for (auto it = d->sqlGreaterEqualWhereConditions.constBegin(); it != d->sqlGreaterEqualWhereConditions.constEnd(); ++it) { - queryString += " AND " + column + " >= ?" ; - boundValues << d->sqlGreaterEqualWhereConditions[column]; + queryString += " AND " + it.key() + " >= ?" ; + boundValues << it.value(); } - foreach (const QString& column, d->sqlLessEqualWhereConditions.keys()) + for (auto it = d->sqlLessEqualWhereConditions.constBegin(); it != d->sqlLessEqualWhereConditions.constEnd(); ++it) { - queryString += " AND " + column + " <= ?" ; - boundValues << d->sqlLessEqualWhereConditions[column]; + queryString += " AND " + it.key() + " <= ?" ; + boundValues << it.value(); } if (d->dicomDatabase != 0 && d->dicomDatabase->isOpen() @@ -777,7 +777,7 @@ bool ctkDICOMTableView::removeSqlEqualWhereCondition(const QString& column) } //------------------------------------------------------------------------------ -void ctkDICOMTableView::addSqlGreaterWhereCondition(const QString& column, const QVariant value) +void ctkDICOMTableView::addSqlGreaterWhereCondition(const QString& column, const QVariant& value) { Q_D(ctkDICOMTableView); d->sqlGreaterWhereConditions[column] = value; @@ -791,7 +791,7 @@ bool ctkDICOMTableView::removeSqlGreaterWhereCondition(const QString& column) } //------------------------------------------------------------------------------ -void ctkDICOMTableView::addSqlLessWhereCondition(const QString& column, const QVariant value) +void ctkDICOMTableView::addSqlLessWhereCondition(const QString& column, const QVariant& value) { Q_D(ctkDICOMTableView); d->sqlLessWhereConditions[column] = value; @@ -805,7 +805,7 @@ bool ctkDICOMTableView::removeSqlLessWhereCondition(const QString& column) } //------------------------------------------------------------------------------ -void ctkDICOMTableView::addSqlGreaterEqualWhereCondition(const QString& column, const QVariant value) +void ctkDICOMTableView::addSqlGreaterEqualWhereCondition(const QString& column, const QVariant& value) { Q_D(ctkDICOMTableView); d->sqlGreaterEqualWhereConditions[column] = value; @@ -819,7 +819,7 @@ bool ctkDICOMTableView::removeSqlGreaterEqualWhereCondition(const QString& colum } //------------------------------------------------------------------------------ -void ctkDICOMTableView::addSqlLessEqualWhereCondition(const QString& column, const QVariant value) +void ctkDICOMTableView::addSqlLessEqualWhereCondition(const QString& column, const QVariant& value) { Q_D(ctkDICOMTableView); d->sqlLessEqualWhereConditions[column] = value; @@ -918,7 +918,7 @@ bool ctkDICOMTableView::filterActive() } //------------------------------------------------------------------------------ -void ctkDICOMTableView::onCustomContextMenuRequested(const QPoint &point) +void ctkDICOMTableView::onCustomContextMenuRequested(QPoint point) { Q_D(ctkDICOMTableView); diff --git a/Libs/DICOM/Widgets/ctkDICOMTableView.h b/Libs/DICOM/Widgets/ctkDICOMTableView.h index 48e4362f89..da90f065d7 100644 --- a/Libs/DICOM/Widgets/ctkDICOMTableView.h +++ b/Libs/DICOM/Widgets/ctkDICOMTableView.h @@ -64,7 +64,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param parent the parent widget * @param queryTableName the name of the table of the ctkDICOMDatabase which shall be displayed */ - explicit ctkDICOMTableView(QString queryTableName, QWidget* parent = 0); + explicit ctkDICOMTableView(const QString& queryTableName, QWidget* parent = 0); /** * ctor with tablename and database as parameter @@ -72,7 +72,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param parent the parent widget * @param queryTableName the name of the table of the ctkDICOMDatabase which shall be displayed */ - explicit ctkDICOMTableView (ctkDICOMDatabase* dicomDataBase, QString queryTableName, QWidget* parent = 0); + explicit ctkDICOMTableView (ctkDICOMDatabase* dicomDataBase, const QString& queryTableName, QWidget* parent = 0); virtual ~ctkDICOMTableView(); @@ -159,7 +159,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param column Name of the column which is filtered using the operator * @param value Value that the filtered values must be greater than */ - Q_INVOKABLE void addSqlGreaterWhereCondition(const QString& column, const QVariant value); + Q_INVOKABLE void addSqlGreaterWhereCondition(const QString& column, const QVariant& value); /** * @brief Remove all 'greater' WHERE conditions from a given column. \sa removeSqlGreaterWhereCondition @@ -172,7 +172,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param column Name of the column which is filtered using the operator * @param value Value that the filtered values must be less than */ - Q_INVOKABLE void addSqlLessWhereCondition(const QString& column, const QVariant value); + Q_INVOKABLE void addSqlLessWhereCondition(const QString& column, const QVariant& value); /** * @brief Remove all 'less' WHERE conditions from a given column. \sa removeSqlLessWhereCondition @@ -185,7 +185,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param column Name of the column which is filtered using the operator * @param value Value that the filtered values must be greater than or equal to */ - Q_INVOKABLE void addSqlGreaterEqualWhereCondition(const QString& column, const QVariant value); + Q_INVOKABLE void addSqlGreaterEqualWhereCondition(const QString& column, const QVariant& value); /** * @brief Remove all 'greater or equal' WHERE conditions from a given column. \sa removeSqlGreaterEqualWhereCondition @@ -198,7 +198,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMTableView : public QWidget * @param column Name of the column which is filtered using the operator * @param value Value that the filtered values must be less than or equal to */ - Q_INVOKABLE void addSqlLessEqualWhereCondition(const QString& column, const QVariant value); + Q_INVOKABLE void addSqlLessEqualWhereCondition(const QString& column, const QVariant& value); /** * @brief Remove all 'less or equal' WHERE conditions from a given column. \sa removeSqlLessEqualWhereCondition @@ -285,7 +285,7 @@ public Q_SLOTS: * @param point the local point to translate to global * Emits customContextMenuRequested with the global point */ - void onCustomContextMenuRequested(const QPoint &point); + void onCustomContextMenuRequested(QPoint point); /** * @brief Select all items in the view diff --git a/Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp index 45198744b5..aa1b216bef 100644 --- a/Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp @@ -53,7 +53,7 @@ // DCMTK includes #include -static ctkLogger logger("org.commontk.DICOM.Widgets.DICOMThumbnailListWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.DICOMThumbnailListWidget")) Q_DECLARE_METATYPE(QPersistentModelIndex); @@ -157,7 +157,7 @@ ::addSeriesThumbnails(const QModelIndex &index) model->fetchMore(seriesIndex); const int imageCount = model->rowCount(seriesIndex); - logger.debug(QString("Thumbs: %1").arg(imageCount)); + logger->debug(QString("Thumbs: %1").arg(imageCount)); for (int i = 0 ; i < imageCount ; i++ ) { QModelIndex imageIndex = ctk::modelChildIndex(model, seriesIndex, i, 0); @@ -186,7 +186,7 @@ ::addThumbnailWidget(const QModelIndex& imageIndex, "/thumbs/" + model->data(studyIndex ,ctkDICOMModel::UIDRole).toString() + "/" + model->data(seriesIndex ,ctkDICOMModel::UIDRole).toString() + "/" + model->data(imageIndex, ctkDICOMModel::UIDRole).toString() + ".png"; - if(!QFileInfo(thumbnailPath).exists()) + if(!QFileInfo::exists(thumbnailPath)) { return; } @@ -195,7 +195,7 @@ ::addThumbnailWidget(const QModelIndex& imageIndex, QString widgetLabel = text; widget->setText( widgetLabel ); QPixmap pix(thumbnailPath); - logger.debug("Setting pixmap to " + thumbnailPath); + logger->debug("Setting pixmap to " + thumbnailPath); if(this->ThumbnailSize.isValid()) { widget->setFixedSize(this->ThumbnailSize); diff --git a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp index 4fe34e4a29..0d9e338c62 100644 --- a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp +++ b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.cpp @@ -76,7 +76,7 @@ #include "ctkDICOMVisualBrowserWidget.h" #include "ui_ctkDICOMVisualBrowserWidget.h" -static ctkLogger logger("org.commontk.DICOM.Widgets.DICOMVisualBrowserWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.DICOM.Widgets.DICOMVisualBrowserWidget")) QColor ctkDICOMVisualBrowserWidgetDefaultColor(Qt::white); QColor ctkDICOMVisualBrowserWidgetDarkModeDefaultColor(50, 50, 50); @@ -101,7 +101,7 @@ class ctkDICOMVisualBrowserWidgetPrivate : public Ui_ctkDICOMVisualBrowserWidget void init(); void disconnectScheduler(); void connectScheduler(); - void importDirectory(QString directory, ctkDICOMVisualBrowserWidget::ImportDirectoryMode mode); + void importDirectory(const QString& directory, ctkDICOMVisualBrowserWidget::ImportDirectoryMode mode); void importFiles(const QStringList& files, ctkDICOMVisualBrowserWidget::ImportDirectoryMode mode); void importOldSettings(); void showUpdateSchemaDialog(); @@ -235,7 +235,7 @@ ctkDICOMVisualBrowserWidgetPrivate::ctkDICOMVisualBrowserWidgetPrivate(ctkDICOMV this->CustomDateRangeWidget = nullptr; this->FilteringStartDateEdit = nullptr; this->FilteringEndDateEdit = nullptr; - this->FilteringModalities = ctkDICOMModalities::AllModalities; + this->FilteringModalities = ctkDICOMModalities::AllModalities(); this->PatientsAddedDuringImport = 0; this->StudiesAddedDuringImport = 0; @@ -324,8 +324,8 @@ void ctkDICOMVisualBrowserWidgetPrivate::init() // To Do: add an option to disable styling this->FilteringModalityCheckableComboBox->setStyleSheet("combobox-popup: 0;"); - QStringList allModalities = ctkDICOMModalities::AllModalities; - QStringList commonModalities = ctkDICOMModalities::CommonImagingModalities; + QStringList allModalities = ctkDICOMModalities::AllModalities(); + QStringList commonModalities = ctkDICOMModalities::CommonImagingModalities(); QSet otherModalitiesSet = QSet(allModalities.begin(), allModalities.end()); otherModalitiesSet.subtract(QSet(commonModalities.begin(), commonModalities.end())); @@ -517,14 +517,14 @@ void ctkDICOMVisualBrowserWidgetPrivate::init() this->JobListWidget->setScheduler(this->Scheduler); this->connectScheduler(); - QObject::connect(this->JobListWidget, SIGNAL(patientSelected(QString, QString, QString)), - q, SLOT(patientSelectedOnJobList(QString, QString, QString))); + QObject::connect(this->JobListWidget, SIGNAL(patientSelected(QString,QString,QString)), + q, SLOT(patientSelectedOnJobList(QString,QString,QString))); QObject::connect(this->ProgressCancelButton, SIGNAL(clicked()), this->Indexer.data(), SLOT(cancel())); QObject::connect(this->Indexer.data(), SIGNAL(progress(int)), q, SLOT(onIndexingProgress(int))); QObject::connect(this->Indexer.data(), SIGNAL(progressStep(QString)), q, SLOT(onIndexingProgressStep(QString))); QObject::connect(this->Indexer.data(), SIGNAL(progressDetail(QString)), q, SLOT(onIndexingProgressDetail(QString))); - QObject::connect(this->Indexer.data(), SIGNAL(indexingComplete(int, int, int, int)), q, SLOT(onIndexingComplete(int, int, int, int))); + QObject::connect(this->Indexer.data(), SIGNAL(indexingComplete(int,int,int,int)), q, SLOT(onIndexingComplete(int,int,int,int))); } //---------------------------------------------------------------------------- @@ -570,23 +570,23 @@ void ctkDICOMVisualBrowserWidgetPrivate::connectScheduler() } //---------------------------------------------------------------------------- -void ctkDICOMVisualBrowserWidgetPrivate::importDirectory(QString directory, ctkDICOMVisualBrowserWidget::ImportDirectoryMode mode) +void ctkDICOMVisualBrowserWidgetPrivate::importDirectory(const QString& directory, ctkDICOMVisualBrowserWidget::ImportDirectoryMode mode) { if (!this->DicomDatabase) { - logger.error("importDirectory failed, no DICOM Database has been set. \n"); + logger->error("importDirectory failed, no DICOM Database has been set. \n"); return; } if (!this->Scheduler || !this->Indexer) { - logger.error("importDirectory failed, no task pool has been set. \n"); + logger->error("importDirectory failed, no task pool has been set. \n"); return; } if (!QDir(directory).exists()) { - logger.error(QString("importDirectory failed, input directory %1 does not exist. \n").arg(directory)); + logger->error(QString("importDirectory failed, input directory %1 does not exist. \n").arg(directory)); return; } // Start background indexing @@ -598,13 +598,13 @@ void ctkDICOMVisualBrowserWidgetPrivate::importFiles(const QStringList& files, c { if (!this->DicomDatabase) { - logger.error("importFiles failed, no DICOM Database has been set. \n"); + logger->error("importFiles failed, no DICOM Database has been set. \n"); return; } if (!this->Scheduler || !this->Indexer) { - logger.error("importFiles failed, no task pool has been set. \n"); + logger->error("importFiles failed, no task pool has been set. \n"); return; } @@ -666,7 +666,7 @@ void ctkDICOMVisualBrowserWidgetPrivate::updateModalityCheckableComboBox() bool shouldCheckAllCommon = this->PreviousFilteringModalities.contains("Any") && !this->FilteringModalities.contains("Any"); - bool shouldUncheckAll = this->PreviousFilteringModalities == ctkDICOMModalities::CommonImagingModalities; + bool shouldUncheckAll = this->PreviousFilteringModalities == ctkDICOMModalities::CommonImagingModalities(); bool shouldCheckAll = !this->PreviousFilteringModalities.contains("Any") && this->FilteringModalities.contains("Any"); if (shouldUncheckAll) @@ -692,7 +692,7 @@ void ctkDICOMVisualBrowserWidgetPrivate::updateModalityCheckableComboBox() } else if (shouldCheckAllCommon) { - this->FilteringModalities = ctkDICOMModalities::CommonImagingModalities; + this->FilteringModalities = ctkDICOMModalities::CommonImagingModalities(); } // First, uncheck all items @@ -764,13 +764,13 @@ QString ctkDICOMVisualBrowserWidgetPrivate::createPatients(bool queryRetrieve, if (!this->DicomDatabase) { - logger.error("createPatients failed, no DICOM database has been set. \n"); + logger->error("createPatients failed, no DICOM database has been set. \n"); return QString(); } if (!this->PatientModel) { - logger.error("createPatients failed, no PatientModel has been set. \n"); + logger->error("createPatients failed, no PatientModel has been set. \n"); return QString(); } @@ -885,7 +885,7 @@ QString ctkDICOMVisualBrowserWidgetPrivate::createPatients(bool queryRetrieve, "The server settings section is below.\n" "Check also the allowed servers at patient level." ); - logger.warn(warningText); + logger->warn(warningText); this->WarningPushButton->setText(warningText); this->WarningPushButton->show(); q->openServerSettingsSection(); @@ -921,8 +921,8 @@ void ctkDICOMVisualBrowserWidgetPrivate::resetFilters() this->FilteringDate = ctkDICOMVisualBrowserWidget::Any; this->FilteringDateComboBox->setCurrentIndex(static_cast(this->FilteringDate)); this->PatientModel->setDateFilter(static_cast(this->FilteringDate)); - this->PreviousFilteringModalities = ctkDICOMModalities::AllModalities; - this->FilteringModalities = ctkDICOMModalities::AllModalities; + this->PreviousFilteringModalities = ctkDICOMModalities::AllModalities(); + this->FilteringModalities = ctkDICOMModalities::AllModalities(); this->updateModalityCheckableComboBox(); @@ -950,13 +950,13 @@ void ctkDICOMVisualBrowserWidgetPrivate::updateFiltersWarnings() { if (!this->DicomDatabase) { - logger.error("updateFiltersWarnings failed, no DICOM database has been set. \n"); + logger->error("updateFiltersWarnings failed, no DICOM database has been set. \n"); return; } if (!this->PatientModel) { - logger.error("updateFiltersWarnings failed, no PatientModel has been set. \n"); + logger->error("updateFiltersWarnings failed, no PatientModel has been set. \n"); return; } @@ -1234,17 +1234,17 @@ QStringList ctkDICOMVisualBrowserWidgetPrivate::filterPatientList(const QStringL QStringList filteredPatientList; if (!this->DicomDatabase) { - logger.error("filterPatientList failed, no DICOM Database has been set. \n"); + logger->error("filterPatientList failed, no DICOM Database has been set. \n"); return filteredPatientList; } foreach (QString patientUID, patientList) { bool filtered = false; - for (QString key : filters.keys()) + for (auto it = filters.constBegin(); it != filters.constEnd(); ++it) { - QString filter = this->DicomDatabase->fieldForPatient(key, patientUID); - QString filterValue = filters.value(key).toString(); + QString filter = this->DicomDatabase->fieldForPatient(it.key(), patientUID); + QString filterValue = it.value().toString(); if (!filter.contains(filterValue, Qt::CaseInsensitive)) { filtered = true; @@ -1270,18 +1270,18 @@ QStringList ctkDICOMVisualBrowserWidgetPrivate::filterStudyList(const QStringLis QStringList filteredStudyList; if (!this->DicomDatabase) { - logger.error("filterStudyList failed, no DICOM Database has been set. \n"); + logger->error("filterStudyList failed, no DICOM Database has been set. \n"); return filteredStudyList; } foreach (QString studyItem, studyList) { bool filtered = false; - for (QString key : filters.keys()) + for (auto it = filters.constBegin(); it != filters.constEnd(); ++it) { - QString filter = this->DicomDatabase->fieldForStudy(key, studyItem); - QString filterValue = filters.value(key).toString(); - if (key == "StudyDate") + QString filter = this->DicomDatabase->fieldForStudy(it.key(), studyItem); + QString filterValue = it.value().toString(); + if (it.key() == QLatin1String("StudyDate")) { int nDays = filterValue.toInt(); if (nDays != -1) @@ -1322,19 +1322,19 @@ QStringList ctkDICOMVisualBrowserWidgetPrivate::filterSeriesList(const QStringLi QStringList filteredSeriesList; if (!this->DicomDatabase) { - logger.error("filterSeriesList failed, no DICOM Database has been set. \n"); + logger->error("filterSeriesList failed, no DICOM Database has been set. \n"); return filteredSeriesList; } foreach (QString seriesItem, seriesList) { bool filtered = false; - for (QString key : filters.keys()) + for (auto it = filters.constBegin(); it != filters.constEnd(); ++it) { - QString filter = this->DicomDatabase->fieldForSeries(key, seriesItem); - if (key == "Modality") + QString filter = this->DicomDatabase->fieldForSeries(it.key(), seriesItem); + if (it.key() == QLatin1String("Modality")) { - QStringList filterValues = filters.value(key).toStringList(); + QStringList filterValues = it.value().toStringList(); if (!filterValues.contains("Any") && !filterValues.contains(filter)) { filtered = true; @@ -1343,7 +1343,7 @@ QStringList ctkDICOMVisualBrowserWidgetPrivate::filterSeriesList(const QStringLi } else { - QString filterValue = filters.value(key).toString(); + QString filterValue = it.value().toString(); if (!filter.contains(filterValue, Qt::CaseInsensitive)) { filtered = true; @@ -1609,7 +1609,7 @@ void ctkDICOMVisualBrowserWidget::setTagsToPrecache(const QStringList& tags) Q_D(ctkDICOMVisualBrowserWidget); if (!d->DicomDatabase) { - logger.error("setTagsToPrecache failed, no DICOM Database has been set. \n"); + logger->error("setTagsToPrecache failed, no DICOM Database has been set. \n"); return; } @@ -1622,7 +1622,7 @@ const QStringList ctkDICOMVisualBrowserWidget::tagsToPrecache() Q_D(ctkDICOMVisualBrowserWidget); if (!d->DicomDatabase) { - logger.error("Get tagsToPrecache failed, no DICOM Database has been set. \n"); + logger->error("Get tagsToPrecache failed, no DICOM Database has been set. \n"); return QStringList(); } @@ -1926,7 +1926,7 @@ void ctkDICOMVisualBrowserWidget::setDatabaseDirectory(const QString& directory) Q_D(ctkDICOMVisualBrowserWidget); if (!d->DicomDatabase) { - logger.error("setDatabaseDirectory failed, no DICOM database has been set. \n"); + logger->error("setDatabaseDirectory failed, no DICOM database has been set. \n"); return; } @@ -1942,7 +1942,7 @@ void ctkDICOMVisualBrowserWidget::setDatabaseDirectory(const QString& directory) if (!QDir(absDirectory).exists() || (!ctk::isDirEmpty(QDir(absDirectory)) && !QFile(databaseFileName).exists())) { - logger.warn("Database folder does not contain ctkDICOM.sql file: " + absDirectory + "\n"); + logger->warn("Database folder does not contain ctkDICOM.sql file: " + absDirectory + "\n"); d->DatabaseDirectoryProblemFrame->show(); d->DatabaseDirectoryProblemLabel->setText( //: %1 is the folder path @@ -1969,7 +1969,7 @@ void ctkDICOMVisualBrowserWidget::setDatabaseDirectory(const QString& directory) } if (!databaseOpenSuccess || d->DicomDatabase->schemaVersionLoaded().isEmpty()) { - logger.warn(tr("Database error: %1 \n").arg(d->DicomDatabase->lastError())); + logger->warn(tr("Database error: %1 \n").arg(d->DicomDatabase->lastError())); d->DicomDatabase->closeDatabase(); d->DatabaseDirectoryProblemFrame->show(); d->DatabaseDirectoryProblemLabel->setText( @@ -1987,8 +1987,8 @@ void ctkDICOMVisualBrowserWidget::setDatabaseDirectory(const QString& directory) { if (d->DicomDatabase->schemaVersionLoaded() != d->DicomDatabase->schemaVersion()) { - logger.warn(QString("Database version mismatch: version of selected database = %1, version required = %2 \n") - .arg(d->DicomDatabase->schemaVersionLoaded()).arg(d->DicomDatabase->schemaVersion())); + logger->warn(QString("Database version mismatch: version of selected database = %1, version required = %2 \n") + .arg(d->DicomDatabase->schemaVersionLoaded(), d->DicomDatabase->schemaVersion())); d->DicomDatabase->closeDatabase(); d->DatabaseDirectoryProblemFrame->show(); d->DatabaseDirectoryProblemLabel->setText( @@ -2069,7 +2069,7 @@ void ctkDICOMVisualBrowserWidget::waitForImportFinished() Q_D(ctkDICOMVisualBrowserWidget); if (!d->Scheduler || !d->Indexer) { - logger.error("waitForImportFinished failed, no task pool has been set. \n"); + logger->error("waitForImportFinished failed, no task pool has been set. \n"); return; } d->Indexer->waitForImportFinished(); @@ -2402,7 +2402,7 @@ void ctkDICOMVisualBrowserWidget::onFilteringDateComboBoxChanged(int index) } //------------------------------------------------------------------------------ -void ctkDICOMVisualBrowserWidget::onFilteringStartDateChanged(const QDate& date) +void ctkDICOMVisualBrowserWidget::onFilteringStartDateChanged(QDate date) { Q_D(ctkDICOMVisualBrowserWidget); d->FilteringStartDate = date; @@ -2424,7 +2424,7 @@ void ctkDICOMVisualBrowserWidget::onFilteringStartDateChanged(const QDate& date) } //------------------------------------------------------------------------------ -void ctkDICOMVisualBrowserWidget::onFilteringEndDateChanged(const QDate& date) +void ctkDICOMVisualBrowserWidget::onFilteringEndDateChanged(QDate date) { Q_D(ctkDICOMVisualBrowserWidget); d->FilteringEndDate = date; @@ -2457,7 +2457,7 @@ void ctkDICOMVisualBrowserWidget::onQueryPatients() if (!d->DicomDatabase) { - logger.error("onQueryPatients failed, no DICOM database has been set. \n"); + logger->error("onQueryPatients failed, no DICOM database has been set. \n"); return; } @@ -2480,7 +2480,7 @@ void ctkDICOMVisualBrowserWidget::onQueryPatients() d->SearchPushButton->setIcon(QIcon(":/Icons/query_failed.svg")); QString warningText = tr("No server is configured for query/retrieve operations.\n" "The server settings section is below."); - logger.warn(warningText); + logger->warn(warningText); d->WarningPushButton->setText(warningText); d->WarningPushButton->show(); this->openServerSettingsSection(); @@ -2493,7 +2493,7 @@ void ctkDICOMVisualBrowserWidget::onQueryPatients() d->SearchPushButton->setIcon(QIcon(":/Icons/query_failed.svg")); QString warningText = tr("No filters are set and no patients are found in the local database.\n" "Please specify at least one filter to query the servers."); - logger.warn(warningText); + logger->warn(warningText); d->WarningPushButton->setText(warningText); d->WarningPushButton->show(); return; @@ -2887,7 +2887,7 @@ void ctkDICOMVisualBrowserWidget::onStudiesSortedByDate(const QStringList& sorte // Find which patient these studies belong to QString patientID; - QList studyModels = d->PatientModel->allStudyModels(); + const QList studyModels = d->PatientModel->allStudyModels(); for (ctkDICOMStudyModel* studyModel : studyModels) { if (studyModel && studyModel->studyInstanceUIDs().contains(sortedStudyInstanceUIDs.first())) @@ -2919,7 +2919,7 @@ void ctkDICOMVisualBrowserWidget::onStudyReadyToOpen(const QString& studyInstanc // Get the patient ID for this study QString patientID; - QList studyModels = d->PatientModel->allStudyModels(); + const QList studyModels = d->PatientModel->allStudyModels(); for (ctkDICOMStudyModel* studyModel : studyModels) { if (studyModel && studyModel->studyInstanceUIDs().contains(studyInstanceUID)) @@ -2951,7 +2951,7 @@ void ctkDICOMVisualBrowserWidget::onStudyReadyToOpen(const QString& studyInstanc } //------------------------------------------------------------------------------ -void ctkDICOMVisualBrowserWidget::showPatientContextMenu(const QPoint& globalPos, const QStringList& selectedPatientUIDs) +void ctkDICOMVisualBrowserWidget::showPatientContextMenu(QPoint globalPos, const QStringList& selectedPatientUIDs) { if (selectedPatientUIDs.isEmpty()) { @@ -3056,7 +3056,7 @@ void ctkDICOMVisualBrowserWidget::showPatientContextMenu(const QPoint& globalPos } //------------------------------------------------------------------------------ -void ctkDICOMVisualBrowserWidget::showStudyContextMenu(const QPoint& globalPos, const QStringList& selectedStudyInstanceUIDs) +void ctkDICOMVisualBrowserWidget::showStudyContextMenu(QPoint globalPos, const QStringList& selectedStudyInstanceUIDs) { Q_D(ctkDICOMVisualBrowserWidget); @@ -3170,7 +3170,7 @@ void ctkDICOMVisualBrowserWidget::showStudyContextMenu(const QPoint& globalPos, } //------------------------------------------------------------------------------ -void ctkDICOMVisualBrowserWidget::showSeriesContextMenu(const QPoint& globalPos, const QStringList& selectedSeriesInstanceUIDs) +void ctkDICOMVisualBrowserWidget::showSeriesContextMenu(QPoint globalPos, const QStringList& selectedSeriesInstanceUIDs) { Q_D(ctkDICOMVisualBrowserWidget); @@ -3296,7 +3296,7 @@ void ctkDICOMVisualBrowserWidget::onSeriesDoubleClicked(const QString& seriesIns ctkDICOMStudyListView* studyListView = d->PatientView->studyListView(); if (studyListView) { - QMap allSeriesViews = studyListView->getAllSeriesView(); + const QMap allSeriesViews = studyListView->getAllSeriesView(); for (ctkDICOMSeriesTableView* seriesView : allSeriesViews) { if (seriesView) @@ -3383,10 +3383,10 @@ void ctkDICOMVisualBrowserWidget::removePatients(const QStringList& patientUIDs) QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); foreach (const QString& patientUID, patientUIDs) { - QStringList studyInstanceUIDs = d->DicomDatabase->studiesForPatient(patientUID); + const QStringList studyInstanceUIDs = d->DicomDatabase->studiesForPatient(patientUID); for (const QString& studyInstanceUID : studyInstanceUIDs) { - QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); + const QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); for (const QString& seriesInstanceUID : seriesInstanceUIDs) { loadedSeriesInstanceUIDs.removeAll(seriesInstanceUID); @@ -3487,7 +3487,7 @@ void ctkDICOMVisualBrowserWidget::removeStudies(const QStringList& studyInstance QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); foreach (const QString& studyInstanceUID, studyInstanceUIDs) { - QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); + const QStringList seriesInstanceUIDs = d->DicomDatabase->seriesForStudy(studyInstanceUID); for (const QString& seriesInstanceUID : seriesInstanceUIDs) { loadedSeriesInstanceUIDs.removeAll(seriesInstanceUID); @@ -3551,13 +3551,13 @@ void ctkDICOMVisualBrowserWidget::onLoadSeries(const QStringList& seriesInstance if (!d->Scheduler) { - logger.error("onLoadSeries failed, no scheduler has been set. \n"); + logger->error("onLoadSeries failed, no scheduler has been set. \n"); return; } if (!d->DicomDatabase) { - logger.error("onLoadSeries failed, no DicomDatabase has been set. \n"); + logger->error("onLoadSeries failed, no DicomDatabase has been set. \n"); return; } @@ -3743,7 +3743,7 @@ void ctkDICOMVisualBrowserWidget::onLoadSeries(const QStringList& seriesInstance { emit seriesRetrieved(retrievedSeriesInstanceUIDs); QStringList loadedSeriesInstanceUIDs = d->DicomDatabase->loadedSeriesInstanceUIDs(); - for (const QString& uid : retrievedSeriesInstanceUIDs) + for (const QString& uid : std::as_const(retrievedSeriesInstanceUIDs)) { if (!loadedSeriesInstanceUIDs.contains(uid)) { @@ -3769,13 +3769,13 @@ void ctkDICOMVisualBrowserWidget::forceRetrieveSeries(const QStringList& seriesI if (!d->Scheduler) { - logger.error("forceRetrieveSeries failed, no scheduler has been set. \n"); + logger->error("forceRetrieveSeries failed, no scheduler has been set. \n"); return; } if (!d->DicomDatabase) { - logger.error("forceRetrieveSeries failed, no DicomDatabase has been set. \n"); + logger->error("forceRetrieveSeries failed, no DicomDatabase has been set. \n"); return; } @@ -3901,16 +3901,16 @@ void ctkDICOMVisualBrowserWidget::removeSeries(const QStringList& seriesInstance d->DicomDatabase->setLoadedSeriesInstanceUIDs(loadedSeriesInstanceUIDs); // Refresh the affected series models and update their views' viewports - foreach (const QString& studyUID, affectedSeriesModels.keys()) + for (auto it = affectedSeriesModels.constBegin(); it != affectedSeriesModels.constEnd(); ++it) { - ctkDICOMSeriesModel* seriesModel = affectedSeriesModels.value(studyUID, nullptr); + ctkDICOMSeriesModel* seriesModel = it.value(); if (seriesModel) { seriesModel->refresh(); } // Also refresh the series view and force layout recalculation - ctkDICOMSeriesTableView* seriesView = studyListView->getSeriesViewForStudy(studyUID); + ctkDICOMSeriesTableView* seriesView = studyListView->getSeriesViewForStudy(it.key()); if (seriesView) { // reset the model to force a full view update @@ -3966,7 +3966,7 @@ void ctkDICOMVisualBrowserWidget::exportSeriesToDirectory(const QString& dirPath Q_D(ctkDICOMVisualBrowserWidget); if (!d->DicomDatabase) { - logger.error("exportSeries failed, no DICOM database has been set. \n"); + logger->error("exportSeries failed, no DICOM database has been set. \n"); return; } @@ -4082,8 +4082,7 @@ void ctkDICOMVisualBrowserWidget::exportSeriesToDirectory(const QString& dirPath //: %1 and %2 refers to source and destination file paths QString errorString = tr("Failed to copy\n\n%1\n\nto\n\n%2" "\n\nHalting export.") - .arg(filePath) - .arg(destinationFileName); + .arg(filePath, destinationFileName); ctkMessageBox copyErrorMessageBox(this); copyErrorMessageBox.setText(errorString); copyErrorMessageBox.setIcon(QMessageBox::Warning); @@ -4266,7 +4265,7 @@ bool ctkDICOMVisualBrowserWidget::confirmDeleteSelectedUIDs(const QStringList& u Q_D(ctkDICOMVisualBrowserWidget); if (!d->DicomDatabase) { - logger.error("confirmDeleteSelectedUIDs failed, no DICOM database has been set. \n"); + logger->error("confirmDeleteSelectedUIDs failed, no DICOM database has been set. \n"); return false; } diff --git a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.h b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.h index d3cc7bd37a..38eb28fda4 100644 --- a/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.h +++ b/Libs/DICOM/Widgets/ctkDICOMVisualBrowserWidget.h @@ -76,7 +76,6 @@ class ctkFileDialog; class CTK_DICOM_WIDGETS_EXPORT ctkDICOMVisualBrowserWidget : public QWidget { Q_OBJECT; - Q_ENUMS(ImportDirectoryMode DateType ThumbnailSizePresetOption) public: /// Date filtering options @@ -90,6 +89,7 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMVisualBrowserWidget : public QWidget LastYear, CustomRange }; + Q_ENUM(DateType) /// Thumbnail size options enum ThumbnailSizePresetOption @@ -99,12 +99,14 @@ class CTK_DICOM_WIDGETS_EXPORT ctkDICOMVisualBrowserWidget : public QWidget Medium, Large }; + Q_ENUM(ThumbnailSizePresetOption) enum ImportDirectoryMode { ImportDirectoryCopy = 0, ImportDirectoryAddLink }; + Q_ENUM(ImportDirectoryMode) Q_PROPERTY(QString databaseDirectory READ databaseDirectory WRITE setDatabaseDirectory) Q_PROPERTY(QString databaseDirectorySettingsKey READ databaseDirectorySettingsKey WRITE setDatabaseDirectorySettingsKey) @@ -395,8 +397,8 @@ public Q_SLOTS: void onFilteringSeriesDescriptionChanged(); void onFilteringModalityCheckableComboBoxChanged(); void onFilteringDateComboBoxChanged(int); - void onFilteringStartDateChanged(const QDate& date); - void onFilteringEndDateChanged(const QDate& date); + void onFilteringStartDateChanged(QDate date); + void onFilteringEndDateChanged(QDate date); ///@} /// start query/retrieve and show patients @@ -487,11 +489,11 @@ protected Q_SLOTS: ///@} /// Called when context menu is requested for patient(s) - void showPatientContextMenu(const QPoint& globalPos, const QStringList& selectedPatientUIDs); + void showPatientContextMenu(QPoint globalPos, const QStringList& selectedPatientUIDs); /// Called when a right mouse click is made in the studies table - void showStudyContextMenu(const QPoint& globalPos, const QStringList& selectedStudyInstanceUIDs); + void showStudyContextMenu(QPoint globalPos, const QStringList& selectedStudyInstanceUIDs); /// Called when a right mouse click is made in the series table - void showSeriesContextMenu(const QPoint& globalPos, const QStringList& selectedSeriesInstanceUIDs); + void showSeriesContextMenu(QPoint globalPos, const QStringList& selectedSeriesInstanceUIDs); /// Called when a series is double-clicked void onSeriesDoubleClicked(const QString& seriesInstanceUID); diff --git a/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogMessageHandlerWithThreadsTest1.cpp b/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogMessageHandlerWithThreadsTest1.cpp index ca57b14ed5..3c08ed94f0 100644 --- a/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogMessageHandlerWithThreadsTest1.cpp +++ b/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogMessageHandlerWithThreadsTest1.cpp @@ -42,7 +42,7 @@ namespace class LogVTKMessageThread : public LogMessageThread { public: - LogVTKMessageThread(int id, int maxIteration) : LogMessageThread(id, maxIteration){} + LogVTKMessageThread(int id, int maxIteration, QObject* parent = nullptr) : LogMessageThread(id, maxIteration, parent){} virtual void logMessage(const QDateTime& dateTime, int threadId, int counterIdx) { diff --git a/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogModelFileLoggingTest1.cpp b/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogModelFileLoggingTest1.cpp index debcbda6a1..b5cdb77ccd 100644 --- a/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogModelFileLoggingTest1.cpp +++ b/Libs/ImageProcessing/ITK/Core/Testing/Cpp/ctkITKErrorLogModelFileLoggingTest1.cpp @@ -128,7 +128,7 @@ int ctkITKErrorLogModelFileLoggingTest1(int argc, char * argv []) { printErrorMessage( QString("Line %1 - Log entry %2 does NOT match expected regular expression.\n\tLogEntry: %3\n\tRegExp: %4"). - arg(__LINE__).arg(entryIndex).arg(logLines.at(entryIndex)).arg(regexp.pattern())); + arg(QString::number(__LINE__), QString::number(entryIndex), logLines.at(entryIndex), regexp.pattern())); return EXIT_FAILURE; } diff --git a/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.cpp b/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.cpp index 5d866cdd92..8e8269585f 100644 --- a/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.cpp +++ b/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.cpp @@ -203,8 +203,8 @@ ctkITKErrorLogMessageHandlerPrivate::~ctkITKErrorLogMessageHandlerPrivate() QString ctkITKErrorLogMessageHandler::HandlerName = QLatin1String("ITK"); //---------------------------------------------------------------------------- -ctkITKErrorLogMessageHandler::ctkITKErrorLogMessageHandler() : - Superclass(), d_ptr(new ctkITKErrorLogMessageHandlerPrivate(*this)) +ctkITKErrorLogMessageHandler::ctkITKErrorLogMessageHandler(QObject* parent) : + Superclass(parent), d_ptr(new ctkITKErrorLogMessageHandlerPrivate(*this)) { } diff --git a/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.h b/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.h index 8cdff8a964..60000a5053 100644 --- a/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.h +++ b/Libs/ImageProcessing/ITK/Core/ctkITKErrorLogMessageHandler.h @@ -35,10 +35,11 @@ class ctkITKErrorLogMessageHandlerPrivate; class CTK_IMAGEPROCESSING_ITK_CORE_EXPORT ctkITKErrorLogMessageHandler : public ctkErrorLogAbstractMessageHandler { + Q_OBJECT public: typedef ctkErrorLogAbstractMessageHandler Superclass; - ctkITKErrorLogMessageHandler(); + ctkITKErrorLogMessageHandler(QObject* parent = nullptr); virtual ~ctkITKErrorLogMessageHandler(); static QString HandlerName; diff --git a/Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp b/Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp index c8d5cdf8ac..cfb76394e4 100644 --- a/Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp +++ b/Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp @@ -46,7 +46,7 @@ QSharedPointer ctkPluginFrameworkTestUtil::installPlugin( QFileInfo testDirInfo(testPluginDir); if (!testDirInfo.exists() || !testDirInfo.isDir()) { - throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir)); + throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin, testPluginDir)); } QStringList libFilter; @@ -61,6 +61,6 @@ QSharedPointer ctkPluginFrameworkTestUtil::installPlugin( } } - throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir)); + throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin, testPluginDir)); } } diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite.cpp b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite.cpp index 42d29b544a..bd9365460d 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite.cpp +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite.cpp @@ -129,7 +129,7 @@ void ctkEAScenario2EventConsumer::handleEvent(const ctkEvent& event) //---------------------------------------------------------------------------- ctkEAScenario2EventPublisher::ctkEAScenario2EventPublisher(ctkPluginContext* context, - const QString& name, const QStringList topics, + const QString& name, const QStringList& topics, int id, int numOfMessage) : eventAdmin(0), context(context), messageTosend(numOfMessage), topicsToSend(topics) diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite_p.h b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite_p.h index d6f788dee4..9008dd7952 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite_p.h +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario2TestSuite_p.h @@ -110,7 +110,7 @@ class ctkEAScenario2EventPublisher : public QObject public: ctkEAScenario2EventPublisher(ctkPluginContext* context, - const QString& name, const QStringList topics, + const QString& name, const QStringList& topics, int id, int numOfMessage); void runTest(); diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite.cpp b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite.cpp index 0a2f92cab0..64c9b87ae5 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite.cpp +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite.cpp @@ -30,7 +30,7 @@ //---------------------------------------------------------------------------- ctkEAScenario3EventConsumer::ctkEAScenario3EventConsumer( - ctkPluginContext* pluginContext, const QStringList topics, + ctkPluginContext* pluginContext, const QStringList& topics, int numSyncMsg, int numAsyncMsg) : context(pluginContext), topicsToConsume(topics), asynchMessages(0), synchMessages(0), numSyncMessages(numSyncMsg), numAsyncMessages(numAsyncMsg), error(false), exc("") diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite_p.h b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite_p.h index d03d416596..4939b25429 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite_p.h +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario3TestSuite_p.h @@ -87,7 +87,7 @@ class ctkEAScenario3EventConsumer : public QObject, public ctkEventHandler * name of the Consumer * @param id */ - ctkEAScenario3EventConsumer(ctkPluginContext* pluginContext, const QStringList topics, + ctkEAScenario3EventConsumer(ctkPluginContext* pluginContext, const QStringList& topics, int numSyncMsg, int numAsyncMsg); void runTest(); diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite.cpp b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite.cpp index fb889b56da..e0a931d7a5 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite.cpp +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite.cpp @@ -30,7 +30,7 @@ //---------------------------------------------------------------------------- ctkEAScenario4EventConsumer::ctkEAScenario4EventConsumer( - ctkPluginContext* pluginContext, const QStringList topics, + ctkPluginContext* pluginContext, const QStringList& topics, int numSyncMsg, int numAsyncMsg, const QString& filter) : context(pluginContext), topicsToConsume(topics), filterToConsume(filter), asynchMessages(0), synchMessages(0), numSyncMessages(numSyncMsg), diff --git a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite_p.h b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite_p.h index 9005ea8a71..e74e2d4952 100644 --- a/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite_p.h +++ b/Libs/PluginFramework/Testing/org.commontk.eventadmintest/ctkEAScenario4TestSuite_p.h @@ -90,7 +90,7 @@ class ctkEAScenario4EventConsumer : public QObject, public ctkEventHandler * name of the Consumer * @param id */ - ctkEAScenario4EventConsumer(ctkPluginContext* pluginContext, const QStringList topics, + ctkEAScenario4EventConsumer(ctkPluginContext* pluginContext, const QStringList& topics, int numSyncMsg, int numAsyncMsg, const QString& filter); void runTest(); diff --git a/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite.cpp b/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite.cpp index f6c62643dd..bd5b84de87 100644 --- a/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite.cpp +++ b/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite.cpp @@ -745,7 +745,7 @@ bool ctkPluginFrameworkTestSuite::checkListenerEvents( // reset the events bool ctkPluginFrameworkTestSuite::checkSyncListenerEvents( bool pexp, ctkPluginEvent::Type ptype, QSharedPointer pX, - ctkServiceReference servX) + const ctkServiceReference& servX) { Q_UNUSED(servX) diff --git a/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite_p.h b/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite_p.h index 26258c1ad7..f8053e5f1f 100644 --- a/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite_p.h +++ b/Libs/PluginFramework/Testing/org.commontk.pluginfwtest/ctkPluginFrameworkTestSuite_p.h @@ -94,7 +94,7 @@ private Q_SLOTS: // reset the events bool checkSyncListenerEvents( bool pexp, ctkPluginEvent::Type ptype, QSharedPointer pX, - ctkServiceReference servX); + const ctkServiceReference& servX); // Check that the expected events have reached the listeners and // reset the events diff --git a/Libs/PluginFramework/ctkBasicLocation.cpp b/Libs/PluginFramework/ctkBasicLocation.cpp index db969193b7..ef2e9ec152 100644 --- a/Libs/PluginFramework/ctkBasicLocation.cpp +++ b/Libs/PluginFramework/ctkBasicLocation.cpp @@ -37,8 +37,16 @@ #include #include -static const QString PROP_OSGI_LOCKING = "blueberry.locking"; -static const QString DEFAULT_LOCK_FILENAME = ".metadata/.lock"; +static const QString& PROP_OSGI_LOCKING() +{ + static const QString s = QStringLiteral("blueberry.locking"); + return s; +} +static const QString& DEFAULT_LOCK_FILENAME() +{ + static const QString s = QStringLiteral(".metadata/.lock"); + return s; +} //---------------------------------------------------------------------------- @@ -254,7 +262,7 @@ bool ctkBasicLocation::set_unlocked(const QUrl& value_, bool lock, const QString } else { - file = QFileInfo(QDir(value.toLocalFile()), DEFAULT_LOCK_FILENAME); + file = QFileInfo(QDir(value.toLocalFile()), DEFAULT_LOCK_FILENAME()); } } lock = lock && !this->m_isReadOnly; @@ -394,7 +402,7 @@ void ctkBasicLocation::setLocker_unlocked(const QFileInfo& lock) { if (this->m_locker != NULL) return; - QString lockMode = ctkPluginFrameworkProperties::getProperty(PROP_OSGI_LOCKING).toString(); + QString lockMode = ctkPluginFrameworkProperties::getProperty(PROP_OSGI_LOCKING()).toString(); this->m_locker = this->createLocker_unlocked(lock, lockMode); } @@ -405,7 +413,7 @@ ctkBasicLocation::Locker* ctkBasicLocation::createLocker_unlocked(const QFileInf QString lockMode = lockMode_; if (lockMode.isEmpty()) { - lockMode = ctkPluginFrameworkProperties::getProperty(PROP_OSGI_LOCKING).toString(); + lockMode = ctkPluginFrameworkProperties::getProperty(PROP_OSGI_LOCKING()).toString(); } if (lockMode == "none") diff --git a/Libs/PluginFramework/ctkLDAPExpr.cpp b/Libs/PluginFramework/ctkLDAPExpr.cpp index 6949ace61f..2af3af7048 100644 --- a/Libs/PluginFramework/ctkLDAPExpr.cpp +++ b/Libs/PluginFramework/ctkLDAPExpr.cpp @@ -98,12 +98,12 @@ class ctkLDAPExprData : public QSharedData { public: - ctkLDAPExprData( int op, QList args ) + ctkLDAPExprData( int op, const QList& args ) : m_operator(op), m_args(args) { } - ctkLDAPExprData( int op, QString attrName, QString attrValue ) + ctkLDAPExprData( int op, const QString& attrName, const QString& attrValue ) : m_operator(op), m_attrName(attrName), m_attrValue(attrValue) { } diff --git a/Libs/PluginFramework/ctkLocationManager.cpp b/Libs/PluginFramework/ctkLocationManager.cpp index 3f57196968..9dd7fa3c99 100644 --- a/Libs/PluginFramework/ctkLocationManager.cpp +++ b/Libs/PluginFramework/ctkLocationManager.cpp @@ -37,28 +37,76 @@ namespace { // Constants for configuration location discovery -static const QString CTK = "commontk"; -static const QString PRODUCT_SITE_MARKER = ".commontkproduct"; -static const QString PRODUCT_SITE_ID = "id"; -static const QString PRODUCT_SITE_VERSION = "version"; +static const QString& CTK() +{ + static const QString s = QStringLiteral("commontk"); + return s; +} +static const QString& PRODUCT_SITE_MARKER() +{ + static const QString s = QStringLiteral(".commontkproduct"); + return s; +} +static const QString& PRODUCT_SITE_ID() +{ + static const QString s = QStringLiteral("id"); + return s; +} +static const QString& PRODUCT_SITE_VERSION() +{ + static const QString s = QStringLiteral("version"); + return s; +} -static const QString CONFIG_DIR = "configuration"; +static const QString& CONFIG_DIR() +{ + static const QString s = QStringLiteral("configuration"); + return s; +} // Data mode constants for user, configuration and data locations. -static const QString NONE = "@none"; -static const QString NO_DEFAULT = "@noDefault"; -static const QString USER_HOME = "@user.home"; -static const QString USER_DIR = "@user.dir"; +static const QString& NONE() +{ + static const QString s = QStringLiteral("@none"); + return s; +} +static const QString& NO_DEFAULT() +{ + static const QString s = QStringLiteral("@noDefault"); + return s; +} +static const QString& USER_HOME() +{ + static const QString s = QStringLiteral("@user.home"); + return s; +} +static const QString& USER_DIR() +{ + static const QString s = QStringLiteral("@user.dir"); + return s; +} // Placeholder for hashcode of installation directory -static const QString INSTALL_HASH_PLACEHOLDER = "@install.hash"; +static const QString& INSTALL_HASH_PLACEHOLDER() +{ + static const QString s = QStringLiteral("@install.hash"); + return s; +} -static const QString INSTANCE_DATA_AREA_PREFIX = ".metadata/.plugins/"; +static const QString& INSTANCE_DATA_AREA_PREFIX() +{ + static const QString s = QStringLiteral(".metadata/.plugins/"); + return s; +} -static QScopedPointer installLocation; -static QScopedPointer configurationLocation; -static QScopedPointer userLocation; -static QScopedPointer instanceLocation; -static QScopedPointer ctkHomeLocation; +struct LocationManagerData +{ + QScopedPointer installLocation; + QScopedPointer configurationLocation; + QScopedPointer userLocation; + QScopedPointer instanceLocation; + QScopedPointer ctkHomeLocation; +}; +Q_GLOBAL_STATIC(LocationManagerData, locationData) static bool CanWrite(const QUrl& location); static bool CanWrite(const QFileInfo& location); @@ -117,32 +165,32 @@ ctkBasicLocation* BuildLocation(const QString& property, const QUrl& defaultLoca dataAreaPrefix); } QString trimmedLocation = location.trimmed(); - if (trimmedLocation.compare(NONE, Qt::CaseInsensitive) == 0) + if (trimmedLocation.compare(NONE(), Qt::CaseInsensitive) == 0) { return NULL; } - if (trimmedLocation.compare(NO_DEFAULT, Qt::CaseInsensitive) == 0) + if (trimmedLocation.compare(NO_DEFAULT(), Qt::CaseInsensitive) == 0) { return new ctkBasicLocation(property, QUrl(), readOnly, dataAreaPrefix); } - if (trimmedLocation.startsWith(USER_HOME)) + if (trimmedLocation.startsWith(USER_HOME())) { - QString base = SubstituteVar(location, USER_HOME, ctkPluginFrameworkLauncher::PROP_USER_HOME); + QString base = SubstituteVar(location, USER_HOME(), ctkPluginFrameworkLauncher::PROP_USER_HOME); location = QFileInfo(QDir(base), userDefaultAppendage).absoluteFilePath(); } - else if (trimmedLocation.startsWith(USER_DIR)) + else if (trimmedLocation.startsWith(USER_DIR())) { - QString base = SubstituteVar(location, USER_DIR, ctkPluginFrameworkLauncher::PROP_USER_DIR); + QString base = SubstituteVar(location, USER_DIR(), ctkPluginFrameworkLauncher::PROP_USER_DIR); location = QFileInfo(QDir(base), userDefaultAppendage).absoluteFilePath(); } - int idx = location.indexOf(INSTALL_HASH_PLACEHOLDER); + int idx = location.indexOf(INSTALL_HASH_PLACEHOLDER()); if (idx == 0) { - throw ctkRuntimeException("The location cannot start with '" + INSTALL_HASH_PLACEHOLDER + "': " + location); + throw ctkRuntimeException("The location cannot start with '" + INSTALL_HASH_PLACEHOLDER() + "': " + location); } else if (idx > 0) { - location = location.left(idx) + GetInstallDirHash() + location.mid(idx + INSTALL_HASH_PLACEHOLDER.size()); + location = location.left(idx) + GetInstallDirHash() + location.mid(idx + INSTALL_HASH_PLACEHOLDER().size()); } QUrl url = BuildUrl(location, true); ctkBasicLocation* result = NULL; @@ -191,7 +239,7 @@ static QUrl ComputeSharedConfigurationLocation() // absolute return sharedConfigurationURL; } - QUrl installURL = installLocation->getUrl(); + QUrl installURL = locationData()->installLocation->getUrl(); if (sharedConfigurationURL.scheme() != installURL.scheme()) { // different protocol @@ -218,7 +266,7 @@ static QString ComputeDefaultConfigurationLocation() if (installURL.isValid() && installURL.scheme() == "file") { QDir installDir(installURL.toLocalFile()); - QFileInfo defaultConfigDir(installDir, CONFIG_DIR); + QFileInfo defaultConfigDir(installDir, CONFIG_DIR()); if (!defaultConfigDir.exists()) { installDir.mkpath(defaultConfigDir.absoluteFilePath()); @@ -229,7 +277,7 @@ static QString ComputeDefaultConfigurationLocation() } } // We can't write in the CTK install dir so try for some place in the user's home dir - return ComputeDefaultUserAreaLocation(CONFIG_DIR); + return ComputeDefaultUserAreaLocation(CONFIG_DIR()); } //---------------------------------------------------------------------------- @@ -280,18 +328,18 @@ static QString ComputeDefaultUserAreaLocation(const QString& pathAppendage) QFileInfo installDir(installURL.toLocalFile()); QString installDirHash = GetInstallDirHash(); - QString appName = "." + CTK; - QFileInfo ctkProduct(QDir(installDir.absoluteFilePath()), PRODUCT_SITE_MARKER); + QString appName = "." + CTK(); + QFileInfo ctkProduct(QDir(installDir.absoluteFilePath()), PRODUCT_SITE_MARKER()); if (ctkProduct.exists()) { QSettings props(ctkProduct.absoluteFilePath(), QSettings::IniFormat); - QString appId = props.value(PRODUCT_SITE_ID).toString(); + QString appId = props.value(PRODUCT_SITE_ID()).toString(); if (appId.trimmed().isEmpty()) { - appId = CTK; + appId = CTK(); } - QString appVersion = props.value(PRODUCT_SITE_VERSION).toString(); + QString appVersion = props.value(PRODUCT_SITE_VERSION()).toString(); if (appVersion.trimmed().isEmpty()) { appVersion = ""; @@ -354,7 +402,7 @@ void ctkLocationManager::initializeLocations() } // do install location initialization first since others may depend on it // assumes that the property is already set - installLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTALL_AREA, QUrl(), "", true, false, QString())); + locationData()->installLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTALL_AREA, QUrl(), "", true, false, QString())); // TODO not sure what the data area prefix should be here for the user area QScopedPointer temp(BuildLocation(ctkPluginFrameworkLauncher::PROP_USER_AREA_DEFAULT, @@ -364,15 +412,15 @@ void ctkLocationManager::initializeLocations() { defaultLocation = BuildUrl(QFileInfo(QDir(ctkPluginFrameworkProperties::getProperty(ctkPluginFrameworkLauncher::PROP_USER_HOME).toString()), "user").absoluteFilePath(), true); } - userLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_USER_AREA, defaultLocation, "", false, false, QString())); + locationData()->userLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_USER_AREA, defaultLocation, "", false, false, QString())); - temp.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTANCE_AREA_DEFAULT, QUrl(), "", false, false, INSTANCE_DATA_AREA_PREFIX)); + temp.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTANCE_AREA_DEFAULT, QUrl(), "", false, false, INSTANCE_DATA_AREA_PREFIX())); defaultLocation = temp ? temp->getUrl() : QUrl(); if (!defaultLocation.isValid()) { defaultLocation = BuildUrl(QFileInfo(QDir(ctkPluginFrameworkProperties::getProperty(ctkPluginFrameworkLauncher::PROP_USER_DIR).toString()), "workspace").absoluteFilePath(), true); } - instanceLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTANCE_AREA, defaultLocation, "", false, false, INSTANCE_DATA_AREA_PREFIX)); + locationData()->instanceLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_INSTANCE_AREA, defaultLocation, "", false, false, INSTANCE_DATA_AREA_PREFIX())); //mungeConfigurationLocation(); @@ -384,15 +432,15 @@ void ctkLocationManager::initializeLocations() // only compute the default if the configuration area property is not set defaultLocation = BuildUrl(ComputeDefaultConfigurationLocation(), true); } - configurationLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_CONFIG_AREA, defaultLocation, "", false, false, QString())); + locationData()->configurationLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_CONFIG_AREA, defaultLocation, "", false, false, QString())); // get the parent location based on the system property. This will have been set on the // way in either by the caller/user or by main. There will be no parent location if we are not // cascaded. QUrl parentLocation = ComputeSharedConfigurationLocation(); - if (parentLocation.isValid() && parentLocation != configurationLocation->getUrl()) + if (parentLocation.isValid() && parentLocation != locationData()->configurationLocation->getUrl()) { ctkBasicLocation* parent = new ctkBasicLocation(QString(), parentLocation, true, QString()); - configurationLocation->setParent(parent); + locationData()->configurationLocation->setParent(parent); } //initializeDerivedConfigurationLocations(); @@ -411,7 +459,7 @@ void ctkLocationManager::initializeLocations() ctkPluginFrameworkProperties::setProperty(ctkPluginFrameworkLauncher::PROP_HOME_LOCATION_AREA, ctkPluginFrameworkProperties::getProperty(ctkPluginFrameworkLauncher::PROP_INSTALL_AREA)); } - ctkHomeLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_HOME_LOCATION_AREA, QUrl(), "", true, true, QString())); + locationData()->ctkHomeLocation.reset(BuildLocation(ctkPluginFrameworkLauncher::PROP_HOME_LOCATION_AREA, QUrl(), "", true, true, QString())); isInitialized = true; } @@ -419,29 +467,29 @@ void ctkLocationManager::initializeLocations() //---------------------------------------------------------------------------- ctkBasicLocation* ctkLocationManager::getUserLocation() { - return userLocation.data(); + return locationData()->userLocation.data(); } //---------------------------------------------------------------------------- ctkBasicLocation* ctkLocationManager::getConfigurationLocation() { - return configurationLocation.data(); + return locationData()->configurationLocation.data(); } //---------------------------------------------------------------------------- ctkBasicLocation* ctkLocationManager::getInstallLocation() { - return installLocation.data(); + return locationData()->installLocation.data(); } //---------------------------------------------------------------------------- ctkBasicLocation* ctkLocationManager::getInstanceLocation() { - return instanceLocation.data(); + return locationData()->instanceLocation.data(); } //---------------------------------------------------------------------------- ctkBasicLocation* ctkLocationManager::getCTKHomeLocation() { - return ctkHomeLocation.data(); + return locationData()->ctkHomeLocation.data(); } diff --git a/Libs/PluginFramework/ctkPluginAbstractTracked_p.h b/Libs/PluginFramework/ctkPluginAbstractTracked_p.h index 051e77d2ee..feb947eb39 100644 --- a/Libs/PluginFramework/ctkPluginAbstractTracked_p.h +++ b/Libs/PluginFramework/ctkPluginAbstractTracked_p.h @@ -187,7 +187,7 @@ class ctkPluginAbstractTracked : public QMutex * @return Customized object for the tracked item or null if * the item is not to be tracked. */ - virtual T customizerAdding(S item, const R& related) = 0; + virtual T customizerAdding(const S& item, const R& related) = 0; /** * Call the specific customizer modified method. This method must not be @@ -197,7 +197,7 @@ class ctkPluginAbstractTracked : public QMutex * @param related Action related object. * @param object Customized object for the tracked item. */ - virtual void customizerModified(S item, const R& related, + virtual void customizerModified(const S& item, const R& related, T object) = 0; /** @@ -208,7 +208,7 @@ class ctkPluginAbstractTracked : public QMutex * @param related Action related object. * @param object Customized object for the tracked item. */ - virtual void customizerRemoved(S item, const R& related, + virtual void customizerRemoved(const S& item, const R& related, T object) = 0; /** diff --git a/Libs/PluginFramework/ctkPluginFramework.cpp b/Libs/PluginFramework/ctkPluginFramework.cpp index 7312edc986..f652092786 100644 --- a/Libs/PluginFramework/ctkPluginFramework.cpp +++ b/Libs/PluginFramework/ctkPluginFramework.cpp @@ -215,7 +215,11 @@ QByteArray ctkPluginFramework::getResource(const QString& path) const resourcePath += QString("/") + path; QFile resourceFile(resourcePath); - resourceFile.open(QIODevice::ReadOnly); + if (!resourceFile.open(QIODevice::ReadOnly)) + { + qWarning() << "ctkPluginFramework: Failed to open resource:" << resourcePath; + return QByteArray(); + } return resourceFile.readAll(); } diff --git a/Libs/PluginFramework/ctkPluginFrameworkDebug.cpp b/Libs/PluginFramework/ctkPluginFrameworkDebug.cpp index 101968372e..4cbe6039c8 100644 --- a/Libs/PluginFramework/ctkPluginFrameworkDebug.cpp +++ b/Libs/PluginFramework/ctkPluginFrameworkDebug.cpp @@ -25,18 +25,22 @@ #include "ctkPluginFrameworkDebugOptions_p.h" #include "ctkPluginFrameworkProperties_p.h" -static QString CTK_OSGI = "org.commontk.pluginfw"; - -QString ctkPluginFrameworkDebug::OPTION_DEBUG_GENERAL = CTK_OSGI + "/debug"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_FRAMEWORK = CTK_OSGI + "/debug/framework"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_ERRORS = CTK_OSGI + "/debug/errors"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_HOOKS = CTK_OSGI + "/debug/hooks"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_LAZY_ACTIVATION = CTK_OSGI + "/debug/lazy_activation"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_LDAP = CTK_OSGI + "/debug/ldap"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_SERVICE_REFERENCE = CTK_OSGI + "/debug/service_reference"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_STARTLEVEL = CTK_OSGI + "/debug/startlevel"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_URL = CTK_OSGI + "/debug/url"; -QString ctkPluginFrameworkDebug::OPTION_DEBUG_RESOLVE = CTK_OSGI + "/debug/resolve"; +static const QString& CTK_OSGI() +{ + static const QString s = QStringLiteral("org.commontk.pluginfw"); + return s; +} + +QString ctkPluginFrameworkDebug::OPTION_DEBUG_GENERAL = CTK_OSGI() + "/debug"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_FRAMEWORK = CTK_OSGI() + "/debug/framework"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_ERRORS = CTK_OSGI() + "/debug/errors"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_HOOKS = CTK_OSGI() + "/debug/hooks"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_LAZY_ACTIVATION = CTK_OSGI() + "/debug/lazy_activation"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_LDAP = CTK_OSGI() + "/debug/ldap"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_SERVICE_REFERENCE = CTK_OSGI() + "/debug/service_reference"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_STARTLEVEL = CTK_OSGI() + "/debug/startlevel"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_URL = CTK_OSGI() + "/debug/url"; +QString ctkPluginFrameworkDebug::OPTION_DEBUG_RESOLVE = CTK_OSGI() + "/debug/resolve"; //---------------------------------------------------------------------------- ctkPluginFrameworkDebug::ctkPluginFrameworkDebug() diff --git a/Libs/PluginFramework/ctkPluginFrameworkDebugOptions.cpp b/Libs/PluginFramework/ctkPluginFrameworkDebugOptions.cpp index 8bd46f3776..ea6bbd4a5a 100644 --- a/Libs/PluginFramework/ctkPluginFrameworkDebugOptions.cpp +++ b/Libs/PluginFramework/ctkPluginFrameworkDebugOptions.cpp @@ -197,11 +197,11 @@ void ctkPluginFrameworkDebugOptions::setOptions(const QHash& return; } // first check for removals - foreach (const QString& key, this->options.keys()) + for (auto it = this->options.constBegin(); it != this->options.constEnd(); ++it) { - if (!newOptions.contains(key)) + if (!newOptions.contains(it.key())) { - QString symbolicName = this->getSymbolicName(key); + QString symbolicName = this->getSymbolicName(it.key()); if (!symbolicName.isEmpty()) { fireChangesTo.insert(symbolicName); diff --git a/Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp b/Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp index 6f0b573a2d..b02ee99beb 100644 --- a/Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp +++ b/Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp @@ -82,7 +82,11 @@ const QString ctkPluginFrameworkLauncher::PROP_APPLICATION_LAUNCHDEFAULT = "ctk. const QString ctkPluginFrameworkLauncher::PROP_OSGI_RELAUNCH = "ctk.pluginfw.relaunch"; -static const QString PROP_FORCED_RESTART = "ctk.forcedRestart"; +static const QString& PROP_FORCED_RESTART() +{ + static const QString s = QStringLiteral("ctk.forcedRestart"); + return s; +} class ctkPluginFrameworkLauncherPrivate { @@ -108,7 +112,7 @@ class ctkPluginFrameworkLauncherPrivate //---------------------------------------------------------------------------- bool isForcedRestart() const { - return ctkPluginFrameworkProperties::getProperty(PROP_FORCED_RESTART).toBool(); + return ctkPluginFrameworkProperties::getProperty(PROP_FORCED_RESTART()).toBool(); } //---------------------------------------------------------------------------- @@ -140,7 +144,7 @@ class ctkPluginFrameworkLauncherPrivate ctkProperties loadProperties(const QUrl& location) { ctkProperties result; - if (!location.isValid() || !QFileInfo(location.toLocalFile()).exists()) + if (!location.isValid() || !QFileInfo::exists(location.toLocalFile())) { return result; } diff --git a/Libs/PluginFramework/ctkPluginStorageSQL.cpp b/Libs/PluginFramework/ctkPluginStorageSQL.cpp index 48e50134dd..e33e129d08 100644 --- a/Libs/PluginFramework/ctkPluginStorageSQL.cpp +++ b/Libs/PluginFramework/ctkPluginStorageSQL.cpp @@ -99,7 +99,7 @@ QSqlDatabase ctkPluginStorageSQL::getConnection(bool create) const if (!database.open()) { close(); - throw ctkPluginDatabaseException(QString("Could not open database connection: %1 (%2)").arg(m_connectionNames.localData()).arg(database.lastError().text()), + throw ctkPluginDatabaseException(QString("Could not open database connection: %1 (%2)").arg(m_connectionNames.localData(), database.lastError().text()), ctkPluginDatabaseException::DB_SQL_ERROR); } @@ -433,13 +433,17 @@ void ctkPluginStorageSQL::insertArchive(QSharedPointer pa, pluginLoader.setFileName(pa->getLibLocation()); if (!pluginLoader.load()) { - ctkPluginException exc(QString("The plugin \"%1\" could not be loaded: %2").arg(pa->getLibLocation()) - .arg(pluginLoader.errorString())); + ctkPluginException exc(QString("The plugin \"%1\" could not be loaded: %2").arg(pa->getLibLocation(), pluginLoader.errorString())); throw exc; } QFile manifestResource(resourcePrefix + "META-INF/MANIFEST.MF"); - manifestResource.open(QIODevice::ReadOnly); + if (!manifestResource.open(QIODevice::ReadOnly)) + { + ctkPluginDatabaseException exc( + QString("Failed to open MANIFEST.MF resource: %1").arg(manifestResource.fileName())); + throw exc; + } QByteArray manifest = manifestResource.readAll(); manifestResource.close(); @@ -478,7 +482,11 @@ void ctkPluginStorageSQL::insertArchive(QSharedPointer pa, if (QFileInfo(resourcePath).isDir()) continue; QFile resourceFile(resourcePath); - resourceFile.open(QIODevice::ReadOnly); + if (!resourceFile.open(QIODevice::ReadOnly)) + { + qWarning() << "ctkPluginStorageSQL: Failed to open resource:" << resourcePath; + continue; + } QByteArray resourceData = resourceFile.readAll(); resourceFile.close(); @@ -750,8 +758,7 @@ void ctkPluginStorageSQL::executeQuery(QSqlQuery *query, const QString &statemen query->finish(); query->clear(); - throw ctkPluginDatabaseException(errorText.arg(stage == Prepare ? "prepare":"execute") - .arg(statement).arg(query->lastError().text()).arg(parameters), errorType); + throw ctkPluginDatabaseException(errorText.arg(stage == Prepare ? "prepare":"execute", statement, query->lastError().text(), parameters), errorType); } if (stage == Prepare) diff --git a/Libs/PluginFramework/ctkPlugin_p.cpp b/Libs/PluginFramework/ctkPlugin_p.cpp index 95649b3893..d99e7d6d7e 100644 --- a/Libs/PluginFramework/ctkPlugin_p.cpp +++ b/Libs/PluginFramework/ctkPlugin_p.cpp @@ -145,7 +145,7 @@ ctkPluginPrivate::ctkPluginPrivate( const QMap& e = i.next(); const QStringList& res = e.value(ctkPluginConstants::RESOLUTION_DIRECTIVE); const QStringList& version = e.value(ctkPluginConstants::PLUGIN_VERSION_ATTRIBUTE); - ctkRequirePlugin* rp = new ctkRequirePlugin(this, e.value("$key").front(), + ctkRequirePlugin* rp = new ctkRequirePlugin(this, e.value("$key").constFirst(), res.empty() ? QString() : res.front(), version.empty() ? QString() : version.front()); require.push_back(rp); @@ -706,7 +706,7 @@ void ctkPluginPrivate::startDependencies() // started if all its dependencies could be resolved. throw ctkPluginException( QString("Internal error: dependent plugin %1 inside version range %2 is not installed."). - arg(pr->name).arg(pr->pluginRange.toString())); + arg(pr->name, pr->pluginRange.toString())); } else { @@ -734,14 +734,14 @@ ctkPluginException* ctkPluginPrivate::start0() if (!pluginLoader.isLoaded()) { error_type = ctkPluginException::ACTIVATOR_ERROR; - throw ctkPluginException(QString("Loading plugin %1 failed: %2").arg(pluginLoader.fileName()).arg(pluginLoader.errorString()), + throw ctkPluginException(QString("Loading plugin %1 failed: %2").arg(pluginLoader.fileName(), pluginLoader.errorString()), ctkPluginException::ACTIVATOR_ERROR); } pluginActivator = qobject_cast(pluginLoader.instance()); if (!pluginActivator) { - throw ctkPluginException(QString("Creating ctkPluginActivator instance from %1 failed: %2").arg(pluginLoader.fileName()).arg(pluginLoader.errorString()), + throw ctkPluginException(QString("Creating ctkPluginActivator instance from %1 failed: %2").arg(pluginLoader.fileName(), pluginLoader.errorString()), ctkPluginException::ACTIVATOR_ERROR); } diff --git a/Libs/PluginFramework/ctkPlugins.cpp b/Libs/PluginFramework/ctkPlugins.cpp index f697767954..13d283df5e 100644 --- a/Libs/PluginFramework/ctkPlugins.cpp +++ b/Libs/PluginFramework/ctkPlugins.cpp @@ -64,8 +64,8 @@ QSharedPointer ctkPlugins::install(const QUrl& location, QIODevice* i { QMutexLocker lock(&objectLock); - QHash >::const_iterator it = plugins.find(location.toString()); - if (it != plugins.end()) + QHash >::const_iterator it = plugins.constFind(location.toString()); + if (it != plugins.constEnd()) { return it.value(); } diff --git a/Libs/PluginFramework/ctkTrackedPlugin.tpp b/Libs/PluginFramework/ctkTrackedPlugin.tpp index bfe3b99113..0968f3477d 100644 --- a/Libs/PluginFramework/ctkTrackedPlugin.tpp +++ b/Libs/PluginFramework/ctkTrackedPlugin.tpp @@ -68,7 +68,7 @@ void ctkTrackedPlugin::pluginChanged(const ctkPluginEvent& event) //---------------------------------------------------------------------------- template -T ctkTrackedPlugin::customizerAdding(QSharedPointer item, +T ctkTrackedPlugin::customizerAdding(const QSharedPointer& item, const ctkPluginEvent& related) { return customizer->addingPlugin(item, related); @@ -76,7 +76,7 @@ T ctkTrackedPlugin::customizerAdding(QSharedPointer item, //---------------------------------------------------------------------------- template -void ctkTrackedPlugin::customizerModified(QSharedPointer item, +void ctkTrackedPlugin::customizerModified(const QSharedPointer& item, const ctkPluginEvent& related, T object) { @@ -85,7 +85,7 @@ void ctkTrackedPlugin::customizerModified(QSharedPointer item, //---------------------------------------------------------------------------- template -void ctkTrackedPlugin::customizerRemoved(QSharedPointer item, +void ctkTrackedPlugin::customizerRemoved(const QSharedPointer& item, const ctkPluginEvent& related, T object) { diff --git a/Libs/PluginFramework/ctkTrackedPlugin_p.h b/Libs/PluginFramework/ctkTrackedPlugin_p.h index 9087b945b8..3725957e48 100644 --- a/Libs/PluginFramework/ctkTrackedPlugin_p.h +++ b/Libs/PluginFramework/ctkTrackedPlugin_p.h @@ -68,7 +68,7 @@ class ctkTrackedPlugin : public ctkTrackedPluginListener, * @return Customized object for the tracked item or null * if the item is not to be tracked. */ - T customizerAdding(QSharedPointer item, + T customizerAdding(const QSharedPointer& item, const ctkPluginEvent& related); /** @@ -79,7 +79,7 @@ class ctkTrackedPlugin : public ctkTrackedPluginListener, * @param related Action related object. * @param object Customized object for the tracked item. */ - void customizerModified(QSharedPointer item, + void customizerModified(const QSharedPointer& item, const ctkPluginEvent& related, T object); /** @@ -90,7 +90,7 @@ class ctkTrackedPlugin : public ctkTrackedPluginListener, * @param related Action related object. * @param object Customized object for the tracked item. */ - void customizerRemoved(QSharedPointer item, + void customizerRemoved(const QSharedPointer& item, const ctkPluginEvent& related, T object); }; diff --git a/Libs/PluginFramework/ctkTrackedService.tpp b/Libs/PluginFramework/ctkTrackedService.tpp index 638060ab2c..a6826648c8 100644 --- a/Libs/PluginFramework/ctkTrackedService.tpp +++ b/Libs/PluginFramework/ctkTrackedService.tpp @@ -105,7 +105,7 @@ void ctkTrackedService::modified() //---------------------------------------------------------------------------- template -T ctkTrackedService::customizerAdding(ctkServiceReference item, +T ctkTrackedService::customizerAdding(const ctkServiceReference& item, const ctkServiceEvent& related) { Q_UNUSED(related) @@ -114,7 +114,7 @@ T ctkTrackedService::customizerAdding(ctkServiceReference item, //---------------------------------------------------------------------------- template -void ctkTrackedService::customizerModified(ctkServiceReference item, +void ctkTrackedService::customizerModified(const ctkServiceReference& item, const ctkServiceEvent& related, T object) { @@ -124,7 +124,7 @@ void ctkTrackedService::customizerModified(ctkServiceReference item, //---------------------------------------------------------------------------- template -void ctkTrackedService::customizerRemoved(ctkServiceReference item, +void ctkTrackedService::customizerRemoved(const ctkServiceReference& item, const ctkServiceEvent& related, T object) { diff --git a/Libs/PluginFramework/ctkTrackedService_p.h b/Libs/PluginFramework/ctkTrackedService_p.h index 517b4b0015..46ba4544ee 100644 --- a/Libs/PluginFramework/ctkTrackedService_p.h +++ b/Libs/PluginFramework/ctkTrackedService_p.h @@ -72,7 +72,7 @@ class ctkTrackedService : public ctkTrackedServiceListener, * @return Customized object for the tracked item or null * if the item is not to be tracked. */ - T customizerAdding(ctkServiceReference item, const ctkServiceEvent& related); + T customizerAdding(const ctkServiceReference& item, const ctkServiceEvent& related); /** * Call the specific customizer modified method. This method must not be @@ -82,7 +82,7 @@ class ctkTrackedService : public ctkTrackedServiceListener, * @param related Action related object. * @param object Customized object for the tracked item. */ - void customizerModified(ctkServiceReference item, + void customizerModified(const ctkServiceReference& item, const ctkServiceEvent& related, T object) ; /** @@ -93,7 +93,7 @@ class ctkTrackedService : public ctkTrackedServiceListener, * @param related Action related object. * @param object Customized object for the tracked item. */ - void customizerRemoved(ctkServiceReference item, + void customizerRemoved(const ctkServiceReference& item, const ctkServiceEvent& related, T object) ; }; diff --git a/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h b/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h index 32cc0718dc..0848bfa4b1 100644 --- a/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h +++ b/Libs/Scripting/Python/Core/ctkAbstractPythonManager.h @@ -96,7 +96,7 @@ class CTK_SCRIPTING_PYTHON_CORE_EXPORT ctkAbstractPythonManager : public QObject FileInput, SingleInput }; - Q_ENUM(ExecuteStringMode) + Q_ENUM(ExecuteStringMode); /// Execute a python of python code (can be multiple lines separated with newline) /// and return the result as a QVariant. diff --git a/Libs/Scripting/Python/Widgets/ctkPythonConsole.cpp b/Libs/Scripting/Python/Widgets/ctkPythonConsole.cpp index e6f967b0ff..31cae1c423 100644 --- a/Libs/Scripting/Python/Widgets/ctkPythonConsole.cpp +++ b/Libs/Scripting/Python/Widgets/ctkPythonConsole.cpp @@ -508,8 +508,8 @@ void ctkPythonConsoleCompleter::updateCompletionModel(const QString& completion) // ctkPythonConsolePrivate //---------------------------------------------------------------------------- -class ctkPythonConsolePrivate : public ctkConsolePrivate -{ +class ctkPythonConsolePrivate : public ctkConsolePrivate { + Q_OBJECT Q_DECLARE_PUBLIC(ctkPythonConsole); public: ctkPythonConsolePrivate(ctkPythonConsole& object); @@ -728,3 +728,5 @@ void ctkPythonConsole::reset() this->Superclass::reset(); } + +#include "ctkPythonConsole.moc" diff --git a/Libs/Visualization/VTK/Core/CMakeLists.txt b/Libs/Visualization/VTK/Core/CMakeLists.txt index aa14930c9c..20e9a6d9c9 100644 --- a/Libs/Visualization/VTK/Core/CMakeLists.txt +++ b/Libs/Visualization/VTK/Core/CMakeLists.txt @@ -4,54 +4,50 @@ project(CTKVisualizationVTKCore) # 3rd party dependencies # -if(${VTK_VERSION} VERSION_LESS "8.90") - include(${VTK_USE_FILE}) -else() - # VTK >= 8.90 defines VTK_MAJOR_VERSION - set(VTK_VERSION_MAJOR ${VTK_MAJOR_VERSION}) +# VTK >= 8.90 defines VTK_MAJOR_VERSION +set(VTK_VERSION_MAJOR ${VTK_MAJOR_VERSION}) - set(_test_components) - if(BUILD_TESTING) - list(APPEND _test_components - TestingRendering - CommonSystem - ) - endif() - - set(_python_components) - if(CTK_LIB_Scripting/Python/Core AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK) - list(APPEND _python_components - WrappingPythonCore - ) - endif() +set(_test_components) +if(BUILD_TESTING) + list(APPEND _test_components + TestingRendering + CommonSystem + ) +endif() - find_package(VTK - COMPONENTS - ChartsCore - CommonCore - CommonDataModel - FiltersCore - FiltersGeneral - FiltersModeling - FiltersSources - FiltersStatistics - IOLegacy - IOXML - InfovisCore - InfovisLayout - InteractionStyle - RenderingAnnotation - RenderingCore - RenderingFreeType - RenderingOpenGL2 - ViewsCore - ViewsInfovis - ViewsContext2D - ${_python_components} - ${_test_components} +set(_python_components) +if(CTK_LIB_Scripting/Python/Core AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK) + list(APPEND _python_components + WrappingPythonCore ) endif() +find_package(VTK + COMPONENTS + ChartsCore + CommonCore + CommonDataModel + FiltersCore + FiltersGeneral + FiltersModeling + FiltersSources + FiltersStatistics + IOLegacy + IOXML + InfovisCore + InfovisLayout + InteractionStyle + RenderingAnnotation + RenderingCore + RenderingFreeType + RenderingOpenGL2 + ViewsCore + ViewsInfovis + ViewsContext2D + ${_python_components} + ${_test_components} + ) + if(NOT DEFINED VTK_RENDERING_BACKEND) set(VTK_RENDERING_BACKEND "OpenGL") endif() @@ -104,54 +100,7 @@ if(CTK_LIB_Scripting/Python/Core AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_ endif() # Set VTK_LIBRARIES variable -if(${VTK_VERSION} VERSION_EQUAL 8.90 OR ${VTK_VERSION} VERSION_GREATER 8.90 ) - # VTK_LIBRARIES is automatically set based on selected components -elseif(${VTK_VERSION_MAJOR} GREATER 5) - set(VTK_LIBRARIES - # a few of these have to be specified explicitly to workaround - # underlinked libraries from the debian VTK package - # see Debian bug #747436 - vtkCommonCore - vtkCommonDataModel - vtkCommonSystem - vtkFiltersStatistics - vtkIOImage - vtkInteractionStyle - vtkRenderingAnnotation - vtkRenderingCore - ) - if(TARGET vtkRendering${VTK_RENDERING_BACKEND}) - list(APPEND VTK_LIBRARIES vtkRendering${VTK_RENDERING_BACKEND}) - endif() - if(TARGET vtkIOMPIImage) - list(APPEND VTK_LIBRARIES vtkIOMPIImage ) - endif() - if(TARGET vtkRenderingMatplotlib) - list(APPEND VTK_LIBRARIES vtkRenderingMatplotlib ) - endif() - if(TARGET vtkTestingRendering) - list(APPEND VTK_LIBRARIES vtkTestingRendering ) - endif() - # With VTK > 6.2.0 (commit 4f7460a5), vtkRenderingFreeTypeOpenGL has been removed. - if(TARGET vtkRenderingFreeTypeOpenGL) - list(APPEND VTK_LIBRARIES vtkRenderingFreeTypeOpenGL) - endif() - if(TARGET vtkRenderingFreeType ) - list(APPEND VTK_LIBRARIES vtkRenderingFreeType) - endif() - if (TARGET vtkRenderingFreeTypeFontConfig AND UNIX AND NOT APPLE) - list(APPEND VTK_LIBRARIES - vtkRenderingFreeTypeFontConfig - ) - endif() -else() - set(VTK_LIBRARIES - vtkCommon - vtkFiltering - vtkRendering - vtkHybrid - ) -endif() +# VTK_LIBRARIES is automatically set based on selected components if(CTK_LIB_Visualization/VTK/Widgets_USE_TRANSFER_FUNCTION_CHARTS) set(KIT_SRCS @@ -166,61 +115,15 @@ if(CTK_LIB_Visualization/VTK/Widgets_USE_TRANSFER_FUNCTION_CHARTS) vtkScalarsToColorsPreviewChart.cpp vtkScalarsToColorsPreviewChart.h ${KIT_SRCS}) - if(${VTK_VERSION} VERSION_EQUAL 8.90 OR ${VTK_VERSION} VERSION_GREATER 8.90 ) - # VTK_LIBRARIES is automatically set based on selected components - elseif(${VTK_VERSION_MAJOR} GREATER 5) - set(VTK_LIBRARIES - vtkChartsCore - ${VTK_LIBRARIES}) - else() - set(VTK_LIBRARIES - vtkCharts - ${VTK_LIBRARIES}) - endif() - - if(${VTK_VERSION} VERSION_LESS "8.90") - set(VTK_LIBRARIES - vtkViewsContext2D - ${VTK_LIBRARIES}) - if(TARGET vtkRenderingContext${VTK_RENDERING_BACKEND}) - list(APPEND VTK_LIBRARIES vtkRenderingContext${VTK_RENDERING_BACKEND}) - endif() - endif() - -endif() - -if(${VTK_VERSION} VERSION_LESS "8.90") - -if(CTK_LIB_Scripting/Python/Core AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK) - ctkFunctionExtractOptimizedLibrary(PYTHON_LIBRARIES PYTHON_LIBRARY) - list(APPEND VTK_LIBRARIES ${PYTHON_LIBRARY} ${PYTHONQT_LIBRARIES}) - if(${VTK_VERSION_MAJOR} GREATER 5) - list(APPEND VTK_LIBRARIES vtkWrappingPythonCore) - elseif(${VTK_VERSION_MAJOR}.${VTK_VERSION_MINOR} VERSION_GREATER 5.6) - list(APPEND VTK_LIBRARIES vtkPythonCore) - else() - list(APPEND VTK_LIBRARIES vtkCommonPythonD) - endif() -endif() - -if(Q_WS_X11) - # If the faster 'gold' linker is used, to avoid complaints about undefined symbol - # 'XGetWindowAttributes', 'XCreateWindow', ..., let's link against X11 libraries. - find_package(X11) - list(APPEND VTK_LIBRARIES ${X11_LIBRARIES}) -endif() + # VTK_LIBRARIES is automatically set based on selected components endif() # Custom export content -if(${VTK_VERSION} VERSION_LESS "8.90") - set(CTK_VTK_EXPORT_CUSTOM_CONTENT "") -else() - set(CTK_VTK_EXPORT_CUSTOM_CONTENT "#ifndef VTK_OVERRIDE +set(CTK_VTK_EXPORT_CUSTOM_CONTENT "#ifndef VTK_OVERRIDE #define VTK_OVERRIDE override; #endif ") -endif() # Target libraries - See CMake/ctkFunctionGetTargetLibraries.cmake # The following macro will read the target libraries from the file 'target_libraries.cmake' @@ -250,12 +153,10 @@ if(CTK_WRAP_PYTHONQT_LIGHT) ) endif() - if (NOT VTK_VERSION VERSION_LESS "8.90.0") - vtk_module_autoinit( - TARGETS ${PROJECT_NAME} - MODULES ${VTK_LIBRARIES} - ) - endif() + vtk_module_autoinit( + TARGETS ${PROJECT_NAME} + MODULES ${VTK_LIBRARIES} + ) # Plugins #if(CTK_BUILD_QTDESIGNER_PLUGINS) diff --git a/Libs/Visualization/VTK/Core/Testing/Cpp/ctkVTKConnectionTestObjectDelete.cpp b/Libs/Visualization/VTK/Core/Testing/Cpp/ctkVTKConnectionTestObjectDelete.cpp index ae3cbb9d5a..bc3500adcd 100644 --- a/Libs/Visualization/VTK/Core/Testing/Cpp/ctkVTKConnectionTestObjectDelete.cpp +++ b/Libs/Visualization/VTK/Core/Testing/Cpp/ctkVTKConnectionTestObjectDelete.cpp @@ -121,8 +121,7 @@ bool computeTimingAfterObjectDelete(bool observeDeletion, } timerLog->StopTimer(); - QString measurementName = QString("time_%1-%2-%3-%4").arg( - "connection-object-modified").arg(attribute).arg(connectionCount).arg(objectCount); + QString measurementName = QString("time_%1-%2-%3-%4").arg("connection-object-modified", attribute).arg(connectionCount).arg(objectCount); displayDartMeasurement(qPrintable(measurementName), timerLog->GetElapsedTime()); if (!check(__LINE__, "total_event_count", @@ -141,8 +140,7 @@ bool computeTimingAfterObjectDelete(bool observeDeletion, objects.clear(); timerLog->StopTimer(); - QString measurementName = QString("time_%1-%2-%3-%4").arg( - "connection-vtkobject-deleted").arg(attribute).arg(connectionCount).arg(objectCount); + QString measurementName = QString("time_%1-%2-%3-%4").arg("connection-vtkobject-deleted", attribute).arg(connectionCount).arg(objectCount); displayDartMeasurement(qPrintable(measurementName), timerLog->GetElapsedTime()); if (!check(__LINE__, "total_event_count", @@ -177,8 +175,7 @@ bool computeTimingAfterObjectDelete(bool observeDeletion, QCoreApplication::processEvents(); timerLog->StopTimer(); - QString measurementName = QString("time_%1-%2-%3-%4").arg( - "connection-qtobject-deleted").arg(attribute).arg(connectionCount).arg(objectCount); + QString measurementName = QString("time_%1-%2-%3-%4").arg("connection-qtobject-deleted", attribute).arg(connectionCount).arg(objectCount); displayDartMeasurement(qPrintable(measurementName), timerLog->GetElapsedTime()); if (!check(__LINE__, "total_event_count", diff --git a/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.cpp b/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.cpp index dabb9d438e..0f547b68c5 100644 --- a/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.cpp +++ b/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.cpp @@ -202,8 +202,8 @@ ctkVTKErrorLogMessageHandlerPrivate::~ctkVTKErrorLogMessageHandlerPrivate() QString ctkVTKErrorLogMessageHandler::HandlerName = QLatin1String("VTK"); //---------------------------------------------------------------------------- -ctkVTKErrorLogMessageHandler::ctkVTKErrorLogMessageHandler() : - Superclass(), d_ptr(new ctkVTKErrorLogMessageHandlerPrivate(*this)) +ctkVTKErrorLogMessageHandler::ctkVTKErrorLogMessageHandler(QObject* parent) : + Superclass(parent), d_ptr(new ctkVTKErrorLogMessageHandlerPrivate(*this)) { } diff --git a/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.h b/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.h index fc8758b65f..623d1ac2b3 100644 --- a/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.h +++ b/Libs/Visualization/VTK/Core/ctkVTKErrorLogMessageHandler.h @@ -35,10 +35,11 @@ class ctkVTKErrorLogMessageHandlerPrivate; class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKErrorLogMessageHandler : public ctkErrorLogAbstractMessageHandler { + Q_OBJECT public: typedef ctkErrorLogAbstractMessageHandler Superclass; - ctkVTKErrorLogMessageHandler(); + ctkVTKErrorLogMessageHandler(QObject* parent = nullptr); virtual ~ctkVTKErrorLogMessageHandler(); static QString HandlerName; diff --git a/Libs/Visualization/VTK/Core/ctkVTKScalarsToColorsUtils.cpp b/Libs/Visualization/VTK/Core/ctkVTKScalarsToColorsUtils.cpp index 66a2cdd224..fb057e20b0 100644 --- a/Libs/Visualization/VTK/Core/ctkVTKScalarsToColorsUtils.cpp +++ b/Libs/Visualization/VTK/Core/ctkVTKScalarsToColorsUtils.cpp @@ -28,8 +28,7 @@ #include // ---------------------------------------------------------------------------- -static ctkLogger logger( - "org.commontk.visualization.vtk.core.ctkVTKScalarsToColorsUtils"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.core.ctkVTKScalarsToColorsUtils")) // ---------------------------------------------------------------------------- void ctk::remapColorScale( diff --git a/Libs/Visualization/VTK/Widgets/CMakeLists.txt b/Libs/Visualization/VTK/Widgets/CMakeLists.txt index bdfc0b9e9a..46bd851d82 100644 --- a/Libs/Visualization/VTK/Widgets/CMakeLists.txt +++ b/Libs/Visualization/VTK/Widgets/CMakeLists.txt @@ -4,47 +4,43 @@ project(CTKVisualizationVTKWidgets) # 3rd party dependencies # -if(${VTK_VERSION} VERSION_LESS "8.90") - include(${VTK_USE_FILE}) -else() - # VTK >= 8.90 defines VTK_MAJOR_VERSION - set(VTK_VERSION_MAJOR ${VTK_MAJOR_VERSION}) +# VTK >= 8.90 defines VTK_MAJOR_VERSION +set(VTK_VERSION_MAJOR ${VTK_MAJOR_VERSION}) - set(_test_components) - if(BUILD_TESTING) - list(APPEND _test_components - TestingRendering - ImagingGeneral - ) - endif() - - find_package(VTK COMPONENTS - ChartsCore - CommonCore - CommonDataModel - #Context2D - FiltersCore - FiltersGeneral - FiltersModeling - FiltersSources - GUISupportQt +set(_test_components) +if(BUILD_TESTING) + list(APPEND _test_components + TestingRendering ImagingGeneral - ImagingStatistics - IOLegacy - IOXML - InfovisCore - InfovisLayout - InteractionStyle - RenderingContextOpenGL2 - RenderingCore - RenderingFreeType - RenderingOpenGL2 - ViewsCore - ViewsInfovis - ${_test_components} - ) + ) endif() +find_package(VTK COMPONENTS + ChartsCore + CommonCore + CommonDataModel + #Context2D + FiltersCore + FiltersGeneral + FiltersModeling + FiltersSources + GUISupportQt + ImagingGeneral + ImagingStatistics + IOLegacy + IOXML + InfovisCore + InfovisLayout + InteractionStyle + RenderingContextOpenGL2 + RenderingCore + RenderingFreeType + RenderingOpenGL2 + ViewsCore + ViewsInfovis + ${_test_components} +) + # # See CTK/CMake/ctkMacroBuildLib.cmake for details # @@ -135,34 +131,7 @@ set(KIT_resources ) # Set VTK_LIBRARIES variable -if(${VTK_VERSION} VERSION_EQUAL 8.90 OR ${VTK_VERSION} VERSION_GREATER 8.90 ) - # VTK_LIBRARIES is automatically set based on selected components -elseif(${VTK_VERSION_MAJOR} GREATER 5) - set(VTK_LIBRARIES - vtkChartsCore - vtkCommonMath - vtkFiltersSources - vtkImagingGeneral - vtkImagingStatistics - vtkInteractionWidgets - vtkRenderingContext2D - vtkViewsContext2D - vtkGUISupportQt - ) - if(TARGET vtkRenderingContext${VTK_RENDERING_BACKEND}) - list(APPEND VTK_LIBRARIES vtkRenderingContext${VTK_RENDERING_BACKEND}) - endif() - if(TARGET vtkRenderingGL2PS${VTK_RENDERING_BACKEND}) - list(APPEND VTK_LIBRARIES vtkRenderingGL2PS${VTK_RENDERING_BACKEND}) - endif() - if(CTK_LIB_Scripting/Python/Core AND CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK) - set(VTK_LIBRARIES ${VTK_LIBRARIES} vtkWrappingPythonCore) - endif() -else() - set(VTK_LIBRARIES - QVTK - ) -endif() +# VTK_LIBRARIES is automatically set based on selected components if(CTK_LIB_Visualization/VTK/Widgets_USE_TRANSFER_FUNCTION_CHARTS) set(KIT_SRCS @@ -188,17 +157,7 @@ if(CTK_LIB_Visualization/VTK/Widgets_USE_TRANSFER_FUNCTION_CHARTS) Resources/UI/ctkVTKVolumePropertyWidget.ui Resources/UI/ctkVTKScalarsToColorsWidget.ui ${KIT_UI_FORMS}) - if(${VTK_VERSION} VERSION_EQUAL 8.90 OR ${VTK_VERSION} VERSION_GREATER 8.90 ) - # VTK_LIBRARIES is automatically set based on selected components - elseif(${VTK_VERSION_MAJOR} GREATER 5) - set(VTK_LIBRARIES - vtkChartsCore - ${VTK_LIBRARIES}) - else() - set(VTK_LIBRARIES - vtkCharts - ${VTK_LIBRARIES}) - endif() + # VTK_LIBRARIES is automatically set based on selected components endif() # Target libraries - See CMake/ctkFunctionGetTargetLibraries.cmake @@ -222,37 +181,13 @@ endif() # Prefer QVTKOpenGLWidget to QVTKWidget when using Qt5 set(_use_qvtkopenglwidget 1) -if(VTK_VERSION VERSION_LESS "8.90") - if(NOT VTK_RENDERING_BACKEND STREQUAL "OpenGL2") - set(_use_qvtkopenglwidget 0) - endif() -endif() if(_use_qvtkopenglwidget) add_definitions(-DCTK_USE_QVTKOPENGLWIDGET) endif() -# Detect if QVTKOpenGLNativeWidget.h is available -if(VTK_VERSION VERSION_LESS "8.90") - set(_has_QVTKOpenGLNativeWidget_h 0) - if(_use_qvtkopenglwidget) - set(_msg "Checking if QVTKOpenGLNativeWidget.h exists") - message(STATUS "${_msg}") - foreach(include_dir IN ITEMS ${vtkGUISupportQt_INCLUDE_DIRS}) - if(EXISTS "${include_dir}/QVTKOpenGLNativeWidget.h") - set(_has_QVTKOpenGLNativeWidget_h 1) - break() - endif() - endforeach() - if(_has_QVTKOpenGLNativeWidget_h) - message(STATUS "${_msg} - found") - else() - message(STATUS "${_msg} - not found") - endif() - endif() -else() - set(_has_QVTKOpenGLNativeWidget_h 1) -endif () +# QVTKOpenGLNativeWidget.h is always available with VTK >= 9 +set(_has_QVTKOpenGLNativeWidget_h 1) if(_has_QVTKOpenGLNativeWidget_h) @@ -260,14 +195,10 @@ if(_has_QVTKOpenGLNativeWidget_h) endif() # Custom export content -if(${VTK_VERSION} VERSION_LESS "8.90") - set(CTK_VTK_EXPORT_CUSTOM_CONTENT "") -else() - set(CTK_VTK_EXPORT_CUSTOM_CONTENT "#ifndef VTK_OVERRIDE +set(CTK_VTK_EXPORT_CUSTOM_CONTENT "#ifndef VTK_OVERRIDE #define VTK_OVERRIDE override; #endif ") -endif() ctkMacroBuildLib( NAME ${PROJECT_NAME} @@ -304,12 +235,10 @@ if(CTK_WRAP_PYTHONQT_LIGHT) ) endif() -if(NOT VTK_VERSION VERSION_LESS "8.90.0") - vtk_module_autoinit( - TARGETS ${PROJECT_NAME} - MODULES ${VTK_LIBRARIES} - ) -endif() +vtk_module_autoinit( + TARGETS ${PROJECT_NAME} + MODULES ${VTK_LIBRARIES} + ) # Plugins diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/CMakeLists.txt b/Libs/Visualization/VTK/Widgets/Testing/Cpp/CMakeLists.txt index 0a3afdcb79..2d6d6388ad 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/CMakeLists.txt +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/CMakeLists.txt @@ -107,13 +107,7 @@ if(CTK_USE_QTTESTING) endif() ctk_add_executable_utf8(${KIT}CppTests ${Tests} ${Tests_RESOURCES}) -if(${VTK_VERSION} VERSION_EQUAL 8.90 OR ${VTK_VERSION} VERSION_GREATER 8.90 ) - set(VTK_CHARTS_LIB) -elseif(${VTK_VERSION_MAJOR} GREATER 5) - set(VTK_CHARTS_LIB vtkChartsCore) -else() - set(VTK_CHARTS_LIB vtkCharts) -endif() +set(VTK_CHARTS_LIB) # Configure CMake Qt automatic code generation set(uic_search_paths) diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKDataSetModelTest1.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKDataSetModelTest1.cpp index 3cfa486f8d..ced6ff6100 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKDataSetModelTest1.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKDataSetModelTest1.cpp @@ -21,7 +21,7 @@ // Qt includes #include #include -#include +#include #include #include @@ -48,7 +48,7 @@ namespace bool checkItems(int line, const QList& expectedAttributeArrays, ctkVTKDataSetModel* dataSetModel, - QMap locations) + QHash locations) { foreach(vtkAbstractArray* expectedDataArray, expectedAttributeArrays) { @@ -89,7 +89,7 @@ int ctkVTKDataSetModelTest1(int argc, char * argv [] ) { QApplication app(argc, argv); - QMap locations; + QHash locations; vtkNew dataSet; diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogMessageHandlerWithThreadsTest1.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogMessageHandlerWithThreadsTest1.cpp index 984ec64270..0aa8a3b149 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogMessageHandlerWithThreadsTest1.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogMessageHandlerWithThreadsTest1.cpp @@ -42,7 +42,7 @@ namespace class LogVTKMessageThread : public LogMessageThread { public: - LogVTKMessageThread(int id, int maxIteration) : LogMessageThread(id, maxIteration){} + LogVTKMessageThread(int id, int maxIteration, QObject* parent = nullptr) : LogMessageThread(id, maxIteration, parent){} virtual void logMessage(const QDateTime& dateTime, int threadId, int counterIdx) { diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogModelFileLoggingTest1.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogModelFileLoggingTest1.cpp index 97094269a1..c423b83e54 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogModelFileLoggingTest1.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKErrorLogModelFileLoggingTest1.cpp @@ -50,7 +50,11 @@ int ctkVTKErrorLogModelFileLoggingTest1(int argc, char * argv []) // Create log file QTemporaryFile logFile(QDir::tempPath() + "/ctkVTKErrorLogModelFileLoggingTest1.XXXXXX"); logFile.setAutoRemove(false); - logFile.open(); + if (!logFile.open()) + { + qWarning() << "Failed to open temporary log file"; + return EXIT_FAILURE; + } logFile.close(); QString logFilePath = logFile.fileName(); @@ -86,7 +90,7 @@ int ctkVTKErrorLogModelFileLoggingTest1(int argc, char * argv []) { printErrorMessage( QString("Line %1 - Log entry %2 does NOT match expected regular expression.\n\tLogEntry: %3\n\tRegExp: %4"). - arg(__LINE__).arg(entryIndex).arg(logLines.at(entryIndex)).arg(regexp.pattern())); + arg(__LINE__).arg(entryIndex).arg(logLines.at(entryIndex), regexp.pattern())); return EXIT_FAILURE; } } @@ -98,7 +102,7 @@ int ctkVTKErrorLogModelFileLoggingTest1(int argc, char * argv []) { printErrorMessage( QString("Line %1 - Log entry %2 does NOT match expected regular expression.\n\tLogEntry: %3\n\tRegExp: %4"). - arg(__LINE__).arg(entryIndex).arg(logLines.at(entryIndex)).arg(regexp.pattern())); + arg(__LINE__).arg(entryIndex).arg(logLines.at(entryIndex), regexp.pattern())); return EXIT_FAILURE; } } diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp index 30ae27c92c..68ae8fd270 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest1.cpp @@ -120,19 +120,11 @@ int ctkVTKMagnifyViewTest1(int argc, char * argv [] ) #if CTK_USE_QVTKOPENGLWIDGET vtkSmartPointer renderWindow = vtkSmartPointer::New(); -# if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) widget->setRenderWindow(renderWindow); -# else - widget->SetRenderWindow(renderWindow); -# endif #endif vtkNew renderer; -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) widget->renderWindow()->AddRenderer(renderer.GetPointer()); -#else - widget->GetRenderWindow()->AddRenderer(renderer.GetPointer()); -#endif double gray = static_cast(i) / (numVTKWidgets-1); renderer->SetBackground( gray, gray, gray); renderer->SetBackground2( 0., 0., 1.); diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest2.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest2.cpp index 376fd68118..dc15d551bb 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest2.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKMagnifyViewTest2.cpp @@ -46,8 +46,8 @@ #include //----------------------------------------------------------------------------- -bool imageCompare(ctkVTKMagnifyView * magnify, QString baselineDirectory, - QString baselineFilename) +bool imageCompare(ctkVTKMagnifyView * magnify, const QString& baselineDirectory, + const QString& baselineFilename) { QImage output = ctk::grabWidget(magnify); QImage baseline(baselineDirectory + "/" + baselineFilename); @@ -56,8 +56,8 @@ bool imageCompare(ctkVTKMagnifyView * magnify, QString baselineDirectory, //----------------------------------------------------------------------------- // (Used to create baselines, not during testing). -void imageSave(ctkVTKMagnifyView * magnify, QString baselineDirectory, - QString baselineFilename) +void imageSave(ctkVTKMagnifyView * magnify, const QString& baselineDirectory, + const QString& baselineFilename) { QImage output = ctk::grabWidget(magnify); output.save(baselineDirectory + "/" + baselineFilename); @@ -66,8 +66,8 @@ void imageSave(ctkVTKMagnifyView * magnify, QString baselineDirectory, //----------------------------------------------------------------------------- bool runBaselineTest(int time, QApplication& app, ctkVTKMagnifyView * magnify, QWidget * underWidget, bool shouldBeUnder, - QString baselineDirectory, QString testName, - QString testNumber, QString errorMessage) + const QString& baselineDirectory, const QString& testName, + const QString& testNumber, const QString& errorMessage) { QTimer::singleShot(time, &app, SLOT(quit())); if (app.exec() == EXIT_FAILURE) diff --git a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKPropertyWidgetTest.cpp b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKPropertyWidgetTest.cpp index c2335213f1..2fa0ad3fda 100644 --- a/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKPropertyWidgetTest.cpp +++ b/Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKPropertyWidgetTest.cpp @@ -36,6 +36,8 @@ class ctkVTKPropertyWidgetTester: public QObject { Q_OBJECT +public: + explicit ctkVTKPropertyWidgetTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testGUIEvents(); void testVTKProperty(); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.h b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.h index a43b92c194..95e018bf6b 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.h @@ -35,7 +35,7 @@ class ctkVTKAbstractMatrixWidgetPrivate; /// of other classes (ctkVTKTransformWidget?) that don't want to expose /// setMatrix() publicly. class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKAbstractMatrixWidget - : public ctkMatrixWidget + : public ctkMatrixWidget { Q_OBJECT public: diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp index e2724da1d0..d13756f42d 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp @@ -37,7 +37,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKAbstractView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKAbstractView")) //-------------------------------------------------------------------------- int ctkVTKAbstractViewPrivate::MultiSamples = 0; // Default for static var //-------------------------------------------------------------------------- @@ -122,11 +122,7 @@ void ctkVTKAbstractViewPrivate::setupRendering() } this->RenderWindow->SetMultiSamples(nSamples); this->RenderWindow->StereoCapableWindowOn(); -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) this->VTKWidget->setRenderWindow(this->RenderWindow); -#else - this->VTKWidget->SetRenderWindow(this->RenderWindow); -#endif } //--------------------------------------------------------------------------- @@ -183,7 +179,7 @@ void ctkVTKAbstractView::scheduleRender() { Q_D(ctkVTKAbstractView); - //logger.trace(QString("scheduleRender - RenderEnabled: %1 - Request render elapsed: %2ms"). + //logger->trace(QString("scheduleRender - RenderEnabled: %1 - Request render elapsed: %2ms"). // arg(d->RenderEnabled ? "true" : "false") // .arg(d->RequestTime.elapsed())); @@ -254,7 +250,7 @@ void ctkVTKAbstractView::forceRender() d->RequestTime = QTime(); #endif - //logger.trace(QString("forceRender - RenderEnabled: %1") + //logger->trace(QString("forceRender - RenderEnabled: %1") // .arg(d->RenderEnabled ? "true" : "false")); if (!d->RenderEnabled || !this->isVisible()) diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h index 8cba60088f..91113f3ae1 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h @@ -103,10 +103,6 @@ public Q_SLOTS: /// \sa setPauseRender virtual int resumeRender(); - /// Returns true if the current pause render count is greater than 0 - /// \sa setPauseRender - virtual bool isRenderPaused()const; - /// Set maximum rate for rendering (in frames per second). /// If rendering is requested more frequently than this rate using scheduleRender, /// actual rendering will happen at this rate. @@ -155,6 +151,10 @@ public Q_SLOTS: void setUseDepthPeeling(bool use); public: + /// Returns true if the current pause render count is greater than 0 + /// \sa setPauseRender + virtual bool isRenderPaused()const; + /// Get underlying RenderWindow Q_INVOKABLE vtkRenderWindow* renderWindow()const; diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKChartView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKChartView.cpp index 6506410601..821af5de93 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKChartView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKChartView.cpp @@ -41,7 +41,7 @@ #include //---------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKChartView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKChartView")) //---------------------------------------------------------------------------- class ctkVTKChartViewPrivate @@ -88,32 +88,19 @@ void ctkVTKChartViewPrivate::init() Q_Q(ctkVTKChartView); #ifdef CTK_USE_QVTKOPENGLWIDGET -# if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) q->setRenderWindow(this->RenderWindow); -# else - q->SetRenderWindow(this->RenderWindow); -# endif this->ContextView->SetRenderWindow(this->RenderWindow); #endif -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) this->ContextView->SetInteractor(q->interactor()); q->setRenderWindow(this->ContextView->GetRenderWindow()); -#else - this->ContextView->SetInteractor(q->GetInteractor()); - q->SetRenderWindow(this->ContextView->GetRenderWindow()); -#endif // low def for now (faster) //q->GetRenderWindow()->SetMultiSamples(0); //vtkOpenGLContextDevice2D::SafeDownCast(this->ContextView->GetContext()->GetDevice()) // ->SetStringRendererToQt(); #ifndef Q_WS_X11 -# if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) q->renderWindow()->SetLineSmoothing(true); -# else - q->GetRenderWindow()->SetLineSmoothing(true); -# endif #endif this->Chart->SetActionToButton(vtkChart::PAN, vtkContextMouseEvent::MIDDLE_BUTTON); this->Chart->SetActionToButton(vtkChart::SELECT, vtkContextMouseEvent::RIGHT_BUTTON); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKColorTransferFunction.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKColorTransferFunction.cpp index ba06b55ee1..824f6fceff 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKColorTransferFunction.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKColorTransferFunction.cpp @@ -31,7 +31,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.libs.visualization.core.ctkVTKColorTransferFunction"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.visualization.core.ctkVTKColorTransferFunction")) //-------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -92,7 +92,7 @@ void ctkVTKColorTransferFunction::range(qreal& minRange, qreal& maxRange)const if (d->ColorTransferFunction.GetPointer() == 0) { //Q_ASSERT(d->ColorTransferFunction.GetPointer()); - logger.warn("no ColorTransferFunction"); + logger->warn("no ColorTransferFunction"); minRange = 1.; maxRange = 0.; return; @@ -110,7 +110,7 @@ QVariant ctkVTKColorTransferFunction::minValue()const if (d->ColorTransferFunction.GetPointer() == 0) { //Q_ASSERT(d->ColorTransferFunction.GetPointer()); - logger.warn("no ColorTransferFunction"); + logger->warn("no ColorTransferFunction"); return -1; } double rgb[3]; @@ -138,7 +138,7 @@ QVariant ctkVTKColorTransferFunction::maxValue()const if (d->ColorTransferFunction.GetPointer() == 0) { //Q_ASSERT(d->ColorTransferFunction.GetPointer()); - logger.warn("no ColorTransferFunction"); + logger->warn("no ColorTransferFunction"); return -1; } double rgb[3]; diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.cpp index 2541e2a356..81f246564b 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.cpp @@ -163,7 +163,7 @@ ctkVTKDataSetModel::AttributeTypes ctkVTKDataSetArrayComboBox::attributeTypes()c } // -------------------------------------------------------------------------- -void ctkVTKDataSetArrayComboBox::setAttributeTypes(const ctkVTKDataSetModel::AttributeTypes& attributeTypes) +void ctkVTKDataSetArrayComboBox::setAttributeTypes(ctkVTKDataSetModel::AttributeTypes attributeTypes) { this->dataSetModel()->setAttributeTypes(attributeTypes); } @@ -177,7 +177,7 @@ bool ctkVTKDataSetArrayComboBox::noneEnabled()const // ---------------------------------------------------------------------------- void ctkVTKDataSetArrayComboBox::setNoneEnabled(bool noneEnabled) { - return this->dataSetModel()->setIncludeNullItem(noneEnabled); + this->dataSetModel()->setIncludeNullItem(noneEnabled); } // -------------------------------------------------------------------------- diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.h b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.h index a9930df7c8..3af86b359c 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetArrayComboBox.h @@ -60,7 +60,7 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKDataSetArrayComboBox int currentArrayLocation()const; ctkVTKDataSetModel::AttributeTypes attributeTypes()const; - void setAttributeTypes(const ctkVTKDataSetModel::AttributeTypes& attributeTypes); + void setAttributeTypes(ctkVTKDataSetModel::AttributeTypes attributeTypes); /// Set/Get NoneEnabled flags /// An additional empty item is added into the list, where the user can select. diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.cpp index d41da0931f..38ae733ab4 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.cpp @@ -43,7 +43,7 @@ class ctkVTKDataSetModelPrivate void init(); //void listenAbstractArrayModifiedEvent(); - static QList attributeArrayToInsert(const ctkVTKDataSetModel::AttributeTypes& attributeType, + static QList attributeArrayToInsert(ctkVTKDataSetModel::AttributeTypes attributeType, vtkDataSetAttributes * dataSetAttributes); vtkSmartPointer DataSet; @@ -100,7 +100,7 @@ void ctkVTKDataSetModelPrivate::listenAbstractArrayModifiedEvent() //------------------------------------------------------------------------------ QList ctkVTKDataSetModelPrivate::attributeArrayToInsert( - const ctkVTKDataSetModel::AttributeTypes& attributeType, + ctkVTKDataSetModel::AttributeTypes attributeType, vtkDataSetAttributes * dataSetAttributes) { QList attributeArraysToInsert; @@ -192,7 +192,7 @@ ctkVTKDataSetModel::AttributeTypes ctkVTKDataSetModel::attributeTypes()const } //------------------------------------------------------------------------------ -void ctkVTKDataSetModel::setAttributeTypes(const AttributeTypes& attributeTypes) +void ctkVTKDataSetModel::setAttributeTypes(AttributeTypes attributeTypes) { Q_D(ctkVTKDataSetModel); if (d->AttributeType == attributeTypes) diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.h b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.h index 99f8d2cbdb..9892af1fa0 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKDataSetModel.h @@ -90,7 +90,7 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKDataSetModel vtkDataSet* dataSet()const; AttributeTypes attributeTypes()const; - void setAttributeTypes(const AttributeTypes& attributeTypes); + void setAttributeTypes(AttributeTypes attributeTypes); bool includeNullItem()const; void setIncludeNullItem(bool includeNullItem); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp index 3071b2f035..0399eda2fe 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp @@ -166,24 +166,13 @@ void ctkVTKDiscretizableColorTransferWidgetPrivate::setupUi(QWidget* widget) #ifdef CTK_USE_QVTKOPENGLWIDGET vtkSmartPointer renwin = vtkSmartPointer::New(); -# if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) this->ScalarsToColorsView->setRenderWindow(renwin); -# else - this->ScalarsToColorsView->SetRenderWindow(renwin); -# endif #endif -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) this->scalarsToColorsContextView->SetRenderWindow( this->ScalarsToColorsView->renderWindow()); this->scalarsToColorsContextView->SetInteractor( this->ScalarsToColorsView->interactor()); -#else - this->scalarsToColorsContextView->SetRenderWindow( - this->ScalarsToColorsView->GetRenderWindow()); - this->scalarsToColorsContextView->SetInteractor( - this->ScalarsToColorsView->GetInteractor()); -#endif this->scalarsToColorsContextView->GetScene()->AddItem( this->scalarsToColorsContextItem.Get()); @@ -224,8 +213,8 @@ void ctkVTKDiscretizableColorTransferWidgetPrivate::setupUi(QWidget* widget) QObject::connect(invertColorTransferFunctionButton, SIGNAL(clicked()), q, SLOT(invertColorTransferFunction())); - QObject::connect(rangeSlider, SIGNAL(valuesChanged(double, double)), - q, SLOT(onRangeSliderValueChange(double, double))); + QObject::connect(rangeSlider, SIGNAL(valuesChanged(double,double)), + q, SLOT(onRangeSliderValueChange(double,double))); /// Option panel menu QWidget* nanColorWidget = new QWidget(optionButton); @@ -377,11 +366,7 @@ ctkVTKDiscretizableColorTransferWidgetPrivate::colorTransferFunctionModifiedCall QColor selected = QColor::fromRgbF(r, g, b); self->nanButton->setColor(selected); -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) self->ScalarsToColorsView->interactor()->Render(); -#else - self->ScalarsToColorsView->GetInteractor()->Render(); -#endif } // ---------------------------------------------------------------------------- @@ -759,11 +744,7 @@ void ctkVTKDiscretizableColorTransferWidget::onPaletteIndexChanged( Q_D(ctkVTKDiscretizableColorTransferWidget); d->addRangesInHistory(this->getColorTransferFunctionRange(), this->getVisibleRange()); this->copyColorTransferFunction(ctf); -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) d->ScalarsToColorsView->interactor()->Render(); -#else - d->ScalarsToColorsView->GetInteractor()->Render(); -#endif } // ---------------------------------------------------------------------------- diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKHistogram.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKHistogram.cpp index 0830d4c5ba..6a5670b15a 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKHistogram.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKHistogram.cpp @@ -36,7 +36,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.libs.visualization.core.ctkVTKHistogram"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.visualization.core.ctkVTKHistogram")) //-------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -116,14 +116,14 @@ void ctkVTKHistogram::setRange(qreal minRange, qreal maxRange) Q_D(const ctkVTKHistogram); if (d->DataArray.GetPointer() == 0) { - logger.warn("no data array. range will be reset when setting array."); + logger->warn("no data array. range will be reset when setting array."); minRange = 1.; // set incorrect values maxRange = 0.; return; } if (minRange >= maxRange) { - logger.warn("minRange >= maxRange"); + logger->warn("minRange >= maxRange"); qreal pivot = minRange; minRange = maxRange; maxRange = pivot; @@ -144,7 +144,7 @@ void ctkVTKHistogram::range(qreal& minRange, qreal& maxRange)const Q_D(const ctkVTKHistogram); if (d->DataArray.GetPointer() == 0) { - logger.warn("no dataArray"); + logger->warn("no dataArray"); minRange = 1.; // set incorrect values maxRange = 0.; return; diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp index 9ce3e7ef9f..598bd47656 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp @@ -40,7 +40,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKMagnifyView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKMagnifyView")) //-------------------------------------------------------------------------- // -------------------------------------------------------------------------- @@ -175,11 +175,7 @@ void ctkVTKMagnifyViewPrivate::connectRenderWindow(ctkVTKOpenGLNativeWidget * wi Q_ASSERT(widget); Q_ASSERT(this->ObserveRenderWindowEvents); -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) vtkRenderWindow * renderWindow = widget->renderWindow(); -#else - vtkRenderWindow * renderWindow = widget->GetRenderWindow(); -#endif if (renderWindow) { this->qvtkConnect(renderWindow, vtkCommand::EndEvent, @@ -192,11 +188,7 @@ void ctkVTKMagnifyViewPrivate::disconnectRenderWindow(ctkVTKOpenGLNativeWidget * { Q_ASSERT(widget); -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) vtkRenderWindow * renderWindow = widget->renderWindow(); -#else - vtkRenderWindow * renderWindow = widget->GetRenderWindow(); -#endif if (renderWindow) { this->qvtkDisconnect(renderWindow, vtkCommand::EndEvent, @@ -262,11 +254,7 @@ void ctkVTKMagnifyViewPrivate::updatePixmap() Q_Q(ctkVTKMagnifyView); // Retrieve buffer of given QVTKWidget from its render window -#if VTK_MAJOR_VERSION >= 9 || (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90) vtkRenderWindow * renderWindow = this->EventHandler.Widget.data()->renderWindow(); -#else - vtkRenderWindow * renderWindow = this->EventHandler.Widget.data()->GetRenderWindow(); -#endif if (!renderWindow) { return; @@ -382,7 +370,11 @@ void ctkVTKMagnifyViewPrivate::updatePixmap() } pixelData->Delete(); image = image.rgbSwapped(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + image = image.flipped(); +#else image = image.mirrored(); +#endif // Scale the image to zoom, using FastTransformation to prevent smoothing QSize imageSize = actualSize * this->Magnification; diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.cpp index db43e35062..49e62164c8 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.cpp @@ -507,18 +507,18 @@ void ctkVTKRenderView::resetFocalPoint() } //---------------------------------------------------------------------------- -void ctkVTKRenderView::lookFromAxis(const ctkAxesWidget::Axis& axis, double fov) +void ctkVTKRenderView::lookFromAxis(ctkAxesWidget::Axis axis, double fov) { Q_UNUSED(fov); // The FOV parameter is not used anymore. It was not a good idea to force changing // the camera distance from the focal point when the user only requested a view direction // change. - qWarning() << "This function is deprecated. Use lookFromAxis(const ctkAxesWidget::Axis& axis) instead"; + qWarning() << "This function is deprecated. Use lookFromAxis(ctkAxesWidget::Axis axis) instead"; this->lookFromAxis(axis); } //---------------------------------------------------------------------------- -void ctkVTKRenderView::lookFromAxis(const ctkAxesWidget::Axis& axis) +void ctkVTKRenderView::lookFromAxis(ctkAxesWidget::Axis axis) { Q_D(ctkVTKRenderView); Q_ASSERT(d->Renderer); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.h b/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.h index 6416a3051b..45d9832c58 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKRenderView.h @@ -120,14 +120,14 @@ public Q_SLOTS: /// \brief Change camera to look from a given axis to the focal point /// Translate/Rotate the camera to look from a given axis - void lookFromAxis(const ctkAxesWidget::Axis& axis); + void lookFromAxis(ctkAxesWidget::Axis axis); /// \deprecated /// \brief Change camera to look from a given axis to the focal point. /// Translate/Rotate the camera to look from a given axis. /// \param fov is not used (it is kept for backward compatibility of the API) - /// \sa lookFromAxis(const ctkAxesWidget::Axis&) - void lookFromAxis(const ctkAxesWidget::Axis& axis, double fov); + /// \sa lookFromAxis(ctkAxesWidget::Axis) + void lookFromAxis(ctkAxesWidget::Axis axis, double fov); public: diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsComboBox.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsComboBox.cpp index f25636b84e..972490a1a3 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsComboBox.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsComboBox.cpp @@ -56,8 +56,8 @@ void ctkVTKScalarsToColorsComboBoxPrivate::init() Q_Q(ctkVTKScalarsToColorsComboBox); QObject::connect(q->model(), - SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)), - q, SLOT(onRowsAboutToBeRemoved(const QModelIndex&, int, int))); + SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), + q, SLOT(onRowsAboutToBeRemoved(QModelIndex,int,int))); q->setIconSize(QSize(100, 20)); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.cpp index 7ea541d813..e49dc6a2fb 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.cpp @@ -44,7 +44,7 @@ #include // For VTK_VERSION_CHECK //---------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKScalarsToColorsView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKScalarsToColorsView")) //---------------------------------------------------------------------------- class ctkVTKScalarsToColorsViewPrivate diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp index 8354f54f53..58c8a61823 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp @@ -45,7 +45,7 @@ #include //---------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKScalarsToColorsWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKScalarsToColorsWidget")) //---------------------------------------------------------------------------- class ctkVTKScalarsToColorsWidgetPrivate: diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKSurfaceMaterialPropertyWidget.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKSurfaceMaterialPropertyWidget.cpp index 855642757e..6dd12a6494 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKSurfaceMaterialPropertyWidget.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKSurfaceMaterialPropertyWidget.cpp @@ -119,9 +119,7 @@ void ctkVTKSurfaceMaterialPropertyWidget::updateFromProperty() case VTK_FLAT: this->setInterpolationMode(InterpolationFlat); break; case VTK_GOURAUD: this->setInterpolationMode(InterpolationGouraud); break; case VTK_PHONG: this->setInterpolationMode(InterpolationPhong); break; -#if VTK_MAJOR_VERSION >= 9 case VTK_PBR: this->setInterpolationMode(InterpolationPBR); break; -#endif } this->setAmbient(d->Property->GetAmbient()); @@ -129,10 +127,8 @@ void ctkVTKSurfaceMaterialPropertyWidget::updateFromProperty() this->setSpecular(d->Property->GetSpecular()); this->setSpecularPower(d->Property->GetSpecularPower()); -#if VTK_MAJOR_VERSION >= 9 this->setMetallic(d->Property->GetMetallic()); this->setRoughness(d->Property->GetRoughness()); -#endif d->IsUpdatingGUI = false; } @@ -188,11 +184,7 @@ void ctkVTKSurfaceMaterialPropertyWidget::onInterpolationModeChanged( case InterpolationFlat: d->Property->SetInterpolationToFlat(); break; case InterpolationGouraud: d->Property->SetInterpolationToGouraud(); break; case InterpolationPhong: d->Property->SetInterpolationToPhong(); break; -#if VTK_MAJOR_VERSION >= 9 case InterpolationPBR: d->Property->SetInterpolationToPBR(); break; -#else - case InterpolationPBR: break; -#endif } } } @@ -252,7 +244,6 @@ void ctkVTKSurfaceMaterialPropertyWidget::onSpecularPowerChanged(double newSpecu // -------------------------------------------------------------------------- void ctkVTKSurfaceMaterialPropertyWidget::onMetallicChanged(double newMetallic) { -#if VTK_MAJOR_VERSION >= 9 Q_D(ctkVTKSurfaceMaterialPropertyWidget); this->Superclass::onMetallicChanged(newMetallic); if (d->Property.GetPointer() != 0) @@ -261,16 +252,11 @@ void ctkVTKSurfaceMaterialPropertyWidget::onMetallicChanged(double newMetallic) // up-to-date value then. d->Property->SetMetallic(this->metallic()); } -#else - Q_UNUSED(newMetallic); - qWarning() << Q_FUNC_INFO << " failed: metallic property is not supported with VTK < 9"; -#endif } // -------------------------------------------------------------------------- void ctkVTKSurfaceMaterialPropertyWidget::onRoughnessChanged(double newRoughness) { -#if VTK_MAJOR_VERSION >= 9 Q_D(ctkVTKSurfaceMaterialPropertyWidget); this->Superclass::onRoughnessChanged(newRoughness); if (d->Property.GetPointer() != 0) @@ -279,10 +265,6 @@ void ctkVTKSurfaceMaterialPropertyWidget::onRoughnessChanged(double newRoughness // up-to-date value then. d->Property->SetRoughness(this->roughness()); } -#else - Q_UNUSED(newRoughness); - qWarning() << Q_FUNC_INFO << " failed: roughness property is not supported with VTK < 9"; -#endif } // -------------------------------------------------------------------------- diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKThresholdWidget.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKThresholdWidget.cpp index 9136a0e42f..1e03c4deac 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKThresholdWidget.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKThresholdWidget.cpp @@ -34,7 +34,7 @@ #include // for pow //---------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKThresholdWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKThresholdWidget")) //---------------------------------------------------------------------------- class ctkVTKThresholdWidgetPrivate: diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKThumbnailView.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKThumbnailView.cpp index 9bc8bfbe49..0a1026afb0 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKThumbnailView.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKThumbnailView.cpp @@ -41,7 +41,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.slicer.libs.qmrmlwidgets.ctkVTKThumbnailView"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.slicer.libs.qmrmlwidgets.ctkVTKThumbnailView")) //-------------------------------------------------------------------------- #define DEGREES2RADIANS 0.0174532925 @@ -340,7 +340,7 @@ void ctkVTKThumbnailViewPrivate::resetCamera() if (!ren || !cam) { - logger.error("Trying to reset non-existent camera"); + logger->error("Trying to reset non-existent camera"); return; } @@ -349,7 +349,7 @@ void ctkVTKThumbnailViewPrivate::resetCamera() if (!vtkMath::AreBoundsInitialized(bounds)) { - logger.error("Cannot reset camera!"); + logger->error("Cannot reset camera!"); return; } ren->InvokeEvent(vtkCommand::ResetCameraEvent, ren); @@ -395,7 +395,7 @@ void ctkVTKThumbnailViewPrivate::resetCamera() double* vup = cam->GetViewUp(); if ( fabs(vtkMath::Dot(vup,vn)) > 0.999 ) { - logger.warn("Resetting view-up since view plane normal is parallel"); + logger->warn("Resetting view-up since view plane normal is parallel"); cam->SetViewUp(-vup[2], vup[0], vup[1]); } diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.cpp index c53f39cb4c..0941ef8c42 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.cpp @@ -44,7 +44,7 @@ #include //---------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKVolumePropertyWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkVTKVolumePropertyWidget")) //---------------------------------------------------------------------------- class ctkVTKVolumePropertyWidgetPrivate: @@ -98,7 +98,7 @@ void ctkVTKVolumePropertyWidgetPrivate::setupUi(QWidget* widget) this->ScalarOpacityWidget->view()->addCompositeFunction(0, 0, true, true); vtkCompositeControlPointsItem* composite = vtkCompositeControlPointsItem::SafeDownCast( - this->ScalarOpacityWidget->view()->opacityFunctionPlots()[1]); + this->ScalarOpacityWidget->view()->opacityFunctionPlots().at(1)); composite->SetColorFill(true); composite->SetPointsFunction(vtkCompositeControlPointsItem::OpacityPointsFunction); this->ScalarColorWidget->view()->addColorTransferFunction(0); diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.h b/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.h index d7ed6c08bc..7aa159e2ed 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.h @@ -83,6 +83,8 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKVolumePropertyWidget /// Get gradient extents of the chart. Q_INVOKABLE QList chartsGradientExtent()const; + int currentComponent() const; + public Q_SLOTS: void setVolumeProperty(vtkVolumeProperty* volumeProperty); @@ -124,7 +126,6 @@ public Q_SLOTS: void setChartsGradientExtent(double extent[2]); void setChartsGradientExtent(double min, double max); - int currentComponent() const; void setCurrentComponent(int component); Q_SIGNALS: diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp index 8bd94e4aef..d4c4585481 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp +++ b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.cpp @@ -132,7 +132,11 @@ QImage ctk::vtkImageDataToQImage(vtkImageData* imageData) // Qt image is upside-down compared to VTK, so return mirrored image. // Mirroring also takes care of the pixel buffer ownership, because mirroring deep-copies the pixel buffer // (therefore the returned QImage() owns its own pixel buffer). +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + return image.flipped(); +#else return image.mirrored(); +#endif } //---------------------------------------------------------------------------- @@ -157,17 +161,23 @@ bool ctk::qImageToVTKImageData(const QImage& inputQImage, vtkImageData* outputVT vtkIdType numberOfScalarComponents = 0; if (inputQImage.hasAlphaChannel() || forceAlphaChannel) { -#if QT_VERSION >= QT_VERSION_CHECK(5,2,0) +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGBA8888).flipped(); +#elif QT_VERSION >= QT_VERSION_CHECK(5,2,0) normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGBA8888).mirrored(); - numberOfScalarComponents = 4; #else qWarning() << Q_FUNC_INFO << " failed: conversion of 4-component image is not available with Qt < 5.2"; return false; #endif + numberOfScalarComponents = 4; } else { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGB888).flipped(); +#else normalizedQtImage = inputQImage.convertToFormat(QImage::Format_RGB888).mirrored(); +#endif numberOfScalarComponents = 3; } @@ -183,7 +193,7 @@ bool ctk::qImageToVTKImageData(const QImage& inputQImage, vtkImageData* outputVT //---------------------------------------------------------------------------- QImage ctk::scalarsToColorsImage(vtkScalarsToColors* scalarsToColors, - const QSize& size) + QSize size) { if (!scalarsToColors || scalarsToColors->GetNumberOfAvailableColors() <= 0) diff --git a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.h b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.h index 05c870cd40..df0bc30912 100644 --- a/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.h +++ b/Libs/Visualization/VTK/Widgets/ctkVTKWidgetsUtils.h @@ -61,7 +61,7 @@ bool CTK_VISUALIZATION_VTK_WIDGETS_EXPORT qImageToVTKImageData(const QImage& ima /// Convert a vtkScalarsToColors into a QImage /// If size is empty, it will use the large icon size of the application style QImage CTK_VISUALIZATION_VTK_WIDGETS_EXPORT scalarsToColorsImage( - vtkScalarsToColors* scalarsToColors, const QSize& size = QSize()); + vtkScalarsToColors* scalarsToColors, QSize size = QSize()); /// /// \ingroup Visualization_VTK_Widgets diff --git a/Libs/Widgets/Testing/Cpp/ctkConsoleTest.cpp b/Libs/Widgets/Testing/Cpp/ctkConsoleTest.cpp index df5ccabdce..794215ef34 100644 --- a/Libs/Widgets/Testing/Cpp/ctkConsoleTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkConsoleTest.cpp @@ -32,6 +32,8 @@ class ctkConsoleTester: public QObject { Q_OBJECT +public: + explicit ctkConsoleTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testShow(); diff --git a/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetTest.cpp b/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetTest.cpp index c955affdc2..8df1b97cac 100644 --- a/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetTest.cpp @@ -36,6 +36,8 @@ class ctkCoordinatesWidgetTester: public QObject { Q_OBJECT +public: + explicit ctkCoordinatesWidgetTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testDefaults(); @@ -53,7 +55,7 @@ private slots: private: void testDecimals(ctkCoordinatesWidget* coordinatesWidget, int decimals); - void testDecimals(ctkCoordinatesWidget* coordinatesWidget, QString displayedValues); + void testDecimals(ctkCoordinatesWidget* coordinatesWidget, const QString& displayedValues); }; // ---------------------------------------------------------------------------- @@ -124,7 +126,7 @@ ::testDecimals(ctkCoordinatesWidget* coordinatesWidget, int decimals) // ---------------------------------------------------------------------------- void ctkCoordinatesWidgetTester ::testDecimals(ctkCoordinatesWidget* coordinatesWidget, - QString expectedDisplayedText) + const QString& expectedDisplayedText) { QStringList displayedText; QList spinBoxes = diff --git a/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetValueProxyTest.cpp index 4036cda7ea..860d895d32 100644 --- a/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkCoordinatesWidgetValueProxyTest.cpp @@ -34,12 +34,12 @@ class Spy : public QObject Q_OBJECT public: - explicit Spy() + explicit Spy(QObject* parent = nullptr) : QObject(parent) { AcknowledgedSignals = 0; } - void getSpyReport(QString coordinatesString) + void getSpyReport(const QString& coordinatesString) { QCOMPARE(AcknowledgedSignals, 1); AcknowledgedSignals = 0; @@ -77,6 +77,8 @@ public slots: class ctkCoordinatesWidgetValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkCoordinatesWidgetValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testSetValue(); diff --git a/Libs/Widgets/Testing/Cpp/ctkCrosshairLabelTest2.cpp b/Libs/Widgets/Testing/Cpp/ctkCrosshairLabelTest2.cpp index 71cb84a7fd..56cd3ff2fb 100644 --- a/Libs/Widgets/Testing/Cpp/ctkCrosshairLabelTest2.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkCrosshairLabelTest2.cpp @@ -36,8 +36,8 @@ #include //----------------------------------------------------------------------------- -bool imageCompare(ctkCrosshairLabel& crosshair, QString baselineDirectory, - QString baselineFilename) +bool imageCompare(ctkCrosshairLabel& crosshair, const QString& baselineDirectory, + const QString& baselineFilename) { QImage output = ctk::grabWidget(&crosshair); QImage baseline(baselineDirectory + "/" + baselineFilename); @@ -47,8 +47,8 @@ bool imageCompare(ctkCrosshairLabel& crosshair, QString baselineDirectory, //----------------------------------------------------------------------------- // (Used to create baselines, not during testing). -void imageSave(ctkCrosshairLabel& crosshair, QString baselineDirectory, - QString baselineFilename) +void imageSave(ctkCrosshairLabel& crosshair, const QString& baselineDirectory, + const QString& baselineFilename) { QImage output = ctk::grabWidget(&crosshair); output.save(baselineDirectory + "/" + baselineFilename); @@ -56,8 +56,8 @@ void imageSave(ctkCrosshairLabel& crosshair, QString baselineDirectory, //----------------------------------------------------------------------------- bool runBaselineTest(ctkCrosshairLabel& crosshair, - QString baselineDirectory, QString baselineFilename, - QString errorMessage) + const QString& baselineDirectory, const QString& baselineFilename, + const QString& errorMessage) { QApplication::processEvents(); if (!imageCompare(crosshair, baselineDirectory, baselineFilename)) diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderTest.cpp index eab2e3255f..5f4db4200d 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderTest.cpp @@ -30,6 +30,8 @@ class ctkDoubleRangeSliderTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleRangeSliderTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderValueProxyTest.cpp index 717622771f..f504a265e8 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleRangeSliderValueProxyTest.cpp @@ -48,7 +48,7 @@ class CustomSpy : public QObject { Q_OBJECT public: - CustomSpy() + explicit CustomSpy(QObject* parent = nullptr) : QObject(parent) { this->AcknowledgedSignals = 0; } @@ -83,6 +83,8 @@ public slots: class ctkDoubleRangeSliderValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleRangeSliderValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testSetValues(); @@ -125,8 +127,8 @@ void ctkDoubleRangeSliderValueProxyTester::testSetValues() // Spy CustomSpy valuesSpy; - QObject::connect(&slider, SIGNAL(valuesChanged(double, double)), - &valuesSpy, SLOT(onValuesChanged(double, double))); + QObject::connect(&slider, SIGNAL(valuesChanged(double,double)), + &valuesSpy, SLOT(onValuesChanged(double,double))); // Test QFETCH(double, min); diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleSliderTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleSliderTest.cpp index 20aed16517..54e6a95c77 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleSliderTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleSliderTest.cpp @@ -30,6 +30,8 @@ class ctkDoubleSliderTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleSliderTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleSliderValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleSliderValueProxyTest.cpp index 33cd48cd56..3c0cb93191 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleSliderValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleSliderValueProxyTest.cpp @@ -49,6 +49,8 @@ void getSpyReport(QSignalSpy& spy, double expectedValue) class ctkDoubleSliderValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleSliderValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testSetValueProxy(); diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxTest.cpp index e644d3686d..a2a052ee0b 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxTest.cpp @@ -38,6 +38,8 @@ class ctkDoubleSpinBoxTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleSpinBoxTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxValueProxyTest.cpp index 3221dbdbfd..90e5e318cf 100644 --- a/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkDoubleSpinBoxValueProxyTest.cpp @@ -45,7 +45,7 @@ void getSpyReport(QSignalSpy& spy, double expectedValue) } //----------------------------------------------------------------------------- -void getSpyReport(QSignalSpy& spy, QString expectedValue) +void getSpyReport(QSignalSpy& spy, const QString& expectedValue) { QCOMPARE(spy.count(), 1); @@ -59,6 +59,8 @@ void getSpyReport(QSignalSpy& spy, QString expectedValue) class ctkDoubleSpinBoxValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkDoubleSpinBoxValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testSetValue(); diff --git a/Libs/Widgets/Testing/Cpp/ctkErrorLogFDMessageHandlerWithThreadsTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkErrorLogFDMessageHandlerWithThreadsTest1.cpp index 80394d8d62..540f3379e3 100644 --- a/Libs/Widgets/Testing/Cpp/ctkErrorLogFDMessageHandlerWithThreadsTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkErrorLogFDMessageHandlerWithThreadsTest1.cpp @@ -39,7 +39,7 @@ namespace class LogFDMessageThread : public LogMessageThread { public: - LogFDMessageThread(int id, int maxIteration) : LogMessageThread(id, maxIteration){} + LogFDMessageThread(int id, int maxIteration, QObject* parent = nullptr) : LogMessageThread(id, maxIteration, parent){} virtual void logMessage(const QDateTime& dateTime, int threadId, int counterIdx) { diff --git a/Libs/Widgets/Testing/Cpp/ctkErrorLogModelTestHelper.cpp b/Libs/Widgets/Testing/Cpp/ctkErrorLogModelTestHelper.cpp index 830a1b2464..c9b87bf47b 100644 --- a/Libs/Widgets/Testing/Cpp/ctkErrorLogModelTestHelper.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkErrorLogModelTestHelper.cpp @@ -131,7 +131,7 @@ QString checkBoolean(int line, const char* valueName, bool current, bool expecte } //----------------------------------------------------------------------------- -QString checkString(int line, const char* valueName, QString current, QString expected) +QString checkString(int line, const char* valueName, const QString& current, const QString& expected) { if (current != expected) { @@ -162,7 +162,11 @@ void appendToFile(const QString& fileName, const QString& text) { QMutexLocker locker(&AppendToFileMutex); QFile f(fileName); - f.open(QFile::Append); + if (!f.open(QFile::Append)) + { + qWarning() << "appendToFile: Failed to open" << fileName; + return; + } QTextStream s(&f); s << QDateTime::currentDateTime().toString() << " - " << text << "\n"; f.close(); @@ -190,8 +194,8 @@ QStringList readFile(const QString& filePath) class LogMessageThread : public QThread { public: - LogMessageThread(int id, int maxIteration) : - Id(id), MaxIteration(maxIteration), Counter(0){} + LogMessageThread(int id, int maxIteration, QObject* parent = nullptr) : + QThread(parent), Id(id), MaxIteration(maxIteration), Counter(0){} protected: void run(); diff --git a/Libs/Widgets/Testing/Cpp/ctkErrorLogQtMessageHandlerWithThreadsTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkErrorLogQtMessageHandlerWithThreadsTest1.cpp index ba9d2ac061..a3ae3f4c55 100644 --- a/Libs/Widgets/Testing/Cpp/ctkErrorLogQtMessageHandlerWithThreadsTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkErrorLogQtMessageHandlerWithThreadsTest1.cpp @@ -39,7 +39,7 @@ namespace class LogQtMessageThread : public LogMessageThread { public: - LogQtMessageThread(int id, int maxIteration) : LogMessageThread(id, maxIteration){} + LogQtMessageThread(int id, int maxIteration, QObject* parent = nullptr) : LogMessageThread(id, maxIteration, parent){} virtual void logMessage(const QDateTime& dateTime, int threadId, int counterIdx) { diff --git a/Libs/Widgets/Testing/Cpp/ctkErrorLogStreamMessageHandlerWithThreadsTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkErrorLogStreamMessageHandlerWithThreadsTest1.cpp index 933c79260d..ba88b6469c 100644 --- a/Libs/Widgets/Testing/Cpp/ctkErrorLogStreamMessageHandlerWithThreadsTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkErrorLogStreamMessageHandlerWithThreadsTest1.cpp @@ -39,7 +39,7 @@ namespace class LogStreamMessageThread : public LogMessageThread { public: - LogStreamMessageThread(int id, int maxIteration) : LogMessageThread(id, maxIteration){} + LogStreamMessageThread(int id, int maxIteration, QObject* parent = nullptr) : LogMessageThread(id, maxIteration, parent){} virtual void logMessage(const QDateTime& dateTime, int threadId, int counterIdx) { diff --git a/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.cpp b/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.cpp index c74cd1c3a4..f6fdfd2f58 100644 --- a/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.cpp @@ -68,8 +68,8 @@ ctkExampleDerivedWorkflowWidgetStepPrivate::ctkExampleDerivedWorkflowWidgetStepP // ctkExampleDerivedWorkflowWidgetStep methods //----------------------------------------------------------------------------- -ctkExampleDerivedWorkflowWidgetStep::ctkExampleDerivedWorkflowWidgetStep(const QString& newId) : - Superclass(newId) +ctkExampleDerivedWorkflowWidgetStep::ctkExampleDerivedWorkflowWidgetStep(const QString& newId, QWidget* parent) : + Superclass(newId, parent) , d_ptr(new ctkExampleDerivedWorkflowWidgetStepPrivate) { } diff --git a/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.h b/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.h index e5937943b3..9db800ff73 100644 --- a/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.h +++ b/Libs/Widgets/Testing/Cpp/ctkExampleDerivedWorkflowWidgetStep.h @@ -42,7 +42,7 @@ class ctkExampleDerivedWorkflowWidgetStep : public ctkWorkflowWidgetStep Q_OBJECT public: typedef ctkWorkflowWidgetStep Superclass; - explicit ctkExampleDerivedWorkflowWidgetStep(const QString& newId); + explicit ctkExampleDerivedWorkflowWidgetStep(const QString& newId, QWidget* parent = nullptr); virtual ~ctkExampleDerivedWorkflowWidgetStep(); /// diff --git a/Libs/Widgets/Testing/Cpp/ctkExampleWorkflowWidgetStepUsingSignalsAndSlots.h b/Libs/Widgets/Testing/Cpp/ctkExampleWorkflowWidgetStepUsingSignalsAndSlots.h index 9fb328e5ef..a06e12a811 100644 --- a/Libs/Widgets/Testing/Cpp/ctkExampleWorkflowWidgetStepUsingSignalsAndSlots.h +++ b/Libs/Widgets/Testing/Cpp/ctkExampleWorkflowWidgetStepUsingSignalsAndSlots.h @@ -124,10 +124,10 @@ public Q_SLOTS: /// Signals indicating to the workflow that these processes have /// completed - void validationComplete(bool validationSucceeded, const QString& branchId="")const; - void onEntryComplete()const; - void onExitComplete()const; - void createUserInterfaceComplete()const; + void validationComplete(bool validationSucceeded, const QString& branchId=""); + void onEntryComplete(); + void onExitComplete(); + void createUserInterfaceComplete(); protected: QScopedPointer d_ptr; diff --git a/Libs/Widgets/Testing/Cpp/ctkFlatProxyModelTest.cpp b/Libs/Widgets/Testing/Cpp/ctkFlatProxyModelTest.cpp index d4c1ed3aff..92a8a1fb6a 100644 --- a/Libs/Widgets/Testing/Cpp/ctkFlatProxyModelTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkFlatProxyModelTest.cpp @@ -36,6 +36,8 @@ class ctkFlatProxyModelTester: public QObject { Q_OBJECT +public: + explicit ctkFlatProxyModelTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testModel(); void testModel_data(); diff --git a/Libs/Widgets/Testing/Cpp/ctkFontButtonTest.cpp b/Libs/Widgets/Testing/Cpp/ctkFontButtonTest.cpp index bc1876bd15..f42fe942dd 100644 --- a/Libs/Widgets/Testing/Cpp/ctkFontButtonTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkFontButtonTest.cpp @@ -36,6 +36,8 @@ class ctkFontButtonTester: public QObject { Q_OBJECT +public: + explicit ctkFontButtonTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testDefaults(); diff --git a/Libs/Widgets/Testing/Cpp/ctkHistogramTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkHistogramTest1.cpp index a6894d1572..14cb1273dd 100644 --- a/Libs/Widgets/Testing/Cpp/ctkHistogramTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkHistogramTest1.cpp @@ -33,6 +33,7 @@ //----------------------------------------------------------------------------- class ctkDummyHistogram: public ctkHistogram { + Q_OBJECT public: ctkDummyHistogram(QObject* parent = 0):ctkHistogram(parent){} virtual ~ctkDummyHistogram(){} @@ -169,3 +170,5 @@ int ctkHistogramTest1(int argc, char * argv [] ) return EXIT_SUCCESS; } + +#include "ctkHistogramTest1.moc" diff --git a/Libs/Widgets/Testing/Cpp/ctkLanguageComboBoxTest.cpp b/Libs/Widgets/Testing/Cpp/ctkLanguageComboBoxTest.cpp index 62778442ae..8cbfecb917 100644 --- a/Libs/Widgets/Testing/Cpp/ctkLanguageComboBoxTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkLanguageComboBoxTest.cpp @@ -36,6 +36,8 @@ class ctkLanguageComboBoxTester: public QObject { Q_OBJECT +public: + explicit ctkLanguageComboBoxTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testDefaults(); diff --git a/Libs/Widgets/Testing/Cpp/ctkLayoutManagerTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkLayoutManagerTest1.cpp index 67a46ea0eb..8484f2bbb7 100644 --- a/Libs/Widgets/Testing/Cpp/ctkLayoutManagerTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkLayoutManagerTest1.cpp @@ -88,12 +88,13 @@ namespace { class ctkNullViewFactory: public ctkLayoutViewFactory { + Q_OBJECT public: ctkNullViewFactory(QObject* parent = 0) : ctkLayoutViewFactory(parent) { this->setUseCachedViews(true); } - virtual QWidget* createViewFromXML(QDomElement layoutElement){ + virtual QWidget* createViewFromXML(const QDomElement& layoutElement){ Q_UNUSED(layoutElement); return 0; } @@ -221,18 +222,18 @@ int ctkLayoutManagerTest1(int argc, char * argv [] ) app.exec(); if (tabToGridInstanciator->registeredViews().count() != 6 || - tabToGridInstanciator->registeredViews()[0]->isHidden() || - tabToGridInstanciator->registeredViews()[1]->isHidden() || - tabToGridInstanciator->registeredViews()[2]->isHidden() || - tabToGridInstanciator->registeredViews()[3]->isHidden()) + tabToGridInstanciator->registeredViews().at(0)->isHidden() || + tabToGridInstanciator->registeredViews().at(1)->isHidden() || + tabToGridInstanciator->registeredViews().at(2)->isHidden() || + tabToGridInstanciator->registeredViews().at(3)->isHidden()) { std::cout << __LINE__ << " TabToGrid: " << "ctkLayoutManager::setupLayout() failed to show/hide widgets" << tabToGridInstanciator->registeredViews().count() << " " - << tabToGridInstanciator->registeredViews()[0]->isHidden() << " " - << tabToGridInstanciator->registeredViews()[1]->isHidden() << " " - << tabToGridInstanciator->registeredViews()[2]->isHidden() << " " - << tabToGridInstanciator->registeredViews()[3]->isHidden() << std::endl; + << tabToGridInstanciator->registeredViews().at(0)->isHidden() << " " + << tabToGridInstanciator->registeredViews().at(1)->isHidden() << " " + << tabToGridInstanciator->registeredViews().at(2)->isHidden() << " " + << tabToGridInstanciator->registeredViews().at(3)->isHidden() << std::endl; return EXIT_FAILURE; } @@ -256,16 +257,16 @@ int ctkLayoutManagerTest1(int argc, char * argv [] ) app.exec(); if (tabToSimpleInstanciator->registeredViews().count() != 3 || - tabToSimpleInstanciator->registeredViews()[0]->isHidden() || - tabToSimpleInstanciator->registeredViews()[1]->isVisible() || - tabToSimpleInstanciator->registeredViews()[2]->isVisible()) + tabToSimpleInstanciator->registeredViews().at(0)->isHidden() || + tabToSimpleInstanciator->registeredViews().at(1)->isVisible() || + tabToSimpleInstanciator->registeredViews().at(2)->isVisible()) { std::cout << __LINE__ << " TabToSimple: " << "ctkLayoutManager::setupLayout() failed to show/hide widgets" << tabToSimpleInstanciator->registeredViews().count() << " " - << tabToSimpleInstanciator->registeredViews()[0]->isHidden() << " " - << tabToSimpleInstanciator->registeredViews()[1]->isVisible() << " " - << tabToSimpleInstanciator->registeredViews()[2]->isVisible() << std::endl; + << tabToSimpleInstanciator->registeredViews().at(0)->isHidden() << " " + << tabToSimpleInstanciator->registeredViews().at(1)->isVisible() << " " + << tabToSimpleInstanciator->registeredViews().at(2)->isVisible() << std::endl; return EXIT_FAILURE; } @@ -288,17 +289,17 @@ int ctkLayoutManagerTest1(int argc, char * argv [] ) QTimer::singleShot(200, &app, SLOT(quit())); app.exec(); - if (nestedToTabInstanciator->registeredViews()[0]->isHidden() || - nestedToTabInstanciator->registeredViews()[1]->isVisible() || - nestedToTabInstanciator->registeredViews()[2]->isVisible() || - nestedToTabInstanciator->registeredViews()[3]->isVisible()) + if (nestedToTabInstanciator->registeredViews().at(0)->isHidden() || + nestedToTabInstanciator->registeredViews().at(1)->isVisible() || + nestedToTabInstanciator->registeredViews().at(2)->isVisible() || + nestedToTabInstanciator->registeredViews().at(3)->isVisible()) { std::cout << __LINE__ << " NestedToTab: " << "ctkLayoutManager::setupLayout() failed to show/hide widgets" - << nestedToTabInstanciator->registeredViews()[0]->isHidden() << " " - << nestedToTabInstanciator->registeredViews()[1]->isVisible() << " " - << nestedToTabInstanciator->registeredViews()[2]->isVisible() << " " - << nestedToTabInstanciator->registeredViews()[3]->isVisible() << std::endl; + << nestedToTabInstanciator->registeredViews().at(0)->isHidden() << " " + << nestedToTabInstanciator->registeredViews().at(1)->isVisible() << " " + << nestedToTabInstanciator->registeredViews().at(2)->isVisible() << " " + << nestedToTabInstanciator->registeredViews().at(3)->isVisible() << std::endl; return EXIT_FAILURE; } @@ -312,16 +313,16 @@ int ctkLayoutManagerTest1(int argc, char * argv [] ) nestedToTabInstanciator->setUseCachedViews(false); nestedToTabLayoutManager.setLayout(tabMultipleLayoutDoc); if (nestedToTabInstanciator->registeredViews().count() != 2 * 4 || - nestedToTabInstanciator->registeredViews()[0]->isHidden() || - !nestedToTabInstanciator->registeredViews()[1]->isHidden() || - !nestedToTabInstanciator->registeredViews()[2]->isHidden()) + nestedToTabInstanciator->registeredViews().at(0)->isHidden() || + !nestedToTabInstanciator->registeredViews().at(1)->isHidden() || + !nestedToTabInstanciator->registeredViews().at(2)->isHidden()) { std::cout << __LINE__ << " tabMultiple: " << "ctkLayoutManager::setupLayout() failed to show/hide widgets " << nestedToTabInstanciator->registeredViews().count(); for (int i = 0; i < nestedToTabInstanciator->registeredViews().count(); i++) { - std::cout << " " << nestedToTabInstanciator->registeredViews()[i]->isHidden(); + std::cout << " " << nestedToTabInstanciator->registeredViews().at(i)->isHidden(); } std::cout << std::endl; return EXIT_FAILURE; @@ -347,3 +348,5 @@ int ctkLayoutManagerTest1(int argc, char * argv [] ) return app.exec(); } + +#include "ctkLayoutManagerTest1.moc" diff --git a/Libs/Widgets/Testing/Cpp/ctkMatrixWidgetTest.cpp b/Libs/Widgets/Testing/Cpp/ctkMatrixWidgetTest.cpp index 0b508b5fa7..ed430b0e10 100644 --- a/Libs/Widgets/Testing/Cpp/ctkMatrixWidgetTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkMatrixWidgetTest.cpp @@ -31,6 +31,8 @@ class ctkMatrixWidgetTester: public QObject { Q_OBJECT +public: + explicit ctkMatrixWidgetTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkMessageBoxDontShowAgainTest.cpp b/Libs/Widgets/Testing/Cpp/ctkMessageBoxDontShowAgainTest.cpp index 044c4b0cc3..c877991596 100644 --- a/Libs/Widgets/Testing/Cpp/ctkMessageBoxDontShowAgainTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkMessageBoxDontShowAgainTest.cpp @@ -40,6 +40,8 @@ Q_DECLARE_METATYPE(QMessageBox::ButtonRole); class ctkMessageBoxDontShowAgainTester: public QObject { Q_OBJECT +public: + explicit ctkMessageBoxDontShowAgainTester(QObject* parent = nullptr) : QObject(parent) {} void testExecMessageBox(ctkMessageBox& messageBox); private Q_SLOTS: diff --git a/Libs/Widgets/Testing/Cpp/ctkPathListWidgetTest.cpp b/Libs/Widgets/Testing/Cpp/ctkPathListWidgetTest.cpp index 2056f42bfd..bbe826468b 100644 --- a/Libs/Widgets/Testing/Cpp/ctkPathListWidgetTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkPathListWidgetTest.cpp @@ -37,6 +37,9 @@ class ctkPathListWidgetTester : public QObject { Q_OBJECT +public: + explicit ctkPathListWidgetTester(QObject* parent = nullptr) : QObject(parent) {} + private slots: void testDefaults(); diff --git a/Libs/Widgets/Testing/Cpp/ctkPathListWidgetWithButtonsTest.cpp b/Libs/Widgets/Testing/Cpp/ctkPathListWidgetWithButtonsTest.cpp index 4507d5baf5..2c7b226c0b 100644 --- a/Libs/Widgets/Testing/Cpp/ctkPathListWidgetWithButtonsTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkPathListWidgetWithButtonsTest.cpp @@ -41,6 +41,9 @@ class ctkPathListWidgetWithButtonsTester : public QObject { Q_OBJECT +public: + explicit ctkPathListWidgetWithButtonsTester(QObject* parent = nullptr) : QObject(parent) {} + private slots: void testButtons(); diff --git a/Libs/Widgets/Testing/Cpp/ctkPushButtonTest.cpp b/Libs/Widgets/Testing/Cpp/ctkPushButtonTest.cpp index b9def0c4b4..a4a2cd7716 100644 --- a/Libs/Widgets/Testing/Cpp/ctkPushButtonTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkPushButtonTest.cpp @@ -34,6 +34,9 @@ class ctkPushButtonTester : public QObject { Q_OBJECT +public: + explicit ctkPushButtonTester(QObject* parent = nullptr) : QObject(parent) {} + private slots: void testDefaults(); diff --git a/Libs/Widgets/Testing/Cpp/ctkRangeSliderTest.cpp b/Libs/Widgets/Testing/Cpp/ctkRangeSliderTest.cpp index 9c23edf6ae..2f86b56b25 100644 --- a/Libs/Widgets/Testing/Cpp/ctkRangeSliderTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkRangeSliderTest.cpp @@ -33,6 +33,8 @@ class ctkRangeSliderTester: public QObject { Q_OBJECT +public: + explicit ctkRangeSliderTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testGUIEvents(); void testTooltips(); diff --git a/Libs/Widgets/Testing/Cpp/ctkRangeWidgetTest.cpp b/Libs/Widgets/Testing/Cpp/ctkRangeWidgetTest.cpp index 9015f0fea7..641fa28ecd 100644 --- a/Libs/Widgets/Testing/Cpp/ctkRangeWidgetTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkRangeWidgetTest.cpp @@ -33,6 +33,8 @@ class ctkRangeWidgetTester: public QObject { Q_OBJECT +public: + explicit ctkRangeWidgetTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkRangeWidgetValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkRangeWidgetValueProxyTest.cpp index f2572f9ea7..b945de9bff 100644 --- a/Libs/Widgets/Testing/Cpp/ctkRangeWidgetValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkRangeWidgetValueProxyTest.cpp @@ -46,7 +46,7 @@ class CustomSpy : public QObject { Q_OBJECT public: - CustomSpy() + explicit CustomSpy(QObject* parent = nullptr) : QObject(parent) { this->AcknowledgedSignals = 0; } @@ -86,6 +86,8 @@ public slots: class ctkRangeWidgetValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkRangeWidgetValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testSetValues(); diff --git a/Libs/Widgets/Testing/Cpp/ctkSearchBoxTest.cpp b/Libs/Widgets/Testing/Cpp/ctkSearchBoxTest.cpp index 24c47b63ae..bb423bb2b4 100644 --- a/Libs/Widgets/Testing/Cpp/ctkSearchBoxTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkSearchBoxTest.cpp @@ -31,6 +31,9 @@ class ctkSearchBoxTester : public QObject { Q_OBJECT +public: + explicit ctkSearchBoxTester(QObject* parent = nullptr) : QObject(parent) {} + private slots: void testSignals(); diff --git a/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest.cpp b/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest.cpp index 282d83da42..350851b590 100644 --- a/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest.cpp @@ -38,6 +38,8 @@ class ctkSettingsPanelTester: public QObject { Q_OBJECT +public: + explicit ctkSettingsPanelTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testChangeProperty(); @@ -224,7 +226,9 @@ namespace //----------------------------------------------------------------------------- class ctkSettingsPanelForTest : public ctkSettingsPanel { + Q_OBJECT public: + explicit ctkSettingsPanelForTest(QWidget* parent = nullptr) : ctkSettingsPanel(parent) {} QVariant myDefaultPropertyValue(const QString& key) const { return this->defaultPropertyValue(key); diff --git a/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest1.cpp index 9c1a025c38..1eecfcb1d5 100644 --- a/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkSettingsPanelTest1.cpp @@ -42,7 +42,9 @@ namespace //----------------------------------------------------------------------------- class ctkSettingsPanelForTest : public ctkSettingsPanel { + Q_OBJECT public: + explicit ctkSettingsPanelForTest(QWidget* parent = nullptr) : ctkSettingsPanel(parent) {} QVariant myDefaultPropertyValue(const QString& key) const { return this->defaultPropertyValue(key); @@ -445,3 +447,5 @@ int TestStringList(ctkSettingsPanelForTest& settingsPanel) return EXIT_SUCCESS; } + +#include "ctkSettingsPanelTest1.moc" diff --git a/Libs/Widgets/Testing/Cpp/ctkSliderWidgetTest.cpp b/Libs/Widgets/Testing/Cpp/ctkSliderWidgetTest.cpp index bf95aa745b..97de9dae6a 100644 --- a/Libs/Widgets/Testing/Cpp/ctkSliderWidgetTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkSliderWidgetTest.cpp @@ -37,6 +37,8 @@ class ctkSliderWidgetTester: public QObject { Q_OBJECT +public: + explicit ctkSliderWidgetTester(QObject* parent = nullptr) : QObject(parent) {} private slots: void testUI(); diff --git a/Libs/Widgets/Testing/Cpp/ctkSliderWidgetValueProxyTest.cpp b/Libs/Widgets/Testing/Cpp/ctkSliderWidgetValueProxyTest.cpp index 2f9efbaceb..fd3382996e 100644 --- a/Libs/Widgets/Testing/Cpp/ctkSliderWidgetValueProxyTest.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkSliderWidgetValueProxyTest.cpp @@ -52,6 +52,9 @@ class ctkSliderWidgetValueProxyTester: public QObject { Q_OBJECT +public: + explicit ctkSliderWidgetValueProxyTester(QObject* parent = nullptr) : QObject(parent) {} + private slots: void testSetValue(); void testSetValue_data(); diff --git a/Libs/Widgets/Testing/Cpp/ctkTransferFunctionRepresentationTest2.cpp b/Libs/Widgets/Testing/Cpp/ctkTransferFunctionRepresentationTest2.cpp index 951ae9f62c..bcf2c9a242 100644 --- a/Libs/Widgets/Testing/Cpp/ctkTransferFunctionRepresentationTest2.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkTransferFunctionRepresentationTest2.cpp @@ -33,6 +33,7 @@ class ctkForcedTransferFunction: public ctkTransferFunction { + Q_OBJECT public: typedef ctkTransferFunction Superclass; ctkForcedTransferFunction(QObject* parent = 0) : Superclass(parent) @@ -105,3 +106,5 @@ int ctkTransferFunctionRepresentationTest2( int argc, char * argv []) return EXIT_SUCCESS; } + +#include "ctkTransferFunctionRepresentationTest2.moc" diff --git a/Libs/Widgets/Testing/Cpp/ctkTransferFunctionTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkTransferFunctionTest1.cpp index c53001b969..778504f58b 100644 --- a/Libs/Widgets/Testing/Cpp/ctkTransferFunctionTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkTransferFunctionTest1.cpp @@ -30,6 +30,7 @@ class ctkDummyTransferFunction: public ctkTransferFunction { + Q_OBJECT public: ctkDummyTransferFunction(QObject* parent = 0):ctkTransferFunction(parent){} virtual ~ctkDummyTransferFunction(){} @@ -195,3 +196,5 @@ int ctkTransferFunctionTest1(int argc, char * argv []) return EXIT_SUCCESS; } + +#include "ctkTransferFunctionTest1.moc" diff --git a/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest1.cpp b/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest1.cpp index eb7de4bdc5..47eb7a0124 100644 --- a/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest1.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest1.cpp @@ -154,7 +154,7 @@ struct derivedTestData ctkExampleDerivedWorkflowWidgetStep* stepToChangeLineEdit; QString lineEditText; - derivedTestData(QPushButton* newButtonToClick, ctkExampleDerivedWorkflowWidgetStep* newCurrentStep, ctkExampleDerivedWorkflowWidgetStep* newHiddenStep, ctkExampleDerivedWorkflowWidgetStep* newStepToChangeLineEdit=0, QString newLineEditText="") + derivedTestData(QPushButton* newButtonToClick, ctkExampleDerivedWorkflowWidgetStep* newCurrentStep, ctkExampleDerivedWorkflowWidgetStep* newHiddenStep, ctkExampleDerivedWorkflowWidgetStep* newStepToChangeLineEdit=0, const QString& newLineEditText="") { this->buttonToClick = newButtonToClick; this->currentStep = newCurrentStep; @@ -196,7 +196,7 @@ int userInteractionSimulator1(QApplication& app, ctkExampleDerivedWorkflowWidget Q_ASSERT(nextButton); #ifndef QT_NO_DEBUG - QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().first(); + QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().constFirst(); Q_ASSERT(finishButton); #endif @@ -290,7 +290,7 @@ int userInteractionSimulator2(QApplication& app, ctkExampleDerivedWorkflowWidget QPushButton* backButton = workflowWidget->buttonBoxWidget()->backButton(); QPushButton* nextButton = workflowWidget->buttonBoxWidget()->nextButton(); - QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().first(); + QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().constFirst(); Q_ASSERT(backButton); Q_ASSERT(nextButton); Q_ASSERT(finishButton); diff --git a/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest2.cpp b/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest2.cpp index 915c1eeb14..62f177c0b8 100644 --- a/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest2.cpp +++ b/Libs/Widgets/Testing/Cpp/ctkWorkflowWidgetTest2.cpp @@ -155,7 +155,7 @@ struct signalSlotTestData ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* qObjectToChangeLineEdit; QString lineEditText; - signalSlotTestData(QPushButton* newButtonToClick, ctkWorkflowWidgetStep* newCurrentStep, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newCurrentQObject, ctkWorkflowWidgetStep* newHiddenStep, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newHiddenQObject, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newQObjectToChangeLineEdit=0, QString newLineEditText="") + signalSlotTestData(QPushButton* newButtonToClick, ctkWorkflowWidgetStep* newCurrentStep, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newCurrentQObject, ctkWorkflowWidgetStep* newHiddenStep, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newHiddenQObject, ctkExampleWorkflowWidgetStepUsingSignalsAndSlots* newQObjectToChangeLineEdit=0, const QString& newLineEditText="") { this->buttonToClick = newButtonToClick; this->currentStep = newCurrentStep; @@ -288,7 +288,7 @@ int userInteractionSimulator2(QApplication& app, ctkWorkflowWidgetStep* step1, c QPushButton* backButton = workflowWidget->buttonBoxWidget()->backButton(); QPushButton* nextButton = workflowWidget->buttonBoxWidget()->nextButton(); - QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().first(); + QPushButton* finishButton = workflowWidget->buttonBoxWidget()->goToButtons().constFirst(); Q_ASSERT(backButton); Q_ASSERT(nextButton); Q_ASSERT(finishButton); diff --git a/Libs/Widgets/ctkActionsWidget.cpp b/Libs/Widgets/ctkActionsWidget.cpp index 6df91189cf..93bedc8e3b 100644 --- a/Libs/Widgets/ctkActionsWidget.cpp +++ b/Libs/Widgets/ctkActionsWidget.cpp @@ -348,8 +348,15 @@ ctkSortFilterActionsProxyModel::ctkSortFilterActionsProxyModel(QObject* parentOb void ctkSortFilterActionsProxyModel::setActionsWithNoShortcutVisible(bool visible) { Q_D(ctkSortFilterActionsProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); +#endif d->ActionsWithNoShortcutVisible = visible; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //----------------------------------------------------------------------------- @@ -363,8 +370,15 @@ bool ctkSortFilterActionsProxyModel::areActionsWithNoShortcutVisible()const void ctkSortFilterActionsProxyModel::setMenuActionsVisible(bool visible) { Q_D(ctkSortFilterActionsProxyModel); +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->beginFilterChange(); +#endif d->MenuActionsVisible = visible; +#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + this->endFilterChange(); +#else this->invalidateFilter(); +#endif } //----------------------------------------------------------------------------- diff --git a/Libs/Widgets/ctkAxesWidget.h b/Libs/Widgets/ctkAxesWidget.h index 78f6935386..c21694af3c 100644 --- a/Libs/Widgets/ctkAxesWidget.h +++ b/Libs/Widgets/ctkAxesWidget.h @@ -64,6 +64,15 @@ public : /// False by default. bool autoReset() const; + /// Get the axes labels + QStringList axesLabels() const; + + /// Size hints + virtual QSize minimumSizeHint()const; + virtual QSize sizeHint()const; + virtual bool hasHeightForWidth()const; + virtual int heightForWidth(int width)const; + Q_SIGNALS: void currentAxisChanged(ctkAxesWidget::Axis axis); @@ -93,15 +102,6 @@ public slots : /// \sa axesLabels() bool setAxesLabels(const QStringList& labels); - /// Get the axes labels - QStringList axesLabels() const; - - /// Size hints - virtual QSize minimumSizeHint()const; - virtual QSize sizeHint()const; - virtual bool hasHeightForWidth()const; - virtual int heightForWidth(int width)const; - protected: void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *mouseEvent); diff --git a/Libs/Widgets/ctkBasePopupWidget.cpp b/Libs/Widgets/ctkBasePopupWidget.cpp index 24c1bea6b0..8e81577e96 100644 --- a/Libs/Widgets/ctkBasePopupWidget.cpp +++ b/Libs/Widgets/ctkBasePopupWidget.cpp @@ -312,7 +312,7 @@ QRect ctkBasePopupWidgetPrivate::baseGeometry()const } // ------------------------------------------------------------------------- -QPoint ctkBasePopupWidgetPrivate::mapToGlobal(const QPoint& baseWidgetPoint)const +QPoint ctkBasePopupWidgetPrivate::mapToGlobal(QPoint baseWidgetPoint)const { QPoint mappedPoint = baseWidgetPoint; if (!this->BaseWidget.isNull() && this->BaseWidget->parentWidget()) diff --git a/Libs/Widgets/ctkBasePopupWidget_p.h b/Libs/Widgets/ctkBasePopupWidget_p.h index 5b6fe47480..cb182737ae 100644 --- a/Libs/Widgets/ctkBasePopupWidget_p.h +++ b/Libs/Widgets/ctkBasePopupWidget_p.h @@ -76,7 +76,7 @@ class CTK_WIDGETS_EXPORT ctkBasePopupWidgetPrivate QRect desiredOpenGeometry()const; QRect desiredOpenGeometry(QRect baseGeometry)const; QRect baseGeometry()const; - QPoint mapToGlobal(const QPoint& baseWidgetPoint)const; + QPoint mapToGlobal(QPoint baseWidgetPoint)const; QPropertyAnimation* currentAnimation()const; diff --git a/Libs/Widgets/ctkCheckBox.cpp b/Libs/Widgets/ctkCheckBox.cpp index 878a5aa038..944d629ae9 100644 --- a/Libs/Widgets/ctkCheckBox.cpp +++ b/Libs/Widgets/ctkCheckBox.cpp @@ -29,8 +29,8 @@ #include // ---------------------------------------------------------------------------- -class ctkCheckBoxStyle : public ctkProxyStyle -{ +class ctkCheckBoxStyle : public ctkProxyStyle { + Q_OBJECT public: typedef ctkProxyStyle Superclass; ctkCheckBoxStyle(QStyle* baseStyle, QObject* parent = 0); @@ -184,7 +184,7 @@ QIcon ctkCheckBox::indicatorIcon() const } // ---------------------------------------------------------------------------- -void ctkCheckBox::setIndicatorIconSize(const QSize& newSize) +void ctkCheckBox::setIndicatorIconSize(QSize newSize) { Q_D(ctkCheckBox); d->IconStyle->IndicatorSize = newSize; @@ -197,3 +197,5 @@ QSize ctkCheckBox::indicatorIconSize() const Q_D(const ctkCheckBox); return d->IconStyle->IndicatorSize; } + +#include "ctkCheckBox.moc" diff --git a/Libs/Widgets/ctkCheckBox.h b/Libs/Widgets/ctkCheckBox.h index 3e6996b664..34f82bed6f 100644 --- a/Libs/Widgets/ctkCheckBox.h +++ b/Libs/Widgets/ctkCheckBox.h @@ -53,7 +53,7 @@ class CTK_WIDGETS_EXPORT ctkCheckBox : public QCheckBox /// Resize the indicator icon to Qsize. /// If newSize is bigger than the indicator icon's maximum size, /// The icon will get the icon's maximum size and not newSize. - void setIndicatorIconSize(const QSize& newSize); + void setIndicatorIconSize(QSize newSize); QSize indicatorIconSize() const; protected: diff --git a/Libs/Widgets/ctkCheckableComboBox.cpp b/Libs/Widgets/ctkCheckableComboBox.cpp index 9749d25045..b6e0a08bea 100644 --- a/Libs/Widgets/ctkCheckableComboBox.cpp +++ b/Libs/Widgets/ctkCheckableComboBox.cpp @@ -40,8 +40,8 @@ #include // Similar to QComboBoxDelegate -class ctkComboBoxDelegate : public QItemDelegate -{ +class ctkComboBoxDelegate : public QItemDelegate { + Q_OBJECT public: ctkComboBoxDelegate(QObject *parent, QComboBox *cmb) : QItemDelegate(parent), ComboBox(cmb) @@ -432,3 +432,5 @@ void ctkCheckableComboBox::keyReleaseEvent(QKeyEvent *event) emit this->returnRelease(); } } + +#include "ctkCheckableComboBox.moc" diff --git a/Libs/Widgets/ctkCollapsibleGroupBox.cpp b/Libs/Widgets/ctkCollapsibleGroupBox.cpp index a9a4efb6c8..df374f7a56 100644 --- a/Libs/Widgets/ctkCollapsibleGroupBox.cpp +++ b/Libs/Widgets/ctkCollapsibleGroupBox.cpp @@ -35,6 +35,7 @@ //----------------------------------------------------------------------------- class ctkCollapsibleGroupBoxStyle:public ctkProxyStyle { + Q_OBJECT public: typedef ctkProxyStyle Superclass; ctkCollapsibleGroupBoxStyle(QStyle* style = 0, QObject* parent =0) @@ -330,3 +331,5 @@ bool ctkCollapsibleGroupBox::eventFilter(QObject* child, QEvent* e) } return this->QGroupBox::eventFilter(child, e); } + +#include "ctkCollapsibleGroupBox.moc" diff --git a/Libs/Widgets/ctkColorPickerButton.cpp b/Libs/Widgets/ctkColorPickerButton.cpp index 1041583ff9..dc8a301bb5 100644 --- a/Libs/Widgets/ctkColorPickerButton.cpp +++ b/Libs/Widgets/ctkColorPickerButton.cpp @@ -199,7 +199,7 @@ bool ctkColorPickerButton::displayColorName()const } //----------------------------------------------------------------------------- -void ctkColorPickerButton::setDialogOptions(const ColorDialogOptions& options) +void ctkColorPickerButton::setDialogOptions(ColorDialogOptions options) { Q_D(ctkColorPickerButton); d->DialogOptions = options; diff --git a/Libs/Widgets/ctkColorPickerButton.h b/Libs/Widgets/ctkColorPickerButton.h index 795ff7628f..4c92c5130f 100644 --- a/Libs/Widgets/ctkColorPickerButton.h +++ b/Libs/Widgets/ctkColorPickerButton.h @@ -101,7 +101,7 @@ class CTK_WIDGETS_EXPORT ctkColorPickerButton : public QPushButton /// /// Set the color dialog options to configure the color dialog. /// \sa QColorDialog::setOptions QColorDialog::ColorDialogOption - void setDialogOptions(const ColorDialogOptions& options); + void setDialogOptions(ColorDialogOptions options); const ColorDialogOptions& dialogOptions() const; /// diff --git a/Libs/Widgets/ctkComboBox.cpp b/Libs/Widgets/ctkComboBox.cpp index cc0c394785..45d37aad2a 100644 --- a/Libs/Widgets/ctkComboBox.cpp +++ b/Libs/Widgets/ctkComboBox.cpp @@ -240,7 +240,7 @@ void ctkComboBox::forceDefault(bool newForceDefault) } // ------------------------------------------------------------------------- -void ctkComboBox::setElideMode(const Qt::TextElideMode& newMode) +void ctkComboBox::setElideMode(Qt::TextElideMode newMode) { Q_D(ctkComboBox); d->ElideMode = newMode; @@ -392,7 +392,7 @@ QString ctkComboBox::currentUserDataAsString()const } // ------------------------------------------------------------------------- -void ctkComboBox::setCurrentUserDataAsString(QString userData) +void ctkComboBox::setCurrentUserDataAsString(const QString& userData) { for (int index=0; indexcount(); ++index) { diff --git a/Libs/Widgets/ctkComboBox.h b/Libs/Widgets/ctkComboBox.h index a9ff51498b..15ce2dbef9 100644 --- a/Libs/Widgets/ctkComboBox.h +++ b/Libs/Widgets/ctkComboBox.h @@ -75,7 +75,7 @@ class CTK_WIDGETS_EXPORT ctkComboBox : public QComboBox /// setElideMode can elide the text displayed on the combobox. /// Qt::ElideNone by default (same behavior as QComboBox) - void setElideMode(const Qt::TextElideMode& newMode); + void setElideMode(Qt::TextElideMode newMode); Qt::TextElideMode elideMode()const; /// \tbd turn into flags ? @@ -92,7 +92,7 @@ class CTK_WIDGETS_EXPORT ctkComboBox : public QComboBox /// a visible vertical scrollbar. ScrollWithNoVScrollBar }; - Q_ENUM(ScrollEffect) + Q_ENUM(ScrollEffect); /// Return the scrollWheelEffect property value. /// \sa scrollEffect ScrollEffect scrollWheelEffect()const; @@ -110,7 +110,7 @@ class CTK_WIDGETS_EXPORT ctkComboBox : public QComboBox public slots: /// Set current item based on user data - void setCurrentUserDataAsString(QString userData); + void setCurrentUserDataAsString(const QString& userData); protected: /// Reimplemented for internal reasons diff --git a/Libs/Widgets/ctkConsole.cpp b/Libs/Widgets/ctkConsole.cpp index 6b683dec5b..f4f4d93b0b 100644 --- a/Libs/Widgets/ctkConsole.cpp +++ b/Libs/Widgets/ctkConsole.cpp @@ -1253,7 +1253,7 @@ CTK_SET_CPP(ctkConsole, const QString&, setPs2, Ps2); //----------------------------------------------------------------------------- CTK_GET_CPP(ctkConsole, ctkConsole::EditorHints, editorHints, EditorHints); -CTK_SET_CPP(ctkConsole, const ctkConsole::EditorHints&, setEditorHints, EditorHints); +CTK_SET_CPP(ctkConsole, ctkConsole::EditorHints, setEditorHints, EditorHints); //----------------------------------------------------------------------------- int ctkConsole::cursorPosition() const @@ -1295,7 +1295,7 @@ Qt::ScrollBarPolicy ctkConsole::scrollBarPolicy()const } //----------------------------------------------------------------------------- -void ctkConsole::setScrollBarPolicy(const Qt::ScrollBarPolicy& newScrollBarPolicy) +void ctkConsole::setScrollBarPolicy(Qt::ScrollBarPolicy newScrollBarPolicy) { Q_D(ctkConsole); d->setVerticalScrollBarPolicy(newScrollBarPolicy); @@ -1325,7 +1325,7 @@ void ctkConsole::addCompleterShortcut(const QKeySequence& key) CTK_GET_CPP(ctkConsole, ctkConsole::RunFileOptions, runFileOptions, RunFileOptions); //----------------------------------------------------------------------------- -void ctkConsole::setRunFileOptions(const RunFileOptions& newOptions) +void ctkConsole::setRunFileOptions(RunFileOptions newOptions) { Q_D(ctkConsole); d->RunFileButton->setVisible(newOptions.testFlag(ctkConsole::RunFileButton)); @@ -1522,8 +1522,8 @@ QString ctkConsole::stdInRedirectCallBack(void * callData) namespace { -class InputEventLoop : public QEventLoop -{ +class InputEventLoop : public QEventLoop { + Q_OBJECT public: InputEventLoop(QApplication * app, QObject * parentObject = 0) : QEventLoop(parentObject), App(app){} @@ -1534,7 +1534,6 @@ class InputEventLoop : public QEventLoop } QApplication * App; }; - } //----------------------------------------------------------------------------- @@ -1576,3 +1575,5 @@ void ctkConsole::setMaxVisibleCompleterItems(int count) } this->completer()->setMaxVisibleItems(count); } + +#include "ctkConsole.moc" diff --git a/Libs/Widgets/ctkConsole.h b/Libs/Widgets/ctkConsole.h index 8ba4c2df54..35f9c8ddef 100644 --- a/Libs/Widgets/ctkConsole.h +++ b/Libs/Widgets/ctkConsole.h @@ -168,12 +168,12 @@ class CTK_WIDGETS_EXPORT ctkConsole : public QWidget EditorHints editorHints()const; /// \sa editorHints() - void setEditorHints(const EditorHints& newEditorHints); + void setEditorHints(EditorHints newEditorHints); Qt::ScrollBarPolicy scrollBarPolicy()const; /// \sa scrollBarPolicy() - void setScrollBarPolicy(const Qt::ScrollBarPolicy& newScrollBarPolicy); + void setScrollBarPolicy(Qt::ScrollBarPolicy newScrollBarPolicy); /// Returns the string used as primary prompt virtual QString ps1() const; @@ -226,7 +226,7 @@ class CTK_WIDGETS_EXPORT ctkConsole : public QWidget /// Set which options to run file are enabled. /// Default is RunFileShortcut. /// \sa runFileOptions() - void setRunFileOptions(const RunFileOptions& newOptions); + void setRunFileOptions(RunFileOptions newOptions); /// Get the current command buffer (text on current input line, not yet executed) /// \sa setCommandBuffer() @@ -318,10 +318,12 @@ public Q_SLOTS: Q_DECLARE_OPERATORS_FOR_FLAGS(ctkConsole::EditorHints); //----------------------------------------------------------------------------- -class CTK_WIDGETS_EXPORT ctkConsoleCompleter : public QCompleter -{ +class CTK_WIDGETS_EXPORT ctkConsoleCompleter : public QCompleter { + Q_OBJECT public: + explicit ctkConsoleCompleter(QObject* parent = nullptr) : QCompleter(parent) {} + /// Update the completion model given a string. The given string /// is the current console text between the cursor and the start of /// the line. @@ -344,5 +346,4 @@ class CTK_WIDGETS_EXPORT ctkConsoleCompleter : public QCompleter QStringList AutocompletePreferenceList; }; - #endif diff --git a/Libs/Widgets/ctkCoordinatesWidget.cpp b/Libs/Widgets/ctkCoordinatesWidget.cpp index 586820e942..5eb43724ad 100644 --- a/Libs/Widgets/ctkCoordinatesWidget.cpp +++ b/Libs/Widgets/ctkCoordinatesWidget.cpp @@ -453,7 +453,7 @@ double ctkCoordinatesWidget::singleStep() const } //------------------------------------------------------------------------------ -void ctkCoordinatesWidget::setCoordinatesAsString(QString _pos) +void ctkCoordinatesWidget::setCoordinatesAsString(const QString& _pos) { Q_D(ctkCoordinatesWidget); QStringList posList = _pos.split(','); diff --git a/Libs/Widgets/ctkCoordinatesWidget.h b/Libs/Widgets/ctkCoordinatesWidget.h index eefd7f72b0..7c0dbbf7a4 100644 --- a/Libs/Widgets/ctkCoordinatesWidget.h +++ b/Libs/Widgets/ctkCoordinatesWidget.h @@ -128,7 +128,7 @@ class CTK_WIDGETS_EXPORT ctkCoordinatesWidget : public QWidget /// Set/Get the coordinates. Use commas to separate elements, spaces are /// allowed: e.g. "0,0.0, 0." - void setCoordinatesAsString(QString pos); + void setCoordinatesAsString(const QString& pos); QString coordinatesAsString()const; /// Set/Get the coordinates diff --git a/Libs/Widgets/ctkCrosshairLabel.cpp b/Libs/Widgets/ctkCrosshairLabel.cpp index 2869c0a0b8..b044fbeb62 100644 --- a/Libs/Widgets/ctkCrosshairLabel.cpp +++ b/Libs/Widgets/ctkCrosshairLabel.cpp @@ -33,7 +33,7 @@ #include //-------------------------------------------------------------------------- -static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkCrosshairLabel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.visualization.vtk.widgets.ctkCrosshairLabel")) //-------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -256,7 +256,7 @@ CTK_GET_CPP(ctkCrosshairLabel, ctkCrosshairLabel::CrosshairTypes, crosshairType, CrosshairType) // -------------------------------------------------------------------------- -void ctkCrosshairLabel::setCrosshairType(const CrosshairTypes& newType) +void ctkCrosshairLabel::setCrosshairType(CrosshairTypes newType) { Q_D(ctkCrosshairLabel); if (newType == d->CrosshairType) diff --git a/Libs/Widgets/ctkCrosshairLabel.h b/Libs/Widgets/ctkCrosshairLabel.h index e9cc59c216..35cedb623f 100644 --- a/Libs/Widgets/ctkCrosshairLabel.h +++ b/Libs/Widgets/ctkCrosshairLabel.h @@ -94,7 +94,7 @@ class CTK_WIDGETS_EXPORT ctkCrosshairLabel : public QLabel /// Set/get the crosshair type. Default SimpleCrosshair. CrosshairTypes crosshairType() const; - void setCrosshairType(const CrosshairTypes& newType); + void setCrosshairType(CrosshairTypes newType); /// Set/get color to set the widget to when not magnifying or when label /// size is larger than pixmap size. Default is the color from the widget's diff --git a/Libs/Widgets/ctkDateRangeWidget.cpp b/Libs/Widgets/ctkDateRangeWidget.cpp index 50dd88fcc4..913bba4812 100644 --- a/Libs/Widgets/ctkDateRangeWidget.cpp +++ b/Libs/Widgets/ctkDateRangeWidget.cpp @@ -165,7 +165,7 @@ QDateTime ctkDateRangeWidget::endDateTime()const } // -------------------------------------------------------------------------- -void ctkDateRangeWidget::setStartDateTime(QDateTime dateTime) +void ctkDateRangeWidget::setStartDateTime(const QDateTime& dateTime) { Q_D(ctkDateRangeWidget); d->StartDate->setDateTime(dateTime); @@ -173,7 +173,7 @@ void ctkDateRangeWidget::setStartDateTime(QDateTime dateTime) } // -------------------------------------------------------------------------- -void ctkDateRangeWidget::setEndDateTime(QDateTime dateTime) +void ctkDateRangeWidget::setEndDateTime(const QDateTime& dateTime) { Q_D(ctkDateRangeWidget); d->EndDate->setDateTime(dateTime); @@ -181,7 +181,7 @@ void ctkDateRangeWidget::setEndDateTime(QDateTime dateTime) } // -------------------------------------------------------------------------- -void ctkDateRangeWidget::setDateTimeRange(QDateTime startDateTime, QDateTime endDateTime) +void ctkDateRangeWidget::setDateTimeRange(const QDateTime& startDateTime, const QDateTime& endDateTime) { Q_D(ctkDateRangeWidget); d->StartDate->setDateTime(startDateTime.isValid() ? diff --git a/Libs/Widgets/ctkDateRangeWidget.h b/Libs/Widgets/ctkDateRangeWidget.h index 62f0a440d6..6a0a1f65e7 100644 --- a/Libs/Widgets/ctkDateRangeWidget.h +++ b/Libs/Widgets/ctkDateRangeWidget.h @@ -82,14 +82,14 @@ public Q_SLOTS: /// Set the start date. /// If the date is null or invalid, it will be automatically converted into /// a valid date (14 September 1752) - void setStartDateTime(QDateTime start); + void setStartDateTime(const QDateTime& start); /// Set the end date. /// If the date is null or invalid, it will be automatically converted into /// a valid date (31 December, 7999 and a time of 23:59:59 and 999 milliseconds) - void setEndDateTime(QDateTime end); + void setEndDateTime(const QDateTime& end); /// /// Utility function that set the start and end values at once - void setDateTimeRange(QDateTime start, QDateTime end); + void setDateTimeRange(const QDateTime& start, const QDateTime& end); void setDateRange(QDate start, QDate end); /// diff --git a/Libs/Widgets/ctkDirectoryButton.cpp b/Libs/Widgets/ctkDirectoryButton.cpp index 5a68555f83..0e796f38c9 100644 --- a/Libs/Widgets/ctkDirectoryButton.cpp +++ b/Libs/Widgets/ctkDirectoryButton.cpp @@ -217,7 +217,7 @@ QIcon ctkDirectoryButton::icon()const #ifdef USE_QFILEDIALOG_OPTIONS void ctkDirectoryButton::setOptions(const QFileDialog::Options& dialogOptions) #else -void ctkDirectoryButton::setOptions(const Options& dialogOptions) +void ctkDirectoryButton::setOptions(Options dialogOptions) #endif { Q_D(ctkDirectoryButton); @@ -249,14 +249,13 @@ void ctkDirectoryButton::setAcceptMode(QFileDialog::AcceptMode mode) d->AcceptMode = mode; } -//----------------------------------------------------------------------------- -QString ctkDirectoryButton::browse() -{ +namespace { // See https://bugreports.qt-project.org/browse/QTBUG-10244 class ExcludeReadOnlyFilterProxyModel : public QSortFilterProxyModel { + Q_OBJECT public: - ExcludeReadOnlyFilterProxyModel(QPalette palette, QObject *parent) + ExcludeReadOnlyFilterProxyModel(const QPalette& palette, QObject *parent) : QSortFilterProxyModel(parent) , Palette(palette) { @@ -275,6 +274,10 @@ QString ctkDirectoryButton::browse() } QPalette Palette; }; +} +//----------------------------------------------------------------------------- +QString ctkDirectoryButton::browse() +{ Q_D(ctkDirectoryButton); // Use a ctkFileDialog (vs QFileDialog) for the AcceptSave mode so it does not @@ -346,3 +349,5 @@ Qt::TextElideMode ctkDirectoryButton::elideMode()const Q_D(const ctkDirectoryButton); return d->PushButton->elideMode(); } + +#include "ctkDirectoryButton.moc" diff --git a/Libs/Widgets/ctkDirectoryButton.h b/Libs/Widgets/ctkDirectoryButton.h index 2d92dfb36d..51edce4a64 100644 --- a/Libs/Widgets/ctkDirectoryButton.h +++ b/Libs/Widgets/ctkDirectoryButton.h @@ -145,7 +145,7 @@ class CTK_WIDGETS_EXPORT ctkDirectoryButton: public QWidget void setOptions(const QFileDialog::Options& options); const QFileDialog::Options& options()const; #else - void setOptions(const Options& options); + void setOptions(Options options); const Options& options()const; #endif diff --git a/Libs/Widgets/ctkDoubleSlider.cpp b/Libs/Widgets/ctkDoubleSlider.cpp index 50f4968f82..ec1398618d 100644 --- a/Libs/Widgets/ctkDoubleSlider.cpp +++ b/Libs/Widgets/ctkDoubleSlider.cpp @@ -40,6 +40,7 @@ //----------------------------------------------------------------------------- class ctkSlider: public QSlider { + Q_OBJECT public: ctkSlider(QWidget* parent); using QSlider::initStyleOption; @@ -680,3 +681,5 @@ void ctkDoubleSlider::onValueProxyModified() this->setValue(d->Slider->property("inputValue").toDouble()); this->blockSignals(wasBlockingSignals); } + +#include "ctkDoubleSlider.moc" diff --git a/Libs/Widgets/ctkDoubleSpinBox.h b/Libs/Widgets/ctkDoubleSpinBox.h index 3f45ba8ef0..18143a601b 100644 --- a/Libs/Widgets/ctkDoubleSpinBox.h +++ b/Libs/Widgets/ctkDoubleSpinBox.h @@ -294,6 +294,14 @@ class CTK_WIDGETS_EXPORT ctkDoubleSpinBox : public QWidget /// \sa sizeHintPolicy virtual QSize minimumSizeHint()const; + /// Return true if the spinbox is in the progress of setting a value. + /// + /// Setting of value is performed in two steps: first the value is set in the spinbox + /// and then the valueChanged and decimalsChanged signals are emitted. + /// During this entire time, isSettingValue() returns true, because in some cases + /// it is important to know which of the sibling widgets initiated an update. + bool isSettingValue()const; + public Q_SLOTS: /// Set the value of the spinbox following the current mode. /// \sa setMode(), value(), setValueIfDifferent(), setValueAlways() @@ -322,14 +330,6 @@ public Q_SLOTS: /// \sa isReadOnly void setReadOnly(bool readOnly); - /// Return true if the spinbox is in the progress of setting a value. - /// - /// Setting of value is performed in two steps: first the value is set in the spinbox - /// and then the valueChanged and decimalsChanged signals are emitted. - /// During this entire time, isSettingValue() returns true, because in some cases - /// it is important to know which of the sibling widgets initiated an update. - bool isSettingValue()const; - Q_SIGNALS: /// Emitted every time the spinbox value is modified /// \sa QDoubleSpinBox::valueChanged() diff --git a/Libs/Widgets/ctkExpandButton.cpp b/Libs/Widgets/ctkExpandButton.cpp index c38f194655..605d5b71bf 100644 --- a/Libs/Widgets/ctkExpandButton.cpp +++ b/Libs/Widgets/ctkExpandButton.cpp @@ -137,9 +137,14 @@ void ctkExpandButton::updateIcon() } else { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + QImage mirrorImage = + d->defaultPixmap.toImage().flipped(d->orientation); +#else QImage mirrorImage = d->defaultPixmap.toImage().mirrored(d->orientation == Qt::Horizontal, d->orientation == Qt::Vertical); +#endif this->setIcon(QIcon(QPixmap::fromImage(mirrorImage))); } } diff --git a/Libs/Widgets/ctkFlowLayout.cpp b/Libs/Widgets/ctkFlowLayout.cpp index 77fa7f7187..48da6078d8 100644 --- a/Libs/Widgets/ctkFlowLayout.cpp +++ b/Libs/Widgets/ctkFlowLayout.cpp @@ -30,7 +30,7 @@ // STD includes #include -static ctkLogger logger("org.commontk.libs.widgets.ctkFlowLayout"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.widgets.ctkFlowLayout")) //----------------------------------------------------------------------------- class ctkFlowLayoutPrivate @@ -43,7 +43,7 @@ class ctkFlowLayoutPrivate void init(); void deleteAll(); - int doLayout(const QRect &rect, bool testOnly) const; + int doLayout(QRect rect, bool testOnly) const; int smartSpacing(QStyle::PixelMetric pm) const; QSize maxSizeHint(int* visibleItemsCount = 0)const; @@ -109,7 +109,7 @@ QSize ctkFlowLayoutPrivate::maxSizeHint(int *visibleItemsCount)const } // -------------------------------------------------------------------------- -int ctkFlowLayoutPrivate::doLayout(const QRect& rect, bool testOnly)const +int ctkFlowLayoutPrivate::doLayout(QRect rect, bool testOnly)const { Q_Q(const ctkFlowLayout); QMargins margins = q->contentsMargins(); diff --git a/Libs/Widgets/ctkLanguageComboBox.cpp b/Libs/Widgets/ctkLanguageComboBox.cpp index 7274bbb2b4..be64210016 100644 --- a/Libs/Widgets/ctkLanguageComboBox.cpp +++ b/Libs/Widgets/ctkLanguageComboBox.cpp @@ -194,11 +194,10 @@ bool ctkLanguageComboBoxPrivate::languageItem(const QString& localeCode, { // There are multiple countries for the locale's language therefore include the country name. text = QString("%1 (%2)") - .arg(QLocale::languageToString(locale.language())) #if (QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)) - .arg(QLocale::territoryToString(locale.territory())); + .arg(QLocale::languageToString(locale.language()), QLocale::territoryToString(locale.territory())); #else - .arg(QLocale::countryToString(locale.country())); + .arg(QLocale::languageToString(locale.language()), QLocale::countryToString(locale.country())); #endif } else diff --git a/Libs/Widgets/ctkLayoutFactory.cpp b/Libs/Widgets/ctkLayoutFactory.cpp index 983405891f..da5a10eea9 100644 --- a/Libs/Widgets/ctkLayoutFactory.cpp +++ b/Libs/Widgets/ctkLayoutFactory.cpp @@ -115,7 +115,7 @@ void ctkLayoutFactory::setupLayout() } //----------------------------------------------------------------------------- -QWidget* ctkLayoutFactory::viewFromXML(QDomElement viewElement) +QWidget* ctkLayoutFactory::viewFromXML(const QDomElement& viewElement) { Q_D(ctkLayoutFactory); QWidget* res = 0; @@ -133,7 +133,7 @@ QWidget* ctkLayoutFactory::viewFromXML(QDomElement viewElement) } //----------------------------------------------------------------------------- -QList ctkLayoutFactory::viewsFromXML(QDomElement viewElement) +QList ctkLayoutFactory::viewsFromXML(const QDomElement& viewElement) { QWidgetList res; QList factories = this->viewFactories(viewElement); @@ -153,7 +153,7 @@ QList ctkLayoutFactory::viewsFromXML(QDomElement viewElement) } //----------------------------------------------------------------------------- -void ctkLayoutFactory::setupView(QDomElement viewElement, QWidget* view) +void ctkLayoutFactory::setupView(const QDomElement& viewElement, QWidget* view) { Q_D(ctkLayoutFactory); ctkLayoutViewFactory* factory = d->ViewFactory[view]; @@ -169,7 +169,7 @@ void ctkLayoutFactory::setupView(QDomElement viewElement, QWidget* view) } //----------------------------------------------------------------------------- -QList ctkLayoutFactory::viewFactories(QDomElement viewElement)const +QList ctkLayoutFactory::viewFactories(const QDomElement& viewElement)const { Q_D(const ctkLayoutFactory); QList res; diff --git a/Libs/Widgets/ctkLayoutFactory.h b/Libs/Widgets/ctkLayoutFactory.h index 6f024a85d4..2c76f66421 100644 --- a/Libs/Widgets/ctkLayoutFactory.h +++ b/Libs/Widgets/ctkLayoutFactory.h @@ -68,16 +68,16 @@ class CTK_WIDGETS_EXPORT ctkLayoutFactory: public ctkLayoutManager virtual void setupLayout(); /// Find the layoutElement factory and call viewFromXML() on it. /// \sa viewsFromXML(), setupView() - virtual QWidget* viewFromXML(QDomElement layoutElement); + virtual QWidget* viewFromXML(const QDomElement& layoutElement); /// Find the layoutElement factory and call viewsFromXML() on it. /// \sa viewFromXML(), setupView() - virtual QList viewsFromXML(QDomElement layoutElement); + virtual QList viewsFromXML(const QDomElement& layoutElement); /// Find the layoutElement factory and setupView() on it. /// \sa viewFromXML(), viewsFromXML() - virtual void setupView(QDomElement layoutElement, QWidget* view); + virtual void setupView(const QDomElement& layoutElement, QWidget* view); /// Return all the registered factories that can handle the layoutElement. - QList viewFactories(QDomElement viewElement)const; + QList viewFactories(const QDomElement& viewElement)const; private: Q_DECLARE_PRIVATE(ctkLayoutFactory); diff --git a/Libs/Widgets/ctkLayoutManager.cpp b/Libs/Widgets/ctkLayoutManager.cpp index 7764b3600f..a0efe5acf8 100644 --- a/Libs/Widgets/ctkLayoutManager.cpp +++ b/Libs/Widgets/ctkLayoutManager.cpp @@ -20,6 +20,7 @@ // Qt includes #include +#include #include #include #include @@ -212,7 +213,13 @@ ctkLayoutManager::ctkLayoutManager(QWidget* viewport, QObject* parentObject) { Q_D(ctkLayoutManager); d->init(); - this->setViewport(viewport); + // Store viewport directly to avoid calling virtual setViewport() in constructor, + // which would indirectly reach the pure virtual viewFromXML() through the + // onViewportChanged() -> refresh() -> setupLayout() chain. + if (viewport) + { + d->Viewports[QString()] = viewport; + } } //----------------------------------------------------------------------------- @@ -223,7 +230,13 @@ ctkLayoutManager::ctkLayoutManager(ctkLayoutManagerPrivate* ptr, { Q_D(ctkLayoutManager); d->init(); - this->setViewport(viewport); + // Store viewport directly to avoid calling virtual setViewport() in constructor, + // which would indirectly reach the pure virtual viewFromXML() through the + // onViewportChanged() -> refresh() -> setupLayout() chain. + if (viewport) + { + d->Viewports[QString()] = viewport; + } } //----------------------------------------------------------------------------- @@ -250,7 +263,7 @@ void ctkLayoutManager::setSpacing(int spacing) void ctkLayoutManager::refresh() { Q_D(ctkLayoutManager); - QMap updatesEnabled; + QHash updatesEnabled; foreach(QWidget* viewport, d->Viewports) { if (!viewport) @@ -265,7 +278,7 @@ void ctkLayoutManager::refresh() this->setupLayout(); foreach(QWidget* viewport, d->Viewports) { - QMap::iterator updatesEnabledIt = updatesEnabled.find(viewport); + QHash::iterator updatesEnabledIt = updatesEnabled.find(viewport); if (updatesEnabledIt == updatesEnabled.end()) { continue; @@ -338,8 +351,9 @@ void ctkLayoutManager::setupLayout() { qWarning() << "Expected 'viewports' or 'layout' as XML root element, found" << d->Layout.documentElement().tagName(); } - foreach (const QString& viewportName, d->Viewports.keys()) + for (auto it = d->Viewports.constBegin(); it != d->Viewports.constEnd(); ++it) { + const QString& viewportName = it.key(); bool usedInLayout = viewportNamesUsedInLayout.contains(viewportName); QWidget* viewport = d->viewport(viewportName); if (d->isViewportUsedInLayout(viewport) == usedInLayout) @@ -476,7 +490,7 @@ const QDomDocument ctkLayoutManager::layout()const } //----------------------------------------------------------------------------- -QLayoutItem* ctkLayoutManager::processElement(QDomElement element) +QLayoutItem* ctkLayoutManager::processElement(const QDomElement& element) { Q_ASSERT(!element.isNull()); if (element.tagName() == "layout") @@ -491,7 +505,7 @@ QLayoutItem* ctkLayoutManager::processElement(QDomElement element) } //----------------------------------------------------------------------------- -QLayoutItem* ctkLayoutManager::processLayoutElement(QDomElement layoutElement) +QLayoutItem* ctkLayoutManager::processLayoutElement(const QDomElement& layoutElement) { Q_D(ctkLayoutManager); Q_ASSERT(layoutElement.tagName() == "layout"); @@ -549,7 +563,7 @@ QLayoutItem* ctkLayoutManager::processLayoutElement(QDomElement layoutElement) } //----------------------------------------------------------------------------- -QLayoutItem* ctkLayoutManager::layoutFromXML(QDomElement layoutElement) +QLayoutItem* ctkLayoutManager::layoutFromXML(const QDomElement& layoutElement) { Q_ASSERT(layoutElement.tagName() == "layout"); QString type = layoutElement.attribute("type", "horizontal"); @@ -582,7 +596,7 @@ QLayoutItem* ctkLayoutManager::layoutFromXML(QDomElement layoutElement) } //----------------------------------------------------------------------------- -void ctkLayoutManager::processItemElement(QDomElement itemElement, QLayoutItem* layoutItem) +void ctkLayoutManager::processItemElement(const QDomElement& itemElement, QLayoutItem* layoutItem) { Q_ASSERT(itemElement.tagName() == "item"); Q_ASSERT(itemElement.childNodes().count() == 1); @@ -607,7 +621,7 @@ void ctkLayoutManager::processItemElement(QDomElement itemElement, QLayoutItem* } //----------------------------------------------------------------------------- -void ctkLayoutManager::addChildItemToLayout(QDomElement itemElement, QLayoutItem* childItem, QLayoutItem* layoutItem) +void ctkLayoutManager::addChildItemToLayout(const QDomElement& itemElement, QLayoutItem* childItem, QLayoutItem* layoutItem) { Q_D(ctkLayoutManager); Q_ASSERT(childItem); @@ -654,7 +668,7 @@ void ctkLayoutManager::addChildItemToLayout(QDomElement itemElement, QLayoutItem } //----------------------------------------------------------------------------- -QWidgetItem* ctkLayoutManager::widgetItemFromXML(QDomElement viewElement) +QWidgetItem* ctkLayoutManager::widgetItemFromXML(const QDomElement& viewElement) { //Q_ASSERT(viewElement.tagName() == "view"); QWidget* view = this->viewFromXML(viewElement); @@ -667,7 +681,7 @@ QWidgetItem* ctkLayoutManager::widgetItemFromXML(QDomElement viewElement) } //----------------------------------------------------------------------------- -void ctkLayoutManager::setupView(QDomElement viewElement, QWidget* view) +void ctkLayoutManager::setupView(const QDomElement& viewElement, QWidget* view) { Q_UNUSED(viewElement); Q_D(ctkLayoutManager); @@ -680,7 +694,7 @@ void ctkLayoutManager::setupView(QDomElement viewElement, QWidget* view) } //----------------------------------------------------------------------------- -QList ctkLayoutManager::widgetItemsFromXML(QDomElement viewElement) +QList ctkLayoutManager::widgetItemsFromXML(const QDomElement& viewElement) { ///Q_ASSERT(viewElement.tagName() == "view"); QList res; @@ -695,7 +709,7 @@ QList ctkLayoutManager::widgetItemsFromXML(QDomElement viewElement } //----------------------------------------------------------------------------- -QList ctkLayoutManager::viewsFromXML(QDomElement viewElement) +QList ctkLayoutManager::viewsFromXML(const QDomElement& viewElement) { QList res; res << this->viewFromXML(viewElement); diff --git a/Libs/Widgets/ctkLayoutManager.h b/Libs/Widgets/ctkLayoutManager.h index 9e46340fb6..74208c5215 100644 --- a/Libs/Widgets/ctkLayoutManager.h +++ b/Libs/Widgets/ctkLayoutManager.h @@ -160,37 +160,37 @@ public Q_SLOTS: /// Create the QLayoutItem for an XML element (e.g. "layout", "view"...) /// and its nested elements. /// \sa processLayoutElement() - virtual QLayoutItem* processElement(QDomElement element); + virtual QLayoutItem* processElement(const QDomElement& element); /// Create the QLayoutItem for a "layout" XML element and its nested elements. /// \sa processElement(), layoutFromXML(), processItemElement(), addChildItemToLayout() - virtual QLayoutItem* processLayoutElement(QDomElement layoutElement); + virtual QLayoutItem* processLayoutElement(const QDomElement& layoutElement); /// Create the QLayoutItem for a "layout" XML element. /// \sa processLayoutElement() - virtual QLayoutItem* layoutFromXML(QDomElement layoutElement); + virtual QLayoutItem* layoutFromXML(const QDomElement& layoutElement); /// Create the QLayoutItem(s) of the "item" XML element. /// \sa processItemElement() - void processItemElement(QDomElement layoutElement, QLayoutItem* layoutItem); + void processItemElement(const QDomElement& layoutElement, QLayoutItem* layoutItem); /// Insert a child item into a layout. /// \sa processLayoutElement() - virtual void addChildItemToLayout(QDomElement itemElement, QLayoutItem* childItem, QLayoutItem* layoutItem); + virtual void addChildItemToLayout(const QDomElement& itemElement, QLayoutItem* childItem, QLayoutItem* layoutItem); /// Utility method that creates, setups and wraps into a QWidgetItem the widget /// of a view XML element. /// \sa widgetsItemsFromXML(), viewFromXML() - QWidgetItem* widgetItemFromXML(QDomElement layoutElement); + QWidgetItem* widgetItemFromXML(const QDomElement& layoutElement); /// Method is called each time a view is made visible into a layout. /// This method can be reimplemented. Sets the widget visibility to true /// by default. /// \sa viewsFromXML() - virtual void setupView(QDomElement layoutElement, QWidget* view); + virtual void setupView(const QDomElement& layoutElement, QWidget* view); /// Create, setup and wrap into QWidgetItems the widgets of a view XML /// element. - QList widgetItemsFromXML(QDomElement layoutElement); + QList widgetItemsFromXML(const QDomElement& layoutElement); /// Virtual method that returns a widget from a "view" layout element. /// You are ensured that the tagName of the element is "view". /// The XML element can contain an arbitrary number of XML attributes. /// Create the widget if needed or reuse it from a previous call. /// \sa viewsFromXML(), setupView() - virtual QWidget* viewFromXML(QDomElement layoutElement) = 0; + virtual QWidget* viewFromXML(const QDomElement& layoutElement) = 0; /// Virtual method that returns a list of widgets from a "view" layout /// element. /// If the parent "item" element has a "multiple=true" XML attribute, @@ -200,7 +200,7 @@ public Q_SLOTS: /// layout (e.g. boxlayout). /// This method can be reimplemented. Returns viewFromXML() by default. /// \sa viewFromXML(), - virtual QList viewsFromXML(QDomElement layoutElement); + virtual QList viewsFromXML(const QDomElement& layoutElement); private: Q_DECLARE_PRIVATE(ctkLayoutManager); diff --git a/Libs/Widgets/ctkLayoutViewFactory.cpp b/Libs/Widgets/ctkLayoutViewFactory.cpp index c67af2a31e..9349e52c07 100644 --- a/Libs/Widgets/ctkLayoutViewFactory.cpp +++ b/Libs/Widgets/ctkLayoutViewFactory.cpp @@ -86,7 +86,7 @@ QStringList ctkLayoutViewFactory::supportedElementNames()const } //----------------------------------------------------------------------------- -bool ctkLayoutViewFactory::isElementSupported(QDomElement layoutElement)const +bool ctkLayoutViewFactory::isElementSupported(const QDomElement& layoutElement)const { return this->supportedElementNames().contains(layoutElement.tagName()); } @@ -119,7 +119,7 @@ void ctkLayoutViewFactory::endSetupLayout() } //----------------------------------------------------------------------------- -void ctkLayoutViewFactory::setupView(QDomElement viewElement, QWidget* view) +void ctkLayoutViewFactory::setupView(const QDomElement& viewElement, QWidget* view) { Q_ASSERT(view); view->setVisible(true); @@ -142,7 +142,7 @@ void ctkLayoutViewFactory::setupView(QDomElement viewElement, QWidget* view) } //----------------------------------------------------------------------------- -QWidget* ctkLayoutViewFactory::viewFromXML(QDomElement layoutElement) +QWidget* ctkLayoutViewFactory::viewFromXML(const QDomElement& layoutElement) { Q_D(ctkLayoutViewFactory); QWidgetList views = this->registeredViews(layoutElement); @@ -165,14 +165,14 @@ QWidget* ctkLayoutViewFactory::viewFromXML(QDomElement layoutElement) } //----------------------------------------------------------------------------- -QWidget* ctkLayoutViewFactory::createViewFromXML(QDomElement layoutElement) +QWidget* ctkLayoutViewFactory::createViewFromXML(const QDomElement& layoutElement) { Q_UNUSED(layoutElement); return 0; } //----------------------------------------------------------------------------- -QList ctkLayoutViewFactory::viewsFromXML(QDomElement layoutElement) +QList ctkLayoutViewFactory::viewsFromXML(const QDomElement& layoutElement) { Q_D(ctkLayoutViewFactory); QWidgetList views = this->registeredViews(layoutElement); @@ -198,7 +198,7 @@ QList ctkLayoutViewFactory::viewsFromXML(QDomElement layoutElement) } //----------------------------------------------------------------------------- -QList ctkLayoutViewFactory::createViewsFromXML(QDomElement layoutElement) +QList ctkLayoutViewFactory::createViewsFromXML(const QDomElement& layoutElement) { QWidgetList views; QWidget* view = this->createViewFromXML(layoutElement); @@ -238,7 +238,7 @@ ::registeredViews(const QDomElement& layoutElement)const } //----------------------------------------------------------------------------- -void ctkLayoutViewFactory::registerView(QDomElement layoutElement, QWidget* view) +void ctkLayoutViewFactory::registerView(const QDomElement& layoutElement, QWidget* view) { Q_D(ctkLayoutViewFactory); QDomElement viewElement = this->layoutElement(view); @@ -257,7 +257,7 @@ void ctkLayoutViewFactory::registerView(QDomElement layoutElement, QWidget* view } //----------------------------------------------------------------------------- -void ctkLayoutViewFactory::unregisterView(QDomElement layoutElement, QWidget* view) +void ctkLayoutViewFactory::unregisterView(const QDomElement& layoutElement, QWidget* view) { Q_D(ctkLayoutViewFactory); ctkLayoutViewFactoryPrivate::ViewFactory itemToRemove(layoutElement, view); diff --git a/Libs/Widgets/ctkLayoutViewFactory.h b/Libs/Widgets/ctkLayoutViewFactory.h index 01fd869af9..20ae4e4565 100644 --- a/Libs/Widgets/ctkLayoutViewFactory.h +++ b/Libs/Widgets/ctkLayoutViewFactory.h @@ -65,7 +65,7 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// factory. By default, returns true if the layout element name is /// contained in supportedElementNames(). /// \sa supportedElementNames() - virtual bool isElementSupported(QDomElement layoutElement)const; + virtual bool isElementSupported(const QDomElement& layoutElement)const; /// Return the useCachedViews property value. /// \sa useCachedViews @@ -85,7 +85,7 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// This method can be reimplemented. Sets the widget visibility to true /// and register the view by default. /// \sa viewsFromXML() - virtual void setupView(QDomElement layoutElement, QWidget* view); + virtual void setupView(const QDomElement& layoutElement, QWidget* view); /// Virtual method that returns a widget from a "view" layout element. /// You are ensured that the tagName of the element is one of the element /// from the supportedElementNames() list. @@ -94,7 +94,7 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// a new view using createViewFromXML(). Must be reimplemented. /// \sa viewsFromXML(), setupView(), registeredViews(), useCachedView, /// createViewFromXML() - virtual QWidget* viewFromXML(QDomElement layoutElement); + virtual QWidget* viewFromXML(const QDomElement& layoutElement); /// Virtual method that returns a list of widgets from a "view" layout /// element. /// If the parent "item" element has a "multiple=true" XML attribute, @@ -105,7 +105,7 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// Returns previously registered or cached views if any, otherwise create /// new views using createViewsFromXML(). /// \sa viewFromXML(), registeredViews(), - virtual QList viewsFromXML(QDomElement layoutElement); + virtual QList viewsFromXML(const QDomElement& layoutElement); /// Return all the widgets that have been registered. /// Used internally for testing. @@ -116,11 +116,11 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// Create a new view from a layoutElement. Returns 0 by default /// \sa viewFromXML - virtual QWidget* createViewFromXML(QDomElement layoutElement); + virtual QWidget* createViewFromXML(const QDomElement& layoutElement); /// Create new views from a layoutElement. Returns createViewFromXML() /// by default. /// \sa viewsFromXML(), createViewFromXML() - virtual QList createViewsFromXML(QDomElement layoutElement); + virtual QList createViewsFromXML(const QDomElement& layoutElement); /// Return the list of widgets that have already been created by /// view(s)FromXML(). @@ -129,11 +129,11 @@ class CTK_WIDGETS_EXPORT ctkLayoutViewFactory: public QObject /// Save the view to reuse it later on (in view(s)FromXML() ). /// \sa registerView(), registeredViews() - virtual void registerView(QDomElement layoutElement, QWidget* view); + virtual void registerView(const QDomElement& layoutElement, QWidget* view); /// Forget about the view. The view is not being deleted. /// \sa registerView(), registeredViews() - virtual void unregisterView(QDomElement layoutElement, QWidget* view); + virtual void unregisterView(const QDomElement& layoutElement, QWidget* view); /// Forget about the view. The view is not being deleted. /// \sa registerView(), unregisterView() @@ -179,7 +179,7 @@ class ctkTemplateLayoutViewFactory: public ctkLayoutViewFactory { this->setUseCachedViews(true); } - virtual QWidget* createViewFromXML(QDomElement layoutElement){ + virtual QWidget* createViewFromXML(const QDomElement& layoutElement){ Q_UNUSED(layoutElement); return new T; } diff --git a/Libs/Widgets/ctkMaterialPropertyWidget.cpp b/Libs/Widgets/ctkMaterialPropertyWidget.cpp index 0a017031ad..cbd0a42e95 100644 --- a/Libs/Widgets/ctkMaterialPropertyWidget.cpp +++ b/Libs/Widgets/ctkMaterialPropertyWidget.cpp @@ -29,7 +29,7 @@ #include "ui_ctkMaterialPropertyWidget.h" #include "ctkLogger.h" -static ctkLogger logger("org.commontk.libs.widgets.ctkMaterialPropertyWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.widgets.ctkMaterialPropertyWidget")) //----------------------------------------------------------------------------- class ctkMaterialPropertyWidgetPrivate: public Ui_ctkMaterialPropertyWidget diff --git a/Libs/Widgets/ctkMatrixWidget.cpp b/Libs/Widgets/ctkMatrixWidget.cpp index ba87582513..0ff04bfd55 100644 --- a/Libs/Widgets/ctkMatrixWidget.cpp +++ b/Libs/Widgets/ctkMatrixWidget.cpp @@ -43,6 +43,7 @@ namespace //----------------------------------------------------------------------------- class ctkMatrixDoubleSpinBox : public ctkDoubleSpinBox { + Q_OBJECT public: ctkMatrixDoubleSpinBox(QWidget * parentWidget) : ctkDoubleSpinBox(parentWidget) @@ -68,6 +69,7 @@ namespace // Reimplemented to display the numbers with the matrix decimals. class ctkMatrixItemDelegate : public QStyledItemDelegate { + Q_OBJECT public: ctkMatrixItemDelegate(ctkMatrixWidget* matrixWidget) : QStyledItemDelegate(matrixWidget) @@ -389,7 +391,7 @@ void ctkMatrixWidget::setDecimals(int decimals) } d->Decimals = qMax(0, decimals); this->update(); - this->emit decimalsChanged(d->Decimals); + emit decimalsChanged(d->Decimals); } // -------------------------------------------------------------------------- @@ -514,7 +516,7 @@ void ctkMatrixWidget::setValues(const QVector & vector) this->blockSignals(blocked); if (modified) { - this->emit matrixChanged(); + emit matrixChanged(); } } @@ -525,3 +527,5 @@ QTableWidgetItem* ctkMatrixWidget::widgetItem(int i, int j) QTableWidgetItem* item = d->Table->item(i, j); return item; } + +#include "ctkMatrixWidget.moc" diff --git a/Libs/Widgets/ctkMenuComboBox.cpp b/Libs/Widgets/ctkMenuComboBox.cpp index 08d5ea0c55..90fc65147e 100644 --- a/Libs/Widgets/ctkMenuComboBox.cpp +++ b/Libs/Widgets/ctkMenuComboBox.cpp @@ -36,7 +36,8 @@ #include "ctkMenuComboBox_p.h" // ------------------------------------------------------------------------- -ctkMenuComboBoxInternal::ctkMenuComboBoxInternal() +ctkMenuComboBoxInternal::ctkMenuComboBoxInternal(QWidget* parent) + : Superclass(parent) { } // ------------------------------------------------------------------------- diff --git a/Libs/Widgets/ctkMenuComboBox_p.h b/Libs/Widgets/ctkMenuComboBox_p.h index ccebe72612..76384c763b 100644 --- a/Libs/Widgets/ctkMenuComboBox_p.h +++ b/Libs/Widgets/ctkMenuComboBox_p.h @@ -38,7 +38,7 @@ class ctkMenuComboBoxInternal: public QComboBox /// Superclass typedef typedef QComboBox Superclass; - ctkMenuComboBoxInternal(); + ctkMenuComboBoxInternal(QWidget* parent = nullptr); virtual ~ctkMenuComboBoxInternal(); virtual void showPopup(); diff --git a/Libs/Widgets/ctkModalityWidget.cpp b/Libs/Widgets/ctkModalityWidget.cpp index 719954c715..d1bad5ad16 100644 --- a/Libs/Widgets/ctkModalityWidget.cpp +++ b/Libs/Widgets/ctkModalityWidget.cpp @@ -31,11 +31,15 @@ // STD includes #include -static ctkLogger logger("org.commontk.libs.widgets.ctkModalityWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.widgets.ctkModalityWidget")) namespace { - QStringList sDefaultVisibleModalities; + const QStringList& sDefaultVisibleModalities() + { + static const QStringList list = {"CT", "MR", "US", "CR", "XA", "NM", "PT"}; + return list; + } } //----------------------------------------------------------------------------- @@ -60,10 +64,6 @@ class ctkModalityWidgetPrivate: public Ui_ctkModalityWidget ctkModalityWidgetPrivate::ctkModalityWidgetPrivate(ctkModalityWidget& object) :q_ptr(&object) { - if (sDefaultVisibleModalities.isEmpty()) - { - sDefaultVisibleModalities << "CT" << "MR" << "US" << "CR" << "XA" << "NM" << "PT"; - } } // -------------------------------------------------------------------------- @@ -126,7 +126,7 @@ void ctkModalityWidgetPrivate::init() delete layout; q->setLayout(flowLayout); - q->setVisibleModalities(sDefaultVisibleModalities); + q->setVisibleModalities(sDefaultVisibleModalities()); QSize sizeHint = flowLayout->sizeHint(); double area = sizeHint.width() * sizeHint.height(); area = sqrt(area); @@ -146,9 +146,9 @@ void ctkModalityWidgetPrivate::updateAnyCheckBoxState() // None selected? bool foundSelectedModality = false; - foreach(const QString & modality, this->Modalities.keys()) + for (auto it = this->Modalities.constBegin(); it != this->Modalities.constEnd(); ++it) { - if (this->Modalities[modality]->isChecked()) + if (it.value()->isChecked()) { foundSelectedModality = true; break; @@ -168,9 +168,9 @@ void ctkModalityWidgetPrivate::updateAnyCheckBoxState() // All selected? bool allModalitiesSelected = true; - foreach(const QString & modality, this->Modalities.keys()) + for (auto it = this->Modalities.constBegin(); it != this->Modalities.constEnd(); ++it) { - if (!this->Modalities[modality]->isChecked()) + if (!it.value()->isChecked()) { allModalitiesSelected = false; break; @@ -217,12 +217,11 @@ QStringList ctkModalityWidget::selectedModalities()const { Q_D(const ctkModalityWidget); QStringList modalities; - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - if (modalityBox->isChecked()) + if (it.value()->isChecked()) { - modalities << modality; + modalities << it.key(); } } return modalities; @@ -233,10 +232,10 @@ void ctkModalityWidget::setSelectedModalities(const QStringList& selectedModalit { Q_D(ctkModalityWidget); bool modified = false; - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - bool selected = selectedModalities.contains(modality); + QCheckBox* modalityBox = it.value(); + bool selected = selectedModalities.contains(it.key()); if (modalityBox->isChecked() != selected) { #if QT_VERSION >= QT_VERSION_CHECK(5,3,0) @@ -263,13 +262,12 @@ QStringList ctkModalityWidget::visibleModalities()const { Q_D(const ctkModalityWidget); QStringList modalities; - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; // isHidden() means explicitly hidden (not the same as !isVisible()) - if (!modalityBox->isHidden()) + if (!it.value()->isHidden()) { - modalities << modality; + modalities << it.key(); } } return modalities; @@ -279,14 +277,13 @@ QStringList ctkModalityWidget::visibleModalities()const void ctkModalityWidget::setVisibleModalities(const QStringList& visibleModalities) { Q_D(ctkModalityWidget); - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - bool visible = visibleModalities.contains(modality); + bool visible = visibleModalities.contains(it.key()); // isHidden() means explicitly hidden (not the same as !isVisible()) - if (modalityBox->isHidden() == visible) + if (it.value()->isHidden() == visible) { - modalityBox->setVisible(visible); + it.value()->setVisible(visible); } } } @@ -340,9 +337,9 @@ void ctkModalityWidget::selectAll() { Q_D(ctkModalityWidget); bool modified = false; - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; + QCheckBox* modalityBox = it.value(); if (!modalityBox->isChecked()) { #if QT_VERSION >= QT_VERSION_CHECK(5,3,0) @@ -369,9 +366,9 @@ void ctkModalityWidget::unselectAll() { Q_D(ctkModalityWidget); bool modified = false; - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; + QCheckBox* modalityBox = it.value(); if (modalityBox->isChecked()) { #if QT_VERSION >= QT_VERSION_CHECK(5,3,0) @@ -397,10 +394,9 @@ void ctkModalityWidget::unselectAll() void ctkModalityWidget::showAll() { Q_D(ctkModalityWidget); - foreach(const QString& modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - modalityBox->setVisible(true); + it.value()->setVisible(true); } } @@ -408,10 +404,9 @@ void ctkModalityWidget::showAll() void ctkModalityWidget::hideAll() { Q_D(ctkModalityWidget); - foreach(const QString& modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - modalityBox->setVisible(false); + it.value()->setVisible(false); } } @@ -419,10 +414,9 @@ void ctkModalityWidget::hideAll() bool ctkModalityWidget::areAllModalitiesSelected()const { Q_D(const ctkModalityWidget); - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; - if (!modalityBox->isChecked()) + if (!it.value()->isChecked()) { return false; } @@ -434,11 +428,10 @@ bool ctkModalityWidget::areAllModalitiesSelected()const bool ctkModalityWidget::areAllModalitiesVisible()const { Q_D(const ctkModalityWidget); - foreach(const QString & modality, d->Modalities.keys()) + for (auto it = d->Modalities.constBegin(); it != d->Modalities.constEnd(); ++it) { - QCheckBox* modalityBox = d->Modalities[modality]; // isHidden() means explicitly hidden (not the same as !isVisible()) - if (modalityBox->isHidden()) + if (it.value()->isHidden()) { return false; } diff --git a/Libs/Widgets/ctkPathLineEdit.cpp b/Libs/Widgets/ctkPathLineEdit.cpp index d7b6f0b40e..8686f63427 100644 --- a/Libs/Widgets/ctkPathLineEdit.cpp +++ b/Libs/Widgets/ctkPathLineEdit.cpp @@ -21,18 +21,13 @@ // Qt includes #include #include -#include -#include -#include #include -#include #include #include #include #include #include #include -#include // CTK includes #include "ctkPathLineEdit.h" @@ -51,74 +46,39 @@ namespace // hide private implementation details { - -//----------------------------------------------------------------------------- -static QFileSystemModel* globalFileSystemModelForFiles() -{ - static QFileSystemModel* m = NULL; - if (!m) + //----------------------------------------------------------------------------- + static QFileSystemModel* globalFileSystemModelForFiles() { - m = new QFileSystemModel(); + static QFileSystemModel* m = NULL; + if (!m) + { + m = new QFileSystemModel(); #if (QT_VERSION >= QT_VERSION_CHECK(5,14,0)) - // Prevent slow browsing of network drives - m->setOption(QFileSystemModel::DontUseCustomDirectoryIcons); + // Prevent slow browsing of network drives + m->setOption(QFileSystemModel::DontUseCustomDirectoryIcons); #endif - m->setRootPath(""); + m->setRootPath(""); + } + return m; } - return m; -} -//----------------------------------------------------------------------------- -static QFileSystemModel* globalFileSystemModelForDirectories() -{ - static QFileSystemModel* m = NULL; - if (!m) + //----------------------------------------------------------------------------- + static QFileSystemModel* globalFileSystemModelForDirectories() { - m = new QFileSystemModel(); + static QFileSystemModel* m = NULL; + if (!m) + { + m = new QFileSystemModel(); #if (QT_VERSION >= QT_VERSION_CHECK(5,14,0)) - // Prevent slow browsing of network drives - m->setOption(QFileSystemModel::DontUseCustomDirectoryIcons); + // Prevent slow browsing of network drives + m->setOption(QFileSystemModel::DontUseCustomDirectoryIcons); #endif - m->setFilter(QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot); - m->setRootPath(""); + m->setFilter(QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot); + m->setRootPath(""); + } + return m; } - return m; -} - -//----------------------------------------------------------------------------- -/// Completer class with built-in file system model -class ctkFileCompleter : public QCompleter -{ -public: - ctkFileCompleter(QObject* o, bool showFiles); - - // Ensure auto-completed file always uses forward-slash as separator - QString pathFromIndex(const QModelIndex& idx) const override; - - // Helper function for getting the current model casted to QFileSystemModel - QFileSystemModel* fileSystemModel() const; - - // Adds path to the file system model. - // This also automatically adds all children to the model. - void addPathToIndex(const QString& path); - - // Switch between showing files or folders only - void setShowFiles(bool show); - bool showFiles(); - - // Set name filter. If filters is empty then all folder/file names are displayed - // and the global shared file system models are used. If name filters are set then - // a custom custom file system is created for the widget. - void setNameFilters(const QStringList& filters); - - // Since nameFilters() function may be relevant when more work will be done, - // it is commented to quiet the "-Wunused-function" warning. - // - // QStringList nameFilters() const; - -protected: - QFileSystemModel* CustomFileSystemModel; -}; +} // end of anonymous namespace //----------------------------------------------------------------------------- ctkFileCompleter::ctkFileCompleter(QObject* o, bool showFiles) @@ -167,8 +127,7 @@ bool ctkFileCompleter::showFiles() } //----------------------------------------------------------------------------- -void ctkFileCompleter::setNameFilters(const QStringList& filters) -{ +void ctkFileCompleter::setNameFilters(const QStringList& filters) { if (filters.empty()) { // no name filter set use the global file system models @@ -244,59 +203,6 @@ void ctkFileCompleter::addPathToIndex(const QString& path) } } -} // end of anonymous namespace - -//----------------------------------------------------------------------------- -class ctkPathLineEditPrivate -{ - Q_DECLARE_PUBLIC(ctkPathLineEdit); - Q_GADGET - -protected: - ctkPathLineEdit* const q_ptr; - -public: - ctkPathLineEditPrivate(ctkPathLineEdit& object); - void init(); - QSize recomputeSizeHint(QSize& sh)const; - void updateFilter(); - - void adjustPathLineEditSize(); - - void _q_recomputeCompleterPopupSize(); - - void createPathLineEditWidget(bool useComboBox); - QString settingKey()const; - - QLineEdit* LineEdit; - QComboBox* ComboBox; - QToolButton* BrowseButton; //!< "..." button - - int MinimumContentsLength; - ctkPathLineEdit::SizeAdjustPolicy SizeAdjustPolicy; - - QString Label; //!< used in file dialogs - QStringList NameFilters; //!< Regular expression (in wildcard mode) used to help the user to complete the line - QDir::Filters Filters; //!< Type of path (file, dir...) -#ifdef USE_QFILEDIALOG_OPTIONS - QFileDialog::Options DialogOptions; -#else - ctkPathLineEdit::Options DialogOptions; -#endif - - bool HasValidInput; //!< boolean that stores the old state of valid input - QString SettingKey; - - static QString sCurrentDirectory; //!< Content the last value of the current directory - static int sMaxHistory; //!< Size of the history, if the history is full and a new value is added, the oldest value is dropped - - mutable QSize SizeHint; - mutable QSize MinimumSizeHint; - - ctkFileCompleter* Completer; - QRegularExpressionValidator* Validator; -}; - QString ctkPathLineEditPrivate::sCurrentDirectory = ""; int ctkPathLineEditPrivate::sMaxHistory = 5; @@ -522,7 +428,7 @@ void ctkPathLineEditPrivate::_q_recomputeCompleterPopupSize() QVariant icon = model->data(model->index(i, 0), Qt::DecorationRole); if (icon.isValid() && icon.canConvert()) { - iconWidth = qMax(iconWidth, icon.value().availableSizes().front().width() + 4); + iconWidth = qMax(iconWidth, icon.value().availableSizes().constFirst().width() + 4); } textWidth = qMax(textWidth, fm.boundingRect(model->data(model->index(i, 0)).toString()).width()); } @@ -601,7 +507,7 @@ const QStringList& ctkPathLineEdit::nameFilters()const } //----------------------------------------------------------------------------- -void ctkPathLineEdit::setFilters(const Filters &filters) +void ctkPathLineEdit::setFilters(Filters filters) { Q_D(ctkPathLineEdit); d->Filters = QFlags(static_cast(filters)); @@ -619,7 +525,7 @@ ctkPathLineEdit::Filters ctkPathLineEdit::filters()const #ifdef USE_QFILEDIALOG_OPTIONS void ctkPathLineEdit::setOptions(const QFileDialog::Options& dialogOptions) #else -void ctkPathLineEdit::setOptions(const Options& dialogOptions) +void ctkPathLineEdit::setOptions(Options dialogOptions) #endif { Q_D(ctkPathLineEdit); @@ -951,6 +857,3 @@ QSize ctkPathLineEdit::sizeHint()const Q_D(const ctkPathLineEdit); return d->recomputeSizeHint(d->SizeHint); } - -#include "moc_ctkPathLineEdit.cpp" -#include "ctkPathLineEdit.moc" diff --git a/Libs/Widgets/ctkPathLineEdit.h b/Libs/Widgets/ctkPathLineEdit.h index 5b0416dbb4..7110882eac 100644 --- a/Libs/Widgets/ctkPathLineEdit.h +++ b/Libs/Widgets/ctkPathLineEdit.h @@ -48,16 +48,22 @@ MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // Qt includes #include #include -class QComboBox; +#include +#include +#include +#include +#include + +class QRegularExpressionValidator; + // CTK includes #include "ctkWidgetsExport.h" -class ctkPathLineEditPrivate; /// \ingroup Widgets /// \brief Advanced line edit to select a file or directory. /// \sa ctkDirectoryButton, ctkPathListWidget -/// +class ctkPathLineEditPrivate; //Forward declaration needed within file class CTK_WIDGETS_EXPORT ctkPathLineEdit: public QWidget { Q_OBJECT @@ -191,7 +197,7 @@ class CTK_WIDGETS_EXPORT ctkPathLineEdit: public QWidget void setNameFilters(const QStringList &nameFilters); const QStringList& nameFilters()const; - void setFilters(const Filters& filters); + void setFilters(Filters filters); Filters filters()const; /// Options of the file dialog pop up. @@ -200,7 +206,7 @@ class CTK_WIDGETS_EXPORT ctkPathLineEdit: public QWidget void setOptions(const QFileDialog::Options& options); const QFileDialog::Options& options()const; #else - void setOptions(const Options& options); + void setOptions(Options options); const Options& options()const; #endif @@ -285,6 +291,92 @@ protected Q_SLOTS: Q_PRIVATE_SLOT(d_ptr, void _q_recomputeCompleterPopupSize()) }; +//----------------------------------------------------------------------------- +/// Completer class with built-in file system model +class ctkFileCompleter : public QCompleter { + Q_OBJECT +public: + ctkFileCompleter(QObject* o, bool showFiles); + + // Ensure auto-completed file always uses forward-slash as separator + QString pathFromIndex(const QModelIndex& idx) const override; + + // Helper function for getting the current model casted to QFileSystemModel + QFileSystemModel* fileSystemModel() const; + + // Adds path to the file system model. + // This also automatically adds all children to the model. + void addPathToIndex(const QString& path); + + // Switch between showing files or folders only + void setShowFiles(bool show); + bool showFiles(); + + // Set name filter. If filters is empty then all folder/file names are displayed + // and the global shared file system models are used. If name filters are set then + // a custom custom file system is created for the widget. + void setNameFilters(const QStringList& filters); + + // Since nameFilters() function may be relevant when more work will be done, + // it is commented to quiet the "-Wunused-function" warning. + // + // QStringList nameFilters() const; + +protected: + QFileSystemModel* CustomFileSystemModel; +}; + +//----------------------------------------------------------------------------- +class ctkPathLineEditPrivate +{ + Q_DECLARE_PUBLIC(ctkPathLineEdit); + +protected: + ctkPathLineEdit* const q_ptr; + +public: + ctkPathLineEditPrivate(ctkPathLineEdit& object); + void init(); + QSize recomputeSizeHint(QSize& sh)const; + void updateFilter(); + + void adjustPathLineEditSize(); + + void _q_recomputeCompleterPopupSize(); + + void createPathLineEditWidget(bool useComboBox); + QString settingKey()const; + + QLineEdit* LineEdit; + QComboBox* ComboBox; + QToolButton* BrowseButton; //!< "..." button + + int MinimumContentsLength; + ctkPathLineEdit::SizeAdjustPolicy SizeAdjustPolicy; + + QString Label; //!< used in file dialogs + QStringList NameFilters; //!< Regular expression (in wildcard mode) used to help the user to complete the line + QDir::Filters Filters; //!< Type of path (file, dir...) +#ifdef USE_QFILEDIALOG_OPTIONS + QFileDialog::Options DialogOptions; +#else + ctkPathLineEdit::Options DialogOptions; +#endif + + bool HasValidInput; //!< boolean that stores the old state of valid input + QString SettingKey; + + static QString sCurrentDirectory; //!< Content the last value of the current directory + static int sMaxHistory; //!< Size of the history, if the history is full and a new value is added, the oldest value is dropped + + mutable QSize SizeHint; + mutable QSize MinimumSizeHint; + + ctkFileCompleter* Completer; + QRegularExpressionValidator* Validator; +}; + + Q_DECLARE_OPERATORS_FOR_FLAGS(ctkPathLineEdit::Filters) #ifndef USE_QFILEDIALOG_OPTIONS Q_DECLARE_OPERATORS_FOR_FLAGS(ctkPathLineEdit::Options); diff --git a/Libs/Widgets/ctkPathListButtonsWidget.cpp b/Libs/Widgets/ctkPathListButtonsWidget.cpp index e98bd7bfa9..9533e1e2bb 100644 --- a/Libs/Widgets/ctkPathListButtonsWidget.cpp +++ b/Libs/Widgets/ctkPathListButtonsWidget.cpp @@ -65,14 +65,14 @@ void ctkPathListButtonsWidgetPrivate::setupUi(QWidget * widget) { this->Ui_ctkPathListButtonsWidget::setupUi(widget); - connect(this->AddFilesButton, SIGNAL(clicked()), SLOT(on_AddFilesButton_clicked())); - connect(this->AddDirectoryButton, SIGNAL(clicked()), SLOT(on_AddDirButton_clicked())); - connect(this->RemoveButton, SIGNAL(clicked()), SLOT(on_RemoveButton_clicked())); - connect(this->EditButton, SIGNAL(clicked()), SLOT(on_EditButton_clicked())); + connect(this->AddFilesButton, SIGNAL(clicked()), SLOT(addFilesButtonClicked())); + connect(this->AddDirectoryButton, SIGNAL(clicked()), SLOT(addDirButtonClicked())); + connect(this->RemoveButton, SIGNAL(clicked()), SLOT(removeButtonClicked())); + connect(this->EditButton, SIGNAL(clicked()), SLOT(editButtonClicked())); } //----------------------------------------------------------------------------- -void ctkPathListButtonsWidgetPrivate::on_AddFilesButton_clicked() +void ctkPathListButtonsWidgetPrivate::addFilesButtonClicked() { if (!this->PathListWidget) return; @@ -81,7 +81,7 @@ void ctkPathListButtonsWidgetPrivate::on_AddFilesButton_clicked() } //----------------------------------------------------------------------------- -void ctkPathListButtonsWidgetPrivate::on_AddDirButton_clicked() +void ctkPathListButtonsWidgetPrivate::addDirButtonClicked() { if (!this->PathListWidget) return; @@ -90,7 +90,7 @@ void ctkPathListButtonsWidgetPrivate::on_AddDirButton_clicked() } //----------------------------------------------------------------------------- -void ctkPathListButtonsWidgetPrivate::on_RemoveButton_clicked() +void ctkPathListButtonsWidgetPrivate::removeButtonClicked() { if (!this->PathListWidget) return; @@ -98,7 +98,7 @@ void ctkPathListButtonsWidgetPrivate::on_RemoveButton_clicked() } //----------------------------------------------------------------------------- -void ctkPathListButtonsWidgetPrivate::on_EditButton_clicked() +void ctkPathListButtonsWidgetPrivate::editButtonClicked() { Q_Q(ctkPathListButtonsWidget); @@ -122,13 +122,13 @@ void ctkPathListButtonsWidgetPrivate::on_EditButton_clicked() { QMessageBox::information(q, tr("Editing the path failed"), QString(tr("Failed to change path:\n\n%1\n\nto path\n\n%2\n\nPlease check your permissions.")) - .arg(currentPath).arg(paths.front())); + .arg(currentPath, paths.front())); } } } //----------------------------------------------------------------------------- -void ctkPathListButtonsWidgetPrivate::on_PathListWidget_selectionChanged(const QItemSelection &selected, +void ctkPathListButtonsWidgetPrivate::pathListWidgetSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { Q_UNUSED(selected) @@ -139,49 +139,16 @@ void ctkPathListButtonsWidgetPrivate::on_PathListWidget_selectionChanged(const Q this->RemoveButton->setEnabled(hasSelection); } -//----------------------------------------------------------------------------- -QStringList ctkPathListButtonsWidgetPrivate::openAddFilesDialog(bool multiple) -{ - Q_Q(ctkPathListButtonsWidget); - - if (!this->PathListWidget) return QStringList(); - - QString caption; - if (multiple) - { - caption = tr("Select one or more files"); - } - else - { - caption = tr("Select a file"); - } - - QFileDialog fileDialog(q, caption); - fileDialog.setOption(QFileDialog::ReadOnly, true); - - if (multiple) - { - fileDialog.setFileMode(QFileDialog::ExistingFiles); - } - else - { - fileDialog.setFileMode(QFileDialog::ExistingFile); - } - - QString currentPath = this->PathListWidget->currentPath(true); - currentPath = currentPath.left(currentPath.lastIndexOf('/') + 1); - if (!currentPath.isEmpty()) - { - fileDialog.setDirectory(currentPath); - } - +namespace { // We use a proxy model as a workaround for the broken QFileDialog::setFilter() method. // See for example https://bugreports.qt-project.org/browse/QTBUG-10244 class FileFilterProxyModel : public QSortFilterProxyModel { + Q_OBJECT public: - FileFilterProxyModel(ctkPathListWidget::PathOptions fileOptions) - : FileOptions(fileOptions) + FileFilterProxyModel(ctkPathListWidget::PathOptions fileOptions, + QObject* parent = nullptr) + : QSortFilterProxyModel(parent), FileOptions(fileOptions) {} protected: @@ -221,42 +188,63 @@ QStringList ctkPathListButtonsWidgetPrivate::openAddFilesDialog(bool multiple) private: ctkPathListWidget::PathOptions FileOptions; }; - - fileDialog.setProxyModel(new FileFilterProxyModel(this->PathListWidget->fileOptions())); - - if (fileDialog.exec() == QDialog::Accepted) - { - return fileDialog.selectedFiles(); - } - return QStringList(); } //----------------------------------------------------------------------------- -QStringList ctkPathListButtonsWidgetPrivate::openAddDirDialog() +QStringList ctkPathListButtonsWidgetPrivate::openAddFilesDialog(bool multiple) { Q_Q(ctkPathListButtonsWidget); if (!this->PathListWidget) return QStringList(); - QString caption = tr("Select a directory"); + QString caption; + if (multiple) + { + caption = tr("Select one or more files"); + } + else + { + caption = tr("Select a file"); + } + QFileDialog fileDialog(q, caption); + fileDialog.setOption(QFileDialog::ReadOnly); - fileDialog.setFileMode(QFileDialog::Directory); - fileDialog.setOption(QFileDialog::ShowDirsOnly); + if (multiple) + { + fileDialog.setFileMode(QFileDialog::ExistingFiles); + } + else + { + fileDialog.setFileMode(QFileDialog::ExistingFile); + } QString currentPath = this->PathListWidget->currentPath(true); + currentPath = currentPath.left(currentPath.lastIndexOf('/') + 1); if (!currentPath.isEmpty()) { fileDialog.setDirectory(currentPath); } + + fileDialog.setProxyModel(new FileFilterProxyModel(this->PathListWidget->fileOptions())); + + if (fileDialog.exec() == QDialog::Accepted) + { + return fileDialog.selectedFiles(); + } + return QStringList(); +} +namespace { // We use a proxy model as a workaround for the broken QFileDialog::setFilter() method. // See for example https://bugreports.qt-project.org/browse/QTBUG-10244 class DirFilterProxyModel : public QSortFilterProxyModel { + Q_OBJECT public: - DirFilterProxyModel(ctkPathListWidget::PathOptions dirOptions) - : DirOptions(dirOptions) + DirFilterProxyModel(ctkPathListWidget::PathOptions dirOptions, + QObject* parent = nullptr) + : QSortFilterProxyModel(parent), DirOptions(dirOptions) {} protected: @@ -274,17 +262,36 @@ QStringList ctkPathListButtonsWidgetPrivate::openAddDirDialog() } // Do not check for the Writable flag, since it makes navigation from // non-writable folders to writable sub-folders hard. -// if (DirOptions.testFlag(ctkPathListWidget::Writable) && -// !fileInfo.isWritable()) -// { -// return false; -// } + // if (DirOptions.testFlag(ctkPathListWidget::Writable) && + // !fileInfo.isWritable()) + // { + // return false; + // } return true; } private: ctkPathListWidget::PathOptions DirOptions; }; +} +//----------------------------------------------------------------------------- +QStringList ctkPathListButtonsWidgetPrivate::openAddDirDialog() +{ + Q_Q(ctkPathListButtonsWidget); + + if (!this->PathListWidget) return QStringList(); + + QString caption = tr("Select a directory"); + QFileDialog fileDialog(q, caption); + + fileDialog.setFileMode(QFileDialog::Directory); + fileDialog.setOption(QFileDialog::ShowDirsOnly); + + QString currentPath = this->PathListWidget->currentPath(true); + if (!currentPath.isEmpty()) + { + fileDialog.setDirectory(currentPath); + } fileDialog.setProxyModel(new DirFilterProxyModel(this->PathListWidget->directoryOptions())); @@ -353,8 +360,8 @@ void ctkPathListButtonsWidget::init(ctkPathListWidget *pathListWidget) } connect(d->PathListWidget->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - d, SLOT(on_PathListWidget_selectionChanged(QItemSelection,QItemSelection))); - connect(d->PathListWidget, SIGNAL(pathActivated(QString)), d, SLOT(on_EditButton_clicked())); + d, SLOT(pathListWidgetSelectionChanged(QItemSelection,QItemSelection))); + connect(d->PathListWidget, SIGNAL(pathActivated(QString)), d, SLOT(editButtonClicked())); } //----------------------------------------------------------------------------- @@ -714,3 +721,4 @@ QToolButton *ctkPathListButtonsWidget::buttonRemove() const Q_D(const ctkPathListButtonsWidget); return d->RemoveButton; } +#include "ctkPathListButtonsWidget.moc" diff --git a/Libs/Widgets/ctkPathListButtonsWidget_p.h b/Libs/Widgets/ctkPathListButtonsWidget_p.h index 7b3a65bfbb..d3a239c2d8 100644 --- a/Libs/Widgets/ctkPathListButtonsWidget_p.h +++ b/Libs/Widgets/ctkPathListButtonsWidget_p.h @@ -53,12 +53,12 @@ class ctkPathListButtonsWidgetPrivate : public QObject, public Ui_ctkPathListBut public Q_SLOTS: - void on_AddFilesButton_clicked(); - void on_AddDirButton_clicked(); - void on_RemoveButton_clicked(); - void on_EditButton_clicked(); + void addFilesButtonClicked(); + void addDirButtonClicked(); + void removeButtonClicked(); + void editButtonClicked(); - void on_PathListWidget_selectionChanged(const QItemSelection& selected, const QItemSelection& deselected); + void pathListWidgetSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected); public: diff --git a/Libs/Widgets/ctkPathListWidget.cpp b/Libs/Widgets/ctkPathListWidget.cpp index 7e037d2219..f82bb4733b 100644 --- a/Libs/Widgets/ctkPathListWidget.cpp +++ b/Libs/Widgets/ctkPathListWidget.cpp @@ -31,52 +31,6 @@ // QtGUI includes #include "ctkPathListWidget.h" -// -------------------------------------------------------------------------- -// ctkPathListWidgetPrivate - -//----------------------------------------------------------------------------- -class ctkPathListWidgetPrivate -{ - Q_DECLARE_PUBLIC(ctkPathListWidget) - Q_GADGET - -protected: - ctkPathListWidget* const q_ptr; - -public: - - enum PathType { - Unknown, - File, - Directory - }; - - ctkPathListWidgetPrivate(ctkPathListWidget& object); - - void _q_emitPathClicked(const QModelIndex &index); - void _q_emitPathDoubleClicked(const QModelIndex &index); - void _q_emitPathActivated(const QModelIndex &index); - void _q_emitCurrentPathChanged(const QModelIndex ¤t, const QModelIndex &previous); - - bool addPath(const QString& path); - bool removePath(const QString& path); - - void fileOptionsChanged(); - void directoryOptionsChanged(); - - PathType pathType(const QString& absolutePath) const; - - bool isValidPath(const QString& absoluteFilePath, PathType pathType) const; - bool isValidFile(const QString& absoluteFilePath) const; - bool isValidDir(const QString& absoluteDirPath) const; - - QStandardItemModel PathListModel; - ctkPathListWidget::Mode Mode; - ctkPathListWidget::PathOptions FileOptions; - ctkPathListWidget::PathOptions DirectoryOptions; - QIcon FileIcon; - QIcon DirectoryIcon; -}; // -------------------------------------------------------------------------- // ctkPathListWidgetPrivate methods @@ -607,14 +561,14 @@ QStandardItem *ctkPathListWidget::item(const QString &absolutePath) const } // -------------------------------------------------------------------------- -QString ctkPathListWidget::pathAt(const QPoint& point) const +QString ctkPathListWidget::pathAt(QPoint point) const { Q_D(const ctkPathListWidget); return d->PathListModel.data(indexAt(point), AbsolutePathRole).toString(); } // -------------------------------------------------------------------------- -QStandardItem* ctkPathListWidget::itemAt(const QPoint &point) const +QStandardItem* ctkPathListWidget::itemAt(QPoint point) const { Q_D(const ctkPathListWidget); QModelIndex index = this->indexAt(point); diff --git a/Libs/Widgets/ctkPathListWidget.h b/Libs/Widgets/ctkPathListWidget.h index 6e580789ca..c9351f791a 100644 --- a/Libs/Widgets/ctkPathListWidget.h +++ b/Libs/Widgets/ctkPathListWidget.h @@ -26,14 +26,11 @@ // Qt includes #include +#include // QtGUI includes #include "ctkWidgetsExport.h" -class ctkPathListWidgetPrivate; - -class QStandardItem; - /// \ingroup Widgets /// /// \brief The ctkPathListWidget lists files and/or directories. @@ -44,6 +41,7 @@ class QStandardItem; /// by setting file and directory options. /// \sa ctkPathLineEdit, ctkDirectoryButton /// +class ctkPathListWidgetPrivate; // Forward declaration within this file class CTK_WIDGETS_EXPORT ctkPathListWidget : public QListView { Q_OBJECT @@ -192,11 +190,11 @@ class CTK_WIDGETS_EXPORT ctkPathListWidget : public QListView /// \return The absolute path for the entry located at the point \a point (in the /// widget coordinate system) or a null QString if no entry could be found for \a point. - QString pathAt(const QPoint& point) const; + QString pathAt(QPoint point) const; /// \return The item for the entry located at the point \a point (in the widget /// coordinate system) or NULL if no ite could be found for \a point. - QStandardItem* itemAt(const QPoint& point) const; + QStandardItem* itemAt(QPoint point) const; /// \see pathAt(const QPoint&) QString pathAt(int x, int y) const { return pathAt(QPoint(x, y)); } @@ -317,6 +315,53 @@ public Q_SLOTS: Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentPathChanged(const QModelIndex &previous, const QModelIndex ¤t)) }; + +// -------------------------------------------------------------------------- +// ctkPathListWidgetPrivate + +//----------------------------------------------------------------------------- +class ctkPathListWidgetPrivate +{ + Q_DECLARE_PUBLIC(ctkPathListWidget) + +protected: + ctkPathListWidget* const q_ptr; + +public: + + enum PathType { + Unknown, + File, + Directory + }; + + ctkPathListWidgetPrivate(ctkPathListWidget& object); + + void _q_emitPathClicked(const QModelIndex &index); + void _q_emitPathDoubleClicked(const QModelIndex &index); + void _q_emitPathActivated(const QModelIndex &index); + void _q_emitCurrentPathChanged(const QModelIndex ¤t, const QModelIndex &previous); + + bool addPath(const QString& path); + bool removePath(const QString& path); + + void fileOptionsChanged(); + void directoryOptionsChanged(); + + PathType pathType(const QString& absolutePath) const; + + bool isValidPath(const QString& absoluteFilePath, PathType pathType) const; + bool isValidFile(const QString& absoluteFilePath) const; + bool isValidDir(const QString& absoluteDirPath) const; + + QStandardItemModel PathListModel; + ctkPathListWidget::Mode Mode; + ctkPathListWidget::PathOptions FileOptions; + ctkPathListWidget::PathOptions DirectoryOptions; + QIcon FileIcon; + QIcon DirectoryIcon; +}; + Q_DECLARE_OPERATORS_FOR_FLAGS(ctkPathListWidget::PathOptions) #endif diff --git a/Libs/Widgets/ctkPixmapIconEngine.cpp b/Libs/Widgets/ctkPixmapIconEngine.cpp index c852ecf02b..eb0b6bdbbf 100644 --- a/Libs/Widgets/ctkPixmapIconEngine.cpp +++ b/Libs/Widgets/ctkPixmapIconEngine.cpp @@ -51,10 +51,10 @@ void ctkPixmapIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mod painter->drawPixmap(rect, pixmap(pixmapSize, mode, state)); } -static inline int area(const QSize &s) { return s.width() * s.height(); } +static inline int area(QSize s) { return s.width() * s.height(); } // returns the smallest of the two that is still larger than or equal to size. -static ctkPixmapIconEngineEntry *bestSizeMatch( const QSize &size, ctkPixmapIconEngineEntry *pa, ctkPixmapIconEngineEntry *pb) +static ctkPixmapIconEngineEntry *bestSizeMatch( QSize size, ctkPixmapIconEngineEntry *pa, ctkPixmapIconEngineEntry *pb) { int s = area(size); if (pa->size == QSize() && pa->pixmap.isNull()) { @@ -77,7 +77,7 @@ static ctkPixmapIconEngineEntry *bestSizeMatch( const QSize &size, ctkPixmapIcon return pb; } -ctkPixmapIconEngineEntry *ctkPixmapIconEngine::tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state) +ctkPixmapIconEngineEntry *ctkPixmapIconEngine::tryMatch(QSize size, QIcon::Mode mode, QIcon::State state) { ctkPixmapIconEngineEntry *pe = 0; for (int i = 0; i < pixmaps.count(); ++i) @@ -91,7 +91,7 @@ ctkPixmapIconEngineEntry *ctkPixmapIconEngine::tryMatch(const QSize &size, QIcon } -ctkPixmapIconEngineEntry *ctkPixmapIconEngine::bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly) +ctkPixmapIconEngineEntry *ctkPixmapIconEngine::bestMatch(QSize size, QIcon::Mode mode, QIcon::State state, bool sizeOnly) { ctkPixmapIconEngineEntry *pe = tryMatch(size, mode, state); while (!pe){ diff --git a/Libs/Widgets/ctkPixmapIconEngine.h b/Libs/Widgets/ctkPixmapIconEngine.h index dfc816604f..24c1f99c09 100644 --- a/Libs/Widgets/ctkPixmapIconEngine.h +++ b/Libs/Widgets/ctkPixmapIconEngine.h @@ -37,7 +37,7 @@ struct ctkPixmapIconEngineEntry ctkPixmapIconEngineEntry():mode(QIcon::Normal), state(QIcon::Off){} ctkPixmapIconEngineEntry(const QPixmap &pm, QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off) :pixmap(pm), size(pm.size()), mode(m), state(s){} - ctkPixmapIconEngineEntry(const QString &file, const QSize &sz = QSize(), QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off) + ctkPixmapIconEngineEntry(const QString &file, QSize sz = QSize(), QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off) :fileName(file), size(sz), mode(m), state(s){} QPixmap pixmap; QString fileName; @@ -57,7 +57,7 @@ class CTK_WIDGETS_EXPORT ctkPixmapIconEngine ~ctkPixmapIconEngine(); void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); - ctkPixmapIconEngineEntry *bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly); + ctkPixmapIconEngineEntry *bestMatch(QSize size, QIcon::Mode mode, QIcon::State state, bool sizeOnly); QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state); void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state); @@ -70,7 +70,7 @@ class CTK_WIDGETS_EXPORT ctkPixmapIconEngine void virtual_hook(int id, void *data); private: - ctkPixmapIconEngineEntry *tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state); + ctkPixmapIconEngineEntry *tryMatch(QSize size, QIcon::Mode mode, QIcon::State state); QVector pixmaps; friend class QIconThemeEngine; diff --git a/Libs/Widgets/ctkProxyStyle.h b/Libs/Widgets/ctkProxyStyle.h index c37d6d19ec..1d2e3f0d93 100644 --- a/Libs/Widgets/ctkProxyStyle.h +++ b/Libs/Widgets/ctkProxyStyle.h @@ -73,9 +73,7 @@ class CTK_WIDGETS_EXPORT ctkProxyStyle : public QProxyStyle protected: QScopedPointer d_ptr; virtual bool event(QEvent *e); - -protected Q_SLOTS: - virtual QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const; + virtual QIcon standardIconImplementation(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const; virtual int layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; private: diff --git a/Libs/Widgets/ctkQImageView.cpp b/Libs/Widgets/ctkQImageView.cpp index 3e82eb17ef..ae42ea2900 100644 --- a/Libs/Widgets/ctkQImageView.cpp +++ b/Libs/Widgets/ctkQImageView.cpp @@ -1020,7 +1020,14 @@ void ctkQImageView::update( bool zoomChanged, } if( d->FlipXAxis || d->FlipYAxis ) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + Qt::Orientations flipOrient; + if( d->FlipXAxis ) flipOrient |= Qt::Horizontal; + if( d->FlipYAxis ) flipOrient |= Qt::Vertical; + tmpI = tmpI.flipped( flipOrient ); +#else tmpI = tmpI.mirrored( d->FlipXAxis, d->FlipYAxis ); +#endif if( d->FlipXAxis ) { sourceX = tmpI.width() - (d->TmpXMax - d->TmpXMin) - d->TmpXMin; @@ -1076,8 +1083,7 @@ void ctkQImageView::update( bool zoomChanged, &intBound ); QString wlString = tr("W / L = %1 / %2") - .arg(QString::number(this->intensityWindow(), 'f', 3)) - .arg(QString::number(this->intensityLevel(), 'f', 3)); + .arg(QString::number(this->intensityWindow(), 'f', 3), QString::number(this->intensityLevel(), 'f', 3)); QRectF wlBound = painter.boundingRect( pointRect, textFlags, wlString ); QRectF wlRect( @@ -1089,9 +1095,7 @@ void ctkQImageView::update( bool zoomChanged, } QString spacingString = tr("Spacing = %1, %2, %3") - .arg(QString::number(this->xSpacing(), 'f', 3)) - .arg(QString::number(this->ySpacing(), 'f', 3)) - .arg(QString::number(this->sliceThickness(), 'f', 3)); + .arg(QString::number(this->xSpacing(), 'f', 3), QString::number(this->ySpacing(), 'f', 3), QString::number(this->sliceThickness(), 'f', 3)); QRectF spacingBound = painter.boundingRect( pointRect, textFlags, spacingString ); QRectF spacingRect( @@ -1102,9 +1106,7 @@ void ctkQImageView::update( bool zoomChanged, &spacingBound ); QString dimString = tr("Size = %1, %2, %3") - .arg(QString::number( d->ImageList[ d->SliceNumber ].width())) - .arg(QString::number(d->ImageList[d->SliceNumber].height())) - .arg(QString::number(d->ImageList.size())); + .arg(QString::number( d->ImageList[ d->SliceNumber ].width()), QString::number(d->ImageList[d->SliceNumber].height()), QString::number(d->ImageList.size())); QRectF dimBound = painter.boundingRect( pointRect, textFlags, dimString ); QRectF dimRect( @@ -1114,9 +1116,7 @@ void ctkQImageView::update( bool zoomChanged, painter.drawText( dimRect, textFlags, dimString, &dimBound ); QString rasString = tr("RAS = %1, %2, %3") - .arg(QString::number(this->xPosition() * this->xSpacing(), 'f', 3)) - .arg(QString::number(this->yPosition() * this->ySpacing(), 'f', 3)) - .arg(QString::number(this->slicePosition() * this->sliceSpacing(), 'f', 3)); + .arg(QString::number(this->xPosition() * this->xSpacing(), 'f', 3), QString::number(this->yPosition() * this->ySpacing(), 'f', 3), QString::number(this->slicePosition() * this->sliceSpacing(), 'f', 3)); QRectF rasBound = painter.boundingRect( pointRect, textFlags, rasString ); QRectF rasRect( diff --git a/Libs/Widgets/ctkRangeSlider.cpp b/Libs/Widgets/ctkRangeSlider.cpp index 09706ee36a..5f9d6a3fcf 100644 --- a/Libs/Widgets/ctkRangeSlider.cpp +++ b/Libs/Widgets/ctkRangeSlider.cpp @@ -53,7 +53,7 @@ class ctkRangeSliderPrivate /// If a handle is selected, handleRect is set to the handle rect. /// otherwise return NoHandle and handleRect is set to the combined rect of /// the min and max handles - Handle handleAtPos(const QPoint& pos, QRect& handleRect)const; + Handle handleAtPos(QPoint pos, QRect& handleRect)const; /// Copied verbatim from QSliderPrivate class (see QSlider.cpp) int pixelPosToRangeValue(int pos) const; @@ -127,7 +127,7 @@ void ctkRangeSliderPrivate::init() } // -------------------------------------------------------------------------- -ctkRangeSliderPrivate::Handle ctkRangeSliderPrivate::handleAtPos(const QPoint& pos, QRect& handleRect)const +ctkRangeSliderPrivate::Handle ctkRangeSliderPrivate::handleAtPos(QPoint pos, QRect& handleRect)const { Q_Q(const ctkRangeSlider); diff --git a/Libs/Widgets/ctkScreenshotDialog.cpp b/Libs/Widgets/ctkScreenshotDialog.cpp index 922a1eb4ff..f53a8ef7b8 100644 --- a/Libs/Widgets/ctkScreenshotDialog.cpp +++ b/Libs/Widgets/ctkScreenshotDialog.cpp @@ -385,8 +385,7 @@ void ctkScreenshotDialog::instantScreenshot() d->HeightSpinBox->value()); } - QString filename = QString("%1/%2_%3.png").arg(d->DirectoryPathLineEdit->currentPath()) - .arg(d->ImageNameLineEdit->text()) + QString filename = QString("%1/%2_%3.png").arg(d->DirectoryPathLineEdit->currentPath(), d->ImageNameLineEdit->text()) .arg(d->ImageVersionNumberSpinBox->value()); // Check if file exists diff --git a/Libs/Widgets/ctkSettingsDialog.cpp b/Libs/Widgets/ctkSettingsDialog.cpp index 50a4b1cd2d..7ca1a133db 100644 --- a/Libs/Widgets/ctkSettingsDialog.cpp +++ b/Libs/Widgets/ctkSettingsDialog.cpp @@ -31,7 +31,7 @@ #include "ui_ctkSettingsDialog.h" #include "ctkLogger.h" -static ctkLogger logger("org.commontk.libs.widgets.ctkSettingsDialog"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.widgets.ctkSettingsDialog")) //----------------------------------------------------------------------------- class ctkSettingsDialogPrivate: public Ui_ctkSettingsDialog @@ -209,9 +209,9 @@ void ctkSettingsDialog::setSettings(QSettings* settings) d->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false); d->Settings = settings; - foreach(ctkSettingsPanel* panel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - panel->setSettings(settings); + it.value()->setSettings(settings); } } @@ -282,11 +282,11 @@ ctkSettingsPanel* ctkSettingsDialog::currentPanel()const ctkSettingsPanel* ctkSettingsDialog::panel(const QString& label)const { Q_D(const ctkSettingsDialog); - foreach(ctkSettingsPanel* settingsPanel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - if (settingsPanel->windowTitle() == label) + if (it.value()->windowTitle() == label) { - return settingsPanel; + return it.value(); } } return 0; @@ -331,9 +331,9 @@ void ctkSettingsDialog::reject() void ctkSettingsDialog::applySettings() { Q_D(ctkSettingsDialog); - foreach(ctkSettingsPanel* panel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - panel->applySettings(); + it.value()->applySettings(); } d->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false); } @@ -342,9 +342,9 @@ void ctkSettingsDialog::applySettings() void ctkSettingsDialog::reloadSettings() { Q_D(ctkSettingsDialog); - foreach(ctkSettingsPanel* panel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - panel->reloadSettings(); + it.value()->reloadSettings(); } d->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false); } @@ -353,9 +353,9 @@ void ctkSettingsDialog::reloadSettings() void ctkSettingsDialog::resetSettings() { Q_D(ctkSettingsDialog); - foreach(ctkSettingsPanel* panel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - panel->resetSettings(); + it.value()->resetSettings(); } d->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false); } @@ -371,9 +371,9 @@ void ctkSettingsDialog::restoreDefaultSettings() d->Settings->clear(); } // ... and restore settings for the ones we can - foreach(ctkSettingsPanel* panel, d->Panels.values()) + for (auto it = d->Panels.constBegin(); it != d->Panels.constEnd(); ++it) { - panel->restoreDefaultSettings(); + it.value()->restoreDefaultSettings(); } } diff --git a/Libs/Widgets/ctkSettingsPanel.cpp b/Libs/Widgets/ctkSettingsPanel.cpp index 44cf034c4d..82ef1bcf4f 100644 --- a/Libs/Widgets/ctkSettingsPanel.cpp +++ b/Libs/Widgets/ctkSettingsPanel.cpp @@ -28,7 +28,7 @@ #include "ctkSettingsPanel.h" #include "ctkLogger.h" -static ctkLogger logger("org.commontk.libs.widgets.ctkSettingsPanel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.libs.widgets.ctkSettingsPanel")) namespace { @@ -231,8 +231,9 @@ void ctkSettingsPanel::setSettings(QSettings* settings) void ctkSettingsPanel::reloadSettings() { Q_D(ctkSettingsPanel); - foreach(const QString& key, d->Properties.keys()) + for (auto it = d->Properties.begin(); it != d->Properties.end(); ++it) { + const QString& key = it.key(); QSettings* settings = d->settings(key); if (!settings) { @@ -241,7 +242,7 @@ void ctkSettingsPanel::reloadSettings() if (settings->contains(key)) { QVariant value = settings->value(key); - PropertyType& prop = d->Properties[key]; + PropertyType& prop = it.value(); // Update object registered using registerProperty() prop.setValue(value); prop.setPreviousValue(value); @@ -280,7 +281,7 @@ void ctkSettingsPanel::setSetting(const QString& key, const QVariant& newVal) d->Properties[key].setValue(newVal); if (settings->status() != QSettings::NoError) { - logger.warn( QString("Error #%1 while writing setting \"%2\"") + logger->warn( QString("Error #%1 while writing setting \"%2\"") .arg(static_cast(settings->status())) .arg(key)); } @@ -388,12 +389,11 @@ QStringList ctkSettingsPanel::changedSettings()const { Q_D(const ctkSettingsPanel); QStringList settingsKeys; - foreach(const QString& key, d->Properties.keys()) + for (auto it = d->Properties.constBegin(); it != d->Properties.constEnd(); ++it) { - const PropertyType& prop = d->Properties[key]; - if (prop.previousValue() != prop.value()) + if (it.value().previousValue() != it.value().value()) { - settingsKeys << key; + settingsKeys << it.key(); } } return settingsKeys; @@ -418,13 +418,13 @@ ::settingOptions(const QString& settingKey)const void ctkSettingsPanel::applySettings() { Q_D(ctkSettingsPanel); - foreach(const QString& key, d->Properties.keys()) + for (auto it = d->Properties.begin(); it != d->Properties.end(); ++it) { - PropertyType& prop = d->Properties[key]; + PropertyType& prop = it.value(); if (prop.previousValue() != prop.value()) { prop.setPreviousValue(prop.value()); - emit settingChanged(key, prop.value()); + emit settingChanged(it.key(), prop.value()); } } } @@ -433,9 +433,9 @@ void ctkSettingsPanel::applySettings() void ctkSettingsPanel::resetSettings() { Q_D(ctkSettingsPanel); - foreach(const QString& key, d->Properties.keys()) + for (auto it = d->Properties.constBegin(); it != d->Properties.constEnd(); ++it) { - this->setSetting(key, d->Properties[key].previousValue()); + this->setSetting(it.key(), it.value().previousValue()); } } @@ -443,8 +443,8 @@ void ctkSettingsPanel::resetSettings() void ctkSettingsPanel::restoreDefaultSettings() { Q_D(ctkSettingsPanel); - foreach(const QString& key, d->Properties.keys()) + for (auto it = d->Properties.constBegin(); it != d->Properties.constEnd(); ++it) { - this->setSetting(key, d->Properties[key].DefaultValue); + this->setSetting(it.key(), it.value().DefaultValue); } } diff --git a/Libs/Widgets/ctkTestApplication.cpp b/Libs/Widgets/ctkTestApplication.cpp index d6b6229875..6f04d82b88 100644 --- a/Libs/Widgets/ctkTestApplication.cpp +++ b/Libs/Widgets/ctkTestApplication.cpp @@ -52,7 +52,8 @@ int ctkTestApplication::Error = 0; //----------------------------------------------------------------------------- -ctkTestApplication::ctkTestApplication(int _argc, char** _argv) +ctkTestApplication::ctkTestApplication(int _argc, char** _argv, QObject* parent) + : QObject(parent) { qInstallMessageHandler(ctkTestApplication::messageHandler); // CMake generated driver removes argv[0], diff --git a/Libs/Widgets/ctkTestApplication.h b/Libs/Widgets/ctkTestApplication.h index 5b92147185..f7b2890a0b 100644 --- a/Libs/Widgets/ctkTestApplication.h +++ b/Libs/Widgets/ctkTestApplication.h @@ -85,7 +85,7 @@ class CTK_WIDGETS_EXPORT ctkTestApplication : public QObject Q_OBJECT public: - ctkTestApplication(int _argc, char** _argv); + ctkTestApplication(int _argc, char** _argv, QObject* parent = nullptr); ~ctkTestApplication(); /// This function could be overloaded to implement test that required diff --git a/Libs/Widgets/ctkThumbnailLabel.cpp b/Libs/Widgets/ctkThumbnailLabel.cpp index 22a4c48309..e41c32f667 100644 --- a/Libs/Widgets/ctkThumbnailLabel.cpp +++ b/Libs/Widgets/ctkThumbnailLabel.cpp @@ -25,7 +25,7 @@ // ctkCore includes #include "ctkLogger.h" -static ctkLogger logger("org.commontk.Widgets.ctkThumbnailLabel"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.Widgets.ctkThumbnailLabel")) // ctkWidgets includes #include "ctkThumbnailLabel.h" @@ -203,7 +203,7 @@ QString ctkThumbnailLabel::text()const } //---------------------------------------------------------------------------- -void ctkThumbnailLabel::setTextPosition(const Qt::Alignment& position) +void ctkThumbnailLabel::setTextPosition(Qt::Alignment position) { Q_D(ctkThumbnailLabel); d->TextPosition = position; @@ -264,7 +264,7 @@ Qt::Alignment ctkThumbnailLabel::textPosition()const } //---------------------------------------------------------------------------- -void ctkThumbnailLabel::setOperationStatus(const OperationStatus &status) +void ctkThumbnailLabel::setOperationStatus(OperationStatus status) { Q_D(ctkThumbnailLabel); d->Status = status; @@ -301,7 +301,7 @@ int ctkThumbnailLabel::operationProgress() const } //---------------------------------------------------------------------------- -void ctkThumbnailLabel::setOperationProgress(const int &progress) +void ctkThumbnailLabel::setOperationProgress(int progress) { Q_D(ctkThumbnailLabel); d->OperationProgressBar->setValue(progress); diff --git a/Libs/Widgets/ctkThumbnailLabel.h b/Libs/Widgets/ctkThumbnailLabel.h index 414917e110..9f67fd846a 100644 --- a/Libs/Widgets/ctkThumbnailLabel.h +++ b/Libs/Widgets/ctkThumbnailLabel.h @@ -84,7 +84,7 @@ class CTK_WIDGETS_EXPORT ctkThumbnailLabel : public QWidget void setText(const QString& text); QString text()const; - void setTextPosition(const Qt::Alignment& alignment); + void setTextPosition(Qt::Alignment alignment); Qt::Alignment textPosition()const; enum OperationStatus{ @@ -95,13 +95,13 @@ class CTK_WIDGETS_EXPORT ctkThumbnailLabel : public QWidget }; Q_ENUM(OperationStatus) - void setOperationStatus(const OperationStatus& status); + void setOperationStatus(OperationStatus status); OperationStatus operationStatus()const; void setStatusIcon(const QIcon& icon); QIcon statusIcon()const; - void setOperationProgress(const int& progress); + void setOperationProgress(int progress); int operationProgress()const; void setPixmap(const QPixmap& pixmap); diff --git a/Libs/Widgets/ctkThumbnailListWidget.cpp b/Libs/Widgets/ctkThumbnailListWidget.cpp index 3138707261..82e68e32bf 100644 --- a/Libs/Widgets/ctkThumbnailListWidget.cpp +++ b/Libs/Widgets/ctkThumbnailListWidget.cpp @@ -45,7 +45,7 @@ // STD includes #include -static ctkLogger logger("org.commontk.Widgets.ctkThumbnailListWidget"); +Q_GLOBAL_STATIC_WITH_ARGS(ctkLogger, logger, ("org.commontk.Widgets.ctkThumbnailListWidget")) //---------------------------------------------------------------------------- // ctkThumbnailListWidgetPrivate methods @@ -209,7 +209,7 @@ void ctkThumbnailListWidget::setCurrentThumbnail(int index) int count = d->ScrollAreaContentWidget->layout()->count(); - logger.debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString()); + logger->debug("Select thumbnail " + QVariant(index).toString() + " of " + QVariant(count).toString()); if(index >= count)return; diff --git a/Libs/Widgets/ctkTransferFunctionRepresentation.cpp b/Libs/Widgets/ctkTransferFunctionRepresentation.cpp index 0e4f9d2fce..5c49a32442 100644 --- a/Libs/Widgets/ctkTransferFunctionRepresentation.cpp +++ b/Libs/Widgets/ctkTransferFunctionRepresentation.cpp @@ -451,7 +451,7 @@ qreal ctkTransferFunctionRepresentation::computeRangeYOffset(const QVariant rang } //----------------------------------------------------------------------------- -qreal ctkTransferFunctionRepresentation::posX(const qreal& x)const +qreal ctkTransferFunctionRepresentation::posX(qreal x)const { return x; } diff --git a/Libs/Widgets/ctkTransferFunctionRepresentation.h b/Libs/Widgets/ctkTransferFunctionRepresentation.h index bdee790363..f7f430acfd 100644 --- a/Libs/Widgets/ctkTransferFunctionRepresentation.h +++ b/Libs/Widgets/ctkTransferFunctionRepresentation.h @@ -60,7 +60,7 @@ class CTK_WIDGETS_EXPORT ctkTransferFunctionRepresentation: public QObject inline qreal posY(const ctkPoint& point)const; inline QColor color(const ctkPoint& point) const; - qreal posX(const qreal& tfX)const; + qreal posX(qreal tfX)const; qreal posY(const QVariant& tfV)const; QColor color(const QVariant& tfV) const; @@ -71,7 +71,7 @@ class CTK_WIDGETS_EXPORT ctkTransferFunctionRepresentation: public QObject Q_INVOKABLE qreal mapYToScene(qreal posY)const; Q_INVOKABLE qreal mapXFromScene(qreal ScenePosX)const; Q_INVOKABLE qreal mapYFromScene(qreal ScenePosY)const; - inline QPointF mapPointFromScene(const QPointF& point)const; + inline QPointF mapPointFromScene(QPointF point)const; QList bezierParams(ctkControlPoint* start, ctkControlPoint* end) const; QList nonLinearPoints(ctkControlPoint* start, ctkControlPoint* end) const; @@ -128,7 +128,7 @@ QColor ctkTransferFunctionRepresentation::color(const ctkPoint& point) const return this->color(point.Value); } -QPointF ctkTransferFunctionRepresentation::mapPointFromScene(const QPointF& point)const +QPointF ctkTransferFunctionRepresentation::mapPointFromScene(QPointF point)const { return QPointF(this->mapXFromScene(point.x()), this->mapYFromScene(point.y())); diff --git a/Libs/Widgets/ctkWorkflowAbstractPagedWidget.cpp b/Libs/Widgets/ctkWorkflowAbstractPagedWidget.cpp index 4791ad481d..47afe0ff4c 100644 --- a/Libs/Widgets/ctkWorkflowAbstractPagedWidget.cpp +++ b/Libs/Widgets/ctkWorkflowAbstractPagedWidget.cpp @@ -134,7 +134,7 @@ void ctkWorkflowAbstractPagedWidget::associateStepWithPage(ctkWorkflowStep* step } // -------------------------------------------------------------------------- -void ctkWorkflowAbstractPagedWidget::associateStepWithLabel(ctkWorkflowStep* step, QString label) +void ctkWorkflowAbstractPagedWidget::associateStepWithLabel(ctkWorkflowStep* step, const QString& label) { Q_D(ctkWorkflowAbstractPagedWidget); @@ -145,7 +145,7 @@ void ctkWorkflowAbstractPagedWidget::associateStepWithLabel(ctkWorkflowStep* ste } // -------------------------------------------------------------------------- -void ctkWorkflowAbstractPagedWidget::associateStepWithPage(ctkWorkflowStep* step, int index, QString label) +void ctkWorkflowAbstractPagedWidget::associateStepWithPage(ctkWorkflowStep* step, int index, const QString& label) { this->associateStepWithPage(step, index); this->associateStepWithLabel(step, label); diff --git a/Libs/Widgets/ctkWorkflowAbstractPagedWidget.h b/Libs/Widgets/ctkWorkflowAbstractPagedWidget.h index ec616d3d54..ce2c996f8d 100644 --- a/Libs/Widgets/ctkWorkflowAbstractPagedWidget.h +++ b/Libs/Widgets/ctkWorkflowAbstractPagedWidget.h @@ -48,13 +48,13 @@ class CTK_WIDGETS_EXPORT ctkWorkflowAbstractPagedWidget : public ctkWorkflowWidg virtual ~ctkWorkflowAbstractPagedWidget(); /// Optionally specify the label to be displayed on the page shown for the given step. - Q_INVOKABLE virtual void associateStepWithLabel(ctkWorkflowStep* step, QString label); + Q_INVOKABLE virtual void associateStepWithLabel(ctkWorkflowStep* step, const QString& label); /// Dictate that a step be displayed on a particular page index, to override the default setting /// to display each encountered step on a new page. A label can also be provided for the step's /// page. Q_INVOKABLE virtual void associateStepWithPage(ctkWorkflowStep* step, int index); - Q_INVOKABLE virtual void associateStepWithPage(ctkWorkflowStep* step, int index, QString label); + Q_INVOKABLE virtual void associateStepWithPage(ctkWorkflowStep* step, int index, const QString& label); /// Get the workflow group box associated with a particular step using ctkWorkflowWidget::workflowGroupBox; diff --git a/Libs/Widgets/ctkWorkflowButtonBoxWidget.cpp b/Libs/Widgets/ctkWorkflowButtonBoxWidget.cpp index df26dec510..8a574fdc98 100644 --- a/Libs/Widgets/ctkWorkflowButtonBoxWidget.cpp +++ b/Libs/Widgets/ctkWorkflowButtonBoxWidget.cpp @@ -209,10 +209,10 @@ void ctkWorkflowButtonBoxWidgetPrivate::updateGoToButtons(ctkWorkflowStep* curre // Remove the buttons if the set of steps to have goTo buttons has changed if (goToStepsThatHaveButtons != goToStepsToHaveButtons) { - foreach (ctkPushButton* goToButton, this->GoToButtonToStepMap.keys()) + for (auto it = this->GoToButtonToStepMap.constBegin(); it != this->GoToButtonToStepMap.constEnd(); ++it) { - q->layout()->removeWidget(goToButton); - goToButton->deleteLater(); + q->layout()->removeWidget(it.key()); + it.key()->deleteLater(); } this->GoToButtonToStepMap.clear(); } @@ -236,13 +236,14 @@ void ctkWorkflowButtonBoxWidgetPrivate::updateGoToButtons(ctkWorkflowStep* curre // Show/hide the goTo buttons depending on whether they are accessible from the current step ctkWorkflowWidgetStep* step = dynamic_cast(currentStep); - foreach (ctkPushButton* goToButton, this->GoToButtonToStepMap.keys()) + for (auto it = this->GoToButtonToStepMap.constBegin(); it != this->GoToButtonToStepMap.constEnd(); ++it) { + ctkPushButton* goToButton = it.key(); // TODO enable and show the goTo button if we can go to it // ctkWorkflowStep* goToStep = this->GoToButtonToStepMap[goToButton]; // if (this->Workflow->canGoToStep(currentStep, goToStep)) // for now we'll assume we can go to the step - ctkWorkflowStep* goToStep = this->GoToButtonToStepMap[goToButton]; + ctkWorkflowStep* goToStep = it.value(); Q_ASSERT(goToStep); bool enable = currentStep && this->Workflow->canGoToStep(goToStep->id(), currentStep); bool visible = step ? !(step->buttonBoxHints() & ctkWorkflowWidgetStep::ButtonBoxHidden) : true; @@ -375,7 +376,7 @@ QList ctkWorkflowButtonBoxWidget::goToButtons()const } //----------------------------------------------------------------------------- -void ctkWorkflowButtonBoxWidget::setDirection(const QBoxLayout::Direction& newDirection) +void ctkWorkflowButtonBoxWidget::setDirection(QBoxLayout::Direction newDirection) { if (QBoxLayout* layout = qobject_cast(this->layout())) { diff --git a/Libs/Widgets/ctkWorkflowButtonBoxWidget.h b/Libs/Widgets/ctkWorkflowButtonBoxWidget.h index de6be76e24..30fb5372e3 100644 --- a/Libs/Widgets/ctkWorkflowButtonBoxWidget.h +++ b/Libs/Widgets/ctkWorkflowButtonBoxWidget.h @@ -131,7 +131,7 @@ class CTK_WIDGETS_EXPORT ctkWorkflowButtonBoxWidget : public QWidget /// Sets the direction of the QBoxLayout that manages this widget (default is /// QBoxLayout::LeftToRight) QBoxLayout::Direction direction()const; - void setDirection(const QBoxLayout::Direction& newDirection); + void setDirection(QBoxLayout::Direction newDirection); /// Return the hideGoToButtons property value. /// \sa hideGoToButtons diff --git a/Libs/Widgets/ctkWorkflowWidget.cpp b/Libs/Widgets/ctkWorkflowWidget.cpp index f3d2678a48..946b68f199 100644 --- a/Libs/Widgets/ctkWorkflowWidget.cpp +++ b/Libs/Widgets/ctkWorkflowWidget.cpp @@ -338,9 +338,7 @@ ::parse(const QString& format, ctkWorkflowWidgetStep* step) //QRegularExpression splitBrackets("\\{([^}]+)\\}"); //QRegularExpression splitBrackets("(\\{[^{}]+\\}|\\([^\\(\\)]+\\)|\"[^\"]+\")"); static const QRegularExpression splitBrackets(QString("(%1|%2|%3|%4)") - .arg(textRegExp).arg(simpleTextRegExp) - .arg(toolTipRegExp) - .arg(iconRegExp)); + .arg(textRegExp, simpleTextRegExp, toolTipRegExp, iconRegExp)); QStringList brackets; QRegularExpressionMatchIterator matchIter = splitBrackets.globalMatch(format); diff --git a/Libs/Widgets/ctkWorkflowWidgetStep.cpp b/Libs/Widgets/ctkWorkflowWidgetStep.cpp index 24e5c4e550..8941b60455 100644 --- a/Libs/Widgets/ctkWorkflowWidgetStep.cpp +++ b/Libs/Widgets/ctkWorkflowWidgetStep.cpp @@ -52,13 +52,13 @@ ctkWorkflowWidgetStepPrivate::~ctkWorkflowWidgetStepPrivate() } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStepPrivate::invokeShowUserInterfaceCommandInternal()const +void ctkWorkflowWidgetStepPrivate::invokeShowUserInterfaceCommandInternal() { emit invokeShowUserInterfaceCommand(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStepPrivate::showUserInterfaceCompleteInternal()const +void ctkWorkflowWidgetStepPrivate::showUserInterfaceCompleteInternal() { emit showUserInterfaceComplete(); } @@ -71,13 +71,13 @@ void ctkWorkflowWidgetStepPrivate::showUserInterface() } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStepPrivate::invokeCreateUserInterfaceCommandInternal()const +void ctkWorkflowWidgetStepPrivate::invokeCreateUserInterfaceCommandInternal() { emit invokeCreateUserInterfaceCommand(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStepPrivate::createUserInterfaceCompleteInternal()const +void ctkWorkflowWidgetStepPrivate::createUserInterfaceCompleteInternal() { emit createUserInterfaceComplete(); } @@ -202,33 +202,33 @@ void ctkWorkflowWidgetStep::showUserInterface() d->created = true; } - emit showUserInterfaceComplete(); + showUserInterfaceComplete(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStep::invokeShowUserInterfaceCommand()const +void ctkWorkflowWidgetStep::invokeShowUserInterfaceCommand() { - Q_D(const ctkWorkflowWidgetStep); + Q_D(ctkWorkflowWidgetStep); d->invokeShowUserInterfaceCommandInternal(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStep::showUserInterfaceComplete()const +void ctkWorkflowWidgetStep::showUserInterfaceComplete() { - Q_D(const ctkWorkflowWidgetStep); + Q_D(ctkWorkflowWidgetStep); d->showUserInterfaceCompleteInternal(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStep::invokeCreateUserInterfaceCommand()const +void ctkWorkflowWidgetStep::invokeCreateUserInterfaceCommand() { - Q_D(const ctkWorkflowWidgetStep); + Q_D(ctkWorkflowWidgetStep); d->invokeCreateUserInterfaceCommandInternal(); } //----------------------------------------------------------------------------- -void ctkWorkflowWidgetStep::createUserInterfaceComplete()const +void ctkWorkflowWidgetStep::createUserInterfaceComplete() { - Q_D(const ctkWorkflowWidgetStep); + Q_D(ctkWorkflowWidgetStep); d->createUserInterfaceCompleteInternal(); } diff --git a/Libs/Widgets/ctkWorkflowWidgetStep.h b/Libs/Widgets/ctkWorkflowWidgetStep.h index 77c0b91c8b..e872c84e1e 100644 --- a/Libs/Widgets/ctkWorkflowWidgetStep.h +++ b/Libs/Widgets/ctkWorkflowWidgetStep.h @@ -131,22 +131,22 @@ class CTK_WIDGETS_EXPORT ctkWorkflowWidgetStep : public QWidget, public ctkWorkf /// \brief Signal (emitted by the private implementation) indicating that the step's /// createUserInterface() method should be called. /// \sa createUserInterface() - void invokeCreateUserInterfaceCommand()const; + void invokeCreateUserInterfaceCommand(); /// \brief Signal (emitted by the private implementation) indicating that the step's /// createUserInterface() method has completed. /// \sa createUserInterface() - void createUserInterfaceComplete()const; + void createUserInterfaceComplete(); /// \brief Signal (emitted by the private implementation) indicating that the step's /// 'showUserInterface() method should be called. /// \sa showUserInterface() - void invokeShowUserInterfaceCommand()const; + void invokeShowUserInterfaceCommand(); /// \brief Signal (emitted by the private implementation) indicating that the step's /// showUserInterface() method has completed. /// \sa showUserInterface() - void showUserInterfaceComplete()const; + void showUserInterfaceComplete(); private: diff --git a/Libs/Widgets/ctkWorkflowWidgetStep_p.h b/Libs/Widgets/ctkWorkflowWidgetStep_p.h index 1766e18c56..4b554e3f78 100644 --- a/Libs/Widgets/ctkWorkflowWidgetStep_p.h +++ b/Libs/Widgets/ctkWorkflowWidgetStep_p.h @@ -62,13 +62,13 @@ class ctkWorkflowWidgetStepPrivate : public ctkWorkflowStepPrivate bool created; - void invokeShowUserInterfaceCommandInternal()const; + void invokeShowUserInterfaceCommandInternal(); - void showUserInterfaceCompleteInternal()const; + void showUserInterfaceCompleteInternal(); - void invokeCreateUserInterfaceCommandInternal()const; + void invokeCreateUserInterfaceCommandInternal(); - void createUserInterfaceCompleteInternal()const; + void createUserInterfaceCompleteInternal(); protected Q_SLOTS: @@ -79,13 +79,13 @@ protected Q_SLOTS: Q_SIGNALS: - void invokeShowUserInterfaceCommand()const; + void invokeShowUserInterfaceCommand(); - void showUserInterfaceComplete()const; + void showUserInterfaceComplete(); - void invokeCreateUserInterfaceCommand()const; + void invokeCreateUserInterfaceCommand(); - void createUserInterfaceComplete()const; + void createUserInterfaceComplete(); };