blob: 6451e5c84d37fd42864f2339fb257f2e53048fe2 [file] [log] [blame]
#
# Notebook Widget
# ----------------------------------------------------------------------
# The Notebook command creates a new window (given by the pathName
# argument) and makes it into a Notebook widget. Additional options,
# described above may be specified on the command line or in the
# option database to configure aspects of the Notebook such as its
# colors, font, and text. The Notebook command returns its pathName
# argument. At the time this command is invoked, there must not exist
# a window named pathName, but path Name's parent must exist.
#
# A Notebook is a widget that contains a set of pages. It displays one
# page from the set as the selected page. When a page is selected, the
# page's contents are displayed in the page area. When first created a
# Notebook has no pages. Pages may be added or deleted using widget commands
# described below.
#
# A special option may be provided to the Notebook. The -auto option
# specifies whether the Nptebook will automatically handle the unpacking
# and packing of pages when pages are selected. A value of true signifies
# that the notebook will automatically manage it. This is the default
# value. A value of false signifies the notebook will not perform automatic
# switching of pages.
#
# WISH LIST:
# This section lists possible future enhancements.
#
# ----------------------------------------------------------------------
# AUTHOR: Bill W. Scott EMAIL: bscott@spd.dsccc.com
#
# @(#) $Id: notebook.itk,v 1.4 2001/08/15 18:33:31 smithc Exp $
# ----------------------------------------------------------------------
# Copyright (c) 1995 DSC Technologies Corporation
# ======================================================================
# Permission to use, copy, modify, distribute and license this software
# and its documentation for any purpose, and without fee or written
# agreement with DSC, is hereby granted, provided that the above copyright
# notice appears in all copies and that both the copyright notice and
# warranty disclaimer below appear in supporting documentation, and that
# the names of DSC Technologies Corporation or DSC Communications
# Corporation not be used in advertising or publicity pertaining to the
# software without specific, written prior permission.
#
# DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-
# INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE
# AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL
# DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
# SOFTWARE.
# ======================================================================
#
# Default resources.
#
option add *Notebook.background #d9d9d9 widgetDefault
option add *Notebook.auto true widgetDefault
#
# Usual options.
#
itk::usual Notebook {
keep -background -cursor
}
# ------------------------------------------------------------------
# NOTEBOOK
# ------------------------------------------------------------------
itcl::class iwidgets::Notebook {
inherit itk::Widget
constructor {args} {}
itk_option define -background background Background #d9d9d9
itk_option define -auto auto Auto true
itk_option define -scrollcommand scrollCommand ScrollCommand {}
public method add { args }
public method childsite { args }
public method delete { args }
public method index { args }
public method insert { args }
public method prev { }
public method next { }
public method pageconfigure { args }
public method pagecget { index option }
public method select { index }
public method view { args }
private method _childSites { }
private method _scrollCommand { }
private method _index { pathList index select}
private method _createPage { args }
private method _deletePages { fromPage toPage }
private method _configurePages { args }
private method _tabCommand { }
private variable _currPage -1 ;# numerical index of current page selected
private variable _pages {} ;# list of Page components
private variable _uniqueID 0 ;# one-up number for unique page numbering
}
#
# Provide a lowercase access method for the Notebook class
#
proc ::iwidgets::notebook {pathName args} {
uplevel ::iwidgets::Notebook $pathName $args
}
# ------------------------------------------------------------------
# CONSTRUCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::constructor {args} {
#
# Create the outermost frame to maintain geometry.
#
itk_component add cs {
frame $itk_interior.cs
} {
keep -cursor -background -width -height
}
pack $itk_component(cs) -fill both -expand yes
pack propagate $itk_component(cs) no
eval itk_initialize $args
# force bg of all pages to reflect Notebook's background.
_configurePages -background $itk_option(-background)
}
# ------------------------------------------------------------------
# OPTIONS
# ------------------------------------------------------------------
# ------------------------------------------------------------------
# OPTION -background
#
# Sets the bg color of all the pages in the Notebook.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Notebook::background {
if {$itk_option(-background) != {}} {
_configurePages -background $itk_option(-background)
}
}
# ------------------------------------------------------------------
# OPTION -auto
#
# Determines whether pages are automatically unpacked and
# packed when pages get selected.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Notebook::auto {
if {$itk_option(-auto) != {}} {
}
}
# ------------------------------------------------------------------
# OPTION -scrollcommand
#
# Command string to be invoked when the notebook
# has any changes to its current page, or number of pages.
#
# typically for scrollbars.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Notebook::scrollcommand {
if {$itk_option(-scrollcommand) != {}} {
_scrollCommand
}
}
# ------------------------------------------------------------------
# METHOD: add add ?<option> <value>...?
#
# Creates a page and appends it to the list of pages.
# processes pageconfigure for the page added.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::add { args } {
# The args list should be an even # of params, if not then
# prob missing value for last item in args list. Signal error.
set len [llength $args]
if {$len % 2} {
error "value for \"[lindex $args [expr {$len - 1}]]\" missing"
}
# add a Page component
set pathName [eval _createPage $args]
lappend _pages $pathName
# update scroller
_scrollCommand
# return childsite for the Page component
return [eval $pathName childsite]
}
# ------------------------------------------------------------------
# METHOD: childsite ?<index>?
#
# If index is supplied, returns the child site widget corresponding
# to the page index. If called with no arguments, returns a list
# of all child sites
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::childsite { args } {
set len [llength $args]
switch $len {
0 {
# ... called with no arguments, return a list
if { [llength $args] == 0 } {
return [_childSites]
}
}
1 {
set index [lindex $args 0]
# ... otherwise, return child site for the index given
# empty notebook
if { $_pages == {} } {
error "can't get childsite,\
no pages in the notebook \"$itk_component(hull)\""
}
set index [_index $_pages $index $_currPage]
# index out of range
if { $index < 0 || $index >= [llength $_pages] } {
error "bad Notebook page index in childsite method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
set pathName [lindex $_pages $index]
set cs [eval $pathName childsite]
return $cs
}
default {
# ... too many parameters passed
error "wrong # args: should be\
\"$itk_component(hull) childsite ?index?\""
}
}
}
# ------------------------------------------------------------------
# METHOD: delete <index1> ?<index2>?
#
# Deletes a page or range of pages from the notebook
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::delete { args } {
# empty notebook
if { $_pages == {} } {
error "can't delete page, no pages in the notebook\
\"$itk_component(hull)\""
}
set len [llength $args]
switch -- $len {
1 {
set fromPage [_index $_pages [lindex $args 0] $_currPage]
if { $fromPage < 0 || $fromPage >= [llength $_pages] } {
error "bad Notebook page index in delete method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
set toPage $fromPage
_deletePages $fromPage $toPage
}
2 {
set fromPage [_index $_pages [lindex $args 0] $_currPage]
if { $fromPage < 0 || $fromPage >= [llength $_pages] } {
error "bad Notebook page index1 in delete method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
set toPage [_index $_pages [lindex $args 1] $_currPage]
if { $toPage < 0 || $toPage >= [llength $_pages] } {
error "bad Notebook page index2 in delete method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
error "bad Notebook page index2"
}
if { $fromPage > $toPage } {
error "bad Notebook page index1 in delete method:\
index1 is greater than index2"
}
_deletePages $fromPage $toPage
}
default {
# ... too few/many parameters passed
error "wrong # args: should be\
\"$itk_component(hull) delete index1 ?index2?\""
}
}
}
# ------------------------------------------------------------------
# METHOD: index <index>
#
# Given an index identifier returns the numeric index of the page
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::index { args } {
if { [llength $args] != 1 } {
error "wrong # args: should be\
\"$itk_component(hull) index index\""
}
set index $args
set number [_index $_pages $index $_currPage]
return $number
}
# ------------------------------------------------------------------
# METHOD: insert <index> ?<option> <value>...?
#
# Inserts a page before a index. The before page may
# be specified as a label or a page position.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::insert { args } {
# ... Error: no args passed
set len [llength $args]
if { $len == 0 } {
error "wrong # args: should be\
\"$itk_component(hull) insert index ?option value?\""
}
# ... set up index and args
set index [lindex $args 0]
set args [lrange $args 1 $len]
# ... Error: unmatched option value pair (len is odd)
# The args list should be an even # of params, if not then
# prob missing value for last item in args list. Signal error.
set len [llength $args]
if { $len % 2 } {
error "value for \"[lindex $args [expr {$len - 1}]]\" missing"
}
# ... Error: catch notebook empty
if { $_pages == {} } {
error "can't insert page, no pages in the notebook\
\"$itk_component(hull)\""
}
# ok, get the page
set page [_index $_pages $index $_currPage]
# ... Error: catch bad value for before page.
if { $page < 0 || $page >= [llength $_pages] } {
error "bad Notebook page index in insert method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
# ... Start the business of inserting
# create the new page and get its path name...
set pathName [eval _createPage $args]
# grab the name of the page currently selected. (to keep in sync)
set currPathName [lindex $_pages $_currPage]
# insert pathName before $page
set _pages [linsert $_pages $page $pathName]
# keep the _currPage in sync with the insert.
set _currPage [lsearch -exact $_pages $currPathName]
# give scrollcommand chance to update
_scrollCommand
# give them child site back...
return [eval $pathName childsite]
}
# ------------------------------------------------------------------
# METHOD: prev
#
# Selects the previous page. Wraps at first back to last page.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::prev { } {
# catch empty notebook
if { $_pages == {} } {
error "can't move to previous page,\
no pages in the notebook \"$itk_component(hull)\""
}
# bump to the previous page and wrap if necessary
set prev [expr {$_currPage - 1}]
if { $prev < 0 } {
set prev [expr {[llength $_pages] - 1}]
}
select $prev
return $prev
}
# ------------------------------------------------------------------
# METHOD: next
#
# Selects the next page. Wraps at last back to first page.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::next { } {
# catch empty notebook
if { $_pages == {} } {
error "can't move to next page,\
no pages in the notebook \"$itk_component(hull)\""
}
# bump to the next page and wrap if necessary
set next [expr {$_currPage + 1}]
if { $next >= [llength $_pages] } {
set next 0
}
select $next
return $next
}
# ------------------------------------------------------------------
# METHOD: pageconfigure <index> ?<option> <value>...?
#
# Performs configure on a given page denoted by index. Index may
# be a page number or a pattern matching the label associated with
# a page.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::pageconfigure { args } {
# ... Error: no args passed
set len [llength $args]
if { $len == 0 } {
error "wrong # args: should be\
\"$itk_component(hull) pageconfigure index ?option value?\""
}
# ... set up index and args
set index [lindex $args 0]
set args [lrange $args 1 $len]
set page [_index $_pages $index $_currPage]
# ... Error: page out of range
if { $page < 0 || $page >= [llength $_pages] } {
error "bad Notebook page index in pageconfigure method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
# Configure the page component
set pathName [lindex $_pages $page]
return [eval $pathName configure $args]
}
# ------------------------------------------------------------------
# METHOD: pagecget <index> <option>
#
# Performs cget on a given page denoted by index. Index may
# be a page number or a pattern matching the label associated with
# a page.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::pagecget { index option } {
set page [_index $_pages $index $_currPage]
# ... Error: page out of range
if { $page < 0 || $page >= [llength $_pages] } {
error "bad Notebook page index in pagecget method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
# Get the page info.
set pathName [lindex $_pages $page]
return [$pathName cget $option]
}
# ------------------------------------------------------------------
# METHOD: select <index>
#
# Select a page by index. Hide the last _currPage if it existed.
# Then show the new one if it exists. Returns the currently
# selected page or -1 if tried to do a select select when there is
# no selection.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::select { index } {
global page$itk_component(hull)
# ... Error: empty notebook
if { $_pages == {} } {
error "can't select page $index,\
no pages in the notebook \"$itk_component(hull)\""
}
# if there is not current selection just ignore trying this selection
if { $index == "select" && $_currPage == -1 } {
return -1
}
set reqPage [_index $_pages $index $_currPage]
if { $reqPage < 0 || $reqPage >= [llength $_pages] } {
error "bad Notebook page index in select method:\
should be between 0 and [expr {[llength $_pages] - 1}]"
}
# if we already have this page selected, then ignore selection.
if { $reqPage == $_currPage } {
return $_currPage
}
# if we are handling packing and unpacking the unpack if we can
if { $itk_option(-auto) } {
# if there is a current page packed, then unpack it
if { $_currPage != -1 } {
set currPathName [lindex $_pages $_currPage]
pack forget $currPathName
}
}
# set this now so that the -command cmd can do an 'index select'
# to operate on this page.
set _currPage $reqPage
# invoke the command for this page
set cmd [lindex [pageconfigure $index -command] 4]
eval $cmd
# give scrollcommand chance to update
_scrollCommand
# if we are handling packing and unpacking the pack if we can
if { $itk_option(-auto) } {
set reqPathName [lindex $_pages $reqPage]
pack $reqPathName -anchor nw -fill both -expand yes
}
return $_currPage
}
# ------------------------------------------------------------------
# METHOD: view
#
# Return the current page
#
# view <index>
#
# Selects the page denoted by index to be current page
#
# view 'moveto' <fraction>
#
# Selects the page by using fraction amount
#
# view 'scroll' <num> <what>
#
# Selects the page by using num as indicator of next or previous
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::view { args } {
set len [llength $args]
switch -- $len {
0 {
# Return current page
return $_currPage
}
1 {
# Select by index
select [lindex $args 0]
}
2 {
# Select using moveto
set arg [lindex $args 0]
if { $arg == "moveto" } {
set fraction [lindex $args 1]
if { [catch { set page \
[expr {round($fraction/(1.0/[llength $_pages]))}]}]} {
error "expected floating-point number \
but got \"$fraction\""
}
if { $page == [llength $_pages] } {
incr page -1
}
if { $page >= 0 && $page < [llength $_pages] } {
select $page
}
} else {
error "expected \"moveto\" but got $arg"
}
}
3 {
# Select using scroll keyword
set arg [lindex $args 0]
if { $arg == "scroll" } {
set amount [lindex $args 1]
# check for integer value
if { ! [regexp {^[-]*[0-9]*$} $amount] } {
error "expected integer but got \"$amount\""
}
set page [expr {$_currPage + $amount}]
if { $page >= 0 && $page < [llength $_pages] } {
select $page
}
} else {
error "expected \"scroll\" but got $arg"
}
}
default {
set arg [lindex $args 0]
if { $arg == "moveto" } {
error "wrong # args: should be\
\"$itk_component(hull) view moveto fraction\""
} elseif { $arg == "scroll" } {
error "wrong # args: should be\
\"$itk_component(hull) view scroll units|pages\""
} else {
error "wrong # args: should be\
\"$itk_component(hull) view index\""
}
}
}
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _childSites
#
# Returns a list of child sites for all pages in the notebook.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_childSites { } {
# empty notebook
if { $_pages == {} } {
error "can't get childsite list,\
no pages in the notebook \"$itk_component(hull)\""
}
set csList {}
foreach pathName $_pages {
lappend csList [eval $pathName childsite]
}
return $csList
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _scrollCommand
#
# If there is a -scrollcommand set up, then call the tcl command
# and suffix onto it the standard 4 numbers scrollbars get.
#
# Invoke the scrollcommand, this is like the y/xscrollcommand
# it is designed to talk to scrollbars and the the
# tabset also knows how to obey scrollbar protocol.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_scrollCommand { } {
if { $itk_option(-scrollcommand) != {} } {
if { $_currPage != -1 } {
set relTop [expr {($_currPage*1.0) / [llength $_pages]}]
set relBottom [expr {(($_currPage+1)*1.0) / [llength $_pages]}]
set scrollCommand "$itk_option(-scrollcommand) $relTop $relBottom"
} else {
set scrollCommand "$itk_option(-scrollcommand) 0 1"
}
uplevel #0 $scrollCommand
}
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _index
#
# pathList : list of path names to search thru if index is a label
# index : either number, 'select', 'end', or pattern
# select : current selection
#
# _index takes takes the value $index converts it to
# a numeric identifier. If the value is not already
# an integer it looks it up in the $pathList array.
# If it fails it returns -1
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_index { pathList index select} {
switch -- $index {
select {
set number $select
}
end {
set number [expr {[llength $pathList] -1}]
}
default {
# is it a number already?
if { [regexp {^[0-9]+$} $index] } {
set number $index
if { $number < 0 || $number >= [llength $pathList] } {
set number -1
}
# otherwise it is a label
} else {
# look thru the pathList of pathNames and
# get each label and compare with index.
# if we get a match then set number to postion in $pathList
# and break out.
# otherwise number is still -1
set i 0
set number -1
foreach pathName $pathList {
set label [lindex [$pathName configure -label] 4]
if { [string match $label $index] } {
set number $i
break
}
incr i
}
}
}
}
return $number
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _createPage
#
# Creates a page, using unique page naming, propagates background
# and keeps unique id up to date.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_createPage { args } {
#
# create an internal name for the page: .n.cs.page0, .n.cs.page1, etc.
#
set pathName $itk_component(cs).page$_uniqueID
eval iwidgets::Page $pathName -background $itk_option(-background) $args
incr _uniqueID
return $pathName
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _deletePages
#
# Deletes pages from $fromPage to $toPage.
#
# Operates in two passes, destroys all the widgets
# Then removes the pathName from the page list
#
# Also keeps the current selection in bounds.
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_deletePages { fromPage toPage } {
for { set page $fromPage } { $page <= $toPage } { incr page } {
# kill the widget
set pathName [lindex $_pages $page]
destroy $pathName
}
# physically remove the page
set _pages [lreplace $_pages $fromPage $toPage]
# If we deleted a selected page set our selection to none
if { $_currPage >= $fromPage && $_currPage <= $toPage } {
set _currPage -1
}
# make sure _currPage stays in sync with new numbering...
if { $_pages == {} } {
# if deleted only remaining page,
# reset current page to undefined
set _currPage -1
# or if the current page was the last page, it needs come back
} elseif { $_currPage >= [llength $_pages] } {
incr _currPage -1
if { $_currPage < 0 } {
# but only to zero
set _currPage 0
}
}
# give scrollcommand chance to update
_scrollCommand
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _configurePages
#
# Does the pageconfigure method on each page in the notebook
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_configurePages { args } {
# make sure we have pages
if { [catch {set _pages}] } {
return
}
# go thru all pages and pageconfigure them.
foreach pathName $_pages {
eval "$pathName configure $args"
}
}
# ------------------------------------------------------------------
# PRIVATE METHOD: _tabCommand
#
# Calls the command that was passed in through the
# $itk_option(-tabcommand) argument.
#
# This method is up for debate... do we need the -tabcommand option?
# ------------------------------------------------------------------
itcl::body iwidgets::Notebook::_tabCommand { } {
global page$itk_component(hull)
if { $itk_option(-tabcommand) != {} } {
set newTabCmdStr $itk_option(-tabcommand)
lappend newTabCmdStr [set page$itk_component(hull)]
#eval $newTabCmdStr
uplevel #0 $newTabCmdStr
}
}
#
# Page widget
# ------------------------------------------------------------------
#
# The Page command creates a new window (given by the pathName argument)
# and makes it into a Page widget. Additional options, described above
# may be specified on the com mand line or in the option database to
# configure aspects of the Page such as its back ground, cursor, and
# geometry. The Page command returns its pathName argument. At the time
# this command is invoked, there must not exist a window named pathName,
# but path Name's parent must exist.
#
# A Page is a frame that holds a child site. It is nothing more than a
# frame widget with some intelligence built in. Its primary purpose is
# to support the Notebook's concept of a page. It allows another widget
# like the Notebook to treat a page as a single object. The Page has an
# associated label and knows how to return its child site.
#
# ------------------------------------------------------------------
# AUTHOR: Bill W. Scott EMAIL: bscott@spd.dsccc.com
#
# ------------------------------------------------------------------
# Copyright (c) 1995 DSC Communications Corp.
# ======================================================================
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
# IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#
# THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
# ======================================================================
#
# Option database default resources:
#
option add *Page.disabledForeground #a3a3a3 widgetDefault
option add *Page.label {} widgetDefault
option add *Page.command {} widgetDefault
itcl::class iwidgets::Page {
inherit itk::Widget
constructor {args} {}
itk_option define \
-disabledforeground disabledForeground DisabledForeground #a3a3a3
itk_option define -label label Label {}
itk_option define -command command Command {}
public method childsite { }
}
# ------------------------------------------------------------------
# CONSTRUCTOR
# ------------------------------------------------------------------
itcl::body iwidgets::Page::constructor {args} {
#
# Create the outermost frame to maintain geometry.
#
itk_component add cs {
frame $itk_interior.cs
} {
keep -cursor -background -width -height
}
pack $itk_component(cs) -fill both -expand yes
pack propagate $itk_component(cs) no
eval itk_initialize $args
}
# ------------------------------------------------------------------
# OPTIONS
# ------------------------------------------------------------------
# ------------------------------------------------------------------
# OPTION -disabledforeground
#
# Sets the disabledForeground color of this page
# ------------------------------------------------------------------
itcl::configbody iwidgets::Page::disabledforeground {
}
# ------------------------------------------------------------------
# OPTION -label
#
# Sets the label of this page. The label is a string identifier
# for this page.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Page::label {
}
# ------------------------------------------------------------------
# OPTION -command
#
# The Tcl Command to associate with this page.
# ------------------------------------------------------------------
itcl::configbody iwidgets::Page::command {
}
# ------------------------------------------------------------------
# METHODS
# ------------------------------------------------------------------
# ------------------------------------------------------------------
# METHOD: childsite
#
# Returns the child site widget of this page
# ------------------------------------------------------------------
itcl::body iwidgets::Page::childsite { } {
return $itk_component(cs)
}