PANEL
From ICE Enterprises
draws a bare window with facilities for overlaying other windows
<FILE> - Setup file or Macro name with pane placement and properties
This primitive is a raw window with an interactive panelizer holding multiple
panes. Each panel is given an entry in the registry for other primitives to
draw into. By default, the registry entry for the table of window panes is
REG.WIN
The /SETUP switch is used to place the panel in "MACRO" mode. In macro mode,
the config file name is generated by replacing the extension on the macro file
with '.mmp' for Midas Macro Panel. If /SETUP=XYZ is specified, the extension
becomes '.mmpxyz', where 'xyz' is a user designated alternate setup. The
default for /SETUP is "" creating the extension mmp.
The /TSETUP switch is used similarly to /SETUP, but with a couple important
differences. The main difference is that "/TSETUP=XYZ" will look for a
result variable (that is a table) named XYZ, and "/TSETUP=myFile.tbl" will
look for a text file (with a table format) named myFile.tbl. The use cases
of /TSETUP are listed below:
Case 1: /TSETUP=<file>.tbl
In this case, the given file will be treated as a table and used for the
setup of the panel.
Case 2: /TSETUP=<result table>
In this case, the local result variables will be searched for the given
table variable. If not found, then the parent result variables will be
checked.
Case 3: /TSETUP with no filename or variable name (e.g. "panel/tsetup/...")
This case is treated the same as Case 1, where <file> is the base filename
of the macro.
Any graphical controls added to the panel using the WIDGET property will be
contained in a table that can be accessed through the CONTROLS property. Thus
if the panels registry name is PANEL, the value of a gcontrol widget named FREQ
can be set with the following example line:
panel/controls=gc
...
gcontrol dval freq ...
...
set gc.FREQ.value 1.33
where the /controls=gc is a reference to the REG.PANEL.CONTROLS list. Without
the /controls=gc switch, access to controls is available as:
res REG.PANEL.CONTROLS.FREQ.value 1.33
The panes in the panel are accessible through the PANES property table. For
example, to set the title on the pane named PANE1:
panel/controls=gc/panes=WIN
...
set REG.WIN.PANE1.TITLE "My Title String"
where the /panes=WIN switch specifies an entry in the REGISTRY called WIN for
the panes. Without the /panes=WIN switch, access to panes is available as:
set REG.PANEL.PANES.PANE1.TITLE "My Title String"
Normally, each pane in the panel is named with the ID of the primitive that is
to be displayed there. This is performed by the ATTACH menu item in the
EDITPANE configuration option. All configuration items may be accessed
graphically and saved to a setup file for future use.
The panel setup configuration can be saved to a standard setup file (*.mmp), a
table setup file (*.tbl), or (as of NeXtMidas 2.9.0) a table result variable.
The default setup file saved will be a .mmp file unless the /TSETUP switch
is present, in which case it will be a .tbl. In either case, the user can
change the file type by specifying the filename (with extension of either .mmp
or .tbl) in the SAVE FILE prompt.
Since NeXtMidas 2.9.0, the user can save the setup table in the results table
for future use as a result. The result variable name will be the name of the
variable that was used in TSETUP=<result>. If no result variable table was
provided, a default result variable name of "SETUPTABLE" is used and stored at
the PARENT level.
A graphical primitive (PLOT, LIST2, etc.) with a /WIN= switch will attempt to
attach to the named object. A graphical primitive that does not have a /WIN=
switch will look in the REG.WIN table for an entry matching its /ID= value.
If not found, it will create its own window frame.
NOTE: A graphical primitive using a /WIN= that refers to a non existent pane in
a panel will have a delay before coming up and will eventually display in a new
window frame.
Multiple panels with different graphical primitives can be attached to them
using the combination of the /PANES= switch on the panel and /WIN= switch on the
graphical primitive (e.g. PLOT, LIST2). For example, to have two panels and
plots of world.prm and world.shp in each panel separately:
...
! setup two panels
panel/panes=win1/setup=1 ! 1st panel using setup file <macrofile>.mpp1
panel/panes=win2/setup=2 ! 2nd panel using setup file <macrofile>.mpp2
! attach plot of world.prm to first panel (win1) on pane1 (defined in .mpp1)
plot/win=win1.pane1 world.prm
! attach plot of world.shp to second panel (win2) on pane1 (defined in .mpp2)
plot/win=win2.pane1 world.shp
...
If the /GRID={table} switch is present, an NxM grid of evenly spaced panes is
generated regardless of the mmp file contents. The table entries are
NX - number of panes in the horizontal direction
NY - number of panes in the vertical direction
ID - id + index is the pane id
NAME - name + index is the pane name
TITLE - title + index is the pane title
TS - the title size in pixels (=0 to suppress)
This primitive also has n timers where n may be set with the /NTIMERS switch.
A timer sends messages to the macro's processMessage procedure when the timer
activates. To set up an interval timer at 2 second intervals:
nM> set REG.PANEL.TIMER(0) 2
or to trigger a single event after 10 seconds:
nM> set REG.PANEL.TIMER(0) -10
The timers respond to the MAIN macro id with the message name TIMER, the timer
number (0...n) in the info field and the current TimeOfDay in the data field.
Popping Out Graphical Primitive Panes from Macro GUIs
=====================================================
Typically, unless disabled, a user can click on the 'X' at the top-right corner
of a pane in a macro to 'POP' it out of the macro onto a stand-alone panel.
Clicking the 'X' again (or closing the panel) will 'PUSH' the panel back onto
the pane.
Since 3.1.0, users can click on the 'X' while holding the CTRL key down on the
keyboard to bring up a small menu which prompts the user to select a destination
screen/display for the 'POP'. Note that users with Xinerama displays do not
have multiple displays for this purpose. This behaviour can be disabled using
option=-AdvPushPopX for all panes on the panel command line, or setting
enableAdvancedPopOut to false in any graphical primitive.
Also since 3.1.0, the 'POP' message has been expanded. The QUALS field (Table)
can now be used to set the Display (DISP) and Bounds (X,Y,W,H) as in the
following example:
res t:loc {DISP=^gc.winNo.value,BOUNDS={X=^gc.xpos.value,Y=^gc.ypos.value,&
W=^gc.width.value,H=^gc.height.value}}
message send id=myplot name="POP" info=-1 quals=loc
Control Placement
=================
By default controls will be stacked in the left pane (pane0). The /OPTIONS
switch can be used to allow the controls to be compressed when they take up
all of the vertical space. When a group of controls is opened, selecting the
COLLAPSECONTROLS option will collapse another control group to make space for
the group just opened.
If the controls still take up all of the vertical space, a scrollbar will appear
at the bottom (Since NeXtMidas 2.5.2). This should not be used with the
COLLAPSECONTROLS option.
Control Layout Updates
======================
Typically, whenever a control is updated it indicates to the panel that the
panel needs to update the layout. Updating the layout involves placing each
control and using compression to make all the controls fit.
Since NeXtMidas 2.8.2, it is possible to set the panel to hold all the layout
updates. This is typically done when doing a large number of control updates
and the user does not want the panel to re-do the layout before all the
updates are done.
set reg.panel.holdLayout true
...<do a bunch of gcontrol updates / changes>...
set reg.panel.holdLayout false
Pane Icon Control
======================
Since NeXtMidas 3.5.4, it is possible to add a second custom icon to the left
of the PUSHPOP icon and to control the action(s) of both the PUSHPOP and the
custom icon. The custom icon can be the Shaded 'X' or any symbol supported by
nxm.sys.libg.Symbol class.
Example setting the PUSHPOP icon action to both message and PushPop, the
custom icon to DIAMOND and the custom icon action to both autoCLOSE and Message:
panel/setup/controls=gc/PUSHPOPICONACTION=PushPop|Message/&
CUSTOMICONACTION=Close|Message/CUSTOMICONSYMBOL=Diamond
Example setting the custom icon to the Shaded 'X' (with a default action of
autoCLOSE). The PUSHPOP action is also left at the default of PushPop:
panel/setup/controls=gc/CUSTOMICONSYMBOL=ShadedX
Messages:
ATTACH - TBE
BORDERS - TBE
BUTTON - TBE
CFG.ADD - TBE
CFG.LINE - TBE
CFG.PANE - TBE
COMMAND - TBE
CONTROLS - TBE
CURSOR - Sets the normal cursor for panel ("Default,Wait,Hand,Move").
DEBUG - TBE
DELETE - TBE
DOPOP - TBE
DRAG - TBE
DRAGBOX - TBE
ERROR - (OUT) If the /HEADLESS tag is not set and the Shell is
detected to be headless, an error message is sent to
the macro to enable handling of the situation to
prevent the system from appearing to hang.(Since 3.5.0)
DATA = java.awt.HeadlessException
EVENTS - TBE
EXIT - TBE
KEYPRESS - TBE
LOADFILE - Loads a setup file when given full file name.
LOADSETUP - Loads a setup file when given ID (same as /SETUP switch).
LOADSETUPTABLE - Loads the setup from a given table.
MACRO - TBE
MENU - TBE
OPTIONS - TBE
PANEL - TBE
PANEL.CFG - TBE
PIPE - TBE
POINTER - TBE
REFRESH - TBE
RESIZE - TBE
SAVEFILE - Saves a setup file (.mmp) when given full file name.
SAVERESULT - Saves setup to a results variable
SAVETABLEFILE - Saves a setup file (.tbl) when given a full file name
SHOW - TBE
SHOWN - DEPRECATED
THEME - Change the theme of the control panel and its widgets
TIMER - Message occurring at a user set interval (1 to n messages)
TITLECOLOR - TBE
TITLESIZE - TBE
TITLETEXT - TBE
WINDOW - (IN) Internal message, not for general use.
Properties:
CONTROLS - returns the table of control widgets
EVENTFILTER - sets NOMOUSE|NOKEYBOARD|NOICON|NOMOVE events masks on all
controls
PANES - returns the table of window panes
TIMER(n) - sets interval (>0) or countdown (<0) timer in seconds
WIDGET - adds a control widget to the panel's control section
OPTIONS - set various options include (see /OPTIONS switch)
Examples:
The following creates a panel with a grid of panes numbered top-to-bottom and
left-to-right, titled WIN1...WIN12.
nM> panel/grid={NX=3,NY=4,TS=12,FILL=TBLR,TITLE=WIN}
Switches:
/CONTROLS=res - Specifies result name pointing to the table of control
widgets
/CUSTOMICONACTION - Action of the custom icon MESSAGE|CLOSE. The default
action is None,except where the custom icon is the
Shaded 'X'. When the icon is the Shaded 'X', the default
action is CLOSE (autoCLOSE the command and Pane and
resize the remaining Panes to fill the space)
Since NeXtMidas 3.5.4
/CUSTOMICONSYMBOL - Symbol used as the custom icon NONE,SHADEDX, or any
Symbol supported by nxm.sys.libg.Symbol (includes any
individual character) [DEFAULT=NONE]
Since NeXtMidas 3.5.4
/EXIT= - Mask of allowed EXIT events from RETURN,MENU,MESSAGE,WINDOW
[DEFAULT=ALL if piped or WINDOW otherwise]
/GRID={table} - Creates a grid of panes inside the panel. Table keys are:
NX - Number of rows [DEFAULT=4]
NY - Number of columns [DEFAULT=4]
NAME - Prefix for each pane [DEFAULT=GP]
TITLE - Prefix for pane titles, window number appended
[DEFAULT=Pane]
TS - Font (text) size [DEFAULT=10]
FILL - LRTB=Left-to-right then top-to-bottom
TBLR=Top-to-bottom then left-to-right
/HEADLESS - Do not show a window if TRUE [DEF=FALSE]
/HIDEWIDGET - Experimental switch to allow hidden widgets (ones not
supported by the current layer type) to be removed
Experimental switches can be removed in a future release.
[DEFAULT=FALSE]
/INLINE - Remove borders to allow embedding in another display
[DEFAULT=TRUE]
/JSETUP=name - Uses Java class as a setup file (e.g. SD360/jsetup)
/LOGGER - Enables display of INFO, WARN, and ERROR messages in the
bottom fixed region
/MSGID= - Message ID to which to send messages
/NOPUSHPOP - Disables user Push/Pop for a window (such as clicking the
'X' when popped out). This does not affect Push/Pop
messages from a macro).
/NOALTTITLE - Disables automatic updates to the status/title bar text
from events such as mouse hovers. This will apply to ALL
commands (plots, gcontrols, etc) in the control panel.
Since 3.3.0.
/NTIMERS - Number of timers [DEFAULT=3]
/OPTIONS=mask - Sets the options for the panel (if present).
+RotateTabs - Tabs rotate when selected.
+PushPopX - Display the Push/Pop 'X' for panes.
[enabled by default]
+CompressControls - Compress Controls to fit in window.
[enabled by default]
+CollapseControls - Collapse Control Groups to fit.
+LockSetup - Do not allow users to change setup.
+LockControls - Do not allow users to move controls.
+AdvPushPopX - (Since 3.1.0) Enable Pop Menu on
CTRl+click 'X' [enabled by default]
/PANES=res - Specifies registry name to contain the table of panes
[DEFAULT=WIN]
/PUSHPOPICONACTION - Action of the PUSHPOP icon PUSHPOP|MESSAGE
[DEFAULT=PUSHPOP] Since NeXtMidas 3.5.4
/PUSHPOPICONSYMBOL - For Internal Use Only: Symbol used as the PUSHPOP icon
PUSHPOP or SHADEDX. Allows users to revert back to the
old Shaded 'X' for the PUSHPOP icon [DEFAULT=PUSHPOP]
Since NeXtMidas 3.5.4
/SETUP=opt - Uses alternate macro setup file. Use /JSETUP to use a
Java class instead. [DEFAULT=Uses .mmp file]
/TABS - Deprecated - Use the /OPTIONS switch.
/THEME=name - Change theme to one of the predefined themes available in
nxm.sys.libg.Theme (DeskTop,Default,WoB,GoB,BoW,Browser,
Gear1,Gear2,Gear3,Gear4,Nak,etc.) [DEFAULT=ENV.THEME]
/THEME={table} - Creates a custom theme. Table keys are:
CBG - background color
CFG - foreground color
CWBG - widget background color
CWTS - widget top shade
CWBS - widget bottom shade
CWMS - widget middle shade
CWFH - current widget foreground highlight (Roll down
name color)
CWFG - current widget foreground color
CWTI - current widget title color
Acceptable values for all table keys are name or number
strings as specified in
nxm.sys.libg.MColor.getColor(String).
(see nxm.sys.libg.MColor).
/TSETUP=tbl - Uses a Table as a setup file (can be a .tbl file).
/WMSGID= - Message ID to which to send WINDOW event messages. If not
present WINDOW message is processed by the PANEL
primitive [DEFAULT=null].
/WPOS= - Set the position of the plot when it opens, use the
syntax "WPOS=(X,Y,Width,Height)" where all values are in
pixels.
See Also: nxm.sys.libg.MColor, nxm.sys.libg.Theme, nxm.sys.libg.Symbol