Exemple #1
0
class TabDrawer(BoxLayout, Sender):
    current_tab = ObjectProperty(None)
    current_text = StringProperty('BalanceBot')
    main_panel = ObjectProperty(None)
    orientation = 'vertical'

    Data = (('Stability', (
        ('Vertical', (0, -5, 5, 0.1)),
        ('kPs', (5, 0, 100, 0.1)),
        ('kIs', (5, 0, 100, 0.1)),
        ('kDs', (5, 0, 100, 0.1)),
    ), (
        ('Angle', (1, 0, 0)),
        ('PID_stab', (0, 1, 0)),
        ('P_stab', (0.5, 0.5, 0)),
        ('I_stab', (0, 0.5, 0.5)),
        ('D_stab', (0, 0, 1)),
    )), ('Deplacement', (
        ('Origine', (0, -100, 100, 1)),
        ('kPd', (5, 0, 10, 0.1)),
        ('kId', (5, 0, 10, 0.1)),
        ('kDd', (5, 0, 10, 0.1)),
    ), (
        ('Encoder', (1, 0, 0)),
        ('PID_dep', (0, 1, 0)),
        ('P_dep', (0.5, 0.5, 0)),
        ('I_dep', (0, 0.5, 0.5)),
        ('D_dep', (0, 0, 1)),
    )), ('Rotation', (
        ('Direction', (0, -100, 100, 1)),
        ('kPr', (5, 0, 10, 0.1)),
        ('kIr', (5, 0, 10, 0.1)),
        ('kDr', (5, 0, 10, 0.1)),
    ), (
        ('Dif_Enc', (1, 0, 0)),
        ('PID_rot', (0, 1, 0)),
        ('P_rot', (0.5, 0.5, 0)),
        ('I_rot', (0, 0.5, 0.5)),
        ('D_rot', (0, 0, 1)),
    )))

    def __init__(self, **kwargs):

        super(TabDrawer, self).__init__(**kwargs)

        self.navdraw = NavigationDrawer()
        self.side_panel = BoxLayout(orientation='vertical')
        self.side_panel.tabbed_panel = self
        self.navdraw.add_widget(self.side_panel)
        self.add_widget(self.navdraw)

        self.add_widget(ConnectionLayout())

        pad_Layout = TabDrawerItem(text='control')
        pad_Layout.add_widget(Pad())
        self.add_widget(pad_Layout)

        for item in self.Data:
            self.add_widget(PidLayout(item))

        self.add_widget(LogLayout())

    def add_widget(self, widget, index=0):
        if issubclass(widget.__class__, TabDrawerItem):
            #if len( self.children ) > 2 :
            self.side_panel.add_widget(widget)
            if len(self.side_panel.children) == 1:
                self.switch_to(widget)
        else:
            super(TabDrawer, self).add_widget(widget)
            #print widget, len(self.children), len(self.children) > 2

    def switch_to(self, header):
        if self.navdraw.state == 'open':
            self.navdraw.toggle_state()

        if self.current_tab:
            self.current_tab.state = 'normal'
        header.state = 'down'
        self.current_tab = header
        self.current_text = header.text
        if self.main_panel:
            self.navdraw.remove_widget(self.main_panel)
        self.navdraw.add_widget(header.content)
        self.main_panel = header.content

    def toggle_state(self):
        self.navdraw.toggle_state()

    def on_current_text(self, *args):
        self.send("get", self.current_text)

    def toggle_menu(self):
        self.current_tab.menu = not self.current_tab.menu