From: <ro...@us...> - 2013-11-25 15:29:16
|
Revision: 3246 http://sourceforge.net/p/nscldaq/code/3246 Author: ron-fox Date: 2013-11-25 15:29:13 +0000 (Mon, 25 Nov 2013) Log Message: ----------- * Add stopAll to the data source manager with tests. * Add the full run control megawidget to the ui.tcl file. Modified Paths: -------------- branches/nscldaq-11.0-development/daq/readoutgui/DataSourceManager.tcl branches/nscldaq-11.0-development/daq/readoutgui/dsourcemgr.test branches/nscldaq-11.0-development/daq/readoutgui/ui.tcl Modified: branches/nscldaq-11.0-development/daq/readoutgui/DataSourceManager.tcl =================================================================== --- branches/nscldaq-11.0-development/daq/readoutgui/DataSourceManager.tcl 2013-11-25 13:42:01 UTC (rev 3245) +++ branches/nscldaq-11.0-development/daq/readoutgui/DataSourceManager.tcl 2013-11-25 15:29:13 UTC (rev 3246) @@ -32,12 +32,24 @@ # of all of the sources it is managing. # # TYPEMETHODS: -# enumerate - list the set of data sources. These are the names of packages +# enumerateProviders - list the set of data sources. These are the names of packages # that end in _Provider with the _Provider hacked off. # # METHODS: # load - Load a data source provider into an instance of a data source # manager. +# parameters - Get the parameterization of a data source provider. +# capabilities - Get the capabilities of a data source provider. +# systemCapabilities - Get the capabilities of the system. This is the +# intersection of all capabilities of starte data sources. +# addSource - Start a data source. +# check - Check the liveness of all data sources. +# stop - Stop a single data source. +# stopAll - Stop all data sources. +# begin - Start a run in all data sources. +# end - end the run in all data sources. +# pause - Pause the run in all data sources. +# resume - Resume the run in all data sources. snit::type DataSourceManager { #--------------------------------------------------------------------------- @@ -270,6 +282,17 @@ array unset dataSources $id } ## + # stopAll + # Stop all data sources in the order in which they were started. + # + method stopAll {} { + if {![catch {$self _listOrderedSources ignore} sources]} { + foreach id $sources { + $self stop $id + } + } + } + ## # Begin runs in all of the active data sources # # @param runNumber - Number of the run. Modified: branches/nscldaq-11.0-development/daq/readoutgui/dsourcemgr.test =================================================================== --- branches/nscldaq-11.0-development/daq/readoutgui/dsourcemgr.test 2013-11-25 13:42:01 UTC (rev 3245) +++ branches/nscldaq-11.0-development/daq/readoutgui/dsourcemgr.test 2013-11-25 15:29:13 UTC (rev 3246) @@ -367,6 +367,24 @@ } \ -result [list] +tcltest::test stopall {Stop all data sources uh...stops them all} \ +-setup { + set manager [DataSourceManager %AUTO%] + $manager load S800 + startServer + set sid [$manager addSource \ + S800 [dict create host localhost port $::s800test::port]] +} \ +-cleanup { + $manager destroy + stopServer + set ::S800::state halted +} \ +-body { + $manager stopAll + $manager sources +} \ +-result [list] # Tests for starting a run. Modified: branches/nscldaq-11.0-development/daq/readoutgui/ui.tcl =================================================================== --- branches/nscldaq-11.0-development/daq/readoutgui/ui.tcl 2013-11-25 13:42:01 UTC (rev 3245) +++ branches/nscldaq-11.0-development/daq/readoutgui/ui.tcl 2013-11-25 15:29:13 UTC (rev 3246) @@ -2126,18 +2126,138 @@ # * Load - Loads a script by doing a source at the global level. # * Add Library - Adds a library directory to the auto_path. # * <separator> + # * Log - Select a log file for the output widget. + # * Log Disable - Turn off logging in the output wigdget. + # * <separator> # * Exit - Ends any active run and exits the application. # method _populateFileMenu {} { $menubar addMenu File - $menubar addCommand File Load [mymethod _sourceFile] - $menubar addCommand File {Add Library} [mymethod _extendAutoPath] + $menubar addCommand File Load... [mymethod _sourceFile] + $menubar addCommand File {Add Library...} [mymethod _extendAutoPath] $menubar addSeparator File - $menubar addCommand File {Exit} [mymethod _Exit] + $menubar addCommand File Log... [mymethod _chooseLogfile] + $menubar addCommand File {Disable Log} [mymethod _stopLogging] + $menubar addSeparator File + $menubar addCommand File {Exit...} [mymethod _Exit] } + #-------------------------------------------------------------------------- + # Private methods: + # - method _sourceFile {} {} - method _extendAutoPath {} {} - method _Exit {} {} + ## + # _stopRun + # Ensure the run state machine is not in an non halted state + # If the state is Active or Paused, the machine is transitioned to + # Halted. + # + method _stopRun {} { + set sm [RunstateMachineSingleton %AUTO%] + if {[$sm getState] in [list Active Paused]} { + $sm transition Halted + } + $sm destroy + } + ## + # Stop all data sources. + # + method _stopDataSources {} {} + + #-------------------------------------------------------------------------- + # Menu bar handlers: + # + + ## + # _sourceFile + # Sources a file at the top level. This can be used to add plugins + # to the ReadoutGUI. Since this is a menubar function; + # the file sourced is gottenvia tk_getOpenFile. + # * .tcl - is the normal default filetype and the default extension + # * .tk - is also an option for extension filtering. + # * .* - is an option for extension filtering. + # + method _sourceFile {} { + set scriptPath [tk_getOpenFile -defaultextension .tcl -parent $win \ + -title {Choose script file} \ + -filetypes [list \ + [list {Tcl Scripts} {.tcl}] \ + [list {Tk Scripts} {.tk"}] \ + [list {All Files} *] \ + ]] + # + # The dialog returns "" if cancel is clicked + # + if {$scriptPath ne ""} { + uplevel #0 source $scriptPath + } + } + ## + # _extendAutoPath + # Adds another directory to the ::auto_path list. The directory + # is prompted fro using tcl_ChooseDirectory + # + method _extendAutoPath {} { + set packageDirectory [tk_chooseDirectory -mustexist 1 -parent $win \ + -title {Choose Package directory}] + if {$packageDirectory ne ""} { + lappend ::auto_path $packageDirectory + } + } + ## + # _chooseLogfile + # + # The output widget has the capability of logging all output to a file + # this menu item prompts for the log file name and initiate logging. + # Logging will continue until the _stopLogging menu item is invoked or + # alternatively some external code stops logging. If the user + # requests a different log file, logging will continue in that file. + # + method _chooseLogfile {} { + set logFilename [tk_getSaveFile -defaultextension log -parent $win \ + -title {Choose log file} \ + -filetypes [list \ + [list {Log files} .log] \ + [list {Text files} .txt] \ + [list {All Files} *] \ + ]] + if {$logFilename ne ""} { + $output open $logFilename + } + } + ## + # _stopLogging + # Close the output window logfile if any is active. + # At this point this is done just by catching a call to + # $output close. + # TODO: The menu item should be disabled when logging is off + # and enabled otherwise. + # + method _stopLogging {} { + catch {$output close} + } + ## + # _Exit + # Prompt for confirmation and exit. + # If exit is confirmed then + # * If the run state is one of the active ones (Active, Paused) the run + # state machine is asked to stop the run. + # * Data sources are asked to exit. + # * The state is then transitioned to NotReady to ensure that all + # state transition handlers run + # * The exit command is performed with a 0 (normal) exit code. + method _Exit {} { + set confirm [tk_messageBox -default no -type yesno -parent $win \ + -title {Really Exit?} -icon question \ + -message {Are you sure you want to exit?} \ + ] + if {$confirm eq "yes"} { + $self _stopRun + $self _stopDataSources + set sm [RunstateMachineSingleton %AUTO] + $sm transition NotReady + $sm destroy; # though there's not much point to this: + exit 0; # since we're exiting now. + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |