Beispiel #1
0
    def __init__(self, retour_selection, titre, parent_scm,
                 dict_eleves_par_groupe, **kwargs):
        self.titre = titre
        self.retour_selection = retour_selection
        self.parent_scm = parent_scm
        self.dict_eleves = dict_eleves_par_groupe
        self.dict_panneau_groupe = dict()
        super(Formation, self).__init__(**kwargs)

        for nom_groupe in self.dict_eleves.keys():
            tb = TabbedPanelItem(text=nom_groupe)
            panneaugr = PanneauGroupe(self.dict_eleves[nom_groupe],
                                      nom_cours=titre)
            self.dict_panneau_groupe[nom_groupe] = panneaugr
            tb.add_widget(panneaugr)
            self.nb.add_widget(tb)

        fin = TabbedPanelItem(text='Terminer')
        self.panfin = PanneauFinFormation(self.terminaison, self.recapitulatif)
        fin.add_widget(self.panfin)
        fin.bind(on_release=self.panfin.update)
        self.nb.add_widget(fin)
        self.panneau_fin = fin
        retour = TabbedPanelHeader(text='Retour')
        retour.bind(on_release=self.retour)
        self.nb.add_widget(retour)
        self.panneau_retour = retour
Beispiel #2
0
    def button_options(self):
        print("options pressed")
        app = App.get_running_app()
        cont = GridLayout(cols=1)
        # retrieve audio outputs / soundcards from audioengine class
        out_list = app.root.ae.get_outputs()
        print(out_list)

        # combine out_list, add to output selector
        for x, y in zip(*out_list):
            # intentional error to remember where left off
            b = Button(id="{}".format(y), text="{} {}".format(x, y))
            b.bind(on_press=self.audio_opts_button_callback)
            cont.add_widget(b)
        for x in self.children:
            print(x)

        tp = TabbedPanel(do_default_tab=False)

        # audio tab
        th_audio = TabbedPanelItem(text="Audio")
        th_audio.content = GridLayout()
        th_audio.add_widget(cont)

        # files tab
        th_files = TabbedPanelItem(text="Files")
        th_files.add_widget(Button(text="files tab content"))
        tp.add_widget(th_audio)
        tp.add_widget(th_files)

        popup = Popup(title='Options',
                      content=tp,
                      size_hint=(None, None),
                      size=(800, 800))
        popup.open()
Beispiel #3
0
 def finalize(self, *args):
     assert not hasattr(self, '_finalized')
     if not (
         self.engine and self.toggle and self.character
     ):
         Clock.schedule_once(self.finalize, 0)
         return
     self._tabs = TabbedPanel(do_default_tab=False)
     for rb, txt in (
             ('character', 'character'),
             ('avatar', 'avatar'),
             ('character_thing', 'thing'),
             ('character_place', 'place'),
             ('character_portal', 'portal')
     ):
         tab = TabbedPanelItem(text=txt)
         setattr(self, '_{}_tab'.format(rb), tab)
         box = RulesBox(
             engine=self.engine,
             rulebook=self._get_rulebook(rb),
             entity=self.character,
             toggle=self.toggle
         )
         tab.add_widget(box)
         self._tabs.add_widget(tab)
     self.add_widget(self._tabs)
     self._finalized = True
Beispiel #4
0
    def build(self):
        root = BoxLayout()
        root = TabbedPanel(do_default_tab=False)
        root.tab_width = 200
        self.load("default.xml")

        self.wips_container = WipContainer(self,
                                           self.wips,
                                           orientation="vertical",
                                           size_hint_y=None,
                                           height=1200,
                                           minimum_height=200)
        queue_scroll = ScrollView(bar_width=20)
        queue_scroll.add_widget(self.wips_container)

        tab = TabbedPanelItem(text="queue")
        tab.add_widget(queue_scroll)
        root.add_widget(tab)

        tab = TabbedPanelItem(text="settings")
        self.setting_container = SettingContainer(self)
        tab.add_widget(self.setting_container)
        self.setting_container.update_widgets()
        root.add_widget(tab)

        self.check_for_projects()
        self.load_xml_files()
        Clock.schedule_interval(lambda x: self.check_for_projects(), 10)
        return root
Beispiel #5
0
 def __init__(self, **kwargs):
     super(PythonConsole, self).__init__(**kwargs)
     
     self.console = ConsoleWidget(self)
     tab1 = TabbedPanelItem(text="Console")
     tab1.add_widget(self.console)
     self.add_widget(tab1)
Beispiel #6
0
    def __init__(self, **kwargs):
        super(PythonConsole, self).__init__(**kwargs)

        self.console = ConsoleWidget(self)
        tab1 = TabbedPanelItem(text="Console")
        tab1.add_widget(self.console)
        self.add_widget(tab1)
Beispiel #7
0
 def tabProbabilityTesting(self):
     '''
     tab containing plot of probability distributions from various user-specificed pools of dice
     '''
     self.plotColorMap = [
         [1,0,0,1],
         [0,1,0,1],
         [0,0,1,1],
         [1,1,0,1],
         [1,0,1,1],
         [0,1,1,1],
         [1,1,1,1],
         [0.75,0.75,0.75,1]]
     tabProb = TabbedPanelItem(text = 'Prob. Plots')
     self.statsMainLayout = BoxLayout(orientation = 'vertical')
     self.entryLayout =  BoxLayout(orientation = 'vertical',size_hint = (1,0.45))
     buttonLayout = BoxLayout(size_hint = (1,0.05))
     self.graphLayout = BoxLayout(size_hint = (1,0.5))
     self.graph = Graph(xlabel='Value', ylabel='Counts', 
         x_ticks_minor=1,x_ticks_major=2, y_ticks_minor = 100, y_ticks_major=500,
         y_grid_label=True, x_grid_label=True, padding=5,
         x_grid=True, y_grid=True, xmin=-0, xmax=15, ymin=0,ymax = 5000)
     self.graphLayout.add_widget(self.graph)
     self.plotList = []
     self.statsMainLayout.add_widget(self.entryLayout)
     self.statsMainLayout.add_widget(buttonLayout)
     self.statsMainLayout.add_widget(self.graphLayout)
     self.testList = []
     self.appendNewTest(self.entryLayout,readOnly = True) 
     self.testList.append(self.appendNewTest(self.entryLayout)) 
     buttonList = [['Add New Test','Plot Results','Reset']]
     buttonFunctionList = [[self.fireNewTestButton,self.firePlotButton,self.fireResetTestsButton]]
     self.addButtons(buttonList,buttonFunctionList,buttonLayout)
     tabProb.add_widget(self.statsMainLayout)
     return tabProb    
Beispiel #8
0
    def addTab(self, name, obj):
    	th = TabbedPanelItem(text=name)
    	self.add_widget(th)
	th.add_widget(obj)
	th.background_down = "blue.jpeg"
	print dir(th)
	return th
Beispiel #9
0
 def change_data_set(self, new_dic):
     liste_groupe = [{'text': nom_groupe} for nom_groupe in new_dic.keys()]
     print('tododo:', liste_groupe)
     current_groupes = self.dict_panneau_groupe.keys()
     self.deja_enregistre = False
     print('tadada:', new_dic.keys())
     print(current_groupes)
     for nom_groupe in current_groupes:
         # Si le groupe n'est plus dans la liste
         # il faut retirer le panneau
         if nom_groupe not in new_dic:
             # Mais d'abord il faut le retrouver !
             tabbed = [
                 tb for tb in self.nb.get_tab_list()
                 if tb.text == nom_groupe
             ]
             try:
                 del self.dict_panneau_groupe[nom_groupe]
             except KeyError:
                 pass
             if tabbed:
                 self.nb.remove_widget(tabbed[0])
     for groupe in liste_groupe:
         nom_groupe = groupe['text']
         if not new_dic[nom_groupe]:
             # Si c'est vide
             continue
         # Si le groupe n'existe pas, on crée le panneau et le rajoute
         if not nom_groupe in current_groupes:
             tb = TabbedPanelItem(text=nom_groupe)
             panneaugr = PanneauGroupe(new_dic[nom_groupe],
                                       nom_cours=self.titre)
             self.dict_panneau_groupe[nom_groupe] = panneaugr
             tb.add_widget(panneaugr)
             # Parce qu'à la SNSM, on aime quand c'est bien fait!
             self.nb.remove_widget(self.panneau_fin)
             self.nb.remove_widget(self.panneau_retour)
             self.nb.add_widget(tb)
             self.nb.add_widget(self.panneau_fin)
             self.nb.add_widget(self.panneau_retour)
         else:
             # Maintenant on gère les nouveaux élèves
             nouveaux_eleves = [
                 eleve for eleve in new_dic[nom_groupe]
                 if not eleve in self.dict_eleves[nom_groupe]
             ]
             rejetes = [
                 eleve for eleve in self.dict_eleves[nom_groupe]
                 if not eleve in new_dic[nom_groupe]
             ]
             self.dict_eleves = dict(new_dic)
             panneaugr = self.dict_panneau_groupe[nom_groupe]
             for ne in nouveaux_eleves:
                 panneaugr.ajoute_nouvel_eleve(ne)
             # Et on vire les autres
             for mm in rejetes:
                 panneaugr.supprime_eleve(mm)
Beispiel #10
0
    def populate_tabs(self):

        new_manager_tab = TabbedPanelItem(text='Tasks')
        new_manager_tab.add_widget(self.new_manager)
        # self.ids.tp.add_widget(events_tab)
        self.ids.tp.add_widget(new_manager_tab)
        # self.ids.tp.add_widget(stats_tab)

        self.ids.tp.default_tab = new_manager_tab
Beispiel #11
0
 def getTabLayout(self, command):
     tabItem = None
     for child in self.root.tab_list:
         if child.text == command.tabName:
             return child.content
     tabItem = TabbedPanelItem(text=command.tabName)
     self.root.add_widget(tabItem)
     tabItem.add_widget(BoxLayout(orientation='vertical', size_hint=(1, 1)))
     return tabItem.content
Beispiel #12
0
 def make_new_category(self, category_name, index=0):
     components_categories = self.ids.components_categories
     new_tab = TabbedPanelItem()
     new_tab.id = category_name
     new_tab.text = category_name
     components_box = self.make_components_box(category_name)
     new_scroll = ScrollView()
     new_scroll.add_widget(components_box)
     new_tab.add_widget(new_scroll)
     components_categories.add_widget(new_tab, index + 1)
	def __init__(self, prjMaterials, *args, **kwargs):
		print(f"creating materials sliders...")
		super(AllMatPropTabbedPanel, self).__init__(*args, **kwargs)
		self._prjMaterials = prjMaterials
		for mat in prjMaterials.materials:
			tmp = TabbedPanelItem()
			tmp2 = MatPropPanel(mat)
			self.add_widget(tmp)
			tmp.text = mat.name
			tmp.add_widget(tmp2)
Beispiel #14
0
 def open_file(self, document):
     """
     :type document: doxing.client.data_model.document.DocumentDTO
     """
     # TODO: prevent double openning same file
     opened_file = TabbedPanelItem()
     opened_file.text = document.name
     opened_file.add_widget(
         TextFileEditor(ctxt=self._ctxt, document=document))
     self.add_widget(opened_file)
     self.switch_to(opened_file)
Beispiel #15
0
def createInfoTab(stringDict, tabName):
    tab = TabbedPanelItem()
    tab.name = tabName
    tab.text = stringDict[tabName]["Title"]

    titleText = Label(text=stringDict[tabName]["Title"])
    bodyText = Label(text=stringDict[tabName]["Body"])

    tab.add_widget(titleText)
    tab.add_widget(bodyText)

    return tab
Beispiel #16
0
    def __init__(self, **kwargs):
        super(BandLay, self).__init__(**kwargs)

        self.tab_item = TabbedPanel()
        self.tab_item.do_default_tab = False
        self.tab_item.tab_height = 20

        list_bands = []
        if site.equipment == 'ADU06':
            list_bands = ['A', 'B', 'F', 'C', 'D']
        elif site.equipment == 'ADU07':
            list_bands = ['65536H', '4096H', '128H', '4H']

        for band in list_bands:
            tab_item = TabbedPanelItem()
            tab_item.text = band
            self.tab_item.add_widget(tab_item)

            list_file_pplt = self.search_pplt_file(band)
            site.files_plot[band] = list_file_pplt

            self.grid_lay = ScrollBox()

            i = 0
            for file_pplt_select in site.files_plot[band]:

                self.grid_lay.ids.grid.add_widget(file_pplt_select)
                print(file_pplt_select.obj_pplt.name)
                i += 1

            if band == '65536H' or band == '4096H':
                self.grid_lay.ids.grid.size_hint_x = None
                self.grid_lay.ids.grid.width = int(i / 3 * 300)
            else:
                self.grid_lay.ids.grid.size_hint_x = None
                self.grid_lay.ids.grid.width = int(i/3 * 250)

            tab_item.add_widget(self.grid_lay)
        self.add_widget(self.tab_item)


        print(project.path_file_ppmt)
Beispiel #17
0
 def finalize(self, *args):
     assert not hasattr(self, '_finalized')
     if not (self.engine and self.toggle and self.character):
         Clock.schedule_once(self.finalize, 0)
         return
     self._tabs = TabbedPanel(do_default_tab=False)
     for rb, txt in (('character', 'character'), ('avatar', 'avatar'),
                     ('character_thing',
                      'thing'), ('character_place',
                                 'place'), ('character_portal', 'portal')):
         tab = TabbedPanelItem(text=txt)
         setattr(self, '_{}_tab'.format(rb), tab)
         box = RulesBox(engine=self.engine,
                        rulebook=self._get_rulebook(rb),
                        entity=self.character,
                        toggle=self.toggle)
         tab.add_widget(box)
         self._tabs.add_widget(tab)
     self.add_widget(self._tabs)
     self._finalized = True
Beispiel #18
0
    def __init__(self, **kwargs):
        super(BandLay, self).__init__(**kwargs)

        self.tab_item = TabbedPanel()
        self.tab_item.do_default_tab = False
        self.tab_item.tab_height = 20

        list_bands = []
        if site.equipment == 'ADU06':
            list_bands = ['A', 'B', 'F', 'C', 'D']
        elif site.equipment == 'ADU07':
            list_bands = ['65536H', '4096H', '128H', '4H']

        for band in list_bands:
            tab_item = TabbedPanelItem()
            tab_item.text = band
            self.tab_item.add_widget(tab_item)

            list_file_pplt = self.search_pplt_file(band)
            site.files_plot[band] = list_file_pplt

            self.grid_lay = ScrollBox()

            i = 0
            for file_pplt_select in site.files_plot[band]:

                self.grid_lay.ids.grid.add_widget(file_pplt_select)
                print(file_pplt_select.obj_pplt.name)
                i += 1

            if band == '65536H' or band == '4096H':
                self.grid_lay.ids.grid.size_hint_x = None
                self.grid_lay.ids.grid.width = int(i / 3 * 300)
            else:
                self.grid_lay.ids.grid.size_hint_x = None
                self.grid_lay.ids.grid.width = int(i / 3 * 250)

            tab_item.add_widget(self.grid_lay)
        self.add_widget(self.tab_item)

        print(project.path_file_ppmt)
Beispiel #19
0
def test_tabbed_panel():
    app = App.get_running_app()
    app.step_1 = False
    container = default_container()
    instructions = Label(text='Press the button on the next tab, then press Submit.')
    tab_btn = FocusButton(text='Press me first')
    submit_btn = FocusButton(text='Submit', size_hint_y=0.1)

    inner_container = default_container()
    ignore_btn = FocusButton(text='Ignore me')
    inner_container.add_widget(instructions)
    inner_container.add_widget(ignore_btn)

    tp = FocusTabbedPanel()
    tp.default_tab_content = inner_container
    item = TabbedPanelItem(text='Go here')
    item.add_widget(tab_btn)
    tp.add_widget(item)

    def press_ignore(*args):    # Auto fail
        app.stop()


    def press_step_1(*args):
        app.step_1 = True


    def submit(*args):
        if app.step_1:
            app.did_action = True
            app.stop()

    ignore_btn.bind(on_press=press_ignore)
    tab_btn.bind(on_press=press_step_1)
    submit_btn.bind(on_press=submit)

    container.add_widget(tp)
    container.add_widget(submit_btn)

    app.root.add_widget(container)
    return True
Beispiel #20
0
    def build_play_screen(self):
        play_screen = Screen(name='play')
        self.sm.add_widget(play_screen)

        tab_names = self.layout_names
        self.layouts = {}

        tb_panel = TabbedPanel(do_default_tab=False,
                               tab_width=Window.width / len(tab_names))
        play_screen.add_widget(tb_panel)

        for layout_name in self.layout_names:
            layout = BoxLayout(orientation='vertical')
            self.layouts[layout_name] = layout
            self.add_audio_to_layout(layout_name)

            tabitem = TabbedPanelItem(text=layout_name)
            tabitem.add_widget(layout)
            tb_panel.add_widget(tabitem)

        return
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.tp_main = TabbedPanel()
        ti_pandas = TabbedPanelItem(id="ti_pandas", text = "pandas" )
        ti_list = TabbedPanelItem(id="ti_list", text = "list")
        ti_numpy = TabbedPanelItem(id="ti_numpy", text = "numpy array")

        self.qt_pandas = QzTable(id="qt_pandas")
        self.qt_list = QzTable(id="qt_list")
        self.qt_array = QzTable(id="qt_array")

        self.df_data = pd.read_csv("height_weight.csv")
        self.l_data = list()
        v = 10.0
        for y in range(1,1000,1):
            row = list()
            for x in range(0,50,1):
                v= v+ 10
                row.append(v)
            self.l_data.append(row)

        self.a_data = np.array(self.l_data)
        self.qt_pandas.data = self.df_data
        self.qt_list.data = self.l_data
        self.qt_array.data = self.a_data

        #Layout
        self.add_widget(self.tp_main)
        self.tp_main.add_widget(ti_pandas)
        ti_pandas.add_widget(self.qt_pandas)
        self.tp_main.add_widget(ti_list)
        ti_list.add_widget(self.qt_list)
        self.tp_main.add_widget(ti_numpy)
        ti_numpy.add_widget(self.qt_array)
Beispiel #22
0
class Tab_panel(TabbedPanel):
    def __init__(self, **kwargs):
        super(Tab_panel, self).__init__(**kwargs)
        self.pirveli_tab = TabbedPanelItem(text="შესავსები ბლანკი",
                                           font_name="bpg_arial_2009",
                                           font_size=20)
        Window.bind(on_resize=self.window_size_changed)
        self.tab_width = Window.width / 2.27
        self.tab_height = Window.height / 11.76
        self.tab_pos = "top_right"
        self.default_tab_text = "Registration"
        self.background_image = 'background1.png'
        self.add_widget(self.pirveli_tab)
        self.mama = Mama_lay()

        self.pirovneba = pirovneba_box()
        self.default_tab_content = self.pirovneba
        self.pirveli_tab.add_widget(self.mama)

        self.switch_button = Button(text="შემდეგი",
                                    font_name="bpg_arial_2009",
                                    font_size=20)
        self.switch_button.bind(on_release=self.next_tab_func)
        self.pirovneba.person_box.add_widget(self.switch_button)

    def next_tab_func(self, *args):
        self.switch_to(self.pirveli_tab, do_scroll=True)
        self.mama.name_text.text = self.pirovneba.name_text.text
        self.mama.surname_text.text = self.pirovneba.surname_text.text
        self.pirovneba.name_text.text = ""
        self.pirovneba.surname_text.text = ""
        self.pirovneba.laptop_text.text = ""

    def window_size_changed(self, window, width, height):
        self.tab_width = width / 2.27
        self.tab_height = height / 11.76
        self.pirveli_tab.font_size = width / 68.3
Beispiel #23
0
        def build(self):
            tp = TabbedPanel(do_default_tab=False)
            tab0 = TabbedPanelItem(text='First Tab')

            box = BoxLayout(orientation='horizontal', padding=5)
            xw0 = XWrapChromium('http://news.ycombinator.com')

            box.add_widget(xw0)

            b = Button(text='Randomize Site')
            b.bind(on_press=lambda inst: xw0.chromote.tabs[0].set_url(
                random.choice(random_sites)))
            box.add_widget(b)
            tab0.add_widget(box)

            tp.add_widget(tab0)

            tab1 = TabbedPanelItem(text='Other Panel')
            new_box = BoxLayout(orientation='vertical', padding=12)
            xw1 = XWrapChromium('http://codewaffle.com/')
            xw2 = XWrapChromium('http://eventual.games')

            b2 = Button(text='Random Sites')

            def randomize_xw12(*args, **kwargs):
                xw1.chromote.tabs[0].set_url(random.choice(random_sites))
                xw2.chromote.tabs[0].set_url(random.choice(random_sites))

            b2.bind(on_press=randomize_xw12)

            new_box.add_widget(xw1)
            new_box.add_widget(b2)
            new_box.add_widget(xw2)
            tab1.add_widget(new_box)
            tp.add_widget(tab1)

            return tp
Beispiel #24
0
    def build(self):
        height = 800
        width = 1200

        settings_layout = GridLayout(cols=2)

        self.my_controller = Controller()

        self.settings_table = TableSettings(self.my_controller)
        settings_layout.add_widget(self.settings_table.get_table())
        add_button = Button(text='add', size_hint=(.09, .005))
        add_button.bind(on_press=self.add_setting)
        save_and_run = GridLayout(cols=2)
        save_button = Button(text='Save', size_hint=(.09, .005))
        save_button.bind(on_press=self.save_settings)
        run_button = Button(text='Run', size_hint=(.09, .005))
        run_button.bind(on_press=self.run_settings)
        save_and_run.add_widget(save_button)
        save_and_run.add_widget(run_button)
        settings_layout.add_widget(add_button)
        settings_layout.add_widget(save_and_run)
        settings = TabbedPanelItem(text='settings')
        settings.add_widget(settings_layout)
        tp = TabbedPanel()
        tp.add_widget(settings)

        groups_layout = GridLayout()
        groups = TabbedPanelItem(text='groups')
        groups.add_widget(groups_layout)

        tp.add_widget(groups)

        tp.set_def_tab(settings)
        Window.clearcolor = (.43, .43, .43, .01)
        Window.size = (width, height)

        return tp
Beispiel #25
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.tp_main = TabbedPanel()
        ti_pandas = TabbedPanelItem(id="ti_pandas", text="pandas")
        ti_list = TabbedPanelItem(id="ti_list", text="list")
        ti_numpy = TabbedPanelItem(id="ti_numpy", text="numpy array")

        self.qt_pandas = QzTable(id="qt_pandas")
        self.qt_list = QzTable(id="qt_list")
        self.qt_array = QzTable(id="qt_array")

        self.df_data = pd.read_csv("height_weight.csv")
        self.l_data = list()

        v = 10.0
        for y in range(1, 1000, 1):
            row = list()
            for x in range(0, 50, 1):
                v = v + 10
                row.append(v)
            self.l_data.append(row)

        self.a_data = np.array(self.l_data)
        self.qt_pandas.data = self.df_data
        self.qt_pandas.row_header_width = 300
        self.qt_list.data = self.l_data
        self.qt_array.data = self.a_data

        #setup the pandas widgets
        spinner = qzw.CellSpinner(values=('1', '2'))
        spinner.background_color = (0.3, 0.3, 0.3, 1)
        spinner.font_size = 12
        qzw.CellSpinnerOptions.BackgroundColor = (0.6, 0.6, 0.65, 1)

        text = qzw.CellTxtInput(background_color=(0.3, 0.3, 0.3, 1),
                                font_size=12)
        text.halign = "right"
        self.qt_pandas.set_widgets({0: spinner, 1: text})

        #Layout
        self.add_widget(self.tp_main)
        self.tp_main.add_widget(ti_pandas)
        ti_pandas.add_widget(self.qt_pandas)
        self.tp_main.add_widget(ti_list)
        ti_list.add_widget(self.qt_list)
        self.tp_main.add_widget(ti_numpy)
        ti_numpy.add_widget(self.qt_array)
Beispiel #26
0
    def creer(self):
        self.cours_sm = ScreenManager()
        self.cours_sm.size_hint = (1, 1)
        #menu_cours = BoxLayout(orientation="vertical", padding=40)
        menu_cours = SnsmBox(orientation="vertical", padding=40)
        boutons = GridLayout(cols=2)
        menu_cours.add_widget(boutons)

        for cours in formation_db.liste_cours_all():
            button = Button(text=str(cours),
                            color=(1, 1, 1, 1),
                            font_size=20,
                            size_hint=(1, 0.1),
                            markup=True)
            boutons.add_widget(button)
            button.bind(on_press=self.selection_cours)
        scm = Screen(name='menu_principal')
        scm.add_widget(menu_cours)
        self.cours_sm.add_widget(scm)
        self.cours_sm.current = scm.name

        # Ajout de l'écran d'accueil aux onglets
        tab = TabbedPanelItem()
        tab.text = "Accueil"
        tab.add_widget(self.cours_sm)
        self.notebook.add_widget(tab)
        self.notebook.set_def_tab(tab)
        self.accueil_tab = tab

        # Ajout de l'écran de gestion aux onglets
        tab = TabbedPanelItem()
        tab.text = "Gérer"
        tab.add_widget(GestionSCM())
        self.notebook.add_widget(tab)
        self.gestion_tab = tab

        # Ajout de l'écran d'Apropos aux onglets
        tab = TabbedPanelItem()
        tab.text = "A propos"
        tab.add_widget(Label(text="Bienvenue à la SNSM"))
        self.notebook.add_widget(tab)
        self.apropos_tab = tab

        return self
Beispiel #27
0
class LogApp(App):
    backend = backend.LogBackend()

    field_enable = backend.getEnabledFields()
    field_skip = backend.getSkipFields()

    field_widget = {}  #used to lookup text field based on name
    field_widget_reverse_dict = {
    }  #inverse dictionary used to lookup name based on text field object
    default_value_field_widget = {}
    field_auto_skip_checkbox = {}
    field_width_setting_field = {}

    color_red = [0xFF / 0xFF, 0x80 / 0xFF, 0x80 / 0xFF, 0.9]
    color_white = [1, 1, 1, 1]

    current_field_index = 0
    edit_id = 0

    def build(self):
        size = self.backend.getParameter('font_size')
        kv = self.kvConfigString(size)
        Builder.load_string(kv)
        Window.bind(on_draw=self.widthChange)
        self.main_window = BoxLayout()
        self.main_window.add_widget(self.constructMainWindow())
        return self.main_window

    def kvConfigString(self, size):
        kv = '<Root>:\n\tfont_size: dp(' + size + ')\n'
        kv = kv + '<Label>:\n\tfont_size: dp(' + size + ')\n'
        kv = kv + '<TextInput>:\n\tfont_size: dp(' + size + ')\n'
        #kv='#:set default_font_size "'+size+'dp"'
        return kv

    def getFieldHeight(self, n=1):
        return str(n * int(self.global_font_size) + 20) + 'dp'
        #return '25'

    def getFieldWidth(self, n=1):
        return str((n * int(self.global_font_size)) - 5) + 'dp'

    def constructMainWindow(self):
        self.global_font_size = self.backend.getParameter('font_size')
        self.main_tabbed_panel = TabbedPanel(do_default_tab=False,
                                             size_hint=(1, 1))
        self.main_tabbed_panel.softinput_mode = 'scale'

        #-------------- settings tab ---------------------
        settings_tab = TabbedPanelItem(text='Settings')
        sv = ScrollView(size_hint=(1, 1), effect_cls=ScrollEffect,
                        bar_width=5)  #, size=(300, 300)
        #settings_box=BoxLayout(orientation='vertical',size_hint=(1, None),spacing=10,height=1000)#height='1100dp'
        settings_box = StackLayout(orientation='lr-tb',
                                   size_hint=(1, None),
                                   height=3000)

        #-----------settings: log picker  ----------
        log_picker_box = BoxLayout(orientation='vertical',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight(3))
        log_picker_box.add_widget(Label(text='Select log', size_hint=(1, 1)))
        self.log_select_spinner = Spinner(text='default',
                                          values=('default'),
                                          size_hint=(1, 1))
        log_picker_box.add_widget(self.log_select_spinner)
        settings_box.add_widget(log_picker_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: new log ----------
        new_log_row_box = BoxLayout(orientation='horizontal',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight())
        create_log_help_button = Button(text='Create log (?)',
                                        size_hint=(0.5, 1),
                                        is_focusable=False)
        new_log_row_box.add_widget(create_log_help_button)
        create_log_help_button.bind(on_press=self.createLogHelpButtonCallback)
        self.new_log_name_field = TextInput(
            text='',
            multiline=False,
            write_tab=False,
            keyboard_suggestions=False,
            size_hint=(1, None),
            height=self.getFieldHeight(),
            on_text_validate=self.newLogButtonCallback)
        new_log_row_box.add_widget(self.new_log_name_field)
        settings_box.add_widget(new_log_row_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: info field ----------
        info_field_box = BoxLayout(orientation='horizontal',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight())
        info_field_help_button = Button(text='Info field text (?)',
                                        size_hint=(0.5, 1),
                                        is_focusable=False)
        info_field_box.add_widget(info_field_help_button)
        info_field_help_button.bind(on_press=self.infoFieldHelpButtonCallback)
        self.info_field_input = TextInput(
            text=self.backend.getParameter('info_text').replace('\n', '#'),
            multiline=False,
            write_tab=False,
            keyboard_suggestions=False,
            size_hint=(1, 1),
            on_text_validate=self.infoTextButtonCallback)
        info_field_box.add_widget(self.info_field_input)
        settings_box.add_widget(info_field_box)
        #--------------------------------

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: core log fields ----------
        settings_box.add_widget(
            Label(text='Field settings',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))

        description_box = BoxLayout(orientation='horizontal',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight())
        description_box.add_widget(
            Label(text='Field',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))

        default_field_button = Button(text='Default value (?)',
                                      size_hint=(1, None),
                                      height=self.getFieldHeight(),
                                      is_focusable=False)
        default_field_button.bind(on_press=self.callbackDefaultValueHelpPopup)
        description_box.add_widget(default_field_button)
        skip_cursor_button = Button(text='Skip (?)',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight(),
                                    is_focusable=False)
        skip_cursor_button.bind(on_press=self.callbackAutoCursorHelpPopup)
        description_box.add_widget(skip_cursor_button)

        settings_box.add_widget(description_box)

        for i in self.field_enable:
            #field label
            field_box = BoxLayout(orientation='horizontal',
                                  size_hint=(1, None),
                                  height=self.getFieldHeight())
            field_box.add_widget(
                Label(text=self.backend.getFieldLabel(i), size_hint=(1, 1)))
            #default value field
            self.default_value_field_widget[i] = TextInput(
                valign='middle',
                text=self.backend.getFieldDefault(i),
                multiline=False,
                write_tab=False,
                keyboard_suggestions=False,
                size_hint=(1, 1))
            self.default_value_field_widget[i].bind(
                on_text_validate=self.saveDefaultValues)
            field_box.add_widget(self.default_value_field_widget[i])

            #skip checkbox setup and bind
            self.field_auto_skip_checkbox[i] = CheckBox(size_hint=(1, 1))
            if i in self.field_skip:
                self.field_auto_skip_checkbox[i].active = True
            self.field_auto_skip_checkbox[i].bind(
                active=self.saveSkipCheckboxes)
            field_box.add_widget(self.field_auto_skip_checkbox[i])
            settings_box.add_widget(field_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None),
                  height=self.getFieldHeight()))  #spacer
        #-------settings: font size slider
        settings_box.add_widget(
            Label(text='Font size',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))
        fontsize_box = BoxLayout(orientation='horizontal',
                                 size_hint=(1, None),
                                 height=self.getFieldHeight())
        self.font_size_slider = Slider(min=5,
                                       max=35,
                                       value=float(self.global_font_size))
        self.font_size_slider.bind(value=self.fontSliderValueChange)
        self.font_size_label = Label(text=self.global_font_size,
                                     size_hint=(None, 1))
        fontsize_box.add_widget(self.font_size_slider)
        fontsize_box.add_widget(self.font_size_label)
        settings_box.add_widget(fontsize_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-------settings: delete log box
        delete_log_box = BoxLayout(orientation='vertical',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight(3))
        delete_log_box.add_widget(Label(text='Delete log', size_hint=(1, 1)))
        delete_log_row_box = BoxLayout(orientation='horizontal',
                                       size_hint=(1, None),
                                       height=self.getFieldHeight(1))
        self.log_delete_spinner = Spinner(text='default',
                                          values=('default'),
                                          size_hint=(1, 1))
        delete_log_row_box.add_widget(self.log_delete_spinner)

        delete_log_inner_box = BoxLayout(orientation='horizontal',
                                         size_hint=(1, None),
                                         height=self.getFieldHeight(1))
        delete_log_inner_box.add_widget(
            Label(text='Unlock',
                  halign='right',
                  size_hint=(0.5, None),
                  height=self.getFieldHeight()))
        self.unlock_delete_log_checkbox = CheckBox(size_hint=(0.5, 1))
        delete_log_inner_box.add_widget(self.unlock_delete_log_checkbox)
        delete_log_row_box.add_widget(delete_log_inner_box)

        delete_button = Button(text='Delete',
                               size_hint=(1, 1),
                               is_focusable=False)
        delete_button.bind(on_press=self.deleteButtonCallback)

        delete_log_row_box.add_widget(delete_button)
        delete_log_box.add_widget(delete_log_row_box)
        settings_box.add_widget(delete_log_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer

        #dummy spacer
        #settings_box.add_widget(Label(text='',size_hint=(1, None),height=400))

        sv.add_widget(settings_box)
        settings_tab.add_widget(sv)

        #-------------- logging tab ----------------------
        self.log_tab = TabbedPanelItem(text='Log')
        fl = FloatLayout()
        log_tab_layout = AnchorLayout(anchor_x='left', anchor_y='top')

        log_input_layout = StackLayout(orientation='lr-tb', size_hint=(1, 1))
        self.info_label = Label(text=self.backend.getParameter('info_text'),
                                size_hint=(0.3, None),
                                height=self.getFieldHeight(2))
        log_input_layout.add_widget(self.info_label)

        for i in self.field_enable:
            field_box = BoxLayout(orientation='vertical',
                                  size_hint=(None, None),
                                  width=self.getFieldWidth(
                                      self.backend.getFieldInputWidth(i)),
                                  height=self.getFieldHeight(3))
            #field_box=BoxLayout(orientation='vertical',size_hint=(self.backend.getFieldWidthHint(i),None),height=self.getFieldHeight(3))
            field_box.add_widget(
                Label(text=self.backend.getFieldLabel(i),
                      size_hint=(1, None),
                      height=self.getFieldHeight(1)))
            self.field_widget[i] = TextInput(
                text=self.backend.getFieldDefault(i),
                multiline=False,
                write_tab=False,
                keyboard_suggestions=False,
                size_hint=(1, None),
                height=self.getFieldHeight(1))
            self.field_widget_reverse_dict[self.field_widget[i]] = i
            self.field_widget[i].bind(on_text_validate=self.textFieldCallback)
            field_box.add_widget(self.field_widget[i])
            log_input_layout.add_widget(field_box)

        self.save_button = Button(text='SAVE',
                                  size_hint=(0.2, None),
                                  height=self.getFieldHeight(3),
                                  is_focusable=False)
        self.save_button.bind(on_press=self.saveButtonCallback)
        log_input_layout.add_widget(self.save_button)

        self.edit_button = Button(text='EDIT',
                                  size_hint=(None, None),
                                  height=self.getFieldHeight(3),
                                  is_focusable=False)
        self.edit_button.bind(on_press=self.editButtonCallback)
        log_input_layout.add_widget(self.edit_button)

        log_tab_layout.add_widget(log_input_layout)

        bottom_layout = AnchorLayout(anchor_x='left', anchor_y='bottom')
        s = Splitter(sizable_from='top', size_hint=(1, 0.1), min_size=25)
        bottom_layout.add_widget(s)

        sv = ScrollView(size_hint=(1, 0.5),
                        size=(300, 100),
                        effect_cls=ScrollEffect)
        self.log_list = TextInput(
            text='',
            font_size=self.backend.getParameter('font_size') + 'dp',
            font_name='DejaVuSansMono.ttf',
            size=(2000, 3000),
            size_hint=(None, None))
        sv.add_widget(self.log_list)
        s.add_widget(sv)

        fl.add_widget(log_tab_layout)
        fl.add_widget(bottom_layout)
        self.log_tab.add_widget(fl)

        #-------------- export tab ----------------------
        export_tab = TabbedPanelItem(text='Export')
        export_box = BoxLayout(orientation='vertical',
                               size_hint=(1, 0.5),
                               spacing=25)
        export_box.add_widget(
            Label(text='Select log for export', size_hint=(1, 0.3)))
        self.log_export_select_spinner = Spinner(text='default',
                                                 values=('default', 'Home',
                                                         'Work', 'Other',
                                                         'Custom'),
                                                 size_hint=(1, 0.3))
        export_box.add_widget(self.log_export_select_spinner)
        export_button = Button(text='Export to ADIF',
                               size_hint=(1, 0.3),
                               is_focusable=False)
        export_button.bind(on_press=self.exportLog)
        export_box.add_widget(export_button)
        export_tab.add_widget(export_box)
        #------------------------------------------------

        #------------- about tab ------------------------
        about_tab = TabbedPanelItem(text='About')
        about_box = BoxLayout(orientation='vertical', size_hint=(1, 1))
        about = self.backend.version_string + '\n\nby LB9MG\n\nwww.lb9mg.no\n\[email protected]\n\nLog database is stored in\n/storage/sdcard0/MG-log/mg-log.sqlite3\n\n\nTo edit an entry:\nplace the cursor on a line\n and press EDIT.'
        about_box.add_widget(
            Label(text=about, halign='center', size_hint=(1, 1)))
        about_tab.add_widget(about_box)
        #------------------------------------------------

        #adding all tabs in the right order
        self.main_tabbed_panel.add_widget(self.log_tab)
        self.main_tabbed_panel.add_widget(settings_tab)
        self.main_tabbed_panel.add_widget(export_tab)
        self.main_tabbed_panel.add_widget(about_tab)

        self.updateLogList()
        self.selectLog()
        self.log_select_spinner.bind(text=self.selectLog)
        self.backend.popupCallback = self.helpPopup
        self.field_widget[
            self.field_enable[0]].focus = True  #focus in the first field

        return self.main_tabbed_panel

    def setFontSize(self, size):
        size = str(int(self.font_size_slider.value))
        self.backend.setParameter('font_size', size)
        kv = self.kvConfigString(size)
        self.main_window.clear_widgets()
        Builder.load_string(kv)
        self.main_window.add_widget(self.constructMainWindow())

    def fontSliderValueChange(self, *dummy):
        text = str(int(self.font_size_slider.value))
        self.font_size_label.text = text
        Clock.unschedule(self.setFontSize)
        Clock.schedule_once(self.setFontSize, 1.7)

    def on_pause(self, *dummy):
        return True

    def setWhiteFieldBackground(self, *dummy):
        self.field_widget[
            self.field_enable[0]].background_color = self.color_white
        self.field_widget[self.field_enable[0]].focus = True
        return False

    def widthChange(self, *dummy):
        self.main_tabbed_panel.tab_width = 0.99 * (
            self.main_tabbed_panel.size[0] / 4)

    def infoTextButtonCallback(self, *dummy):
        text_with_newline = self.info_field_input.text.replace('#', '\n')
        self.backend.setParameter('info_text', text_with_newline)
        self.info_label.text = text_with_newline

    def exportLog(self, *dummy):
        filename = self.backend.exportLog(self.log_export_select_spinner.text)
        msg = 'Exported to file :\n' + filename
        self.helpPopup(msg, title='Export')

    def saveDefaultValues(self, *dummy):
        default_values = {}
        for i in self.default_value_field_widget:
            default_values[i] = self.default_value_field_widget[i].text
        self.backend.setParameter('field_default', json.dumps(default_values))

    def saveSkipCheckboxes(self, *dummy):
        skip_list = []
        for i in self.field_auto_skip_checkbox:
            if self.field_auto_skip_checkbox[i].active:
                skip_list.append(i)
        self.backend.setParameter('field_skip', json.dumps(skip_list))
        self.field_skip = skip_list

    def selectLog(self, *dummy):
        self.backend.selectLog(self.log_select_spinner.text)
        self.updateLog()

    def newLogButtonCallback(self, *dummy):
        name = self.new_log_name_field.text
        if len(name) > 0:
            self.backend.newLog(name)
            logs = self.backend.getLogList()
            self.log_select_spinner.values = tuple(logs)
            self.log_select_spinner.text = logs[-1]
            self.log_export_select_spinner.values = tuple(logs)
            self.log_export_select_spinner.text = logs[-1]
            self.log_delete_spinner.values = tuple(logs)
            self.log_delete_spinner.text = logs[-1]
            self.selectLog()
            self.helpPopup('New log has been created', title='New log')

    def updateLogList(self):
        logs = self.backend.getLogList()
        self.log_select_spinner.text = logs[0]
        self.log_select_spinner.values = tuple(logs)
        self.log_export_select_spinner.text = logs[0]
        self.log_export_select_spinner.values = tuple(logs)
        self.log_delete_spinner.text = logs[0]
        self.log_delete_spinner.values = tuple(logs)

    def createLogHelpButtonCallback(self, instance):
        self.helpPopup(
            'Type new log name and\npress enter when\nyou are done.')

    def infoFieldHelpButtonCallback(self, instance):
        self.helpPopup(
            'Contents of this field are shown in the log entry screen.\nYou can place your current callsign,\nQTH locator or place you are operating from.\n It can make spelling details about your station easier.\n\nUse # for newline.\n\nPress enter when\nyou are done.'
        )

    def callbackDefaultValueHelpPopup(self, instance):
        self.helpPopup(
            'It is the value that will\nbe filled by default.\n\nUse NOW for current time in the UTC field.\n\nAfter change you have to restart the application.\n\nPress enter when\nyou are done.'
        )

    def callbackAutoCursorHelpPopup(self, instance):
        self.helpPopup(
            'When you enter new QSO details\nand press ENTER the cursor will be moved\nto the next field. It will skip the fields checked below.\n\nCheck the fields that do not change often\n(eg. band and mode).\n\nAfter the last field is typed and ENTER pressed,\nthe QSO will be added to the log.\n\nChecked fields will also not be cleared after adding a QSO.'
        )

    def helpPopup(self, help_text, title='Help'):
        content = BoxLayout(orientation='vertical', size_hint=(1, 1))
        close_button = Button(text='Close',
                              size_hint=(1, 0.2),
                              is_focusable=False)
        content.add_widget(Label(text=help_text, halign='center'))
        content.add_widget(close_button)
        popup = Popup(title=title, content=content, auto_dismiss=False)
        # bind the on_press event of the button to the dismiss function
        close_button.bind(on_press=popup.dismiss)
        # open the popup
        popup.open()

    def textFieldCallback(self, *args):
        field = args[0]  #there should be only one argument
        name = self.field_widget_reverse_dict[args[0]]
        self.current_field_index = self.field_enable.index(name)
        if self.current_field_index < len(self.field_enable) - 1:
            next_index = self.findNextAvailableField(self.current_field_index)
            if next_index >= 0:
                self.field_widget[self.field_enable[next_index]].focus = True
            else:
                self.saveButtonCallback()
        else:
            self.saveButtonCallback()

    def findNextAvailableField(self, min=0):
        next_index = min
        found = False
        while next_index < len(self.field_enable) - 1:
            next_index += 1
            if self.field_enable[next_index] in self.field_skip:
                pass
            else:
                found = True
                break
        if found:
            return next_index
        else:
            return -1

    def log(self, text):
        self.log_list.text = self.log_list.text + "\n" + text

    def updateLog(self):
        widths = self.backend.getFieldWidths()
        data = self.backend.getLogEntries()
        counter_format = '|%' + str(widths['no']) + 's|'
        output_text = ''

        self.entry_id_list = []
        row_len = 0
        for row in data:
            self.entry_id_list.append(row['id'])
            output_row = counter_format % row[
                'no']  #first 'border' and qso counter
            for column in self.field_enable:
                frmt = '%' + str(widths[column]) + 's|'
                addon = frmt % row[column]
                output_row = output_row + addon
            output_text = output_text + '\n' + output_row
            row_len = len(output_row)
        last_row = '\n+'
        for i in range(1, row_len - 1):
            last_row = last_row + '-'
        last_row = last_row + '+'
        output_text = output_text + last_row
        self.entry_id_list.append(-1)  #the last row will have a magic number
        self.log_list.text = output_text[1:]  #get rid of the first newline

    def saveButtonCallback(self, *dummy_args):
        #check if the callsign is not empty
        if len(self.field_widget[self.field_enable[0]].text) < 2:
            self.field_widget[
                self.field_enable[0]].background_color = self.color_red
            self.field_widget[self.field_enable[0]].focus = True
            Clock.schedule_once(self.setWhiteFieldBackground, 0.8)
            return

        #read data from text fields
        row = []
        for i in self.field_enable:
            row.append(self.field_widget[i].text.strip())

        if self.edit_id > 0:
            self.backend.editEntry(self.edit_id, row)
        else:
            self.backend.addEntry(row)

        #restore default values
        if self.edit_id > 0:  #this was edited, restore ALL fields
            for i in self.field_enable:
                self.field_widget[i].text = self.backend.getFieldDefault(i)
        else:  #this was a new entry, selected fields
            for i in self.field_enable:
                if i not in self.field_skip:
                    self.field_widget[i].text = self.backend.getFieldDefault(i)

        #move back to the first field
        #first_index = self.findNextAvailableField(-1); #start looking from the beginning
        #if first_index >= 0:
        #    self.field_widget[self.field_enable[first_index]].focus=True

        self.updateLog()  #update log view
        self.edit_id = False
        self.field_widget[self.field_enable[0]].focus = True

    def editButtonCallback(self, *args):
        col, row = self.log_list.cursor
        if row < len(self.entry_id_list):
            self.edit_id = self.entry_id_list[row]
            if self.edit_id == -1 or self.edit_id == 0:  #if the first or the last line is 'selected' (or not selected at all) - fetch the first QSO
                self.edit_id = self.entry_id_list[1]

            if self.edit_id > 0:
                data = self.backend.getLogEntries(limit=1,
                                                  entry_id=self.edit_id)
                entry = data[0]
                for i in self.field_enable:
                    self.field_widget[i].text = entry[i]
                self.field_widget[
                    self.field_enable[0]].focus = True  #set first field focus

    def deleteButtonCallback(self, *dummy):
        if self.unlock_delete_log_checkbox.active:
            r = self.backend.deleteLog(self.log_delete_spinner.text)
            if r:
                self.helpPopup('Log has been deleted', title='Delete log')
                self.updateLogList()
                self.selectLog()
            else:
                self.helpPopup(
                    'There must be at least\none log in the database.\n\nLog has NOT been deleted',
                    title='Delete log')
Beispiel #28
0
class MainApp(App):
    def __init__(self, _GabrielClient, **kwargs):
        super().__init__(**kwargs)
        self.Client = _GabrielClient

    def build(self):
        self.GabrielPage = FloatLayout()
        self.EditPage = FloatLayout()
        self.SettingsPage = FloatLayout()

        self.MainMenu = TabbedPanel(background_color=(1, 1, 1, 1),
                                    default_tab_text='Габриэль',
                                    default_tab_content=self.GabrielPage)
        self.EditMenu = TabbedPanelItem(text='Edit')
        self.SettingsMenu = TabbedPanelItem(text='Settings')

        self.MainMenu.add_widget(self.EditMenu)
        self.MainMenu.add_widget(self.SettingsMenu)

        self.In_GabrielPage()
        self.In_EditPage()
        self.In_SettingsPage()

        return self.MainMenu

    def In_GabrielPage(self):
        self.GabrielPage.add_widget(
            Image(source='./Resurses/main.jpg', color=(1, 1, 1, 0.5)))
        self.GabrielPage.add_widget(
            Button(text="LOGIN IN",
                   on_press=self.LoginGab,
                   size_hint=(None, None),
                   size=(100, 50),
                   pos=(0, 0)))

    def In_EditPage(self):
        self.EditMenu.add_widget(self.EditPage)

        self.EditPage_InformationMenu = FloatLayout()

        self.EditPage.add_widget(self.EditPage_InformationMenu)

        self._SelectUser = Spinner(text='Не выбран',
                                   size_hint=(None, None),
                                   size=(100, 30),
                                   pos=(0, 1000),
                                   on_press=self.find_members,
                                   on_text=self.GetInfoUser)

        self.EditPage.add_widget(self._SelectUser)

    def In_SettingsPage(self):
        self.SettingsMenu.add_widget(self.SettingsPage)
        self.SettingsPage.add_widget(Label(text="Настройки типа тут будут "))

    def LoginGab(self, button):
        self.GabrielPage.remove_widget(button)
        threading.Thread(target=self.Client.run, args=(token, )).start()

    def find_members(self, _Spinner):
        if _Spinner.text == "Не выбран":
            self.Users = []
            for file in os.listdir("./Statictics/"):
                self.Users.append(
                    GabrielUser.Open(int(file.split(".gabriel")[0]),
                                     Save=False))

            _Spinner.values = tuple([str(a.Name) for a in self.Users])
            self.GetInfoUser(_Spinner)
        else:
            self.GetInfoUser(_Spinner)

    def GetInfoUser(self, _Spinner):
        Layout = GridLayout(cols=5)

        try:
            User = [user for user in self.Users
                    if user.Name == _Spinner.text][0]
        except:
            return
        for Varname in User.__dir__():

            value = User.__getattribute__(Varname)
            if type(value) in [str, int, float, bool, list, tuple]:
                ti = TextInput(text=str(value),
                               size_hint=(None, None),
                               size=(300, 50),
                               background_color=(.3, 1, .6, .7))

                ti.add_widget(Label(text=str(Varname), color=(1, 0, 0, 1)))

                Layout.add_widget(ti)

        self.EditPage_InformationMenu.add_widget(Layout)
Beispiel #29
0
    def __init__(self, df, security_name, **kwargs):
        super(Application, self).__init__(**kwargs)
        self.orientation = 'vertical'
        tab_panel = TabbedPanel()
        tab_panel.do_default_tab = False
        tab_panel.background_color = (7 / 255, 0, 13 / 255, 1)
        tab_menu = TabbedPanelItem(text="Menu")
        tab_menu.background_color = (62 / 255, 142 / 255, 222 / 255, 1)
        tab_chart = TabbedPanelItem(text='Chart')
        tab_chart.background_color = (62 / 255, 142 / 255, 222 / 255, 1)
        tab_training = TabbedPanelItem(text='Training')
        tab_training.background_color = (62 / 255, 142 / 255, 222 / 255, 1)
        tab_validate = TabbedPanelItem(text='Validate')
        tab_validate.background_color = (62 / 255, 142 / 255, 222 / 255, 1)
        tab_future = TabbedPanelItem(text='Prediction')
        tab_future.background_color = (62 / 255, 142 / 255, 222 / 255, 1)

        tab_panel.add_widget(tab_menu)
        tab_panel.add_widget(tab_chart)
        tab_panel.add_widget(tab_training)
        tab_panel.add_widget(tab_validate)
        tab_panel.add_widget(tab_future)

        tab_menu.bind(on_press=lambda x: change_screen('menu'))

        chart_layout = FloatLayout()
        fig = plot_data(df, security_name.upper(), 30, 200)
        canvas = fig.canvas
        chart_layout.add_widget(canvas)
        tab_chart.add_widget(chart_layout)

        predict_frame = FloatLayout(opacity=1)
        predict_btn = Button(text='Run Prediction',
                             background_color=(62 / 255, 142 / 255, 222 / 255,
                                               1),
                             font_size=20,
                             pos_hint={
                                 "center_x": 0.5,
                                 "bottom": 0
                             },
                             size_hint=(0.3, 0.075))

        predict_btn.bind(on_press=lambda x: start_predict(df, security_name))
        predict_frame.add_widget(predict_btn)
        chart_layout.add_widget(predict_frame)

        def start_predict(df, security_name):
            que = queue.Queue()
            par_modeling = partial(modeling, security_name=security_name)
            process = threading.Thread(
                target=lambda q, arg1: q.put(par_modeling(arg1)),
                args=(que, df),
                daemon=True)
            process.start()

            Clock.schedule_once(
                lambda *args: tab_panel.switch_to(tab_training))

            train_fig = plt.figure(facecolor='#07000d')
            train_canvas = train_fig.canvas
            train_layout = FloatLayout()
            train_layout.add_widget(train_canvas)
            tab_training.add_widget(train_layout)

            if os.path.exists('training.csv'):
                os.remove('training.csv')

            def update_plot(fig):
                train_canvas = fig.canvas
                train_layout.clear_widgets()
                train_layout.add_widget(train_canvas)
                plt.close(fig)
                # for child in train_layout.children[:1]:
                #     train_layout.remove_widget(child)
                # Clock.schedule_once(lambda *args: tab_panel.switch_to(tab_training))

            def read_training(self):
                if os.path.exists('training.csv'):
                    loss_df = None
                    try:
                        loss_df = pd.read_csv('training.csv')
                    except Exception as e:
                        print(e)
                        pass
                    if loss_df is not None:
                        train_fig = plot_loss(loss_df)
                        update_plot(train_fig)
                if not process.is_alive():
                    Clock.unschedule(read_training)
                    val_fig, future_fig = que.get()
                    val_canvas = val_fig.canvas
                    val_layout = FloatLayout()
                    val_layout.add_widget(val_canvas)
                    tab_validate.add_widget(val_layout)

                    future_canvas = future_fig.canvas
                    future_layout = FloatLayout()
                    future_layout.add_widget(future_canvas)
                    tab_future.add_widget(future_layout)

                    Clock.schedule_once(
                        lambda *args: tab_panel.switch_to(tab_validate))

            Clock.schedule_interval(read_training, 0.1)

        Clock.schedule_once(lambda *args: tab_panel.switch_to(tab_chart))

        self.add_widget(tab_panel)
Beispiel #30
0
 def create_editor_tab(self, filename=None):
     tab2 = TabbedPanelItem(text="Editor")
     editor = EditorWidget(self, tab2, filename)
     tab2.add_widget(editor)
     self.add_widget(tab2)
     self.activate_newest_tab()
Beispiel #31
0
 def create_editor_tab(self, filename = None):
     tab2 = TabbedPanelItem(text="Editor")
     editor = EditorWidget(self, tab2, filename)
     tab2.add_widget(editor)
     self.add_widget(tab2)
     self.activate_newest_tab()
Beispiel #32
0
    def finalize(self, *args):
        """Add my tabs"""
        if not self.canvas:
            Clock.schedule_once(self.finalize, 0)
            return

        deck_builder_kwargs = {
            'pos_hint': {
                'x': 0,
                'y': 0
            },
            'starting_pos_hint': {
                'x': 0.05,
                'top': 0.95
            },
            'card_size_hint': (0.3, 0.4),
            'card_hint_step': (0, -0.1),
            'deck_x_hint_step': 0.4
        }

        self._tabs = TabbedPanel(size=self.size,
                                 pos=self.pos,
                                 do_default_tab=False)
        self.bind(size=self._tabs.setter('size'), pos=self._tabs.setter('pos'))
        self.add_widget(self._tabs)

        for functyp in 'trigger', 'prereq', 'action':
            tab = TabbedPanelItem(text=functyp.capitalize())
            setattr(self, '_{}_tab'.format(functyp), tab)
            self._tabs.add_widget(getattr(self, '_{}_tab'.format(functyp)))
            builder = DeckBuilderView(**deck_builder_kwargs)
            setattr(self, '_{}_builder'.format(functyp), builder)
            builder.bind(
                decks=getattr(self, '_trigger_push_{}s'.format(functyp)))
            scroll_left = DeckBuilderScrollBar(size_hint_x=0.01,
                                               pos_hint={
                                                   'x': 0,
                                                   'y': 0
                                               },
                                               deckbuilder=builder,
                                               deckidx=0,
                                               scroll_min=0)
            setattr(self, '_scroll_left_' + functyp, scroll_left)
            scroll_right = DeckBuilderScrollBar(size_hint_x=0.01,
                                                pos_hint={
                                                    'right': 1,
                                                    'y': 0
                                                },
                                                deckbuilder=builder,
                                                deckidx=1,
                                                scroll_min=0)
            setattr(self, '_scroll_right_' + functyp, scroll_right)
            layout = FloatLayout()
            setattr(self, '_{}_layout'.format(functyp), layout)
            tab.add_widget(layout)
            layout.add_widget(builder)
            layout.add_widget(scroll_left)
            layout.add_widget(scroll_right)
            layout.add_widget(
                Label(text='Used',
                      pos_hint={
                          'center_x': 0.1,
                          'center_y': 0.98
                      },
                      size_hint=(None, None)))
            layout.add_widget(
                Label(text='Unused',
                      pos_hint={
                          'center_x': 0.5,
                          'center_y': 0.98
                      },
                      size_hint=(None, None)))
            self.bind(rule=getattr(self, '_trigger_pull_{}s'.format(functyp)))
Beispiel #33
0
class ZhonxGUIApp(App):
    
    def connect(self, instance, value):
        print('the switch', instance, 'is', value)
        if value == True:
            try:
                self.connection = serial.Serial(self.dlPort.text, self.dlBaudrate.text)
            except Exception as e:
#                 instance.active = False
                print(e)
        else:
            try:
                self.connection.close()
            except Exception as e:
#                 instance.active = True
                print(e)
    
    def build(self):
        self.availablePorts = listSerialPorts()
        if len(self.availablePorts) == 0:
            self.availablePorts.append("----")
        
        tabbedPannel = TabbedPanel(do_default_tab=False)
        
        # Connection Tab
        self.connectionTab = TabbedPanelItem(text="Connection")
        
        self.layout1 = BoxLayout(orientation='vertical', spacing=10, padding=(200, 200))
        self.connectionTab.add_widget(self.layout1)
        
        self.lblSerialSettings = Label(text="Connection settings")
        self.layout1.add_widget(self.lblSerialSettings)
        
        self.dlBaudrate = Spinner(values = ["57600", "115200", "230400", "460800", "921600"],
                                  text = "115200")
        self.layout1.add_widget(self.dlBaudrate)
        
        self.dlPort = Spinner(values = self.availablePorts,
                              text = self.availablePorts[0])
        self.layout1.add_widget(self.dlPort)
        
        self.btnConnect = Switch()
        self.btnConnect.bind(active = self.connect)
        
        self.layout1.add_widget(self.btnConnect)
        
        # Graph tab
        self.graphTab = TabbedPanelItem(text = "Graph")
#         self.layout2 = BoxLayout(orientation='vertical', spacing=10, padding=(200, 200))
#         self.graphTab.add_widget(self.layout2)
        
        graph = Graph(xlabel='X', ylabel='Y', x_ticks_minor=5,
        x_ticks_major=25, y_ticks_major=1,
        y_grid_label=True, x_grid_label=True, padding=5,
        x_grid=True, y_grid=True, xmin=-0, xmax=100, ymin=-1, ymax=1)
        plot = MeshLinePlot(color=[1, 1, 0, 1])
        plot.points = [(x, sin(x / 10.)) for x in range(0, 101)]
        graph.add_plot(plot)
        self.graphTab.add_widget(graph)
        
        
        tabbedPannel.add_widget(self.connectionTab)
        tabbedPannel.add_widget(self.graphTab)
        return tabbedPannel
Beispiel #34
0
    def finalize(self, *args):
        if self.canvas is None:
            Clock.schedule_once(self.finalize, 0)
            return

        deck_builder_kwargs = {
            'pos_hint': {
                'x': 0,
                'y': 0
            },
            'starting_pos_hint': {
                'x': 0.05,
                'top': 0.95
            },
            'card_size_hint': (0.3, 0.4),
            'card_hint_step': (0, -0.1),
            'deck_x_hint_step': 0.4
        }
        self._headline = Label(size_hint_y=0.05,
                               pos_hint={
                                   'top': 1,
                                   'center_x': 0.5
                               },
                               text=self.headline_text)
        self.bind(headline_text=self._headline.setter('text'))
        self.add_widget(self._headline)
        self._box = BoxLayout(size_hint_y=0.95, pos_hint={'top': 0.95})
        self.add_widget(self._box)
        self._list = RulesList(rulebook=self.rulebook,
                               rulesview=self,
                               size_hint_x=0.33)
        self.bind(rulebook=self._list.setter('rulebook'))
        self._box.add_widget(self._list)
        self._tabs = TabbedPanel(do_default_tab=False)
        self._box.add_widget(self._tabs)

        for functyp in 'trigger', 'prereq', 'action':
            tab = TabbedPanelItem(text=functyp.capitalize())
            setattr(self, '_{}_tab'.format(functyp), tab)
            self._tabs.add_widget(getattr(self, '_{}_tab'.format(functyp)))
            builder = DeckBuilderView(**deck_builder_kwargs)
            setattr(self, '_{}_builder'.format(functyp), builder)
            builder.bind(
                decks=getattr(self, '_trigger_push_{}s'.format(functyp)))
            scroll_left = DeckBuilderScrollBar(size_hint_x=0.01,
                                               pos_hint={
                                                   'x': 0,
                                                   'y': 0
                                               },
                                               deckbuilder=builder,
                                               deckidx=0,
                                               scroll_min=0)
            setattr(self, '_scroll_left_' + functyp, scroll_left)
            scroll_right = DeckBuilderScrollBar(size_hint_x=0.01,
                                                pos_hint={
                                                    'right': 1,
                                                    'y': 0
                                                },
                                                deckbuilder=builder,
                                                deckidx=1,
                                                scroll_min=0)
            setattr(self, '_scroll_right_' + functyp, scroll_right)
            layout = FloatLayout()
            setattr(self, '_{}_layout'.format(functyp), layout)
            tab.add_widget(layout)
            layout.add_widget(builder)
            layout.add_widget(scroll_left)
            layout.add_widget(scroll_right)
            layout.add_widget(
                Label(text='Used',
                      pos_hint={
                          'center_x': 0.1,
                          'center_y': 0.98
                      },
                      size_hint=(None, None)))
            layout.add_widget(
                Label(text='Unused',
                      pos_hint={
                          'center_x': 0.5,
                          'center_y': 0.98
                      },
                      size_hint=(None, None)))
            self.bind(rule=getattr(self, '_trigger_pull_{}s'.format(functyp)))
Beispiel #35
0
class MainBox(BoxLayout):
    '''
    Mainbox class
    '''

    def __init__(self, **kwargs):
        '''
        Init main class ui
        '''
        super(MainBox, self).__init__(**kwargs)
        self.f_size = '15sp'

        # Shape Widget
        self.shape = Shape(size_hint=(0.7, 1))
        self.add_widget(self.shape)

        # Right Menu
        self.panel = TabbedPanel(size_hint=(0.3, 1), do_default_tab=False)
        self.tab_param = TabbedPanelItem(text='Parameters')
        self.tab_color = TabbedPanelItem(text='Shape')
        self.tab_color_bg = TabbedPanelItem(text='Background')
        self.tab_export = TabbedPanelItem(text='Export')
        self.panel.add_widget(self.tab_param)
        self.panel.add_widget(self.tab_color)
        self.panel.add_widget(self.tab_color_bg)
        self.panel.add_widget(self.tab_export)

        self.menu_right = RightMenu(
            padding=15,
            orientation="vertical")

        # Switch mode line
        self.box_switch = BoxLayout(orientation='horizontal')
        self.mode_label = Label(
            text="Line mode",
            font_size=self.f_size,
            markup=True)
        self.box_switch.add_widget(self.mode_label)
        self.switch_mode = Switch(active=False)
        self.switch_mode.bind(active=self.on_switch)
        self.box_switch.add_widget(self.switch_mode)
        self.menu_right.add_widget(self.box_switch)

        # Size value
        self.box_size = BoxLayout(orientation='horizontal')
        self.size_label = Label(
            text="Shape size",
            font_size=self.f_size,
            markup=True)
        self.size_label_value = Label(
            text=str(self.shape.shape_size),
            font_size=self.f_size,
            markup=True)
        self.box_size.add_widget(self.size_label)
        self.box_size.add_widget(self.size_label_value)
        self.slider_shape_size = Slider(
            min=self.shape.property('shape_size').get_min(self.shape),
            max=self.shape.property('shape_size').get_max(self.shape),
            value=self.shape.shape_size, step=1)
        self.slider_shape_size.bind(value=self.change_shape_size)
        self.menu_right.add_widget(self.box_size)
        self.menu_right.add_widget(self.slider_shape_size)

        # Width point or line
        self.box_stroke = BoxLayout(orientation='horizontal')
        self.wdth_label = Label(
            text="Stroke width",
            font_size=self.f_size,
            markup=True)
        self.wdth_label_value = Label(
            text=str(self.shape.wdth),
            font_size=self.f_size,
            markup=True)
        self.box_stroke.add_widget(self.wdth_label)
        self.box_stroke.add_widget(self.wdth_label_value)
        self.slider_wdth = Slider(
            min=self.shape.property('wdth').get_min(self.shape),
            max=self.shape.property('wdth').get_max(self.shape),
            value=self.shape.wdth, step=1)
        self.slider_wdth.bind(value=self.change_wdth)
        self.menu_right.add_widget(self.box_stroke)
        self.menu_right.add_widget(self.slider_wdth)

        # a value
        self.box_a = BoxLayout(orientation='horizontal')
        self.a_label = Label(
            text="Param a ",
            font_size=self.f_size,
            markup=True)
        self.a_label_value = Label(
            text=str(self.shape.a),
            font_size=self.f_size,
            markup=True)
        self.box_a.add_widget(self.a_label)
        self.box_a.add_widget(self.a_label_value)
        self.slider_a = Slider(
            min=self.shape.property('a').get_min(self.shape),
            max=self.shape.property('a').get_max(self.shape),
            value=self.shape.a)
        self.slider_a.bind(value=self.change_a)
        self.menu_right.add_widget(self.box_a)
        self.menu_right.add_widget(self.slider_a)

        # b value
        self.box_b = BoxLayout(orientation='horizontal')
        self.b_label = Label(
            text="Param b ",
            font_size=self.f_size,
            markup=True)
        self.b_label_value = Label(
            text=str(self.shape.b),
            font_size=self.f_size,
            markup=True)
        self.box_b.add_widget(self.b_label)
        self.box_b.add_widget(self.b_label_value)
        self.slider_b = Slider(
            min=self.shape.property('b').get_min(self.shape),
            max=self.shape.property('b').get_max(self.shape),
            value=self.shape.b)
        self.slider_b.bind(value=self.change_b)
        self.menu_right.add_widget(self.box_b)
        self.menu_right.add_widget(self.slider_b)

        # m value
        self.box_m = BoxLayout(orientation='horizontal')
        self.m_label = Label(
            text="Param m ",
            font_size=self.f_size,
            markup=True)
        self.m_label_value = Label(
            text=str(self.shape.m),
            font_size=self.f_size,
            markup=True)
        self.box_m.add_widget(self.m_label)
        self.box_m.add_widget(self.m_label_value)
        self.slider_m = Slider(
            min=self.shape.property('m').get_min(self.shape),
            max=self.shape.property('m').get_max(self.shape),
            value=self.shape.m)
        self.slider_m.bind(value=self.change_m)
        self.menu_right.add_widget(self.box_m)
        self.menu_right.add_widget(self.slider_m)

        # n1 value
        self.box_n1 = BoxLayout(orientation='horizontal')
        self.n1_label = Label(
            text="Param n1 ",
            font_size=self.f_size,
            markup=True)
        self.n1_label_value = Label(
            text=str(self.shape.n1),
            font_size=self.f_size,
            markup=True)
        self.box_n1.add_widget(self.n1_label)
        self.box_n1.add_widget(self.n1_label_value)
        self.slider_n1 = Slider(
            min=self.shape.property('n1').get_min(self.shape),
            max=self.shape.property('n1').get_max(self.shape),
            value=self.shape.n1)
        self.slider_n1.bind(value=self.change_n1)
        self.menu_right.add_widget(self.box_n1)
        self.menu_right.add_widget(self.slider_n1)

        # n2 value
        self.box_n2 = BoxLayout(orientation='horizontal')
        self.n2_label = Label(
            text="Param n2 ",
            font_size=self.f_size,
            markup=True)
        self.n2_label_value = Label(
            text=str(self.shape.n2),
            font_size=self.f_size,
            markup=True)
        self.box_n2.add_widget(self.n2_label)
        self.box_n2.add_widget(self.n2_label_value)
        self.slider_n2 = Slider(
            min=self.shape.property('n2').get_min(self.shape),
            max=self.shape.property('n2').get_max(self.shape),
            value=self.shape.n2)
        self.slider_n2.bind(value=self.change_n2)
        self.menu_right.add_widget(self.box_n2)
        self.menu_right.add_widget(self.slider_n2)

        # n3 value
        self.box_n3 = BoxLayout(orientation='horizontal')
        self.n3_label = Label(
            text="Param n3 ",
            font_size=self.f_size,
            markup=True)
        self.n3_label_value = Label(
            text=str(self.shape.n3),
            font_size=self.f_size,
            markup=True)
        self.box_n3.add_widget(self.n3_label)
        self.box_n3.add_widget(self.n3_label_value)
        self.slider_n3 = Slider(
            min=self.shape.property('n3').get_min(self.shape),
            max=self.shape.property('n3').get_max(self.shape),
            value=self.shape.n3)
        self.slider_n3.bind(value=self.change_n3)
        self.menu_right.add_widget(self.box_n3)
        self.menu_right.add_widget(self.slider_n3)

        # Nb points
        self.box_nbp = BoxLayout(orientation='horizontal')
        self.nbp_label = Label(
            text="Points number ",
            font_size=self.f_size,
            markup=True)
        self.nbp_label_value = Label(
            text=str(self.shape.nbp),
            font_size=self.f_size,
            markup=True)
        self.box_nbp.add_widget(self.nbp_label)
        self.box_nbp.add_widget(self.nbp_label_value)
        self.slider_nbp = Slider(
            min=self.shape.property('nbp').get_min(self.shape),
            max=self.shape.property('nbp').get_max(self.shape),
            value=self.shape.nbp, step=2)
        self.slider_nbp.bind(value=self.change_nbp)
        self.menu_right.add_widget(self.box_nbp)
        self.menu_right.add_widget(self.slider_nbp)

        # Percent
        self.box_percent = BoxLayout(orientation='horizontal')
        self.percent_label = Label(
            text="Percent ",
            font_size=self.f_size,
            markup=True)
        self.percent_label_value = Label(
            text=str(self.shape.percent),
            font_size=self.f_size,
            markup=True)
        self.box_percent.add_widget(self.percent_label)
        self.box_percent.add_widget(self.percent_label_value)
        self.slider_percent = Slider(
            min=self.shape.property('percent').get_min(self.shape),
            max=self.shape.property('percent').get_max(self.shape),
            value=self.shape.percent, step=1)
        self.slider_percent.bind(value=self.change_percent)
        self.menu_right.add_widget(self.box_percent)
        self.menu_right.add_widget(self.slider_percent)

        # Travel
        self.box_travel = BoxLayout(orientation='horizontal')
        self.travel_label = Label(
            text="Travel ",
            font_size=self.f_size,
            markup=True)
        self.travel_label_value = Label(
            text=str(self.shape.travel),
            font_size=self.f_size,
            markup=True)
        self.box_travel.add_widget(self.travel_label)
        self.box_travel.add_widget(self.travel_label_value)
        self.slider_travel = Slider(
            min=self.shape.property('travel').get_min(self.shape),
            max=self.shape.property('travel').get_max(self.shape),
            value=self.shape.travel, step=2)
        self.slider_travel.bind(value=self.change_travel)
        self.menu_right.add_widget(self.box_travel)
        self.menu_right.add_widget(self.slider_travel)

        # ColorPicker for Shape
        self.picker = ColorPicker()
        self.picker.bind(color=self.on_color)

        # ColorPicker for background
        self.picker_bg = ColorPicker()
        self.picker_bg.bind(color=self.on_color_bg)

        # Export svg button
        self.export_button = Button(text='Export', size_hint=(1, 0.15))
        self.export_button.bind(on_press=self.export)

        # Tab packs
        self.tab_param.add_widget(self.menu_right)
        self.tab_color.add_widget(self.picker)
        self.tab_color_bg.add_widget(self.picker_bg)
        self.tab_export.add_widget(self.export_button)
        self.add_widget(self.panel)

        # Popups
        self.pop_export = Popup(
            title="Export file",
            content=Label(text="File exported"),
            size_hint=(None, None),
            size=(640, 240))

    def change_wdth(self, *args):
        '''
        Change stroke width
        '''
        self.shape.wdth = self.slider_wdth.value
        self.wdth_label_value.text = str(self.slider_wdth.value)

    def on_switch(self, *args):
        '''
        Switch mode line or point
        '''
        self.shape.line = self.switch_mode.active

    def on_color(self, *args):
        '''
        Shape color
        '''
        self.shape.color = self.picker.hex_color

    def on_color_bg(self, *args):
        '''
        Shape background color
        '''
        self.shape.bg_color = self.picker_bg.hex_color

    def change_shape_size(self, *args):
        '''
        Shape size
        '''
        self.shape.shape_size = self.slider_shape_size.value
        self.size_label_value.text = str(self.slider_shape_size.value)

    def change_a(self, *args):
        '''
        a value
        '''
        self.shape.a = self.slider_a.value
        self.a_label_value.text = str(self.slider_a.value)

    def change_b(self, *args):
        '''
        b value
        '''
        self.shape.b = self.slider_b.value
        self.b_label_value.text = str(self.slider_b.value)

    def change_m(self, *args):
        '''
        m value
        '''
        self.shape.m = self.slider_m.value
        self.m_label_value.text = str(self.slider_m.value)

    def change_n1(self, *args):
        '''
        n1 value
        '''
        self.shape.n1 = self.slider_n1.value
        self.n1_label_value.text = str(self.slider_n1.value)

    def change_n2(self, *args):
        '''
        n2 value
        '''
        self.shape.n2 = self.slider_n2.value
        self.n2_label_value.text = str(self.slider_n2.value)

    def change_n3(self, *args):
        '''
        n3 value
        '''
        self.shape.n3 = self.slider_n3.value
        self.n3_label_value.text = str(self.slider_n3.value)

    def change_nbp(self, *args):
        '''
        point number
        '''
        self.shape.nbp = self.slider_nbp.value
        self.nbp_label_value.text = str(self.slider_nbp.value)

    def change_percent(self, *args):
        '''
        Percent value
        '''
        self.shape.percent = self.slider_percent.value
        self.percent_label_value.text = str(self.slider_percent.value)

    def change_travel(self, *args):
        '''
        Travel number
        '''
        self.shape.travel = self.slider_travel.value
        self.travel_label_value.text = str(self.slider_travel.value)

    def export(self, *args):
        '''
        Export to svg file
        '''
        document = svgwrite.Drawing(filename='export.svg', debug=True)
        tmp = [(float("%.4g" % e)) for e in self.shape.path]
        # Export polygon
        if self.shape.line:
            svg_path = coupled(tmp)
            document.add(document.polygon(points=svg_path))
        else:  # Export points
            svg_path = coupled(coupled(tmp))
            for elem in svg_path:
                document.add(document.line(
                    start=elem[0],
                    end=elem[1]
                ))
        document.save()
        self.shape.export_to_png('export.png')
        self.pop_export.open()
Beispiel #36
0
    def build_layout(self):
        box_base = BoxLayout(orientation="vertical", padding=0)
        
        ctrl_box_haut = BoxLayout(orientation="horizontal", padding=10, size_hint_y=None)
        
        # Nom de l'individu
        ctrl_label = Label(text="[color=000000][size=28][b]%s[/b][/size][/color]" % self.dictIndividu["nomComplet"], markup=True, size_hint_y=None)
        ctrl_box_haut.add_widget(ctrl_label)
        
		# Photo
        photo = self.dictIndividu["photo"]
        if photo == None :
            if self.dictIndividu["IDcivilite"] == 1 : photo = UTILS_Images.GetTextureFromFichier("images/homme.png")
            if self.dictIndividu["IDcivilite"] in (2, 3) : photo = UTILS_Images.GetTextureFromFichier("images/femme.png")
            if self.dictIndividu["IDcivilite"] == 4 : photo = UTILS_Images.GetTextureFromFichier("images/garcon.png")
            if self.dictIndividu["IDcivilite"] == 5 : photo = UTILS_Images.GetTextureFromFichier("images/fille.png")
            
        if photo != None :
            ctrl_image = Image(texture=photo, size_hint_x=None)
            ctrl_box_haut.add_widget(ctrl_image)
		
        box_base.add_widget(ctrl_box_haut)
        
        # Onglets
        ctrl_onglets = TabbedPanel(do_default_tab=False, padding=10, tab_pos='top_left') # Vertical=left_bottom
        box_base.add_widget(ctrl_onglets)
		
        liste_onglets = [
            {"code":"messages", "titre":u"Messages"},
            {"code":"identite", "titre":u"Identité"},
            {"code":"liens", "titre":u"Liens"},
            {"code":"coordonnees", "titre":u"Coordonnées"},
            {"code":"scolarite", "titre":u"Scolarité"},
            {"code":"activites", "titre":u"Activités"},
            {"code":"medical", "titre":u"Médical"},
            ]

        for dictOnglet in liste_onglets :
            onglet = TabbedPanelItem(id=dictOnglet["code"], text=dictOnglet["titre"])
            doc = RstDocument(text=self.GetTexteOnglet(dictOnglet["code"]))
            onglet.add_widget(doc)
            ctrl_onglets.add_widget(onglet)

        # Barre d'état
        grid = GridLayout(cols=3, row=1, row_force_default=True, row_default_height=30, spacing=(5, 5), padding=10, size_hint=(1, None), height=50)
        grid.canvas.before.add(Color(0.128, 0.128, 0.128))

        def redraw(self, args):
            grid.bg_rect.size = self.size
            grid.bg_rect.pos = self.pos
        with grid.canvas.before:
            grid.bg_rect = Rectangle(pos=grid.pos, size=grid.size)
        grid.bind(pos=redraw, size=redraw)
        
        #ctrl_bouton = Button(id="consommations", text="Consommations", width=200, size_hint=(None, None))
        #grid.add_widget(ctrl_bouton)

        box_base.add_widget(grid)
        
        # Finalisation du layout
        self.add_widget(box_base)
Beispiel #37
0
    def finalize(self, *args):
        """Add my tabs"""
        if not self.canvas:
            Clock.schedule_once(self.finalize, 0)
            return

        deck_builder_kwargs = {
            'pos_hint': {'x': 0, 'y': 0},
            'starting_pos_hint': {'x': 0.05, 'top': 0.95},
            'card_size_hint': (0.3, 0.4),
            'card_hint_step': (0, -0.1),
            'deck_x_hint_step': 0.4
        }

        self._tabs = TabbedPanel(
            size=self.size,
            pos=self.pos,
            do_default_tab=False
        )
        self.bind(
            size=self._tabs.setter('size'),
            pos=self._tabs.setter('pos')
        )
        self.add_widget(self._tabs)

        for functyp in 'trigger', 'prereq', 'action':
            tab = TabbedPanelItem(text=functyp.capitalize())
            setattr(self, '_{}_tab'.format(functyp), tab)
            self._tabs.add_widget(getattr(self, '_{}_tab'.format(functyp)))
            builder = DeckBuilderView(**deck_builder_kwargs)
            setattr(self, '_{}_builder'.format(functyp), builder)
            builder.bind(decks=getattr(self, '_trigger_push_{}s'.format(functyp)))
            scroll_left = DeckBuilderScrollBar(
                size_hint_x=0.01,
                pos_hint={'x': 0, 'y': 0},
                deckbuilder=builder,
                deckidx=0,
                scroll_min=0
            )
            setattr(self, '_scroll_left_' + functyp, scroll_left)
            scroll_right = DeckBuilderScrollBar(
                size_hint_x=0.01,
                pos_hint={'right': 1, 'y': 0},
                deckbuilder=builder,
                deckidx=1,
                scroll_min=0
            )
            setattr(self, '_scroll_right_' + functyp, scroll_right)
            layout = FloatLayout()
            setattr(self, '_{}_layout'.format(functyp), layout)
            tab.add_widget(layout)
            layout.add_widget(builder)
            layout.add_widget(scroll_left)
            layout.add_widget(scroll_right)
            layout.add_widget(
                Label(
                    text='Used',
                    pos_hint={'center_x': 0.1, 'center_y': 0.98},
                    size_hint=(None, None)
                )
            )
            layout.add_widget(
                Label(
                    text='Unused',
                    pos_hint={'center_x': 0.5, 'center_y': 0.98},
                    size_hint=(None, None)
                )
            )
            self.bind(rule=getattr(self, '_trigger_pull_{}s'.format(functyp)))
Beispiel #38
0
class GameScreen(Screen):
    # on_enter is used instead of __init__ as we require SelectableGrid.chosen to be not empty and contain the names of the three Pokemon selected by the player.
    def on_enter(self):
        # Start by bringing in the global dictionary pokemon_info
        global pokemon_info
        # Initiate variables for the Pokemon chosen by the player, number of Pokemon beaten, number of trainers beaten, and possible Pokemon that can be generated.
        player_pokemon = SelectableGrid.chosen
        self.btn = SoundLoader.load('assets/button.wav')
        self.pkm_beaten = 0
        self.yours_beaten = 0
        self.trainers_beaten = 0
        self.pbl_images = [
            'assets/threeballs.png', 'assets/twoballs.png',
            'assets/oneball.png'
        ]
        self.possible_pokemon = list(pokemon_info.keys())
        # Create three variables, each one an instance of the Pokemon class, as well as randomize an opposing Pokemon from the pool of Pokemon as an instance of the Pokemon class.
        self.pkm1, self.pkm2, self.pkm3 = Pokemon(player_pokemon[0]), Pokemon(
            player_pokemon[1]), Pokemon(player_pokemon[2])
        self.opkm = Pokemon(random.choice(self.possible_pokemon))
        # Simulating a DS, our layout will start with the BoxLayout in vertical form.
        self.layout = BoxLayout(orientation='vertical')
        # self.top_screen displays the information for the player, including the current and max HP of both Pokemon, their levels, names, sprites.
        self.top_screen = GridLayout(cols=2, rows=2, size_hint=(1, 0.7))
        # Sets up and displays the opposing Pokemon's name, health, and level.
        self.opponent_info = GridLayout(cols=1, rows=3, size_hint=(1, 0.5))
        self.opponent_name_level = Label(text=self.opkm.name + '   Lv50',
                                         font_size=18,
                                         valign='middle',
                                         halign='left')
        self.opponent_info.add_widget(self.opponent_name_level)
        self.opponent_hp = Label(text=str(self.opkm.chp) + '/' +
                                 str(self.opkm.maxhp),
                                 font_size=16,
                                 valign='top')
        self.opponent_info.add_widget(self.opponent_hp)
        self.opponent_pkm_left = Image(source=self.pbl_images[self.pkm_beaten])
        self.opponent_info.add_widget(self.opponent_pkm_left)
        self.top_screen.add_widget(self.opponent_info)
        # Displays the image for both Pokemon.
        self.oimg = Image(source=self.opkm.imgf)
        self.top_screen.add_widget(self.oimg)
        self.mimg = Image(source=self.pkm1.imgb)
        self.top_screen.add_widget(self.mimg)
        # Sets up and displays my Pokemon's name, health, and level.
        self.my_info = GridLayout(cols=1, rows=3, size_hint=(1, 0.5))
        self.my_name_level = Label(text=self.pkm1.name + '   Lv50',
                                   font_size=18,
                                   valign='middle',
                                   halign='left')
        self.my_info.add_widget(self.my_name_level)
        self.my_hp = Label(text=str(self.pkm1.chp) + '/' +
                           str(self.pkm1.maxhp),
                           font_size=16,
                           valign='top')
        self.my_info.add_widget(self.my_hp)
        self.my_pkm_left = Image(source=self.pbl_images[self.yours_beaten])
        self.my_info.add_widget(self.my_pkm_left)
        # Add the whole of the top screen into the main layout.
        self.top_screen.add_widget(self.my_info)
        self.layout.add_widget(self.top_screen)
        # Create and add a label that shows the progress of the battle, which will be constantly updated as the user takes action.
        self.textbox = Label(text='Battle progress shows up here!',
                             font_size=14,
                             valign='top',
                             halign='center',
                             size_hint=(1, 0.3))
        self.layout.add_widget(self.textbox)
        # The bottom screen will allow the user to put in their actions. In our case, we do not need the 'Bag' and 'Run' tab from the original Pokemon game, so a TabbedPanel spanning two tab items would suffice.
        self.btm_screen = TabbedPanel(do_default_tab=False, tab_width=250)
        # Add in our tabs, either to fight or to switch out.
        self.fight_tab = TabbedPanelItem(text='Fight')
        self.switch_tab = TabbedPanelItem(text='Pokemon')
        # Creating the page for using a move, which is selected initially
        self.fight_page = GridLayout(cols=2,
                                     col_default_width=250,
                                     col_force_default=True,
                                     row_default_height=150,
                                     row_force_default=True)
        # Initializing the moves for all three Pokemon.
        self.pkm1_moves = pokemon_info[self.pkm1.name]['moves']
        self.pkm2_moves = pokemon_info[self.pkm2.name]['moves']
        self.pkm3_moves = pokemon_info[self.pkm3.name]['moves']
        # Adding buttons for each move the Pokemon has.
        self.move1_btn = Button(
            text=self.pkm1_moves[0] + '\n' + 'PP: ' +
            str(self.pkm1.this_moveset[self.pkm1_moves[0]]['cPP']) + '/' +
            str(self.pkm1.this_moveset[self.pkm1_moves[0]]['PP']) + '\n' +
            'Type: ' + str(self.pkm1.this_moveset[self.pkm1_moves[0]]['Type']),
            font_size=16,
            halign='center',
            on_press=self.use_attack)
        self.move2_btn = Button(
            text=self.pkm1_moves[1] + '\n' + 'PP: ' +
            str(self.pkm1.this_moveset[self.pkm1_moves[1]]['cPP']) + '/' +
            str(self.pkm1.this_moveset[self.pkm1_moves[1]]['PP']) + '\n' +
            'Type: ' + str(self.pkm1.this_moveset[self.pkm1_moves[1]]['Type']),
            font_size=16,
            halign='center',
            on_press=self.use_attack)
        self.move3_btn = Button(
            text=self.pkm1_moves[2] + '\n' + 'PP: ' +
            str(self.pkm1.this_moveset[self.pkm1_moves[2]]['cPP']) + '/' +
            str(self.pkm1.this_moveset[self.pkm1_moves[2]]['PP']) + '\n' +
            'Type: ' + str(self.pkm1.this_moveset[self.pkm1_moves[2]]['Type']),
            font_size=16,
            halign='center',
            on_press=self.use_attack)
        self.move4_btn = Button(
            text=self.pkm1_moves[3] + '\n' + 'PP: ' +
            str(self.pkm1.this_moveset[self.pkm1_moves[3]]['cPP']) + '/' +
            str(self.pkm1.this_moveset[self.pkm1_moves[3]]['PP']) + '\n' +
            'Type: ' + str(self.pkm1.this_moveset[self.pkm1_moves[3]]['Type']),
            font_size=16,
            halign='center',
            on_press=self.use_attack)
        self.fight_page.add_widget(self.move1_btn)
        self.fight_page.add_widget(self.move2_btn)
        self.fight_page.add_widget(self.move3_btn)
        self.fight_page.add_widget(self.move4_btn)
        self.fight_tab.add_widget(self.fight_page)
        # Creating the page to switch out.
        self.switch_page = BoxLayout(orientation='horizontal')
        # Display the names of the other two Pokemon as well as their HP.
        self.pkm1_btn = Button(text=self.pkm2.name + '\n' +
                               str(self.pkm2.chp) + '/' + str(self.pkm2.maxhp),
                               font_size=16,
                               halign='center',
                               on_press=self.switch1)
        self.pkm2_btn = Button(text=self.pkm3.name + '\n' +
                               str(self.pkm3.chp) + '/' + str(self.pkm3.maxhp),
                               font_size=16,
                               halign='center',
                               on_press=self.switch2)
        self.switch_page.add_widget(self.pkm1_btn)
        self.switch_page.add_widget(self.pkm2_btn)
        self.switch_tab.add_widget(self.switch_page)
        self.btm_screen.add_widget(self.fight_tab)
        self.btm_screen.add_widget(self.switch_tab)
        # Add the bottom screen into the layout, and add the layout into the screen.
        self.layout.add_widget(self.btm_screen)
        self.add_widget(self.layout)

    # When a transition happens from this screen to the selection screen, remove all widgets so that on_enter does not create a second layer of widgets.
    def on_leave(self):
        self.clear_widgets()

    # The switch function for both Pokemon slots. Checks if the current HP of Pokemon to switch to is 0, if so, do not allow the switch.
    def switch1(self, instance):
        self.btn.play()
        if self.pkm2.chp == 0:
            SimplePopup.open(self, 'This Pokemon has fainted!')
        else:
            self.pkm1, self.pkm2 = self.pkm2, self.pkm1
            self.update()
            self.btm_screen.switch_to(self.fight_tab)

    def switch2(self, instance):
        self.btn.play()
        if self.pkm3.chp == 0:
            SimplePopup.open(self, 'This Pokemon has fainted!')
        else:
            self.pkm1, self.pkm3 = self.pkm3, self.pkm1
            self.update()
            self.btm_screen.switch_to(self.fight_tab)

    # Binded to each button with a move, this function is called whenever an attack is used.
    def use_attack(self, instance):
        # Check if the using Pokemon is fainted first, and prompt the user to switch out of it is.
        self.btn.play()
        if self.pkm1.chp == 0:
            SimplePopup.open(
                self, 'Your current Pokemon has fainted, please switch out!')
        else:
            # Take the text in the button and split it so we can take the first word, the name of the move.
            move = instance.text.split('\n')[0]
            # Call use_move from the Pokemon class to execute the move.
            self.pkm1.use_move(self.opkm, move, self)
            # If the opposing Pokemon faints, increase pkm_beaten by 1.
            if self.opkm.chp == 0:
                self.pkm_beaten += 1
                # If three consecutive defeats have happened, change pkm_beaten to 0, and add 1 to trainer beaten. Restore health and PP to all the player's Pokemon, and display a prompt that tells the player that their Pokemon are restored, as well as the number of trainers beaten.
                if self.pkm_beaten == 3:
                    self.yours_beaten = 0
                    self.pkm_beaten = 0
                    self.trainers_beaten += 1
                    self.pkm1.chp = self.pkm1.maxhp
                    self.pkm2.chp = self.pkm2.maxhp
                    self.pkm3.chp = self.pkm3.maxhp
                    for i in range(4):
                        self.pkm1.this_moveset[self.pkm1_moves[i]][
                            'cPP'] = self.pkm1.this_moveset[
                                self.pkm1_moves[i]]['PP']
                        self.pkm2.this_moveset[self.pkm2_moves[i]][
                            'cPP'] = self.pkm2.this_moveset[
                                self.pkm2_moves[i]]['PP']
                        self.pkm3.this_moveset[self.pkm3_moves[i]][
                            'cPP'] = self.pkm3.this_moveset[
                                self.pkm3_moves[i]]['PP']
                    SimplePopup.open(
                        self,
                        'You\'ve beaten a trainer!\nYour Pokemon will now be fully healed.\n'
                        + 'Trainers Beaten: ' + str(self.trainers_beaten))
                # Randomize a new Pokemon for the opponent, and also preventing it from being the last Pokemon to prevent duplicates.
                self.opkm = Pokemon(
                    random.choice([
                        x for x in self.possible_pokemon if x != self.opkm.name
                    ]))
            # Call the update function.
            self.update()

    # The update function updates the game state. After each move or switchout, it will change everything as necessary, be it the health of both Pokemon, the sprites displayed, the moves available for your Pokemon, and PP of the moves, etc.
    def update(self):
        # If all the player's Pokemon are fainted, that means the player loses, sadly. Allow the player to restart their run with new Pokemon by bringing them back to the selection screen. Note that the on_leave function is also called to clear all the widgets.
        if self.yours_beaten == 3:
            self.yours_beaten = 0
            SimplePopup.open(
                self,
                'All your Pokemon have fainted!\nYou will be brought to the selection screen to restart your run.'
            )
            self.manager.transition = NoTransition()
            self.manager.current = 'selection'
        self.opponent_name_level.text = self.opkm.name + '   Lv50'
        self.opponent_hp.text = str(self.opkm.chp) + '/' + str(self.opkm.maxhp)
        self.oimg.source = self.opkm.imgf
        self.mimg.source = self.pkm1.imgb
        self.my_name_level.text = self.pkm1.name + '   Lv50'
        self.my_hp.text = str(self.pkm1.chp) + '/' + str(self.pkm1.maxhp)
        self.pkm1_moves = pokemon_info[self.pkm1.name]['moves']
        self.move1_btn.text = self.pkm1_moves[0] + '\n' + 'PP: ' + str(
            self.pkm1.this_moveset[self.pkm1_moves[0]]['cPP']) + '/' + str(
                self.pkm1.this_moveset[
                    self.pkm1_moves[0]]['PP']) + '\n' + 'Type: ' + str(
                        self.pkm1.this_moveset[self.pkm1_moves[0]]['Type'])
        self.move2_btn.text = self.pkm1_moves[1] + '\n' + 'PP: ' + str(
            self.pkm1.this_moveset[self.pkm1_moves[1]]['cPP']) + '/' + str(
                self.pkm1.this_moveset[
                    self.pkm1_moves[1]]['PP']) + '\n' + 'Type: ' + str(
                        self.pkm1.this_moveset[self.pkm1_moves[1]]['Type'])
        self.move3_btn.text = self.pkm1_moves[2] + '\n' + 'PP: ' + str(
            self.pkm1.this_moveset[self.pkm1_moves[2]]['cPP']) + '/' + str(
                self.pkm1.this_moveset[
                    self.pkm1_moves[2]]['PP']) + '\n' + 'Type: ' + str(
                        self.pkm1.this_moveset[self.pkm1_moves[2]]['Type'])
        self.move4_btn.text = self.pkm1_moves[3] + '\n' + 'PP: ' + str(
            self.pkm1.this_moveset[self.pkm1_moves[3]]['cPP']) + '/' + str(
                self.pkm1.this_moveset[
                    self.pkm1_moves[3]]['PP']) + '\n' + 'Type: ' + str(
                        self.pkm1.this_moveset[self.pkm1_moves[3]]['Type'])
        self.pkm1_btn.text = self.pkm2.name + '\n' + str(
            self.pkm2.chp) + '/' + str(self.pkm2.maxhp)
        self.pkm2_btn.text = self.pkm3.name + '\n' + str(
            self.pkm3.chp) + '/' + str(self.pkm3.maxhp)
        self.pkm1_moves = pokemon_info[self.pkm1.name]['moves']
        self.pkm2_moves = pokemon_info[self.pkm2.name]['moves']
        self.pkm3_moves = pokemon_info[self.pkm3.name]['moves']
        self.opponent_pkm_left.source = self.pbl_images[self.pkm_beaten]
        self.my_pkm_left.source = self.pbl_images[self.yours_beaten]
        if self.pkm1.chp == 0:
            self.btm_screen.switch_to(self.switch_tab)
Beispiel #39
0
    def constructMainWindow(self):
        self.global_font_size = self.backend.getParameter('font_size')
        self.main_tabbed_panel = TabbedPanel(do_default_tab=False,
                                             size_hint=(1, 1))
        self.main_tabbed_panel.softinput_mode = 'scale'

        #-------------- settings tab ---------------------
        settings_tab = TabbedPanelItem(text='Settings')
        sv = ScrollView(size_hint=(1, 1), effect_cls=ScrollEffect,
                        bar_width=5)  #, size=(300, 300)
        #settings_box=BoxLayout(orientation='vertical',size_hint=(1, None),spacing=10,height=1000)#height='1100dp'
        settings_box = StackLayout(orientation='lr-tb',
                                   size_hint=(1, None),
                                   height=3000)

        #-----------settings: log picker  ----------
        log_picker_box = BoxLayout(orientation='vertical',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight(3))
        log_picker_box.add_widget(Label(text='Select log', size_hint=(1, 1)))
        self.log_select_spinner = Spinner(text='default',
                                          values=('default'),
                                          size_hint=(1, 1))
        log_picker_box.add_widget(self.log_select_spinner)
        settings_box.add_widget(log_picker_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: new log ----------
        new_log_row_box = BoxLayout(orientation='horizontal',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight())
        create_log_help_button = Button(text='Create log (?)',
                                        size_hint=(0.5, 1),
                                        is_focusable=False)
        new_log_row_box.add_widget(create_log_help_button)
        create_log_help_button.bind(on_press=self.createLogHelpButtonCallback)
        self.new_log_name_field = TextInput(
            text='',
            multiline=False,
            write_tab=False,
            keyboard_suggestions=False,
            size_hint=(1, None),
            height=self.getFieldHeight(),
            on_text_validate=self.newLogButtonCallback)
        new_log_row_box.add_widget(self.new_log_name_field)
        settings_box.add_widget(new_log_row_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: info field ----------
        info_field_box = BoxLayout(orientation='horizontal',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight())
        info_field_help_button = Button(text='Info field text (?)',
                                        size_hint=(0.5, 1),
                                        is_focusable=False)
        info_field_box.add_widget(info_field_help_button)
        info_field_help_button.bind(on_press=self.infoFieldHelpButtonCallback)
        self.info_field_input = TextInput(
            text=self.backend.getParameter('info_text').replace('\n', '#'),
            multiline=False,
            write_tab=False,
            keyboard_suggestions=False,
            size_hint=(1, 1),
            on_text_validate=self.infoTextButtonCallback)
        info_field_box.add_widget(self.info_field_input)
        settings_box.add_widget(info_field_box)
        #--------------------------------

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-----------settings: core log fields ----------
        settings_box.add_widget(
            Label(text='Field settings',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))

        description_box = BoxLayout(orientation='horizontal',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight())
        description_box.add_widget(
            Label(text='Field',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))

        default_field_button = Button(text='Default value (?)',
                                      size_hint=(1, None),
                                      height=self.getFieldHeight(),
                                      is_focusable=False)
        default_field_button.bind(on_press=self.callbackDefaultValueHelpPopup)
        description_box.add_widget(default_field_button)
        skip_cursor_button = Button(text='Skip (?)',
                                    size_hint=(1, None),
                                    height=self.getFieldHeight(),
                                    is_focusable=False)
        skip_cursor_button.bind(on_press=self.callbackAutoCursorHelpPopup)
        description_box.add_widget(skip_cursor_button)

        settings_box.add_widget(description_box)

        for i in self.field_enable:
            #field label
            field_box = BoxLayout(orientation='horizontal',
                                  size_hint=(1, None),
                                  height=self.getFieldHeight())
            field_box.add_widget(
                Label(text=self.backend.getFieldLabel(i), size_hint=(1, 1)))
            #default value field
            self.default_value_field_widget[i] = TextInput(
                valign='middle',
                text=self.backend.getFieldDefault(i),
                multiline=False,
                write_tab=False,
                keyboard_suggestions=False,
                size_hint=(1, 1))
            self.default_value_field_widget[i].bind(
                on_text_validate=self.saveDefaultValues)
            field_box.add_widget(self.default_value_field_widget[i])

            #skip checkbox setup and bind
            self.field_auto_skip_checkbox[i] = CheckBox(size_hint=(1, 1))
            if i in self.field_skip:
                self.field_auto_skip_checkbox[i].active = True
            self.field_auto_skip_checkbox[i].bind(
                active=self.saveSkipCheckboxes)
            field_box.add_widget(self.field_auto_skip_checkbox[i])
            settings_box.add_widget(field_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None),
                  height=self.getFieldHeight()))  #spacer
        #-------settings: font size slider
        settings_box.add_widget(
            Label(text='Font size',
                  size_hint=(1, None),
                  height=self.getFieldHeight()))
        fontsize_box = BoxLayout(orientation='horizontal',
                                 size_hint=(1, None),
                                 height=self.getFieldHeight())
        self.font_size_slider = Slider(min=5,
                                       max=35,
                                       value=float(self.global_font_size))
        self.font_size_slider.bind(value=self.fontSliderValueChange)
        self.font_size_label = Label(text=self.global_font_size,
                                     size_hint=(None, 1))
        fontsize_box.add_widget(self.font_size_slider)
        fontsize_box.add_widget(self.font_size_label)
        settings_box.add_widget(fontsize_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer
        #-------settings: delete log box
        delete_log_box = BoxLayout(orientation='vertical',
                                   size_hint=(1, None),
                                   height=self.getFieldHeight(3))
        delete_log_box.add_widget(Label(text='Delete log', size_hint=(1, 1)))
        delete_log_row_box = BoxLayout(orientation='horizontal',
                                       size_hint=(1, None),
                                       height=self.getFieldHeight(1))
        self.log_delete_spinner = Spinner(text='default',
                                          values=('default'),
                                          size_hint=(1, 1))
        delete_log_row_box.add_widget(self.log_delete_spinner)

        delete_log_inner_box = BoxLayout(orientation='horizontal',
                                         size_hint=(1, None),
                                         height=self.getFieldHeight(1))
        delete_log_inner_box.add_widget(
            Label(text='Unlock',
                  halign='right',
                  size_hint=(0.5, None),
                  height=self.getFieldHeight()))
        self.unlock_delete_log_checkbox = CheckBox(size_hint=(0.5, 1))
        delete_log_inner_box.add_widget(self.unlock_delete_log_checkbox)
        delete_log_row_box.add_widget(delete_log_inner_box)

        delete_button = Button(text='Delete',
                               size_hint=(1, 1),
                               is_focusable=False)
        delete_button.bind(on_press=self.deleteButtonCallback)

        delete_log_row_box.add_widget(delete_button)
        delete_log_box.add_widget(delete_log_row_box)
        settings_box.add_widget(delete_log_box)

        settings_box.add_widget(
            Label(text='', size_hint=(1, None), height='25sp'))  #spacer

        #dummy spacer
        #settings_box.add_widget(Label(text='',size_hint=(1, None),height=400))

        sv.add_widget(settings_box)
        settings_tab.add_widget(sv)

        #-------------- logging tab ----------------------
        self.log_tab = TabbedPanelItem(text='Log')
        fl = FloatLayout()
        log_tab_layout = AnchorLayout(anchor_x='left', anchor_y='top')

        log_input_layout = StackLayout(orientation='lr-tb', size_hint=(1, 1))
        self.info_label = Label(text=self.backend.getParameter('info_text'),
                                size_hint=(0.3, None),
                                height=self.getFieldHeight(2))
        log_input_layout.add_widget(self.info_label)

        for i in self.field_enable:
            field_box = BoxLayout(orientation='vertical',
                                  size_hint=(None, None),
                                  width=self.getFieldWidth(
                                      self.backend.getFieldInputWidth(i)),
                                  height=self.getFieldHeight(3))
            #field_box=BoxLayout(orientation='vertical',size_hint=(self.backend.getFieldWidthHint(i),None),height=self.getFieldHeight(3))
            field_box.add_widget(
                Label(text=self.backend.getFieldLabel(i),
                      size_hint=(1, None),
                      height=self.getFieldHeight(1)))
            self.field_widget[i] = TextInput(
                text=self.backend.getFieldDefault(i),
                multiline=False,
                write_tab=False,
                keyboard_suggestions=False,
                size_hint=(1, None),
                height=self.getFieldHeight(1))
            self.field_widget_reverse_dict[self.field_widget[i]] = i
            self.field_widget[i].bind(on_text_validate=self.textFieldCallback)
            field_box.add_widget(self.field_widget[i])
            log_input_layout.add_widget(field_box)

        self.save_button = Button(text='SAVE',
                                  size_hint=(0.2, None),
                                  height=self.getFieldHeight(3),
                                  is_focusable=False)
        self.save_button.bind(on_press=self.saveButtonCallback)
        log_input_layout.add_widget(self.save_button)

        self.edit_button = Button(text='EDIT',
                                  size_hint=(None, None),
                                  height=self.getFieldHeight(3),
                                  is_focusable=False)
        self.edit_button.bind(on_press=self.editButtonCallback)
        log_input_layout.add_widget(self.edit_button)

        log_tab_layout.add_widget(log_input_layout)

        bottom_layout = AnchorLayout(anchor_x='left', anchor_y='bottom')
        s = Splitter(sizable_from='top', size_hint=(1, 0.1), min_size=25)
        bottom_layout.add_widget(s)

        sv = ScrollView(size_hint=(1, 0.5),
                        size=(300, 100),
                        effect_cls=ScrollEffect)
        self.log_list = TextInput(
            text='',
            font_size=self.backend.getParameter('font_size') + 'dp',
            font_name='DejaVuSansMono.ttf',
            size=(2000, 3000),
            size_hint=(None, None))
        sv.add_widget(self.log_list)
        s.add_widget(sv)

        fl.add_widget(log_tab_layout)
        fl.add_widget(bottom_layout)
        self.log_tab.add_widget(fl)

        #-------------- export tab ----------------------
        export_tab = TabbedPanelItem(text='Export')
        export_box = BoxLayout(orientation='vertical',
                               size_hint=(1, 0.5),
                               spacing=25)
        export_box.add_widget(
            Label(text='Select log for export', size_hint=(1, 0.3)))
        self.log_export_select_spinner = Spinner(text='default',
                                                 values=('default', 'Home',
                                                         'Work', 'Other',
                                                         'Custom'),
                                                 size_hint=(1, 0.3))
        export_box.add_widget(self.log_export_select_spinner)
        export_button = Button(text='Export to ADIF',
                               size_hint=(1, 0.3),
                               is_focusable=False)
        export_button.bind(on_press=self.exportLog)
        export_box.add_widget(export_button)
        export_tab.add_widget(export_box)
        #------------------------------------------------

        #------------- about tab ------------------------
        about_tab = TabbedPanelItem(text='About')
        about_box = BoxLayout(orientation='vertical', size_hint=(1, 1))
        about = self.backend.version_string + '\n\nby LB9MG\n\nwww.lb9mg.no\n\[email protected]\n\nLog database is stored in\n/storage/sdcard0/MG-log/mg-log.sqlite3\n\n\nTo edit an entry:\nplace the cursor on a line\n and press EDIT.'
        about_box.add_widget(
            Label(text=about, halign='center', size_hint=(1, 1)))
        about_tab.add_widget(about_box)
        #------------------------------------------------

        #adding all tabs in the right order
        self.main_tabbed_panel.add_widget(self.log_tab)
        self.main_tabbed_panel.add_widget(settings_tab)
        self.main_tabbed_panel.add_widget(export_tab)
        self.main_tabbed_panel.add_widget(about_tab)

        self.updateLogList()
        self.selectLog()
        self.log_select_spinner.bind(text=self.selectLog)
        self.backend.popupCallback = self.helpPopup
        self.field_widget[
            self.field_enable[0]].focus = True  #focus in the first field

        return self.main_tabbed_panel