Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "QmitkFunctionalityComponentContainer.h"
00018
00019 #include "ui_QmitkFunctionalityComponentContainerControls.h"
00020
00021 #include <QmitkDataStorageComboBox.h>
00022 #include "mitkDataTreeFilterFunctions.h"
00023 #include <mitkNodePredicateDataType.h>
00024 #include <mitkNodePredicateProperty.h>
00025 #include "mitkProperties.h"
00026
00027
00028 #include <qgroupbox.h>
00029 #include <qlayout.h>
00030 #include <itkCommand.h>
00031
00032 #include <qcombobox.h>
00033 #include <qlabel.h>
00034 #include <qtabwidget.h>
00035
00036
00037 #include <vector>
00038 #include <qwidget.h>
00039
00040 #include <QBoxLayout>
00041
00042
00043 const QSizePolicy preferred(QSizePolicy::Preferred, QSizePolicy::Preferred);
00044
00045
00046 QmitkFunctionalityComponentContainer::QmitkFunctionalityComponentContainer(QObject *parent, const char *parentName, bool updateSelector, bool showSelector)
00047 : QmitkBaseFunctionalityComponent(parent, parentName),
00048 m_UpdateSelector(updateSelector),
00049 m_ShowSelector(showSelector),
00050 m_GUI(NULL),
00051
00052
00053 m_Active(false),
00054 m_SelectedItem(NULL),
00055 m_FunctionalityComponentContainerGUI(NULL),
00056 m_Parent(parent),
00057
00058 m_ComponentName("ComponentContainer"),
00059
00060 m_Spacer(NULL),
00061
00062 m_BackButton(NULL),
00063 m_NextButton(NULL),
00064 m_MaximumWidgedStackSize(-1)
00065 {
00066 SetAvailability(true);
00067 }
00068
00069
00070 QmitkFunctionalityComponentContainer::~QmitkFunctionalityComponentContainer()
00071 {
00072
00073 }
00074
00075
00076 void QmitkFunctionalityComponentContainer::SetComponentName(QString name)
00077 {
00078 m_ComponentName = name;
00079 }
00080
00081
00082 QString QmitkFunctionalityComponentContainer::GetComponentName()
00083 {
00084 return m_ComponentName;
00085 }
00086
00087
00088
00089 void QmitkFunctionalityComponentContainer::SetShowTreeNodeSelector(bool show)
00090 {
00091 GetImageContent()->setShown(show);
00092 }
00093
00094
00095 QGroupBox* QmitkFunctionalityComponentContainer::GetImageContent()
00096 {
00097 return (QGroupBox*) m_FunctionalityComponentContainerGUI->m_ImageContent;
00098 }
00099
00100
00101 QWidget* QmitkFunctionalityComponentContainer::GetGUI()
00102 {
00103 return m_GUI;
00104 }
00105
00106
00107 mitk::Image* QmitkFunctionalityComponentContainer::GetParentMitkImage()
00108 {
00109 return m_ParentMitkImage;
00110 }
00111
00112 QmitkDataStorageComboBox * QmitkFunctionalityComponentContainer::GetTreeNodeSelector()
00113 {
00114 if(m_FunctionalityComponentContainerGUI)
00115 {
00116 return m_FunctionalityComponentContainerGUI->m_TreeNodeSelector;
00117 }
00118 else return NULL;
00119 }
00120
00121
00122 QmitkStdMultiWidget * QmitkFunctionalityComponentContainer::GetMultiWidget()
00123 {
00124 return m_MulitWidget;
00125 }
00126
00127
00128 void QmitkFunctionalityComponentContainer::TreeChanged(const itk::EventObject & )
00129 {
00130 if(IsActivated())
00131 {
00132 TreeChanged();
00133 }
00134 else
00135 TreeChanged();
00136 }
00137
00138
00139 void QmitkFunctionalityComponentContainer::TreeChanged()
00140 {
00141 UpdateDataTreeComboBoxes();
00142
00143 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00144 {
00145 m_AddedChildList[i]->TreeChanged();
00146 }
00147 }
00148
00149
00150 void QmitkFunctionalityComponentContainer::UpdateDataTreeComboBoxes()
00151 {
00152
00153
00154
00155
00156 }
00157
00158
00159 void QmitkFunctionalityComponentContainer::CreateConnections()
00160 {
00161 if ( m_FunctionalityComponentContainerGUI )
00162 {
00163 connect( (QObject*)(m_FunctionalityComponentContainerGUI->m_TreeNodeSelector), SIGNAL(OnSelectionChanged (const mitk::DataNode *)), (QObject*) this, SLOT(ImageSelected(const mitk::DataNode *)));
00164 connect( (QObject*)(m_FunctionalityComponentContainerGUI->m_ContainerBorder), SIGNAL(toggled(bool)), (QObject*) this, SLOT(SetContentContainerVisibility(bool)));
00165 }
00166 }
00167
00169 void QmitkFunctionalityComponentContainer::SetDataStorage(mitk::DataStorage::Pointer dataStorage)
00170 {
00171 m_DataStorage = dataStorage;
00172 }
00173
00175 mitk::DataStorage::Pointer QmitkFunctionalityComponentContainer::GetDataStorage()
00176 {
00177 return m_DataStorage;
00178 }
00179
00180
00181 void QmitkFunctionalityComponentContainer::DataStorageChanged(mitk::DataStorage::Pointer ds)
00182 {
00183 if(m_FunctionalityComponentContainerGUI != NULL)
00184 {
00185 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00186 {
00187 QmitkBaseFunctionalityComponent* functionalityComponent = dynamic_cast<QmitkBaseFunctionalityComponent*>(m_AddedChildList[i]);
00188 if (functionalityComponent != NULL)
00189 {
00190 functionalityComponent->DataStorageChanged(ds);
00191 }
00192 }
00193 }
00194
00195 if(m_FunctionalityComponentContainerGUI)
00196 {
00197 if(!m_FunctionalityComponentContainerGUI->m_TreeNodeSelector)
00198 return;
00199 if(!m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->GetSelectedNode())
00200 return;
00201 if(!m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->GetSelectedNode()->GetData())
00202 return;
00203 m_ParentMitkImage = static_cast<mitk::Image*> (m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->GetSelectedNode()->GetData());
00204
00205
00206 if(m_FunctionalityComponentContainerGUI != NULL)
00207 {
00208 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00209 {
00210 QmitkBaseFunctionalityComponent* functionalityComponent = dynamic_cast<QmitkBaseFunctionalityComponent*>(m_AddedChildList[i]);
00211 if (functionalityComponent != NULL)
00212 {
00213 if(!m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->GetSelectedNode()->GetData())
00214 return;
00215 functionalityComponent->m_ParentMitkImage = static_cast<mitk::Image*> (m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->GetSelectedNode()->GetData());
00216
00217 }
00218 }
00219 }
00220 }
00221
00222 }
00223
00224
00225 void QmitkFunctionalityComponentContainer::ImageSelected(const mitk::DataNode* item)
00226 {
00227
00228 if(m_FunctionalityComponentContainerGUI != NULL)
00229 {
00230 mitk::DataNode::Pointer selectedItem = const_cast< mitk::DataNode*>(item);
00231 GetTreeNodeSelector()->SetSelectedNode(selectedItem);
00232
00233
00234 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00235 {
00236 QmitkBaseFunctionalityComponent* functionalityComponent = dynamic_cast<QmitkBaseFunctionalityComponent*>(m_AddedChildList[i]);
00237 if (functionalityComponent != NULL)
00238
00239 functionalityComponent->ImageSelected(item);
00240 }
00241 }
00242
00243 if(m_FunctionalityComponentContainerGUI)
00244 {
00245 m_ParentMitkImage = static_cast<mitk::Image*> (item->GetData());
00246
00247
00248 if(m_FunctionalityComponentContainerGUI != NULL)
00249 {
00250 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00251 {
00252 QmitkBaseFunctionalityComponent* functionalityComponent = dynamic_cast<QmitkBaseFunctionalityComponent*>(m_AddedChildList[i]);
00253 if (functionalityComponent != NULL)
00254 {
00255 functionalityComponent->m_ParentMitkImage = static_cast<mitk::Image*> (item->GetData());
00256 }
00257 }
00258 }
00259 }
00260 TreeChanged();
00261 }
00262
00263
00264 void QmitkFunctionalityComponentContainer::CreateQtPartControl(QWidget * , mitk::DataStorage::Pointer dataStorage)
00265 {
00266 if (m_FunctionalityComponentContainerGUI == NULL)
00267 {
00268 m_GUI = new QWidget;
00269 m_FunctionalityComponentContainerGUI = new Ui::QmitkFunctionalityComponentContainerGUI;
00270 m_FunctionalityComponentContainerGUI->setupUi(m_GUI);
00271
00272
00273 this->SetDataStorage(dataStorage);
00274
00275 m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->SetDataStorage(dataStorage);
00276 m_FunctionalityComponentContainerGUI->m_TreeNodeSelector->SetPredicate(mitk::NodePredicateDataType::New("Image"));
00277
00278 m_FunctionalityComponentContainerGUI->m_WidgetStack->setCurrentIndex(0);
00279
00280
00281
00282
00283 }
00284 this->CreateConnections();
00285
00286
00287 }
00288
00289
00290 QGroupBox * QmitkFunctionalityComponentContainer::GetContentContainer()
00291 {
00292 return m_FunctionalityComponentContainerGUI->m_ImageContent;
00293 }
00294
00295
00296 QGroupBox * QmitkFunctionalityComponentContainer::GetMainCheckBoxContainer()
00297 {
00298 return m_FunctionalityComponentContainerGUI->m_ContainerBorder;
00299 }
00300
00301
00302 void QmitkFunctionalityComponentContainer::SetContentContainerVisibility(bool)
00303 {
00304 if(GetMainCheckBoxContainer() != NULL)
00305 {
00306 if(GetMainCheckBoxContainer()->isChecked())
00307 {
00308 Activated();
00309 }
00310 else
00311 {
00312 Deactivated();
00313 }
00314 }
00315 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00316 {
00317 if(m_AddedChildList[i]->GetContentContainer() != NULL)
00318 {
00319 m_AddedChildList[i]->GetContentContainer()->setShown(GetMainCheckBoxContainer()->isChecked());
00320 }
00321 if(m_AddedChildList[i]->GetMainCheckBoxContainer() != NULL)
00322 {
00323 m_AddedChildList[i]->GetMainCheckBoxContainer()->setChecked(GetMainCheckBoxContainer()->isChecked());
00324 }
00325 m_AddedChildList[i]->SetContentContainerVisibility(GetMainCheckBoxContainer()->isChecked());
00326 }
00327 }
00328
00329
00330 void QmitkFunctionalityComponentContainer::SetSelectorVisibility(bool visibility)
00331 {
00332 if(m_GUI)
00333 {
00334 m_FunctionalityComponentContainerGUI->m_ImageContent->setShown(visibility);
00335 }
00336 m_ShowSelector = visibility;
00337 }
00338
00339
00340 void QmitkFunctionalityComponentContainer::Activated()
00341 {
00342 TreeChanged();
00343 QmitkBaseFunctionalityComponent::Activated();
00344 m_Active = true;
00345 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00346 {
00347 m_AddedChildList[i]->Activated();
00348 }
00349 }
00350
00351
00352 void QmitkFunctionalityComponentContainer::Deactivated()
00353 {
00354 QmitkBaseFunctionalityComponent::Deactivated();
00355 m_Active = false;
00356 for(unsigned int i = 0; i < m_AddedChildList.size(); i++)
00357 {
00358 m_AddedChildList[i]->Deactivated();
00359 }
00360 }
00361
00362
00363 void QmitkFunctionalityComponentContainer::AddComponent(QmitkFunctionalityComponentContainer* component)
00364 {
00365 if(component!=NULL)
00366 {
00367 QWidget* componentWidget = component->CreateControlWidget(m_GUI);
00368 AddComponentListener(component);
00369 m_GUI->layout()->addWidget(componentWidget);
00370 component->CreateConnections();
00371 if(m_Spacer != NULL)
00372 {
00373 m_GUI->layout()->removeItem(m_Spacer);
00374 }
00375 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00376 m_Spacer = spacer;
00377 m_GUI->layout()->addItem( m_Spacer );
00378 m_GUI->repaint();
00379 }
00380 }
00382 QPushButton* QmitkFunctionalityComponentContainer::GetNextButton()
00383 {
00384 return m_NextButton;
00385 }
00386
00388 QPushButton* QmitkFunctionalityComponentContainer::GetBackButton()
00389 {
00390 return m_BackButton;
00391 }
00392
00393
00394
00395 void QmitkFunctionalityComponentContainer::AddComponent(QmitkFunctionalityComponentContainer* component, QString label, int stackPage)
00396 {
00397 if(component!=NULL)
00398 {
00399 QWidget* visibleWidget = m_FunctionalityComponentContainerGUI->m_WidgetStack->currentWidget();
00400 int idVisibleWidget = m_FunctionalityComponentContainerGUI->m_WidgetStack->indexOf(visibleWidget);
00401 if(idVisibleWidget > m_MaximumWidgedStackSize)
00402 {
00403 m_MaximumWidgedStackSize = idVisibleWidget;
00404 }
00405 if(m_MaximumWidgedStackSize < stackPage)
00406 {
00407 QWidget* w = new QWidget(m_FunctionalityComponentContainerGUI->m_WidgetStack);
00408 m_FunctionalityComponentContainerGUI->m_WidgetStack->insertTab(stackPage, w, label);
00409 m_MaximumWidgedStackSize++;
00410 m_FunctionalityComponentContainerGUI->m_WidgetStack->setCurrentIndex(stackPage);
00411 visibleWidget = m_FunctionalityComponentContainerGUI->m_WidgetStack->currentWidget();
00412 idVisibleWidget = m_FunctionalityComponentContainerGUI->m_WidgetStack->indexOf(visibleWidget);
00413 new QVBoxLayout(visibleWidget);
00414
00415 }
00416
00417 QLayout* layout;
00418 if(m_FunctionalityComponentContainerGUI->m_WidgetStack->layout() == 0)
00419 {
00420 layout = new QVBoxLayout( (QWidget*)(m_FunctionalityComponentContainerGUI->m_WidgetStack));
00421 }
00422 else
00423 {
00424 layout = m_FunctionalityComponentContainerGUI->m_WidgetStack->layout();
00425 }
00426
00427 component->CreateQtPartControl(m_FunctionalityComponentContainerGUI->m_WidgetStack->currentWidget(), this->m_DataStorage);
00428 QWidget* componentWidget = component->GetGUI();
00429
00430 AddComponentListener(component);
00431
00432
00433 m_FunctionalityComponentContainerGUI->m_WidgetStack->setCurrentIndex(stackPage);
00434 QWidget* theCurrentWidget=m_FunctionalityComponentContainerGUI->m_WidgetStack->currentWidget();
00435 QLayout* theCurrentLayout = theCurrentWidget->layout();
00436 theCurrentLayout->addWidget(componentWidget);
00437
00438
00439
00440
00441
00442
00443 m_FunctionalityComponentContainerGUI->m_WidgetStack->setShown(true);
00444 m_FunctionalityComponentContainerGUI->m_WidgetStack->updateGeometry();
00445 m_FunctionalityComponentContainerGUI->m_WidgetStack->layout()->activate();
00446 componentWidget->setShown(true);
00447 component->CreateConnections();
00448
00449 m_GUI->repaint();
00450 }
00451 }
00452
00453 void QmitkFunctionalityComponentContainer::CreateNavigationButtons()
00454 {
00455
00456 QWidget* funcWidget = (QWidget*)m_FunctionalityComponentContainerGUI;
00457 QLayout *functionalityLayout = funcWidget->layout();
00458 QBoxLayout * buttonLayout = new QHBoxLayout(funcWidget);
00459 if ( QBoxLayout* boxLayout = dynamic_cast<QBoxLayout*>(functionalityLayout) )
00460 {
00461 boxLayout->addLayout( buttonLayout );
00462 }
00463
00464
00465
00466
00467
00468
00469
00470
00471 if(m_BackButton==NULL)
00472 {
00473 m_BackButton = new QPushButton("<<", (QWidget*)(m_FunctionalityComponentContainerGUI));
00474 }
00475 if(m_NextButton==NULL)
00476 {
00477 m_NextButton = new QPushButton(">>", (QWidget*)(m_FunctionalityComponentContainerGUI));
00478 }
00479 buttonLayout->addWidget(m_BackButton);
00480 buttonLayout->addWidget(m_NextButton);
00481
00482 m_BackButton->setShown(true);
00483 m_NextButton->setShown(true);
00484
00485 m_GUI->layout()->activate();
00486 m_GUI->repaint();
00487
00488
00489
00490
00491 m_FunctionalityComponentContainerGUI->m_WidgetStack->setCurrentIndex(1);
00492 SetWizardText("");
00493 GetImageContent()->updateGeometry();
00494 if(m_Spacer != NULL)
00495 {
00496 m_GUI->layout()->removeItem(m_Spacer);
00497 }
00498 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00499 m_Spacer = spacer;
00500 m_GUI->layout()->addItem( m_Spacer );
00501 m_GUI->updateGeometry();
00502 m_GUI->repaint();
00503 }
00504
00505 void QmitkFunctionalityComponentContainer::SetWizardText(const QString& )
00506 {
00507
00508
00509 GetImageContent()->updateGeometry();
00510 GetImageContent()->repaint();
00511 m_GUI->updateGeometry();
00512
00513 m_GUI->layout()->activate();
00514 m_GUI->repaint();
00515
00516 }
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586 Ui::QmitkFunctionalityComponentContainerGUI* QmitkFunctionalityComponentContainer::GetFunctionalityComponentContainerGUI()
00587 {
00588 return m_FunctionalityComponentContainerGUI;
00589 }