home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / localsecti.tcl < prev    next >
Text File  |  1997-09-24  |  8KB  |  321 lines

  1. #--------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)localsecti.tcl    /main/titanic/9
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)localsecti.tcl    /main/titanic/9   24 Sep 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require_module_file "docsection.tcl" docwriter
  15. require "extfvdbobj.tcl"
  16.  
  17. Class LocalSection : {DocSection ExtFVDbObj} {
  18.     method destructor
  19.     constructor
  20.     method promoter
  21.     method browserObjType
  22.     method canBeDragged
  23.     method edit
  24.     method editFile
  25.     method showFile
  26.     method previewFile
  27.     method generateStructure
  28.     method generateContents
  29.     method generateTypeContents
  30.     method isDocDirUpToDate
  31.     method updateDocDir
  32.     method type
  33.     method name
  34.     method uiName
  35.     method uiClass
  36. }
  37.  
  38. method LocalSection::destructor {this} {
  39.     # Start destructor user section
  40.     # End destructor user section
  41.     $this DocSection::destructor
  42.     $this ExtFVDbObj::destructor
  43. }
  44.  
  45. constructor LocalSection {class this name document} {
  46.     set this [ExtFVDbObj::constructor $class $this $name]
  47.     set this [DocSection::constructor $class $this $name $document]
  48.     return $this
  49. }
  50.  
  51. proc LocalSection::validDocument {obj} {
  52.  
  53.     if [info exists SysVDbObj::this] {
  54.         set document ${SysVDbObj::this}
  55.         if {![isCommand $document]} {return 0}
  56.     } else {
  57.         set document [[ClientContext::global] currentSystem]
  58.     }
  59.     if [$document isNil] {return 0}
  60.  
  61.     # Make sure that we have a document and
  62.     # that the ExternalFileVersion belongs to it
  63.     set system [$document system]
  64.     if {"[$system type]" != "document"} {return 0}
  65.     if {$system != [$obj system]} {return 0}
  66.  
  67.     set editor [$document editor]
  68.     if {! [isCommand $editor]} {return 0}
  69.  
  70.     return 1
  71. }
  72.  
  73. method LocalSection::promoter {this} {
  74.  
  75.     ExtFVDbObj::promoter $this
  76.  
  77.     if {![LocalSection::validDocument $this]} {
  78.         return
  79.     }
  80.  
  81.     if [info exists SysVDbObj::this] {
  82.         set document ${SysVDbObj::this}
  83.     } else {
  84.         set document [[ClientContext::global] currentSystem]
  85.     }
  86.  
  87.     $this document $document
  88.     set editor [$document editor]
  89.     set editorName [$editor name]
  90.     set editorVersion [$editor version]
  91.     set type [[$this file] type]
  92.     set class [Document::getClass $editorName $editorVersion $type]
  93.  
  94.     if {$class != "" && ![$this isA $class]} {
  95.         $class promote $this
  96.     }
  97.  
  98.     # now promote to DocSection
  99.     DocSection::promoter $this
  100. }
  101.  
  102. proc LocalSection::associations {} {
  103.     return "[ExtFVDbObj::associations]"
  104. }
  105.  
  106. method LocalSection::browserObjType {this} {
  107.     return "LocalSection"
  108. }
  109.  
  110. method LocalSection::canBeDragged {this} {
  111.     return 0
  112. }
  113.  
  114. proc LocalSection::childTypes {assoc} {
  115.     if {[lsearch -exact "[LocalSection::associations]" "$assoc"] == -1} {
  116.         return ""
  117.     }
  118.     return "[BrowserProcs::childTypes $assoc]"
  119. }
  120.  
  121. proc LocalSection::controlledLists {} {
  122.     return "[ExtFVDbObj::controlledLists]"
  123. }
  124.  
  125. proc LocalSection::infoProperties {} {
  126.     return "[ExtFVDbObj::infoProperties]"
  127. }
  128.  
  129. method LocalSection::edit {this} {
  130.     $this DocSection::edit
  131. }
  132.  
  133. method LocalSection::editFile {this} {
  134.  
  135.      set updateList {}
  136.      set indent [$this getIndentation]
  137.      incr indent
  138.      foreach obj [$this recursiveObjSet {NoneUiObj}] {
  139.        if {$indent >= [$obj getIndentation]} {
  140.            if {! [$obj isDocDirUpToDate]} {
  141.                lappend updateList [$obj identity]
  142.            }
  143.        }
  144.      }
  145.      if {![lempty $updateList]} {
  146.        set confVId [[$this getParent ConfigVersion] identity]
  147.        set sysVId [[$this getParent SystemVersion] identity]
  148.        set argsfile [args_file $updateList]
  149.        set args "updateDocDir $confVId $sysVId [list $argsfile]"
  150.        set cmd "\
  151.            if \[lindex \[$wmttoolObj exitStatusList\] 0\] {\
  152.                $this edit\
  153.            }"
  154.        $wmttoolObj startDocbatch mtool "$args" "$cmd" {0 0} 0
  155.      } else {
  156.        $this edit
  157.      }
  158. }
  159.  
  160. method LocalSection::showFile {this} {
  161.     $this show
  162. }
  163.  
  164. method LocalSection::previewFile {this} {
  165.  
  166.     set updateList {}
  167.     set indent [$this getIndentation]
  168.     incr indent
  169.     foreach obj [$this recursiveObjSet {NoneUiObj}] {
  170.     if {$indent >= [$obj getIndentation]} {
  171.             if {! [$obj isDocDirUpToDate]} {
  172.         lappend updateList [$obj identity]
  173.         }
  174.     }
  175.     }
  176.     if {![lempty $updateList]} {
  177.     set confVId [[$this getParent ConfigVersion] identity]
  178.     set sysVId [[$this getParent SystemVersion] identity]
  179.     set argsfile [args_file $updateList]
  180.     set args "updateDocDir $confVId $sysVId [list $argsfile]"
  181.     set cmd "\
  182.         if \[lindex \[$wmttoolObj exitStatusList\] 0\] {\
  183.         $this preview\
  184.         }"
  185.     $wmttoolObj startDocbatch mtool "$args" "$cmd" {0 0} 0
  186.     } else {
  187.         $this preview
  188.     }
  189. }
  190.  
  191. method LocalSection::generateStructure {this withContents} {
  192.  
  193.     # read the property structureGen of the section
  194.     set structureGen [$this findProperty structureGen]
  195.  
  196.     if [$structureGen isNil] {
  197.         return
  198.     }
  199.     set structureGen [$structureGen value]
  200.     regsub -all " |\\t" "$structureGen" "" strippedValue
  201.     if {"$strippedValue" == ""} {
  202.         return
  203.     }
  204.     set tmpFile [args_file {}]
  205.     if [catch {eval "$structureGen [list $tmpFile] $this"} msg] {
  206.         wmtkerror "Error while executing structure generator\
  207.         procedure '$structureGen'\n\tfor section '[$this uiName]'.\
  208.         \n\t:$msg"
  209.     }
  210.     generator generateSection $this $tmpFile $withContents
  211.     unlink $tmpFile
  212. }
  213.  
  214. method LocalSection::generateContents {this} {
  215.  
  216.     # read the property contentsGen of the section
  217.     set contentsGen [$this findProperty contentsGen]
  218.  
  219.     # check if there's a generate defined with this section
  220.     # if not, generate contents according to the section type
  221.     wmtkmessage "Generate contents for section '[$this uiName]'"
  222.     if [$contentsGen isNil] {
  223.         $this generateTypeContents
  224.         return
  225.     }
  226.     set contentsGen [$contentsGen value]
  227.     regsub -all " |\\t" "$contentsGen" "" strippedValue
  228.     if {"$strippedValue" == ""} {
  229.         $this generateTypeContents
  230.         return
  231.     }
  232.     if [catch {eval "dispatchContentsGen $contentsGen $this"} msg] {
  233.         wmtkerror "Error while executing contents generator\
  234.         procedure '$contentsGen'\n\tfor section '[$this uiName]'.\
  235.         :\n\t$msg"
  236.     }
  237. }
  238.  
  239. method LocalSection::generateTypeContents {this} {
  240.  
  241.     # default no contents generated
  242. }
  243.  
  244. method LocalSection::isDocDirUpToDate {this} {
  245.  
  246.     # do not update if document is frozen
  247.     if {"[[$this document] getInfo Status]" == "frozen"} {
  248.         return 1
  249.     }
  250.  
  251.     if {! [file exists [$this docLocation]]} {
  252.         return 0
  253.     }
  254.  
  255.     # do not update frozen section
  256.     if {"[$this getInfo Status]" == "frozen"} {
  257.         return 1
  258.     }
  259.  
  260.     if {[[[$this document] editor] printsIncluded] == "y"} {
  261.         # check also the 'not-localsection-children'
  262.         [$this childSectionSet] foreach child {
  263.             if {![$child isA LocalSection]} {
  264.                 if {![$child isDocDirUpToDate]} {
  265.                     return 0
  266.                 }
  267.             }
  268.         }
  269.     }
  270.     return 1
  271. }
  272.  
  273. method LocalSection::updateDocDir {this} {
  274.  
  275.     set path [$this docLocation]
  276.     if {"[$this getInfo Status]" != "working"} {
  277.         catch {BasicFS::removeFile $path}
  278.     }
  279.     if {! [file exists $path]} {
  280.         $this synchWithFileSystem
  281.         set retval 0
  282.     } else {
  283.         set retval 1
  284.     }
  285.  
  286.     if {[[[$this document] editor] printsIncluded] == "y"} {
  287.         # update also the 'not-localsection-children'
  288.         [$this childSectionSet] foreach child {
  289.             if {![$child isA LocalSection]} {
  290.                 if {![$child updateDocDir]} {
  291.                     set retval 0
  292.                 }
  293.             }
  294.         }
  295.     }
  296.     return $retval
  297. }
  298.  
  299. method LocalSection::type {this} {
  300.     return [[$this file] type]
  301. }
  302.  
  303. method LocalSection::name {this} {
  304.     return [$this uiName]
  305. }
  306.  
  307. method LocalSection::uiName {this args} {
  308.  
  309.     set longName [$this findProperty longName]
  310.     if [$longName isNil] {
  311.         return [[$this file] name]
  312.     }
  313.     return [$longName value]
  314. }
  315.  
  316. method LocalSection::uiClass {this} {
  317.     return LocalSection
  318. }
  319.  
  320. # Do not delete this line -- regeneration end marker
  321.