From: <ro...@us...> - 2012-10-26 19:53:33
|
Revision: 2855 http://nscldaq.svn.sourceforge.net/nscldaq/?rev=2855&view=rev Author: ron-fox Date: 2012-10-26 19:53:26 +0000 (Fri, 26 Oct 2012) Log Message: ----------- - Factorization of outputStats in terms of widgetPair - add listIds to sorted pair. Modified Paths: -------------- branches/nscldaq-10.2-development/daq/eventbuilder/outputStatistics.tcl branches/nscldaq-10.2-development/daq/eventbuilder/utility.tcl Modified: branches/nscldaq-10.2-development/daq/eventbuilder/outputStatistics.tcl =================================================================== --- branches/nscldaq-10.2-development/daq/eventbuilder/outputStatistics.tcl 2012-10-26 19:21:25 UTC (rev 2854) +++ branches/nscldaq-10.2-development/daq/eventbuilder/outputStatistics.tcl 2012-10-26 19:53:26 UTC (rev 2855) @@ -18,6 +18,15 @@ # @author Ron Fox # @brief Event builder output statistics. # + +# If this location is not in the path, add it. + +set here [file dirname [info script]] +if {[lsearch -exact $auto_path $here] == -1} { + lappend auto_path $here +} + + # This file provides the widgets needed to create a set of output statistics. # the ouptut statistics is a single widget named: # @@ -26,6 +35,8 @@ package require Tk package require snit +package require EVBUtilities + package provide EVB::ouputStatistics 1.0 ## @@ -126,7 +137,15 @@ # +-----------------------------------+ # \endveratim snit::widget ::EVB::outputStatistics { + component innerhull + component sourcestats + option -totalfragments -default 0 -configuremethod configTotals + + delegate method addSource to sourcestats as setItem + delegate method clear to sourcestats + delegate method reinit to sourcestats + delegate method listSources to sourcestats as idlist delegate option * to innerhull delegate method * to innerhull @@ -146,10 +165,10 @@ set top [ttk::frame $innerhull.top -relief groove -borderwidth 3] ttk::label $top.totall -text {Total Fragments} ttk::label $top.total -textvariable ${selfns}::options(-totalfragments) + + install sourcestats using EVB::utility::sortedPair $innerhull.bottom \ + -title {Source stats} -lefttitle {src id} -righttitle Fragments - set bottom [ttk::frame $innerhull.bottom] - ttk::label $bottom.sourcel -text {Source Id} - ttk::label $bottom.countl -text {Fragments} # Layout the widgets. @@ -157,169 +176,16 @@ grid $top.totall $top.total grid $top -sticky new - grid $bottom.sourcel $bottom.countl - grid $bottom -sticky nswe + grid $sourcestats -sticky nswe - pack $innerhull -expand 1 -fill both + grid $innerhull -sticky nsew # Process the options $self configurelist $args } - #------------------------------------------------------------------------ - # Public methods. - # - - ## - # addSource - # - # Add a new data source to the widget. The data sources are maintained - # ordered by source id low to high from top to bottom. - # If necessary sources are pushed down to make room for the new source. - # - # @param sourceId - Id of new source to add. - # - # @note it is an error to add a duplicate source. - # - method addSource id { - if {$id in $sourceIds} { - error "$id is already managed" - } - # figure out where this goes.. unmanage the old widgets. - # Create the new ones, - # add the id to the list and remanage it and all those below it. - # - - ttk::label $innerhull.bottom.label$id -text $id - ttk::label $innerhull.bottom.counter$id -text 0 -justify right -anchor e - set newIndex [$self _getInsertIndex $id]; # Determine where this goes. - set sourceIds [linsert $sourceIds $newIndex $id] - - $self _unManage $newIndex - $self _manage $newIndex - } - ## - # removeSource - # - # Removes an event source from the widget. It is an error to remove a source - # that is not in the widget. - # - # @param id - The source id of the data source being removed. - # - method removeSource id { - set removeIndex [lsearch -exact $sourceIds $id] - if {$removeIndex == -1} { - error "$id is not managed" - } - - # - # Unmanage the widgets and all those below, - # remove from list, destroy the widgets and remanage the remaining widget: - - $self _unManage $removeIndex - - destroy $innerhull.bottom.label$id - destroy $innerhull.bottom.counter$id - - set sourceIds [lreplace $sourceIds $removeIndex $removeIndex] - $self _manage $removeIndex - - } - ## - # setSourceFragments - # - # Sets the number of fragments in a source. - # - it is an error for the source id to not be in the managed list. - # - it is an error for the counter not to be an integer. - # - # @param id - Source id - # @param counts - Number of fragments - # - method setSourceFragments {id counts} { - if {$id ni $sourceIds} { - error "$id is not managed" - } - if {![string is integer -strict $counts]} { - error "$counts must be an integer" - } - - $innerhull.bottom.counter$id configure -text [format "% 6d" $counts] - } - ## - # clear - # Clears the counters in all of the source elements. - # - method clear {} { - foreach id $sourceIds { - $self setSourceFragments $id 0 - } - } - ## - # Return the list of current source Ids: - # - # @return list - sourceIds - # - method listSources {} { - return $sourceIds - } - - #---------------------------------------------------------------- - # Private methods. - - ## - # _getInsertIndex - # - # Return the correct insertion index in sourceIds for a new - # id such that this list can remain ordered. - # - # @param id - new id to add. - # - method _getInsertIndex sourceId { - - # this is really brute force with the idea that - # there won't be a huge number of sourcdes: - - set newSources [lsort -integer [concat $sourceIds $sourceId]] - return [lsearch -exact $newSources $sourceId] - } - ## - # _unManage - # - # grid all widgets created for elements in the sourceIds list - # at and past index - # - # @param index - index of the first iem in sourceIds to unmanage. - # - # - method _unManage index { - foreach id [lrange $sourceIds $index end] { - grid $innerhull.bottom.label$id - grid $innerhull.bottom.counter$id - } - } - ## - # _manage - # - # Grid all widget in the list of source ids at and after index - # in that list. The -row to use is just index+1. Usually - # this is done after _unManage has removed these widgets and the - # list has been adjusted. - # - # @param index - which item to start re-gridding from - method _manage index { - set row [expr {$index + 1}] - - foreach id [lrange $sourceIds $index end] { - grid $innerhull.bottom.label$id -row $row -column 0 - grid $innerhull.bottom.counter$id -row $row -column 1 -sticky w - - incr row - } - } - - } #---------------------------------------------------------------------------- Modified: branches/nscldaq-10.2-development/daq/eventbuilder/utility.tcl =================================================================== --- branches/nscldaq-10.2-development/daq/eventbuilder/utility.tcl 2012-10-26 19:21:25 UTC (rev 2854) +++ branches/nscldaq-10.2-development/daq/eventbuilder/utility.tcl 2012-10-26 19:53:26 UTC (rev 2855) @@ -60,6 +60,7 @@ # created. # - clear value=0 All of the values are set to the new value. # - reinit All key/value pairs are deleted. +# - idlist Return all the ids. # # LAYOUT # @@ -189,6 +190,19 @@ } set values [list] } + ## + # idlist + # Return a (possibly empty) list of the ids currently known + # + # @return list - of ids + # + method idlist {} { + set ids [list] + foreach item $values { + lappend ids [lindex $item 0] + } + return $ids + } #---------------------------------------------- # Private methods. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |