CustusX  2023.01.05-dev+develop.0da12
An IGT application
cxFilterSetupWidget.cpp
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 
12 #include "cxFilterSetupWidget.h"
13 
14 #include <QGroupBox>
15 #include <QCheckBox>
16 #include "cxFilterPresetWidget.h"
18 #include "cxVisServices.h"
19 #include "cxLogger.h"
20 
21 namespace cx
22 {
23 FilterSetupWidget::FilterSetupWidget(VisServicesPtr services, QWidget* parent, XmlOptionFile options, bool addFrame) :
24  BaseWidget(parent, "FilterSetupWidget", "FilterSetup"),
25  mServices(services)
26 {
27  mFrame = NULL;
28 
29  QVBoxLayout* toptopLayout = new QVBoxLayout(this);
30  toptopLayout->setMargin(0);
31 
32  QWidget* topWidget = new QWidget;
33  QVBoxLayout* topLayout = new QVBoxLayout(topWidget);
34  topLayout->setMargin(0);
35 
36  if (addFrame)
37  {
38  mFrame = this->wrapInGroupBox(topWidget, "Algorithm");
39  toptopLayout->addWidget(mFrame);
40  }
41  else
42  {
43  toptopLayout->addWidget(topWidget);
44  }
45 
46  mObscuredListener.reset(new WidgetObscuredListener(this));
47  connect(mObscuredListener.get(), SIGNAL(obscured(bool)), this, SLOT(obscuredSlot(bool)));
48 
49  mOptions = options;//not used?
50 
51  mInputsWidget = new OptionsWidget(mServices->view(), mServices->patient(), this);
52  mOutputsWidget = new OptionsWidget(mServices->view(), mServices->patient(), this);
53  mOptionsWidget = new OptionsWidget(mServices->view(), mServices->patient(), this);
54  mPresetWidget = new FilterPresetWidget(this);
55  mAdvancedButton = new QCheckBox("Show advanced options", this);
56  connect(mAdvancedButton, SIGNAL(stateChanged(int)), this, SLOT(showAdvancedOptions(int)));
57 
58  topLayout->addWidget(this->wrapInGroupBox(mInputsWidget, "Input"));
59  topLayout->addWidget(this->wrapInGroupBox(mOutputsWidget, "Output"));
60  topLayout->addWidget(mPresetWidget);
61  mOptionsGroupBox = this->wrapInGroupBox(mOptionsWidget, "Options");
62  topLayout->addWidget(mOptionsGroupBox);
63  topLayout->addWidget(mAdvancedButton);
64 }
65 
66 void FilterSetupWidget::obscuredSlot(bool obscured)
67 {
68  if (mCurrentFilter)
69  mCurrentFilter->setActive(!obscured);
70 }
71 
72 void FilterSetupWidget::showAdvancedOptions(int state)
73 {
74  if(state > 0)
75  {
76  mInputsWidget->showAdvanced(true);
77  mOutputsWidget->showAdvanced(true);
78  mOptionsWidget->showAdvanced(true);
79  }else{
80  mInputsWidget->showAdvanced(false);
81  mOutputsWidget->showAdvanced(false);
82  mOptionsWidget->showAdvanced(false);
83  }
84 }
85 
86 void FilterSetupWidget::rebuildOptions()
87 {
88  if(mOptionsWidget)
89  mOptionsWidget->rebuild();
90 }
91 
93 {
94  QString name("None");
95  QString help("");
96  if (mCurrentFilter)
97  {
98  name = mCurrentFilter->getName();
99  help = mCurrentFilter->getHelp();
100  }
101  return QString("<html>"
102  "<h4>%1</h4>"
103  "<p>%2</p>"
104  "</html>").arg(name).arg(help);
105 }
106 
107 void FilterSetupWidget::setVisibilityOfOptionsAndAdvancedOptions()
108 {
109  mAdvancedButton->setVisible(mOptionsWidget->hasAdvancedOptions());
110  this->showAdvancedOptions(mAdvancedButton->isChecked());
111  mOptionsGroupBox->setVisible(mOptionsWidget->hasOptions());
112 }
113 
115 {
116  if (filter==mCurrentFilter)
117  return;
118 
119  if (mCurrentFilter)
120  mCurrentFilter->setActive(false);
121 
122  mCurrentFilter = filter;
123  connect(mCurrentFilter.get(), &Filter::changed, this, &FilterSetupWidget::rebuildOptions);
124 
125  if (mFrame)
126  mFrame->setTitle(mCurrentFilter->getName());
127 
128  if (mCurrentFilter)
129  {
130  mCurrentFilter->setActive(!mObscuredListener->isObscured());
131 
132  mInputsWidget->setOptions(mCurrentFilter->getUid(), mCurrentFilter->getInputTypes(), false);
133  mOutputsWidget->setOptions(mCurrentFilter->getUid(), mCurrentFilter->getOutputTypes(), false);
134  mOptionsWidget->setOptions(mCurrentFilter->getUid(), mCurrentFilter->getOptions(), false);
135 
136  //presets
137  if(mCurrentFilter->hasPresets())
138  {
139  connect(mPresetWidget, &PresetWidget::presetSelected, mCurrentFilter.get(), &Filter::requestSetPresetSlot);
140  //mPresetWidget->setPresets(mCurrentFilter->getPresets());
141  mPresetWidget->setFilter(mCurrentFilter);
142  mCurrentFilter->requestSetPresetSlot("default");
143  mPresetWidget->show();
144  } else
145  mPresetWidget->hide();
146 
147  this->setObjectName(mCurrentFilter->getType());
148 
149  this->setVisibilityOfOptionsAndAdvancedOptions();
150  }
151  else
152  {
153  mInputsWidget->setOptions("", std::vector<PropertyPtr>(), false);
154  mOutputsWidget->setOptions("", std::vector<PropertyPtr>(), false);
155  mOptionsWidget->setOptions("", std::vector<PropertyPtr>(), false);
156  }
157 
158  this->setToolTip(this->generateHelpText());
159 }
160 
162 {
163  if(mOptionsGroupBox->isHidden())
164  {
165  if(mOptionsWidget->hasOptions())
166  {
167  mOptionsGroupBox->show();
168  if(mOptionsWidget->hasAdvancedOptions())
169  mAdvancedButton->show();
170  }
171  mPresetWidget->showDetailed(true);
172  }
173  else
174  {
175  mOptionsGroupBox->hide();
176  mAdvancedButton->hide();
177  mPresetWidget->showDetailed(false);
178  }
179 }
180 
181 } // namespace cx
boost::shared_ptr< class VisServices > VisServicesPtr
Definition: cxMainWindow.h:40
QGroupBox * wrapInGroupBox(QWidget *base, QString name)
void showDetailed(bool detailed)
sets the presetwidget in detailed mode or not
bool hasAdvancedOptions() const
bool hasOptions() const
boost::shared_ptr< class Filter > FilterPtr
QString generateHelpText() const
void setFilter(FilterPtr filter)
void showAdvanced(bool show)
Interface for QWidget which handles widgets uniformly for the system.
Definition: cxBaseWidget.h:88
void setFilter(FilterPtr filter)
sets which filter to operate on
virtual void requestSetPresetSlot(QString name)=0
void setOptions(QString uid, std::vector< PropertyPtr > options, bool showAdvanced)
void presetSelected(QString name)
Helper class for xml files used to store ssc/cx data.
FilterSetupWidget(VisServicesPtr services, QWidget *parent, XmlOptionFile options, bool addFrame)
void changed()
Namespace for all CustusX production code.