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

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