Changeset 3283

Show
Ignore:
Timestamp:
08/01/08 18:36:34 (5 years ago)
Author:
nopper
Message:

Tab registering

Location:
branch/PacketManipulator
Files:
11 modified

Legend:

Unmodified
Added
Removed
  • branch/PacketManipulator/MainWindow.py

    r3260 r3283  
    2222 
    2323try: 
    24     from paned import * 
     24    from panedz import * 
    2525except ImportError: 
    2626    print "moo not installed. Using fallback UmitPaned .." 
     
    4747        self.set_size_request(600, 400) 
    4848         
    49         self.registered_tabs = [] 
     49        self.registered_tabs = {} 
    5050 
    5151        self.__create_widgets() 
     
    7171            ('Preferences', gtk.STOCK_PREFERENCES, _('_Preferences'), '<Control>p', None, self.__on_preferences), 
    7272 
     73            ('Views', None, _('Views'), None), 
     74 
    7375            ('Help', None, _('Help'), None), 
    7476            ('About', gtk.STOCK_ABOUT, _('About'), None, None, self.__on_about), 
     
    8991                <menuitem action='Preferences'/> 
    9092            </menu> 
     93            <menu action='Views'/> 
    9194            <menu action='Help'> 
    9295                <menuitem action='About'/> 
     
    117120        # Central widgets 
    118121        self.main_paned = UmitPaned() 
    119         self.main_tab = MainTab() 
    120  
    121         # Tabs 
    122         self.vte_tab = VteTab() 
    123         self.hack_tab = HackTab() 
    124         self.protocols_tab = ProtocolSelectorTab() 
    125         self.property_tab = PropertyTab() 
    126         self.console_tab = ConsoleTab() 
    127  
    128         # This should be moved to UmitPaned btw... 
    129         self.registered_tabs.append(self.main_tab) 
    130         self.registered_tabs.append(self.vte_tab) 
    131         self.registered_tabs.append(self.hack_tab) 
    132         self.registered_tabs.append(self.protocols_tab) 
    133         self.registered_tabs.append(self.property_tab) 
    134         self.registered_tabs.append(self.console_tab) 
    135122 
    136123        self.vbox = gtk.VBox(False, 2) 
     124 
     125    def get_tab(self, name): 
     126        return self.registered_tabs[name] 
     127 
     128    def register_tab(self, tab, show=True): 
     129        item = self.ui_manager.get_widget('/menubar/Views') 
     130        menu = item.get_submenu() 
     131 
     132        item.show() 
     133 
     134        if not menu: 
     135            menu = gtk.Menu() 
     136            item.set_submenu(menu) 
     137 
     138        if tab.label_text in self.registered_tabs: 
     139            raise Exception("Tab already present") 
     140 
     141        # Ok we should add a CheckMenuItem to this fucking menu 
     142        self.registered_tabs[tab.label_text] = tab 
     143 
     144        print "Tab %s registered" % tab.label_text 
     145 
     146        if not tab.tab_position: 
     147            # This is the central widget so it should be added 
     148            # with no MenuItem 
     149            self.main_paned.add_view(tab) 
     150            return 
     151 
     152        new_item = gtk.CheckMenuItem(tab.label_text) 
     153        new_item.connect('toggled', self.__on_toggle_tab_menu, tab) 
     154 
     155        if show: 
     156            new_item.set_active(True) 
     157 
     158        menu.append(new_item) 
     159        menu.show_all() 
    137160 
    138161    def __pack_widgets(self): 
     
    147170        self.vbox.pack_start(self.main_paned) 
    148171 
    149         self.main_paned.add_view(PANE_CENTER, self.main_tab, False) 
    150  
    151         self.main_paned.add_view(PANE_RIGHT, self.protocols_tab, False) 
    152         self.main_paned.add_view(PANE_RIGHT, self.property_tab, False) 
    153  
    154         self.main_paned.add_view(PANE_BOTTOM, self.vte_tab, False) 
    155         self.main_paned.add_view(PANE_BOTTOM, self.console_tab, False) 
    156         self.main_paned.add_view(PANE_BOTTOM, self.hack_tab, False) 
     172        # Tabs 
     173        self.register_tab(MainTab()) 
     174        self.register_tab(VteTab()) 
     175        self.register_tab(HackTab()) 
     176        self.register_tab(ProtocolSelectorTab()) 
     177        self.register_tab(PropertyTab()) 
     178        self.register_tab(ConsoleTab()) 
    157179 
    158180        self.add(self.vbox) 
     
    165187        "Used to connect signals between tabs" 
    166188 
    167         for tab in self.registered_tabs: 
     189        for key, tab in self.registered_tabs.items(): 
    168190            tab.connect_tab_signals() 
    169191 
     192    def __on_toggle_tab_menu(self, menuitem, tab): 
     193        if menuitem.get_active(): 
     194            self.main_paned.add_view(tab) 
     195        else: 
     196            self.main_paned.remove_view(tab) 
     197 
    170198    def __on_save_template(self, action): 
    171         session = self.main_tab.get_current_session() 
     199        session = self.get_tab("MainTab").get_current_session() 
    172200 
    173201        if not session: 
  • branch/PacketManipulator/Tabs/ConsoleTab.py

    r3188 r3283  
    2626class ConsoleTab(UmitView): 
    2727    label_text = "Packet Shell" 
     28    tab_position = gtk.POS_BOTTOM 
    2829 
    2930    def __create_widgets(self): 
  • branch/PacketManipulator/Tabs/HackTab.py

    r3262 r3283  
    247247class HackTab(UmitView): 
    248248    icon_name = gtk.STOCK_CONVERT 
     249    tab_position = gtk.POS_BOTTOM 
    249250    label_text = "Hack Tab" 
    250251 
  • branch/PacketManipulator/Tabs/MainTab.py

    r3261 r3283  
    134134 
    135135class MainTab(UmitView): 
     136    tab_position = None 
     137    label_text = "MainTab" 
     138 
    136139    def __create_widgets(self): 
    137140        "Create the widgets" 
  • branch/PacketManipulator/Tabs/PropertyTab.py

    r3230 r3283  
    2727    label_text = "Properties" 
    2828    icon_name = gtk.STOCK_INDEX 
     29    tab_position = gtk.POS_RIGHT 
    2930 
    3031    def create_ui(self): 
     
    4243 
    4344        from App import PMApp 
    44         tab = PMApp().main_window.main_tab 
     45        tab = PMApp().main_window.get_tab("MainTab") 
     46        print tab 
    4547        tab.session_notebook.connect('switch-page', self.__on_repopulate) 
    4648 
  • branch/PacketManipulator/Tabs/ProtocolSelectorTab.py

    r3184 r3283  
    163163    icon_name = gtk.STOCK_CONNECT 
    164164    label_text = "Protocols" 
     165    tab_position = gtk.POS_RIGHT 
    165166 
    166167    def create_ui(self): 
  • branch/PacketManipulator/Tabs/VteTab.py

    r3261 r3283  
    7373    icon_name = gtk.STOCK_OK 
    7474    label_text = "Terminal" 
     75    tab_position = gtk.POS_BOTTOM 
    7576 
    7677    def create_ui(self): 
  • branch/PacketManipulator/fallbackpaned.py

    r3209 r3283  
    5050        self.show_all() 
    5151 
    52     def add_view(self, pos, tab, unused=False): 
     52    def add_view(self, tab, unused=False): 
    5353        widget = tab.get_toplevel() 
    5454 
    55         if pos == PANE_CENTER: 
     55        if not tab.tab_position: 
    5656            if not self.hpaned.get_child2(): 
    5757                self.hpaned.pack2(widget, True, False) 
     
    6262        image = gtk.image_new_from_stock(tab.icon_name, gtk.ICON_SIZE_MENU) 
    6363 
     64        pos = tab.tab_position 
     65 
    6466        label.pack_start(image, False, False) 
    6567        label.pack_start(gtk.Label(tab.label_text)) 
     
    6870        print "Adding widget", widget, "to", pos 
    6971 
    70         if pos == PANE_RIGHT or pos == PANE_LEFT: 
     72        if pos == gtk.POS_RIGHT or pos == gtk.POS_LEFT: 
    7173            self.hnotebook.append_page(widget, label) 
    72         elif pos == PANE_TOP or pos == PANE_BOTTOM: 
     74        elif pos == gtk.POS_TOP or pos == gtk.POS_BOTTOM: 
    7375            self.vnotebook.append_page(widget, label) 
     76 
     77    def remove_view(self, tab): 
     78        pos = tab.tab_position 
     79 
     80        if pos == gtk.POS_RIGHT or pos == gtk.POS_LEFT: 
     81            nb = self.hnotebook 
     82        elif pos == gtk.POS_TOP or pos == gtk.POS_BOTTOM: 
     83            nb = self.vnotebook 
     84 
     85        num = nb.page_num(tab.get_toplevel()) 
     86        if num > -1: 
     87            nb.remove_page(num) 
     88        else: 
     89            raise Exception("Cannot found the widget") 
    7490 
    7591if __name__ == "__main__": 
  • branch/PacketManipulator/paned.py

    r3179 r3283  
    3232            yield self.get_paned(pos) 
    3333 
    34     def add_view(self, name, view, removable=True): 
    35         if name == PANE_CENTER: 
     34    def add_view(self, view, removable=True): 
     35        if not view.tab_position: 
    3636            self.add_child(view.get_toplevel()) 
    3737        else: 
    38             POS = POS_MAP[name] 
     38            POS = view.tab_position 
    3939            lab = PaneLabel(view.icon_name, None, view.label_text) 
    4040            pane = self.insert_pane(view.get_toplevel(), lab, POS, POS) 
  • branch/PacketManipulator/views.py

    r3188 r3283  
    6767 
    6868class UmitViewMixin(object): 
    69  
    7069    icon_name = gtk.STOCK_INFO 
    7170    label_text = 'Umit View' 
     71    tab_position = gtk.POS_RIGHT 
    7272 
    7373    def __init__(self, toplevel=None): 
  • branch/PacketManipulator/widgets/Expander.py

    r3282 r3283  
    444444        self.pack_start(self._layout) 
    445445         
     446        self.set_size_request(40, 100) 
    446447        self.show_all() 
     448 
     449    def do_size_allocate(self, allocation): 
     450        # We should force a size allocate to avoid bugs 
     451        # when the widget is getting too small! 
     452        gtk.VBox.do_size_allocate(self, allocation) 
     453        self._layout.size_allocate(self._layout.allocation) 
    447454 
    448455    def do_realize(self): 
     
    466473 
    467474    def add(self, widget): 
    468         self.add_widget(widget, True) 
     475        self.add_widget(widget, False) #FIXME 
    469476 
    470477    def get_label(self):