home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / docsection.tcl < prev    next >
Text File  |  1997-11-21  |  6KB  |  269 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)docsection.tcl    /main/titanic/4
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)docsection.tcl    /main/titanic/4   21 Nov 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 DocSection : {Object} {
  16.     method destructor
  17.     constructor
  18.     method promoter
  19.     method edit
  20.     method show
  21.     method print
  22.     method preview
  23.     method docType
  24.     method escape
  25.     method execute
  26.     method isDocDirUpToDate
  27.     method updateDocDir
  28.     method isDocDirTreeUpToDate
  29.     method docLocation
  30.     method docTitle
  31.     method getTree
  32.     method parentSection
  33.     method childSectionSet
  34.     method addChildSection
  35.     method removeChildSection
  36.     attribute uiType
  37.     attribute initContents
  38.     attribute operationClass
  39.     attribute extension
  40.     attribute indentation
  41.     attribute _parentSection
  42.     attribute document
  43.     attribute _childSectionSet
  44. }
  45.  
  46. method DocSection::destructor {this} {
  47.     set ref [$this _parentSection]
  48.     if {$ref != ""} {
  49.         [$ref _childSectionSet] removeValue $this
  50.     }
  51.  
  52.     # It is possible that the garbage collector already removed the
  53.     # childSectionSet. Therefor this extra check, which is not
  54.     # (re)generated is necessary !
  55.     if [isCommand [$this _childSectionSet]] {
  56.         foreach ref [[$this _childSectionSet] contents] {
  57.         $ref _parentSection ""
  58.         }
  59.     }
  60.     # Start destructor user section
  61.     # End destructor user section
  62. }
  63.  
  64. constructor DocSection {class this name document} {
  65.     set this [Object::constructor $class $this $name]
  66.     $this document $document
  67.  
  68.     # Don't call promoter twice
  69.     if {! [$this isA BrowsUiObj]} {
  70.         $this promoter
  71.     }
  72.  
  73.     return $this
  74. }
  75.  
  76. method DocSection::promoter {this} {
  77.  
  78.     $this _childSectionSet [List new]
  79.  
  80.     # the default operationClass of a section is import
  81.     if {[$this operationClass] == ""} {
  82.         $this operationClass import
  83.     }
  84.  
  85.     if {[$this indentation] == ""} {
  86.         $this indentation 0
  87.     }
  88.  
  89.     if {[$this getPropertyValue fileSystemPath] == ""} {
  90.         regsub -all " |\t" [$this uiName] "" name
  91.         if {[regsub -all {:}  $name {_} new]} {set name $new}
  92.         set type [$this type]
  93.         if {[$this extension] != ""} {
  94.             set name ${name}_$type.[$this extension]
  95.         } else {
  96.             set name ${name}_$type
  97.         }
  98.         $this setProperty fileSystemPath $name
  99.     }
  100. }
  101.  
  102. method DocSection::edit {this} {
  103.  
  104.     # default no edit possible
  105.     wmtkerror "No edit possible for this section."
  106. }
  107.  
  108. method DocSection::show {this} {
  109.  
  110.     # default no show possible
  111.     wmtkerror "No show possible for this section."
  112. }
  113.  
  114. method DocSection::print {this} {
  115.  
  116.     # default no print possible
  117.     wmtkerror "No print possible for this section."
  118. }
  119.  
  120. method DocSection::preview {this} {
  121.  
  122.     # default no preview possible
  123.     wmtkerror "No preview possible for this section."
  124. }
  125.  
  126. method DocSection::docType {this} {
  127.  
  128.     # default the doctype and the type are the same
  129.     return [$this type]
  130. }
  131.  
  132. method DocSection::escape {this command} {
  133.  
  134.      set sn $command
  135.      #if {[regsub -all {'}  $sn {\\'}  snn]} {set sn $snn}
  136.      #if {[regsub -all {`}  $sn {\\`}  snn]} {set sn $snn}
  137.      #if {[regsub -all {"}  $sn {\\"}  snn]} {set sn $snn}
  138.      #if {[regsub -all {>}  $sn {\\>}  snn]} {set sn $snn}
  139.      #if {[regsub -all {<}  $sn {\\<}  snn]} {set sn $snn}
  140.      #if {[regsub -all {!}  $sn {\\!}  snn]} {set sn $snn}
  141.      #if {[regsub -all {&}  $sn {\\&}  snn]} {set sn $snn}
  142.      if {[regsub -all {\(}  $sn {\\(}  snn]} {set sn $snn}
  143.      if {[regsub -all {\)}  $sn {\\)}  snn]} {set sn $snn}
  144.      return $sn
  145. }
  146.  
  147. method DocSection::execute {this args} {
  148.  
  149.     # return 0 on error, 1 on succes
  150.  
  151.     if {$args == ""} {
  152.         return 0
  153.     }
  154.  
  155.     set cmd [lindex $args 0]
  156.     set kind [lindex $args 1]
  157.     case "$kind" in {
  158.         {mtool xtool} {
  159.         set msg "Starting `[lindex $cmd 0]`"
  160.         $wmttoolObj startCommand $kind "$cmd" "" "$msg" {0 0} 0
  161.         return 1
  162.         }
  163.         {m4} {
  164.         set m4Cmd [lindex $cmd 0]
  165.         set m4CmdArgs [lindex $cmd 1]
  166.         set obj [lindex $cmd 2]
  167.         $wmttoolObj startM4Command \
  168.             "[$this escape $m4Cmd]" \
  169.             "[$this escape $m4CmdArgs]" \
  170.             "" "$obj"
  171.         return 1
  172.         }
  173.         {default} {
  174.         set sysCmd [lindex $cmd 0]
  175.         set obj [lindex $cmd 1]
  176.         if [system [$this escape "$sysCmd"]] {
  177.             wmtkmessage \
  178.                 "Executing '[lindex $sysCmd 0]' for '$obj' failed"
  179.             return 0
  180.         } else {
  181.             return 1
  182.         }
  183.         }
  184.     }
  185. }
  186.  
  187. method DocSection::isDocDirUpToDate {this} {
  188.  
  189.     # default alway uptodate
  190.     return 1
  191. }
  192.  
  193. method DocSection::updateDocDir {this} {
  194.  
  195.     # default nothing happens
  196.     return 1
  197. }
  198.  
  199. method DocSection::isDocDirTreeUpToDate {this} {
  200.  
  201.     set tree [$this getTree]
  202.     set notUpToDate ""
  203.  
  204.     foreach node $tree {
  205.         if {![$node isDocDirUpToDate]} {
  206.             set notUpToDate "$notUpToDate $node"
  207.         }
  208.     }
  209.  
  210.     return $notUpToDate
  211. }
  212.  
  213. method DocSection::docLocation {this} {
  214.  
  215.     return [$this pathName]
  216. }
  217.  
  218. method DocSection::docTitle {this} {
  219.  
  220.     return [$this uiName]
  221. }
  222.  
  223. method DocSection::getTree {this} {
  224.  
  225.     set tree {}
  226.  
  227.     [$this childSectionSet] foreach sect {
  228.         set tree "$tree $sect [$sect getTree]"
  229.     }
  230.  
  231.     return $tree
  232. }
  233.  
  234. proc DocSection::isAscii {} {
  235.     return 1
  236. }
  237.  
  238. # Do not delete this line -- regeneration end marker
  239.  
  240. method DocSection::parentSection {this args} {
  241.     if {$args == ""} {
  242.         return [$this _parentSection]
  243.     }
  244.     set ref [$this _parentSection]
  245.     if {$ref != ""} {
  246.         [$ref _childSectionSet] removeValue $this
  247.     }
  248.     set obj [lindex $args 0]
  249.     if {$obj != ""} {
  250.         [$obj _childSectionSet] append $this
  251.     }
  252.     $this _parentSection $obj
  253. }
  254.  
  255. method DocSection::childSectionSet {this} {
  256.     return [$this _childSectionSet]
  257. }
  258.  
  259. method DocSection::addChildSection {this newChildSection} {
  260.     [$this _childSectionSet] append $newChildSection
  261.     $newChildSection _parentSection $this
  262. }
  263.  
  264. method DocSection::removeChildSection {this oldChildSection} {
  265.     $oldChildSection _parentSection ""
  266.     [$this _childSectionSet] removeValue $oldChildSection
  267. }
  268.  
  269.