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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)custeditor.tcl    /main/hindenburg/6
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)custeditor.tcl    /main/hindenburg/6   11 Mar 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12.  
  13. require "browserpro.tcl"
  14. require "custedopti.tcl"
  15. require "custedwmta.tcl"
  16. require "showversio.tcl"
  17. require "ucsymb2url.tcl"
  18.  
  19. # End user added include file section
  20.  
  21. require "wmttool.tcl"
  22.  
  23. Class CustEditor : {WmtTool MainWindow} {
  24.     method destructor
  25.     constructor
  26.     method save
  27.     method edit
  28.     method doEdit
  29.     method exit
  30.     method doExit
  31.     method popupNotSaved
  32.     method selectionChanged
  33.     method showObjectInfo
  34.     method showRepObjInfo
  35.     method setContext
  36.     method getSelectedSet
  37.     method selectedObjSet
  38.     method helpOnContext
  39.     method helpOnName
  40.     method addContextArea
  41.     method updateToolBar
  42.     method updateWmtArea
  43.     method initObjTypeInformation
  44.     method getBrowsObj
  45.     method setBrowsObj
  46.     method removeBrowsObj
  47.     attribute permanentReadOnly
  48.     attribute currentlyReadOnly
  49.     attribute object
  50.     attribute m4VarDes
  51.     attribute options
  52.     attribute notSaved
  53.     attribute editorArea
  54.     attribute menuHdlr
  55.     attribute wmtArea
  56.     attribute BrowsObj
  57. }
  58.  
  59. global CustEditor::extFileVTypes
  60. set CustEditor::extFileVTypes ""
  61.  
  62. global CustEditor::graphTypes
  63. set CustEditor::graphTypes ""
  64.  
  65. global CustEditor::itemTypes
  66. set CustEditor::itemTypes "cl de doc et pe st"
  67.  
  68. global CustEditor::matrixTypes
  69. set CustEditor::matrixTypes ""
  70.  
  71. global CustEditor::extFileTypes
  72. set CustEditor::extFileTypes ""
  73.  
  74.  
  75. method CustEditor::destructor {this} {
  76.     # Start destructor user section
  77.     [$this options] delete
  78.     # End destructor user section
  79.     $this WmtTool::destructor
  80. }
  81.  
  82. constructor CustEditor {class this name} {
  83.     set this [MainWindow::constructor $class $this $name]
  84.     WmtTool::constructor $class $this $name
  85.  
  86.     $this permanentReadOnly 0
  87.     $this currentlyReadOnly 0
  88.     $this BrowsObj [Dictionary new]
  89.  
  90.     $this config -closed {%this exit}
  91.     $this options [CustEdOptions new $this.options]
  92.  
  93.     MenuBar new $this.menuBar
  94.     # creation of the 'editor area' is done in the derived classes
  95.     $this editorArea [DlgColumn new $this.editorArea]    
  96.  
  97.     # read phases file
  98.      getPhases
  99.  
  100.     return $this
  101. }
  102.  
  103. proc CustEditor::subTypes {repType} {
  104.     case "$repType" in {
  105.         {AccessRule} {
  106.         set subTypes [CListObj::childTypes rules]
  107.         }
  108.         {SystemFileReference} {
  109.         set subTypes [SysVDbObj::childTypes fileVersionReferences]
  110.         }
  111.         {CustomFileVersion} {
  112.         set subTypes [CustFVUiObj::childTypes customFileVersions]
  113.         }
  114.         {ExternalFile} {
  115.         set subTypes [HCustFUiObj::childTypes externalFiles]
  116.         }
  117.         {ExternalFileVersion} {
  118.         set subTypes "${CustEditor::extFileVTypes}"
  119.         }
  120.         {ExternalLink} {
  121.         set subTypes [SysVDbObj::childTypes externalLinks]
  122.         }
  123.         {Graph} {
  124.         set subTypes "${CustEditor::graphTypes}"
  125.         }
  126.         {Matrix} {
  127.         set subTypes "${CustEditor::matrixTypes}"
  128.         }
  129.         {PhaseVersion} {
  130.         set subTypes [ConfVDbObj::childTypes phaseVersions]
  131.         }
  132.         {SystemVersion} {
  133.         set subTypes [PhaseVDbObj::childTypes systemVersions]
  134.         }
  135.         {UserRoleLink} {
  136.         set subTypes [concat \
  137.             [RoleDbObj::childTypes userLinks] \
  138.             [UsrDbObj::childTypes roleLinks] \
  139.         ]
  140.         }
  141.         {WorkItem} {
  142.         set subTypes "${CustEditor::itemTypes}"
  143.         }
  144.         {default} {
  145.         set subTypes ""
  146.         }
  147.     }
  148.     return $subTypes
  149. }
  150.  
  151. method CustEditor::save {this} {
  152.  
  153.     $this busy TRUE
  154.     wmtkmessage "Saving..."
  155.     if [catch {
  156.         [$this editorArea] save
  157.         wmtkmessage "Done"
  158.     } msg ] {
  159.         wmtkerror $msg
  160.         wmtkmessage "Not done"
  161.     }
  162.     $this busy FALSE
  163. }
  164.  
  165. method CustEditor::edit {this obj} {
  166.  
  167.     if [[$this editorArea] isChanged] {
  168.         $this popupNotSaved "$this doEdit $obj"
  169.     } else {
  170.         $this doEdit $obj
  171.     }
  172. }
  173.  
  174. method CustEditor::doEdit {this obj} {
  175.  
  176.     $this busy TRUE
  177.     [$this editorArea] clearArea
  178.     if {[[$this editorArea] _repObj] == $obj} {
  179.         wmtkmessage "Reloading ..."
  180.     } else {
  181.         wmtkmessage "Loading ..."
  182.     }
  183.     if [$this permanentReadOnly] {
  184.         if [catch {[$this editorArea] load $obj} msg] {
  185.             wmtkerror $msg
  186.             wmtkmessage "Not done"
  187.         } else {
  188.             wmtkmessage "Loaded read-only"
  189.             $this object $obj
  190.             $this showRepObjInfo
  191.         }
  192.         $this busy FALSE
  193.         $this currentlyReadOnly 1
  194.         # force an update of the menu entry enable status
  195.         [$this menuHdlr] levelChanged
  196.         [$this menuHdlr] selectionChanged
  197.         return
  198.     }
  199.     if [catch {[$this editorArea] edit $obj} msg] {
  200.         # Edit failed, try load
  201.         if [catch {[$this editorArea] load $obj} loadMsg] {
  202.             wmtkerror "Edit failed:\n${msg}\nLoad failed:\n$loadMsg"
  203.             wmtkmessage "Not done"
  204.             $this busy FALSE
  205.             return
  206.         } else {
  207.             wmtkmessage "Loaded read-only"
  208.             wmtkwarning $msg
  209.         }
  210.         $this currentlyReadOnly 1
  211.         # force an update of the menu's (enable/disable)
  212.         [$this menuHdlr] levelChanged
  213.         [$this menuHdlr] selectionChanged
  214.     } else {
  215.         wmtkmessage Done
  216.         $this currentlyReadOnly 0
  217.         # force an update of the menu's (enable/disable)
  218.         [$this menuHdlr] levelChanged
  219.         [$this menuHdlr] selectionChanged
  220.     }
  221.     $this object $obj
  222.     $this showRepObjInfo
  223.     $this busy FALSE
  224. }
  225.  
  226. method CustEditor::exit {this} {
  227.  
  228.     if [[$this editorArea] isChanged] {
  229.         $this popupNotSaved "$this doExit"
  230.     } else {
  231.         $this doExit
  232.     }
  233. }
  234.  
  235. method CustEditor::doExit {this} {
  236.  
  237.     $this busy TRUE
  238.     wmtkmessage "Exiting ..."
  239.     catch {[$this editorArea] quit}
  240.     $this delete
  241.     GCControl collect
  242.     exit
  243. }
  244.  
  245. method CustEditor::popupNotSaved {this action} {
  246.  
  247.     set notSaved [$this notSaved]
  248.     if {$notSaved == ""} {
  249.         require "notsaveddi.tcl"
  250.         set notSaved [NotSavedDialog new $this.notSaved -editor $this]
  251.         $notSaved infoKind "Customization File"    
  252.         $this notSaved $notSaved
  253.     }
  254.     $notSaved action $action
  255.     $notSaved popUp
  256. }
  257.  
  258. method CustEditor::selectionChanged {this} {
  259.  
  260.     [$this menuHdlr] selectionChanged
  261.     wmtkmessage ""
  262. }
  263.  
  264. method CustEditor::showObjectInfo {this obj} {
  265.  
  266.     global classCount
  267.     set box .main.showObjectInfo$classCount
  268.     incr classCount
  269.     interface TemplateDialog $box {
  270.         title "Info"
  271.         DlgColumn col {}
  272.         okPressed {%this delete}
  273.     }
  274.     $box modal $win95
  275.     $box delCancelButton
  276.     $box delHelpButton
  277.  
  278.     set infoList [$obj infoList]
  279.     set len [llength $infoList]
  280.     for {set i 0} {$i < $len} {incr i 2} {
  281.         DlgRow new $box.col.row$i \
  282.             -spaceType NONE \
  283.             -justification RIGHT
  284.         Label new $box.col.row$i.header \
  285.             -text "[lindex $infoList $i]:" \
  286.             -alignment RIGHT \
  287.             -horStretchFactor 10 \
  288.             -justification TOP \
  289.             -font "courier-bold-12"
  290.         DlgColumn new $box.col.row$i.col
  291.         set breakUpCnt 0
  292.         foreach part [lineBreak [lindex $infoList [expr $i+1]] 31 " "] {
  293.             set text [format "%-31s" $part]
  294.             Label new $box.col.row$i.col.label$breakUpCnt \
  295.                 -text $text \
  296.                 -font "courier-normal-12"
  297.             incr breakUpCnt
  298.         }
  299.     }
  300.  
  301.     $box popUp
  302. }
  303.  
  304. method CustEditor::showRepObjInfo {this} {
  305.  
  306.     if {"[$this wmtArea]" == ""} {
  307.         return
  308.     }
  309.  
  310.     # the object is possible a user file
  311.     if [isCommand [$this object]] {
  312.         set name [[[$this object] customFile] name]
  313.         set version [[$this object] versionNumber]
  314.         [$this wmtArea] file "$name (V$version)"
  315.     } else {
  316.         [$this wmtArea] file "[$this object] (-)"
  317.     }
  318. }
  319.  
  320. method CustEditor::setContext {this} {
  321.  
  322.     [$this editorArea] setContext
  323.  
  324.     if {"[$this wmtArea]" == ""} {
  325.         return
  326.     }
  327.  
  328.     set clientContext [ClientContext::global]
  329.  
  330.     set project [$clientContext currentProject]
  331.     if [$project isNil] return
  332.     [$this wmtArea] project [$project name]
  333.     set configV [$clientContext currentConfig]
  334.     if [$configV isNil] return
  335.     [$this wmtArea] configuration \
  336.         "[[$configV ConfigVersion::config] name] (V[$configV versionName])"
  337.     set phaseV [$clientContext currentPhase]
  338.     if [$phaseV isNil] return
  339.     [$this wmtArea] phase [[$phaseV phase] name]
  340.     set systemV [$clientContext currentSystem]
  341.     if [$systemV isNil] return
  342.     [$this wmtArea] system [[$systemV system] name]
  343. }
  344.  
  345. method CustEditor::getSelectedSet {this} {
  346.  
  347.     if {![[$this editorArea] isA BrowsView]} {
  348.         return ""
  349.     }
  350.  
  351.     return [[$this editorArea] selectedSet]
  352. }
  353.  
  354. method CustEditor::selectedObjSet {this} {
  355.  
  356.     return [$this getSelectedSet]
  357. }
  358.  
  359. method CustEditor::helpOnContext {this} {
  360.  
  361.     showHelp {CMZ/tl_cmz.html}
  362. }
  363.  
  364. method CustEditor::helpOnName {this name} {
  365.  
  366.     global short2url
  367.     if [catch {set url $short2url($name)}] {
  368.         wmtkerror "Sorry, no help available for '$name'"
  369.     } else {
  370.         showHelp $url
  371.     }
  372. }
  373.  
  374. method CustEditor::addContextArea {this} {
  375.     $this wmtArea [CustEdWmtArea new $this.editorArea.wmtarea]
  376. }
  377.  
  378. method CustEditor::updateToolBar {this} {
  379.     [$this menuHdlr] setCurrentContext
  380. }
  381.  
  382. method CustEditor::updateWmtArea {this} {
  383.     $this setContext
  384.     $this showRepObjInfo
  385. }
  386.  
  387. method CustEditor::initObjTypeInformation {this} {
  388.  
  389.     require "browserobj.tcl"
  390.  
  391.     # Initialize table for conversion from RepositoryObject to BrowsUiObj
  392.     initRepObj2UiObjTable BrowsObj
  393.  
  394.     # retrieve the possible file-types from objectHdlr
  395.     global CustEditor::extFileVTypes
  396.     global CustEditor::graphTypes
  397.     global CustEditor::matrixTypes
  398.     global CustEditor::extFileTypes
  399.     set objectHdlr [CustObjHandler new]
  400.     $objectHdlr setCurrentContext
  401.     foreach objectSpec [$objectHdlr getCurrentObjectSpecSet] {
  402.         set browserType [$objectSpec browserType]
  403.         if {"$browserType" == ""} continue
  404.         case [$objectSpec repositoryType] in {
  405.             {ExternalFileVersion} {
  406.                 lappend CustEditor::extFileVTypes $browserType
  407.             }
  408.             {Graph} {
  409.                 lappend CustEditor::graphTypes $browserType
  410.             }
  411.             {Matrix} {
  412.                 lappend CustEditor::matrixTypes $browserType
  413.             }
  414.             {ExternalLink} {
  415.                 lappend CustEditor::extFileTypes $browserType
  416.             }
  417.         }
  418.     }
  419.     global BrowserProcs::externalFileTypes
  420.     set BrowserProcs::externalFileTypes ${CustEditor::extFileTypes}
  421.     global BrowserProcs::diagramFileTypes
  422.     set BrowserProcs::diagramFileTypes [concat \
  423.         ${CustEditor::graphTypes} \
  424.         ${CustEditor::matrixTypes} \
  425.     ]
  426.     global BrowserProcs::programmerFileTypes
  427.     set BrowserProcs::programmerFileTypes ${CustEditor::extFileVTypes}
  428.     global BrowserProcs::itemTypes
  429.     set BrowserProcs::itemTypes ${CustEditor::itemTypes}
  430.     $objectHdlr delete
  431. }
  432.  
  433. # Do not delete this line -- regeneration end marker
  434.  
  435. method CustEditor::getBrowsObj {this name} {
  436.     return [[$this BrowsObj] set $name]
  437. }
  438.  
  439. method CustEditor::setBrowsObj {this name newBrowsObj} {
  440.     [$this BrowsObj] set $name $newBrowsObj
  441. }
  442.  
  443. method CustEditor::removeBrowsObj {this name} {
  444.     [$this BrowsObj] unset $name
  445. }
  446.  
  447.