00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkExtWorkbenchWindowAdvisor.h"
00019 #include "QmitkExtActionBarAdvisor.h"
00020
00021 #include <QMenu>
00022 #include <QMenuBar>
00023 #include <QMainWindow>
00024 #include <QStatusBar>
00025 #include <QString>
00026 #include <QFile>
00027 #include <QRegExp>
00028 #include <QTextStream>
00029
00030 #include <berryPlatform.h>
00031 #include <berryPlatformUI.h>
00032 #include <berryIWorkbenchWindow.h>
00033 #include <berryIWorkbenchPage.h>
00034 #include <berryIPreferencesService.h>
00035 #include <berryIPerspectiveRegistry.h>
00036 #include <berryIPerspectiveDescriptor.h>
00037 #include <berryIWorkbenchPartConstants.h>
00038 #include <berryQtAssistantUtil.h>
00039
00040 #include <internal/berryQtShowViewAction.h>
00041 #include <internal/berryQtOpenPerspectiveAction.h>
00042
00043 #include <QmitkExtFileOpenAction.h>
00044 #include <QmitkExtFileSaveProjectAction.h>
00045 #include <QmitkFileExitAction.h>
00046 #include <QmitkCloseProjectAction.h>
00047 #include <QmitkStatusBar.h>
00048 #include <QmitkProgressBar.h>
00049 #include <QmitkMemoryUsageIndicatorView.h>
00050 #include <QmitkPreferencesDialog.h>
00051
00052 #include <itkConfigure.h>
00053 #include <vtkConfigure.h>
00054 #include <mitkVersion.h>
00055
00056
00057 #include "internal/QmitkExtWorkbenchWindowAdvisorHack.h"
00058 #include "mitkUndoController.h"
00059 #include "mitkVerboseLimitedLinearUndo.h"
00060 #include <QToolBar>
00061 #include <QMessageBox>
00062 #include <QLabel>
00063 #include <QmitkAboutDialog/QmitkAboutDialog.h>
00064
00065 QmitkExtWorkbenchWindowAdvisorHack
00066 * QmitkExtWorkbenchWindowAdvisorHack::undohack =
00067 new QmitkExtWorkbenchWindowAdvisorHack();
00068
00069 class PartListenerForTitle: public berry::IPartListener
00070 {
00071 public:
00072
00073 PartListenerForTitle(QmitkExtWorkbenchWindowAdvisor* wa) :
00074 windowAdvisor(wa)
00075 {
00076 }
00077
00078 Events::Types GetPartEventTypes() const
00079 {
00080 return Events::ACTIVATED | Events::BROUGHT_TO_TOP | Events::CLOSED
00081 | Events::HIDDEN | Events::VISIBLE;
00082 }
00083
00084 void PartActivated(berry::IWorkbenchPartReference::Pointer ref)
00085 {
00086 if (ref.Cast<berry::IEditorReference> ())
00087 {
00088 windowAdvisor->UpdateTitle(false);
00089 }
00090 }
00091
00092 void PartBroughtToTop(berry::IWorkbenchPartReference::Pointer ref)
00093 {
00094 if (ref.Cast<berry::IEditorReference> ())
00095 {
00096 windowAdvisor->UpdateTitle(false);
00097 }
00098 }
00099
00100 void PartClosed(berry::IWorkbenchPartReference::Pointer )
00101 {
00102 windowAdvisor->UpdateTitle(false);
00103 }
00104
00105 void PartHidden(berry::IWorkbenchPartReference::Pointer ref)
00106 {
00107 if (!windowAdvisor->lastActiveEditor.Expired() &&
00108 ref->GetPart(false) == windowAdvisor->lastActiveEditor.Lock())
00109 {
00110 windowAdvisor->UpdateTitle(true);
00111 }
00112 }
00113
00114 void PartVisible(berry::IWorkbenchPartReference::Pointer ref)
00115 {
00116 if (!windowAdvisor->lastActiveEditor.Expired() &&
00117 ref->GetPart(false) == windowAdvisor->lastActiveEditor.Lock())
00118 {
00119 windowAdvisor->UpdateTitle(false);
00120 }
00121 }
00122
00123 private:
00124 QmitkExtWorkbenchWindowAdvisor* windowAdvisor;
00125
00126 };
00127
00128 class PartListenerForImageNavigator: public berry::IPartListener
00129 {
00130 public:
00131
00132 PartListenerForImageNavigator(QAction* act) :
00133 imageNavigatorAction(act)
00134 {
00135 }
00136
00137 Events::Types GetPartEventTypes() const
00138 {
00139 return Events::OPENED | Events::CLOSED | Events::HIDDEN |
00140 Events::VISIBLE;
00141 }
00142
00143 void PartOpened(berry::IWorkbenchPartReference::Pointer ref)
00144 {
00145 if (ref->GetId()=="org.mitk.views.imagenavigator")
00146 {
00147 imageNavigatorAction->setChecked(true);
00148 }
00149 }
00150
00151 void PartClosed(berry::IWorkbenchPartReference::Pointer ref)
00152 {
00153 if (ref->GetId()=="org.mitk.views.imagenavigator")
00154 {
00155 imageNavigatorAction->setChecked(false);
00156 }
00157 }
00158
00159 void PartVisible(berry::IWorkbenchPartReference::Pointer ref)
00160 {
00161 if (ref->GetId()=="org.mitk.views.imagenavigator")
00162 {
00163 imageNavigatorAction->setChecked(true);
00164 }
00165 }
00166
00167 void PartHidden(berry::IWorkbenchPartReference::Pointer ref)
00168 {
00169 if (ref->GetId()=="org.mitk.views.imagenavigator")
00170 {
00171 imageNavigatorAction->setChecked(false);
00172 }
00173 }
00174
00175 private:
00176 QAction* imageNavigatorAction;
00177
00178 };
00179
00180 class PerspectiveListenerForTitle: public berry::IPerspectiveListener
00181 {
00182 public:
00183
00184 PerspectiveListenerForTitle(QmitkExtWorkbenchWindowAdvisor* wa) :
00185 windowAdvisor(wa), perspectivesClosed(false)
00186 {
00187 }
00188
00189 Events::Types GetPerspectiveEventTypes() const
00190 {
00191 return Events::ACTIVATED | Events::SAVED_AS | Events::DEACTIVATED
00192
00193 | Events::CLOSED | Events::OPENED;
00194 }
00195
00196 void PerspectiveActivated(berry::IWorkbenchPage::Pointer ,
00197 berry::IPerspectiveDescriptor::Pointer )
00198 {
00199 windowAdvisor->UpdateTitle(false);
00200 }
00201
00202 void PerspectiveSavedAs(berry::IWorkbenchPage::Pointer ,
00203 berry::IPerspectiveDescriptor::Pointer ,
00204 berry::IPerspectiveDescriptor::Pointer )
00205 {
00206 windowAdvisor->UpdateTitle(false);
00207 }
00208
00209 void PerspectiveDeactivated(berry::IWorkbenchPage::Pointer ,
00210 berry::IPerspectiveDescriptor::Pointer )
00211 {
00212 windowAdvisor->UpdateTitle(false);
00213 }
00214
00215 void PerspectiveOpened(berry::IWorkbenchPage::Pointer ,
00216 berry::IPerspectiveDescriptor::Pointer )
00217 {
00218 if (perspectivesClosed)
00219 {
00220 QListIterator<QAction*> i(windowAdvisor->viewActions);
00221 while (i.hasNext())
00222 {
00223 i.next()->setEnabled(true);
00224 }
00225
00226 windowAdvisor->fileSaveProjectAction->setEnabled(true);
00227 windowAdvisor->closeProjectAction->setEnabled(true);
00228 windowAdvisor->undoAction->setEnabled(true);
00229 windowAdvisor->redoAction->setEnabled(true);
00230 windowAdvisor->imageNavigatorAction->setEnabled(true);
00231 windowAdvisor->resetPerspAction->setEnabled(true);
00232 windowAdvisor->closePerspAction->setEnabled(true);
00233 }
00234
00235 perspectivesClosed = false;
00236 }
00237
00238 void PerspectiveClosed(berry::IWorkbenchPage::Pointer ,
00239 berry::IPerspectiveDescriptor::Pointer )
00240 {
00241 berry::IWorkbenchWindow::Pointer wnd = windowAdvisor->GetWindowConfigurer()->GetWindow();
00242 bool allClosed = true;
00243 if (wnd->GetActivePage())
00244 {
00245 std::vector<berry::IPerspectiveDescriptor::Pointer> perspectives(wnd->GetActivePage()->GetOpenPerspectives());
00246 allClosed = perspectives.empty();
00247 }
00248
00249 if (allClosed)
00250 {
00251 perspectivesClosed = true;
00252
00253 QListIterator<QAction*> i(windowAdvisor->viewActions);
00254 while (i.hasNext())
00255 {
00256 i.next()->setEnabled(false);
00257 }
00258
00259 windowAdvisor->fileSaveProjectAction->setEnabled(false);
00260 windowAdvisor->closeProjectAction->setEnabled(false);
00261 windowAdvisor->undoAction->setEnabled(false);
00262 windowAdvisor->redoAction->setEnabled(false);
00263 windowAdvisor->imageNavigatorAction->setEnabled(false);
00264 windowAdvisor->resetPerspAction->setEnabled(false);
00265 windowAdvisor->closePerspAction->setEnabled(false);
00266 }
00267 }
00268
00269 private:
00270 QmitkExtWorkbenchWindowAdvisor* windowAdvisor;
00271 bool perspectivesClosed;
00272 };
00273
00274
00275 QmitkExtWorkbenchWindowAdvisor::QmitkExtWorkbenchWindowAdvisor(berry::WorkbenchAdvisor* wbAdvisor,
00276 berry::IWorkbenchWindowConfigurer::Pointer configurer) :
00277 QmitkCommonWorkbenchWindowAdvisor(configurer),
00278 lastInput(0),
00279 wbAdvisor(wbAdvisor),
00280 showViewToolbar(true),
00281 showVersionInfo(true)
00282 {
00283 productName = berry::Platform::GetConfiguration().getString("application.baseName");
00284 }
00285
00286 berry::ActionBarAdvisor::Pointer QmitkExtWorkbenchWindowAdvisor::CreateActionBarAdvisor(
00287 berry::IActionBarConfigurer::Pointer configurer)
00288 {
00289 berry::ActionBarAdvisor::Pointer actionBarAdvisor(
00290 new QmitkExtActionBarAdvisor(configurer));
00291 return actionBarAdvisor;
00292 }
00293
00294 void* QmitkExtWorkbenchWindowAdvisor::CreateEmptyWindowContents(void* parent)
00295 {
00296 QWidget* parentWidget = static_cast<QWidget*>(parent);
00297 QLabel* label = new QLabel(parentWidget);
00298 label->setText("<b>No perspectives are open. Open a perspective in the <i>Window->Open Perspective</i> menu.</b>");
00299 label->setContentsMargins(10,10,10,10);
00300 label->setAlignment(Qt::AlignTop);
00301 label->setEnabled(false);
00302 parentWidget->layout()->addWidget(label);
00303 return label;
00304 }
00305
00306 void QmitkExtWorkbenchWindowAdvisor::ShowViewToolbar(bool show)
00307 {
00308 showViewToolbar = show;
00309 }
00310
00311 void QmitkExtWorkbenchWindowAdvisor::ShowVersionInfo(bool show)
00312 {
00313 showVersionInfo = show;
00314 }
00315
00316 void QmitkExtWorkbenchWindowAdvisor::SetProductName(const std::string& product)
00317 {
00318 productName = product;
00319 }
00320
00321 void QmitkExtWorkbenchWindowAdvisor::SetWindowIcon(const std::string& wndIcon)
00322 {
00323 windowIcon = wndIcon;
00324 }
00325
00326 void QmitkExtWorkbenchWindowAdvisor::PostWindowCreate()
00327 {
00328 QmitkCommonWorkbenchWindowAdvisor::PostWindowCreate();
00329
00330 berry::IWorkbenchWindow::Pointer window =
00331 this->GetWindowConfigurer()->GetWindow();
00332 QMainWindow* mainWindow =
00333 static_cast<QMainWindow*> (window->GetShell()->GetControl());
00334
00335 if (!windowIcon.empty())
00336 {
00337 mainWindow->setWindowIcon(QIcon(QString::fromStdString(windowIcon)));
00338 }
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348 QMenuBar* menuBar = mainWindow->menuBar();
00349
00350 QMenu* fileMenu = menuBar->addMenu("&File");
00351 fileMenu->setObjectName("FileMenu");
00352
00353 QAction* fileOpenAction = new QmitkExtFileOpenAction(QIcon(":/org.mitk.gui.qt.ext/Load_48.png"), window);
00354 fileMenu->addAction(fileOpenAction);
00355 fileSaveProjectAction = new QmitkExtFileSaveProjectAction(window);
00356 fileSaveProjectAction->setIcon(QIcon(":/org.mitk.gui.qt.ext/Save_48.png"));
00357 fileMenu->addAction(fileSaveProjectAction);
00358 closeProjectAction = new QmitkCloseProjectAction(window);
00359 closeProjectAction->setIcon(QIcon(":/org.mitk.gui.qt.ext/Remove_48.png"));
00360 fileMenu->addAction(closeProjectAction);
00361 fileMenu->addSeparator();
00362 QAction* fileExitAction = new QmitkFileExitAction(window);
00363 fileExitAction->setObjectName("QmitkFileExitAction");
00364 fileMenu->addAction(fileExitAction);
00365
00366 berry::IViewRegistry* viewRegistry =
00367 berry::PlatformUI::GetWorkbench()->GetViewRegistry();
00368 const std::vector<berry::IViewDescriptor::Pointer>& viewDescriptors =
00369 viewRegistry->GetViews();
00370
00371
00372 QMenu* editMenu = menuBar->addMenu("&Edit");
00373 undoAction = editMenu->addAction(QIcon(":/org.mitk.gui.qt.ext/Undo_48.png"),
00374 "&Undo",
00375 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onUndo()),
00376 QKeySequence("CTRL+Z"));
00377 undoAction->setToolTip("Undo the last action (not supported by all modules)");
00378 redoAction = editMenu->addAction(QIcon(":/org.mitk.gui.qt.ext/Redo_48.png")
00379 , "&Redo",
00380 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onRedo()),
00381 QKeySequence("CTRL+Y"));
00382 redoAction->setToolTip("execute the last action that was undone again (not supported by all modules)");
00383
00384 imageNavigatorAction = new QAction(QIcon(":/org.mitk.gui.qt.ext/Slider.png"), "&Image Navigator", NULL);
00385 QObject::connect(imageNavigatorAction, SIGNAL(triggered(bool)), QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onImageNavigator()));
00386 imageNavigatorAction->setCheckable(true);
00387
00388 berry::IWorkbenchWindow::Pointer win =
00389 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow();
00390 if(win.IsNotNull())
00391 {
00392
00393 imageNavigatorPartListener = new PartListenerForImageNavigator(imageNavigatorAction);
00394 win->GetPartService()->AddPartListener(imageNavigatorPartListener);
00395 berry::IViewPart::Pointer imageNavigatorView =
00396 win->GetActivePage()->FindView("org.mitk.views.imagenavigator");
00397 imageNavigatorAction->setChecked(false);
00398 if (imageNavigatorView)
00399 {
00400 bool isImageNavigatorVisible = berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->IsPartVisible(imageNavigatorView);
00401 if (isImageNavigatorVisible)
00402 imageNavigatorAction->setChecked(true);
00403 }
00404 }
00405 imageNavigatorAction->setToolTip("Open image navigator for navigating through image");
00406
00407
00408 QToolBar* mainActionsToolBar = new QToolBar;
00409 mainActionsToolBar->setToolButtonStyle ( Qt::ToolButtonTextBesideIcon );
00410 mainActionsToolBar->addAction(fileOpenAction);
00411 mainActionsToolBar->addAction(fileSaveProjectAction);
00412 mainActionsToolBar->addAction(closeProjectAction);
00413 mainActionsToolBar->addAction(undoAction);
00414 mainActionsToolBar->addAction(redoAction);
00415 mainActionsToolBar->addAction(imageNavigatorAction);
00416 mainWindow->addToolBar(mainActionsToolBar);
00417
00418
00419 QMenu* windowMenu = menuBar->addMenu("Window");
00420 windowMenu->addAction("&New Window",
00421 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onNewWindow()));
00422 windowMenu->addSeparator();
00423 QMenu* perspMenu = windowMenu->addMenu("&Open Perspective");
00424 QMenu* viewMenu = windowMenu->addMenu("Show &View");
00425 viewMenu->setObjectName("Show View");
00426 windowMenu->addSeparator();
00427 resetPerspAction = windowMenu->addAction("&Reset Perspective",
00428 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onResetPerspective()));
00429 closePerspAction = windowMenu->addAction("&Close Perspective",
00430 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onClosePerspective()));
00431 windowMenu->addSeparator();
00432 windowMenu->addAction("&Preferences...",
00433 QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onEditPreferences()),
00434 QKeySequence("CTRL+P"));
00435
00436
00437 berry::IPerspectiveRegistry* perspRegistry =
00438 window->GetWorkbench()->GetPerspectiveRegistry();
00439 QActionGroup* perspGroup = new QActionGroup(menuBar);
00440
00441 std::vector<berry::IPerspectiveDescriptor::Pointer> perspectives(
00442 perspRegistry->GetPerspectives());
00443
00444 bool skip = false;
00445 for (std::vector<berry::IPerspectiveDescriptor::Pointer>::iterator perspIt =
00446 perspectives.begin(); perspIt != perspectives.end(); ++perspIt)
00447 {
00448
00449
00450
00451 if (perspectiveExcludeList.size() > 0)
00452 {
00453 for (unsigned int i=0; i<perspectiveExcludeList.size(); i++)
00454 {
00455 if (perspectiveExcludeList.at(i) == (*perspIt)->GetId())
00456 {
00457 skip = true;
00458 break;
00459 }
00460 }
00461 if (skip)
00462 {
00463 skip = false;
00464 continue;
00465 }
00466 }
00467
00468 new berry::QtOpenPerspectiveAction(window,
00469 *perspIt, perspGroup);
00470 }
00471 perspMenu->addActions(perspGroup->actions());
00472
00473
00474 std::vector<berry::IViewDescriptor::Pointer>::const_iterator iter;
00475 std::map<std::string, berry::IViewDescriptor::Pointer> VDMap;
00476
00477 for (iter = viewDescriptors.begin(); iter != viewDescriptors.end(); ++iter)
00478 {
00479 if ((*iter)->GetId() == "org.blueberry.ui.internal.introview")
00480 continue;
00481 if ((*iter)->GetId() == "org.mitk.views.imagenavigator")
00482 continue;
00483 std::pair<std::string, berry::IViewDescriptor::Pointer> p(
00484 (*iter)->GetLabel(), (*iter));
00485 VDMap.insert(p);
00486 }
00487
00488
00489
00490 QToolBar* qToolbar = new QToolBar;
00491
00492 std::map<std::string, berry::IViewDescriptor::Pointer>::const_iterator
00493 MapIter;
00494 for (MapIter = VDMap.begin(); MapIter != VDMap.end(); ++MapIter)
00495 {
00496 berry::QtShowViewAction* viewAction = new berry::QtShowViewAction(window,
00497 (*MapIter).second);
00498 viewActions.push_back(viewAction);
00499 viewMenu->addAction(viewAction);
00500 if (showViewToolbar)
00501 {
00502 qToolbar->addAction(viewAction);
00503 }
00504 }
00505
00506 if (showViewToolbar)
00507 {
00508 mainWindow->addToolBar(qToolbar);
00509 }
00510 else
00511 delete qToolbar;
00512
00513
00514
00515 QMenu* helpMenu = menuBar->addMenu("Help");
00516 helpMenu->addAction("&Welcome",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onIntro()));
00517 helpMenu->addAction("&Help Contents",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onHelp()), QKeySequence("F1"));
00518 helpMenu->addAction("&About",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onAbout()));
00519
00520
00521
00522 QStatusBar* qStatusBar = new QStatusBar();
00523
00524
00525 QmitkStatusBar *statusBar = new QmitkStatusBar(qStatusBar);
00526
00527 statusBar->SetSizeGripEnabled(false);
00528
00529 QmitkProgressBar *progBar = new QmitkProgressBar();
00530 qStatusBar->addPermanentWidget(progBar, 0);
00531 progBar->hide();
00532 mainWindow->setStatusBar(qStatusBar);
00533
00534 QmitkMemoryUsageIndicatorView* memoryIndicator =
00535 new QmitkMemoryUsageIndicatorView();
00536 qStatusBar->addPermanentWidget(memoryIndicator, 0);
00537 }
00538
00539 void QmitkExtWorkbenchWindowAdvisor::PreWindowOpen()
00540 {
00541 berry::IWorkbenchWindowConfigurer::Pointer configurer = GetWindowConfigurer();
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557 this->HookTitleUpdateListeners(configurer);
00558 }
00559
00560
00561
00562
00563
00564
00565 QmitkExtWorkbenchWindowAdvisorHack::QmitkExtWorkbenchWindowAdvisorHack() : QObject()
00566 {
00567
00568 }
00569
00570 QmitkExtWorkbenchWindowAdvisorHack::~QmitkExtWorkbenchWindowAdvisorHack()
00571 {
00572
00573 }
00574
00575 void QmitkExtWorkbenchWindowAdvisorHack::onUndo()
00576 {
00577 mitk::UndoModel* model = mitk::UndoController::GetCurrentUndoModel();
00578 if (model)
00579 {
00580 if (mitk::VerboseLimitedLinearUndo* verboseundo = dynamic_cast<mitk::VerboseLimitedLinearUndo*>( model ))
00581 {
00582 mitk::VerboseLimitedLinearUndo::StackDescription descriptions =
00583 verboseundo->GetUndoDescriptions();
00584 if (descriptions.size() >= 1)
00585 {
00586 MITK_INFO << "Undo " << descriptions.front().second;
00587 }
00588 }
00589 model->Undo();
00590 }
00591 else
00592 {
00593 MITK_ERROR << "No undo model instantiated";
00594 }
00595 }
00596
00597 void QmitkExtWorkbenchWindowAdvisorHack::onRedo()
00598 {
00599 mitk::UndoModel* model = mitk::UndoController::GetCurrentUndoModel();
00600 if (model)
00601 {
00602 if (mitk::VerboseLimitedLinearUndo* verboseundo = dynamic_cast<mitk::VerboseLimitedLinearUndo*>( model ))
00603 {
00604 mitk::VerboseLimitedLinearUndo::StackDescription descriptions =
00605 verboseundo->GetRedoDescriptions();
00606 if (descriptions.size() >= 1)
00607 {
00608 MITK_INFO << "Redo " << descriptions.front().second;
00609 }
00610 }
00611 model->Redo();
00612 }
00613 else
00614 {
00615 MITK_ERROR << "No undo model instantiated";
00616 }
00617 }
00618
00619 void QmitkExtWorkbenchWindowAdvisorHack::onImageNavigator()
00620 {
00621
00622 berry::IViewPart::Pointer imageNavigatorView =
00623 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->FindView("org.mitk.views.imagenavigator");
00624 if (imageNavigatorView)
00625 {
00626 bool isImageNavigatorVisible = berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->IsPartVisible(imageNavigatorView);
00627 if (isImageNavigatorVisible)
00628 {
00629 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->HideView(imageNavigatorView);
00630 return;
00631 }
00632 }
00633 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->ShowView("org.mitk.views.imagenavigator");
00634
00635 }
00636
00637 void QmitkExtWorkbenchWindowAdvisorHack::onEditPreferences()
00638 {
00639 QmitkPreferencesDialog _PreferencesDialog(QApplication::activeWindow());
00640 _PreferencesDialog.exec();
00641 }
00642
00643 void QmitkExtWorkbenchWindowAdvisorHack::onQuit()
00644 {
00645 berry::PlatformUI::GetWorkbench()->Close();
00646 }
00647
00648 void QmitkExtWorkbenchWindowAdvisorHack::onResetPerspective()
00649 {
00650 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->ResetPerspective();
00651 }
00652
00653 void QmitkExtWorkbenchWindowAdvisorHack::onClosePerspective()
00654 {
00655 berry::IWorkbenchPage::Pointer
00656 page =
00657 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage();
00658 page->ClosePerspective(page->GetPerspective(), true, true);
00659 }
00660
00661 void QmitkExtWorkbenchWindowAdvisorHack::onNewWindow()
00662 {
00663 berry::PlatformUI::GetWorkbench()->OpenWorkbenchWindow(0);
00664 }
00665
00666 void QmitkExtWorkbenchWindowAdvisorHack::onIntro()
00667 {
00668 bool hasIntro =
00669 berry::PlatformUI::GetWorkbench()->GetIntroManager()->HasIntro();
00670 if (!hasIntro)
00671 {
00672
00673 QRegExp reg("(.*)<title>(\\n)*");
00674 QRegExp reg2("(\\n)*</title>(.*)");
00675 QFile file(":/org.mitk.gui.qt.ext/index.html");
00676 file.open(QIODevice::ReadOnly | QIODevice::Text);
00677
00678 QString text = QString(file.readAll());
00679
00680 file.close();
00681
00682 QString title = text;
00683 title.replace(reg, "");
00684 title.replace(reg2, "");
00685
00686 std::cout << title.toStdString() << std::endl;
00687
00688 QMessageBox::information(NULL, title,
00689 text, "Close");
00690
00691 }
00692 else
00693 {
00694 berry::PlatformUI::GetWorkbench()->GetIntroManager()->ShowIntro(
00695 berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow(), false);
00696 }
00697 }
00698
00699 void QmitkExtWorkbenchWindowAdvisorHack::onHelp()
00700 {
00701 berry::QtAssistantUtil::OpenActivePartHelp();
00702 }
00703
00704 void QmitkExtWorkbenchWindowAdvisorHack::onAbout()
00705 {
00706 QmitkAboutDialog* aboutDialog = new QmitkAboutDialog(QApplication::activeWindow(),NULL);
00707 aboutDialog->show();
00708 }
00709
00710 void QmitkExtWorkbenchWindowAdvisor::HookTitleUpdateListeners(
00711 berry::IWorkbenchWindowConfigurer::Pointer configurer)
00712 {
00713
00714 titlePartListener = new PartListenerForTitle(this);
00715 titlePerspectiveListener = new PerspectiveListenerForTitle(this);
00716 editorPropertyListener = new berry::PropertyChangeIntAdapter<
00717 QmitkExtWorkbenchWindowAdvisor>(this,
00718 &QmitkExtWorkbenchWindowAdvisor::PropertyChange);
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734 configurer->GetWindow()->AddPerspectiveListener(titlePerspectiveListener);
00735 configurer->GetWindow()->GetPartService()->AddPartListener(titlePartListener);
00736 }
00737
00738 std::string QmitkExtWorkbenchWindowAdvisor::ComputeTitle()
00739 {
00740 berry::IWorkbenchWindowConfigurer::Pointer configurer =
00741 GetWindowConfigurer();
00742 berry::IWorkbenchPage::Pointer currentPage =
00743 configurer->GetWindow()->GetActivePage();
00744 berry::IEditorPart::Pointer activeEditor;
00745 if (currentPage)
00746 {
00747 activeEditor = lastActiveEditor.Lock();
00748 }
00749
00750 std::string title;
00751
00752
00753
00754
00755
00756
00757 title = productName + " " + MITK_VERSION_STRING;
00758
00759 if (showVersionInfo)
00760 {
00761
00762 QString mitkRevision(MITK_SVN_REVISION);
00763 mitkRevision.replace( QRegExp("[^0-9]+(\\d+).*"), "\\1");
00764 QString versions = QString(" (ITK %1.%2.%3 VTK %4.%5.%6 Qt %7 MITK %8)")
00765 .arg(ITK_VERSION_MAJOR).arg(ITK_VERSION_MINOR).arg(ITK_VERSION_PATCH)
00766 .arg(VTK_MAJOR_VERSION).arg(VTK_MINOR_VERSION).arg(VTK_BUILD_VERSION)
00767 .arg(QT_VERSION_STR)
00768 .arg(mitkRevision);
00769
00770 title += versions.toStdString();
00771 }
00772
00773 if (currentPage)
00774 {
00775 if (activeEditor)
00776 {
00777 lastEditorTitle = activeEditor->GetTitleToolTip();
00778 if (!lastEditorTitle.empty())
00779 title = lastEditorTitle + " - " + title;
00780 }
00781 berry::IPerspectiveDescriptor::Pointer persp =
00782 currentPage->GetPerspective();
00783 std::string label = "";
00784 if (persp)
00785 {
00786 label = persp->GetLabel();
00787 }
00788 berry::IAdaptable* input = currentPage->GetInput();
00789 if (input && input != wbAdvisor->GetDefaultPageInput())
00790 {
00791 label = currentPage->GetLabel();
00792 }
00793 if (!label.empty())
00794 {
00795 title = label + " - " + title;
00796 }
00797 }
00798
00799 title += " (Not for use in diagnosis or treatment of patients)";
00800
00801 return title;
00802 }
00803
00804 void QmitkExtWorkbenchWindowAdvisor::RecomputeTitle()
00805 {
00806 berry::IWorkbenchWindowConfigurer::Pointer configurer =
00807 GetWindowConfigurer();
00808 std::string oldTitle = configurer->GetTitle();
00809 std::string newTitle = ComputeTitle();
00810 if (newTitle != oldTitle)
00811 {
00812 configurer->SetTitle(newTitle);
00813 }
00814 }
00815
00816 void QmitkExtWorkbenchWindowAdvisor::UpdateTitle(bool editorHidden)
00817 {
00818 berry::IWorkbenchWindowConfigurer::Pointer configurer =
00819 GetWindowConfigurer();
00820 berry::IWorkbenchWindow::Pointer window = configurer->GetWindow();
00821 berry::IEditorPart::Pointer activeEditor;
00822 berry::IWorkbenchPage::Pointer currentPage = window->GetActivePage();
00823 berry::IPerspectiveDescriptor::Pointer persp;
00824 berry::IAdaptable* input = 0;
00825
00826 if (currentPage)
00827 {
00828 activeEditor = currentPage->GetActiveEditor();
00829 persp = currentPage->GetPerspective();
00830 input = currentPage->GetInput();
00831 }
00832
00833 if (editorHidden)
00834 {
00835 activeEditor = 0;
00836 }
00837
00838
00839 if (activeEditor == lastActiveEditor.Lock() && currentPage == lastActivePage.Lock()
00840 && persp == lastPerspective.Lock() && input == lastInput)
00841 {
00842 return;
00843 }
00844
00845 if (!lastActiveEditor.Expired())
00846 {
00847 lastActiveEditor.Lock()->RemovePropertyListener(editorPropertyListener);
00848 }
00849
00850 lastActiveEditor = activeEditor;
00851 lastActivePage = currentPage;
00852 lastPerspective = persp;
00853 lastInput = input;
00854
00855 if (activeEditor)
00856 {
00857 activeEditor->AddPropertyListener(editorPropertyListener);
00858 }
00859
00860 RecomputeTitle();
00861 }
00862
00863 void QmitkExtWorkbenchWindowAdvisor::PropertyChange(berry::Object::Pointer , int propId)
00864 {
00865 if (propId == berry::IWorkbenchPartConstants::PROP_TITLE)
00866 {
00867 if (!lastActiveEditor.Expired())
00868 {
00869 std::string newTitle = lastActiveEditor.Lock()->GetPartName();
00870 if (lastEditorTitle != newTitle)
00871 {
00872 RecomputeTitle();
00873 }
00874 }
00875 }
00876 }
00877
00878
00879 void QmitkExtWorkbenchWindowAdvisor::SetPerspectiveExcludeList(std::vector<std::string> v)
00880 {
00881 this->perspectiveExcludeList = v;
00882 }
00883
00884 std::vector<std::string> QmitkExtWorkbenchWindowAdvisor::GetPerspectiveExcludeList()
00885 {
00886 return this->perspectiveExcludeList;
00887 }