/* * Moonlight|3D Copyright (C) 2005 The Moonlight|3D team * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Created on Jul 6, 2005 */ package ml.ui.core; import ml.core.State; import ml.core.exceptions.Exception; import com.trolltech.qt.gui.QAction; import com.trolltech.qt.gui.QCloseEvent; import com.trolltech.qt.gui.QMainWindow; import com.trolltech.qt.gui.QMenu; import com.trolltech.qt.gui.QStatusBar; import com.trolltech.qt.gui.QWidget; public class ApplicationWindow extends QMainWindow { private FrameLayout frameLayout; public ApplicationWindow(FrameLayout layout, boolean blockOnOpen) { super(); setWindowTitle(layout.getTitle()); this.frameLayout=layout; UIManager uiManager=ml.core.State.getInstance().getUIManager(); QWidget toplevel=uiManager.getMainWidget(this, layout.getName()); setCentralWidget(toplevel); rebuildMenuBar(); setStatusBar(new QStatusBar()); uiManager.registerApplicationWindow(this); } private void buildMenu(MenuNode menu, QMenu parent) { for(MenuNode child : menu.getChildren()) { if(child.getType()==MenuNode.Type.Menu) { // add submenu and recurse QMenu childMenu=new QMenu(child.getName(),parent); childMenu.setTearOffEnabled(true); buildMenu(child,childMenu); parent.addMenu(childMenu); } else if(child.getType()==MenuNode.Type.ExtensionPoint) { // process contributions as if they were at the current menu level for(MenuNode contribution : child.getChildren()) { buildMenu(contribution,parent); } } else if(child.getType()==MenuNode.Type.Entry) { // retrieve action and append it QAction action; try { action=ml.core.State.getInstance().getUIManager().getActionByName(child.getActionName()); } catch (Exception e) { // build a greyed out default action action=new QAction(child.getName(),parent); action.setDisabled(true); } action.setText(child.getName()); parent.addAction(action); } else if(child.getType()==MenuNode.Type.Generator) { // retrieve generator and append generated actions try { ActionGenerator generator; generator=ml.core.State.getInstance().getUIManager().getActionGeneratorByName(child.getName()); for(Action action : generator.getActions()) { parent.addAction(action); } } catch (Exception e) { // build a greyed out default action QAction defaultAction=new QAction(child.getName(),parent); defaultAction.setDisabled(true); parent.addAction(defaultAction); } } else if(child.getType()==MenuNode.Type.Separator) { parent.addSeparator(); } } } private void rebuildMenuBar(MenuNode menu) { for(MenuNode child : menu.getChildren()) { if(child.getType()==MenuNode.Type.Menu) { // add submenu and recurse QMenu childMenu=new QMenu(child.getName(),menuBar()); childMenu.setTearOffEnabled(true); buildMenu(child,childMenu); menuBar().addMenu(childMenu); } else if(child.getType()==MenuNode.Type.ExtensionPoint) { // process contributions as if they were at the current menu level for(MenuNode contribution : child.getChildren()) { rebuildMenuBar(contribution); } } else if(child.getType()==MenuNode.Type.Entry) { // retrieve action and append it QAction action; try { action=ml.core.State.getInstance().getUIManager().getActionByName(child.getActionName()); } catch (Exception e) { // build a greyed out default action action=new QAction(child.getName(),menuBar()); action.setDisabled(true); } menuBar().addAction(action); } else if(child.getType()==MenuNode.Type.Generator) { // retrieve generator and append generated actions try { ActionGenerator generator; generator=ml.core.State.getInstance().getUIManager().getActionGeneratorByName(child.getName()); for(Action action : generator.getActions()) { menuBar().addAction(action); } } catch (Exception e) { // build a greyed out default action QAction defaultAction=new QAction(child.getName(),menuBar()); defaultAction.setDisabled(true); menuBar().addAction(defaultAction); } } else if(child.getType()==MenuNode.Type.Separator) { menuBar().addSeparator(); } } } public void rebuildMenuBar() { menuBar().clear(); MenuNode menu=frameLayout.getMenu(); rebuildMenuBar(menu); } @Override public void closeEvent(QCloseEvent event) { ml.core.State.getInstance().getUIManager().unregisterApplicationWindow(this); // replace layout in UIManager with this layout State.getInstance().getUIManager().addOrReplaceLayout(frameLayout); dispose(); } }