diff --git a/Modules/QtWidgets/files.cmake b/Modules/QtWidgets/files.cmake index 4822eb025f..03680bb4b4 100644 --- a/Modules/QtWidgets/files.cmake +++ b/Modules/QtWidgets/files.cmake @@ -1,107 +1,109 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES QmitkAbstractDataStorageModel.cpp QmitkApplicationCursor.cpp QmitkDataStorageComboBox.cpp QmitkDataStorageDefaultListModel.cpp QmitkDataStorageListModel.cpp QmitkDataStorageTableModel.cpp QmitkDataStorageSimpleTreeModel.cpp QmitkDataStorageTreeModel.cpp QmitkDataStorageTreeModelInternalItem.cpp QmitkFileReaderOptionsDialog.cpp QmitkFileReaderWriterOptionsWidget.cpp QmitkFileWriterOptionsDialog.cpp QmitkIOUtil.cpp QmitkLevelWindowPresetDefinitionDialog.cpp QmitkLevelWindowRangeChangeDialog.cpp QmitkLevelWindowWidgetContextMenu.cpp QmitkLevelWindowWidget.cpp QmitkLineEditLevelWindowWidget.cpp QmitkMemoryUsageIndicatorView.cpp QmitkMimeTypes.cpp QmitkNodeDescriptor.cpp QmitkColoredNodeDescriptor.cpp QmitkNodeDescriptorManager.cpp QmitkRenderWindowMenu.cpp QmitkProgressBar.cpp QmitkPropertiesTableEditor.cpp QmitkPropertiesTableModel.cpp QmitkPropertyDelegate.cpp QmitkRegisterClasses.cpp QmitkRenderingManager.cpp QmitkRenderingManagerFactory.cpp QmitkRenderWindow.cpp QmitkServiceListWidget.cpp QmitkSliderLevelWindowWidget.cpp QmitkStdMultiWidget.cpp QmitkMouseModeSwitcher.cpp QmitkDataStorageFilterProxyModel.cpp QmitkDataStorageComboBoxWithSelectNone.cpp QmitkPropertyItem.cpp QmitkPropertyItemDelegate.cpp QmitkPropertyItemModel.cpp QmitkStyleManager.cpp QmitkAbstractDataStorageInspector.cpp QmitkDataStorageListInspector.cpp QmitkDataStorageTreeInspector.cpp QmitkModelViewSelectionConnector.cpp mitkIDataStorageInspectorProvider.cpp mitkQtWidgetsActivator.cpp mitkDataStorageInspectorGenerator.cpp + QmitkOverlayWidget.cpp ) set(MOC_H_FILES include/QmitkAbstractDataStorageModel.h include/QmitkDataStorageComboBox.h include/QmitkDataStorageTableModel.h include/QmitkDataStorageTreeModel.h include/QmitkDataStorageSimpleTreeModel.h include/QmitkDataStorageDefaultListModel.h include/QmitkFileReaderOptionsDialog.h include/QmitkFileReaderWriterOptionsWidget.h include/QmitkFileWriterOptionsDialog.h include/QmitkLevelWindowPresetDefinitionDialog.h include/QmitkLevelWindowRangeChangeDialog.h include/QmitkLevelWindowWidgetContextMenu.h include/QmitkLevelWindowWidget.h include/QmitkLineEditLevelWindowWidget.h include/QmitkMemoryUsageIndicatorView.h include/QmitkNodeDescriptor.h include/QmitkColoredNodeDescriptor.h include/QmitkNodeDescriptorManager.h include/QmitkRenderWindowMenu.h include/QmitkProgressBar.h include/QmitkPropertiesTableEditor.h include/QmitkPropertyDelegate.h include/QmitkRenderingManager.h include/QmitkRenderWindow.h include/QmitkServiceListWidget.h include/QmitkSliderLevelWindowWidget.h include/QmitkStdMultiWidget.h include/QmitkMouseModeSwitcher.h include/QmitkDataStorageComboBoxWithSelectNone.h include/QmitkPropertyItemDelegate.h include/QmitkPropertyItemModel.h include/QmitkDataStorageListInspector.h include/QmitkAbstractDataStorageInspector.h include/QmitkDataStorageTreeInspector.h include/QmitkModelViewSelectionConnector.h + include/QmitkOverlayWidget.h ) set(UI_FILES src/QmitkFileReaderOptionsDialog.ui src/QmitkFileWriterOptionsDialog.ui src/QmitkLevelWindowPresetDefinition.ui src/QmitkLevelWindowWidget.ui src/QmitkLevelWindowRangeChange.ui src/QmitkMemoryUsageIndicator.ui src/QmitkServiceListWidgetControls.ui src/QmitkDataStorageListInspector.ui src/QmitkDataStorageTreeInspector.ui ) set(QRC_FILES resource/Qmitk.qrc ) diff --git a/Modules/QtWidgets/include/QmitkOverlayWidget.h b/Modules/QtWidgets/include/QmitkOverlayWidget.h new file mode 100644 index 0000000000..580eb64c76 --- /dev/null +++ b/Modules/QtWidgets/include/QmitkOverlayWidget.h @@ -0,0 +1,49 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef QMITK_OVERLAY_WIDGET_H +#define QMITK_OVERLAY_WIDGET_H + +#include + +#include + +/** Simple widget that can be used to achive overlays. The overlay will lie above its parent. + * This implementation just renders a semi transparent black background. To add content to the + * overlay derive from this class.*/ +class MITKQTWIDGETS_EXPORT QmitkOverlayWidget : public QWidget +{ + Q_OBJECT + Q_PROPERTY(bool transparentForMouseEvents READ isTransparentForMouseEvents WRITE setTransparentForMouseEvents) + +public: + explicit QmitkOverlayWidget(QWidget* parent = nullptr); + virtual ~QmitkOverlayWidget(); + + bool isTransparentForMouseEvents() const; + void setTransparentForMouseEvents(bool transparent = true); + +protected: + virtual bool event(QEvent* e) override; + virtual bool eventFilter(QObject* watched, QEvent* event) override; + virtual void paintEvent(QPaintEvent* event) override; + +private: + void installEventFilterOnParent(); + void removeEventFilterFromParent(); +}; + +#endif diff --git a/Modules/QtWidgets/src/QmitkOverlayWidget.cpp b/Modules/QtWidgets/src/QmitkOverlayWidget.cpp new file mode 100644 index 0000000000..0cf86b3ede --- /dev/null +++ b/Modules/QtWidgets/src/QmitkOverlayWidget.cpp @@ -0,0 +1,96 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "QmitkOverlayWidget.h" +#include +#include + +QmitkOverlayWidget::QmitkOverlayWidget(QWidget* parent) + : QWidget(parent) +{ + this->installEventFilterOnParent(); + this->setTransparentForMouseEvents(); + this->setAttribute(Qt::WA_TranslucentBackground); +} + +QmitkOverlayWidget::~QmitkOverlayWidget() +{ + this->removeEventFilterFromParent(); +} + +bool QmitkOverlayWidget::isTransparentForMouseEvents() const +{ + return this->testAttribute(Qt::WA_TransparentForMouseEvents); +} + +void QmitkOverlayWidget::setTransparentForMouseEvents(bool transparent) +{ + this->setAttribute(Qt::WA_TransparentForMouseEvents, transparent); +} + +bool QmitkOverlayWidget::event(QEvent* e) +{ + if (e->type() == QEvent::ParentAboutToChange) + { + this->removeEventFilterFromParent(); + } + else if (e->type() == QEvent::ParentChange) + { + this->installEventFilterOnParent(); + } + + return QWidget::event(e); +} + +bool QmitkOverlayWidget::eventFilter(QObject* watched, QEvent* event) +{ + if (watched == this->parent()) + { + if (event->type() == QEvent::Resize) + { + this->resize(static_cast(event)->size()); + } + else if (event->type() == QEvent::ChildAdded) + { + this->raise(); + } + } + + return QWidget::eventFilter(watched, event); +} + +void QmitkOverlayWidget::paintEvent(QPaintEvent*) +{ + QPainter painter(this); + painter.fillRect(this->rect(), QColor(0, 0, 0, 63)); +} + +void QmitkOverlayWidget::installEventFilterOnParent() +{ + if (this->parent() == nullptr) + return; + + this->parent()->installEventFilter(this); + this->raise(); +} + +void QmitkOverlayWidget::removeEventFilterFromParent() +{ + if (this->parent() == nullptr) + return; + + this->parent()->removeEventFilter(this); +} diff --git a/Plugins/org.mitk.gui.qt.common/files.cmake b/Plugins/org.mitk.gui.qt.common/files.cmake index 52168d6a93..c3b68caa5d 100755 --- a/Plugins/org.mitk.gui.qt.common/files.cmake +++ b/Plugins/org.mitk.gui.qt.common/files.cmake @@ -1,67 +1,69 @@ set(SRC_CPP_FILES QmitkAbstractRenderEditor.cpp QmitkAbstractView.cpp QmitkDataNodeSelectionProvider.cpp QmitkDnDFrameWidget.cpp QmitkSelectionServiceConnector.cpp QmitkSliceNavigationListener.cpp QmitkSingleNodeSelectionWidget.cpp QmitkNodeSelectionDialog.cpp QmitkAbstractNodeSelectionWidget.cpp QmitkMultiNodeSelectionWidget.cpp QmitkNodeSelectionPreferenceHelper.cpp QmitkNodeSelectionButton.cpp + QmitkSimpleTextOverlayWidget.cpp ) set(INTERNAL_CPP_FILES QmitkCommonActivator.cpp QmitkDataNodeItemModel.cpp QmitkDataNodeSelection.cpp QmitkViewCoordinator.cpp QmitkNodeSelectionConstants.cpp QmitkNodeSelectionPreferencePage.cpp QmitkNodeSelectionListItemWidget.cpp ) set(UI_FILES src/QmitkSingleNodeSelectionWidget.ui src/QmitkMultiNodeSelectionWidget.ui src/QmitkNodeSelectionDialog.ui src/internal/QmitkNodeSelectionPreferencePage.ui src/internal/QmitkNodeSelectionListItemWidget.ui ) set(MOC_H_FILES src/QmitkAbstractRenderEditor.h src/QmitkDnDFrameWidget.h src/QmitkSelectionServiceConnector.h src/QmitkSliceNavigationListener.h src/ImporterUtil.h src/QmitkSingleNodeSelectionWidget.h src/QmitkNodeSelectionDialog.h src/QmitkAbstractNodeSelectionWidget.h src/QmitkMultiNodeSelectionWidget.h src/QmitkNodeSelectionButton.h + src/QmitkSimpleTextOverlayWidget.h src/internal/QmitkCommonActivator.h src/internal/QmitkNodeSelectionPreferencePage.h src/internal/QmitkNodeSelectionListItemWidget.h ) set(CACHED_RESOURCE_FILES plugin.xml resources/times.svg ) set(QRC_FILES resources/common.qrc ) set(CPP_FILES ) foreach(file ${SRC_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.cpp b/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.cpp new file mode 100644 index 0000000000..56c5827779 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.cpp @@ -0,0 +1,76 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "QmitkSimpleTextOverlayWidget.h" + +#include +#include + +#include "QTextDocument" +#include "QPainter" + +QmitkSimpleTextOverlayWidget::QmitkSimpleTextOverlayWidget(QWidget* parent) + : QmitkOverlayWidget(parent) +{ +} + +QmitkSimpleTextOverlayWidget::~QmitkSimpleTextOverlayWidget() +{ +} + +QString QmitkSimpleTextOverlayWidget::GetOverlayText() const +{ + return m_Text; +} + +void QmitkSimpleTextOverlayWidget::SetOverlayText(const QString& text) +{ + m_Text = text; + this->update(); +} + +void QmitkSimpleTextOverlayWidget::paintEvent(QPaintEvent* p) +{ + QmitkOverlayWidget::paintEvent(p); + + QString stylesheet; + + ctkPluginContext* context = berry::WorkbenchPlugin::GetDefault()->GetPluginContext(); + ctkServiceReference styleManagerRef = context->getServiceReference(); + if (styleManagerRef) + { + auto styleManager = context->getService(styleManagerRef); + stylesheet = styleManager->GetStylesheet(); + } + + QPainter painter(this); + QTextDocument td(this); + td.setDefaultStyleSheet(stylesheet); + + auto widgetSize = this->size(); + td.setTextWidth(widgetSize.width()-20.); + QPoint origin = QPoint(10, 5); + + td.setHtml(m_Text); + + auto textSize = td.size(); + + origin.setX((widgetSize.width() - textSize.width()) / 2.); + origin.setY((widgetSize.height() - textSize.height()) / 2.); + + painter.translate(origin); + td.drawContents(&painter); +} diff --git a/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.h b/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.h new file mode 100644 index 0000000000..93154622a3 --- /dev/null +++ b/Plugins/org.mitk.gui.qt.common/src/QmitkSimpleTextOverlayWidget.h @@ -0,0 +1,45 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef QMITK_SIMPLE_TEXT_OVERLAY_WIDGET_H +#define QMITK_SIMPLE_TEXT_OVERLAY_WIDGET_H + +#include "QmitkOverlayWidget.h" +#include "org_mitk_gui_qt_common_Export.h" + +/** Simple overlay that renders a passed string. + You may pass an html string that will be rendered accordingly + respecting the current application style sheet.*/ +class MITK_QT_COMMON QmitkSimpleTextOverlayWidget : public QmitkOverlayWidget +{ + Q_OBJECT + Q_PROPERTY(QString overlayText READ GetOverlayText WRITE SetOverlayText) + +public: + explicit QmitkSimpleTextOverlayWidget(QWidget* parent = nullptr); + virtual ~QmitkSimpleTextOverlayWidget(); + + QString GetOverlayText() const; + void SetOverlayText(const QString& text); + +protected: + virtual void paintEvent(QPaintEvent* event) override; + +private: + QString m_Text; +}; + +#endif