Package ptolemy.actor.gui
Class TableauFrame
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- java.awt.Window
-
- java.awt.Frame
-
- javax.swing.JFrame
-
- ptolemy.gui.Top
-
- ptolemy.actor.gui.TableauFrame
-
- All Implemented Interfaces:
java.awt.event.WindowFocusListener
,java.awt.image.ImageObserver
,java.awt.MenuContainer
,java.io.Serializable
,java.util.EventListener
,javax.accessibility.Accessible
,javax.swing.RootPaneContainer
,javax.swing.WindowConstants
,StatusHandler
- Direct Known Subclasses:
CustomizableRunFrame
,ExecShellTableau.ExecShellFrame
,ExpressionShellFrame
,HTMLViewer
,ImageDisplayJavaSE.ImageWindow
,InteractiveDialog.DialogFrame
,PlotTableauFrame
,PtolemyFrame
,PythonShellTableau.PythonShellFrame
,RunLayoutFrame
,TclShellTableau.TclShellFrame
,TextEditor
public class TableauFrame extends Top
This is a top-level window associated with a tableau that has a menubar and status bar. Derived classes should add components to the content pane using a line like:getContentPane().add(component, BorderLayout.CENTER);
The base class provides generic features for menubars and toolbars, and this class specializes the base class for Ptolemy II.A help menu is provided with two entries, About and Help. In both cases, an HTML file is opened. The configuration can specify which HTML file to open by containing an instance of FileParameter with name "_about" or "_help". The value of this attribute is a file name (which may begin with the keywords $CLASSPATH or $PTII to specify that the file is located relative to the CLASSPATH or to the Ptolemy II installation directory).
- Since:
- Ptolemy II 1.0
- Version:
- $Id$
- Author:
- Edward A. Lee
- See Also:
- Serialized Form
- Pt.AcceptedRating:
- Yellow (celaine)
- Pt.ProposedRating:
- Green (eal)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
TableauFrame.MenuItemListener
A Listener for menu items.-
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
-
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
_initialSaveAsFileName
The initial filename to use in the SaveAs dialog.protected TopPack
_topPack
Set in pack() if an alternate topPack is used.protected javax.swing.JMenu
_viewMenu
The view menu.java.lang.String
aboutFile
The name of the default file to open when About is invoked.java.lang.String
helpFile
The name of the default file to open when Help is invoked.-
Fields inherited from class ptolemy.gui.Top
_CANCELED, _debugClosing, _directory, _DISCARDED, _exitResult, _EXPORT_MENU_INDEX, _FAILED, _fileFilter, _fileMenu, _fileMenuItems, _filenameFilter, _helpMenu, _helpMenuItems, _IMPORT_MENU_INDEX, _menubar, _NEW_MENU_INDEX, _SAVED, _statusBar, MAXIMUM_STATUS_MESSAGE_TIME
-
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
-
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
-
-
Constructor Summary
Constructors Constructor Description TableauFrame()
Construct an empty top-level frame.TableauFrame(Tableau tableau)
Construct an empty top-level frame managed by the specified tableau and the default status bar.TableauFrame(Tableau tableau, StatusBar statusBar)
Construct an empty top-level frame managed by the specified tableau with the specified status bar.TableauFrame(Tableau tableau, StatusBar statusBar, Placeable placeable)
Construct an empty top-level frame managed by the specified tableau with the specified status bar and associated Placeable object.TableauFrame(Tableau tableau, StatusBar statusBar, PortablePlaceable portablePlaceable)
Construct an empty top-level frame managed by the specified tableau with the specified status bar and associated PortablePlaceable object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
_about()
Override the base class to open the intro.htm splash window, which is in the directory ptolemy/configs.protected void
_addMenus()
Add a View menu and items to the File:New menu if a tableau was given in the constructor.protected boolean
_close()
Close the window.protected boolean
_confirmFile(Entity model, java.io.File file)
Confirm that writing the specified model to the specified file is OK.protected void
_exit()
Close all open tableaux, querying the user as necessary to save data, and then exit the application.protected java.awt.Image
_getDefaultIconImage()
Return the default icon image, or null if there is none.protected java.lang.String
_getName()
Get the name of this object, which in this class is the URI associated with the effigy, or the string "Unnamed" if none.protected void
_help()
Display the help file given by the configuration, or if there is none, then the file specified by the public variable helpFile.protected void
_read(java.net.URL url)
Read the specified URL.protected boolean
_save()
Save the model to the current file, determined by the uri parameter of the associated effigy, or if that has not been set or is not a writable file, or if the effigy has been set non-modifiable, then invoke _saveAs().protected boolean
_saveAs()
Query the user for a filename, save the model to that file, and open a new window to view the model.protected boolean
_saveAs(java.lang.String extension)
Query the user for a filename, save the model to that file, and open a new window to view the model.protected java.net.URL
_saveAsHelper(java.lang.String extension)
Query the user for a filename, save the model to that file, and open a new window to view the model.protected void
_writeFile(java.io.File file)
Write the model to the specified file.void
dispose()
Dispose of this frame.TopPack
getAlternateTopPack()
Get the alternative pack() interface for the ptolemy.gui.Top JFrame.Configuration
getConfiguration()
Get the configuration at the top level of the hierarchy.ModelDirectory
getDirectory()
Get the model directory in the top level configuration.Effigy
getEffigy()
Get the effigy for the model associated with this window.PtolemyEffigy
getEffigy(NamedObj model)
Get the effigy for the specified Ptolemy model.Tableau
getTableau()
Get the tableau associated with this frame.boolean
isModified()
Return true if the data associated with this window has been modified since it was first read or last saved.void
pack()
Optionally invoke an alternative pack() method.void
printPDF()
If a PDF printer is available print to it.void
setModified(boolean modified)
Record whether the data associated with this window has been modified since it was first read or last saved.void
setTableau(Tableau tableau)
Set the tableau associated with this frame.-
Methods inherited from class ptolemy.gui.Top
_clear, _createFileMenuItems, _getCurrentDirectory, _open, _openURL, _populateHistory, _print, _printCrossPlatform, _printNative, _printPDF, _queryForSave, _saveAsFileDialog, _saveAsFileDialogComponent, _saveAsJFileChooserComponent, _updateHistory, about, centerOnScreen, close, deferIfNecessary, exit, getCentering, getContentSize, hideMenuBar, isDisposed, isMenuPopulated, report, report, report, setBackground, setCentering, setDirectory, show, status, windowGainedFocus, windowLostFocus
-
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
-
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
-
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, toBack, toFront
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
aboutFile
public java.lang.String aboutFile
The name of the default file to open when About is invoked. This file should be relative to the home installation directory. This file is used if the configuration does not specify an about file.
-
helpFile
public java.lang.String helpFile
The name of the default file to open when Help is invoked. This file should be relative to the home installation directory. This file is used if the configuration does not specify a help file.
-
_initialSaveAsFileName
protected java.lang.String _initialSaveAsFileName
The initial filename to use in the SaveAs dialog.
-
_viewMenu
protected javax.swing.JMenu _viewMenu
The view menu. Note that this is only created if there are multiple views, so if derived classes use it, they must test to see whether it is null.
-
_topPack
protected TopPack _topPack
Set in pack() if an alternate topPack is used.
-
-
Constructor Detail
-
TableauFrame
public TableauFrame()
Construct an empty top-level frame. After constructing this, it is necessary to call setVisible(true) to make the frame appear. It may also be desirable to call centerOnScreen().
-
TableauFrame
public TableauFrame(Tableau tableau)
Construct an empty top-level frame managed by the specified tableau and the default status bar. After constructing this, it is necessary to call setVisible(true) to make the frame appear. It may also be desirable to call centerOnScreen().- Parameters:
tableau
- The managing tableau.
-
TableauFrame
public TableauFrame(Tableau tableau, StatusBar statusBar)
Construct an empty top-level frame managed by the specified tableau with the specified status bar. After constructing this, it is necessary to call setVisible(true) to make the frame appear. It may also be desirable to call centerOnScreen().- Parameters:
tableau
- The managing tableau.statusBar
- The status bar, or null to not include one.
-
TableauFrame
public TableauFrame(Tableau tableau, StatusBar statusBar, Placeable placeable)
Construct an empty top-level frame managed by the specified tableau with the specified status bar and associated Placeable object. Associating an instance of Placeable with this frame has the effect that when this frame is closed, if the placeable contains instances of WindowSizeAttribute and/or SizeAttribute, then the window sizes are recorded. After constructing this, it is necessary to call setVisible(true) to make the frame appear. It may also be desirable to call centerOnScreen().- Parameters:
tableau
- The managing tableau.statusBar
- The status bar, or null to not include one.placeable
- The associated Placeable.
-
TableauFrame
public TableauFrame(Tableau tableau, StatusBar statusBar, PortablePlaceable portablePlaceable)
Construct an empty top-level frame managed by the specified tableau with the specified status bar and associated PortablePlaceable object. Associating an instance of PortablePlaceable with this frame has the effect that when this frame is closed, if the portablePlaceable contains instances of WindowSizeAttribute and/or SizeAttribute, then the window sizes are recorded. After constructing this, it is necessary to call setVisible(true) to make the frame appear. It may also be desirable to call centerOnScreen().- Parameters:
tableau
- The managing tableau.statusBar
- The status bar, or null to not include one.portablePlaceable
- The associated PortablePlaceable.
-
-
Method Detail
-
getAlternateTopPack
public TopPack getAlternateTopPack()
Get the alternative pack() interface for the ptolemy.gui.Top JFrame.- Returns:
- the alternative pack() interface if one was set by the _alternateTopPackClass in the Configuration. If one there is no TopPack, then return null.
- See Also:
pack()
-
getConfiguration
public Configuration getConfiguration()
Get the configuration at the top level of the hierarchy.- Returns:
- The configuration controlling this frame, or null if there isn't one.
-
getDirectory
public ModelDirectory getDirectory()
Get the model directory in the top level configuration.- Returns:
- The model directory, or null if there isn't one.
-
getEffigy
public Effigy getEffigy()
Get the effigy for the model associated with this window.- Returns:
- The effigy for the model, or null if none exists.
-
getEffigy
public PtolemyEffigy getEffigy(NamedObj model)
Get the effigy for the specified Ptolemy model. This searches all instances of PtolemyEffigy deeply contained by the directory, and returns the first one it encounters that is an effigy for the specified model.- Parameters:
model
- The model for which an effigy is desired.- Returns:
- The effigy for the model, or null if none exists.
-
getTableau
public Tableau getTableau()
Get the tableau associated with this frame.- Returns:
- The tableau associated with this frame.
- See Also:
setTableau(Tableau)
-
isModified
public boolean isModified()
Return true if the data associated with this window has been modified since it was first read or last saved. This returns the value set by calls to setModified(), or false if that method has not been called.- Overrides:
isModified
in classTop
- Returns:
- True if the data has been modified.
-
setModified
public void setModified(boolean modified)
Record whether the data associated with this window has been modified since it was first read or last saved. If you call this with a true argument, then subsequent attempts to close the window will trigger a dialog box to confirm the closing. This overrides the base class to delegate to the effigy.- Overrides:
setModified
in classTop
- Parameters:
modified
- True if the data has been modified.
-
setTableau
public void setTableau(Tableau tableau)
Set the tableau associated with this frame.- Parameters:
tableau
- The tableau associated with this frame.- See Also:
getTableau()
-
pack
public void pack()
Optionally invoke an alternative pack() method. If the _alternateTopPackClass attribute in the Configuration is set to the name of a class that implements the TopPack interface, thenTopPack.pack(Top, boolean)
is called. If the _alternateTopPackClass attribute is not set or set improperly, then Top.pack() is called from this method.
-
printPDF
public void printPDF() throws java.awt.print.PrinterException
If a PDF printer is available print to it.- Throws:
java.awt.print.PrinterException
- If a printer with the string "PDF" cannot be found or if the job cannot be set to the PDF print service or if there is another problem printing.
-
_about
protected void _about()
Override the base class to open the intro.htm splash window, which is in the directory ptolemy/configs.
-
_addMenus
protected void _addMenus()
Add a View menu and items to the File:New menu if a tableau was given in the constructor.If the configuration has a _disableFileNew parameter that is set to true, then we do not populate the File->New menu.
-
_close
protected boolean _close()
Close the window. Derived classes should override this to release any resources or remove any listeners. In this class, if the data associated with this window have been modified, and there are no other tableaux in the parent effigy or any effigy that contains it, then ask the user whether to save the data before closing.
-
dispose
public void dispose()
Dispose of this frame.Override this dispose() method to unattach any listeners that may keep this model from getting garbage collected. This method invokes the dispose() method of the superclass,
Top
.
-
_confirmFile
protected boolean _confirmFile(Entity model, java.io.File file) throws java.net.MalformedURLException
Confirm that writing the specified model to the specified file is OK. In particular, if the file exists, ask the user whether it is OK to overwrite. If there is an open model from the specified file, determine whether it has been modified, and prompt to discard changes if it has. Close the previously open model. If the previously open model on this file contains the specified model, the it is never OK to do the write, so return false.- Parameters:
model
- The model to write to the file, or null specify that this will be delegated to the effigy associated with this tableau.file
- The file to write to.- Returns:
- True if it is OK to write the model to the file.
- Throws:
java.net.MalformedURLException
- If the file cannot be converted to a URL.
-
_exit
protected void _exit()
Close all open tableaux, querying the user as necessary to save data, and then exit the application. If the user cancels on any save, then do not exit.- Overrides:
_exit
in classTop
- See Also:
Tableau.close()
-
_getDefaultIconImage
protected java.awt.Image _getDefaultIconImage()
Return the default icon image, or null if there is none. Note that Frame.setIconImage(null) will set the image to the default platform dependent image. If the configuration contains a FileAttribute called _applicationIcon, then the value of the _applicationIcon is used. Otherwise, the default value is ptolemy/actor/gui/PtolemyIISmallIcon.gif, which is looked for in the classpath.- Returns:
- The default icon image, or null if there is none.
-
_getName
protected java.lang.String _getName()
Get the name of this object, which in this class is the URI associated with the effigy, or the string "Unnamed" if none. This overrides the base class to provide a reasonable name for the title of the window.
-
_help
protected void _help()
Display the help file given by the configuration, or if there is none, then the file specified by the public variable helpFile. To specify a default help file in the configuration, create a FileParameter named "_help" whose value is the name of the file. If the specified file fails to open, then invoke the _about() method.- Overrides:
_help
in classTop
- See Also:
FileParameter
-
_read
protected void _read(java.net.URL url) throws java.lang.Exception
Read the specified URL. This delegates to the ModelDirectory to ensure that the preferred tableau of the model is opened, and that a model is not opened more than once.
-
_save
protected boolean _save()
Save the model to the current file, determined by the uri parameter of the associated effigy, or if that has not been set or is not a writable file, or if the effigy has been set non-modifiable, then invoke _saveAs(). This calls _writeFile() to perform the save.
-
_saveAs
protected boolean _saveAs()
Query the user for a filename, save the model to that file, and open a new window to view the model. This overrides the base class to update the entry in the ModelDirectory and to rename the model to match the file name.
-
_saveAs
protected boolean _saveAs(java.lang.String extension)
Query the user for a filename, save the model to that file, and open a new window to view the model. This overrides the base class to update the entry in the ModelDirectory and to rename the model to match the file name.- Parameters:
extension
- If non-null, then the extension that is appended to the file name if there is no extension.- Returns:
- True if the save succeeds.
-
_saveAsHelper
protected java.net.URL _saveAsHelper(java.lang.String extension)
Query the user for a filename, save the model to that file, and open a new window to view the model.- Parameters:
extension
- If non-null, then the extension that is appended to the file name if there is no extension.- Returns:
- URL of the saved file if the save succeeds, null if save fails.
-
_writeFile
protected void _writeFile(java.io.File file) throws java.io.IOException
Write the model to the specified file. This method delegates to the effigy containing the associated Tableau, if there is one, and otherwise throws an exception.- Specified by:
_writeFile
in classTop
- Parameters:
file
- The file to write to.- Throws:
java.io.IOException
- If the write fails.
-
-