Ignore:
Timestamp:
Jan 9, 2009 1:00:52 AM (14 years ago)
Author:
ajj
Message:
  • Fixed handling of data directory change (plot is cleared on change)
  • Added refresh functionality to allow for the arrival of new data files
  • Added filter functionality to limit view with regex
Location:
sans/utils/bt5/bt5plot2
Files:
2 edited

Legend:

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

    r468 r469  
    33import sys 
    44import os 
     5import re 
    56import matplotlib 
    67import numpy 
     
    4546                     "on_plot_type_activate" : self.handle_plot_type_change, 
    4647                     "on_btn_ClearPlot_clicked" : self.handle_clearplot, 
    47                      "on_btn_RefreshList_clicked" : self.handle_refreshlist} 
     48                     "on_btn_Refresh_clicked" : self.handle_refreshlist, 
     49                     "on_btn_Filter_clicked" : self.handle_filter} 
    4850    #                 "on_tv_plotlist_key_press_event" : self.handle_plotlist_keypress} 
    4951 
     
    5961        self.filelist = gtk.ListStore(str, 'gboolean', object, object, object) 
    6062        self.filelist.set_sort_column_id(0, gtk.SORT_ASCENDING) 
    61         self.filelistview.set_model(self.filelist) 
     63 
     64        # Set up filtering of file list 
     65        self.filter_entry = self.wTree.get_widget("ent_filter") 
     66        self.filter_string = [] 
     67        self.filter_string.append(self.filter_entry.get_text()) 
     68        self.filelistfilter = self.filelist.filter_new() 
     69        self.filelistfilter.set_visible_func(self.filter_filelist,self.filter_string) 
     70 
     71        self.filelistview.set_model(self.filelistfilter) 
    6272 
    6373        self.cellrenderertoggle = gtk.CellRendererToggle() 
    6474        self.cellrenderertoggle.set_property('activatable', True) 
    65         self.cellrenderertoggle.connect("toggled", self.handle_plot_toggle, self.filelist) 
     75        self.cellrenderertoggle.connect("toggled", self.handle_plot_toggle, self.filelistfilter) 
    6676     
    6777        self.AddFileListColumns() 
    6878 
    6979        #fill the file list 
    70         self.FillFileList(self.GetDirList()) 
     80        self.FillFileList(self.GetBT5DirList()) 
    7181 
    7282        # Set up graphing widget to display xpeek data 
     
    103113        some needed properties""" 
    104114                         
    105         column = gtk.TreeViewColumn('Filename', gtk.CellRendererText() 
    106             , text=0) 
     115        column = gtk.TreeViewColumn('Filename', gtk.CellRendererText(), text=0) 
    107116        column.set_resizable(True)         
    108117        column.set_sort_column_id(0) 
     
    113122        return 
    114123         
    115     def GetDirList(self): 
     124    def GetBT5DirList(self): 
     125        """Function to parse the directory listing of the current working directory 
     126             and create a list of filenames that are BT5 data files""" 
     127              
    116128        dirlist = os.listdir(os.getcwd()) 
    117129         
    118         bt5list = [ x for x in dirlist if x.find('.bt5') > 0] 
     130        bt5list = [ x for x in dirlist if (x.find('.bt5') > 0 and usans.isBT5Data(x))] 
    119131         
    120132        return bt5list 
     
    124136        self.filelist.clear() 
    125137        for filename in filenames: 
    126             if usans.isBT5Data(filename): 
    127138                self.filelist.append([filename, 0, 0, 0, 0]) 
    128139        return 
    129140             
    130     def handle_RefreshList(self,widget): 
    131          
    132         for path in self.filelist: 
    133             print self.filelist[path][0] 
     141    def RefreshFileList(self,filenames):         
     142        #print len(filenames) 
     143         
     144        deletelist = [] 
     145         
     146        treestore = self.filelistview.get_model() 
     147        treestore.foreach(self.filelist_match_filename, (filenames,deletelist)) 
     148           
     149        for filename in filenames: 
     150            self.filelist.append([filename, 0, 0, 0, 0]) 
     151         
     152        deletelist.reverse() 
     153        for path in deletelist: 
     154            treestore.remove(treestore.get_iter(path)) 
     155        #print len(filenames)     
     156        return 
     157 
     158    def filelist_match_filename(self, model, path, iter, data): 
     159         
     160        mval = model.get_value(iter,0) 
     161         
     162        if mval in data[0]: 
     163            del data[0][data[0].index(mval)] 
     164        else: 
     165            data[1].append(path) 
     166             
     167        return False 
     168     
     169    def handle_refreshlist(self,widget): 
     170 
     171        self.RefreshFileList(self.GetBT5DirList()) 
     172         
     173        return 
     174 
     175    def filter_filelist(self, model, iter, data): 
     176         
     177        if model.get_value(iter,0):         
     178            match = re.match(data[0],model.get_value(iter,0)) 
     179        else: 
     180            match = None 
     181         
     182        if match is None: 
     183            return False 
     184        else: 
     185            return True 
     186         
     187    def handle_filter(self,widget): 
     188         
     189        print "Filtering" 
     190        del self.filter_string[:] 
     191        self.filter_string.append(self.filter_entry.get_text()) 
     192        print self.filter_string[0] 
     193        self.filelistfilter.refilter() 
     194         
     195        return 
    134196 
    135197    def setdatadir(self, widget): 
     198         
     199        #Clear plot before selecting new folder 
     200        #This is a bit clunky, but it avoids a lot of pain for the moment 
     201         
     202        self.clearplot() 
     203         
    136204        chooser = gtk.FileChooserDialog(title="Select Data Directory", action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, 
    137205                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) 
     
    141209        if response == gtk.RESPONSE_OK: 
    142210            os.chdir(chooser.get_filename()) 
    143             self.FillFileList(self.GetDirList()) 
     211            self.FillFileList(self.GetBT5DirList()) 
    144212        chooser.destroy() 
    145213 
    146     def handle_plot_toggle(self, cell, path, model): 
     214    def handle_plot_toggle(self, filter_cell, filter_path, filter_model): 
     215        model = filter_model.get_model() 
     216        path = filter_model.convert_path_to_child_path(filter_path) 
    147217        model[path][1] = not model[path][1] 
    148218 
     
    263333         return 
    264334 
    265     def remove_plot(self, model, path): 
    266  
     335    def remove_plot(self, filter_model, filter_path): 
     336  
    267337        for line in model[path][4]: 
    268338                self.axis.lines.remove(line) 
     
    308378         
    309379    def handle_clearplot(self,widget): 
    310      
    311         model = self.filelistview.get_model() 
     380         
     381        self.clearplot() 
     382         
     383        return 
     384         
     385     
     386    def clearplot(self): 
     387        model = self.filelistview.get_model().get_model() 
    312388        iter = model.iter_children(None) 
    313389        while iter: 
     
    319395            iter = model.iter_next(iter) 
    320396 
    321         for line in self.axis.lines: 
    322              print line 
    323              self.axis.lines.remove(line) 
     397        #Remove any lines left over - shouldn't be any, but let's tidy up 
     398        #for line in self.axis.lines: 
     399             #self.axis.lines.remove(line) 
    324400         
    325401        self.canvas.draw() 
  • sans/utils/bt5/bt5plot2/bt5plot2.glade

    r466 r469  
    332332 
    333333                  <child> 
    334                     <widget class="GtkEntry" id="entry1"> 
     334                    <widget class="GtkEntry" id="ent_filter"> 
    335335                      <property name="visible">True</property> 
    336336                      <property name="can_focus">True</property> 
     
    356356                      <property name="relief">GTK_RELIEF_NORMAL</property> 
    357357                      <property name="focus_on_click">True</property> 
     358                      <signal name="clicked" handler="on_btn_Filter_clicked" last_modification_time="Fri, 09 Jan 2009 04:49:13 GMT"/> 
    358359 
    359360                      <child> 
     
    377378 
    378379                  <child> 
    379                     <widget class="GtkButton" id="btn_Filter"> 
     380                    <widget class="GtkButton" id="btn_Refresh"> 
    380381                      <property name="visible">True</property> 
    381382                      <property name="can_focus">True</property> 
    382383                      <property name="relief">GTK_RELIEF_NORMAL</property> 
    383384                      <property name="focus_on_click">True</property> 
     385                      <signal name="clicked" handler="on_btn_Refresh_clicked" last_modification_time="Fri, 09 Jan 2009 03:29:29 GMT"/> 
    384386 
    385387                      <child> 
Note: See TracChangeset for help on using the changeset viewer.