/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.kabeja.ui.impl; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.SwingUtilities; import org.kabeja.Application; import org.kabeja.processing.ProcessingManager; import org.kabeja.ui.ApplicationMenuBar; import org.kabeja.ui.ApplicationToolBar; import org.kabeja.ui.ProcessingUIComponent; import org.kabeja.ui.ServiceManager; import org.kabeja.ui.Serviceable; import org.kabeja.ui.Startable; import org.kabeja.ui.ViewComponent; import de.miethxml.toolkit.ui.SelectorComponent; public class ProcessingUI implements Serviceable, Startable, ProcessingUIComponent, ApplicationToolBar, ApplicationMenuBar { protected ServiceManager serviceManager; protected ProcessingManager manager; protected JFrame frame; protected List components = new ArrayList(); private JPanel mainPanel; private CardLayout mainContainer; private SelectorComponent selector; private JPanel panel; private JToolBar toolbar; private JMenuBar menubar; private Map menus = new HashMap(); private Application application; public ProcessingUI() { } protected void initialize() { this.frame = new JFrame(Messages.getString("ProcessingUI.title")); //$NON-NLS-1$ this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new JPanel(); panel.setBorder(BorderFactory.createEmptyBorder()); mainContainer = new CardLayout(); mainPanel = new JPanel(mainContainer); // the toolbar toolbar = new JToolBar(); toolbar.add(Box.createHorizontalGlue()); selector = new SelectorComponent(); toolbar.add(selector.getView()); frame.getContentPane().add(toolbar, BorderLayout.NORTH); // the menubar this.menubar = new JMenuBar(); this.frame.setJMenuBar(this.menubar); //Help and about this.menubar.add(Box.createHorizontalGlue()); JMenu menu = new JMenu(Messages.getString("ProcessingUI.menu.help")); //$NON-NLS-1$ menu.add(new AboutAction()); this.menubar.add(menu); this.menus.put(ApplicationMenuBar.MENU_ID_HELP, menu); menu = new JMenu(Messages.getString("ProcessingUI.menu.file")); //$NON-NLS-1$ menu.add(new AbstractAction(Messages.getString( "ProcessingUI.menu.file.exit")) { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { shutdown(); } }); } }); this.setMenu(ApplicationMenuBar.MENU_ID_FILE, menu); this.frame.getContentPane().add(mainPanel, BorderLayout.CENTER); this.frame.setSize(700,620); this.frame.validate(); } public void setVisible(boolean b) { if (b) { this.frame.setVisible(true); } else { this.frame.setVisible(false); // this.frame.dispose(); } } public void addViewComponent(ViewComponent component) { int index = components.size(); components.add(component); JComponent view = component.getView(); if (mainPanel.getMinimumSize().getWidth() < view.getPreferredSize() .getWidth()) { mainPanel.setPreferredSize(view.getPreferredSize()); } mainPanel.add(view, "" + index); //$NON-NLS-1$ AbstractAction action = new SwitchAction(component.getTitle(), index); // add to selector component selector.addAction(action); } public void setServiceManager(ServiceManager manager) { this.serviceManager = manager; org.kabeja.tools.Component[] objects = this.serviceManager.getServiceComponents(Application.SERVICE); this.application = (Application) objects[0]; this.initialize(); objects = this.serviceManager.getServiceComponents(ViewComponent.SERVICE); for (int i = 0; i < objects.length; i++) { this.addViewComponent((ViewComponent) objects[i]); } } public void setProcessingManager(ProcessingManager manager) { this.manager = manager; } public void start() { this.frame.setVisible(true); } public void stop() { this.frame.setVisible(false); } public void addAction(Action action) { JButton button = new JButton(action); button.setToolTipText(button.getText()); button.setText(""); this.addAction(button); } public void addAction(Component component) { if (this.toolbar.getComponentCount() > 1) { this.toolbar.add(component, this.toolbar.getComponentCount() - 2); } else { this.toolbar.add(component); } } public boolean hasMenu(String id) { return this.menus.containsKey(id); } public void setAction(String menuID, Action action) { this.setJMenuItem(menuID, new JMenuItem(action)); } public void setJMenuItem(String menuID, JMenuItem item) { if (this.hasMenu(menuID)) { JMenu menu = (JMenu) this.menus.get(menuID); if (menuID.equals(ApplicationMenuBar.MENU_ID_FILE)) { menu.add(item, 0); } else { menu.add(item); } } } public void setMenu(String menuID, JMenu menu) { if (!this.hasMenu(menuID)) { this.menus.put(menuID, menu); //let the help menu at the end this.menubar.add(menu,this.menubar.getComponentCount()-2); } } protected void shutdown() { this.application.stop(); } public class SwitchAction extends AbstractAction { int index; public SwitchAction(String label, int index) { super(label); this.index = index; } public void actionPerformed(ActionEvent e) { mainContainer.show(mainPanel, "" + this.index); //$NON-NLS-1$ } } }