HBox()
HBox(frame)
VBox()
VBox(frame)
VBox(frame, 0or1)
A box usually organizes a collection of graphs and command panels, which would normally take up several windows, into a single window. Anything which can have its own window can be contained in a box.
As with all classes, a box must have an object reference pointer, and can be manipulated through this pointer. You must use the .map command to make a box appear on the screen.
A VBox with a second arg of 1 makes a vertical scrollbox.
HBox() tiles windows horizontally.
VBox() tiles windows vertically.
The default frame is an inset frame. The available frames are:
Example:
objref b b = new VBox(2) b.mapcreates an empty box on the screen with a light gray inset frame.
box.intercept(1)
box.intercept(0)
Example:
objref vbox, g vbox = new VBox() vbox.intercept(1) //all following creations go into the "vbox" box g = new Graph() xpanel("") x=3 xvalue("x") xbutton("press me", "print 1") xpanel() vbox.intercept(0) //ends intercept mode vbox.map() //draw the box and its contents
.map("label")
.map("label", left, top, width, height)
Example:
objref b b = new VBox(2) b.map //actually draws the box on the screencreates an empty box on the screen with a light gray inset frame.
b.unmap()
b.unmap(accept)
Dismiss the last mapped window depicting this box. This is called automatically when the last hoc object variable reference to the box is destroyed.
If the box is in a VBox.dialog() the argument refers to the desired return value of the dialog, 1 means accept, 0 means cancel.
Example:
double s[4] proc size() { if ($o1.ismapped) { $o1.size(&s[0]) print $o1, s[0], s[1], s[2], s[3] } } objref vboxes vboxes = new List("VBox") for i=0, vboxes.count-1 size(vboxes.object(i))
box.save("proc_name")
box.save("string")
box.save(str, 1)
box.save(str, obj)
Execute the procedure when the box is saved.
The default save procedure is to recursively save all the items in the box. This is almost always the wrong thing to do since all the semantic connections between the items are lost.
Generally a box is under the control of some high level object which implements the save procedure.
box.save(“string”) writes stringn to the open session file.
box.save(str, 1) returns the open session file name in str.
The object is referenced by the box. When the box is dismissed then the object is unreferenced by the box. This provides a way for objects that control a box to be automatically destroyed when the box is dismissed (assuming no other objectvar references the object). When .ref is used, the string in .save is executed in the context of the object.
Note: When objects are inaccessible to hoc from a normal objref they can still be manipulated from the interpreter through use of their instance name, ie the class name followed by some integer in brackets. As an alternative one may also use the dismiss_action() to properly set the state of an object when a box it manages is dismissed from the screen.
b = box.dialog("label")
b = box.dialog("label", "Accept label", "Cancel label")
Put the box in a dialog and grabs mouse input until the user clicks on Accept (return 1) or Cancel (return 0).
The box may be dismissed under program control by calling b.unmap(boolean) where the argument to VBox.unmap() is the desired value of the return from the dialog.
b.adjust(size)
b.adjust(size, index)
When a session file is created, the windows with higher priority (larger integer) precede windows with lower priority in the file. This allows windows that define things required by other windows to be saved first. For example, a CellBuild window has a larger priority than a PointProcessManager which needs a section declared by the cell builder. A MulRunFitter has even lower priority since it may refer to the point process managed by the manager. Default priority is 1.
The priority scheme, of course, does not guarantee that a session file is consistent in isolation since it may depend on windows not saved.
Priority range is -1000 to 10000
Some existing priorities are:
SingleCompartment 1000
CellBuild 1000
PointProcessManager 990
Electrode 990
PointGroupManager 980
NetworkReadyCell 900
ArtificialCell 900
NetGUI 700
SpikePlot 600
Inserter 900
RunFitter 100
FunctionFitter 100
MulRunFitter 100