/* * Copyright (c) 2009, 2010, 2011 Daniel Rendall * This file is part of FractDim. * * FractDim is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FractDim 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FractDim. If not, see <http://www.gnu.org/licenses/> */ package uk.co.danielrendall.fractdim.app.gui; import uk.co.danielrendall.fractdim.app.FractDim; import uk.co.danielrendall.fractdim.app.gui.actions.ActionRepository; import uk.co.danielrendall.fractdim.logging.Log; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /** * Created by IntelliJ IDEA. * User: daniel * Date: 03-Apr-2010 * Time: 18:55:47 * To change this template use File | Settings | File Templates. */ public class MainWindow extends JFrame { private final ActionRepository repository = ActionRepository.instance(); private final JTabbedPane tabPane; public MainWindow() throws HeadlessException { super("Fractal Dimension"); setIconImage(Toolkit.getDefaultToolkit().getImage(MainWindow.class.getResource("/icons/16/fractdim.png"))); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addWindowListener(new WindowAdapter() { public void windowActivated(WindowEvent e) { Log.gui.debug("Window Activated"); } public void windowDeiconified(WindowEvent e) { Log.gui.debug("Window Deiconified"); } public void windowIconified(WindowEvent e) { Log.gui.debug("Window Iconified"); } public void windowOpened(WindowEvent e) { Log.gui.debug("Window Opened"); } }); setJMenuBar(createMenuBar()); getContentPane().setLayout(new BorderLayout()); JToolBar toolBar = createToolBar(); tabPane = createTabPane(); tabPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { FractalPanel panel = (FractalPanel) tabPane.getSelectedComponent(); FractDim.instance().notifyPanelChange(panel); } }); getContentPane().add(toolBar, BorderLayout.NORTH); getContentPane().add(tabPane, BorderLayout.CENTER); } public void close() { dispose(); } private JMenuBar createMenuBar() { JMenuBar menuBar = new JMenuBar(); menuBar.add(createFileMenu()); menuBar.add(createDiagramMenu()); return menuBar; } private JMenu createFileMenu() { JMenu menu = new JMenu("File"); menu.add(repository.getFileOpen()); menu.add(repository.getFileClose()); menu.addSeparator(); menu.add(repository.getFileCalculate()); menu.addSeparator(); menu.add(repository.getFileExport()); menu.addSeparator(); menu.add(repository.getFileExit()); return menu; } private JMenu createDiagramMenu() { JMenu menu = new JMenu("Diagram"); menu.add(repository.getDiagramZoomIn()); menu.add(repository.getDiagramZoomOut()); return menu; } private JToolBar createToolBar() { JToolBar toolBar = new JToolBar(); toolBar.add(repository.getFileOpen()); toolBar.add(repository.getFileClose()); toolBar.addSeparator(); toolBar.add(repository.getFileCalculate()); toolBar.addSeparator(); toolBar.add(repository.getFileExport()); toolBar.addSeparator(); toolBar.add(repository.getFileExit()); toolBar.addSeparator(); toolBar.add(repository.getDiagramZoomIn()); toolBar.add(repository.getDiagramZoomOut()); return toolBar; } private JTabbedPane createTabPane() { return new JTabbedPane(); } public void addTab(String title, FractalPanel panel) { tabPane.add(title, panel); tabPane.setSelectedComponent(panel); } public void updateTabTitle(String title, FractalPanel panel) { int index = tabPane.indexOfComponent(panel); if (index > -1) { tabPane.setTitleAt(index, title); } else { Log.gui.warn("Asked to set title for non-existent panel"); } } public void removeTab(FractalPanel panel) { tabPane.remove(panel); } public void disableMenuItems() { ActionRepository repository = ActionRepository.instance(); repository.getFileClose().setEnabled(false); repository.getFileCalculate().setEnabled(false); repository.getFileExport().setEnabled(false); repository.getDiagramZoomIn().setEnabled(false); repository.getDiagramZoomOut().setEnabled(false); } }