Package net.charabia.jsmoothgen.application.gui

Source Code of net.charabia.jsmoothgen.application.gui.MasterPanel

/*
  JSmooth: a VM wrapper toolkit for Windows
  Copyright (C) 2003 Rodrigo Reyes <reyes@charabia.net>
  This program 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 2 of the License, or
  (at your option) any later version.
  This program 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 this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

package net.charabia.jsmoothgen.application.gui;

import net.charabia.jsmoothgen.application.*;
import net.charabia.jsmoothgen.skeleton.*;
import net.charabia.jsmoothgen.application.gui.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.util.*;
import com.l2fprod.common.swing.*;

import se.datadosen.component.RiverLayout;

public class MasterPanel extends JPanel
{
    private JButtonBar m_leftBar = new JButtonBar(JButtonBar.VERTICAL);
    private ButtonGroup m_leftGroup = new ButtonGroup();
    private JPanel m_mainpanel = new JPanel();
    private JScrollBar m_mainpanelVBar;
    private JScrollPane m_scrollpane;

    //    private ResourceBundle m_texts;
   
    private Vector m_displayedElements = new Vector();

    private JSmoothModelBean m_model = new JSmoothModelBean();
    private java.io.File m_modelLocation = null;

    private EditorPool m_edPool = new EditorPool();

    private String m_currentPanelName = "";

    private Object[] m_skelElements = {
  new net.charabia.jsmoothgen.application.gui.editors.SkeletonChooser(),
  new net.charabia.jsmoothgen.application.gui.editors.SkeletonPropertiesEditor()
  //  new net.charabia.jsmoothgen.application.gui.editors.SkeletonProperties()
    };

    private Object[] m_execElements = {
  "GUI_LABEL_EXECUTABLE_SETTINGS",
  new net.charabia.jsmoothgen.application.gui.editors.ExecutableName() ,
  new net.charabia.jsmoothgen.application.gui.editors.ExecutableIcon() ,
  new net.charabia.jsmoothgen.application.gui.editors.CurrentDirectory()
    };

    private Object[] m_appElements = {
  "GUI_LABEL_APPLICATION_SETTINGS",
  new net.charabia.jsmoothgen.application.gui.editors.MainClass(),
  new net.charabia.jsmoothgen.application.gui.editors.ApplicationArguments(),
  "GUI_LABEL_EMBEDDEDJAR_SETTINGS",
  new net.charabia.jsmoothgen.application.gui.editors.EmbeddedJar(),
  new net.charabia.jsmoothgen.application.gui.editors.ClassPath()
    };

    private Object[] m_jvmSelElements = {
  "GUI_LABEL_JAVA_VERSION",
  new net.charabia.jsmoothgen.application.gui.editors.MinVersion(),
  new net.charabia.jsmoothgen.application.gui.editors.MaxVersion(),
  "GUI_LABEL_BUNDLEDJRE",
  new net.charabia.jsmoothgen.application.gui.editors.JVMBundle(),
  new net.charabia.jsmoothgen.application.gui.editors.JVMSearchSequence()
    };

    private Object[] m_jvmCfgElements = {
  "GUI_LABEL_MEMORYSETTINGS",
  new net.charabia.jsmoothgen.application.gui.editors.MaxMemoryHeap(),
  new net.charabia.jsmoothgen.application.gui.editors.InitialMemoryHeap(),
  new net.charabia.jsmoothgen.application.gui.editors.JavaProperties()
    };

    private Object[] m_jsInfo = {
  new net.charabia.jsmoothgen.application.gui.editors.JSmoothInfo()
    };

    public MasterPanel()
    {
  setLayout(new BorderLayout());
  add(BorderLayout.WEST, m_scrollpane = new JScrollPane(m_leftBar));
   JScrollPane scp = new JScrollPane(m_mainpanel);
   m_mainpanelVBar = scp.getVerticalScrollBar();
  add(BorderLayout.CENTER, scp);
  scp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  //  add(BorderLayout.CENTER, m_mainpanel);
  m_mainpanel.setLayout(new RiverLayout());

  addAction("Welcome", "/icons/stock_form-properties.png", m_jsInfo);
  addAction("Skeleton", "/icons/stock_new-template.png", m_skelElements);
  addAction("Executable", "/icons/stock_autopilot-24.png", m_execElements);
  addAction("Application", "/icons/stock_form-image-control.png", m_appElements);
  addAction("JVM Selection", "/icons/stock_search.png", m_jvmSelElements);
  addAction("JVM Configuration", "/icons/stock_form-properties.png", m_jvmCfgElements);
 
  setupPanel(m_jsInfo);
    }

    private String getLocaleText(String key)
    {
  try {
      String value = Main.TEXTS.getString(key);
      return value;
  } catch (Exception exc)
      {
      }
  return key;
    }

    private void addAction(final String name, String iconloc, final Object[] els)
    {
  final Action a = new AbstractAction( name, new ImageIcon(getClass().getResource(iconloc))) {
    public void actionPerformed(ActionEvent e)
    {
        if (m_currentPanelName.equals(name))
      return;
        setupPanel(els);
        m_currentPanelName = name;
    }
      };
 
  JToggleButton jtb = new JToggleButton(a);
  m_leftGroup.add(jtb);
  m_leftBar.add(jtb);
    }

    public void setupPanel(Object[] els)
    {
  fireUpdateModel();
  detachAll();
 
  m_mainpanel.removeAll();
  m_displayedElements.removeAllElements();

  //  System.out.println("Adding " + els);

  if (els == null)
      return;

  JPanel pgroup = null;

  for (int i=0; i<els.length; i++)
      {
    if (els[i] instanceof Editor)
        {
      //      Editor ed = m_edPool.getInstance(els[i]);
      Editor ed = (Editor)els[i];
      if (ed.needsBigSpace() && (pgroup != null))
          {
        m_mainpanel.add("br hfill", pgroup);
        pgroup = null;
          }

      if (pgroup == null)
          {
        pgroup = new JPanel();
        pgroup.setLayout(new RiverLayout());
        javax.swing.border.TitledBorder title = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED), "");
          }

      if (ed.needsFullSpace())
          {
        pgroup.add("left hfill vfill", ed);
        String gc = "br hfill vfill";
        m_mainpanel.add(gc, ed);
        ed.setMaximumSize(new java.awt.Dimension(300,300));
        m_mainpanel.add("tab", new JLabel("..."));
        pgroup = null;
        // m_scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        //m_scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
          }
      else if (ed.needsBigSpace())
          {
        javax.swing.border.TitledBorder title = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED), getLocaleText(ed.getLabel()));
        pgroup.setBorder(title);
        pgroup.add("left vtop", new HelpButton(getLocaleText(ed.getDescription())));
        pgroup.add("tab left hfill", ed);
        String gc = "br hfill";
         if (i+1>=els.length)
             gc = "p hfill vfill";
        m_mainpanel.add(gc, pgroup);
        pgroup = null;
          }
      else
          {
        if (ed.useDescription())
            {
          pgroup.add("br left", new JLabel(getLocaleText(ed.getLabel())));
          pgroup.add("tab", new HelpButton(getLocaleText(ed.getDescription())));
          pgroup.add("tab hfill", ed);
            }
        else
            {
          pgroup.add("left hfill", ed);
            }
          }

      m_displayedElements.add(ed);
        }
    else if (els[i] instanceof String)
        {
      //      System.out.println("TITLE: " + els[i]);
      if (pgroup != null)
          {
        m_mainpanel.add("br hfill", pgroup);
        pgroup = null;
          }

      pgroup = new JPanel();
      pgroup.setLayout(new RiverLayout());

      javax.swing.border.TitledBorder title = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED), getLocaleText((String)els[i]));
      pgroup.setBorder(title);
        }

    //     try {

    //     } catch (Exception exc)
    //         {
    //       exc.printStackTrace();
    //         }
      }
  if (pgroup != null)
      {
    m_mainpanel.add("p hfill", pgroup);
      }
  m_mainpanelVBar.setValue(0);
  attachAll();

  validate();
  repaint();
    }

    public void fireUpdateModel()
    {
  for (Iterator i=m_displayedElements.iterator(); i.hasNext(); )
      {
    Editor ed = (Editor)i.next();
    ed.updateModel();
     
    }

    public void fireModelChanged()
    {
  for (Iterator i=m_displayedElements.iterator(); i.hasNext(); )
      {
    Editor ed = (Editor)i.next();
    ed.dataChanged();
     
    }

    private void detachAll()
    {
  for (Iterator i=m_displayedElements.iterator(); i.hasNext(); )
      {
    Editor ed = (Editor)i.next();

    if (ed instanceof JSmoothModelBean.Listener)
        m_model.removeListener((JSmoothModelBean.Listener)ed);
    if (ed instanceof JSmoothModelBean.SkeletonChangedListener)
        m_model.removeSkeletonChangedListener((JSmoothModelBean.SkeletonChangedListener)ed);

    ed.detach();
      }
    }

    private void attachAll()
    {
  //  System.out.println("Attaching all with " + m_modelLocation + ": " + m_model);
  for (Iterator i=m_displayedElements.iterator(); i.hasNext(); )
      {
    Editor ed = (Editor)i.next();

    File basedir = null;
    if (m_modelLocation != null)
        basedir = m_modelLocation.getParentFile();

    ed.attach(m_model, basedir);
    if (ed instanceof JSmoothModelBean.Listener)
        m_model.addListener((JSmoothModelBean.Listener)ed);
    if (ed instanceof JSmoothModelBean.SkeletonChangedListener)
        m_model.addSkeletonChangedListener((JSmoothModelBean.SkeletonChangedListener)ed);

    ed.dataChanged();
     
    }

    public void newModel()
    {
  JSmoothModelBean bean = new JSmoothModelBean();
  newModel(bean, null);
    }

    public void newModel(JSmoothModelBean bean, java.io.File location)
    {
  detachAll();

  m_model = bean;
  m_modelLocation = location;

  attachAll();
    }

    public boolean openFile(java.io.File f)
    {
  m_modelLocation = f;

  try
      {
    JSmoothModelBean model = JSmoothModelPersistency.load(m_modelLocation);
    newModel(model, f);
    return true;
      } catch (java.io.IOException iox)
    {
        iox.printStackTrace();
        return false;
    }
    }

    public boolean save()
    {
  if (m_modelLocation == null)
      return false;
  try {
      fireUpdateModel();
      m_model.normalizePaths(m_modelLocation.getParentFile(), true);
      JSmoothModelPersistency.save(m_modelLocation, m_model);
      //      System.out.println("saving model " + m_model);
      //      fireModelChanged();
      return true;
  } catch (java.io.IOException iox)
      {
    iox.printStackTrace();
      }
  return false;
    }

    private Vector m_lastErrors = new Vector();

    public Vector getLastErrors()
    {
  return m_lastErrors;
    }

    public ExeCompiler.CompilerRunner getCompiler()
    {
  fireUpdateModel();
  m_model.normalizePaths(m_modelLocation.getParentFile());
  m_lastErrors.removeAllElements();

  SkeletonBean skel = Main.SKELETONS.getSkeleton(m_model.getSkeletonName());
  if (skel == null)
      {
    m_lastErrors.add(Main.local("UNKNOWN_SKEL"));
    return null;
      }

  File skelroot = Main.SKELETONS.getDirectory(skel);
  File basedir = m_modelLocation.getParentFile();
  File exedir = basedir;

  try {
      File out = null;
      if (new File(m_model.getExecutableName()).isAbsolute() == false)
    out = new File(exedir, m_model.getExecutableName());
      else
    out = new File(m_model.getExecutableName());

      //      System.out.println("out = "+ out.getAbsolutePath());
      ExeCompiler compiler = new ExeCompiler();
      ExeCompiler.CompilerRunner runner = compiler.getRunnable(skelroot, skel, basedir, m_model, out);
      return runner;
  } catch (Exception exc)
      {
    exc.printStackTrace();
    m_lastErrors.add(exc.getMessage());
    return null;
      }
    }
   
    public void runexe()
    {
  fireUpdateModel();
   
  try {
      File basedir = m_modelLocation.getParentFile();
      File f = new File(basedir, m_model.getExecutableName());
      String[] cmd = new String[]{ f.getAbsolutePath() };
     
      //      System.out.println("RUNNING " + cmd[0] + " @ " + basedir);
      CommandRunner.run(cmd, f.getParentFile());
  } catch (Exception exc)
      {
    exc.printStackTrace();
      }
    }

    public java.io.File getProjectFile()
    {
  return m_modelLocation;
    }

    public void setProjectFile(java.io.File prjfile)
    {
  m_modelLocation = prjfile;
    }
   

    public JSmoothModelBean getModel()
    {
  return m_model;
    }

    public static void main(String args[])
    {
  try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e) { }
  JFrame test = new JFrame("test");
  test.getContentPane().add(new MasterPanel());
  test.pack();
  test.setVisible(true);
    }
}
TOP

Related Classes of net.charabia.jsmoothgen.application.gui.MasterPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.