home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / editpastec.tcl < prev    next >
Text File  |  1996-11-05  |  6KB  |  243 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)editpastec.tcl    /main/hindenburg/5
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)editpastec.tcl    /main/hindenburg/5   5 Nov 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "undocomman.tcl"
  15.  
  16. Class EditPasteCmd : {UndoCommand} {
  17.     constructor
  18.     method destructor
  19.     method do
  20.     method redo
  21.     method undo
  22.     method doCut
  23.     method undoCut
  24.     method addDeselected
  25.     method removeDeselected
  26.     method addSource
  27.     method removeSource
  28.     attribute operation
  29.     attribute deselectedSet
  30.     attribute sourceObj
  31.     attribute sourceSet
  32. }
  33.  
  34. constructor EditPasteCmd {class this name} {
  35.     set this [UndoCommand::constructor $class $this $name]
  36.     $this deselectedSet [List new]
  37.     $this sourceSet [List new]
  38.     # Start constructor user section
  39.     # End constructor user section
  40.     return $this
  41. }
  42.  
  43. method EditPasteCmd::destructor {this} {
  44.     # Start destructor user section
  45.     # End destructor user section
  46.     $this UndoCommand::destructor
  47. }
  48.  
  49. method EditPasteCmd::do {this} {
  50.     busy {
  51.     set currentObj [.main currentObj]
  52.     if {! [isCommand $currentObj]} {
  53.         set currentObj [lindex [[.main treeView] rootSet] 0]
  54.     }
  55.     $this currentObj $currentObj
  56.  
  57.     # DocGenerator requires the ClientContext
  58.     # to be at least at Config level...
  59.     $this validAfterLevelChange \
  60.         [expr 1 - [[$currentObj browsUiObj] isA Document]]
  61.  
  62.     if {! [[.main treeView] requestClipboardValue]} {
  63.         $this currentObj ""
  64.         wmtkinfo "Can not paste because clipboard is empty"
  65.     }
  66.     }
  67. }
  68.  
  69. method EditPasteCmd::redo {this} {
  70.     if {! [isCommand [$this currentObj]]} {
  71.     return
  72.     }
  73.     set errorStack ""
  74.  
  75.     busy {
  76.     if {"[$this operation]" == "cut"} {
  77.         set errorStack [$this doCut]
  78.     }
  79.  
  80.     set currentObj [$this currentObj]
  81.     set browsUiObj [$currentObj browsUiObj]
  82.     [$this deselectedSet] foreach obj {
  83.         if [catch {$browsUiObj deselectVersion $obj} msg] {
  84.         if {"$errorStack" != ""} {
  85.             append errorStack "\n"
  86.         }
  87.         append errorStack $msg
  88.         }
  89.     }
  90.     set confV [$currentObj getParent ConfigVersion]
  91.     set sectionList ""
  92.     set removeList ""
  93.     [$this objectSet] foreach obj {
  94.         if [$obj isA SystemFileReference] {
  95.         set catched [catch {
  96.             set fileV [[$obj info] set FileVersion]
  97.             set file [$fileV file]
  98.  
  99.             require "docgenerat.tcl"
  100.             require "docstructp.tcl"
  101.             DocStructPart new .docStrucPart \
  102.             -documentVersion $browsUiObj \
  103.             -sectionName "[$file qualifiedName :]_[$file type]" \
  104.             -sectionType "[$file type]" \
  105.             -fileVersion $fileV
  106.             set section [DocGenerator::createSection .docStrucPart]
  107.             .docStrucPart delete
  108.             lappend removeList $obj
  109.             lappend sectionList $section
  110.         } msg]
  111.         } else {
  112.         set catched [catch {$browsUiObj selectVersion $obj $confV} msg]
  113.         }
  114.         if $catched {
  115.         if {"$errorStack" != ""} {
  116.             append errorStack "\n"
  117.         }
  118.         append errorStack $msg
  119.         }
  120.     }
  121.     foreach obj $removeList {
  122.         $this removeObject $obj
  123.     }
  124.     foreach obj $sectionList {
  125.         $this addObject $obj
  126.     }
  127.     }
  128.     if {"$errorStack" != ""} {
  129.     wmtkerror $errorStack
  130.     }
  131.     .main updateView
  132.     wmtkmessage ""
  133. }
  134.  
  135. method EditPasteCmd::undo {this} {
  136.     if {! [isCommand [$this currentObj]]} {
  137.     return
  138.     }
  139.     set errorStack ""
  140.  
  141.     busy {
  142.     if {"[$this operation]" == "cut"} {
  143.         set errorStack [$this undoCut]
  144.     }
  145.  
  146.     set currentObj [$this currentObj]
  147.     set browsUiObj [$currentObj browsUiObj]
  148.     [$this objectSet] foreach obj {
  149.         if [$obj isA SystemFileReference] {
  150.         set catched [catch {
  151.             $obj setInfo FileVersion [$obj referredFileVersion]
  152.             $browsUiObj removeObject $obj
  153.         } msg]
  154.         } else {
  155.         set catched [catch {$browsUiObj deselectVersion $obj} msg]
  156.         }
  157.         if $catched {
  158.         if {"$errorStack" != ""} {
  159.             append errorStack "\n"
  160.         }
  161.         append errorStack $msg
  162.         }
  163.     }
  164.     set confV [$currentObj getParent ConfigVersion]
  165.     [$this deselectedSet] foreach obj {
  166.         if [catch {$browsUiObj selectVersion $obj $confV} msg] {
  167.         if {"$errorStack" != ""} {
  168.             append errorStack "\n"
  169.         }
  170.         append errorStack $msg
  171.         }
  172.     }
  173.     }
  174.     if {"$errorStack" != ""} {
  175.     wmtkerror $errorStack
  176.     }
  177.     .main updateView
  178.     wmtkmessage ""
  179. }
  180.  
  181. method EditPasteCmd::doCut {this} {
  182.     if {! [isCommand [$this sourceObj]]} {
  183.     return
  184.     }
  185.     set errorStack ""
  186.  
  187.     set sourceObj [$this sourceObj]
  188.     set sourceName [$sourceObj getInfo Name]
  189.     set sourceType [$sourceObj getInfo Type]
  190.     [$this sourceSet] foreach obj {
  191.     if [catch {$sourceObj deselectVersion $obj} msg] {
  192.         if {"$errorStack" != ""} {
  193.         append errorStack "\n"
  194.         }
  195.         append errorStack $msg
  196.     } else {
  197.         wmtkmessage "\
  198.         Deselected [$obj getInfo Type] '[$obj getInfo Name]'\
  199.         from $sourceType '$sourceName'"
  200.     }
  201.     }
  202.     return $errorStack
  203. }
  204.  
  205. method EditPasteCmd::undoCut {this} {
  206.     if {! [isCommand [$this sourceObj]]} {
  207.     return
  208.     }
  209.     set errorStack ""
  210.  
  211.     set sourceObj [$this sourceObj]
  212.     [$this sourceSet] foreach obj {
  213.     if [catch {$sourceObj selectVersion $obj} msg] {
  214.         if {"$errorStack" != ""} {
  215.         append errorStack "\n"
  216.         }
  217.         append errorStack $msg
  218.     }
  219.     }
  220.     return $errorStack
  221. }
  222.  
  223. # Do not delete this line -- regeneration end marker
  224.  
  225. method EditPasteCmd::addDeselected {this newDeselected} {
  226.     [$this deselectedSet] append $newDeselected
  227.  
  228. }
  229.  
  230. method EditPasteCmd::removeDeselected {this oldDeselected} {
  231.     [$this deselectedSet] removeValue $oldDeselected
  232. }
  233.  
  234. method EditPasteCmd::addSource {this newSource} {
  235.     [$this sourceSet] append $newSource
  236.  
  237. }
  238.  
  239. method EditPasteCmd::removeSource {this oldSource} {
  240.     [$this sourceSet] removeValue $oldSource
  241. }
  242.  
  243.