Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkMouseModeSwitcher.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include "QmitkMouseModeSwitcher.h"
14 #include <QActionGroup>
15 
16 QmitkMouseModeSwitcher::QmitkMouseModeSwitcher(QWidget* parent/* = nullptr*/)
17  : QToolBar(parent)
18  , m_ActionGroup(new QActionGroup(this))
19  , m_MouseModeSwitcher(nullptr)
20  , m_ObserverTag(0)
21  , m_ActionButtonBlocked(false)
22 {
23  QToolBar::setOrientation(Qt::Vertical);
24  QToolBar::setIconSize(QSize(17, 17));
25  m_ActionGroup->setExclusive(true); // only one selectable action
26 
27  addButton(mitk::MouseModeSwitcher::MousePointer, tr("Pointer"), QIcon(":/Qmitk/mm_pointer.png"), true); // toggle ON
28  addButton(mitk::MouseModeSwitcher::Scroll, tr("Scroll"), QIcon(":/Qmitk/mm_scroll.png"));
29  addButton(mitk::MouseModeSwitcher::LevelWindow, tr("Level/Window"), QIcon(":/Qmitk/mm_contrast.png"));
30  addButton(mitk::MouseModeSwitcher::Zoom, tr("Zoom"), QIcon(":/Qmitk/mm_zoom.png"));
31  addButton(mitk::MouseModeSwitcher::Pan, tr("Pan"), QIcon(":/Qmitk/mm_pan.png"));
32 }
33 
34 void QmitkMouseModeSwitcher::addButton(MouseMode id, const QString &toolName, const QIcon &icon, bool on)
35 {
36  QAction* action = new QAction(icon, toolName, this);
37  action->setCheckable(true);
38  action->setActionGroup(m_ActionGroup);
39  action->setChecked(on);
40  action->setData(id);
41  connect(action, SIGNAL(triggered()), this, SLOT(OnMouseModeChangedViaButton()));
42  QToolBar::addAction(action);
43 }
44 
46 {
47  if (nullptr != m_MouseModeSwitcher)
48  {
49  m_MouseModeSwitcher->RemoveObserver(m_ObserverTag);
50  }
51 }
52 
54 {
55  // goodbye / welcome ceremonies
56  if (nullptr != m_MouseModeSwitcher)
57  {
58  m_MouseModeSwitcher->RemoveObserver(m_ObserverTag);
59  }
60 
61  m_MouseModeSwitcher = mms;
62 
64  {
65  itk::ReceptorMemberCommand<QmitkMouseModeSwitcher>::Pointer command = itk::ReceptorMemberCommand<QmitkMouseModeSwitcher>::New();
66  command->SetCallbackFunction(this, &QmitkMouseModeSwitcher::OnMouseModeChangedViaCommand);
67  m_ObserverTag = m_MouseModeSwitcher->AddObserver(mitk::MouseModeSwitcher::MouseModeChangedEvent(), command);
68  }
69 }
70 
72 {
74  {
75  return; // blocked, since we change the checked state of the buttons in the callback function
76  }
77 
78  QAction* action = dynamic_cast<QAction*>(sender());
79  if (action)
80  {
81  MouseMode id = static_cast<MouseMode>(action->data().toInt());
82  // qDebug() << "Mouse mode '" << qPrintable(action->text()) << "' selected, trigger mode id " << id;
83 
85  {
86  m_MouseModeSwitcher->SetInteractionScheme(mitk::MouseModeSwitcher::InteractionScheme::PACS);
88  }
89  emit MouseModeSelected(id);
90  }
91 }
92 
94 {
95  m_ActionButtonBlocked = true;
96 
97  assert(m_MouseModeSwitcher);
99  foreach(QAction* action, m_ActionGroup->actions())
100  {
101  if (action->data().toInt() == activeMode)
102  {
103  action->setChecked(true);
104  }
105  }
106 
107  m_ActionButtonBlocked = false;
108 }
void SetInteractionScheme(InteractionScheme)
Setter for interaction scheme.
void OnMouseModeChangedViaCommand(const itk::EventObject &)
void setMouseModeSwitcher(mitk::MouseModeSwitcher *)
Connect to non-GUI class.
void MouseModeSelected(MouseMode id)
Mode activated.
mitk::MouseModeSwitcher * m_MouseModeSwitcher
void addButton(MouseMode id, const QString &toolName, const QIcon &icon, bool on=false)
MouseMode GetCurrentMouseMode() const
Returns the current mouse mode.
QmitkMouseModeSwitcher(QWidget *parent=nullptr)
void SelectMouseMode(MouseMode mode)
Setter for mouse mode.