36 QMenuProxy(Type type, QWidget* parent =
nullptr)
37 : menu(nullptr), menuBar(nullptr)
41 case MenuBar: menuBar =
new QMenuBar(parent);
break;
42 case Menu: menu =
new QMenu(parent);
break;
46 bool isMenuBar()
const 48 return menuBar !=
nullptr;
51 void setTitle(
const QString& title)
54 menu->setTitle(title);
57 void setIcon(
const QIcon& icon)
63 QList<QAction*> actions()
const 65 return menu ? menu->actions() : menuBar->actions();
68 void removeAction(QAction* action)
70 menu ? menu->removeAction(action) : menuBar->removeAction(action);
73 bool isEnabled()
const 75 return menu ? menu->isEnabled() : menuBar->isEnabled();
78 void setEnabled(
bool enabled)
80 menu ? menu->setEnabled(enabled) : menuBar->setEnabled(enabled);
83 QAction* getParentItem()
const 85 return menu ? menu->menuAction() :
nullptr;
93 struct NullOverrides:
public IContributionManagerOverrides
97 int GetEnabled(
const IContributionItem* )
const override 102 int GetVisible(
const IContributionItem* )
const override 108 void MenuManager::HandleAboutToShow()
110 if (this->removeAllWhenShown)
114 emit AboutToShow(
this);
115 this->
Update(
false,
false);
118 void MenuManager::HandleAboutToHide()
120 emit AboutToHide(
this);
123 MenuManager::MenuManager(
const QString& text,
const QString&
id)
124 : id(id), menu(nullptr), menuItem(nullptr)
125 , menuText(text), parent(nullptr)
126 , removeAllWhenShown(false), visible(true)
132 : id(id), menu(nullptr), menuItem(nullptr)
133 , menuText(text), image(image)
134 , parent(nullptr), removeAllWhenShown(false),
visible(true)
153 menu =
new QMenuProxy(QMenuProxy::Menu, parent);
154 this->InitializeMenu();
163 menu =
new QMenuProxy(QMenuProxy::MenuBar, parent);
166 return menu->menuBar;
177 this->disconnect(listener);
190 this->FillMenu(parent, before);
195 this->FillMenu(parent, before);
198 void MenuManager::FillMenu(QWidget* parent, QAction* before)
202 menuItem =
new QAction(parent);
205 parent->insertAction(before, menuItem);
209 menuItem->setIcon(image);
213 menu =
new QMenuProxy(QMenuProxy::Menu, parent);
216 if (!menu->isMenuBar())
217 menuItem->setMenu(menu->menu);
219 this->InitializeMenu();
239 int separator = path.indexOf(
'/');
242 id = path.left(separator);
243 rest = path.mid(separator + 1);
253 return manager->FindUsingPath(rest);
270 if (definitionId ==
"")
299 overrides =
new NullOverrides();
303 overrides = parent->GetOverrides();
317 return removeAllWhenShown;
347 if (removeAllWhenShown)
354 bool visibleChildren =
false;
357 if (item->IsVisible() && !item->IsSeparator())
359 visibleChildren =
true;
364 return visibleChildren;
390 overrides = newOverrides;
401 this->removeAllWhenShown = removeAll;
411 this->definitionId = definitionId;
416 this->UpdateMenuItem();
421 QList<IContributionItem::Pointer> items =
GetItems();
423 for (
int i = 0; i < items.size(); i++)
425 items[i]->Update(property);
428 if (menu !=
nullptr && menu->getParentItem() !=
nullptr)
435 menu->getParentItem()->setText(text);
440 menu->getParentItem()->setIcon(image);
447 this->
Update(force,
false);
452 this->
Update(force,
true);
455 void MenuManager::InitializeMenu()
460 if (!menu->isMenuBar())
462 this->connect(menu->menu, SIGNAL(aboutToShow()), SLOT(HandleAboutToShow()));
463 this->connect(menu->menu, SIGNAL(aboutToHide()), SLOT(HandleAboutToHide()));
470 void MenuManager::UpdateMenuItem()
472 if (menuItem && menu)
474 bool enabled = removeAllWhenShown || menu->actions().size() > 0;
475 if (menu->isEnabled() != enabled)
477 menuItem->setEnabled(enabled);
484 if (menu->isMenuBar())
486 ci->Fill(menu->menuBar, before);
490 ci->Fill(menu->menu, before);
501 QList<IContributionItem::Pointer> items = this->
GetItems();
502 QList<IContributionItem::Pointer> clean;
506 if (!ci->IsVisible())
510 if (ci->IsSeparator())
520 if (clean.size() > 0)
522 clean.push_back(separator);
531 QList<QAction*> mi = menu->actions();
533 for (
int i = 0; i < mi.size(); i++)
539 menu->removeAction(mi[i]);
543 if(ci->IsDynamic() && ci->IsDirty())
545 menu->removeAction(mi[i]);
552 mi = menu->actions();
556 for (QList<IContributionItem::Pointer>::Iterator e = clean.begin();
557 e != clean.end(); ++e)
563 if (srcIx < mi.size())
565 dest = mi[srcIx]->data().value<
Object::Pointer>().Cast<IContributionItem>();
572 if (dest && src == dest)
577 else if (dest && dest->IsSeparator() && src->IsSeparator())
579 mi[srcIx]->setData(QVariant::fromValue<Object::Pointer>(src));
585 int start = menu->actions().size();
587 this->
DoItemFill(src, destIx >= start ?
nullptr : menu->actions().at(destIx));
588 int newItems = menu->actions().size() - start;
590 for (
int i = 0; i < newItems; ++i)
592 menu->actions().at(destIx++)->setData(QVariant::fromValue<Object::Pointer>(src));
607 item = subItem->GetInnerItem();
611 mm->UpdateAll(force);
618 for (; srcIx < mi.size(); srcIx++)
620 menu->removeAction(mi[srcIx]);
638 mm->UpdateAll(force);
644 this->UpdateMenuItem();
647 void MenuManager::DumpActionInfo(QMenuProxy* menu)
649 if (menu->isMenuBar())
652 DumpActionInfo(menu->menuBar, 1);
657 DumpActionInfo(menu->menu, 1);
661 void MenuManager::DumpActionInfo(QWidget* widget,
int level)
663 QString indent =
" |";
664 for (
int i = 0; i < level; ++i) indent +=
"--";
665 foreach(QAction* action, widget->actions())
667 qDebug() << qPrintable(indent) << action->text() <<
"[" << action <<
"]";
670 DumpActionInfo(action->menu(), level+1);
void SetDirty(bool dirty)
QList< SmartPointer< IContributionItem > > GetItems() const override
virtual void MarkDirty()=0
SmartPointer< Other > Cast() const
static void Update(vtkPolyData *)
static const QString IMAGE
berry::SmartPointer< Self > Pointer
void MarkDirty() override
SmartPointer< IContributionItem > Find(const QString &id) const override
static const QString TEXT
bool IsDirty() const override
The custom viewer plugin implements simple viewer functionality presented in a customized look and feel It was developed to demonstrate extensibility and customizability of the blueberry application framework As an example for the GUI customization capabilities provided by the BlueBerry application the custom viewer plugin was developed It features simple viewer functionality presented in a customized look and feel The custom viewer consists of two i e a viewer perspective and a DICOM perspective As part of the viewer an instance of QmitkDataManagerView allows for data selection Visualization of the selected data is then performed by a simple render window view According data can either be directly loaded from file or be imported as DICOM data DICOM import functionality is accessible from the DICOM perspective incorporating the QmitkDicomExternalDataWidget The customization of Qt Stylesheets is used to give the application a non native look and feel This is further emphasized by a Tab Widget like unification of the perspectives with the according perspective bar In addition to an absence of menu
void SetOverrides(const SmartPointer< IContributionManagerOverrides > &newOverrides)