home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / undocomman.tcl < prev    next >
Text File  |  1997-10-03  |  3KB  |  130 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)undocomman.tcl    /main/titanic/5
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)undocomman.tcl    /main/titanic/5   3 Oct 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class UndoCommand : {Object} {
  16.     constructor
  17.     method destructor
  18.     method toggleUndo
  19.     method setUndoLabel
  20.     method addObject
  21.     method removeObject
  22.     attribute undone
  23.     attribute busy
  24.  
  25.     # Name of the command, used for constructing the undo label.
  26.     #
  27.     attribute commandName
  28.  
  29.     # Store orignal info in this variable before
  30.     # changing the label.
  31.     #
  32.     attribute buttonInfo
  33.  
  34.     # The name of the edit menu.
  35.     #
  36.     attribute editMenu
  37.     attribute validAfterLevelChange
  38.     attribute objectSet
  39.     attribute currentObj
  40. }
  41.  
  42. constructor UndoCommand {class this name} {
  43.     set this [Object::constructor $class $this $name]
  44.     $this undone 0
  45.     $this busy 1
  46.     $this validAfterLevelChange 0
  47.     $this objectSet [List new]
  48.     # Start constructor user section
  49.  
  50.     if {! [isCommand [.main undoCommand]]} {
  51.         if [isCommand [.main currentObj]] {
  52.         $this currentObj [[.main currentObj] browsUiObj]
  53.         }
  54.         [.main undoButton] sensitive 1
  55.     }
  56.  
  57.     $this editMenu [.main menuBar].edit.menu
  58.     $this buttonInfo [Dictionary new]
  59.     # End constructor user section
  60.     return $this
  61. }
  62.  
  63. method UndoCommand::destructor {this} {
  64.     # Start destructor user section
  65.     [.main undoButton] sensitive 0
  66.         $this setUndoLabel none
  67.     # End destructor user section
  68. }
  69.  
  70. method UndoCommand::toggleUndo {this} {
  71.     if [$this undone] {
  72.     $this redo
  73.     $this undone 0
  74.     $this setUndoLabel undo
  75.     } else {
  76.     $this undo
  77.     $this undone 1
  78.     $this setUndoLabel redo
  79.     }
  80. }
  81.  
  82.  
  83. # Sets the undo label in the Edit menu, 
  84. # based on action and commandName.
  85. #
  86. method UndoCommand::setUndoLabel {this action} {
  87.     # check if button exists, it may have been'customized'
  88.     set editMenu [$this editMenu]
  89.     if { ![isCommand $editMenu.undo] } {
  90.     return
  91.     }
  92.  
  93.     case $action in {
  94.     {none} {
  95.         if {[[$this buttonInfo] set undoLabel] == ""} {
  96.         return
  97.         }
  98.         set newLabel [[$this buttonInfo] set undoLabel]
  99.         $editMenu.undo mnemonic [[$this buttonInfo] set undoMnemonic]
  100.     }
  101.     {undo} {
  102.         set oldLabel [[$this buttonInfo] set undoLabel]
  103.         if { $oldLabel == "" } {
  104.         set oldLabel [$editMenu.undo label]
  105.         [$this buttonInfo] set undoLabel $oldLabel 
  106.         [$this buttonInfo] set undoMnemonic [$editMenu.undo mnemonic]
  107.         }
  108.         set newLabel "$oldLabel [$this commandName]"
  109.     }
  110.     {redo} {
  111.         $editMenu.undo mnemonic R
  112.         set newLabel "Redo [$this commandName]"
  113.     }
  114.     }
  115.  
  116.     $editMenu.undo label $newLabel
  117. }
  118.  
  119. # Do not delete this line -- regeneration end marker
  120.  
  121. method UndoCommand::addObject {this newObject} {
  122.     [$this objectSet] append $newObject
  123.  
  124. }
  125.  
  126. method UndoCommand::removeObject {this oldObject} {
  127.     [$this objectSet] removeValue $oldObject
  128. }
  129.  
  130.