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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)extfuiobj.tcl    /main/titanic/12
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)extfuiobj.tcl    /main/titanic/12   18 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "browsuiobj.tcl"
  15.  
  16. Class ExtFUiObj : {BrowsUiObj} {
  17.     constructor
  18.     method destructor
  19.     method addExternalFile
  20.     method browserType
  21.     method downLoad
  22.     method editFile
  23.     method externalFiles
  24.     method hasChildren
  25.     method initializeInfo
  26.     method openFile
  27.     method printObjects
  28.     method referredFile
  29.     method removeObjects
  30.     method showFile
  31.     method upLoad
  32.     attribute directory
  33.     attribute isAscii
  34.     attribute isDirectory
  35.     attribute inModule
  36.     attribute pattern
  37. }
  38.  
  39. global ExtFUiObj::uiClass
  40. set ExtFUiObj::uiClass "ExternalFile"
  41.  
  42.  
  43. constructor ExtFUiObj {class this name} {
  44.     set this [BrowsUiObj::constructor $class $this $name]
  45.     $this isAscii 1
  46.     $this isDirectory 0
  47.     $this inModule 0
  48.     $this pattern "*"
  49.     # Start constructor user section
  50.     # End constructor user section
  51.     return $this
  52. }
  53.  
  54. method ExtFUiObj::destructor {this} {
  55.     # Start destructor user section
  56.     # End destructor user section
  57.     $this BrowsUiObj::destructor
  58. }
  59.  
  60. method ExtFUiObj::addExternalFile {this} {
  61.     if {! [$this isDirectory]} {
  62.     return
  63.     }
  64.  
  65.     set parent [$this getParent HCustFUiObj]
  66.     if {"$parent" != ""} {
  67.     set childTypes [HCustFUiObj::externalFileNames]
  68.     } else  {
  69.     set parent [$this getParent UCustFUiObj]
  70.     if {"$parent" != ""} {
  71.         set childTypes [UCustFUiObj::externalFileNames]
  72.     } else {
  73.         set childTypes [CustFVUiObj::customFileNames]
  74.     }
  75.     }
  76.     foreach childType $childTypes {
  77.     set externalFileList($childType) 1
  78.     }
  79.     foreach externalFile [$this getChildSet externalFiles] {
  80.     set type [$externalFile uiName]
  81.     if [info exists externalFileList($type)] {
  82.         unset externalFileList($type)
  83.     }
  84.     }
  85.     if [info exists externalFileList] {
  86.     set entrySet [lsort [array names externalFileList]]
  87.     } else {
  88.     set entrySet ""
  89.     }
  90.  
  91.     require "editseldia.tcl"
  92.     set box .main.newExternalF
  93.     ClassMaker::extend EditSelDialog NewExternalFileEditSelDialog uiObj
  94.     NewExternalFileEditSelDialog new $box \
  95.     -title "New External File" \
  96.     -message "External File:" \
  97.     -entrySet $entrySet \
  98.     -uiObj $this \
  99.     -okPressed {
  100.         set dir ""
  101.         set uiObj [%this uiObj]
  102.         set file [%this text]
  103.         set script "global ExtFUiObj:custF"
  104.         append script " ;"
  105.         if [$uiObj inModule] {
  106.         set dir [path_name concat \
  107.             [$uiObj getInfo Directory] [$uiObj getInfo Name]]
  108.         append script " set ExtFUiObj:custF \
  109.             \[path_name concat $dir \"$file\" \]"
  110.         append script " ;"
  111.         append script " BasicFS::makeFile \${ExtFUiObj:custF}"
  112.         } else {
  113.         while {"$uiObj" != ""} {
  114.             if {! [$uiObj isA ExtFUiObj]} break
  115.             if {"$dir" == ""} {
  116.             set dir [$uiObj getInfo Name]
  117.             } else {
  118.             set dir [path_name concat [$uiObj getInfo Name] $dir]
  119.             }
  120.             set uiObj [$uiObj parent]
  121.         }
  122.         set selection [splitFileName $file]
  123.         set name [lindex $selection 0]
  124.         set type [lindex $selection 1]
  125.         append script " set ExtFUiObj:custF \
  126.             \[CustFileUtilities::make [.main corporateObj] \
  127.             [list $name] [list $type] [list $dir] \]"
  128.         require "custfileut.tcl"
  129.         }
  130.         .main startCommand tcl \
  131.         "$script" "" \
  132.         "Creating external file '$file'" \
  133.         {1 0} 1
  134.         %this delete
  135.     } \
  136.     -editPressed {
  137.         if [info exists ExtFUiObj:custF] {
  138.         if [file isfile ${ExtFUiObj:custF}] {
  139.             regsub -all " |\\." "[$this text]" "_" fileId
  140.             [$this uiObj].ExternalFile:$fileId editFile
  141.         }
  142.         unset ExtFUiObj:custF
  143.         }
  144.     }
  145.     $box popUp
  146. }
  147.  
  148. proc ExtFUiObj::associations {} {
  149.     return {externalFiles}
  150. }
  151.  
  152. method ExtFUiObj::browserType {this} {
  153.     if [$this isDirectory] {
  154.     return ExternalDirectory
  155.     } else {
  156.     return [$this BrowsUiObj::browserType]
  157.     }
  158. }
  159.  
  160. proc ExtFUiObj::childTypes {assoc} {
  161.     if {[lsearch -exact "[ExtFUiObj::associations]" "$assoc"] == -1} {
  162.     return ""
  163.     }
  164.     set childTypes [BrowserProcs::childTypes $assoc]
  165.     case "$childTypes" in {
  166.     {ExternalFile} {
  167.         return {ExternalDirectory ExternalFile}
  168.     }
  169.     {default} {
  170.         return "$childTypes"
  171.     }
  172.     }
  173. }
  174.  
  175. method ExtFUiObj::downLoad {this fileName} {
  176.     set path [$this getInfo Path]
  177.     BasicFS::copyFile $path $fileName
  178. }
  179.  
  180. method ExtFUiObj::editFile {this} {
  181.     if [$this isDirectory] {
  182.     return
  183.     }
  184.  
  185.     set path [$this getInfo Path]
  186.     if {! [file writable $path]} {
  187.     $this showFile
  188.     return
  189.     }
  190.  
  191.     if [$this inModule] {
  192.     .main startM4Command editor "[path_name concat \
  193.         [$this directory] [$this uiName]]" "" "[$this uiName]"
  194.     return
  195.     }
  196.  
  197.     set file [splitFileName "[$this uiName]"]
  198.     set name [lindex "$file" 0]
  199.     set type [lindex "$file" 1]
  200.     if [[$this parent] isA UCustFUiObj] {
  201.     set level "user"
  202.     } else {
  203.     set level "corporate"
  204.     }
  205.     case "$type" in {
  206.     {mnu vie objtype modules copyspecs} {
  207.         set script "SystemUtilities::fork otk uce \
  208.         -c [list [get_comm_name]] \
  209.         -fi $level [list $name].[list $type]"
  210.         .main startCommand tcl \
  211.         "$script" "" \
  212.         "Starting uce for '$name.$type'" \
  213.         {0 0} 1
  214.     }
  215.     {opendefs openlocs propdefs proplocs} {
  216.         if {$level == "user"} {
  217.         .main startM4Command editor "$path" "" "[$this uiName]"
  218.         return
  219.         }
  220.         set script "SystemUtilities::fork otk uce \
  221.         -c [list [get_comm_name]] \
  222.         -fi $level [list $name].[list $type]"
  223.         .main startCommand tcl \
  224.         "$script" "" \
  225.         "Starting uce for '$name.$type'" \
  226.         {0 0} 1
  227.     }
  228.     {gdr} {
  229.             require "groupdefin.tcl"
  230.             global classCount
  231.             incr classCount
  232.             set dlgName .main.groupDefinitionFileDialog$classCount
  233.             GroupDefinitionFileDialog new $dlgName $this \
  234.                 -helpPressed ".main helpOnName groupDefinitionFileDialog" \
  235.         -fileName $name \
  236.                 -editable 1
  237.             $dlgName popUp
  238.     }
  239.     {pnl} {
  240.             require "ctrlpnldia.tcl"
  241.         global classCount
  242.         incr classCount
  243.         set dlgName .main.ctrlPnlDialog$classCount
  244.         CtrlPnlDialog new $dlgName \
  245.         -helpPressed ".main helpOnName ctrlPnlDialog" \
  246.         -lvlObj [$this getParent Corporate] \
  247.         -fileName $name \
  248.         -fileType $type \
  249.         -editable 1
  250.         $dlgName popUp
  251.     }
  252.     {checkconfig} {
  253.         require "custcheckd.tcl"
  254.         global classCount
  255.         incr classCount
  256.         set dlgName .main.custCheckDialog$classCount
  257.         CustCheckDialog new $dlgName
  258.         $dlgName edit [$this getParent CustomLevelVersion]
  259.     }
  260.     {default} {
  261.         .main startM4Command editor "$path" "" "[$this uiName]"
  262.     }
  263.     }
  264. }
  265.  
  266. method ExtFUiObj::externalFiles {this} {
  267.     if {! [$this isDirectory]} {
  268.     return ""
  269.     }
  270.  
  271.     set externalFiles ""
  272.     set externalDirectories ""
  273.     set directory [$this getInfo Path]
  274.     set extFilePattern [path_name concat $directory [$this pattern]]
  275.  
  276.     if {[catch {set files [otglob $extFilePattern]}]} {
  277.     set files ""
  278.     }
  279.  
  280.     set inModule [$this inModule]
  281.     foreach pathFile [lsort $files] {
  282.     set file [file tail $pathFile]
  283.     regsub -all " |\\." "$file" "_" fileId
  284.     set externalFile $this.${ExtFUiObj::uiClass}:$fileId
  285.     set isDirectory [file isdirectory \
  286.                  [path_name concat $directory $file]]
  287.  
  288.     if {! [isCommand $externalFile]} {
  289.         ExtFUiObj new $externalFile \
  290.         -parent $this \
  291.         -uiName "$file" \
  292.         -directory "$directory" \
  293.         -isDirectory $isDirectory \
  294.         -inModule $inModule
  295.     }
  296.     if $isDirectory {
  297.         lappend externalDirectories $externalFile
  298.     } else {
  299.         lappend externalFiles $externalFile
  300.     }
  301.     }
  302.     return [concat $externalDirectories $externalFiles]
  303. }
  304.  
  305. method ExtFUiObj::hasChildren {this} {
  306.     if [$this isDirectory] {
  307.     return 1
  308.     } else {
  309.     return 0
  310.     }
  311. }
  312.  
  313. proc ExtFUiObj::infoProperties {} {
  314.     return [concat \
  315.     [BrowserProcs::infoProperties] \
  316.     {Directory Path} \
  317.     ]
  318. }
  319.  
  320. method ExtFUiObj::initializeInfo {this dummy} {
  321.     set directory [$this directory]
  322.     set file [$this uiName]
  323.     set path [path_name concat $directory $file]
  324.     if {! [file exists $path]} {
  325.     set path $file
  326.     $this directory [path_name directory $path]
  327.     $this uiName [path_name file $path]
  328.     }
  329.  
  330.     case "[lindex [splitFileName [$this uiName]] 1]" in {
  331.     {dot con tlb} {
  332.         $this isAscii 0
  333.     }
  334.     }
  335.  
  336.     $this BrowsUiObj::initializeInfo $dummy
  337.     $this setInfo Text "external file '$path'"
  338.     $this setInfo Directory "[$this directory]"
  339.     $this setInfo Path "$path"
  340. }
  341.  
  342. method ExtFUiObj::openFile {this} {
  343.     if {[$this isDirectory] || (! [$this isAscii])} {
  344.     BrowserProcs::showInfo
  345.     } elseif {! [file writable [$this getInfo Path]]} {
  346.     $this showFile
  347.     } else {
  348.     $this editFile
  349.     }
  350. }
  351.  
  352. method ExtFUiObj::printObjects {this} {
  353.     if {! [$this isDirectory]} {
  354.     return
  355.     }
  356.  
  357.     set parent [$this getParent HCustFUiObj]
  358.     if {"$parent" == ""} {
  359.     set parent [$this getParent UCustFUiObj]
  360.     }
  361.     if {"$parent" == ""} {
  362.     set parent [$this getParent CustFVUiObj]
  363.     }
  364.     $parent printObjects
  365. }
  366.  
  367. method ExtFUiObj::referredFile {this {showWarning 0}} {
  368.     set path [$this getInfo Path]
  369.     if {[$this getParent UCustFUiObj] != ""} {
  370.     return $path
  371.     }
  372.  
  373.     set file [splitFileName "[$this uiName]"]
  374.     set name [lindex "$file" 0]
  375.     set type [lindex "$file" 1]
  376.     set uiObj [$this parent]
  377.     set dir ""
  378.     while {"$uiObj" != ""} {
  379.     if {! [$uiObj isA ExtFUiObj]} break
  380.     set dir [$uiObj getInfo Name]
  381.     set uiObj [$uiObj parent]
  382.     }
  383.     if {"$dir" == ""} {
  384.     return $path
  385.     }
  386.  
  387.     require "custfileut.tcl"
  388.     set custF "[CustFileUtilities::find \
  389.     [.main corporateObj] [list $name] [list $type] [list $dir]]"
  390.     if {"$custF" == ""} {
  391.     return $path
  392.     }
  393.     if {$showWarning && ("$path" != "$custF")} {
  394.     wmtkwarning "\
  395.         Customization file '$name.$type' already exists in \
  396.         the intallation directory.\nUsing file '$custF'"
  397.     }
  398.     return $custF
  399. }
  400.  
  401. method ExtFUiObj::removeObjects {this} {
  402.     if {! [$this isDirectory]} {
  403.     return
  404.     }
  405.  
  406.     set parent [$this getParent HCustFUiObj]
  407.     if {"$parent" == ""} {
  408.     set parent [$this getParent UCustFUiObj]
  409.     }
  410.     if {"$parent" == ""} {
  411.     set parent [$this getParent CustFVUiObj]
  412.     }
  413.     $parent removeObjects
  414. }
  415.  
  416. method ExtFUiObj::showFile {this} {
  417.     if [$this isDirectory] {
  418.     return
  419.     }
  420.  
  421.     if [$this inModule] {
  422.     .main startM4Command viewer "[path_name concat \
  423.         [$this directory] [$this uiName]]" "" "[$this uiName]"
  424.     return
  425.     }
  426.  
  427.  
  428.     set path [$this getInfo Path]
  429.     set file [splitFileName "[$this uiName]"]
  430.     set name [lindex "$file" 0]
  431.     set type [lindex "$file" 1]
  432.     if [[$this parent] isA UCustFUiObj] {
  433.     set level "user"
  434.     } else {
  435.     set level "corporate"
  436.     }
  437.     case "$type" in {
  438.     {mnu vie objtype modules copyspecs} {
  439.         set script "SystemUtilities::fork otk uce -r \
  440.         -c [list [get_comm_name]] \
  441.         -fi $level [list $name].[list $type]"
  442.         .main startCommand tcl \
  443.         "$script" "" \
  444.         "Starting uce for '$name.$type'" \
  445.         {0 0} 1
  446.     }
  447.     {opendefs openlocs propdefs proplocs} {
  448.         if {$level == "user"} {
  449.         .main startM4Command viewer "$path" "" "[$this uiName]"
  450.         return
  451.         }
  452.         set script "SystemUtilities::fork otk uce -r \
  453.         -c [list [get_comm_name]] \
  454.         -fi $level [list $name].[list $type]"
  455.         .main startCommand tcl \
  456.         "$script" "" \
  457.         "Starting uce for '$name.$type'" \
  458.         {0 0} 1
  459.     }
  460.     {pnl} {
  461.             require "ctrlpnldia.tcl"
  462.         global classCount
  463.         incr classCount
  464.         set dlgName .main.ctrlPnlDialog$classCount
  465.         CtrlPnlDialog new $dlgName \
  466.         -helpPressed ".main helpOnName ctrlPnlDialog" \
  467.         -lvlObj [$this getParent Corporate] \
  468.         -fileName $name \
  469.         -fileType $type \
  470.         -editable 0
  471.         $dlgName popUp
  472.     }
  473.     {gdr} {
  474.             require "groupdefin.tcl"
  475.             global classCount
  476.             incr classCount
  477.             set dlgName .main.groupDefinitionFileDialog$classCount
  478.             GroupDefinitionFileDialog new $dlgName $this \
  479.                 -helpPressed ".main helpOnName groupDefinitionFileDialog" \
  480.         -fileName $name \
  481.                 -editable 0
  482.             $dlgName popUp
  483.     }
  484.     {checkconfig} {
  485.         require "custcheckd.tcl"
  486.         global classCount
  487.         incr classCount
  488.         set dlgName .main.custCheckDialog$classCount
  489.         CustCheckDialog new $dlgName
  490.         $dlgName show [$this getParent CustomLevelVersion]
  491.     }
  492.     {default} {
  493.         .main startM4Command viewer "$path" "" "[$this uiName]"
  494.     }
  495.     }
  496. }
  497.  
  498. method ExtFUiObj::upLoad {this fileName} {
  499.     set path [$this getInfo Path]
  500.     BasicFS::copyFile $fileName $path
  501. }
  502.  
  503. # Do not delete this line -- regeneration end marker
  504.  
  505.