This document in organized into the following sections:
create [21] Create new items
delete [23] Delete existing items
find[31] Search for items by various keys
isvisible [55] Return true if the specified item is visible.
itemconfigure Configure existing items
lower[60] Push an item lower in the drawing order
pick[65] Find the item under a point
popcoordframe[66] Pop a relative coordinate frame off of the stack
pushcoordframe[68] Add a new relative coordinate frame to the stack
raise[69] Bring an item higher in the drawing order
resetcoordframe[75] Reset coordinate frame stack to empty
setid[82] Change the id of an item
text[91] Modify text item
type [93] Get the type of an item
-aliases [1] (Read-only) Returns all aliases of the item
-arrow [7] Whether to draw arrow heads with this item
-arrowshape [8] The shape of drawn arrow heads
-height [26] Height of an item. Normally computed, but can be set to squash/stretch item
-html [27] The HTML item associated with an htmlanchor
-htmlanchors [28] The anchors associated with an HTML page
-image [29] Image data associated with item (allocated by image alloc)
-info [30] A place to store application-specific information with an item
-ismap [31] True if an htmlanchor is an image map
-lock [35] Locks an item so it can not be modified or deleted
-state [53] State of an item (such as visited, unvisited, etc.)
-sticky [54] Specifies if an item should stay put when the view changes
-text [56] The text of any item containing text
-timerrate [57] Frequency timerscript should fire
-timerscript [58] Script associated with an item that fires at regular intervals
-title [59] Some items only: Title of an item
-url [63] The URL associated with an item
-width [68] Width of an item. Normally computed, but can be set to squash/stretch item
-zoomaction [70] A script that gets evaluated when an item is scaled larger or smaller than a set size
animate [1] Animate item options asynchronously
bbox [10] Get the bounding box of an item
coords [20] Change the coordinates of an item
getsize [44] Get the size of an item (possibly within portals)
rotate [76] Rotate an item
scale [77] Change the size of an item relatively
slide [88] Move an item relatively in (x, y)
-anchor [3] The part of the item that -position refers to
-position
-angle [5] Specifies absolute rotation of item
-anglectr [6] Specifies absolute rotation of item, rotating about specified point
-position [47] The absolute position of the object (x, y, scale)
-position
center [15] Change the view so as to center an item
centerbbox [16] Change the view so as to center a bounding box
getview [47] Get the current view (possibly within portals)
getzoom [48] Get the current view magnification (possibly within portals)
moveto [62] Change the view (possibly within portals)
zoom [99] Zoom the view around a specified point
-lookon [36] Specifies the pad widget this item sees
-view [65] Specifies the view this item sees
-viewscript [66] A script that gets evaluated whenever the view is changed
addtag [5] Add a tag to an item
deletetag [23] Delete a tag from an item
dtag [23] Synonym for deletetag
gettags [45] Get the tags an item has
hastag [51] Determine if an item has a particular tag
-tags [55] List of tags associated with an item
bind [11] Create, modify, access, or delete event bindings
bindtags [12] Specify whether events should go to the most-specific or most-general description
focus [32] Set the focus for keyboard events
modifier [61] Manipulate user-defined modifiers
-events [20] True if item receives events, false otherwise
addgroupmember [2] Add an item to a group
getgroup [38] Get the group an item belongs to
removegroupmember [72] Remove an item from a group
-divisible [16] True if events go through a group to its members
-members [38] The list of members of a group
grid [50] Manage item layout in a grid as with the Tk grid command
layout [58] Layout items once
tree [92] Manage item layout with a dynamic graphical-fisheye view tree
damage [22] Specify that a group of items needs to be redrawn
update [94] Force any requested render requests to occur immediately
-alwaysrender [2] True if the item must be rendered, even if the system is slow and the item is small
-border [10] Specifies border color of item
-borderwidth [11] Specifies width of border
-capstyle [12] Specifies how to draw line ends
-clipping [13] Controls if items are clipped to their bounding box when rendered
-dither [15] Render with dithering
-faderange [21] Range over which an item fades in or out
-fill [23] Specifies fill color of item
-font [24] Specifies font to use for text
-joinstyle [32] Specifies how to draw the joints within multi-point lines
-layer [33] The layer an item is on
-noisedata [42] Specifies parameters to render item with noise
-maxsize [37] The maximum size an item is rendered it (absolute or relative to window size)
-minsize [41] The minimum size an item is rendered it (absolute or relative to window size)
-pen [45] Specifies pen color of item
-penwidth [46] Specifies width of pen
-relief [49] Specifies how border should be rendered (raised, flat, sunken, ridge, groove)
-transparency [61] Transparency of an item. 0 is completely transparent, 1 is completely opaque
-visiblelayers [67] The layers that are visible within this view (just for portals and surface, item #1)
border [13] Manipulate a fake 3D border for use in a render callback
color [18] Manipulate a color for use in a render callback
render [73] Configure and use renderer
renderitem [74] Render an item in a render callback
-renderscript [50] A script that gets evaluated every time an item is rendered
-bb [9] A script that gets evaluated to specify the bounding box of an item
cache [14] Control item cache
read [71] Read a .pad file
write [98] Write a .pad file (all the items on a widget)
-file [22] File an item should be defined by
-writeformat [69] Controls whether disk-based item is written out by copy or reference
configure [19] Modify the pad widget
font [33] Manipulate fonts and the font path
html [52] Manipulate and query an html page and its anchors.
image [53] Manipulate images
info [54] Get type-specific information about an item
layer [57] Manipulates layers
random [70] Generates a random integer
setlanguage [84] Set the language to be used for future callback scripts
settoplevel [87] Set the language to be used by the top-level interpreter
sound [89] Manipulate and play sounds
windowshape [97] Modify the shape of the top-level window that a pad widget is in
-donescript [17] A script to evaluate when a background action has completed
-errorscript [19] A script to evaluate when a background action has an error
-reference [48] What item an alias references
-updatescript [62] A script to evaluate when a background action has made progress
clock [17] Create a clock to measure elapsed milliseconds
getdate [37] Get the current date in unix format
getpads [42] Get a list of all pad widgets currently defined
line2spline [59] Generate points for a spline that approximate a line
noise [63] Generate 'perlin' noise
padxy [64] Convert a window point (x, y) to pad coordinates
spline2line [90] Generate points for a line that approximate a spline
urlfetch [95] Retrieve a URL over the internet in the background
warp [96] Warp (move) the core pointer
-command [14] Callback for widgets
-editable [18] True if text item is editable
-from [25] Starting value of valuator widget
-linesize [34] Amount widget should change to represent a line change
-memberlabels [39] List of labels for a pull-down or pop-up menu
-menubar [40] Menubar associated with a frame
-orientation [43] Orientation of widget (horizontal or vertical.)
-pagesize [44] Amount widget should change to represent a page change
-to [60] Ending value of valuator widget
-value [64] Current value of valuator widget
printtree [67] Print all the items on the pad surface in their internal tree structure
addoption [4] Create a new option for an existing type
addtype [6] Create a new item type
pad command is the sole addition which is described below. In addition, the Pad++ distribution comes with an application written entirely in Tcl called PadDraw. This application is a general-purpose drawing and demo program that shows many capabilities of the pad widget. There are two scripts which can be used to run Pad++. 'pad' is a script which sets the appropriate environment variables and runs padwish, giving a Tcl prompt. 'paddraw' is started by running the paddraw script which automatically runs padwish and starts the Tcl PadDraw program. When running PadDraw by executing paddraw, the Tcl interpreter is not available.
padwish [options] [arg arg ...]Valid options are:
-colormap colormap
-display display
-geometry geometry
-help
-language
-name name
-norgb
-sharedmemory
-sync
-visual visual
--
pad [pathName [options]]
pad command creates a new window (given by the pathName argument) and makes it into a Pad++ widget. If no pathName is specified, a unique top-level window name will be generated. Additional options may be specified on the command line or in the option database to configure aspects of the Pad++. The pad command returns the name of the created window. At the time this command is invoked, there must not exist a window named pathName, but pathName's parent must exist.Once a Pad++ widget is created, there are five ways of writing Tcl code for it. They are:
-width and -height control the geometry of the widget.
pad .pad creates a widget named .pad, and a command named .pad. For example, to find out what the current view on the pad widget is, use the getview command with: .pad getview.
create sub-command. For example, .pad create line 0 0 10 10 creates a line from the origin to the point (10, 10).
itemconfigure sub-command. For example, supposing that the previous line had an id of 2, we could change its pen color and width with: .pad itemconfigure 2 -pen red -penwidth 5
This version of Pad++ works with either Tcl7.5/Tk4.1 or Tcl7.6/Tk4.2.
Note that in this reference manual, optional parameters are listed in square brackets, [...]. While this is traditional for reference documentation, the Tcl/Tk documentation uses ?...? to denote optional parameters in order to avoid confusion with the meaning of [...] in the Tcl language. We decided to risk the confusion with Tcl for the increased clarity of square brackets.
background
Background
-background
.pad config -background gray50
closeEnough
CloseEnough
-closeEnough
cursor
Cursor
-cursor
debugBB
DebugBB
-debugBB
debugEvent
DebugEvent
-debugEvent
debugGen
DebugGen
-debugGen
debugOut
DebugOut
-debugOut
.pad config -debugOut foo" will cause all future debug output to be appended to the Tcl variable 'foo'.
debugRegion
DebugRegion
-debugRegion
defaultEventHandlers
DefaultEventHandlers
-defaultEventHandlers
defaultRenderLevel
DefaultRenderLevel
-defaultRenderLevel
desiredFrameRate
DesiredFrameRate
-desiredFrameRate
-alwaysrender) flag, and some objects may be rendered at low resolution. The default is 20 frames/second.
dissolveSpeed
DissolveSpeed
-dissolveSpeed
doubleBuffer
DoubleBuffer
-doubleBuffer
fastPan
FastPan
-fastPan
fontCacheSize
fontCacheSize
-fontCacheSize
gamma
Gamma
-gamma
height
Height
-height
heightmmofscreen
HeightMMOfScreen
-heightmmofscreen
interruptible
interruptible
-interruptible
maxZoom
MaxZoom
-maxzoom
mediumObjSize
MediumObjSize
-mediumObjSize
-smallObjSize configuration option.)
refinementDelay
RefinementDelay
-refinementDelay
smallObjSize
SmallObjSize
-smallObjSize
-mediumObjSize configuration option.)
sync
Sync
-sync
units
Units
-units
width
Width
-width
widthmmofscreen
WidthMMOfScreen
widthmmofscreen
pad command creates a new Tcl command whose name is pathName. This command may be used to invoke various operations on the widget. It has the following general form:
pathName animate subcommand [args ...]
animate command is the key to a sophisticated animation engine that allows asynchronous animations of most options of items on the Pad++ surface. An item can be moved across the screen while its color is being changed while another is being rotated. This all happens in the background so that Pad++ continues to process events while animations happen.
set txt [.pad create text -text "Hello World" -pen yellow \
-pos {0 -50 0.2} -anchor center]
set txtpath [.pad anim create path -path {{0 -50 0.2} {0 -50 5}} \
-endtime 2]
set txtchannel [.pad anim create channel -object $txt \
-path $txtpath -option -pos]
.pad anim start $txtchannel
create AnimationUnit [option value ...]
set path [.pad anim create path -path {0 1}]
set channel [.pad anim create channel -path $path]
.pad anim configure $channel -endtime 3
Path configuration options:
-path [path]: path is the set of "points" that defines the values to be visited by the curve. The "points" define a "polyline" in one, two, or three dimensions.
Example:
.pad anim config -path {1.0 2.0 3.0}
.pad anim config -path {{1.0 2.0} {3.0 4.0} {5.0 6.0}}
.pad anim config -path {{1.0 2.0 3.0} {4.0 5.0 6.0} \
{7.0 8.0 9.0}}
-timepath [timepath]:
Timepath is a set of time value pairs that define both the values and the time that each value should be reached. This allows one to more exactly specify the the timing of the animation and to produce animations that do not operate at a constant speed. One use for such animations is when one wants to simulate a physics-like animation by calculating position of an object at specific times to define an animation. If a path is specified with -endtime instead of -endtime, the first value of each data set is treated as a time. Times must increase in value from one data set to the next. Each data set must contain at least two values, a time value and one, two, or three values to specify the configuration values defining the path.
Examples:
.pad anim config -timepath {{1.0 2.0} {3.0 4.0} {5.0 6.0}}
.pad anim config -timepath {{1.0 2.0 3.0} {4.0 5.0 6.0} \
{7.0 8.0 9.0}}
(See bouncing ball example below.)
-begintime [timeInSec]Time, in seconds, that defines when the first value of the path is obtained
-endtime [timeInSec]: Time, in seconds, that defines when the last value of the path is obtained
-intime [inTime]:
One may want to have the animation start somewhere other than at the first value of the path. This can be accomplished be specifying the -endtime which must lie between -endtime and -endtime (inclusive). In combination with -endtime, a slice of an animation can be specified.
-order orderThe number of parameters per entry in the path. Order may be 1, 2, or 3, and must match the order of the option the path is used with.
-outtime [inTime]:
One may want to have the animation end somewhere other than at the last value of the path. This can be accomplished be specifying the -endtime which must lie between -endtime and -endtime (inclusive). In combination with -endtime, a slice of an animation can be specified.
-post [postCondition]This specifies what happens when the current time passes -endtime. The possible values for this option are: constant, cycle, or oscillate
-endtime, the last value of the path is applied.
-endtime, the interpolated value is projected back to the first value in the path, and the path is cycled through from the beginning.
-endtime, the interpolated value is reflected from the final value in the path, toward the first value.
-pre [preCondition]:
This specifies what happens when the current time is before -endtime. The possible values for this option are: constant, cycle, or oscillate
-endtime, the first value of the path is applied.
-endtime, the interpolated value is projected to the last value in the path, and the path is cycled through from the end toward the beginning.
-endtime, the interpolated value is reflected back from the first value in the path, toward the final value.
-siso [boolean]Indicates whether to apply a slow-in-slow-out effect to the animation. Default value is "0" (off).
Example:
set rec [.pad create rectangle 0 0 100 100 -fill blue]
set recp [.pad anim create path -path {{-100 0 1} {100 0 1}} \
-endtime 2 -siso 1]
set recc [.pad anim create chan -path $recp -object $rec \
-option -pos]
.pad anim start $recc
Channel configuration options:
-path [pathToken]pathToken specifies the animation path to be applied to the channel's option
-object [tagOrId]tagOrId specifies the object/objects that are to be affected by the channel
-option [option]
Option specifies the item configuration option that will be animated by interpolating along the animation path. The channel's path must be of the same order as the option. This means that if the option to be animated is -endtime, the path is a single list of values (i.e. -path {1.0 2.0 4.0 8.0}), if the option is -endtime, the path should be a list of lists containing three values each (i.e. -path {{1.0 3.0 4.0} {2.0 1.0 7.0} {5.0 8.0 10.0}} ).
Presently supported options that one may want to animate:
Order 1:
Order 3:
-begintime [timeInSec]
Sets the -endtime of the path associated with the channel. This is just a convenience. Beware that if you set the -endtime of a channel, all channels using this same path are affected. (See -endtime for paths, above)
-endtime [timeInSec]
Sets the -endtime of the path associate with the channel. This is just a convenience. Beware that if you set the -endtime of a channel, all channels using this same path are affected. (See -endtime for paths, above)
Animation configuration options:
-members [listOfChannelsAndAnimations]:Used to add animatables to an animation. Both channels and animations are animatable and can be a member of an animation. An animation cannot be a member of itself.
Example:
.pad anim config anim0 -members "chan0 chan1 anim1"
-begintime [timeInSec]:
If an animation (anim0) is a member of another animation (anim1), -endtime specifies the delay time after anim1 is started, that anim0 should be started
-endtime [timeInSec]
By default, this is the amount of time for all animatables to finish their animation. If set to a value less than the default, all animatables will stop at the parent animation -endtime. If set to a value greater than the default, there is no noticeable effect.
-speedfactor [speedFactor]By default this is 1.0. If one sets it to 2, the animation will be played twice as fast etc.
configure AnimationUnit [option value ...]
create command.
.pad anim config path0 -endtime 10
delete AnimationUnit
start AnimationUnit
interrupt AnimationUnit
getinterpval timeInSec
-endtime or -begintime of a channel, it is the path that is associated with the channel that is actually affected. Be careful that the affected path is not also being used in another channel that needs a different -endtime and -begintime. If it is, make another path with the same data and the desired -endtime and -begintime.
.pad anim start channelToken', each channel has its own timer. So if you have several channels playing in overlapping time, you have several timers going. If you place several channels into a parent animation, when you play that animation all the channels are played using one timer. If you place animations within a parent animation, when the child animations are playing, each uses its own timer.
-rposition does not account for the -angle of the group. So the orientation of the motion of item 5 is not rotated with the group.
######################################################################
# IMPROVED HELLO WORLD ANIMATION
# Here is an animation to illustrate the combining of
# channels and animations into a single animation.
######################################################################
# Set up hello world channel
set txt [.pad create text -text "Hello World" -pen yellow \
-pos {0 -50 0.2} -anchor center]
set txtpath [.pad anim create path -path {{0 -50 0.2} {0 -50 5}} \
-endtime 2]
set txtchannel [.pad anim create channel -object $txt -path $txtpath \
-option -pos]
# Make four rectangles
for {set i 0} {$i<4} {incr i} {
.pad create rectangle 0 0 100 100 -fill black -pos {0 50 1} -tags rect$i
}
# Make a two paths, one first order and one third order
set p0 [.pad anim create path -path {0 180 90}]
set p1 [.pad anim create path -path {{0 0 0} {255 0 0} {0 255 0} \
{0 0 255} {0 0 0}} -post cycle]
# Make two channels for each object.
# One channel for changing -angle
# the other for changing -fill
set j 0
for {set i 0} {$i<8} {incr i 2} {
set obj [.pad find withtag rect$i]
set c$i [.pad anim create channel -object $obj -option -angle \
-path $p0 -begintime 0 -endtime 6]
set c[expr $i+1] [.pad anim create channel -object $obj -option -fill \
-path $p1 -begintime 3 -endtime 12]
incr j
}
# Make three animations containing only channels
# and one animation containing channels and the
# other animations
set a0 [.pad anim create anim -members "$c0 $c1" -endtime 10 \
-begintime 2.5]
set a1 [.pad anim create anim -members "$c2 $c3" -endtime 10 \
-begintime 5.0]
set a2 [.pad anim create anim -members "$c4 $c5" -endtime 10 \
-begintime 7.5]
set a3 [.pad anim create anim -members "$txtchannel $c6 $c7 $a0 $a1 $a2" \
-endtime 10 -begintime 0]
.pad anim start $a3
#################################################
# BOUNCE:
# This example shows a bouncing ball animation.
# Kinematic equations are used to calculate the
# path for a bouncing ball that looses energy.
# A -timepath is created and applied to an oval
# in a rectangular box.
#################################################
.pad moveto 0 500 0.2
set box [.pad create rectangle -165 -50 165 1400 -penwidth 20]
set ball [.pad create oval 0 0 100 100 -fill blue -pos "0 0 1"]
set boxBall [.pad create group -members "$ball $box"]
set t 0.0
set a -98.0
set v0 500.0
set x0 0.0
set tpath ""
set delT 0.01
set coefRes 0.90
set endt [expr 2.0*$v0/$a]
set endit [expr abs(int($endt/$delT))]
set refTime 0.0
for {set j 1} {$j < 20} {incr j 1} {
for {set i 0} {$i <= $endit} {incr i 1} {
set t [expr $i*$delT ]
lappend tpath "[expr $refTime + $t] 0 [expr ((0.5)*$a*$t*$t \
+ $v0*$t + $x0)] 1"
}
set v0 [expr ($v0*pow($coefRes,$j))]
set refTime [expr $refTime + $t]
set endt [expr 2.0*$v0/$a]
set endit [expr abs(int($endt/$delT))]
}
set ballpath [.pad anim create path -timepath $tpath \
-endtime [expr $refTime + $t] -intime 5]
set ballchan [.pad anim create channel -object $ball -path $ballpath \
-option -rpos]
set ballanim [.pad anim create animation -members $ballchan]
# run the animation with:
.pad anim start $ballanim
####################################################
# USING A POLYLINE TO DEFINE A PATH:
# Here is an example of using a polyline to define
# a -path (a -timepath could be created by adding
# times in the "for" loop creating the pathlist).
####################################################
# To use the script, create a polyline (try one in the
# form of a big spiral), make sure it is selected,
# then enter the following code:
set coordlist [.pad coords [.pad find withtag selected]]
if {$coordlist == ""} {
set coordlist {0 0 100 0 100 100 0 100 0 0}
}
set len [llength $coordlist]
set curscale [lindex [.pad getview] 2]
set pathlist ""
for {set i 0} {$i < $len} {incr i 2} {
lappend pathlist "[lindex $coordlist $i] [lindex $coordlist \
[expr $i + 1]] $curscale"
}
# Here is an example of using "pathlist" to
# create an animation to move a rectangle
set obj [.pad create rectangle 0 0 50 50 -fill red]
set coordPath [.pad anim create path -path $pathlist]
set rectChan [.pad anim create channel -path $coordPath -object $obj \
-option -pos -endtime 10]
set myanim [.pad anim create anim -members $rectChan]
.pad anim start $myanim
##############################################
# USING A TIMEPATH
# Here is an example of using the coordinates
# to make a -timepath from coordPath, enter:
# This assumes that the previous example has
# already been run.
##############################################
set timepathlist ""
set time 0.0
for {set i 0} {$i < $len} {incr i 2} {
lappend timepathlist "[expr $time + log(int($i+1))] \
[lindex $coordlist $i] [lindex $coordlist [expr $i + 1]] $curscale"
set time [expr $time + (1.0/($i+1.0))]
}
set coordPath [.pad anim create path -timepath $timepathlist]
set rectChan [.pad anim create channel -path $coordPath -object $obj \
-option -pos]
set mytanim [.pad anim create anim -members $rectChan]
.pad anim start $mytanim
pathName addgroupmember [-notransform] tagOrId groupTagOrId
removegroupmember, and getgroup commands). Returns an empty string.



pathName addmodifier modifier
addmodifier is an obsolete command and will be removed in the next release. Replace all uses of addmodifier with the 'modifier add' command.
addoption [-nowrite] typename optionname optionscript default
addtype, or the special word "all" which means that this option applies to all types. When optionscript is called, the following arguments will be added on to the end of the script:
write command is executed. Note that the option will only be written out if the value is different than the default. If -nowrite is specified, then this option won't be written out. See the section APPLICATION-DEFINED ITEM TYPES AND OPTIONS in the Programmer's Guide for more information. (Also see the addtype command.)
[5]
pathName addtag tagToAdd tagOrId ...
eval .pad addtag foo [.pad find withtag bar]
addtype typename createscript
addoption command.)
[7] pathName
allocborder color
allocborder is an obsolete command and will be removed in the next release. Replace all uses of allocborder with the 'border alloc' command.
alloccolor color
alloccolor is an obsolete command and will be removed in the next release. Replace all uses of alloccolor with the 'color alloc' command.
allocimage file [-norgb]
allocimage is an obsolete command and will be removed in the next release. Replace all uses of allocimage with the 'image alloc' command.
bbox [-sticky] tagOrId [tagOrId tagOrId ...]
bbox returns the bounding box of the item as it appears for the current view. That is, the bounding box will be different when the view is different. If -sticky is specified, then the bounding box returned is independent of the current view (i.e., it returns the bounding box as if the view was "0 0 1").
bbox will refer to the bounding box of the portion of the surface that is currently visible (based on the view and window size).

bind tagOrId [sequence [command]]
bind command. I.e., you can do everything you can with the canvas with exactly the same syntax, but you can also do more.
focus command below for more on this).
bindtags command. The default is that a binding associated with the all tag is invoked first, followed by one binding for each of the item's tags (in order), followed by a binding associated with the item's id. If there are multiple matching bindings for a single tag, then only the most specific binding is invoked. A continue command in a binding script terminates that script, and a break command terminates that script and skips any remaining scripts for the event, just as for the bind command.
pad window using the Tk bind command, then they are invoked in addition to bindings created for the pad's items using the bind widget command. The bindings for items will be invoked before any of the bindings for the window as a whole.
bind command makes, Pad++ makes a few more. As with the Tk bind command, all substitutions are made on two character sequences that start with '%'. The special Pad++ substitutions are:
<Modify> events, it specifies the command that caused the modification. For <PortalIntercept> events, it specifies the name of the event type generating the PortalIntercept. Standard Tcl event names, such as ButtonPress or ButtonRelease are used. This can be used by PortalIntercept events to only let certain event types go through the portal. Note that only a single PortalIntercept event is generated for a Button, Motion, ButtonRelease sequence, so these three events can not be distinguished in this manner.
<create>: This event gets fired whenever new pad items are created. Because items that this is attached to don't have id's yet, it only makes sense to attach this event to a tag. Then this event gets fired immediately after any item of the relevant tag is created. Example:
.pad bind foo <Create> {puts "A foo was created, id=%O"}
.pad create rectangle 0 0 50 50 -tags "foo"
=> A foo was created, id=5
<Modify>: This event gets fired whenever an item is modified. Modification occurs whenever an item's configuration options are changed, and whenever the following commands are executed on an item: coords, itemconfigure, scale, slide, text, and moveto (on a portal) The %I macro specifies the command that caused the modification. Example:
.pad bind foo <Modify> {puts "A foo was modified, cmd=%I"}
.pad create rectangle 0 0 50 50 -tags "foo"
.pad itemconfigure foo -pen red
=> A foo was modified, cmd=itemconfigure
<Delete>: This event gets whenever an item is deleted. It is typically used to clean up application resources associated with the item that was deleted.
<Write>: This event fires whenever an item is written out with the pad write command. While Pad++ knows how to generate the Tcl code necessary to recreate itself, items are often part of an application with associated data structures, etc. When an item is written out, it is frequently necessary to write out these associated structures. Sometimes, the application may prefer to substitute its code for pad's. This event provides a mechanism to augment or replace (possibly with an empty string) the Tcl code written out to recreate a pad item.
<Write> event returns is appended on to the string pad uses to write out that object. In addition, the application may modify the special global Tcl variable, Pad_Write which controls whether the item will get written out. This defaults to 1 (true), but may be set to 0 (false) by the event binding. In addition, the <Write> event gets fired on the special tags "preWrite" and "postWrite" at the beginning and end of the file, respectively, to allow an application to write out code at the ends of the file. Example:
<PortalIntercept>: This event gets fired just before an event passes through a portal. If the event handler executes the break command, then the event stops at the portal and does not pass through. Example:
bind reference pages. A sequence contains a list of modifiers which are direct mappings to hardware such as the shift key, control key, etc. Event handlers fire only for sequences with modifiers that are active, as defined by the hardware.
addmodifier command (and may be deleted if they are no longer needed with the pad deletemodifier command.) Then, the modifier can be used in the pad bind command just like a system defined modifier. There may be at most one active user-defined modifier per pad widget. The active user-defined modifier is set with the setmodifier command (and may be retrieved with the getmodifier command). The current modifier may be set to "" (the default) in which case no user-defined modifier is set. Example:
bindtags tagOrId [type]
border subcommand arg ...
border alloc <bordercolor>
render command for an example of how to use a border).
border free <bordertoken>
allocborder.
[14] pathName
cache subcommand arg ...
cache in tagOrId
cache out tagOrId
cache configure [option [value] ...]
-dir dirSpecifies the directory to use for the cache. The actual directory will be <dir>/<pid> where pid is the process id of Pad++. It will be removed when the process exits. The cache should be on a local disk for reasonable I/O performance. It is not set by default and caching is disabled until the cache dir is explicitly set by the application.
-size sizeSize is the total memory available to the cache manager before it starts to cache out objects. It defaults to two megabytes. Caching can be disabled by setting size to zero.
-viewmultiple viewmultipleViewmultiple specifies a multiple of the view area the cache manager should use when deciding object visibility for purposes of caching. Its default value is 2 (so objects visible within twice the view are not cache out candidates). Setting it to 1 will cause images to be potentially get cached out when not in the view.
-delay delayDelay specifies the interval (in seconds) the cache manager should check and perform any actual cache outs. Its default value is 5 seconds. Setting it to 0 will cause immediate cache outs.
[15] pathName
center [-twostep] tagOrId [time x y [z [portalID ...]]]]


centerbbox [-twostep] x1 y1 x2 y2 [time [x y [z [portalID ...]]]]
z). If -twostep is specified, then make animation in two steps if appropriate (i.e., points not too close). The two steps are such that it zooms out to the midpoint between the two points far enough so that both start and endpoints are visible, and then zooms to the final destination. If time is specified, then make a smooth animation to the item in time milliseconds. The view is changed so that the bounding box appears at the position determined by (x, y), both of which are in the range (0.0 ... 1.0). Here, 0.0 represents the left or bottom side of the window, and 1.0 represents the right or top side of the window. (x, y) specifies the portion of the item that should appear at the portion of the screen, relatively. So, specifying (0, 0) puts the lower left corner of the bounding box on the lower left corner of the screen. (1, 1) puts the upper right corner of the bounding box on the upper right corner of the screen. x and y default to (0.5, 0.5), i.e. the center of the screen. If a list of portalID's is specified, change the view within the last one specified.
clock [clockName [reset | delete]]
color subcommand arg ...
color alloc <file>
render command).
color free <colortoken>
alloccolor.
[19] pathName
configure [option] [value] [option value ...]
Tk_ConfigureInfo for information on the format of this list). If option is specified with no value, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no option is specified). If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. Option may have any of the values accepted by the pad command. See the section on WIDGET-SPECIFIC OPTIONS for a description of all the options and their descriptions.
coords [-objectcoords] [-append] [-nooutput] tagOrId [x0 y0 ...]
coords command generates a <Modify> event on the items modified by it (see the bind command for a description of the <Modify> event). Locked items may not be modified by the coords command (see the -lock itemconfigure option). The coords command can only be used on line, rectangle, polygon and portal items.

set id [.pad create line -200 200]
for {set i -20} {$i <= 20} {incr i} {
set x [expr $i * 10 ]
set y [expr 0.5 * ($i * $i)]
.pad coords -append -nooutput $id $x $y
}
[21] pathName create type [option value ...]
damage [tagOrId]
update procedure is called. Returns an empty string.
delete tagOrId [tagOrId ...]
delete command generates a <Delete> event on the items modified by it (see the delete command for a description of the <Delete> event). Locked items may not be modified by the delete command (see the -lock itemconfigure option).
pathName deletemodifier modifier
deletemodifier is an obsolete command and will be removed in the next release. Replace all uses of deletemodifier with the 'modifier delete' command.
pathName deletetag tagToDelete tagOrId [tagOrId ...]
dtag is an alias for deletetag
eval .pad deletetag foo [.pad find withtag bar]
[26] pathName
drawborder border type width x1 y1 x2 y2
drawborder is an obsolete command and will be removed in the next release. Replace all uses of drawborderwith the 'render draw border' command.
drawimage imagetoken x y
drawimage is an obsolete command and will be removed in the next release. Replace all uses of drawimage with the 'render draw image' command.
drawline x1 y1 x2 y2 [xn yn ...]
drawline is an obsolete command and will be removed in the next release. Replace all uses of drawline with the 'render draw line ' command.
drawpolygon x1 y1 x2 y2 [xn yn ...]
drawpolygon is an obsolete command and will be removed in the next release. Replace all uses of drawpolygon with the 'render draw polygon' command.
drawtext string xloc yloc
drawtext is an obsolete command and will be removed in the next release. Replace all uses of drawtext with the 'render draw text' command.
find [-groupmembers] [-regexp | -glob] searchCommand \
[arg arg ...] ["&&" | "||"] [searchCommand [arg arg ...]]
.pad find -regexp withtag 5*" will look for the object with an id of 5.
withtag searchCommand without a regular or glob-style expression. The slowest finds occur when regular or glob-styles expression are used on string arguments. In this case, for every item on the surface, the regular or glob-styles expression is compared to the particular attribute of each object.
allReturns all the items on the pad.
above tagOrId: Returns the items above (after) the one given by tagOrId in the display list. If tagOrId denotes more than one item, then the lowest (first) of these items in the display list is used to search above. If the search type is a regular expression or glob-style search which denotes more than one item, then the first tag will be used, based on alphabetical order, and then the highest (last) of these items is used to search above.
below tagOrIdReturns the item just before (below) the one given by tagOrId in the display list. If tagOrId denotes more than one item, then the first (lowest) of these items in the display list is used.
closest x y [halo]Returns the items closest to the point given by x and y. If halo is specified, then any items closer than halo to the point will be returned. Halo must be a non-negative number. If halo is not specified, then only items overlapping the point (x, y) will be returned.
withinfo infoIf a regular expression or glob-style search is used, this returns all the items for which their info itemconfigure option matches the pattern info. If an exact search is used, this returns all the items for which their info itemconfigure option is the same as the string info.
withlayer layerIf a regular expression or glob-style search is used, this returns all the items for which the name of their layer matches the pattern layer. If an exact search is used, this returns all the items in which the name of their layer is the same as the string layer.
withname nameIf a regular expression or glob-style search is used, this returns all the items for which their name matches the pattern name. If an exact search is used, this returns all the items for which their name is equal to the string name. A name is a URL for an HTML item, and a filename for textfile and image items.
withsticky typeReturns all the items that are sticky type.
withtag tagOrIdIf tagOrId is a number, this returns that item. If a regular expression or glob-style search is used, this returns all the items for which their tag matches the pattern tagOrId. If an exact search is used, this returns all the items for which their tag is equal to the string tagOrId.
withtext textIf a regular expression or glob-style search is used, this returns all the items for which their text matches the pattern text. If an exact search is used, this returns all the items for which their text is equal to the string text.
withtype typeIf a regular expression or glob-style search is used, this returns all the items for which their type matches the pattern type. If an exact search is used, this returns all the items for which their type is equal to the string type.
enclosed x1 y1 x2 y2Returns all the items completely enclosed within the rectangular region given by x1, y1, x2, and y2. x1 must be no greater then x2 and y1 must be no greater than y2.
overlapping x1 y1 x2 y2Returns all the items that overlap or are enclosed within the rectangular region given by x1, y1, x2, and y2. x1 must be no greater then x2 and y1 must be no greater than y2.

.pad find withtag selected
focus [tagOrId [portalID ...]]
font subcommand [args ...]
This command is used for manipulating fonts. Fonts are specified using a logical font naming scheme similar to Java's, rather than using a platform-specific filename as a font name.
font bbox string font [fontheight]
render draw text command. The list has the form "x1 y1 x2 y2" such that the text is within the region bounded by x1 on the left, x2 on the right, y1 on the bottom, and y2 on the top. The bounding box is affected by the render configure -font and -fontheight commands.
font path [[+]path]
font loadbitmaps font
.pad loadbitmaps Helvetica-Bold".
font maxbitmapsize size
font names
freeborder border
freeborder is an obsolete command and will be removed in the next release. Replace all uses of freeborder with the 'border free' command.
freecolor color
freecolor is an obsolete command and will be removed in the next release. Replace all uses of freecolor with the 'color free' command.
freeimage imagetoken
freeimage is an obsolete command and will be removed in the next release. Replace all uses of freeimage with the 'image free' command.
getdate
pathName getgroup tagOrId
addgroupmember, and removegroupmember commands).
getlevel
getlevel is an obsolete command and will be removed in the next release. Replace all uses of getlevel with the 'render configure -level' command.
getmag tagOrId
getmag is an obsolete command and will be removed in the next release. Replace all uses of getmag drawtext with the 'render configure -mag' command.
pathName getmodifier
getmodifier is an obsolete command and will be removed in the next release. Replace all uses of getmodifier with the 'modifier get' command.
[42] pathName
getpads
getportals
getportals is an obsolete command and will be removed in the next release. Replace all uses of getportals with the 'render configure -portals' command.
getsize tagOrId ?portalID ...?
gettags tagOrId
gettextbbox string
freeborder is an obsolete command and will be removed in the next release. Replace all uses of freeborder with the 'border free' command.
[47] pathName
getview [portalID ...]
moveto to set the current view).


[48] pathName
getzoom [portalID ...]
getview command. (See moveto to set the current view).
grab [-root | -path pathName | -win winId] \
[-dim {width height}] x y width height
image [53] command and Image Items.) The grab command takes a region (x, y, width, height) which specifies the area to grab. Note that y represents the top of the region. The region can be relative to a specific Tk window, any other X window, or the entire screen. By default, the region is relative to the pad widget window. The region actually grabbed is clipped to the specified window (or to the screen for root grabbing.)
set imagedata [.pad grab 0 0 200 200] .pad create image -image $imagedata
grid option arg [arg ...]
grid command arranges one or more objects in rows and columns and treats them as a group. It is based on the Tk grid geometry manager and its behavior and Tcl syntax are very similar to it. In pad, all grid commands are sub-commands of the pad command. See the section on GRID ITEMS for a complete description of this command, and how to create and use grids.
hastag tag tagOrId
html subcommand arg ...
html configure tagOrId [option [value] ...]
-source (read only)Returns the HTML source of the page
-type (read only)Returns the mime type of the page contents
-lastchangedate (read only)Returns the last time the html source was modified, as specified by the server.
-length (read only)Returns the length of the html source in characters.
html anchor configure tagOrId [option [value] ...]
-html (read only)Returns the id of the html page this anchor is associated with.
-image (read only)Returns the image token this anchor is represented by if the anchor is an image anchor.
-ismap (read only)Returns true if the anchor is an imagemap.
-name (read only)Returns the name of the anchor
-stateReturns the current state of the anchor (unvisited, visited, or active).
-url (read only)The URL this anchor is linked to.
image subcommand arg ...
image alloc <file>
image alloc can always read gif file formats. In addition, if Pad++ is compiled with the appropriate libraries, it can also read jpeg and tiff image file formats, and will automatically determine the file type. The image may have transparent pixels. This returns an image token which can be used by related commands.
image free <imagetoken>
image alloc.
image names
image configure <imagetoken> [option [value] ...]
-dimensions (read only)Returns a list of the dimensions of the image data (width, height).
-name (read only)Returns the file the image data token was created from.
-rgb (can set only to 0)Normally, image data are stored internally with their full rgb colors in addition to a colormap index. This allows images to be rendered with dithering, but takes 5 bytes per pixel. If the -norgb option is specified, then the original rgb information is not stored with the image and the image can not be rendered with dithering, but only takes 1 byte per pixel.
set imagedata [.pad image alloc "foo.gif"] .pad create image -image $imagedata -anchorpt "0 0" .pad create image -image $imagedata -anchorpt "200 0"[54] pathName
info subcommand
status render
status sharedmemory
[55] pathName
isvisible tagOrId [portalId ...]
[56] pathName
itemconfigure [-nondefaults] tagOrId [option [value] ...]
ic is an alias for itemconfigure
itemconfigure [-nondefaults] tagOrId [option [value] ...]
configure command except that it modifies item-specific options for the items given by tagOrId instead of modifying options for the overall pad widget. If no option is specified, then this command returns a list describing all of the available options for the first item given by tagOrId. If the -nondefaults flag is specified, then only those options modified by an application will be returned. If option is specified with no value, then the command returns the value of that option. If one or more option-value pairs are specified, then the command modifies the given widget option(s) to have the given value(s) in each of the items given by tagOrId; in this case the command returns an empty string. If value is an empty string, then that option is set back to its default value.
create command when the item(s) were created; see the sections below starting with OVERVIEW OF ITEM TYPES for details on the legal options. Note that the itemconfigure command generates a <Modify> event on the items modified by it (see the itemconfigure command for a description of the <Modify> event). Locked items may not be modified by the itemconfigure command (see the -lock itemconfigure option).
layer subcommand [args ...]
-visiblelayers [67] itemconfigure option.)
layer create <layer>
layer delete <layer>
layer names
layout subcommand [args ...]
layout align <type> [-anchor] [-coords {x y ...} [-overlaponly]] \
tagOrId [tagOrId ...]
foo" so they are aligned on top:
.pad layout align -top foo
layout distribute <type> [-space space] tagOrId [tagOrId ...]
layout position [-time animationTime] x1 y1 <type> x2 y2 tagOrId \
[tagOrId ...]
foo" so they have the same lower left corner as item #72. Then, all the objects with the tag "bar" are moved so that their upper right corner is at the same position as the lower left corner of item #72.
.pad layout position 0 0 72 0 0 foo
.pad layout position 0 0 72 11 bar
layout size <type> [-ref tagOrId] [-scale scale] tagOrId [tagOrId ...]