Changeset 440 for sans/utils


Ignore:
Timestamp:
Nov 11, 2008 10:30:26 AM (14 years ago)
Author:
ajj
Message:

Updates to bt5view to add actual functionality

Location:
sans/utils/bt5/bt5view
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • sans/utils/bt5/bt5view/bt5view

    r163 r440  
    99from matplotlib.axes import Subplot 
    1010from matplotlib.backends.backend_gtk import FigureCanvasGTK, NavigationToolbar 
     11 
     12import usans 
    1113 
    1214 
     
    5052                self.filelist = gtk.ListStore(str) 
    5153                self.filelistview.set_model(self.filelist) 
     54                self.filelist.set_sort_column_id(0,gtk.SORT_ASCENDING) 
    5255 
    5356                # Set up plot group list 
    5457                self.plotlistview = self.wTree.get_widget("tv_plotlist") 
    55                 self.AddPlotListColumn("Dataset",0) 
    56  
    57                 self.plotlist = gtk.TreeStore(str) 
     58                #self.AddPlotListColumn("Dataset",0) 
     59                #self.AddPlotListColumn("Plot",1) 
     60                self.cellrendertoggle = gtk.CellRendererToggle() 
     61                self.cellrendertoggle.set_property('activatable', True) 
     62                self.AddPlotListColumns("Dataset") 
     63 
     64                #Create TreeStore model - Name of dataset, is it plotted, loaded data for children, plottable data for parent 
     65                self.plotlist = gtk.TreeStore(str,'gboolean',object,object) 
    5866                self.plotlistview.set_model(self.plotlist) 
     67                self.plotlist.set_sort_column_id(0,gtk.SORT_ASCENDING) 
    5968         
    6069                #fill the file list 
     
    8594                self.plotlistview.connect("drag_data_received",self.dnd_data_received) 
    8695                 
     96                #Handle toggling of checkboxes in plot list 
     97                self.cellrendertoggle.connect("toggled", self.handle_toggled, (self.plotlistview.get_model(), 1)) 
     98         
    8799                 
    88100        def AddFileListColumn(self, title, columnId): 
     
    98110                return 
    99111                 
    100         def AddPlotListColumn(self, title, columnId): 
    101                 """This function adds a column to the list view. 
    102                 First it create the gtk.TreeViewColumn and then set 
    103                 some needed properties""" 
    104                                                  
     112        def AddPlotListColumns(self, title): 
    105113                column = gtk.TreeViewColumn(title, gtk.CellRendererText() 
    106                         , text=columnId) 
    107                 column.set_resizable(True)               
    108                 column.set_sort_column_id(columnId) 
     114                        , text=0) 
     115                #column.set_resizable(True)              
     116                column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) 
     117                column.set_fixed_width(230) 
     118                column.set_sort_column_id(0) 
     119                #column.set_min_width(200) 
    109120                self.plotlistview.append_column(column) 
    110                 return 
    111                  
     121 
     122                column = gtk.TreeViewColumn('',self.cellrendertoggle, active=1) 
     123                column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) 
     124                #column.set_min_width(20) 
     125                #column.set_max_width(20) 
     126                #column.set_fixed_width(20) 
     127                #column.set_resizable(False) 
     128                self.plotlistview.append_column(column) 
     129                return 
     130 
     131        def handle_toggled(self, cell, path, user_data): 
     132                model, column = user_data 
     133                model[path][column] = not model[path][column] 
     134 
     135                return 
     136         
    112137        def GetDirList(self): 
    113138                dirlist = os.listdir(os.getcwd()) 
     
    126151                model = treeview.get_model() 
    127152                data = selection.data 
     153                #Get USANS data from file 
     154                detdata = usans.getBT5DataFromFile(data) 
    128155                drop_info = treeview.get_dest_row_at_pos(x, y) 
    129156                if drop_info: 
     157                        #Other entries exist already 
    130158                        path, position = drop_info 
    131159                        iter = model.get_iter(path) 
    132160                        if model.iter_depth(iter) > 0: 
     161                                #Adding to exisiting dataset 
    133162                                parent = model.iter_parent(iter) 
    134163                                if position == gtk.TREE_VIEW_DROP_INTO_OR_AFTER or position == gtk.TREE_VIEW_DROP_AFTER: 
    135                                         model.insert_after(parent,iter,[data]) 
     164                                        titer = model.insert_after(parent,iter,[data,0,detdata,0]) 
    136165                                elif position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE or position == gtk.TREE_VIEW_DROP_BEFORE: 
    137                                         model.insert_before(parent,iter,[data]) 
     166                                        titer = model.insert_before(parent,iter,[data,0,detdata,0]) 
    138167                        else: 
     168                                #New top level entry 
    139169                                if position == gtk.TREE_VIEW_DROP_INTO_OR_AFTER or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE: 
    140                                         model.insert_after(iter, None, [data]) 
     170                                        titer = model.insert_after(iter, None, [data,0,detdata,0]) 
    141171                                else: 
    142                                         iter = model.append(None,[data]) 
    143                                         model.append(iter,[data]) 
     172                                #Not sure that this should ever get called.... 
     173                                        iter = model.append(None,[data,0,0,0]) 
     174                                        titer = model.append(iter,[data,0,detdata,0]) 
    144175                else: 
    145                         iter = model.append(None,[data]) 
    146                         model.append(iter,[data]) 
    147                 return 
    148                  
     176                        #First entry 
     177                        iter = model.append(None,[data[:5],0,0,0]) 
     178                        titer = model.append(iter,[data,0,detdata,0]) 
     179                 
     180                print titer 
     181                                         
     182                self.do_plot(model,titer, "total") 
     183 
     184                return 
     185         
     186        def do_plot(self, model, iter, type): 
     187                #Handle plotting - ignore type for the moment, only plot total counts 
     188                path = model.get_path(iter) 
     189                #Always passing a child, but let's check anyway  
     190                if model.iter_depth(iter) > 0: 
     191                        parent = model.iter_parent(iter)         
     192                        ppath = model.get_path(parent) 
     193                        #Check to see if parent is already plotted 
     194                        if (model[ppath][1]): 
     195                                print "Parent plotted"   
     196                                #If plotted, add new data to existing plotted dataset and set checkbox 
     197                                self.make_plottable_dataset(model, ppath, type) 
     198                                model[path][1] = 1 
     199                        else: 
     200                                print "Parent not plotted" 
     201                                if(model.iter_n_children(iter) > 1):  
     202                                        print "has siblings" 
     203                                        #If not plotted and there are siblings, add new data to dataset and set checkbox but do not plot 
     204                                        self.make_plottable_dataset(model, ppath, type) 
     205                                        model[path][1] = 1 
     206                                else: 
     207                                        #If parent not plotted and there are no siblings, create plottable dataset, plot and set checkbox 
     208                                        self.make_plottable_dataset(model, ppath, type) 
     209                                        print model[ppath][3] 
     210                                        self.axis.plot(model[ppath][3][0], model[ppath][3][1]) 
     211                                        self.figure.draw() 
     212                                        model[path][1] = 1 
     213 
     214 
     215                return 
     216 
     217        def make_plottable_dataset(self,model,path,type): 
     218                #Will use select here, but for now ignore type and just do total                 
     219                piter = model.get_iter(path) 
     220                xdata = [] 
     221                ydata = [] 
     222 
     223                for iter in range(0,model.iter_n_children(piter)):  
     224                        #for each child that has the plot flag set add keys to xdata and summed values to ydata 
     225                        cpath = model.get_path(model.iter_nth_child(piter,iter)) 
     226                        data = model[cpath][2] 
     227                        mvals = data.keys() 
     228                        mvals.sort() 
     229                        for mval in mvals: 
     230                                xdata.append(mval) 
     231                                ydata.append(data[mval][1]+data[mval][2]+data[mval][4]+data[mval][5]+data[mval][6]) 
     232 
     233                print xdata 
     234                print ydata 
     235 
     236                model[path][3] = [xdata,ydata]   
     237                return  
     238 
    149239        def dnd_data_getdata(self, treeview, context, selection, target_id, etime): 
    150240                treeselection = treeview.get_selection() 
     
    153243                selection.set('STRING', 8, data) 
    154244                return 
    155                  
     245         
    156246        def setdatadir(self, widget): 
    157247                chooser = gtk.FileChooserDialog(title="Select Data Directory",action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, 
     
    170260                if keyname in ["Delete", "BackSpace"]: 
    171261                        self.deleteplotlistentry(widget) 
    172                          
     262                if keyname in ["Down"]: 
     263                        (path,),focus = widget.get_cursor() 
     264                        widget.set_cursor(path+1) 
     265                if keyname in ["Up"]: 
     266                        (path,),focus = widget.get_cursor() 
     267                        widget.set_cursor(path-1) 
    173268                return True 
    174269                 
     
    178273                model.remove(iter) 
    179274                return 
    180                          
    181  
     275                 
    182276app = appGui() 
    183277gtk.main() 
  • sans/utils/bt5/bt5view/bt5view.glade

    r163 r440  
    168168              <property name="visible">True</property> 
    169169              <property name="can_focus">True</property> 
    170               <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> 
    171               <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> 
     170              <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
     171              <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
    172172              <property name="shadow_type">GTK_SHADOW_IN</property> 
    173173              <property name="window_placement">GTK_CORNER_TOP_LEFT</property> 
     
    199199              <property name="visible">True</property> 
    200200              <property name="can_focus">True</property> 
    201               <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> 
    202               <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> 
     201              <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> 
     202              <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
    203203              <property name="shadow_type">GTK_SHADOW_IN</property> 
    204204              <property name="window_placement">GTK_CORNER_TOP_LEFT</property> 
     
    206206              <child> 
    207207                <widget class="GtkTreeView" id="tv_plotlist"> 
    208                   <property name="width_request">300</property> 
     208                  <property name="width_request">250</property> 
    209209                  <property name="visible">True</property> 
    210210                  <property name="can_focus">True</property> 
  • sans/utils/bt5/bt5view/bt5view.glade.bak

    r163 r440  
    168168              <property name="visible">True</property> 
    169169              <property name="can_focus">True</property> 
    170               <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> 
    171               <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> 
     170              <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
     171              <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
    172172              <property name="shadow_type">GTK_SHADOW_IN</property> 
    173173              <property name="window_placement">GTK_CORNER_TOP_LEFT</property> 
     
    199199              <property name="visible">True</property> 
    200200              <property name="can_focus">True</property> 
    201               <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> 
    202               <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> 
     201              <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> 
     202              <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
    203203              <property name="shadow_type">GTK_SHADOW_IN</property> 
    204204              <property name="window_placement">GTK_CORNER_TOP_LEFT</property> 
     
    216216                  <property name="hover_selection">False</property> 
    217217                  <property name="hover_expand">False</property> 
     218                  <signal name="key_press_event" handler="on_tv_plotlist_key_press_event" last_modification_time="Fri, 14 Sep 2007 03:11:53 GMT"/> 
    218219                </widget> 
    219220              </child> 
Note: See TracChangeset for help on using the changeset viewer.