Hi Sascha,

thanks. I went for the subclassing option. So, I subclassed 
QmitkExtWorkbenchWindowAdvisor and wrote a PostWindowCreate method to connect 
back to my own slot in that class, which meant my subclass also extends 
QObject. It seems to trigger the method, so I think it should be ok.

Thanks

Matt

PS. Also raised bug 9182.


QmitkMyAppWorkbenchWindowAdvisor::QmitkMyAppWorkbenchWindowAdvisor(
    berry::WorkbenchAdvisor* wbAdvisor,
    berry::IWorkbenchWindowConfigurer::Pointer configurer)
: QmitkExtWorkbenchWindowAdvisor(wbAdvisor, configurer)
{

}

void QmitkMyAppWorkbenchWindowAdvisor::PostWindowCreate()
{
  QmitkExtWorkbenchWindowAdvisor::PostWindowCreate();

  // All this to call our own About dialog box.

  // 1. Get hold of menu bar
  berry::IWorkbenchWindow::Pointer window =
   this->GetWindowConfigurer()->GetWindow();
  QMainWindow* mainWindow =
   static_cast<QMainWindow*> (window->GetShell()->GetControl());
  QMenuBar* menuBar = mainWindow->menuBar();
  QList<QMenu *> allMenus = menuBar->findChildren<QMenu *>();

  for (int i = 0; i < allMenus.count(); i++)
  {
    QList<QAction*> actionsForMenu = 
allMenus.at<http://allMenus.at>(i)->findChildren<QAction*>();
    for (int j = 0; j < actionsForMenu.count(); j++)
    {
      QAction *action = actionsForMenu.at<http://actionsForMenu.at>(j);

      if (action != NULL && action->text() == "&About")
      {
        // 2. Disconnect existing slot
        action->disconnect();

        // 3. Reconnect slot to our method to call our About Dialog.
        QObject::connect(action, SIGNAL(triggered()), this, 
SLOT(OnHelpAbout()));
      }

    }
  }
}

void QmitkMyAppWorkbenchWindowAdvisor::OnHelpAbout()
{
  std::cerr << "OnHelpAbout::Triggered()" << std::endl;
}


On 25 Aug 2011, at 19:48, Sascha Zelzer wrote:

Hi Matt,

Your are right that the QmitkExtWorkbenchWindowAdvisor contains a lot of 
sub-optimal code due to the lack of a generic mechanism for plugins to 
contribute menu items. However, even for a mid-term solution, I see only two 
possibilities:

1.) Create your own QmitkExtWorkbenchWindowAdvisor, either by subclassing or 
copying the code, as Miklos already suggested. You don't need a separate 
plug-in, just put the code where your berry::IApplication implementation lives.

2.) We could add a method in QmitkExtWorkbenchWindowAdvisor which would allow 
you to inject a custom about dialog, or something similar. You would then just 
use QmitkExtWorkbenchWindowAdvisor, similar as the QmitkExtAppWorkbenchAdvisor 
class in org.mitk.gui.qt.extapplication does.

On 08/25/2011 06:07 PM, Clarkson, Matt wrote:

I also noticed that on a MAC, the About dialog box has no exit button, so I 
have to kill the application to get rid of it.
Could you maybe enter a bug report?

Thanks,
Sascha


------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management 
Up to 160% more powerful than alternatives and 25% more efficient. 
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
mitk-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to