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

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c)    Cayenne Software Inc. 1997
  4. #
  5. #    File:        @(#)exportdiag.tcl    /main/titanic/2
  6. #    Author:        hale, disc
  7. #    Description:    Class to export diagrams to tcl
  8. #
  9. #---------------------------------------------------------------------------
  10. # SccsId = @(#)exportdiag.tcl    /main/titanic/2 5 Nov 1997 Copyright 1997 Cayenne Software Inc.
  11.  
  12. if {![lempty [info commands ExportDiagram2TclDialog]]} {
  13.     return
  14. }
  15.  
  16. require platform.tcl
  17.  
  18. Class ExportDiagram2TclDialog : {TemplateDialog} {
  19.     constructor
  20.     method handleOkPressed
  21.     method handleCancelPressed
  22.     method handleHelpPressed
  23.     method popUp
  24.     method doExport
  25.     method glob
  26.  
  27.     method grabFileName
  28.     method startFileChooser
  29.  
  30.     attribute fileVersions
  31.     attribute fileName
  32.     attribute cursorIndex
  33.     attribute fileType
  34.     attribute exportName
  35.     attribute helpWin
  36. }
  37.  
  38. constructor ExportDiagram2TclDialog {class this name} {
  39.     set this [TemplateDialog::constructor $class $this $name]
  40.  
  41.     $this fileName [string trimright [path_name concat [M4Login::getHomeDir] .] .]
  42.     $this fileType "tcl"
  43.     $this helpWin .main.exportdiag2tclHelp
  44.  
  45.     $this config -title        "Export" \
  46.          -okPressed    "%this handleOkPressed" \
  47.          -helpPressed    "%this handleHelpPressed" \
  48.          -cancelPressed    "%this handleCancelPressed" \
  49.          -modal        1 \
  50.          -autoPopDown    0
  51.  
  52.     interface DlgColumn $this.c {
  53.     NamedGroup n0 {
  54.         label "Diagrams to be Exported"
  55.         DlgColumn c0 {
  56.         Label diagramName {
  57.         }
  58.         }
  59.     }
  60.  
  61.     Label white1 {
  62.     }
  63.  
  64.     NamedGroup n1 {
  65.         label "Export File"
  66.         DlgColumn c1 {
  67.         SingleLineText fileName {
  68.             columnCount 40
  69.         }
  70.         CheckButton addFileType {
  71.             label "Type defaults to `tcl'"
  72.             state 1
  73.         }
  74.         DlgRow fileRow {
  75.             PushButton grabFileName {
  76.             label "Default Name"
  77.             }
  78.             PushButton startFileChooser {
  79.             label "Browse..."
  80.             }
  81.         }
  82.         }
  83.     }
  84.  
  85.     Label white2 {
  86.     }
  87.  
  88.     NamedGroup n2 {
  89.         label "Export Options"
  90.         DlgColumn c2 {
  91.         CheckButton appendToFile {
  92.             label "Append output to export file"
  93.             state 0
  94.         }
  95.         CheckButton globalView {
  96.             label "Global View (properties are exported at most once)"
  97.             state 0
  98.         }
  99.         CheckButton implicitExport {
  100.             label "Implicit Export (members of CD classes are exported)"
  101.             state 0
  102.         }
  103.         DlgRow levelRow {
  104.             spaceType NONE
  105.             Label levelStart {
  106.             text "  Omit levelpath from:"
  107.             }
  108.             OptionMenu defaultLevel {
  109.             entrySet {System Phase Configuration Project N/A}
  110.             selected System
  111.             }
  112.         }
  113.         }
  114.     }
  115.     }
  116.  
  117.  if 0 {
  118.     if {!$win95} {
  119.     foreach item {n0 n1 n2} {
  120.         $this.c.$item font "helvetica-bold-14"
  121.     }
  122.     foreach item {n0.c0.diagramName n1.c1.fileName} {
  123.         $this.c.$item font "courier-normal-12"
  124.     }
  125.     $this.c.n1.c1.addFileType font "times-normal-12"
  126.     foreach item {appendToFile globalView implicitExport levelRow.levelStart} {
  127.         $this.c.n2.c2.$item font "times-normal-12"
  128.     }
  129.     } else {
  130.     foreach item {n0 n1 n2} {
  131.         $this.c.$item font "Arial-bold-14"
  132.     }
  133.     foreach item {n0.c0.diagramName n1.c1.fileName} {
  134.         $this.c.$item font "Courier New-normal-16"
  135.     }
  136.     $this.c.n1.c1.addFileType font "Times New Roman-normal-16"
  137.     foreach item {appendToFile globalView implicitExport levelRow.levelStart} {
  138.         $this.c.n2.c2.$item font "Times New Roman-normal-16"
  139.     }
  140.     }
  141.  }  # 0
  142.  
  143.     $this.c.n1.c1.fileRow.startFileChooser activated "$this startFileChooser"
  144.     $this.c.n1.c1.fileRow.grabFileName activated "$this grabFileName"
  145.  
  146.     return $this
  147. }
  148.  
  149. method ExportDiagram2TclDialog::handleOkPressed {this} {
  150.     $this fileName    [$this.c.n1.c1.fileName text]
  151.     $this cursorIndex [$this.c.n1.c1.fileName cursorIndex]
  152.  
  153.     if {[lempty [path_name base [$this fileName]]]} {
  154.     set box .main.ExportDiagram2TclDialog::checkFileGiven
  155.     if {![isCommand $box]} {
  156.         ErrorDialog new $box \
  157.         -title        "Error" \
  158.         -message    "No export file specified."
  159.         $box delHelpButton
  160.     }
  161.     $box popUp
  162.     return
  163.     }
  164.  
  165.     set toFile [$this glob [$this fileName]]
  166.     if {[$this.c.n1.c1.addFileType state] && [path_name type $toFile] == ""} {
  167.     regsub {\.[.]*$} $toFile {} toFile
  168.     append toFile ".[$this fileType]"
  169.     }
  170.     $this exportName $toFile
  171.  
  172.     $this doExport
  173. }
  174.  
  175.  
  176. method ExportDiagram2TclDialog::handleCancelPressed {this} {
  177.     if {[isCommand [$this helpWin]]} {
  178.     [$this helpWin] popDown
  179.     [$this helpWin] delete
  180.     }
  181. }
  182.  
  183.  
  184. method ExportDiagram2TclDialog::handleHelpPressed {this} {
  185.     set win [$this helpWin]
  186.     if {![isCommand $win]} {
  187.     TemplateDialog new $win
  188.     $win title "Help on Export"
  189.     $win delCancelButton
  190.     $win delHelpButton
  191.  
  192.     interface DlgColumn $win.c {
  193.         MultiLineText help {
  194.         editable    0
  195.         columnCount    62
  196.         rowCount    25
  197.         }
  198.     }
  199.  
  200.     set file [m4_path_name etc exporthelp.txt]
  201.     if {$win95} {
  202.         if {[catch {set fd [open $file r]} reason]} {
  203.         wmtkerror $reason
  204.         return
  205.         }
  206.         $win.c.help text [read $fd]
  207.         close $fd
  208.         # $win.c.help font "Courier New-normal-16"
  209.     } else {
  210.         $win.c.help readFile $file
  211.     }
  212.     }
  213.     $win popUp
  214. }
  215.  
  216.  
  217. method ExportDiagram2TclDialog::popUp {this fileVersions} {
  218.     $this fileVersions $fileVersions
  219.  
  220.     set nrFiles [llength $fileVersions]
  221.     set tail ""
  222.     if {$nrFiles > 1} {
  223.     set tail s
  224.     }
  225.     $this.c.n0 label "Diagram$tail to be Exported"
  226.  
  227.     set diags ""
  228.     set pro ""
  229.     foreach fileV $fileVersions {
  230.     set diags "${diags}${pro}[[$fileV file] qualifiedName].[[$fileV file] type]"
  231.     if {$nrFiles > 1 && $pro != ""} {
  232.         break
  233.     }
  234.     set pro ", "
  235.     }
  236.     if {$nrFiles > 2} {
  237.     set diags "$diags, ..."
  238.     }
  239.     $this.c.n0.c0.diagramName text $diags
  240.  
  241.     $this.c.n1.c1.fileName text [$this fileName]
  242.     $this cursorIndex [string length [$this fileName]]
  243.     $this.c.n1.c1.fileName cursorIndex [$this cursorIndex]
  244.  
  245.     return [$this TemplateDialog::popUp]
  246. }
  247.  
  248.  
  249. method ExportDiagram2TclDialog::doExport {this {doCheck 1}} {
  250.     # handle file name on MS Windows platform
  251.     set fileName [list [$this exportName]]
  252.  
  253.     set implicit [$this.c.n2.c2.implicitExport state]
  254.     set global   [$this.c.n2.c2.globalView state]
  255.     set defLevel [$this.c.n2.c2.levelRow.defaultLevel selected]
  256.     set append   [$this.c.n2.c2.appendToFile state]
  257.     set args     {}
  258.  
  259.     if {!$implicit} {
  260.     lappend args "-e"
  261.     }
  262.     if {$global} {
  263.     lappend args "-g"
  264.     }
  265.     if {$defLevel != "N/A"} {
  266.     switch $defLevel {
  267.         Project        {set level proj}
  268.         Configuration    {set level conf}
  269.         Phase        {set level phase}
  270.         default        {set level system}
  271.     }
  272.     lappend args "-d$level"
  273.     }
  274.     if {$append} {
  275.     set outArg "$fileName a"
  276.     } else {
  277.     set outArg "$fileName w"
  278.     }
  279.  
  280.     if {$doCheck && [file exists [join $fileName]] && !$append} {
  281.     set box .main.ExportDiagram2TclDialog::checkFileExists
  282.     if {![isCommand $box]} {
  283.         YesNoWarningDialog new $box \
  284.         -title        "Warning" \
  285.         -yesPressed    "$this doExport 0"
  286.         $box delHelpButton
  287.         $box delCancelButton
  288.     }
  289.     $box message "File `[join $fileName]' already exists. Overwrite?"
  290.     $box popUp
  291.     return
  292.     }
  293.  
  294.     set tmpFile [BasicFS::tmpFile]
  295.     if {[catch {set fd [open $tmpFile w]} reason]} {
  296.     wmtkerror $reason
  297.     return
  298.     }
  299.     puts $fd $args
  300.     puts $fd $outArg
  301.     foreach fileV [$this fileVersions] {
  302.     puts $fd [$fileV identity]
  303.     }
  304.     close $fd
  305.  
  306.     if {[isCommand [$this helpWin]]} {
  307.     [$this helpWin] popDown
  308.     [$this helpWin] delete
  309.     }
  310.     $this popDown
  311.  
  312.     set script "[m4_path_name bin otsh$EXE_EXT] \
  313.         -f [m4_path_name tcl exportetfe.tcl] \
  314.         -- $tmpFile"
  315.     .main startCommand mtool $script "" "Starting OTSh..." {0 0} 0
  316. }
  317.  
  318.  
  319. method ExportDiagram2TclDialog::glob {this d} {
  320.     return [path_name concat [file dirname $d] [file tail $d]]
  321. }
  322.  
  323.  
  324. method ExportDiagram2TclDialog::grabFileName {this} {
  325.     set curFileName [$this.c.n1.c1.fileName text]
  326.     set curPath [path_name directory $curFileName]
  327.  
  328.     if {[llength [$this fileVersions]] > 1} {
  329.     set systemVersion [[ClientContext::global] currentSystem]
  330.     set newFileName [path_name concat $curPath \
  331.         [[$systemVersion system] name]]
  332.     } else {
  333.     set fileVersion [lindex [$this fileVersions] 0]
  334.     set newFileName [path_name concat $curPath \
  335.         [[$fileVersion file] name]]
  336.     }
  337.  
  338.     $this.c.n1.c1.fileName text $newFileName
  339.     $this.c.n1.c1.fileName cursorIndex [string length $newFileName]
  340. }
  341.  
  342.  
  343. method ExportDiagram2TclDialog::startFileChooser {this} {
  344.     uplevel #0 {
  345.     require classmaker.tcl
  346.     }
  347.  
  348.     set box .main.ExportDiagram2TclDialog::fileChooser
  349.     if {![isCommand $box]} {
  350.     set filter "*.tcl"
  351.     if {$win95} {
  352.         set filter "TCL Files (*.tcl)|*.tcl|All Files (*.*)|*|"
  353.     }
  354.     ClassMaker::extend FileChooser MyClass myAttr
  355.     MyClass new $box \
  356.         -myAttr        $this \
  357.         -selectionPolicy    SINGLE \
  358.         -title        "Export" \
  359.         -filter        $filter \
  360.         -cancelPressed    {%this delete} \
  361.         -okPressed        {
  362.         set newFileName \
  363.             [lindex [.main.ExportDiagram2TclDialog::fileChooser \
  364.             selectedSet] 0]
  365.         [%this myAttr].c.n1.c1.fileName text $newFileName
  366.         [%this myAttr].c.n1.c1.fileName cursorIndex \
  367.             [string length $newFileName]
  368.         }
  369.     $box delHelpButton
  370.     }
  371.     $box directory [path_name directory [$this.c.n1.c1.fileName text]]
  372.     $box popUp
  373. }
  374.