Changeset 3380

Show
Ignore:
Timestamp:
08/09/08 18:37:36 (2 years ago)
Author:
nopper
Message:

Implemented a simple filter

Location:
branch/PacketManipulator
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branch/PacketManipulator/Dialogs/Interface.py

    r3376 r3380  
    171171 
    172172        if factor == 0: 
    173             factor = 1 
     173            factor = 1024 
    174174        elif factor == 1: 
    175             factor = 1024 
     175            factor = 1024 ** 2 
    176176        elif factor == 2: 
    177             factor = 1024 ** 2 
     177            factor = 1024 ** 3 
    178178 
    179179        ssize = ssize * factor 
  • branch/PacketManipulator/widgets/Sniff.py

    r3367 r3380  
    3939 
    4040    def __init__(self, context): 
    41         super(SniffPage, self).__init__(False, 2) 
     41        super(SniffPage, self).__init__(False, 4) 
     42         
     43        self.set_border_width(2) 
    4244 
    4345        sw = gtk.ScrolledWindow() 
     
    4749        self.store = gtk.ListStore(int, str, str, str, str, str, gtk.gdk.Color, object) 
    4850        self.tree = gtk.TreeView(self.store) 
     51 
     52        # Create a filter function 
     53        self.model_filter = self.store.filter_new() 
     54        self.model_filter.set_visible_func(self.__filter_func) 
     55 
     56        self.tree.set_model(self.model_filter) 
    4957 
    5058        idx = 0 
     
    5967        sw.add(self.tree) 
    6068 
     69        self.filter = SniffFilter() 
    6170        self.statusbar = HIGAnimatedBar(_('Sniffing on <tt>%s</tt> ...') % context.iface, gtk.STOCK_INFO) 
    6271 
     72        self.pack_start(self.filter, False, False) 
    6373        self.pack_start(sw) 
    6474        self.pack_start(self.statusbar, False, False) 
     
    8797        self.timeout_id = gobject.timeout_add(200, self.__update_tree) 
    8898        self.tree.get_selection().connect('changed', self.__on_selection_changed) 
     99        self.filter.get_entry().connect('activate', self.__on_apply_filter) 
    89100     
    90101    def __modify_font(self, font): 
     
    130141            # Scroll to end 
    131142            if self.context.auto_scroll: 
    132                 self.tree.scroll_to_cell(id - 1) 
     143                self.tree.scroll_to_cell(len(self.model_filter) - 1) 
    133144 
    134145        alive = self.context.is_alive() 
     
    167178        nb.set_view_page(packet) 
    168179 
     180    def __on_apply_filter(self, entry): 
     181        print "Refiltering" 
     182        self.model_filter.refilter() 
     183 
     184    def __filter_func(self, model, iter): 
     185        txt = self.filter.get_text() 
     186 
     187        if not txt: 
     188            return True 
     189 
     190        for idx in xrange(6): 
     191            if txt in str(model.get_value(iter, idx)): 
     192                return True 
     193 
     194        return False 
     195 
    169196class SniffFilter(gtk.HBox): 
    170     pass 
    171  
     197    __gtype_name__ = "SniffFilter" 
     198 
     199    def __init__(self): 
     200        super(SniffFilter, self).__init__(False, 2) 
     201 
     202        self.set_border_width(4) 
     203 
     204        self._entry = gtk.Entry() 
     205        self._box = gtk.EventBox() 
     206        self._box.add(gtk.image_new_from_stock(gtk.STOCK_CLEAR, gtk.ICON_SIZE_MENU)) 
     207 
     208        self._entry.set_has_frame(False) 
     209 
     210        self.pack_start(self._entry) 
     211        self.pack_end(self._box, False, False) 
     212 
     213        self._box.connect('button-release-event', self.__on_button_release) 
     214        self._entry.connect('changed', self.__on_update) 
     215 
     216        self._colors = None 
     217     
     218    def do_realize(self): 
     219        gtk.HBox.do_realize(self) 
     220 
     221        self._colors = ( 
     222            self.style.white, 
     223            gtk.gdk.color_parse("#FEFEDC") 
     224        ) 
     225         
     226        self.__on_update(self._entry) 
     227 
     228    def do_expose_event(self, evt): 
     229        alloc = self.allocation     
     230        rect = gtk.gdk.Rectangle(alloc.x, alloc.y, alloc.width, alloc.height) 
     231 
     232        self.style.paint_flat_box( 
     233            self.window,           
     234            self._entry.state,   
     235            self._entry.get_property('shadow_type'), 
     236            alloc,                                     
     237            self._entry,                             
     238            'entry_bg',                                
     239            rect.x, rect.y, rect.width, rect.height    
     240        )                                              
     241 
     242        self.style.paint_shadow( 
     243            self.window,         
     244            self._entry.state, 
     245            self._entry.get_property('shadow_type'), 
     246            alloc,                                     
     247            self._entry,                             
     248            'entry',                                   
     249            rect.x, rect.y, rect.width, rect.height    
     250        ) 
     251 
     252        return gtk.HBox.do_expose_event(self, evt) 
     253 
     254    def __on_button_release(self, image, evt): 
     255        if evt.button == 1: 
     256            self._entry.set_text('') 
     257 
     258    def __on_update(self, entry): 
     259        if self._entry.get_text(): 
     260            color = self._colors[1] 
     261        else: 
     262            color = self._colors[0] 
     263 
     264        self._entry.modify_base(gtk.STATE_NORMAL, color) 
     265        self._box.modify_bg(gtk.STATE_NORMAL, color) 
     266        self.modify_base(gtk.STATE_NORMAL, color) 
     267 
     268    def get_text(self): 
     269        return self._entry.get_text() 
     270 
     271    def set_text(self, txt): 
     272        self._entry.set_text(txt) 
     273 
     274    def get_entry(self): 
     275        return self._entry 
     276 
     277gobject.type_register(SniffFilter) 
    172278 
    173279class SniffTab: 
     
    183289if __name__ == "__main__": 
    184290    w = gtk.Window() 
    185     w.add(SniffTree(SniffContext("wlan0"))) 
     291    w.add(SniffFilter()) 
    186292    w.show_all() 
    187293    gtk.main()