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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)browservsc.tcl    /main/hindenburg/5
  6. #      Author:         <generated>
  7. #      Description:    VCM integration file
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)browservsc.tcl    /main/hindenburg/5   30 May 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require platform.tcl
  13. # End user added include file section
  14.  
  15. require_module_file "vscmdhandl.tcl" vcm
  16.  
  17. # Command handler for commands executed in the browser.
  18.  
  19. Class BrowserVSCmdHandler : {VSCmdHandler} {
  20.     constructor
  21.     method destructor
  22.     method suspendAll
  23.     method suspendOutput
  24.     method execute
  25.     method executeSilent
  26.     method executeExternal
  27.     method showOutput
  28.     method error
  29.  
  30.     # Indicates whether browser output must be suspended.
  31.     #
  32.     attribute outputSuspended
  33.  
  34.     # Indicates whether error output must be suspended.
  35.     #
  36.     attribute errorsSuspended
  37.  
  38.     # Commands with unprocessed output.
  39.     #
  40.     attribute commands
  41. }
  42.  
  43. constructor BrowserVSCmdHandler {class this name} {
  44.     set this [VSCmdHandler::constructor $class $this $name]
  45.     $this outputSuspended 0
  46.     $this errorsSuspended 0
  47.     # Start constructor user section
  48.     # End constructor user section
  49.     return $this
  50. }
  51.  
  52. method BrowserVSCmdHandler::destructor {this} {
  53.     # Start destructor user section
  54.     # End destructor user section
  55.     $this VSCmdHandler::destructor
  56. }
  57.  
  58.  
  59. # Suspend all output from command execution.
  60. #
  61. method BrowserVSCmdHandler::suspendAll {this} {
  62.     $this outputSuspended 1
  63.     $this errorsSuspended 1
  64. }
  65.  
  66.  
  67. # Suspend command output except: one line output that can be put in the message area,
  68. # error output.
  69. #
  70. method BrowserVSCmdHandler::suspendOutput {this} {
  71.     $this outputSuspended 1
  72. }
  73.  
  74.  
  75. # Execute the command and classify the output. 
  76. # Show output depending on the outputSuspended and errorSuspended variables.
  77. # If they are not set:
  78. # If there is an error: show all output in error dialog.
  79. # If not: Show last line of normal output in message area.
  80. # Show warnings and additional info in warning dialog.
  81. # Show other info in info dialog.
  82. # If there is any suspended output add command to list.
  83. #
  84. method BrowserVSCmdHandler::execute {this command} {
  85.     $command execute 1
  86.  
  87.     if { [$command errors] != "" } {
  88.     if [$this errorsSuspended] {
  89.         set commandList [$this commands]
  90.         lappend commandList $command
  91.         $this commands $commandList
  92.         return 0
  93.     }
  94.     $this error "[$command description]: [$command errors]"
  95.     return 0
  96.     }
  97.  
  98.     if { [$command output] != "" } {
  99.     set outputLines [split [$command output] "\n"]
  100.     set lastLineIndex [expr [llength $outputLines] - 1]
  101.     set lastLine [lindex $outputLines $lastLineIndex]
  102.     set remainingLines [lrange $outputLines 0 [expr $lastLineIndex -1]]
  103.     set remainingOutput [join $remainingLines "\n"]
  104.     wmtkmessage "$lastLine"
  105.     } else {
  106.     set remainingLines ""
  107.     set remainingOutput ""
  108.     }
  109.  
  110.     if [$this outputSuspended] {
  111.     if { ([$command warnings] != "") || ( $remainingLines != "" ) } {
  112.         $command output $remainingOutput
  113.         set commandList [$this commands]
  114.         lappend commandList $command
  115.         $this commands $commandList
  116.     }
  117.     return 1
  118.     }
  119.  
  120.     wmtkmessage ""
  121.  
  122.     if { [$command warnings] != "" } {
  123.     wmtkwarning "[$command warnings]\n$remainingOutput"
  124.     return 1
  125.     }
  126.     
  127.     if { $remainingLines != "" } {
  128.     # if there already is an info box add to it
  129.     if [isCommand .main.wmtkinfo] {
  130.         set remainingOutput "[.main.wmtkinfo message]\n$remainingOutput"
  131.         .main.wmtkinfo popDown
  132.         .main.wmtkinfo delete
  133.     }
  134.     wmtkinfo "$remainingOutput"
  135.     }
  136.     return 1
  137. }
  138.  
  139.  
  140. # Execute the command, only handles errors if they occur.
  141. #
  142. method BrowserVSCmdHandler::executeSilent {this command} {
  143.     $command execute 0
  144.     if { [$command errors] != "" } {
  145.     $this error "[$command description]: [$command errors]"
  146.     return 0
  147.     }
  148.     return 1
  149. }
  150.  
  151.  
  152. # Eexcute command in given tool:
  153. # mtool, xtool or external.
  154. #
  155. method BrowserVSCmdHandler::executeExternal {this command tool {endCommand ""} {dir ""}} {
  156.     if { $tool == "external" } {
  157.     system "[$command command] &"
  158.     return
  159.     }
  160.  
  161.     if { $win95 && ($dir != "") } {
  162.     .main startCommand $tool "cmd.exe /c cd $dir && [$command command]" "$endCommand" "" {0 0} 0
  163.     } else {
  164.     .main startCommand $tool "[$command command]" "$endCommand" "" {0 0} 0 "[quoteIf $dir]"
  165.     }
  166. }
  167.  
  168.  
  169. # Process all supended command output and remove commands from list.
  170. #
  171. method BrowserVSCmdHandler::showOutput {this} {
  172.     $this outputSuspended 0
  173.     set warningsFound 0
  174.     set outputList {}
  175.  
  176.     foreach command [$this commands] {
  177.     lappend outputList [$command output]
  178.     if { [$command warnings] != "" } {
  179.         lappend outputList [$command warnings]
  180.         set warningsFound 1
  181.     }
  182.     }
  183.  
  184.     $this commands ""
  185.  
  186.     set outputLines [join $outputList "\n"]
  187.     if $warningsFound {
  188.     wmtkwarning "$outputLines"
  189.     return
  190.     }
  191.  
  192.     # no output: show nothing
  193.     if { [string trim $outputLines] == "" } {
  194.     return
  195.     }
  196.     wmtkinfo "$outputLines"
  197. }
  198.  
  199. method BrowserVSCmdHandler::error {this message} {
  200.     wmtkerror "$message"
  201.     if { !$win95 } {
  202.     .main.error delHelpButton
  203.     }
  204. }
  205.  
  206. # Do not delete this line -- regeneration end marker
  207.  
  208.