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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)copyeditor.tcl    /main/titanic/5
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)copyeditor.tcl    /main/titanic/5   9 Oct 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "copydefobj.tcl"
  13. # End user added include file section
  14.  
  15. require "custdefsar.tcl"
  16.  
  17. # Editor area for the copyspecs editor.
  18.  
  19. Class CopyEditorArea : {CustDefsArea} {
  20.     constructor
  21.     method destructor
  22.     method read
  23.     method processConfigLine
  24.     method createObject
  25.     method newObject
  26.     method getGdrDescription
  27.     method getGdrLevel
  28.     method sortArea
  29.  
  30.     # Reflects contents of copyspecs file:
  31.     # maps file type to gfr file.
  32.     #
  33.     attribute typeToGdr
  34.  
  35.     # Maps gdr files to a list with
  36.     # - the level at which the file was specified
  37.     # - the description of the file
  38.     #
  39.     attribute gdrToInfo
  40.     attribute copyDefiner
  41. }
  42.  
  43. constructor CopyEditorArea {class this name} {
  44.     set this [CustDefsArea::constructor $class $this $name]
  45.     # Start constructor user section
  46.     $this typeToGdr [Dictionary new]
  47.     $this gdrToInfo [Dictionary new]
  48.     $this rowCount 12
  49.     $this columnCount 136
  50.     $this font "[m4_var get M4_font -context uce]"
  51.     $this destinationSet "COPYSPEC dropEvent"
  52.     $this mode DETAIL
  53.     BrowsHeader new $this.typeHeader \
  54.         -label "File Type" \
  55.         -width 12
  56.     BrowsHeader new $this.fileHeader  \
  57.         -label "Group definition rules" -width 26
  58.     BrowsHeader new $this.levelHeader \
  59.         -label "Level" -width 16
  60.     BrowsHeader new $this.descHeader \
  61.         -label "Description" \
  62.         -width 80
  63.  
  64.     # End constructor user section
  65.     return $this
  66. }
  67.  
  68. method CopyEditorArea::destructor {this} {
  69.     # Start destructor user section
  70.     # End destructor user section
  71.     $this CustDefsArea::destructor
  72. }
  73.  
  74.  
  75. # Reads the copy spec at the specified level if it is the 
  76. # current level.
  77. # Also reads the gdr files available at the specified
  78. # level. 
  79. #
  80. method CopyEditorArea::read {this object type} {
  81.     # special treatment for corporate and user levels
  82.     # files contain a description
  83.     if  { $type == "corporate" } {
  84.     set m4_home [m4_var get M4_home]
  85.     set corporateEtc [location $m4_home "etc"]
  86.     set corpEtcPattern [path_name concat $corporateEtc "*.gdr"]
  87.  
  88.     foreach gdrPathFile [otglob -nocomplain $corpEtcPattern] {
  89.         set file [open $gdrPathFile]
  90.         set contents [read $file]
  91.         set description ""
  92.         regexp {Description:([ -z]*)} $contents dummy description
  93.         set info "corporate"
  94.         lappend info [string trim $description]
  95.         set gdrFile [file tail $gdrPathFile]
  96.         [$this gdrToInfo] set $gdrFile $info
  97.         close $file
  98.     }
  99.     }
  100.  
  101.     if { [$this _level] == "user" } {
  102.     set icaseDir [location [M4Login::getHomeDir] "icase"]
  103.     set icasePattern [path_name concat $icaseDir "*.gdr"]
  104.  
  105.     foreach gdrPathFile [otglob -nocomplain $icasePattern] {
  106.         set gdrFile [file tail $gdrPathFile]
  107.         set file [open $gdrPathFile]
  108.         set contents [read $file]
  109.         set description ""
  110.         regexp {Description:([ -z]*)} $contents dummy description
  111.         set info "user"
  112.         lappend info [string trim $description]
  113.         [$this gdrToInfo] set $gdrFile $info
  114.         close $file
  115.     }
  116.     }
  117.  
  118.     # determine available gdr files at current level if not corporate
  119.     if { $type != "corporate" } {
  120.     foreach gdrFile [$object findCustomFileNames gdr] {
  121.         regsub {\.gdr} $gdrFile "" gdrName
  122.         set info $type
  123.         set customFile [$object findCustomFileVersion $gdrName gdr]
  124.         lappend info [$customFile getPropertyValue freeText]
  125.         [$this gdrToInfo] set "$gdrFile.gdr" $info
  126.     }
  127.     }
  128.  
  129.     # read file if at final level
  130.     set currentType [string tolower [[ClientContext::global] currentLevel]]
  131.  
  132.     # config level is 'configuration' in customization editors and
  133.     # 'config' in ClientContext... 
  134.     if { [string range $type 0 5] != [string range $currentType 0 5] } {
  135.         return
  136.     }
  137.  
  138.     set specsFileName [$this _curName]
  139.     set specsFileType [$this _curType]
  140.  
  141.     if { [$this _level] == "user" } {
  142.     set file [path_name concat [path_name concat ~ icase] \
  143.                 $specsFileName.$specsFileType]
  144.         if [file exists $file] {
  145.         foreach specLine [readConfigurationFile $file] {
  146.         $this processConfigLine $specLine
  147.         }
  148.     }
  149.     } else {
  150.     foreach specLine [$this readConfig $object $specsFileName $specsFileType] {
  151.         $this processConfigLine $specLine
  152.     }
  153.     }
  154. }
  155.  
  156.  
  157. # Process given line of the copyspec file:
  158. # create editor object and adjust typeToGdr.
  159. #
  160. method CopyEditorArea::processConfigLine {this line} {
  161.     set type [lindex $line 0]
  162.     if { $type == "*" } {
  163.     set type "default"
  164.     }
  165.     set gdrName [path_name base [lindex $line 1]]
  166.     [$this typeToGdr] set $type $gdrName
  167.     set level [$this getGdrLevel $gdrName]
  168.     set description [$this getGdrDescription $gdrName]
  169.     $this createObject [list \
  170.         type $type \
  171.         level $level \
  172.         gdrName $gdrName \
  173.         description $description] $type
  174. }
  175.  
  176.  
  177. # Create a new editor object for 
  178. # a copy specification.
  179. #
  180. method CopyEditorArea::createObject {this objSpec level} {
  181.     global classCount
  182.     set object [CopyDefObject new $this.Object$classCount $objSpec]
  183.     incr classCount
  184.  
  185.     $this adjustCreatedObject $object $level
  186.  
  187.     # update the object-details in the view
  188.     $object updateView
  189.  
  190.     return $object
  191. }
  192.  
  193. method CopyEditorArea::newObject {this type {edit 0}} {
  194.     set gdrName "default"
  195.     set level [$this getGdrLevel $gdrName]
  196.     set description [$this getGdrDescription $gdrName]
  197.     [$this typeToGdr] set $type $gdrName
  198.     set object [$this createObject [list \
  199.         type $type \
  200.         level $level \
  201.         gdrName $gdrName \
  202.         description $description] $type]
  203.  
  204.     $this sortArea
  205.  
  206.     if $edit {
  207.     $object open
  208.     }
  209. }
  210.  
  211.  
  212. # Get description of the specified gdr file from gdrToInfo.
  213. #
  214. method CopyEditorArea::getGdrDescription {this gdrName} {
  215.     set info [[$this gdrToInfo] set "$gdrName.gdr"]
  216.     return [lindex $info 1]
  217. }
  218.  
  219.  
  220. # Get level of specified gdr file from gdrToInfo.
  221. #
  222. method CopyEditorArea::getGdrLevel {this gdrName} {
  223.     set info [[$this gdrToInfo] set "$gdrName.gdr"]
  224.     return [lindex $info 0]
  225. }
  226.  
  227.  
  228. # Sort area and adjust editbale attributes of
  229. # objects in the editor area.
  230. #
  231. method CopyEditorArea::sortArea {this} {
  232.     $this sort -column $this.typeHeader
  233.     # also readjust editable attributes
  234.     if { ![$this isReadOnly]} {
  235.     foreach obj [$this objectSet] {
  236.         $obj editable 1
  237.     }
  238.     }
  239. }
  240.  
  241. # Do not delete this line -- regeneration end marker
  242.  
  243.