diff options
Diffstat (limited to 'iwidgets/generic/notebook.itk')
-rw-r--r-- | iwidgets/generic/notebook.itk | 946 |
1 files changed, 946 insertions, 0 deletions
diff --git a/iwidgets/generic/notebook.itk b/iwidgets/generic/notebook.itk new file mode 100644 index 00000000000..18c5cd95efe --- /dev/null +++ b/iwidgets/generic/notebook.itk @@ -0,0 +1,946 @@ +# +# 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$ +# ---------------------------------------------------------------------- +# 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) +} + |