/Applications/SlicerQT/qSlicerMainWindowCore.cxx

https://github.com/LinjieChen/Slicer3 · C++ · 140 lines · 93 code · 28 blank · 19 comment · 3 complexity · 39f9389028a006c9e5daf80bd2d1e681 MD5 · raw file

  1. // QT includes
  2. #include <QSignalMapper>
  3. #include <QToolBar>
  4. #include <QAction>
  5. #include <QDebug>
  6. // qCTK includes
  7. #include <qCTKPythonShell.h>
  8. // MRML includes
  9. #include <vtkMRMLScene.h>
  10. // SlicerQT includes
  11. #include "qSlicerMainWindowCore.h"
  12. #include "qSlicerMainWindowCore_p.h"
  13. #include "qSlicerApplication.h"
  14. #include "qSlicerModulePanel.h"
  15. #include "qSlicerAbstractModule.h"
  16. #include "qSlicerAbstractModuleWidget.h"
  17. #include "qSlicerModuleManager.h"
  18. #include "qSlicerPythonManager.h"
  19. #include "vtkSlicerConfigure.h" // For Slicer3_USE_PYTHONQT
  20. //---------------------------------------------------------------------------
  21. // qSlicerMainWindowCorePrivate methods
  22. //---------------------------------------------------------------------------
  23. qSlicerMainWindowCorePrivate::qSlicerMainWindowCorePrivate()
  24. {
  25. this->PythonShell = 0;
  26. this->ShowModuleActionMapper = new QSignalMapper(this);
  27. this->ToolBarModuleList << "Measurements" << "Transforms" << "Volumes";
  28. }
  29. //---------------------------------------------------------------------------
  30. void qSlicerMainWindowCorePrivate::onModuleLoaded(qSlicerAbstractModule* module)
  31. {
  32. Q_ASSERT(module);
  33. QCTK_P(qSlicerMainWindowCore);
  34. qSlicerAbstractModuleWidget* moduleWidget = module->widgetRepresentation();
  35. Q_ASSERT(moduleWidget);
  36. QAction * action = moduleWidget->showModuleAction();
  37. if (action)
  38. {
  39. // Add action to signal mapper
  40. this->ShowModuleActionMapper->setMapping(action, module->name());
  41. QObject::connect(action, SIGNAL(triggered()), this->ShowModuleActionMapper, SLOT(map()));
  42. // Update action state
  43. bool visible = this->ToolBarModuleList.contains(module->title());
  44. action->setVisible(visible);
  45. action->setEnabled(visible);
  46. // Add action to ToolBar
  47. p->widget()->moduleToolBar()->addAction(action);
  48. }
  49. }
  50. //---------------------------------------------------------------------------
  51. void qSlicerMainWindowCorePrivate::onModuleAboutToBeUnloaded(qSlicerAbstractModule* module)
  52. {
  53. Q_ASSERT(module);
  54. QCTK_P(qSlicerMainWindowCore);
  55. qSlicerAbstractModuleWidget* moduleWidget = module->widgetRepresentation();
  56. Q_ASSERT(moduleWidget);
  57. QAction * action = moduleWidget->showModuleAction();
  58. if (action)
  59. {
  60. p->widget()->moduleToolBar()->removeAction(action);
  61. }
  62. }
  63. //-----------------------------------------------------------------------------
  64. // qSlicerMainWindowCore methods
  65. //-----------------------------------------------------------------------------
  66. qSlicerMainWindowCore::qSlicerMainWindowCore(qSlicerMainWindow* _parent):Superclass(_parent)
  67. {
  68. QCTK_INIT_PRIVATE(qSlicerMainWindowCore);
  69. QCTK_D(qSlicerMainWindowCore);
  70. d->ParentWidget = _parent;
  71. qSlicerModuleManager * moduleManager = qSlicerApplication::application()->moduleManager();
  72. Q_ASSERT(moduleManager);
  73. this->connect(moduleManager,
  74. SIGNAL(moduleLoaded(qSlicerAbstractModule*)),
  75. d, SLOT(onModuleLoaded(qSlicerAbstractModule*)));
  76. this->connect(moduleManager,
  77. SIGNAL(moduleAboutToBeUnloaded(qSlicerAbstractModule*)),
  78. d, SLOT(onModuleAboutToBeUnloaded(qSlicerAbstractModule*)));
  79. QObject::connect(d->ShowModuleActionMapper,
  80. SIGNAL(mapped(const QString&)),
  81. this->widget()->modulePanel(),
  82. SLOT(setModule(const QString&)));
  83. }
  84. //-----------------------------------------------------------------------------
  85. QCTK_GET_CXX(qSlicerMainWindowCore, qSlicerMainWindow*, widget, ParentWidget);
  86. //---------------------------------------------------------------------------
  87. void qSlicerMainWindowCore::onEditUndoActionTriggered()
  88. {
  89. qSlicerApplication::application()->mrmlScene()->Undo();
  90. }
  91. //---------------------------------------------------------------------------
  92. void qSlicerMainWindowCore::onEditRedoActionTriggered()
  93. {
  94. qSlicerApplication::application()->mrmlScene()->Redo();
  95. }
  96. //-----------------------------------------------------------------------------
  97. void qSlicerMainWindowCore::onWindowPythonInteractorActionTriggered()
  98. {
  99. #ifdef Slicer3_USE_PYTHONQT
  100. QCTK_D(qSlicerMainWindowCore);
  101. if (!d->PythonShell)
  102. {
  103. Q_ASSERT(qSlicerApplication::application()->pythonManager());
  104. d->PythonShell = new qCTKPythonShell(qSlicerApplication::application()->pythonManager()/*, d->ParentWidget*/);
  105. d->PythonShell->setAttribute(Qt::WA_QuitOnClose, false);
  106. d->PythonShell->resize(600, 280);
  107. }
  108. Q_ASSERT(d->PythonShell);
  109. d->PythonShell->show();
  110. d->PythonShell->raise();
  111. #endif
  112. }