samer@0: /* samer@0: * AppShell.java samer@0: * samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.core.shells; samer@0: samer@0: import java.awt.*; samer@0: import java.awt.event.*; samer@0: import java.io.*; samer@0: import java.util.*; samer@0: import javax.swing.*; samer@0: samer@0: import samer.core.*; samer@0: import samer.core.util.*; samer@0: import samer.core.util.shell.*; samer@0: import samer.core.util.swing.*; samer@0: import samer.core.util.swing.Frame; samer@0: import samer.core.util.swing.Console; samer@0: import samer.core.util.swing.Dialog; samer@0: import samer.core.NumberViewer; samer@0: import samer.core.viewers.swing.*; samer@0: import samer.core.types.*; samer@0: samer@0: samer@0: public class SwingShell extends AppShellBase samer@0: { samer@0: public SwingShell() { this(getDefaultPropertiesFile()); } samer@0: public SwingShell(String props) samer@0: { samer@0: super(props); samer@0: Shell.trace("SwingShell constructor"); samer@0: Shell.setShell(this); samer@0: Shell.registerAgent(this); samer@0: samer@0: // Shell.trace("creating console"); samer@0: // con = new Console(); samer@0: // JScrollPane scroller = new JScrollPane(con); samer@0: // JComponent jc = (JComponent)(confr.getContentPane()); samer@0: // jc.setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); samer@0: // Shell.registerAgent(con); samer@0: samer@0: // confr.container().setLayout( new BorderLayout(4,5)); samer@0: // confr.container().add(scroller); samer@0: // confr.container().add( new CommandField(20), "South"); samer@0: // confr.expose(); samer@0: samer@0: javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false); samer@0: samer@0: samer@0: Shell.trace("registering viewer classes"); samer@0: mput("VDouble","DoubleViewer"); samer@0: mput("VInteger","IntegerViewer"); samer@0: mput("VBoolean","BooleanViewer"); samer@0: mput("VString","StringViewer"); samer@0: mput("VParameter","ParameterViewer"); samer@0: mput("VFile","FileViewer"); samer@0: mput("VColor","ColorButton"); samer@0: put(Variable.class,StringViewer.class); samer@0: put(Viewable.class,DefaultViewer.class); samer@0: samer@0: try { execute("run",Shell.env()); } samer@0: catch (Exception ex) { Shell.trace(ex.toString()); } samer@0: } samer@0: samer@0: private static void mput(String cl, String vwr) { samer@0: samer.core.Registry.put("samer.core.types."+cl, "samer.core.viewers.swing."+vwr); samer@0: } samer@0: samer@0: class VContainer extends VContainerBase implements ViewableManager.ViewerContainer samer@0: { samer@0: VContainer() { super("exposed"); box.add(buttonBar); } samer@0: samer@0: public void add(java.util.Iterator components) samer@0: { samer@0: adding=true; samer@0: box.remove(glue); box.remove(buttonBar); samer@0: while (components.hasNext()) { samer@0: box.add((Component)(components.next())); samer@0: } samer@0: box.add(glue); box.add(buttonBar); samer@0: box.validate(); samer@0: if (noScrollBars() || frame.getBounds().isEmpty()) frame.pack(); samer@0: else frame.validate(); samer@0: adding=false; samer@0: } samer@0: samer@0: public void windowClosing(WindowEvent e) { samer@0: vm.releaseViewerContainer(); samer@0: super.windowClosing(e); samer@0: } samer@0: } samer@0: samer@0: public ViewableManager.ViewerContainer getViewerContainer() { samer@0: if (buttonBar==null) { samer@0: buttonBar = new ButtonBar(); samer@0: buttonBar.setBroadcaster(am.getBroadcaster()); samer@0: buttonBar.setTarget(this); samer@0: buttonBar.add("set").add("get").add("load").add("save").add("exit"); samer@0: } samer@0: return new VContainer(); samer@0: } samer@0: samer@0: samer@0: // ............. Factory methods ............ samer@0: samer@0: public Shell.Window getWindow(String title) { return new Frame(title); } samer@0: public Shell.Dialog getDialog(String title) { samer@0: // if (currentFrame==null) currentFrame=new JFrame("dialog owner"); samer@0: // return new Dialog(currentFrame,title,true); samer@0: return new Dialog(title,true); samer@0: } samer@0: samer@0: public Component createLabel(String txt) { samer@0: JLabel l=new JLabel(Node.lastPart(txt)) { samer@0: public void setName(String txt) { samer@0: super.setName(txt); samer@0: setText(Node.lastPart(txt)); samer@0: setToolTipText(txt); samer@0: } samer@0: }; samer@0: l.setToolTipText(txt); samer@0: MouseRetarget.mouseInvisibilityFor(l); samer@0: return l; samer@0: } samer@0: public Viewer createViewerPanel(Viewer vwr) { return new VPanel(vwr); } samer@0: samer@0: public Container createButtonsFor(Agent agent) samer@0: { samer@0: ButtonBar bbar=new ButtonBar(); samer@0: bbar.setTarget(agent); samer@0: agent.getCommands( bbar); samer@0: return bbar; samer@0: } samer@0: samer@0: public NumberViewer createNumberViewer(String label, int flags, NumberSink s) { samer@0: return new TextualNumberViewer(label); samer@0: } samer@0: samer@0: public void exposeCommands( Agent agent) { samer@0: buttonBar.setTarget(agent); samer@0: agent.getCommands(buttonBar); samer@0: } samer@0: samer@0: // .......... Message printing .............. samer@0: public void print(String msg) { System.out.println(msg); } samer@0: public void status(String msg) { System.out.println(msg); } samer@0: samer@0: private PrintWriter writer=null; samer@0: public PrintWriter getPrintWriter() samer@0: { samer@0: if (writer==null) samer@0: writer = new PrintWriter( new OutputStreamWriter(System.out)); samer@0: return writer; samer@0: }; samer@0: samer@0: // public PrintWriter getPrintWriter() { samer@0: // return new PrintWriter(con.getWriter(),true); samer@0: // } samer@0: samer@0: // public void print(String msg) { con.write(msg); con.write("\n"); } samer@0: // public void status(String msg) { con.write(msg); con.write("\n"); } samer@0: samer@0: samer@0: // ............... Private bits ............. samer@0: samer@0: // private JFrame currentFrame=null; samer@0: private JFrame confr=null; samer@0: private Console con=null; samer@0: private ButtonBar buttonBar=null; samer@0: private Component glue; samer@0: samer@0: public static void main( String args[]) { new SwingShell(); } samer@0: } samer@0: