Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkDataStorageInspectorProviderBase.tpp
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 <QmitkDataStorageInspectorProviderBase.h>
14 #include <mitkExceptionMacro.h>
15 
16 #include <usGetModuleContext.h>
17 #include <usModuleContext.h>
18 #include <usPrototypeServiceFactory.h>
19 
20 #include <QmitkStyleManager.h>
21 
22 #include <QFile>
23 
24 template<class TInspector>
25 class QmitkDataStorageInspectorProviderBase<TInspector>::Impl
26 {
27 public:
28  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)
29  {
30  };
31 
32  Impl(const Impl &other) = default;
33 
34  void SetRanking(int ranking)
35  {
36  m_Ranking = ranking;
37  };
38 
39  int GetRanking() const
40  {
41  return m_Ranking;
42  };
43 
44  us::ServiceRegistration<mitk::IDataStorageInspectorProvider> m_Reg;
45  int m_Ranking;
46  std::string m_ID;
47  std::string m_DisplayName;
48  std::string m_Desc;
49  QByteArray m_SVG;
50 };
51 
52 template<class TInspector>
53 QmitkDataStorageInspectorProviderBase<TInspector>::QmitkDataStorageInspectorProviderBase(const std::string& id) : QmitkDataStorageInspectorProviderBase(id, id)
54 {
55 }
56 
57 template<class TInspector>
58 QmitkDataStorageInspectorProviderBase<TInspector>::QmitkDataStorageInspectorProviderBase(const std::string& id, const std::string& displayName, const std::string& desc, const std::string& pathToIconSVG)
59 {
60  QByteArray svg;
61 
62  if (!pathToIconSVG.empty())
63  {
64  QFile iconFile(QString::fromStdString(pathToIconSVG));
65  if (iconFile.open(QIODevice::ReadOnly))
66  svg = iconFile.readAll();
67  }
68 
69  d.reset(new Impl(id, displayName, desc, svg));
70  RegisterService();
71 }
72 
73 template<class TInspector>
74 QmitkDataStorageInspectorProviderBase<TInspector>::~QmitkDataStorageInspectorProviderBase()
75 {
76  UnregisterService();
77 }
78 
79 template<class TInspector>
80 QmitkDataStorageInspectorProviderBase<TInspector>::QmitkDataStorageInspectorProviderBase(const QmitkDataStorageInspectorProviderBase &other) : IDataStorageInspectorProvider(), d(new Impl(*other.d.get()))
81 {
82 }
83 
84 template<class TInspector>
85 QmitkAbstractDataStorageInspector*
86  QmitkDataStorageInspectorProviderBase<TInspector>::CreateInspector() const
87 {
88  return new TInspector;
89 }
90 
91 template<class TInspector>
92 typename QmitkDataStorageInspectorProviderBase<TInspector>::InspectorIDType
93  QmitkDataStorageInspectorProviderBase<TInspector>::GetInspectorID() const
94 {
95  return d->m_ID;
96 }
97 
98 template<class TInspector>
99 std::string
100  QmitkDataStorageInspectorProviderBase<TInspector>::GetInspectorDisplayName() const
101 {
102  return d->m_DisplayName;
103 }
104 
105 template<class TInspector>
106 std::string
107  QmitkDataStorageInspectorProviderBase<TInspector>::GetInspectorDescription() const
108 {
109  return d->m_Desc;
110 }
111 
112 template<class TInspector>
113 QIcon
114  QmitkDataStorageInspectorProviderBase<TInspector>::GetInspectorIcon() const
115 {
116  return QmitkStyleManager::ThemeIcon(d->m_SVG);
117 }
118 
119 template<class TInspector>
120 us::ServiceRegistration<mitk::IDataStorageInspectorProvider>
121  QmitkDataStorageInspectorProviderBase<TInspector>::RegisterService(us::ModuleContext *context)
122 {
123  if (d->m_Reg)
124  return d->m_Reg;
125 
126  if (context == nullptr)
127  {
128  context = us::GetModuleContext();
129  }
130 
131  us::ServiceProperties props = this->GetServiceProperties();
132  d->m_Reg = context->RegisterService<IDataStorageInspectorProvider>(this, props);
133  return d->m_Reg;
134 }
135 
136 template<class TInspector>
137 void
138  QmitkDataStorageInspectorProviderBase<TInspector>::UnregisterService()
139 {
140  try
141  {
142  d->m_Reg.Unregister();
143  }
144  catch (const std::exception &)
145  {
146  }
147 }
148 
149 template<class TInspector>
150 us::ServiceProperties
151 QmitkDataStorageInspectorProviderBase<TInspector>::GetServiceProperties() const
152 {
153  us::ServiceProperties result;
154 
155  result[IDataStorageInspectorProvider::PROP_INSPECTOR_ID()] = this->d->m_ID;
156  result[us::ServiceConstants::SERVICE_RANKING()] = this->GetRanking();
157  return result;
158 }
159 
160 template<class TInspector>
161 void
162 QmitkDataStorageInspectorProviderBase<TInspector>::SetRanking(int ranking) { d->SetRanking(ranking); }
163 
164 template<class TInspector>
165 int
166 QmitkDataStorageInspectorProviderBase<TInspector>::GetRanking() const { return d->GetRanking(); }