Changeset 3439

Show
Ignore:
Timestamp:
08/15/08 09:59:42 (5 years ago)
Author:
nopper
Message:

Closable label title addition to StatiContext? redraw_rows fix

Location:
branch/PacketManipulator
Files:
2 added
10 modified

Legend:

Unmodified
Added
Removed
  • branch/PacketManipulator/Backend/PM/BaseContext/Static.py

    r3431 r3439  
    2222 
    2323class BaseStaticContext(object): 
    24     def __init__(self, fname=None): 
     24    NOT_SAVED, SAVED = range(2) 
     25 
     26    def __init__(self, title, fname=None): 
    2527        self._data = [] 
     28        self._title = title 
     29        self._status = self.NOT_SAVED 
    2630 
    2731        if fname: 
     
    3337 
    3438    def load(self): 
    35         pass 
     39        self.status = self.SAVED 
    3640    def save(self): 
    37         pass 
     41        self.status = self.SAVED 
    3842 
    3943    def get_summary(self): 
     
    4751        self._data = val 
    4852 
     53    def get_title(self): 
     54        return self._title 
     55    def set_title(self, val): 
     56        self._title = val 
     57 
     58    def get_status(self): 
     59        return self._status 
     60    def set_status(self, val): 
     61        self._status = val 
     62 
    4963    def get_cap_file(self): 
    5064        return self._cap_file 
     
    5367 
    5468    data = property(get_data, set_data) 
     69    title = property(get_title, set_title) 
    5570    summary = property(get_summary, set_summary) 
     71    status = property(get_status, set_status) 
    5672    cap_file = property(get_cap_file, set_cap_file) 
    5773 
  • branch/PacketManipulator/Backend/PM/BaseContext/Timed.py

    r3433 r3439  
    3737        self._last = 0 
    3838 
    39         StaticContext.__init__(self) 
     39        StaticContext.__init__(self, '') 
    4040 
    4141    def _start(self): 
  • branch/PacketManipulator/Backend/Scapy/Context/Sniff.py

    r3431 r3439  
    4444            self.internal = True 
    4545 
    46             self.summary = _('Sniffing on %s') % self.iface 
     46            self.title = _('%s capture') % self.iface 
    4747            self.thread = None 
    4848 
  • branch/PacketManipulator/Backend/Scapy/Context/Static.py

    r3431 r3439  
    4141                self.data.append(MetaPacket(packet)) 
    4242 
     43            self.status = self.SAVED 
    4344            self.summary = _('%d packets loaded.') % len(data) 
    4445            return True 
     
    6061                return False 
    6162 
     63            self.status = self.SAVED 
    6264            self.summary = _('%d packets written.') % len(data) 
    6365            return True 
  • branch/PacketManipulator/Icons.py

    r3416 r3439  
    3636    'info', 
    3737    'warning', 
    38     'error' 
     38    'error', 
     39 
     40    'stock-close' 
    3941) 
    4042 
  • branch/PacketManipulator/MainWindow.py

    r3428 r3439  
    2020 
    2121import gtk 
     22import Backend 
    2223 
    2324from Manager.PreferenceManager import Prefs 
     
    290291 
    291292    def __on_quit(self, *args): 
     293        self.hide() 
    292294 
    293295        # We need to stop the pending sniff threads 
    294296        maintab = self.get_tab("MainTab") 
    295297 
     298        lst = [] 
     299 
    296300        for page in maintab.session_notebook: 
    297             page.sniff_page.stop_sniffing() 
    298  
    299         for page in maintab.session_notebook: 
    300             if hasattr(page.sniff_page, 'context'): 
    301                 page.sniff_page.context.join() 
     301            if isinstance(page.context, Backend.TimedContext): 
     302                lst.append(page.context) 
     303 
     304        for ctx in lst: 
     305            ctx.stop() 
     306 
     307        for ctx in lst: 
     308            ctx.join() 
    302309 
    303310        gtk.main_quit() 
  • branch/PacketManipulator/PacketManipulator

    r3359 r3439  
    9494 
    9595def main(args): 
    96     from App import PMApp 
    9796    from umitCore.Paths import Path 
    9897    Path.set_umit_conf(os.path.split(args[0])[0]) 
     98 
     99    from App import PMApp 
    99100 
    100101    try: 
  • branch/PacketManipulator/Tabs/MainTab.py

    r3431 r3439  
    2525from widgets.Expander import AnimatedExpander 
    2626from widgets.Sniff import SniffPage 
     27from widgets.ClosableLabel import ClosableLabel 
    2728 
    2829from views import UmitView 
     
    247248 
    248249        self.sniff_page = SniffPage(self) 
    249         self._label = gtk.Label(ctx.summary) 
     250        self._label = ClosableLabel(ctx.title) 
    250251 
    251252        self.set_border_width(4) 
     
    289290 
    290291    def create_edit_session(self, packet): 
    291         ctx = Backend.StaticContext() 
     292        ctx = Backend.StaticContext(_('Unsaved')) 
    292293 
    293294        if isinstance(packet, basestring): 
     
    310311 
    311312    def create_offline_session(self, fname): 
    312         ctx = Backend.StaticContext(fname) 
     313        ctx = Backend.StaticContext(fname, fname) 
    313314        ctx.load() 
    314315 
     
    321322 
    322323    def __append_session(self, session): 
     324        session.label.connect('close-clicked', self.__on_close_page, session) 
     325 
    323326        self.append_page(session, session.label) 
    324327        self.set_tab_reorderable(session, True) 
     328 
    325329        return session 
     330 
     331    def __remove_session(self, session): 
     332        from App import PMApp 
     333        tab = PMApp().main_window.get_tab("Operations") 
     334 
     335        tab.tree.remove_operation(session.context) 
     336 
     337        idx = self.page_num(session) 
     338        self.remove_page(idx) 
    326339 
    327340    def get_current_session(self): 
     
    339352 
    340353        return None 
     354 
     355    def __on_close_page(self, label, session): 
     356        # Check if are stopped 
     357 
     358        if isinstance(session.context, Backend.TimedContext) and \ 
     359           session.context.state != session.context.NOT_RUNNING: 
     360            dialog = gtk.MessageDialog(self.get_toplevel(), 
     361                                       gtk.DIALOG_DESTROY_WITH_PARENT, 
     362                                       gtk.MESSAGE_QUESTION, 
     363                                       gtk.BUTTONS_YES_NO, 
     364                                       _('The session is running.\nDo you want stop it?')) 
     365            id = dialog.run() 
     366 
     367            dialog.hide() 
     368            dialog.destroy() 
     369             
     370            if id == gtk.RESPONSE_YES: 
     371                session.context.stop() 
     372 
     373            return 
     374 
     375        if session.context.status == session.context.SAVED: 
     376            self.__remove_session(session) 
     377        else: 
     378 
     379            dialog = gtk.MessageDialog(self.get_toplevel(), 
     380                                       gtk.DIALOG_DESTROY_WITH_PARENT, 
     381                                       gtk.MESSAGE_QUESTION, 
     382                                       gtk.BUTTONS_YES_NO, 
     383                                       _('The session has unsaved changes.\nDo you want to save them?')) 
     384 
     385            id = dialog.run() 
     386 
     387            dialog.hide() 
     388            dialog.destroy() 
     389             
     390            if id == gtk.RESPONSE_NO or \ 
     391               (id == gtk.RESPONSE_YES and session.sniff_page.save()): 
     392                 
     393                self.__remove_session(session) 
    341394 
    342395class MainTab(UmitView): 
  • branch/PacketManipulator/Tabs/OperationsTab.py

    r3431 r3439  
    274274            operation.start() 
    275275 
     276    def remove_operation(self, operation): 
     277        """ 
     278        Remove an operation from the store 
     279 
     280        @param operation the Operation to remove 
     281        """ 
     282 
     283        if not isinstance(operation, Operation): 
     284            return 
     285 
     286        def remove(model, path, iter, operation): 
     287            if model.get_value(iter, 0) is operation: 
     288                model.remove(iter) 
     289                return True 
     290 
     291        self.store.foreach(remove, operation) 
     292 
    276293    # Callbacks section 
    277294 
     
    292309 
    293310    def __on_clear(self, action, operation): 
    294         pass 
     311        # TODO: try a better method 
     312        iter = self.store.get_iter_first() 
     313 
     314        while iter: 
     315            operation = self.store.get_value(iter, 0) 
     316 
     317            if operation.state == operation.NOT_RUNNING: 
     318                self.store.remove(iter) 
     319 
     320            iter = self.store.iter_next(iter) 
    295321 
    296322class OperationsTab(UmitView): 
  • branch/PacketManipulator/widgets/Sniff.py

    r3431 r3439  
    7575        self.reload() 
    7676 
    77     def clear(self): 
    78         self.store.clear() 
    79  
    80     def reload(self): 
    81         for packet in self.session.context.get_data(): 
    82             self.store.append([packet]) 
    83  
    84         self.statusbar.label = "<b>%s</b>" % self.session.context.summary 
    85  
    86         if self.timeout_id: 
    87             gobject.source_remove(self.timeout_id) 
    88  
    89         if isinstance(self.session.context, Backend.TimedContext): 
    90             self.timeout_id = gobject.timeout_add(200, self.__update_tree) 
    91  
    9277    def __create_toolbar(self): 
    9378        self.toolbar = gtk.Toolbar() 
     
    9580 
    9681        stocks = ( 
     82            gtk.STOCK_REFRESH, 
    9783            gtk.STOCK_MEDIA_STOP, 
    9884            gtk.STOCK_SAVE, 
     
    10187 
    10288        callbacks = ( 
     89            self.__on_restart, 
    10390            self.__on_stop, 
    10491            self.__on_save, 
     
    10794 
    10895        tooltips = ( 
     96            _('Restart capturing'), 
    10997            _('Stop capturing'), 
    11098            _('Save packets'), 
     
    182170                for rend in col.get_cell_renderers(): 
    183171                    rend.set_property('font-desc', desc) 
     172 
     173            self.__redraw_rows() 
    184174        except: 
    185175            # Block change 
     
    190180        self.use_colors = value 
    191181        self.tree.set_rules_hint(not self.use_colors) 
     182 
     183        self.__redraw_rows() 
     184 
     185    def __redraw_rows(self): 
     186        def emit_row_changed(model, path, iter): 
     187            model.row_changed(path, iter) 
     188 
     189        self.store.foreach(emit_row_changed) 
    192190 
    193191    def __get_color(self, packet): 
     
    215213        return alive 
    216214 
     215    # Public functions 
     216 
    217217    def populate(self, pktlist): 
    218218        for packet in pktlist: 
    219219            self.store.append([packet]) 
    220220 
    221     def stop_sniffing(self): 
    222         self.session.context.stop() 
     221    def clear(self): 
     222        self.store.clear() 
     223 
     224    def reload(self): 
     225        for packet in self.session.context.get_data(): 
     226            self.store.append([packet]) 
     227 
     228        self.statusbar.label = "<b>%s</b>" % self.session.context.summary 
     229 
     230        if self.timeout_id: 
     231            gobject.source_remove(self.timeout_id) 
     232 
     233        if isinstance(self.session.context, Backend.TimedContext): 
     234            self.timeout_id = gobject.timeout_add(200, self.__update_tree) 
     235 
     236    def save(self): 
     237        return self.__on_save(None) 
     238 
     239    def save_as(self): 
     240        return self.__on_save_as(None) 
    223241 
    224242    # Signals callbacks 
     
    273291    def __on_stop(self, action): 
    274292        self.session.context.stop() 
    275  
    276     def __on_save(self, action, saveas_on_fail=True): 
     293    def __on_restart(self, action): 
     294        self.session.context.restart() 
     295 
     296    def __on_save(self, action): 
    277297        if self.session.context.cap_file: 
    278             self.__save_packets(self.session.context.cap_file) 
     298            return self.__save_packets(self.session.context.cap_file) 
    279299        else: 
    280             self.__on_save_as(None) 
     300            return self.__on_save_as(None) 
    281301 
    282302    def __on_save_as(self, action): 
     
    295315            dialog.add_filter(filter) 
    296316 
     317        ret = False 
    297318        if dialog.run() == gtk.RESPONSE_ACCEPT: 
    298             self.__save_packets(dialog.get_filename()) 
     319            ret = self.__save_packets(dialog.get_filename()) 
    299320 
    300321        dialog.hide() 
    301322        dialog.destroy() 
    302323 
     324        return ret 
     325 
    303326    def __save_packets(self, fname): 
    304327        self.session.context.cap_file = fname 
    305  
    306         if self.session.context.save(): 
     328        ret = self.session.context.save() 
     329 
     330        if ret: 
    307331            self.statusbar.image = gtk.STOCK_HARDDISK 
    308332        else: 
     
    311335        self.statusbar.label = "<b>%s</b>" % self.session.context.summary 
    312336        self.statusbar.start_animation(True) 
     337 
     338        return ret 
    313339 
    314340class SniffFilter(gtk.HBox):