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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)opendiagra.tcl    /main/hindenburg/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)opendiagra.tcl    /main/hindenburg/8   13 Nov 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "opdatatype.tcl"
  13. require "openaction.tcl"
  14. # End user added include file section
  15.  
  16.  
  17. Class OpenDiagram : {TemplateDialog} {
  18.     constructor
  19.     method destructor
  20.     method popUp
  21.     method handleOk
  22.     method handleCancel
  23.     method handleSelectionChanged
  24.     method addSearch
  25.     method addCreate
  26.     method addCreateAct
  27.     method addUserDef
  28.     method makeDecompIn
  29.     method createSystem
  30.     method selectedProp
  31.     method evalMacsIn
  32.     attribute selectedItem
  33.     attribute selDataType
  34.     attribute diagramItem
  35.     attribute diagramType
  36.     attribute editor
  37. }
  38.  
  39. constructor OpenDiagram {class this name} {
  40.     set this [TemplateDialog::constructor $class $this $name]
  41.     # Start constructor user section
  42.     interface BrowsView $this.bv {
  43.         rowCount 10
  44.         mode DETAIL
  45.         columnCount 80
  46.         selectionPolicy BROWSE
  47.         BrowsHeader operation {
  48.             label Operation
  49.             width 24
  50.         }
  51.         BrowsHeader diagram {
  52.             label Diagram
  53.             width 24
  54.         }
  55.         BrowsHeader type {
  56.             label Type
  57.             width 7
  58.         }
  59.         BrowsHeader system {
  60.             label System
  61.             width 24
  62.         }
  63.     }
  64.     $this config \
  65.         -modal yes \
  66.         -title "Select Operation" \
  67.         -okPressed "$this handleOk" \
  68.         -cancelPressed "$this handleCancel" \
  69.         -helpPressed {.main helpOnName openDiagram}
  70.     $this.bv selectionChanged "$this handleSelectionChanged"
  71.     # End constructor user section
  72.     return $this
  73. }
  74.  
  75. method OpenDiagram::destructor {this} {
  76.     # Start destructor user section
  77.     # End destructor user section
  78. }
  79.  
  80. method OpenDiagram::popUp {this} {
  81.     set ed [$this editor]
  82.  
  83.     busy {
  84.         # check if objtypes handler is already created
  85.         if {![isCommand [$ed objHdlr]]} {
  86.             $ed objHdlr [CustObjHandler new]
  87.             [$ed objHdlr] setCurrentContext
  88.         }
  89.         set file [[$ed fileVersion] file]
  90.         set fileType [$file type]
  91.         set selItemRec [$ed selectedItem]
  92.         set selItem [lindex $selItemRec 0]
  93.         $this selectedItem [$selItem item]
  94.         $this selDataType [[$this selectedProp data_type] name]
  95.         $this diagramItem [$file item]
  96.         $this diagramType $fileType
  97.         OpenLocation new .openLocation \
  98.             -itemType "[$selItem type]" \
  99.             -phaseType "[[[lindex [$ed context] 3] phase] type]" \
  100.             -diagramType "$fileType" \
  101.             -componentType "[lindex $selItemRec 1]" \
  102.             -labelType "[lindex $selItemRec 2]" \
  103.             -condition "[lindex $selItemRec 3]"
  104.         set openKnowlDB [$ed openKnowledgeDB]
  105.         foreach stg [$openKnowlDB definitions .openLocation] {
  106.             if [$stg isA SearchStrategy] {
  107.                 $this addSearch $stg
  108.             } elseif [$stg isA CrFileStrategy] {
  109.                 $this addCreate $stg
  110.             } else {
  111.                 $this addUserDef $stg
  112.             }
  113.         }
  114.         set objSet [$this.bv objectSet]
  115.         set objSetSize [llength $objSet]
  116.         if {$objSetSize == 0} {
  117.             wmtkerror "No Open operations available for selected item"
  118.             $this delete
  119.             return
  120.         }
  121.         if {$objSetSize == 1} {
  122.             eval [[lindex $objSet 0] script]
  123.             $this delete
  124.             return
  125.         }
  126.  
  127.         $this handleSelectionChanged
  128.         $this TemplateDialog::popUp
  129.     }
  130. }
  131.  
  132. method OpenDiagram::handleOk {this} {
  133.     foreach action [$this.bv selectedSet] {
  134.         eval [$action script]
  135.     }
  136.     $this delete
  137. }
  138.  
  139. method OpenDiagram::handleCancel {this} {
  140.     $this delete
  141. }
  142.  
  143. method OpenDiagram::handleSelectionChanged {this} {
  144.     set selected [llength [$this.bv selectedSet]]
  145.     $this okSensitive $selected
  146.     $this okDefault $selected
  147.     $this cancelDefault [expr 1 - $selected]
  148. }
  149.  
  150. method OpenDiagram::addSearch {this stg} {
  151.     set ed [$this editor]
  152.     set configV [$ed configVersion]
  153.     set systemV [$ed systemVersion]
  154.     set system [$systemV system]
  155.     set selItem [$this selectedItem]
  156.     $systemV getDecompositions $selItem $configV \
  157.         [$stg decompFlags] [$stg fileTypes] decompSystems decompFiles
  158.     foreach decFileV $decompFiles {
  159.         if {$decFileV == [$ed fileVersion]} continue
  160.         set decSys [$decFileV system]
  161.         set dfl [$decFileV file]
  162.         set decType [$dfl type]
  163.         set opId ${decType}File[$dfl qualifiedName :]InSys[$decSys name]
  164.         regsub -all "\\." "$opId" "DOT" opId
  165.         set opAct $this.bv.$opId
  166.         if [isCommand $opAct] continue
  167.         set objSpec [getObjectSpec [$ed objHdlr] Graph $decType]
  168.         if {"$objSpec" == ""} continue
  169.  
  170.         if {$decSys == $system && $decType == [$this diagramType]} {
  171.             set action "load diagram"
  172.             set script "$ed push $decFileV"
  173.         } else {
  174.             set action "start editor"
  175.             set phaseV [[ClientContext::global] currentPhase]
  176.             set decSysV [$phaseV findSystemVersion \
  177.                             -bySystem $decSys]
  178.             set script "$ed newEditor $decSysV $decFileV"
  179.         }
  180.         set details [list [$dfl qualifiedName :]]
  181.         lappend details    $decType
  182.         lappend details "[$decSys name]"
  183.         OpenAction new $opAct \
  184.             -activated "$this popDown; $this handleOk" \
  185.             -smallIcon [$objSpec smallIcon] \
  186.             -label "$action" \
  187.             -details "$details" \
  188.             -script "$script"
  189.         lappend [$this.bv objectSet] $opAct
  190.     }
  191. }
  192.  
  193. method OpenDiagram::addCreate {this stg} {
  194.     set ed [$this editor]
  195.     set configV [$ed configVersion]
  196.     set systemV [$ed systemVersion]
  197.     set decQual [$this evalMacsIn [$stg qualItemSpec]]
  198.     if {"$decQual" != "" && [$decQual isNil]} return
  199.     set decName [$this evalMacsIn [$stg fileNameSpec]]
  200.     set decType [$this evalMacsIn [$stg fileTypeSpec]]
  201.     set itemType [file2itemtype $decType]
  202.     if {"$decQual" == ""} {
  203.         set wItm [$systemV findDefinition $decName $itemType $configV]
  204.     } elseif {"$decName" == ""} {
  205.         set wItm [$systemV findDefinition $decQual $configV]
  206.     } else {
  207.         set wItm [$systemV findDefinition \
  208.                     $decQual $decName $itemType $configV]
  209.     }
  210.     set decSysV [ORB::nil]
  211.     if {![$wItm isNil]} {
  212.         set decSysV [$wItm owner]
  213.     }
  214.     if [$decSysV isNil] {
  215.         if [$stg isA CrSysStrategy] {
  216.             set phaseV [lindex [$ed context] 3]
  217.             set decSysName [$this evalMacsIn [$stg sysNameSpec]]
  218.             set decSysV [$phaseV findSystemVersion \
  219.                             $decSysName system]
  220.         } else {
  221.             set decSysV $systemV
  222.             set decSysName [[$decSysV system] name]
  223.         }
  224.     } else {
  225.         set decSysName [[$decSysV system] name]
  226.     }
  227.     $this addCreateAct $stg $decSysName $decSysV [ORB::nil]
  228.     if {"$decName" == ""} {
  229.         if {![$wItm isNil]} {
  230.             foreach qItm [$wItm qualifiedDeclarations] {
  231.                 set decFileV [$decSysV findFileVersion \
  232.                     -byItemAndType [$qItm item] $decType]
  233.                 if {![$decFileV isNil]} {
  234.                     $this addCreateAct $stg $decSysName \
  235.                             $decSysV $decFileV
  236.                 }
  237.             }
  238.         }
  239.     }
  240. }
  241.  
  242. method OpenDiagram::addCreateAct {this stg decSysName decSysV decFileV} {
  243.     set ed [$this editor]
  244.     set systemV [$ed systemVersion]
  245.     set fileType [$this diagramType]
  246.     set decQual [$this evalMacsIn [$stg qualItemSpec]]
  247.     set decName [$this evalMacsIn [$stg fileNameSpec]]
  248.     set decType [$this evalMacsIn [$stg fileTypeSpec]]
  249.     set itemType [file2itemtype $decType]
  250.     if {"$decQual" == ""} {
  251.         set decQualName $decName
  252.     } elseif {"$decName" == ""} {
  253.         set decQualName [$decQual name]
  254.         if {![$decFileV isNil]} {
  255.             set decQualName [[$decFileV file] qualifiedName :]
  256.         }
  257.     } else {
  258.         set decQualName "[$decQual name]:$decName"
  259.     }
  260.  
  261.     set opId ${decType}File${decQualName}InSys$decSysName
  262.     regsub -all "\\." "$opId" "DOT" opId
  263.     set opAct $this.bv.$opId
  264.     if [isCommand $opAct] return
  265.     set objSpec [getObjectSpec [$ed objHdlr] Graph $decType]
  266.     if {"$objSpec" == ""} return
  267.  
  268.     if [$decSysV isNil] {
  269.         set action "create system"
  270.         set script "$this createSystem $decSysName"
  271.         append script " \"$decQual\" \"$decName\" $decType"
  272.     } else {
  273.         if {"$decQual" == ""} {
  274.             set decFileV [$decSysV findFileVersion \
  275.                             $decName $decType]
  276.         } elseif [$decFileV isNil] {
  277.             set fItm [ORB::nil]
  278.             if {$decName != ""} {
  279.                 set fItm [$decQual findItem $decName $itemType]
  280.             }
  281.             if {![$fItm isNil]} {
  282.                 set decFileV [$decSysV findFileVersion \
  283.                         -byItemAndType $fItm $decType]
  284.             }
  285.         }
  286.         if [$decFileV isNil] {
  287.             if {$decType == $fileType} {
  288.                 set action "make decomposition"
  289.             } else {
  290.                 set action "create diagram"
  291.             }
  292.             set script "$this makeDecompIn $decSysV"
  293.             append script " \"$decQual\" \"$decName\" $decType"
  294.         } elseif {$decFileV == [$ed fileVersion]} {
  295.             return
  296.         } elseif {$decSysV == $systemV} {
  297.             if {$decType == $fileType} {
  298.                 set action "load diagram"
  299.                 set script "$ed push $decFileV"
  300.             } else {
  301.                 set action "start editor"
  302.                 set script "$ed newEditor $decSysV $decFileV"
  303.             }
  304.         } else {
  305.             set action "start editor"
  306.             set script "$ed newEditor $decSysV $decFileV"
  307.         }
  308.     }
  309.     set details [list "$decQualName"]
  310.     lappend details $decType
  311.     lappend details $decSysName
  312.     OpenAction new $opAct \
  313.         -activated "$this popDown; $this handleOk" \
  314.         -smallIcon [$objSpec smallIcon] \
  315.         -label "$action" \
  316.         -details "$details" \
  317.         -script "$script"
  318.     lappend [$this.bv objectSet] $opAct
  319. }
  320.  
  321. method OpenDiagram::addUserDef {this stg} {
  322.     [$stg procedure] $this
  323. }
  324.  
  325. method OpenDiagram::makeDecompIn {this sv qualItem fileName fileType} {
  326.     set ed [$this editor]
  327.     if {"$fileName" == ""} {
  328.         $ed askDecName $sv $qualItem $fileType
  329.         return
  330.     }
  331.     $ed decompose $sv $qualItem $fileName $fileType
  332. }
  333.  
  334. method OpenDiagram::createSystem {this sysName qualItem fileName fileType} {
  335.     set ed [$this editor]
  336.     set configV [$ed configVersion]
  337.     set phaseV [lindex [$ed context] 3]
  338.     wmtkmessage "Creating system '$sysName'"
  339.     busy {
  340.         if [catch {
  341.             set decSysV [$phaseV createSystemVersion \
  342.                 $sysName cl system $configV]
  343.         } msg] {
  344.             wmtkerror $msg
  345.             return
  346.         }
  347.     }
  348.     $this makeDecompIn $decSysV $qualItem $fileName $fileType
  349. }
  350.  
  351. method OpenDiagram::selectedProp {this prop} {
  352.     set ed [$this editor]
  353.     set configV [$ed configVersion]
  354.     set selItem [lindex [$ed selectedItem] 0]
  355.     set selWorkProps [[$selItem workItem $configV] properties]
  356.     if {![$selWorkProps isNil]} {
  357.         set propSpec [$selWorkProps findProperty $prop]
  358.         if {![$propSpec isNil]} {
  359.             set propItemRef [lindex [$propSpec itemRefs] 0]
  360.             if {![$propItemRef isNil]} {
  361.                 set propItem [$propItemRef item]
  362.                 if {![$propItem isNil]} {
  363.                     return $propItem
  364.                 }
  365.             }
  366.         }
  367.     }
  368.     return [$this selectedItem]
  369. }
  370.  
  371. method OpenDiagram::evalMacsIn {this spec} {
  372.     set item [$this selectedItem]
  373.     set itemName [$item name]
  374.     set itemQual [$item qualifier]
  375.     if [$itemQual isNil] {
  376.         set itemQualName ""
  377.     } else {
  378.         set itemQualName [$itemQual name]
  379.     }
  380.     set dataType [$this selDataType]
  381.     set diagItem [$this diagramItem]
  382.     set diagName [$diagItem name]
  383.     set diagQual [$diagItem qualifier]
  384.     if [$diagQual isNil] {
  385.         set diagQualName ""
  386.     } else {
  387.         set diagQualName [$diagQual name]
  388.     }
  389.     set diagType [$this diagramType]
  390.     return [expr \"$spec\"]
  391. }
  392.  
  393. # Do not delete this line -- regeneration end marker
  394.  
  395.