diff --git a/Modules/QtWidgets/include/QmitkDataStorageFavoriteNodesInspector.h b/Modules/QtWidgets/include/QmitkDataStorageFavoriteNodesInspector.h index 45312b974e..1a7ed15fe0 100644 --- a/Modules/QtWidgets/include/QmitkDataStorageFavoriteNodesInspector.h +++ b/Modules/QtWidgets/include/QmitkDataStorageFavoriteNodesInspector.h @@ -1,53 +1,58 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef QMITKDATASTORAGEFAVORITENODESINSPECTOR_H #define QMITKDATASTORAGEFAVORITENODESINSPECTOR_H #include #include #include "mitkNodePredicateProperty.h" /* * @brief This is an inspector that offers a simple list view on favorite nodes of a data storage. */ class MITKQTWIDGETS_EXPORT QmitkDataStorageFavoriteNodesInspector : public QmitkDataStorageListInspector { Q_OBJECT public: QmitkDataStorageFavoriteNodesInspector(QWidget* parent = nullptr); /** * @brief Overrides the corresponding function of QmitkAbstractDataStorageInspector: * The custom favorite nodes predicate is added to the parameter predicate * which results in a combined node predicate that always filters nodes according * to their favorite-property-state. * * @param nodePredicate A pointer to a node predicate. */ void SetNodePredicate(const mitk::NodePredicateBase* nodePredicate) override; + constexpr static const char* INSPECTOR_ID() + { + return "org.mitk.QmitkDataStorageFavoriteNodesInspector"; + }; + protected Q_SLOTS: void OnFavoriteNodesButtonClicked(); private: mitk::NodePredicateProperty::Pointer m_FavoriteNodeSelectionPredicate; }; #endif // QMITKDATASTORAGEFAVORITENODESINSPECTOR_H diff --git a/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.h b/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.h index 44c32549e4..980de6c4ac 100644 --- a/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.h +++ b/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.h @@ -1,78 +1,81 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef __QMITK_DATA_STORAGE_INSPECTOR_PROVIDER_BASE_H #define __QMITK_DATA_STORAGE_INSPECTOR_PROVIDER_BASE_H #include // Microservices #include #include #include // MITK #include /** * @brief Base class for DataStorage inspector provider. * * This class is the default implementation for a inspector provider. You can template it with * the respective inspector class to directly use it. */ template class QmitkDataStorageInspectorProviderBase : public mitk::IDataStorageInspectorProvider { public: QmitkAbstractDataStorageInspector* CreateInspector() const override; - std::string GetInspectorID() const override; + using InspectorIDType = mitk::IDataStorageInspectorProvider::InspectorIDType; + + InspectorIDType GetInspectorID() const override; std::string GetInspectorDisplayName() const override; std::string GetInspectorDescription() const override; + QByteArray GetInspectorIconSVG() const override; us::ServiceRegistration RegisterService( us::ModuleContext *context = us::GetModuleContext()); void UnregisterService(); QmitkDataStorageInspectorProviderBase(const std::string& id); - QmitkDataStorageInspectorProviderBase(const std::string& id, const std::string& displayName, const std::string& desc= "" ); + QmitkDataStorageInspectorProviderBase(const std::string& id, const std::string& displayName, const std::string& desc = "", const std::string& pathToIconSVG = ""); ~QmitkDataStorageInspectorProviderBase() override; protected: QmitkDataStorageInspectorProviderBase(const QmitkDataStorageInspectorProviderBase &other); QmitkDataStorageInspectorProviderBase &operator=(const QmitkDataStorageInspectorProviderBase &other) = delete; virtual us::ServiceProperties GetServiceProperties() const; /** * \brief Set the service ranking for this file reader. * * Default is zero and should only be chosen differently for a reason. * The ranking is used to determine which provider to use if several * equivalent providers have been found. * It may be used to replace a default provider from MITK in your own project. */ void SetRanking(int ranking); int GetRanking() const; private: class Impl; std::unique_ptr d; }; #ifndef ITK_MANUAL_INSTANTIATION #include "QmitkDataStorageInspectorProviderBase.tpp" #endif #endif /* __QMITK_DATA_STORAGE_INSPECTOR_PROVIDER_BASE_H */ diff --git a/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.tpp b/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.tpp index ed49cd2311..fdc81849c5 100644 --- a/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.tpp +++ b/Modules/QtWidgets/include/QmitkDataStorageInspectorProviderBase.tpp @@ -1,145 +1,164 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include #include #include #include #include +#include + template class QmitkDataStorageInspectorProviderBase::Impl { public: - Impl(const std::string& id, const std::string& displayName, const std::string& desc) : m_Ranking(0), m_ID(id), m_DisplayName(displayName), m_Desc(desc) + Impl(const std::string& id, const std::string& displayName, const std::string& desc, const QByteArray& svg) : m_Ranking(0), m_ID(id), m_DisplayName(displayName), m_Desc(desc), m_SVG(svg) { }; Impl(const Impl &other) = default; void SetRanking(int ranking) { m_Ranking = ranking; }; int GetRanking() const { return m_Ranking; }; us::ServiceRegistration m_Reg; int m_Ranking; std::string m_ID; std::string m_DisplayName; std::string m_Desc; + QByteArray m_SVG; }; template QmitkDataStorageInspectorProviderBase::QmitkDataStorageInspectorProviderBase(const std::string& id) : QmitkDataStorageInspectorProviderBase(id, id) { } template - QmitkDataStorageInspectorProviderBase::QmitkDataStorageInspectorProviderBase(const std::string& id, const std::string& displayName, const std::string& desc) + QmitkDataStorageInspectorProviderBase::QmitkDataStorageInspectorProviderBase(const std::string& id, const std::string& displayName, const std::string& desc, const std::string& pathToIconSVG) { - d.reset(new Impl(id, displayName, desc)); + QByteArray svg; + + if (!pathToIconSVG.empty()) + { + QFile iconFile(QString::fromStdString(pathToIconSVG)); + if (iconFile.open(QIODevice::ReadOnly)) + svg = iconFile.readAll(); + } + + d.reset(new Impl(id, displayName, desc, svg)); RegisterService(); } template QmitkDataStorageInspectorProviderBase::~QmitkDataStorageInspectorProviderBase() { UnregisterService(); } template QmitkDataStorageInspectorProviderBase::QmitkDataStorageInspectorProviderBase(const QmitkDataStorageInspectorProviderBase &other) : IDataStorageInspectorProvider(), d(new Impl(*other.d.get())) { } template QmitkAbstractDataStorageInspector* QmitkDataStorageInspectorProviderBase::CreateInspector() const { return new TInspector; }; template - std::string + typename QmitkDataStorageInspectorProviderBase::InspectorIDType QmitkDataStorageInspectorProviderBase::GetInspectorID() const { return d->m_ID; }; template std::string QmitkDataStorageInspectorProviderBase::GetInspectorDisplayName() const { return d->m_DisplayName; }; template std::string QmitkDataStorageInspectorProviderBase::GetInspectorDescription() const { return d->m_Desc; }; + template + QByteArray + QmitkDataStorageInspectorProviderBase::GetInspectorIconSVG() const + { + return d->m_SVG; + }; + template us::ServiceRegistration QmitkDataStorageInspectorProviderBase::RegisterService(us::ModuleContext *context) { if (d->m_Reg) return d->m_Reg; if (context == nullptr) { context = us::GetModuleContext(); } us::ServiceProperties props = this->GetServiceProperties(); d->m_Reg = context->RegisterService(this, props); return d->m_Reg; } template void QmitkDataStorageInspectorProviderBase::UnregisterService() { try { d->m_Reg.Unregister(); } catch (const std::exception &) { } } template us::ServiceProperties QmitkDataStorageInspectorProviderBase::GetServiceProperties() const { us::ServiceProperties result; result[IDataStorageInspectorProvider::PROP_INSPECTOR_ID()] = this->d->m_ID; result[us::ServiceConstants::SERVICE_RANKING()] = this->GetRanking(); return result; } template void QmitkDataStorageInspectorProviderBase::SetRanking(int ranking) { d->SetRanking(ranking); } template int QmitkDataStorageInspectorProviderBase::GetRanking() const { return d->GetRanking(); } diff --git a/Modules/QtWidgets/include/QmitkDataStorageSelectionHistoryInspector.h b/Modules/QtWidgets/include/QmitkDataStorageSelectionHistoryInspector.h index 80ba29e334..362c30774c 100644 --- a/Modules/QtWidgets/include/QmitkDataStorageSelectionHistoryInspector.h +++ b/Modules/QtWidgets/include/QmitkDataStorageSelectionHistoryInspector.h @@ -1,49 +1,54 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef QMITKDATASTORAGESELECTIONHISTORYINSPECTOR_H #define QMITKDATASTORAGESELECTIONHISTORYINSPECTOR_H #include #include #include #include "ui_QmitkDataStorageSelectionHistoryInspector.h" /* * @brief This is an inspector that offers a simple list view on the last selected nodes (in chronologic order) in a data storage. */ class MITKQTWIDGETS_EXPORT QmitkDataStorageSelectionHistoryInspector : public QmitkAbstractDataStorageInspector { Q_OBJECT public: QmitkDataStorageSelectionHistoryInspector(QWidget* parent = nullptr); QAbstractItemView* GetView() override; const QAbstractItemView* GetView() const override; void SetSelectionMode(SelectionMode mode) override; SelectionMode GetSelectionMode() const override; static void AddNodeToHistory(mitk::DataNode* node); static void ResetHistory(); + constexpr static const char* INSPECTOR_ID() + { + return "org.mitk.QmitkDataStorageSelectionHistoryInspector"; + }; + protected: void Initialize() override; QmitkAbstractDataStorageModel* m_StorageModel; Ui_QmitkDataStorageSelectionHistoryInspector m_Controls; }; #endif // QMITKDATASTORAGESELECTIONHISTORYINSPECTOR_H diff --git a/Modules/QtWidgets/include/mitkDataStorageInspectorGenerator.h b/Modules/QtWidgets/include/mitkDataStorageInspectorGenerator.h index 4356c46e22..8567300ecb 100644 --- a/Modules/QtWidgets/include/mitkDataStorageInspectorGenerator.h +++ b/Modules/QtWidgets/include/mitkDataStorageInspectorGenerator.h @@ -1,41 +1,41 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef mitkDataStorageInspectorGenerator_H #define mitkDataStorageInspectorGenerator_H #include "mitkIDataStorageInspectorProvider.h" #include namespace mitk { /** Convinvience class to get all or specific DataStorageInspectorProvider. */ class MITKQTWIDGETS_EXPORT DataStorageInspectorGenerator { public: - using IDType = std::string; + using IDType = mitk::IDataStorageInspectorProvider::InspectorIDType; using ProviderMapType = std::map; static ProviderMapType GetProviders(); static mitk::IDataStorageInspectorProvider *GetProvider(const IDType &id); protected: DataStorageInspectorGenerator(); virtual ~DataStorageInspectorGenerator(); DataStorageInspectorGenerator(const DataStorageInspectorGenerator &source) = delete; DataStorageInspectorGenerator& operator=(const DataStorageInspectorGenerator &) = delete; }; } #endif diff --git a/Modules/QtWidgets/include/mitkIDataStorageInspectorProvider.h b/Modules/QtWidgets/include/mitkIDataStorageInspectorProvider.h index 9a0f1ab9ae..8e28b774ec 100644 --- a/Modules/QtWidgets/include/mitkIDataStorageInspectorProvider.h +++ b/Modules/QtWidgets/include/mitkIDataStorageInspectorProvider.h @@ -1,67 +1,73 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef __I_DATA_STORAGE_INSPECTOR_PROVIDER_H #define __I_DATA_STORAGE_INSPECTOR_PROVIDER_H #include #include +#include + class QmitkAbstractDataStorageInspector; namespace mitk { /** * \ingroup MicroServices_Interfaces * * \brief The common interface for all DataStorage inspector providers. * * Implementations of this interface must be registered as a service * to make themselves available via the service registry. * * It is recommended to derive new implementations from QmitkDataStorageInspectorProviderBase * which provide correct service registration semantics. * * \sa QmitkDataStorageInspectorProviderBase */ struct MITKQTWIDGETS_EXPORT IDataStorageInspectorProvider { virtual ~IDataStorageInspectorProvider(); /** * \brief returns an inspector instance represented by the provider. */ virtual QmitkAbstractDataStorageInspector* CreateInspector() const = 0; + using InspectorIDType = std::string; /** Return the uniqe ID for the inspector type provided.*/ - virtual std::string GetInspectorID() const = 0; + virtual InspectorIDType GetInspectorID() const = 0; /** Return the display name (e.g. used in the UI) for the inspector type provided.*/ virtual std::string GetInspectorDisplayName() const = 0; /** Returns a description of the inspector type provided.*/ virtual std::string GetInspectorDescription() const = 0; + /** Returns the svg data of the icon of the inspector. Empty array indicates that no icon is defined. + @remark It is passed as svg file content and not as icon directly to allow later styling*/ + virtual QByteArray GetInspectorIconSVG() const = 0; /** * @brief Service property name for the inspector ID. * * The property value must be of type \c std::string. * * @return The property name. */ static std::string PROP_INSPECTOR_ID(); }; } // namespace mitk MITK_DECLARE_SERVICE_INTERFACE(mitk::IDataStorageInspectorProvider, "org.mitk.IDataStorageInspectorProvider") #endif /* __I_DATA_STORAGE_INSPECTOR_PROVIDER_H */ diff --git a/Modules/QtWidgets/resource/Qmitk.qrc b/Modules/QtWidgets/resource/Qmitk.qrc index e650d857e8..05f38518c4 100644 --- a/Modules/QtWidgets/resource/Qmitk.qrc +++ b/Modules/QtWidgets/resource/Qmitk.qrc @@ -1,20 +1,24 @@ Binaerbilder_48.png Images_48.png PointSet_48.png Segmentation_48.png Surface_48.png mm_pointer.png mm_scroll.png mm_zoom.png mm_contrast.png mm_pan.png LabelSetImage_48.png mwLayout.png mwSynchronized.png mwDesynchronized.png mwMITK.png mwPACS.png + star-solid.svg + history-solid.svg + tree_inspector.svg + list-solid.svg diff --git a/Modules/QtWidgets/resource/history-solid.svg b/Modules/QtWidgets/resource/history-solid.svg new file mode 100644 index 0000000000..625e17a3ef --- /dev/null +++ b/Modules/QtWidgets/resource/history-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Modules/QtWidgets/resource/icon-license.txt b/Modules/QtWidgets/resource/icon-license.txt new file mode 100644 index 0000000000..4449413332 --- /dev/null +++ b/Modules/QtWidgets/resource/icon-license.txt @@ -0,0 +1,4 @@ +See [Font Awsome 4] in Licenses/ICONS.md for: +- history-solid.svg based on Font Awsome's history-solid.svg +- list-solid.svg based on Font Awsome's list-solid.svg +- star-solid.svg based on Font Awsome's star-solid.svg diff --git a/Modules/QtWidgets/resource/list-solid.svg b/Modules/QtWidgets/resource/list-solid.svg new file mode 100644 index 0000000000..f66f89c243 --- /dev/null +++ b/Modules/QtWidgets/resource/list-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Modules/QtWidgets/resource/star-solid.svg b/Modules/QtWidgets/resource/star-solid.svg new file mode 100644 index 0000000000..9ca5eb51ae --- /dev/null +++ b/Modules/QtWidgets/resource/star-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Modules/QtWidgets/resource/tree_inspector.svg b/Modules/QtWidgets/resource/tree_inspector.svg new file mode 100644 index 0000000000..82a332cdab --- /dev/null +++ b/Modules/QtWidgets/resource/tree_inspector.svg @@ -0,0 +1,55 @@ + + + + + + + image/svg+xml + + + + + + + diff --git a/Modules/QtWidgets/src/mitkQtWidgetsActivator.cpp b/Modules/QtWidgets/src/mitkQtWidgetsActivator.cpp index deaf7af8b7..5496077667 100644 --- a/Modules/QtWidgets/src/mitkQtWidgetsActivator.cpp +++ b/Modules/QtWidgets/src/mitkQtWidgetsActivator.cpp @@ -1,38 +1,39 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "mitkQtWidgetsActivator.h" // Micro Services #include #include // Qmitk #include "QmitkDataStorageInspectorProviderBase.h" #include "QmitkDataStorageListInspector.h" #include "QmitkDataStorageTreeInspector.h" #include "QmitkDataStorageSelectionHistoryInspector.h" #include "QmitkDataStorageFavoriteNodesInspector.h" void MitkQtWidgetsActivator::Load(us::ModuleContext * /*context*/) { - m_TreeInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageListInspector", "Simple list", "Displays the filtered content of the data storage in a simple list.")); - m_ListInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageTreeInspector", "Rendering tree", "Displays the filtered content of the data storage as the current rendering tree. \n(Equals the old data manager view)")); - m_HistoryInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageSelectionHistoryInspector", "Selection history", "Displays the filtered history of all node selections in this application session. \nThe nodes are sorted from new to old selections.\nOnly nodes that are still in the data storage will be displayed.")); - m_FavoriteNodesInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageFavoriteNodesInspector", "Favorite nodes list", "Displays the favorite nodes of the data storage in a simple list.")); + Q_INIT_RESOURCE(Qmitk); + m_TreeInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageListInspector", "Simple list", "Displays the filtered content of the data storage in a simple list.", ":/Qmitk/list-solid.svg")); + m_ListInspector.reset(new QmitkDataStorageInspectorProviderBase("org.mitk.QmitkDataStorageTreeInspector", "Rendering tree", "Displays the filtered content of the data storage as the current rendering tree. \n(Equals the old data manager view)", ":/Qmitk/tree_inspector.svg")); + m_HistoryInspector.reset(new QmitkDataStorageInspectorProviderBase(QmitkDataStorageSelectionHistoryInspector::INSPECTOR_ID(), "Selection history", "Displays the filtered history of all node selections in this application session. \nThe nodes are sorted from new to old selections.\nOnly nodes that are still in the data storage will be displayed.", ":/Qmitk/history-solid.svg")); + m_FavoriteNodesInspector.reset(new QmitkDataStorageInspectorProviderBase(QmitkDataStorageFavoriteNodesInspector::INSPECTOR_ID(), "Favorite nodes list", "Displays the favorite nodes of the data storage in a simple list.",":/Qmitk/star-solid.svg")); } void MitkQtWidgetsActivator::Unload(us::ModuleContext *) { } US_EXPORT_MODULE_ACTIVATOR(MitkQtWidgetsActivator) diff --git a/Plugins/org.mitk.gui.qt.common/resources/icon-license.txt b/Plugins/org.mitk.gui.qt.common/resources/icon-license.txt new file mode 100644 index 0000000000..167ecb6def --- /dev/null +++ b/Plugins/org.mitk.gui.qt.common/resources/icon-license.txt @@ -0,0 +1,2 @@ +See [Font Awsome 4] in Licenses/ICONS.md for: +- times.svg \ No newline at end of file