samer@0: /* samer@0: * AWTShell.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: samer@0: import samer.core.*; samer@0: import samer.core.util.*; samer@0: import samer.core.util.shell.*; samer@0: import samer.core.util.heavy.*; samer@0: import samer.core.util.heavy.Console; samer@0: import samer.core.util.heavy.Frame; samer@0: import samer.core.util.heavy.Dialog; samer@0: import samer.core.NumberViewer; samer@0: import samer.core.viewers.*; samer@0: import samer.core.types.*; samer@0: samer@0: public class AWTShell extends AppShellBase samer@0: { samer@0: public AWTShell() { this(getDefaultPropertiesFile()); } samer@0: public AWTShell(String propsFile) samer@0: { samer@0: super(propsFile); samer@0: currentFrame = new java.awt.Frame("dummy"); // temporary dialog owner samer@0: samer@0: Shell.setShell(this); samer@0: samer@0: // going to cache font and menu font samer@0: Font font=X.font(Shell.datum("font"),null); samer@0: Font menufont=X.font(Shell.datum("menu.font"),null); samer@0: if (font!=null) Shell.put("font", font); samer@0: if (menufont!=null) Shell.put("menu.font", menufont); samer@0: samer@0: con = new Console(); samer@0: confr = new Frame("console.frame"); samer@0: confr.setLayout( new BorderLayout(3,3)); samer@0: confr.add(con); samer@0: confr.add( new CommandField(20), "South"); samer@0: confr.addWindowListener( Shell.exitListener()); samer@0: confr.expose(); samer@0: // currentFrame=confr; samer@0: samer@0: Shell.registerAgent(this); samer@0: Shell.registerAgent(con); samer@0: samer@0: put(VDouble.class,DoubleViewer.class); samer@0: put(VInteger.class,IntegerViewer.class); samer@0: put(VBoolean.class,BooleanViewer.class); samer@0: put(VString.class,StringViewer.class); samer@0: put(VParameter.class,ParameterViewer.class); samer@0: put(VFile.class,FileViewer.class); samer@0: put(VColor.class,ColorButton.class); 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: class VContainer extends WindowAdapter implements ViewableManager.ViewerContainer samer@0: { samer@0: Frame frame; samer@0: samer@0: VContainer() samer@0: { samer@0: frame = new Frame("exposed"); samer@0: frame.setLayout( new StackLayout()); samer@0: frame.expose(); samer@0: frame.addWindowListener(this); samer@0: } samer@0: samer@0: public void add(java.util.Iterator components) samer@0: { samer@0: Container c=frame.container(); samer@0: while (components.hasNext()) { samer@0: c.add((Component)(components.next())); samer@0: } samer@0: c.validate(); samer@0: frame.pack(); samer@0: } samer@0: samer@0: public void removeAll() { samer@0: frame.setVisible(false); samer@0: frame.container().removeAll(); samer@0: } samer@0: samer@0: public void windowClosing(WindowEvent e) { samer@0: vm.releaseViewerContainer(); samer@0: frame.dispose(); samer@0: } samer@0: } samer@0: samer@0: public ViewableManager.ViewerContainer getViewerContainer() { samer@0: return new VContainer(); samer@0: } samer@0: samer@0: public Shell.Dialog getDialog(String title) { return new Dialog(currentFrame,title,true); } samer@0: public Shell.Window getWindow(String title) { return new BevelWindow(title); } samer@0: public Viewer createViewerPanel(Viewer vwr) { return new VPanel(vwr); } 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.container(); samer@0: } samer@0: samer@0: public NumberViewer createNumberViewer(String label, int flags, NumberSink s) { samer@0: return new TextualNumberViewer(label,flags,s); samer@0: } samer@0: samer@0: public void exposeCommands( Agent agent) samer@0: { samer@0: if (buttonBar==null) { samer@0: buttonBar = new ButtonBar(); samer@0: buttonBar.setBroadcaster(am.getBroadcaster()); samer@0: confr.add( buttonBar.container(), "North"); samer@0: } samer@0: samer@0: buttonBar.setTarget(agent); samer@0: agent.getCommands(buttonBar); samer@0: confr.validate(); samer@0: } samer@0: samer@0: public Component createLabel(String txt) { samer@0: Label l=new Label(txt); samer@0: l.addMouseListener(MouseRetarget.listener); samer@0: return l; samer@0: } samer@0: samer@0: // .......... Message printing .............. 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 java.awt.Frame currentFrame=null; samer@0: samer@0: private Frame confr=null; samer@0: private Console con=null; samer@0: private ButtonBar buttonBar=null; samer@0: samer@0: public static void main( String args[]) { new AWTShell(); } samer@0: samer@0: } samer@0: samer@0: samer@0: samer@0: class BevelWindow extends Frame implements Shell.Window samer@0: { samer@0: JPanel panel; samer@0: samer@0: public BevelWindow(String name) samer@0: { samer@0: super(name); samer@0: Shell.push(getNode()); samer@0: samer@0: panel = new JPanel( Border.create( samer@0: Border.NONE, Shell.getInt("borderWidth",2) samer@0: )); samer@0: samer@0: boolean bw = Shell.getBoolean("bevelChildren",false); samer@0: if (bw) panel.setChildBorder(Border.create(Border.IN,0)); samer@0: samer@0: Shell.pop(); samer@0: add(panel); samer@0: } samer@0: samer@0: public Container container() { return panel; } samer@0: }