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

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