Generated from rowcol.tk with ROBODoc v3.2.2 on Mon Jul 16 19:51:56 2001

### TABLE OF CONTENTS

1. SpecTcl/rowcol.tk
2. SpecTcl/rowcol::root
3. SpecTcl/rowcol::base
4. SpecTcl/rowcol::itemdefaults
5. SpecTcl/rowcol::init
6. SpecTcl/rowcol::OpenWindow
7. SpecTcl/rowcol::Apply

## SpecTcl/rowcol.tk

DESCRIPTION

       Extra code for the editing the row & column properties

CREATION DATE

       12th July 2001

COPYRIGHT

       Morten Skaarup Jensen 2001

## SpecTcl/rowcol::root

DESCRIPTION

       The toplevel widget in the rowcol window

EXAMPLE

       $::rowcol::root config -menu $::rowcol::base.m

SOURCE

        set ::rowcol::root .topRowCol

## SpecTcl/rowcol::base

DESCRIPTION

       The base of the widget path in the rowcol window

EXAMPLE

       $::rowcol::base.new config -bg blue

SOURCE

        set ::rowcol::base {}

## SpecTcl/rowcol::itemdefaults

DESCRIPTION

       An array with a list of two item lists for each item type
       First item is -optionname
       Second item is the default value

EXAMPLE

       lappend ::rowcol::itemdefaults(separator) {-background {}}

SOURCE

        array set ::rowcol::itemdefaults {
           cascade {}
           checkbutton {}
           command {}
           radiobutton {}
           separator {}
        }

## SpecTcl/rowcol::init

DESCRIPTION

        Initialises the RowCol window

SOURCE

        proc ::rowcol::init {root} {
           # Create the variables $root, $base and $mbase
           set ::rowcol::root $root
           regsub {\.$} $root {} ::rowcol::base

           # Create the $???defaults array
           set f [frame $::rowcol::base.testframe]
           foreach type {row column} {
              foreach {opt val} [grid ${type}configure $f 0] {
                 set ::rowcol::${type}defaults($opt) $val
              }
           }
           destroy $f

           # Put in widgets for row & column properties
           foreach dim {row column} {
              if {"$::Current($dim)" == ""} {continue}
              set f $::rowcol::base.f[string toupper [string index $dim 0]][string range $dim 1 end]
              foreach {opt val} [array get ::rowcol::${dim}defaults] {
                 set label [string toupper [string index $opt 1]][string range $opt 2 end]

                 # Get initial values
                 regexp {([^.:]+)_([0-9]+)$} $::Current($dim) dummy master i
                 upvar #0 ::$master data
                 set pos [expr {$i/2-1}]
                 switch $label {
                    Minsize     {set val [lindex $data(min_$dim) $pos]}
                    Weight      {set val [lindex $data(weight_$dim) $pos]}
                    Pad         {set val [lindex $data(pad_$dim) $pos]}
                    default     {puts stderr "\a'$label' not implemented"; continue}
                 }

                 # Put in widgets
                 set l $f.l$label
                 set e $f.e$label
                 label $l -text $label
                 entry $e
                 $e insert 0 $val
                 grid $l $e
              }
           }

           # Callback for the "Apply" button
           $::rowcol::base.bApply config -command ::rowcol::Apply

           # Return focus to . when window is destroyed
           bind $::rowcol::root <Destroy> "
              grab release $::rowcol::root
              focus .
           "
        }

## SpecTcl/rowcol::OpenWindow

DESCRIPTION

       Opens the Row & Column editing window

SOURCE

        proc ::rowcol::OpenWindow {} {
           if {[catch {toplevel $::rowcol::root}]} {
              return
           }
           grab $::rowcol::root
           ::rowcol_ui $::rowcol::root
           ::rowcol::init $::rowcol::root
        }

## SpecTcl/rowcol::Apply

DESCRIPTION

       Saves the data from the entry widgets in global arrays

SOURCE

        proc ::rowcol::Apply {} {
           foreach {dim Dim} {row Row column Column} {
              if {"$::Current($dim)" == ""} {continue}
              regexp {([^.:]+)_([0-9]+)$} $::Current($dim) dummy master i
              upvar #0 ::$master data
              set pos [expr {$i/2-1}]
              foreach {key wpart} "min_$dim Minsize weight_$dim Weight pad_$dim Pad" {
                 set data($key) [lreplace $data($key) $pos $pos [$::rowcol::base.f$Dim.e$wpart get]]
              }
              set masterw .can.f[expr {"$master"=="f"? "": ".$master"}]
              grid ${dim}configure $masterw $i -pad [lindex $data(pad_$dim) $pos] -minsize [lindex $data(min_$dim) $pos]
              resize_set $masterw $dim $i [expr {[lindex $data(weight_$dim) $pos]? 3: 1}]
              arrow_shape .can $masterw $dim $i [expr {([lindex $data(weight_$dim) $pos]>0)}]
           }
           update idletasks
           arrow_update .can $masterw
           set ::Current(dirty) 1
        }