package captor.windowsystem; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.KeyboardFocusManager; import java.awt.Rectangle; import java.awt.event.WindowEvent; import java.io.File; import java.util.Observable; import java.util.Observer; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import captor.lib.def.Constant; import captor.lib.intl.MyIntl; import captor.lib.util.StringUtil; import captor.modelsystem.Model; import captor.modelsystem.Project; import captor.modelsystem.config.GUIHiddenConfig; import captor.projectsystem.ProjectSystem; import captor.windowsystem.main.WindowMaker; import captor.windowsystem.util.IconUtil; import captor.windowsystem.util.MyKeyEventDispatcher; /** * Main application window. * * <p> * This class will instantiate every main window component. * </p> * * @author Kicho */ public class MainWindow extends CaptorFrame implements Observer { public static final long serialVersionUID = 70563; private WindowMaker windowMaker; JSplitPane hSplitPane, vSplitPane; //contador de janelas. qdo ele for igual a zero (system.exit()) private int verticalBarPosition = 50; //a primeira janela deve come�ar com esse construtor public MainWindow(Model model) { super(model); model.getGui().setCaptorWindow(this); model.getConfig().getGuiConfig().addObserver(this); model.getGui().getGuiControl().addObserver(this); MyKeyEventDispatcher kev = new MyKeyEventDispatcher(); KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(kev); } //------------------------------------------------------------------------- public void init() throws Exception { startFrame(); this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); windowMaker = new WindowMaker(this, model); //configurando este frame this.setTitle("Captor"); this.setIconImage(IconUtil.getImage("captor.jpg")); //configurando o tamanho do frame this.setBounds(new Rectangle(model.getConfig().getGuiHiddenConfig().getWinPosX(), model.getConfig().getGuiHiddenConfig().getWinPosY(), model.getConfig().getGuiHiddenConfig().getWinPosWidth(), model.getConfig().getGuiHiddenConfig().getWinPosHeight())); if (model.getConfig().getGuiHiddenConfig().getWindowState() == GUIHiddenConfig.WINDOW_MAXIMIZED ) this.setExtendedState(MAXIMIZED_BOTH); //criando o menu do frame this.setJMenuBar(windowMaker.createSmartMenuBar()); //adicionando os listeners // addWindowListener(this); // addWindowStateListener(this); //criando o cabe�alho com a barra de ferramentas this.getContentPane().add(windowMaker.createHeader(), BorderLayout.PAGE_START); //criando o corpo principal, a barra de controle e a barra de views JPanel bodyPanel = windowMaker.createBody(); JPanel locationPanel = windowMaker.createLocation(); JPanel viewPanel = windowMaker.createView(); JScrollPane bodyScrollPane = new JScrollPane(bodyPanel); hSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, bodyScrollPane, viewPanel); vSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, locationPanel, hSplitPane); vSplitPane.setDividerLocation(model.getConfig().getGuiHiddenConfig().getVSplitPosition()); hSplitPane.setDividerLocation(model.getConfig().getGuiHiddenConfig().getHSplitPosition()); this.getContentPane().add(vSplitPane, BorderLayout.CENTER); toFront(); checkPermissions(model.getConfig().getSystemConfig().getInstallPath()); endFrame(); } //------------------------------------------------------------------------- private void startFrame() { } private void endFrame() { } //------------------------------------------------------------------------- // public void windowStateChanged(WindowEvent e) { // if (e.getNewState() == 6 ) { // //a janela foi maximizada // model.getConfig().getGuiHiddenConfig().setWindowState(GUIHiddenConfig.WINDOW_MAXIMIZED); // } // else if (e.getNewState() == 0 ) { // //a janela foi desmaximizada // model.getConfig().getGuiHiddenConfig().setWindowState(GUIHiddenConfig.WINDOW_CUSTOM_SIZE); // } // } //------------------------------------------------------------------------- protected void windowClosing2(WindowEvent e) { exit(); } //------------------------------------------------------------------------- private void saveModel() { if ( model.isProduction() == true ) { Dimension d = this.getSize(); model.getConfig().getGuiHiddenConfig().setWinPosX(this.getX() + 40); model.getConfig().getGuiHiddenConfig().setWinPosY(this.getY() + 40); model.getConfig().getGuiHiddenConfig().setWinPosWidth((int) d.getWidth()); model.getConfig().getGuiHiddenConfig().setWinPosHeight((int) d.getHeight()); model.getConfig().getGuiHiddenConfig().setHSplitPosition(hSplitPane.getLastDividerLocation()); model.getConfig().getGuiHiddenConfig().setVSplitPosition(vSplitPane.getLastDividerLocation()); model.getConfig().getGuiHiddenConfig().setHSplitPosition(hSplitPane.getDividerLocation()); model.getConfig().getGuiHiddenConfig().setVSplitPosition(vSplitPane.getDividerLocation()); model.save(); } } //------------------------------------------------------------------------- private void exit() { Dimension d = this.getSize(); //salva o estado da janela model.getConfig().getGuiHiddenConfig().setWinPosX(this.getX()); model.getConfig().getGuiHiddenConfig().setWinPosY(this.getY()); model.getConfig().getGuiHiddenConfig().setWinPosWidth((int) d.getWidth()); model.getConfig().getGuiHiddenConfig().setWinPosHeight((int) d.getHeight()); model.getConfig().getGuiHiddenConfig().setHSplitPosition(hSplitPane.getLastDividerLocation()); model.getConfig().getGuiHiddenConfig().setVSplitPosition(vSplitPane.getLastDividerLocation()); model.getConfig().getGuiHiddenConfig().setHSplitPosition(hSplitPane.getDividerLocation()); model.getConfig().getGuiHiddenConfig().setVSplitPosition(vSplitPane.getDividerLocation()); model.save(); //salvar o projeto if ( (model.getProject() != null) && model.getProject().getStatus() == Project.UNSAVED ) { int res = JOptionPane.showConfirmDialog(model.getGui().getCaptorWindow(), "Is there an unsaved project opened by editor.\nDo you wish to save it before exit the application?", "Exit", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if ( res == JOptionPane.OK_OPTION ) { ProjectSystem pj = new ProjectSystem(model); boolean ret = pj.save(); if ( ! ret ) { return; } } } //fechar a janela close(); } //------------------------------------------------------------------------- public void update(Observable observable, Object obj) { if ( obj.equals(Constant.EXIT) ) { exit(); } else if ( obj.equals(Constant.SAVE_MODEL) ) { saveModel(); } else if ( obj.equals(Constant.SHOW_NAVIGATOR) ) { vSplitPane.setDividerLocation(verticalBarPosition); vSplitPane.setEnabled(true); } else if ( obj.equals(Constant.HIDE_NAVIGATOR) ) { verticalBarPosition = vSplitPane.getDividerLocation(); vSplitPane.setDividerLocation(28); vSplitPane.setEnabled(false); } } //------------------------------------------------------------------------- private void checkPermissions(String installPath) { File path = new File(installPath); boolean flag = true; File config = new File(path, "config"); if (! config.exists()) { flag &= config.mkdirs(); } else { flag &= config.canWrite(); } if (! flag) { checkPermissionError(config); } File projects = new File(path, "projects"); if (! projects.exists()) { flag &= projects.mkdirs(); } else { flag &= projects.canWrite(); } if (! flag) { checkPermissionError(projects); } if (! flag) { System.exit(0); } } //--------------------------------------------------------------------- private void checkPermissionError(File file) { JOptionPane.showMessageDialog(model.getGui().getCaptorWindow(), StringUtil.formatMessage(MyIntl.MSG83, file.getAbsolutePath())); } //--------------------------------------------------------------------- }