Mercurial > hg > jslab
view src/samer/core_/shells/DesktopShell.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * AppShell.java * * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.core.shells; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import samer.core.*; import samer.core.util.shell.*; import samer.core.util.*; import samer.core.util.swing.*; import samer.core.util.swing.Frame; import samer.core.util.swing.Console; import samer.core.util.swing.Dialog; import samer.core.NumberViewer; import samer.core.viewers.swing.*; import samer.core.types.*; import javax.swing.*; import javax.swing.event.*; public class DesktopShell extends AppShellBase { public DesktopShell() { this(getDefaultPropertiesFile()); } public DesktopShell(String props) { super(props); Shell.setShell(this); desktop = new JDesktopPane(); desktop.setDragMode(JDesktopPane.LIVE_DRAG_MODE); mainFrame = new Frame("Desktop"); mainFrame.container().setLayout(new BorderLayout()); mainFrame.container().add(desktop); mainFrame.expose(); mainFrame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { Shell.exit(); } } ); InternalFrame.setDesktop(desktop); // con = new Console(); // confr = new InternalFrame("console.frame"); // JScrollPane scroller = new JScrollPane(con); // JComponent jc=new javax.swing.JPanel(); // jc.setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); // jc.setLayout( new BorderLayout(4,5)); // jc.add(scroller); // jc.add(new CommandField(20), "South"); //confr.container().add(jc); // confr.setContentPane(jc); // confr.pack(); // confr.expose(); Shell.registerAgent(this); // Shell.registerAgent(con); // javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false); put(VDouble.class,DoubleViewer.class); put(VInteger.class,IntegerViewer.class); put(VBoolean.class,BooleanViewer.class); put(VString.class,StringViewer.class); put(VParameter.class,ParameterViewer.class); put(VFile.class,FileViewer.class); put(VColor.class,ColorButton.class); put(Variable.class,StringViewer.class); put(Viewable.class,DefaultViewer.class); try { execute("run",Shell.env()); } catch (Exception ex) { Shell.trace(ex.toString()); } } class VContainer extends InternalFrameAdapter implements ViewableManager.ViewerContainer { InternalFrame frame; Box box; Component glue; VContainer() { frame = new InternalFrame("exposed"); box = Box.createVerticalBox(); glue = Box.createVerticalGlue(); JScrollPane scr=new JScrollPane(box); scr.setBorder(null); box.add(glue); frame.container().add(scr); frame.pack(); frame.expose(); frame.setClosable(true); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addInternalFrameListener(this); } public void removeAll() { box.removeAll(); } public void add(java.util.Iterator components) { box.remove(glue); while (components.hasNext()) { box.add((Component)(components.next())); } box.add(glue); box.validate(); frame.pack(); } public void internalFrameClosing(InternalFrameEvent e) { Shell.print("internal frame closing"); vm.releaseViewerContainer(); frame.dispose(); } } public ViewableManager.ViewerContainer getViewerContainer() { return new VContainer(); } // ............. Factory methods ............ public Shell.Window getWindow(String title) { return new InternalFrame(title); } public Shell.Dialog getDialog(String title) { return new Dialog(mainFrame,title,true); } public Component createLabel(String txt) { return new JLabel(txt); } public Viewer createViewerPanel(Viewer vwr) { return new VPanel(vwr); } public Container createButtonsFor(Agent agent) { ButtonBar bbar=new ButtonBar(); bbar.setTarget(agent); agent.getCommands( bbar); return bbar; } public NumberViewer createNumberViewer(String label, int flags, NumberSink s) { return new TextualNumberViewer(label); } public void exposeCommands( Agent agent) { if (buttonBar==null) { buttonBar = new ButtonBar(); buttonBar.setBroadcaster(am.getBroadcaster()); mainFrame.container().add( buttonBar, "North"); } buttonBar.setTarget(agent); agent.getCommands(buttonBar); mainFrame.validate(); } // .......... Message printing .............. public void print(String msg) { System.out.println(msg); } public void status(String msg) { System.out.println(msg); } private PrintWriter writer=null; public PrintWriter getPrintWriter() { if (writer==null) writer = new PrintWriter( new OutputStreamWriter(System.out)); return writer; }; /* public PrintWriter getPrintWriter() { return new PrintWriter(con.getWriter(),true); } public void print(String msg) { con.write(msg); con.write("\n"); } public void status(String msg) { con.write(msg); con.write("\n"); } */ // ............... Private bits ............. private Frame mainFrame; private JDesktopPane desktop; private InternalFrame confr=null; private Console con=null; private ButtonBar buttonBar=null; private Component glue; public static void main( String args[]) { new DesktopShell(); } }