Пример #1
0
class ModalEdit(ModalView):
    def __init__(self, root):
        super(ModalEdit, self).__init__()
        menu_items = [{
            "text": str(i[1])
        } for i in root.DB.type_name_db.select_all()]
        self.root_app = root
        self.menu = MDDropdownMenu(
            caller=self.ids.p_type,
            items=menu_items,
            position="bottom",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_item)

    def ok_sw(self, root_app):
        name = self.ids.name.text
        p_type = self.ids.p_type.text
        about = self.ids.about.text
        price = self.ids.price.text
        root_app.DB.product_db.insert_date(
            ('name', 'p_type', 'about', 'price'), (name, p_type, about, price))
        self.dismiss()

    def set_item(self, instance_menu, instance_menu_item):
        def set_item(interval):
            assert interval == interval
            self.ids.p_type.text = instance_menu_item.text
            instance_menu.dismiss()

        Clock.schedule_once(set_item, 0.5)
Пример #2
0
class Test(MDApp):
    submenu = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_string(KV)
        menu_items = [{
            "icon": "git",
            "text": f"Item {i}" if i != 3 else "Open submenu",
        } for i in range(5)]
        self.menu = CustomDrop(caller=self.screen.ids.button,
                               items=menu_items,
                               width_mult=4,
                               selected_color=self.theme_cls.bg_darkest)
        self.menu.bind(on_enter=self.check_item)

    def check_item(self, menu, item):
        if item.text == "Open submenu" and not self.submenu:
            menu_items = [{"text": f"Item {i}"} for i in range(5)]
            self.submenu = MDDropdownMenu(
                caller=item,
                items=menu_items,
                width_mult=4,
                selected_color=self.theme_cls.bg_darkest,
            )
            self.submenu.bind(on_dismiss=self.set_state_submenu)
            self.submenu.open()

    def set_state_submenu(self, *args):
        self.submenu = None

    def build(self):
        return self.screen
 def create_dropdown(self, caller, item):
     menu = MDDropdownMenu(caller=caller,
                           items=item,
                           position='bottom',
                           width_mult=20)
     menu.bind()
     return menu
Пример #4
0
class Consulta(Screen):
    data_tables: MDDataTable

    def __init__(self, **kwargs):
        super(Consulta, self).__init__()

    def menu_p(self):
        menu_items = [{
            "text": "Ingreso Movimientos"
        }, {
            "text": "Consulta de Movimientos"
        }, {
            "text": "Salir"
        }]

        self.menu = MDDropdownMenu(caller=self.ids.button,
                                   items=menu_items,
                                   width_mult=5,
                                   callback=self.menu_callback)
        self.menu.bind(on_release=self.menu_callback)
        self.menu.open()

    def menu_callback(self, instance):
        opcion = instance

        if opcion.text == "Ingreso Movimientos":
            self.manager.current = 'Ingresos'

        else:
            print("Opcion seleccionada es :", opcion.text)

    def habre_md_table(self):
        Fun_Consultas.md_table(self)
Пример #5
0
class MainApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_file("test.kv")

        menu_items = [{
            "viewclass": "MDDropDownItem",
            "icon": "git",
            "text": f"Item {i}",
            "height": dp(56),
            "on_release": lambda x=f"Item {i}": self.set_item(x),
        } for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.screen.ids.from_currency,
            items=menu_items,
            position="center",
            width_mult=4,
        )
        self.menu.bind()

    def set_item(self, text_item):
        self.screen.ids.from_currency.set_item(text_item)
        self.menu.dismiss()

    def build(self):

        self.theme.cls.primary_palette = "BlueGray"
        self.theme.cls.theme_style = "Dark"

        return self.screen
 def create_dropdown(self, caller, item, callback):
     menu = MDDropdownMenu(caller=caller,
                           items=item,
                           position="center",
                           width_mult=20)
     menu.bind(on_release=callback)
     return menu
Пример #7
0
class SettingsScreen(MDBottomNavigationItem):
    '''Contains content for choosing a theme and interface language'''
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.theme_colors = {}
        for name_theme in palette:
            self.theme_colors[name_theme] = get_color_from_hex(
                colors[name_theme]['500'])
        self.language_menu = None
        self.languages = [{
            'icon': 'images/rus.png',
            'text': 'Русский'
        }, {
            'icon': 'images/eng.png',
            'text': 'English'
        }, {
            'icon': 'images/deu.png',
            'text': 'Deutsch'
        }]
        self.app = MDApp.get_running_app()

    def create_language_menu(self):
        '''Creates a language selection menu'''
        self.language_menu = MDDropdownMenu(caller=self.lang_chooser,
                                            items=self.languages,
                                            width_mult=4)
        self.language_menu.bind(on_release=self.set_language)

    def set_language(self, menu_instance, item_instance):
        '''Sets the selected interface language'''
        if item_instance.text == 'Русский':
            self.app.change_language(0)
        elif item_instance.text == 'English':
            self.app.change_language(1)
        elif item_instance.text == 'Deutsch':
            self.app.change_language(2)
        self.lang_chooser.set_item(item_instance.text)
        menu_instance.dismiss()

    def create_dev_dialog(self):
        '''Opens developer dialog by clicking developer button'''
        dialog = DeveloperDialog()
        dialog.dialog_title.text = languages[self.app.language]['developer']
        dialog.developer_name.text = languages[self.app.language]['kirill']
        dialog.open()

    def feedback(self, link):
        '''Opens feedback link by clicking feedback button'''
        webbrowser.open(link)

    def create_share_dialog(self):
        '''TODO: release in Play Market'''
        toast('Coming soon in Play Market')

    def create_rate_dialog(self):
        '''TODO: release in Play Market'''
        toast('Coming soon in Play Market')
Пример #8
0
class CompanyScreen(Screen):
    menu = MDDropdownMenu

    error_banner = ObjectProperty(MDBanner)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Clock.schedule_once(self.event_binding)

    def event_binding(self, dt):
        companies_selection = []
        try:
            response = requests.get(
                'https://developer.mercaditu.com/api/authenticated/my/organizations',
                headers={
                    'Authorization':
                    'Bearer 5|bWbmJ2bfFsDLOIcQ5rHKZCvmzrYY2uez0SpP82Sr',
                    'Accept': 'application/json',
                    'Content-type': 'application/json'
                })
            companies = response.json()
            if len(companies) != 0:
                for company in companies:
                    companies_selection.append({
                        "icon":
                        "account-box",
                        "text":
                        company["following"]["handle"]
                    })

                self.menu = MDDropdownMenu(caller=self.ids.company_text,
                                           items=companies_selection,
                                           position="bottom",
                                           width_mult=4,
                                           callback=self.set_item)
                self.menu.bind(on_release=self.set_item)
                self.menu.set_menu_properties(0)
            else:
                raise Exception('La Empresa no se encuentra')
        except Exception as e:
            self.error_banner.text = [str(e)]
            self.error_banner.right_action = [
                "CLOSE", lambda x: self.error_banner.hide()
            ]
            self.error_banner.show()

    def set_item(self, *args):
        self.ids.company_text.text = args[0].text
        self.menu.dismiss()

    def go_to_scan_page(self):
        self.manager.transition.direction = 'left'
        self.manager.current = 'scanner_screen'
Пример #9
0
    def open_context_menu(self, entry_object, type_chooser):
        """Opens a context menu on right-clicking on a file or folder."""

        menu = MDDropdownMenu(
            caller=entry_object,
            items=self.get_menu_right_click(entry_object, type_chooser),
            width_mult=4,
            background_color=self.theme_cls.bg_dark,
            max_height=dp(240),
        )
        menu.bind(on_dismiss=self.context_menu_dismiss, )
        menu.open()
        self.context_menu_open = True
Пример #10
0
    def create_menu(self, text, instance):
        #Change icons and give importance
        menu_items = [{
            "icon": "help",
            "text": "About"
        }, {
            "icon": "application-settings",
            "text": "Settings"
        }]

        #tweak this for width
        menu = MDDropdownMenu(caller=instance, items=menu_items, width_mult=5)
        menu.bind(on_release=self.menu_callback)
        return menu
Пример #11
0
class MDDropItem(Screen):
    menu = None

    def on_enter(self):
        menu_items = [{"icon": "git", "text": f"Item {i}"} for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.ids.dropdown_item,
            items=menu_items,
            position="center",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        self.ids.dropdown_item.set_item(instance_menu_item.text)
        instance_menu.dismiss()
Пример #12
0
 def create_pagination_menu(self, interval):
     menu_items = [{
         "text": f"{i}"
     } for i in range(self.rows_num,
                      len(self.row_data) // 2, self.rows_num)]
     pagination_menu = MDDropdownMenu(
         caller=self.pagination.ids.drop_item,
         items=menu_items,
         use_icon_item=False,
         position=self.pagination_menu_pos,
         max_height=self.pagination_menu_height,
         callback=self.table_data.set_number_displayed_lines,
         width_mult=2,
     )
     pagination_menu.bind(on_dismiss=self.table_data.close_pagination_menu)
     self.table_data.pagination_menu = pagination_menu
Пример #13
0
class MyDropdown(MDDropDownItem):
    def __init__(self, list_items, icon, first_item_chosen=None, **kwargs):
        super(MyDropdown, self).__init__(**kwargs)
        menu_items = [{"icon": icon, "text": str(item)} for item in list_items]
        self.menu = MDDropdownMenu(caller=self,
                                   items=menu_items, position="auto",
                                   width_mult=5)

        self.menu.bind(on_release=self.set_item_dropdown)
        self.bind(on_release=lambda _: self.menu.open())

        if first_item_chosen is None:
            first_item_chosen = str(list_items[0])
        self.set_item(first_item_chosen)

    def set_item_dropdown(self, _instance_menu, instance_menu_item):
        selected_item = instance_menu_item.text
        self.menu.dismiss()
        self.set_item(selected_item)
Пример #14
0
class Menu(MDFloatLayout):
    #menu = MDDropdownMenu()
    Num = 4

    def __init__(self, **kwargs):
        #super().__init__(**kwargs)
        self.menu_items = [{
            "text":
            f"Item {i}",
            "viewclass":
            "OneLineListItem",
            'font_name':
            "./font/FangZhengHeiTiJianTi-1",
            "on_release":
            lambda x=f"Item {i}": self.menu_callback(x)
        } for i in range(self.Num)]
        self.menu = MDDropdownMenu(
            #caller=self.screen.ids.button,
            caller=None,
            items=self.menu_items,
            width_mult=4,
        )
        self.menu.bind(on_release=self.menu_callback)
        print(123)
        #return self.menu

    #
    def menu_callback(self, instance_menu_item):
        print("instance_menu", instance_menu_item)
        #self.page_callback()
        self.test = "Change Page"
        print(self.test)

        self.menu.dismiss()

    def page_callback(self):
        self.test = "Change Page"
        print(self.test)

    # let's start
    def pop(self):
        self.menu.open()
Пример #15
0
class TESTSCREEN(BoxLayout):
    def __init__(self, master, **kwargs):
        super().__init__(**kwargs)
        self.master = master

        icons = iter([
            "../manga_nelo_icon.png", "../rawdevart_logo.png",
            "../kissmanga_logo.png", "../manga_nelo_icon.png"
        ])
        menu_items = [{
            "right_content_cls": RightContentCls(site),
            "icon": next(icons),
            "text": site
        } for site in ["manganelo", "rawart", "kissmanga", "idk"]]
        self.btn = MDRaisedButton(text="press me",
                                  pos_hint={
                                      "center_x": .5,
                                      "center_y": .5
                                  })
        self.btn.bind(on_press=lambda x: self.menu.open())

        self.menu = MDDropdownMenu(caller=self.btn,
                                   items=menu_items,
                                   width_mult=4)
        self.menu.bind(on_release=self.menu_callback)
        self.add_widget(self.btn)

    # Had to install dev version for callback to work
    def menu_callback(self, instance_menu, instance_menu_item):
        #print(instance_menu, instance_menu_item.text)
        for i in instance_menu_item.children:
            for j in i.children:
                for k in j.children:
                    print(k, type(k))
                    if isinstance(k, MangaCheckBox):
                        if not k.active:
                            k.active = True
                            toast(
                                f"Manga will be searched on the site: {instance_menu_item.text}"
                            )
                        else:
                            k.active = False
Пример #16
0
    class PriorityChooser(MDDropDownItem):

        primary_color_hex = StringProperty()

        def __init__(self, **kwargs):
            super().__init__(**kwargs)

            # set primary color
            self.primary_color_hex = colors[self.theme_cls.primary_palette][self.theme_cls.primary_hue]

            # content for menu
            priority_menu_items = [
                {'text': f'[color={self.primary_color_hex}] low [/color]', },
                {'text': f'[color={self.primary_color_hex}] normal [/color]', },
                {'text': f'[color={self.primary_color_hex}] high [/color]'},
                {'text': f'[color={self.primary_color_hex}] very high [/color]'}
            ]

            # created menu as dropdown menu
            self.priority_menu = MDDropdownMenu(
                caller=self,
                items=priority_menu_items,
                width_mult=2.5,
                selected_color=self.theme_cls.primary_dark_hue,
            )

            # pressing triggeres task_menu_call
            self.priority_menu.bind(on_release=self.priority_menu_call)

        def priority_menu_call(self, instance_menu, instance_menu_item, *args):

            # change MDDropDownItem text to chosen priority
            # additional code for color removed via rstrip and slicing
            self.text = instance_menu_item.text.rstrip('[/color]')[15:-1]
            self.priority_menu.dismiss()

        def on_text(self, instance, value):

            # sets text of label to value with primary color as text_color
            self.ids.label_item.text = value
            self.ids.label_item.color = self.theme_cls.primary_color
Пример #17
0
class Content(BoxLayout):
    def __init__(self, id, *args, **kwargs):
        super().__init__(**kwargs)
        if id:
            person = next(
                (obj for obj in app.persons.person_list if obj['id'] == id),
                None)
        else:
            person = {
                "id":
                app.persons.person_list[len(app.persons.person_list) - 1]["id"]
                + 1,
                "name":
                "",
                "state":
                "Stát"
            }
            print(person)

        self.ids.person_name.text = person['name']

        STATES = [
            'CAN', 'CZE', 'FIN', 'GBR', 'GER', 'JAP', 'NOR', 'POL', 'RUS',
            'SVK', 'SWE', 'USA'
        ]
        menu_items = [{"icon": "git", "text": f"{state}"} for state in STATES]
        self.menu = MDDropdownMenu(
            caller=self.ids.state_item,
            items=menu_items,
            position="center",
            width_mult=4,
        )
        self.ids.state_item.set_item(person['state'])
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        self.ids.state_item.set_item(instance_menu_item.text)
        self.ids.state_item.text = instance_menu_item.text
        self.menu.dismiss()
Пример #18
0
class Main(Screen):
    menu = None

    def open_menu(self, instance_button):
        menu_items = [{"icon": "git", "text": f"Item {i}"} for i in range(5)]
        if self.menu == None:
            self.menu = MDDropdownMenu(
                caller=instance_button,
                items=menu_items,
                position="auto",
                width_mult=4,
            )
        self.menu.bind(on_release=self.set_item)
        self.menu.open()

    def set_item(self, instance_menu, instance_menu_item):
        self.ids.label.text = instance_menu_item.text
        self.menu.dismiss()

    def slider_move(self, instance_slider, mouse_motion):
        self.ids.label.text = str(instance_slider.value/100)
        instance_slider.size_hint_y = instance_slider.value/100
        self.ids.label.size_hint_y = 1-instance_slider.value/100
Пример #19
0
class ScreenSetting(MDScreen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        menu_items = [{
            "icon": "database",
            "text": "SQLite"
        }, {
            "icon": "database",
            "text": "MySQL"
        }]
        self.menu = MDDropdownMenu(
            items=menu_items,
            position="center",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_item)

        Clock.schedule_once(self.on_screen_paint)

    def on_screen_paint(self, *args):
        self.menu.caller = self.ids.db_backend
        setting = Setting()
        self.ids.db_backend.set_item(setting.backend)
        self.ids.txt_uname.text = setting.username
        self.ids.txt_pass.text = setting.password
        if setting.backend == "SQLite":
            self.ids.txt_dbname.text = setting.dbfile
        else:
            self.ids.txt_dbname.text = setting.dbname

    def set_item(self, instance_menu, instance_menu_item):
        self.ids.db_backend.set_item(instance_menu_item.text)
        self.menu.dismiss()
        setting = Setting()
        setting.backend = instance_menu_item.text
        setting.save_setting()

    def btn_theme_click(self):
        theme = App.get_running_app().theme_cls
        setting = Setting()
        if theme.theme_style == "Dark":
            theme.theme_style = "Light"
            setting.theme = "Light"
        else:
            theme.theme_style = "Dark"
            setting.theme = "Dark"
        setting.save_setting()

    def btn_change_click(self):
        dialog = Dialog()
        dialog.title = "Error!"
        setting = Setting()
        if self.ids.txt_dbname.text == "":

            dialog.text = "DataBase Name Or Path Can't Empty"
            dialog.open()
            return None
        else:

            acsii_letter = string.ascii_letters + string.digits
            file_path, file_name = os.path.split(self.ids.txt_dbname.text)
            if os.path.isdir(file_path):
                setting.dbfile = self.ids.txt_dbname.text
            name = ""
            for i in self.ids.txt_dbname.text:
                if i in acsii_letter:
                    name += i
            self.ids.txt_dbname.text = name
            setting.set_dbname(name)

        if self.ids.db_backend.current_item == "MySQL":
            username = self.ids.txt_uname.text
            password = self.ids.txt_pass.text

            if username and password:
                setting.username = self.ids.txt_uname.text
                setting.password = self.ids.txt_pass.text

            else:

                dialog.text = "Username or Password can,t be Empty"
                dialog.open()
                return None
        setting.save_setting()
        App.get_running_app().root.ids.scr.current = 'screendb'
Пример #20
0
class MainApp(MDApp):
    dialog = None

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_file(root_kv)
        self.title = "Strings Manipulation"
        Window.maximize()
        Window.bind(on_keyboard=self.events)
        self.manager_open = False
        self.file_manager = MDFileManager(
            exit_manager=self.exit_manager,
            select_path=self.select_path,
            preview=False,
        )

        menu_items = []

        self.menu = MDDropdownMenu(
            caller=self.screen.ids.dropdown_item,
            items=menu_items,
            width_mult=3,
        )
        self.menu.bind()

        self.menu2 = MDDropdownMenu(
            caller=self.screen.ids.dropdown_item2,
            items=menu_items,
            width_mult=3,
        )
        self.menu2.bind()  # declencher les evenements

        self.menu3 = MDDropdownMenu(
            caller=self.screen.ids.dropdown_item3,
            items=menu_items,
            width_mult=3,
        )
        self.menu3.bind()

        self.menu4 = MDDropdownMenu(
            caller=self.screen.ids.dropdown_item4,
            items=menu_items,
            width_mult=3,
        )
        self.menu4.bind()

    def build(self):
        return self.screen

###### gestionnaire de fichier

    def file_manager_open(self):
        self.file_manager.show(os.path.dirname(
            os.path.abspath(__file__)))  # output manager to the screen
        self.manager_open = True

    def select_path(self, path):
        '''It will be called when you click on the file name
        or the catalog selection button.

        :type path: str;
        :param path: path to the selected directory or file;
        '''
        self.exit_manager()
        file_name = path.split('/')[-1]
        file_extend = file_name.split('.')
        if ((file_extend[-1]).lower()) != 'csv':
            self.show_confirmation_dialog("Veuillez charger un .csv")
        else:
            global df
            df = pd.read_csv(path)

            NumRows = df.shape[0]

            self.screen.ids.box.clear_widgets()
            self.screen.ids.montexte.text = ""
            self.screen.ids.numPartition.text = ""
            self.screen.ids.MyImageGenerateStr.source = ""
            self.screen.ids.MyImageGenerateStr.reload()
            self.screen.ids.montextesortie.text = ""
            self.screen.ids.longueur.text = ""

            print(df)
            print("******* \n")
            print("nombre d'exemples: ", len(df))

    def exit_manager(self, *args):
        '''Called when the user reaches the root of the directory tree.'''

        self.manager_open = False
        self.file_manager.close()

    def events(self, instance, keyboard, keycode, text, modifiers):
        '''Called when buttons are pressed on the mobile device.'''

        if keyboard in (1001, 27):
            if self.manager_open:
                self.file_manager.back()
        return True


#### gestion de la page d'accueil du botton SubSrting

    def PrintDataItem(self):
        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")

        else:
            try:
                NumRows = df.shape[0]

                menu_items = [{
                    "text":
                    f"Example {i}",
                    "viewclass":
                    "OneLineListItem",
                    "on_release":
                    lambda x=f"Example {i}": self.set_item(x),
                } for i in range(NumRows)]

                self.menu = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu.bind()

            except Exception as e:
                self.show_confirmation_dialog("Veuillez charger votre fichier")

    def PrintDataItem2(self):

        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")

        else:
            try:
                NumRows = df.shape[0]

                menu_items = [{
                    "text":
                    f"Example {i}",
                    "viewclass":
                    "OneLineListItem",
                    "on_release":
                    lambda x=f"Example {i}": self.set_item2(x),
                } for i in range(NumRows)]

                self.menu2 = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item2,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu2.bind()

            except Exception as e:
                self.show_confirmation_dialog("Veuillez charger votre fichier")

    """ def PrintDataItem3(self):
        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")

        else:
            try:
                NumRows = len(PartitionResult)
                
                menu_items = [
                {
                    "text": f"Sub set {i}",
                    "viewclass": "OneLineListItem",
                    "on_release": lambda x=f"Sub set{i}": self.set_item3(x),
                } for i in range( NumRows)
                ]

                self.menu3 = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item3,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu3.bind() 

            except Exception as e:
                self.show_confirmation_dialog("Veuillez charger votre fichier") """
    """ def PrintDataItem4(self):
        if len(PartitionResult) == 0:
            self.show_confirmation_dialog("Veuillez creer les partitions avant de classifier")
        else:
            try:
                NumRows = len(PartitionResult) 
                
                menu_items = [
                {
                    "text": f"Classifier {i}",
                    "viewclass": "OneLineListItem",
                    "on_release": lambda x=f"Classifier {i}": self.set_item4(x),
                } for i in range( NumRows)
                ]

                self.menu4 = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item4,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu4.bind() 

            except Exception as e:
                self.show_confirmation_dialog("Veuillez creer les partitions avant de classifier") """

    ##### gestion de la liste deroulante pour le cas de Substring
    def set_item(self, text_item):
        self.screen.ids.dropdown_item.set_item(text_item)
        self.menu.dismiss()  # masquer le menu

    def set_item2(self, text_item):
        self.screen.ids.dropdown_item2.set_item(text_item)
        self.menu2.dismiss()

    def set_item3(self, text_item):
        self.screen.ids.dropdown_item3.set_item(text_item)
        self.menu3.dismiss()

    def set_item4(self, text_item):
        self.screen.ids.dropdown_item4.set_item(text_item)
        self.menu4.dismiss()

    def show_confirmation_dialog(self, text_to_print):
        if not self.dialog:
            self.dialog = MDDialog(
                title=text_to_print,
                md_bg_color=self.theme_cls.error_color,
                type="custom",
            )  #text_color = selft

        self.dialog.open()

    def GenerateSubstring2(self, item):
        #entree,s = BuildExample(item)
        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")
        else:
            entree = {}
            indice = item.split(" ")
            exemple = dict(df.iloc[int(indice[-1])])
            # construction de l'entree(dictionnaire sigma)
            listheads = list(df.columns)
            s = str(exemple[listheads[-1]])
            i = 0
            for elt in range(len(listheads) - 1):
                elt1 = "v" + str(i)
                entree[elt1] = str(exemple[listheads[i]])

            result = version1.GenerateSubstring(entree, s)
            result = list(result)

            if result != []:
                for elt in result:
                    self.screen.ids.box.add_widget(OneLineListItem(text=elt))

                elt = "entree = " + str(entree)

                self.screen.ids.montexte.text = elt

                elt = "s = " + s

                self.screen.ids.montextesortie.text = elt

                elt = str(len(result)) + "  manieres d'extraire s dans entree"
                self.screen.ids.longueur.text = elt

            else:
                self.screen.ids.box.clear_widgets()

                elt = "entree = " + str(entree)

                self.screen.ids.montexte.text = elt

                elt = "s = " + s

                self.screen.ids.montextesortie.text = elt
                elt = " 0 " + "  maniere d'extraire s dans entree"
                self.screen.ids.longueur.text = elt

    def PrintDag2(self, item):
        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")
        else:
            entree = {}
            indice = item.split(" ")
            exemple = dict(df.iloc[int(indice[-1])])
            # construction de l'entree(dictionnaire sigma)
            listheads = list(df.columns)
            s = str(exemple[listheads[-1]])
            i = 0
            for elt in range(len(listheads) - 1):
                elt1 = "v" + str(i)
                entree[elt1] = str(exemple[listheads[i]])

            w, EtaTilda = version1.GenerateStr(entree, s)

            try:
                os.remove("GenerateStr.gv.png")
                os.remove("GenerateStr.gv")
                version1.PrintDag(EtaTilda, w, entree, s)
                self.screen.ids.MyImageGenerateStr.source = "GenerateStr.gv.png"
                self.screen.ids.MyImageGenerateStr.reload()
            except OSError:
                version1.PrintDag(EtaTilda, w, entree, s)
                self.screen.ids.MyImageGenerateStr.source = "GenerateStr.gv.png"
                self.screen.ids.MyImageGenerateStr.reload()

    def PrintPartition(self, item):
        if len(PartitionResult) == 0:
            self.show_confirmation_dialog(
                "Veuillez au prealable effectuer le partitionnement")
        else:
            indice = item.split(" ")

            if type(PartitionResult[int(indice[-1])][0]) == list:

                self.screen.ids.partition.text = str(
                    set(
                        list(
                            version1.flatten(PartitionResult[int(
                                indice[-1])][0]))))
            else:
                self.screen.ids.partition.text = str(PartitionResult[int(
                    indice[-1])][0])

    def PrintClassifier(self, item):

        if len(PartitionResult) == 0:
            self.show_confirmation_dialog(
                "Veuillez au prealable effectuer le partitionnement")
        else:
            indice = item.split(" ")

            if type(PartitionResult[int(indice[-1])][0]) == list:

                self.screen.ids.classifier.text = str(BoolClassifierResult[str(
                    set(
                        list(
                            version1.flatten(PartitionResult[int(
                                indice[-1])][0]))))])
            else:
                self.screen.ids.classifier.text = str(BoolClassifierResult[str(
                    set([PartitionResult[int(indice[-1])][0]]))])

    def GeneratePartition2(self):
        if len(df) == 0:
            self.show_confirmation_dialog("Veuillez charger votre fichier")
        else:
            global Examples
            # pour structurer les exemples
            T = []  # pour le resultat de GenerateStr
            entree = {}
            listheads = list(df.columns)

            for i in range(len(df)):
                s = str(df.iloc[i][listheads[-1]])
                entree = {}
                for elt in range(len(listheads) - 1):
                    elt1 = "v" + str(elt)
                    entree[elt1] = str(df.iloc[i][listheads[elt]])

                Examples.append((entree, s))

            for elt in Examples:
                dag = version1.GenerateStr(elt[0], elt[1])
                T.append((json.dumps(elt[0]), dag))

            global PartitionResult
            PartitionResult = []
            PartitionResult = version1.GeneratePartition(T)

            if (len(PartitionResult)) == 0:
                print("tous les exemples forment une unique partition")
            else:

                NumRows = len(PartitionResult)

                menu_items = [{
                    "text":
                    f"Sub set {i}",
                    "viewclass":
                    "OneLineListItem",
                    "on_release":
                    lambda x=f"Sub set {i}": self.set_item3(x),
                } for i in range(NumRows)]

                self.menu3 = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item3,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu3.bind()

            elt = str(len(PartitionResult)) + " Partitions"
            self.screen.ids.numPartition.text = elt

    def PrintStringProgramme(self):
        if len(BoolClassifierResult) == 0:
            self.show_confirmation_dialog(
                "Veuillez faire BoolClassifier D'abord")
        else:
            StringProgram = ""
            StringProgram = StringProgram + "Switch("

            for elt in BoolClassifierResult:

                for elt2 in PartitionResult:
                    newSetForme2 = set()
                    if type(elt2[0]) == list:
                        newSetForme2 = newSetForme2.union(
                            set(list(version1.flatten(elt2[0]))))
                    else:
                        newSetForme2 = newSetForme2.union(set([elt2[0]]))

                    if str(newSetForme2) == elt:
                        break

                if BoolClassifierResult[elt] != 'FAIL':
                    StringProgram = StringProgram + "(" + version1.MathStringexpression(
                        BoolClassifierResult[elt]
                    ) + "," + version1.ListOfCancatenateExpression(
                        elt2[1]) + "),"

                else:
                    StringProgram = StringProgram + "(" + version1.MathStringexpressionCaseFail(
                        list(newSetForme2)
                        [0]) + "," + version1.ListOfCancatenateExpression(
                            elt2[1]) + "),"

            StringProgram = StringProgram[0:len(StringProgram) - 1] + ")"

            self.screen.ids.PrincipalProgram.text = StringProgram

    def BoolClassifier(self):

        if len(PartitionResult) == 0:
            self.show_confirmation_dialog(
                "Veuillez au prealable effectuer le partitionnement")
        else:

            global Examples
            global BoolClassifierResult

            SigmaSet = set()
            entree = {}
            listheads = list(df.columns)

            for i in range(len(df)):
                s = str(df.iloc[i][listheads[-1]])
                entree = {}
                for elt in range(len(listheads) - 1):
                    elt1 = "v" + str(elt)
                    entree[elt1] = str(df.iloc[i][listheads[elt]])

                Examples.append((entree, s))

            for elt in Examples:
                SigmaSet = SigmaSet.union(set([json.dumps(elt[0])]))

            for elt in PartitionResult:
                newSetForme = set()

                if type(elt[0]) == list:
                    newSetForme = newSetForme.union(
                        set(list(version1.flatten(elt[0]))))
                else:
                    newSetForme = newSetForme.union(set([elt[0]]))

                SigmaMoins = SigmaSet - newSetForme

                valeureDeRetour = version1.GenerateBoolClassifier(
                    newSetForme, SigmaMoins)

                if valeureDeRetour == 'FAIL':
                    BoolClassifierResult[str(newSetForme)] = 'FAIL'
                else:
                    BoolClassifierResult[str(newSetForme)] = list(
                        version1.flatten(valeureDeRetour))

                entrees = [
                ]  # ensembles des entrees dans l'ensemble du fichier

                elt = str(len(PartitionResult)) + " Clasifiers"
                self.screen.ids.numClassifier.text = elt

                NumRows = len(PartitionResult)

                menu_items = [{
                    "text":
                    f"Classifier {i}",
                    "viewclass":
                    "OneLineListItem",
                    "on_release":
                    lambda x=f"Classifier {i}": self.set_item4(x),
                } for i in range(NumRows)]

                self.menu4 = MDDropdownMenu(
                    caller=self.screen.ids.dropdown_item4,
                    items=menu_items,
                    width_mult=3,
                )
                self.menu4.bind()
Пример #21
0
class OneUIBrowserRulesListItem(OneLineAvatarIconListItem):
    rule = ObjectProperty()
    edit = ObjectProperty(force_dispatch=True)
    delete = ObjectProperty(force_dispatch=True)
    copy = ObjectProperty(force_dispatch=True)
    favorite = ObjectProperty(force_dispatch=True)

    menu = None

    def __init__(self, **kwargs):
        super(OneUIBrowserRulesListItem, self).__init__(**kwargs)
        self.menu = MDDropdownMenu(caller=self.ids.rule_item,
                                   items=self.menu_items,
                                   width_mult=3,
                                   selected_color=[0, 0, 0, .3])
        self.menu.bind(on_release=self.menu_callback)

    @property
    def style(self):
        return {
            "height": "40dp",
            "top_pad": "12dp",
            "bot_pad": "12dp",
            "divider": None,
            "font_style": 'Caption'
        }

    @property
    def menu_items(self):
        return [
            {
                "text": "Edit",
                "icon": "pencil",
                **self.style
            },
            {
                "text": "Delete",
                "icon": "trash-can",
                **self.style
            },
            {
                "text": "Copy",
                "icon": "content-copy",
                **self.style
            },
            {
                "text": "Favorite",
                "icon": "bookmark",
                **self.style
            },
        ]

    def menu_callback(self, instance_menu, instance_menu_item):
        if instance_menu_item.text.lower() == "edit":
            self.edit = self.rule
        elif instance_menu_item.text.lower() == "delete":
            self.delete = self.rule
        elif instance_menu_item.text.lower() == "copy":
            Clipboard.copy(json.dumps(asdict(self.rule)))
            toast('Copied !!!')
        elif instance_menu_item.text.lower() == "favorite":
            self.favorite = self.rule
        instance_menu.dismiss()

    def on_rule(self, _, val):
        self.text = val.name

    def release_edit(self):
        self.edit = self.rule
Пример #22
0
class MainApp(MDApp):
    # APP
    storage_url = "https://farmzon-abdcb.appspot.com"
    database_url = "https://farmzon-abdcb.firebaseio.com/.json"
    data = {"uu": {"Joe Tilsed": "me"}}
    auth_key = "sBlt6fzvguYnrGl2FlXRK3k4vRxSfZJBV2P7yIRv"
    size_x = NumericProperty(0)
    size_y = NumericProperty(0)
    menu = ObjectProperty(None)
    count = NumericProperty(0)
    loggin_count = NumericProperty(0)
    count_update = NumericProperty(0)
    dialog = None
    dialog_phone = None
    dialog_last = None
    setter = None
    counter_image = NumericProperty(0)
    spin_active = BooleanProperty(False)
    menu_text = StringProperty("Your Location")
    loading = StringProperty("")

    # Business
    product_name = StringProperty("")
    phone_number = StringProperty("")
    location = StringProperty("")
    quantity = StringProperty("")
    total_amount = NumericProperty(0)
    order_number = StringProperty("0")
    category_tp = StringProperty("")

    # MATH
    calculator = StringProperty("0")
    calculator2 = StringProperty("0")

    # XXX-------ADMIN LOGIN VAR-------XXX
    admin_name = StringProperty("")
    admin_phone = StringProperty("")
    customer_phone = StringProperty("")
    admin_password = StringProperty("")
    admin_true = BooleanProperty(False)
    admin_product_description = StringProperty("")
    admin_product_image = StringProperty("images/picture.png")
    admin_product_name = StringProperty("")
    admin_product_price = StringProperty("")
    admin_product_id = StringProperty("")
    admin_product_url = StringProperty("")

    # ADS
    app_id = "ca-app-pub-9270156272717443~8633598837"
    interstitial = "ca-app-pub-9270156272717443/2248347409"

    # DATABASE

    def stream_handler(self, message):
        if True:
            print("hello")
            return notification.notify(title='New order', message='you have new order!')

    def notifi(self, phone):
        try:
            import firebase_admin
            firebase_admin._apps.clear()
            from firebase_admin import credentials, initialize_app, db
            id = datetime.datetime.now()
            cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
            initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
            if phone != "0788204327":
                my_stream = db.reference("Yummy").child("Admin").child(phone).child("Orders").listen(
                    self.stream_handler)
            else:
                my_stream = db.reference("Yummy").child("Orders").listen(
                    self.stream_handler)
        except:
            print("poor me")

    def remember_me_admin(self, user, password, name):
        with open("credential/admin.txt", "w") as fl:
            fl.write(user + "\n")
            fl.write(password)
        with open("credential/admin_info.txt", "w") as ui:
            ui.write(name)
        fl.close()
        ui.close()

    def admin_memory(self):
        if self.loggin_count == 0:
            self.loggin_count = 1 + self.loggin_count
            self.admin_true = True
            file1 = open('credential/admin.txt', 'r')
            file2 = open("credential/admin_info.txt")
            Lines = file1.readlines()
            Lines2 = file2.readlines()

            # Strips the newline character
            self.admin_phone = Lines[0].strip()
            self.admin_password = Lines[1].strip()
            self.admin_name = Lines2[0]
            self.count += 1
            thread = threading.Thread(self.notifi(self.admin_phone))
            thread = threading.Thread(self.listen_db(self.admin_phone))
            thread.start()
        else:
            sm = self.root
            sm.current = "admin_main"
            self.spin_active = False

    def actively_reg(self):
        if self.spin_active:
            self.spin_active = False
            toast("Successfully Registered!")

    def permision_req(self):
        if utils.platform == 'android':
            from android.permissions import request_permissions, Permission  # todo
            request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE])

    def notifier(self):
        notification.notify(title="Welcome", message="you can also sell and buy!")

    def on_start(self):
        m = self.root
        m.current = "one"
        identity = self.root.ids.drop_item_one
        self.menu_fun(identity)
        self.keyboard_hooker()

    def menu_fun(self, identity):
        vimbweta = [
            "vimbweta vya uwanjani",
            "vimbweta vya stationary",
            "vimbweta vya girls hostel",
            "vimbweta vya boys hostel",
            "vimbweta nyuma ya ndege",
            "vimbweta vya block 16",
            "vimbweta vya adminstration",
            "class one",
            "class two",
            "class three",
            "Aviation classes"
        ]
        self.menu = MDDropdownMenu(
            caller=identity,
            width_mult=9,
            position="auto",
            callback=self.menu_callback
        )
        for i in range(vimbweta.__len__()):
            self.menu.items.append(
                {
                    "text": vimbweta[i]
                }
            )
        for i in range(22):
            if i == 0:
                pass
            else:
                self.menu.items.append(
                    {
                        "text": "Block " + "" + str(i)
                    }
                )
        self.menu.bind(
            on_release=self.menu_callback
        )

        self.setter = identity
        self.setter.set_item(self.menu_text)

    def show_alert_dialog(self):
        if not self.dialog:
            self.dialog = MDDialog(
                title="Do you real want to quit?",
                buttons=[
                    MDFlatButton(
                        text="CANCEL", text_color=self.theme_cls.primary_color, on_release=self.kill
                    ),
                    MDRaisedButton(
                        text="QUIT!", text_color=self.theme_cls.primary_color,
                        on_release=lambda x: toast("Please press the home button!", 5)
                    ),
                ],
            )
        self.dialog.open()

    def phone_number_dialog(self):
        if not self.dialog_phone:
            self.dialog_phone = phone_dialog(
                title="Enter Your phone number",
                auto_dismiss=False,
                buttons=[
                    MDFlatButton(
                        text="Cancel", text_color=self.theme_cls.primary_color, on_release=self.kill_phone
                    ),
                    MDRaisedButton(
                        text="Submit", text_color=self.theme_cls.primary_color,
                        on_release=lambda x: self.phone_number_check(self.phone_number)
                    ),
                ],
            )
        self.dialog_phone.open()

    def last_step_dialog(self):
        if not self.dialog_last:
            self.dialog_last = MDDialog(
                title="Confirm",
                type="custom",
                auto_dismiss=False,
                content_cls=last_dialog(),
                buttons=[
                    MDFlatButton(
                        text="Cancel",
                        text_color=self.theme_cls.primary_color,
                        on_release=lambda x: self.adver()
                    ),
                    MDRaisedButton(
                        text="Ok",
                        on_release=lambda x: self.adver(),
                        theme_text_color="Custom",
                        md_bg_color=[243 / 255, 189 / 255, 106 / 255, 1]
                    ),

                ],
            )
        self.dialog_last.md_bg_color = 245 / 255, 0 / 255, 72 / 255, 1
        self.dialog_last.open()

    def phone_number_check(self, phone):
        new_number = ""
        if phone != "":
            for i in range(phone.__len__()):
                if i == 0:
                    pass
                else:
                    new_number = new_number + phone[i]
            number = "+255" + new_number
            if not carrier._is_mobile(number_type(phonenumbers.parse(number))):
                toast("Please check your phone number!", 1)
                return False
            else:
                self.phone_number = phone
                thread = threading.Thread(target=self.Business(self.product_name, self.quantity, self.phone_number))
                thread.start()
                self.kill_phone()
                return True
        else:
            toast("check your number")

    def phone_number_check_admin(self, phone):
        new_number = ""
        if phone != "":
            for i in range(phone.__len__()):
                if i == 0:
                    pass
                else:
                    new_number = new_number + phone[i]
            number = "+255" + new_number
            if not carrier._is_mobile(number_type(phonenumbers.parse(number))):
                toast("Please check your phone number!", 1)
                return False
            else:
                return True
        else:
            toast("enter phone number!")

    def kill(self, *kwargs):
        self.dialog.dismiss()

    def kill_phone(self, *kwargs):
        self.ads.request_interstitial()
        self.dialog_phone.dismiss()
        self.ads.show_interstitial()

    def kill_adver(self):
        self.dialog_last.dismiss()

    def Business(self, product, quantity, phone):
        self.last_step_dialog()
        print("location:", self.location, '\n'
                                          "Product name:", product, '\n'
                                                                    "quantity:", quantity, '\n'
                                                                                           "Total amount:",
              self.total_amount, '\n'
                                 "Phone number:", phone)
        if self.category_tp != "admin":
            from helped import connection_status as CS
            if CS.Network.internet(CS.Network()):
                self.spin_active = True
                thread = threading.Thread(target=DB.upload_data,
                                          args=(
                                              DB(), self.customer_phone, phone, self.location, quantity,
                                              self.total_amount,
                                              product))
                thread.start()
                thread.join()
                toast("Ordered successfully!", 10)
                self.spin_active = False
            else:
                self.spin_active = False
                toast("Sorry try again!", 5)
        else:
            from helped import connection_status as CS
            if CS.Network.internet(CS.Network()):
                self.spin_active = True
                thread = threading.Thread(target=DB.upload_data_admin,
                                          args=(
                                              DB(), self.customer_phone, phone, self.location, quantity,
                                              self.total_amount,
                                              product))
                thread.start()
                thread.join()
                toast("Ordered successfully!", 10)
                self.spin_active = False
            else:
                self.spin_active = False
                toast("Sorry try again!", 5)

    def keyboard_hooker(self):
        EventLoop.window.bind(on_keyboard=self.hook_keyboard)

    def hook_keyboard(self, window, key, *largs):
        sm = self.root
        print(key, self.count)
        if key == 27 and self.count == 1 or self.count <= -1:
            sm.current = "one"
            print("change", self.count)
            self.count = self.count - 1
            print("current>>", self.count)
            return True
        elif key == 27 and self.count == 0:
            # Window.on_close()
            self.show_alert_dialog()
            return True

    def menu_callback(self, menu):
        self.menu_text = menu.text
        self.setter.set_item(menu.text)
        self.menu.dismiss()
        print(menu.text)
        self.location = menu.text

    def callculator_rim(self, mingapi, price):
        identity = self.root.ids.quantity
        self.calculator = mingapi + "0"
        if mingapi == "":
            pass
        elif mingapi == '.':
            identity.text = "1"
        else:
            self.total_amount = self.calculator = str(float(mingapi) * int(price))

    def callback(self, button):
        self.menu.caller = button
        self.menu.open()

    food_count = 0

    def order_spinner2(self):
        if self.front_shop_count == 0:
            self.spin_active = True
            try:
                toast("loading please wait...", 10)
                self.loading = "Loading..."
                # Clock.schedule_once(lambda x: self.front_shop(), 4)
                thread = threading.Thread(target=self.front_shop())
                thread.start()
            except:
                toast("no internet!")
                self.loading = ""
                self.spin_active = False

    def order_spinner3(self):
        if self.other_shops == 0:
            self.spin_active = True
            try:
                toast("loading please wait...", 10)
                Clock.schedule_once(lambda x: self.other_shop(), 4)
                # thread = threading.Thread(target=self.other_shop)
                # thread.start()
            except:
                toast("no internet!")
                self.spin_active = False

    def order_spinner1(self):
        sm = self.root
        file_size = os.path.getsize("credential/admin.txt")
        if file_size == 0:
            sm.current = "login"
        else:
            self.spin_active = True
            sm.current = "admin_main"
            thread = threading.Thread(target=self.admin_memory)
            thread.start()
            thread.join()
            self.spin_active = False

    def add_order(self):
        try:
            if self.food_count == 0:
                self.food_count = self.food_count + 1
                food = self.root.ids.food_cat
                import firebase_admin
                firebase_admin._apps.clear()
                from firebase_admin import credentials, initialize_app, db
                if not firebase_admin._apps:
                    cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                    initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})

                    store = db.reference("Yummy").child("Orders")
                    stores = store.get()

                    count = 0
                    for y, x in stores.items():
                        food_categories = category()
                        del_btn = MDIconButton(icon="delete", on_release=self.remove_widgets,
                                               pos_hint={"center_x": .9, "center_y": .3}, theme_text_color="Custom",
                                               text_color={60 / 255, 66 / 255, 75 / 255}, user_font_size="26sp")
                        count += 1
                        # food_categories.md_bg_color = 245 / 255, 0 / 255, 72 / 255, 1
                        food_categories.id = y
                        del_btn.id = y
                        food_categories.md_bg_color = 121 / 255, 174 / 255, 141 / 255, 1
                        food_categories.add_widget(Labels(text="Admin-phone:" + " " + str(x['Admin phone'])))
                        food_categories.add_widget(Labels(text="Phone:" + " " + y))
                        food_categories.add_widget(MDSeparator(height="5dp"))
                        food_categories.add_widget(Labels(text="Amount:" + " " + " " + str(x['amount'])))
                        food_categories.add_widget(Labels(text="Location:" + " " + " " + str(x['location'])))
                        food_categories.add_widget(Labels(text="Product-Name:" + " " + " " + str(x['product name'])))
                        food_categories.add_widget(Labels(text="Quantity:" + " " + " " + str(x['quantity'])))
                        food_categories.add_widget(Labels(text="Time-Ordered:" + " " + " " + str(x['time'])))
                        food_categories.add_widget(del_btn)
                        food.add_widget(food_categories)
                    self.spin_active = False
                    self.order_number = str(count)

            else:
                pass
        except:
            toast("no internet")
            self.spin_active = False

    def resize_bottom_tabs(self):
        # bottom_nav
        bv = self.root.ids.bottom_nav
        bv.on_resize()

    def add_order_admin(self):
        try:
            if self.food_count == 0:
                print("num>", self.admin_phone)
                self.food_count = self.food_count + 1
                food = self.root.ids.food_cat
                import firebase_admin
                firebase_admin._apps.clear()
                from firebase_admin import credentials, initialize_app, db
                if not firebase_admin._apps:
                    cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                    initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})

                    if self.admin_phone != "0788204327":
                        store = db.reference("Yummy").child("Admin").child(self.admin_phone).child("Orders")
                        stores = store.get()
                        print(stores)
                        count = 0
                        for y, x in stores.items():
                            print(x)
                            food_categories = category()
                            del_btn = MDIconButton(icon="delete", on_release=self.remove_widgets,
                                                   pos_hint={"center_x": .9, "center_y": .3}, theme_text_color="Custom",
                                                   text_color={60 / 255, 66 / 255, 75 / 255}, user_font_size="26sp")
                            count += 1
                            # food_categories.md_bg_color = 245 / 255, 0 / 255, 72 / 255, 1
                            food_categories.id = y
                            del_btn.id = y
                            food_categories.md_bg_color = 121 / 255, 174 / 255, 141 / 255, 1
                            food_categories.add_widget(Labels(text="Admin-phone:" + " " + str(x['Phone number'])))
                            food_categories.add_widget(Labels(text="Phone:" + " " + y))
                            food_categories.add_widget(MDSeparator(height="5dp"))
                            food_categories.add_widget(Labels(text="Amount:" + " " + " " + str(x['amount'])))
                            food_categories.add_widget(Labels(text="Location:" + " " + " " + str(x['location'])))
                            food_categories.add_widget(
                                Labels(text="Product-Name:" + " " + " " + str(x['product name'])))
                            food_categories.add_widget(Labels(text="Quantity:" + " " + " " + str(x['quantity'])))
                            food_categories.add_widget(Labels(text="Time-Ordered:" + " " + " " + str(x['time'])))
                            food_categories.add_widget(del_btn)
                            food.add_widget(food_categories)
                        self.spin_active = False
                        self.order_number = str(count)
                    else:
                        self.add_order()

            else:
                pass
        except:
            toast("no internet")
            self.spin_active = False

    all_products = {}
    front_products = {}
    front_shop_count = 0
    other_shops = 0

    def other_shop(self):
        if True:
            try:
                if self.other_shops == 0:
                    self.other_shops = self.other_shops + 1
                    import firebase_admin
                    firebase_admin._apps.clear()
                    from firebase_admin import credentials, initialize_app, db
                    if not firebase_admin._apps:
                        shop = self.root.ids.other_shop
                        cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                        initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
                        store = db.reference("Yummy").child("Products")
                        stores = store.get()
                        from retrive_data import Retrieve as RE
                        RE.other_shop(RE(), stores)
                        self.all_products = stores
                        for y, x in stores.items():
                            self.admin_product_name = x["product_name"]
                            self.customer_phone = x["admin_phone"]
                            self.admin_product_url = x["image_url"]
                            self.admin_product_price = x["product_price"]
                            self.admin_product_description = x["product_description"]

                            other_shops = Shops(on_release=self.selling_other)
                            other_shops.add_widget(Labels(text=self.admin_product_name))
                            other_shops.add_widget(Shop_image(source=self.admin_product_url))
                            other_shops.add_widget(Labels(text=self.admin_product_price))
                            other_shops.id = y
                            shop.add_widget(other_shops)
                            self.spin_active = False
            except:
                self.spin_active = False
                toast("no internet!")

    def other_shop_offline(self):
        filename = "helped/other.json"
        try:
            file_size = os.path.getsize(filename)
            if file_size > 0:
                shop = self.root.ids.front_shop
                with open(filename) as file:
                    line = json.load(file)
                    print(line)
                    for y, x in line.items():
                        self.admin_product_name = x["product_name"]
                        self.customer_phone = x["admin_phone"]
                        self.admin_product_url = x["image_url"]
                        self.admin_product_price = x["product_price"]
                        self.admin_product_description = x["product_description"]

                        other_shops = Shops(on_release=self.selling_other)
                        other_shops.add_widget(Labels(text=self.admin_product_name))
                        other_shops.add_widget(Shop_image(source=self.admin_product_url))
                        other_shops.add_widget(Labels(text=self.admin_product_price))
                        other_shops.id = y
                        shop.add_widget(other_shops)
                        self.spin_active = False
        except:
            self.spin_active = False
            self.order_spinner3()

    def other_shop_comparison(self):
        filename = "helped/other.json"
        try:
            file_size = os.path.getsize(filename)
            if file_size != 0:
                with open(filename) as file:
                    line = json.load(file)
                    local_len = len(line)
                    import firebase_admin
                    firebase_admin._apps.clear()
                    from firebase_admin import credentials, initialize_app, db
                    if not firebase_admin._apps:
                        cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                        initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
                        store = db.reference("Yummy").child("Products")
                        stores = store.get()
                        online_len = len(stores)
                        print(local_len, online_len)
                    if local_len == online_len:
                        print(local_len, online_len)
                    else:
                        self.refresh_other()
            else:
                self.refresh_other()
        except:
            toast("something is wrong!")

    def other_shop_faster(self):
        filename = "helped/other.json"
        try:
            if self.other_shops == 0:
                self.other_shops = self.other_shops + 1
                file_size = os.path.getsize(filename)
                thread = threading.Thread(target=self.other_shop_comparison)
                thread.start()
                if file_size != 0:
                    shop = self.root.ids.other_shop
                    with open(filename) as file:
                        line = json.load(file)
                        print(line)
                        self.all_products = line
                        for y, x in line.items():
                            self.admin_product_name = x["product_name"]
                            self.customer_phone = x["admin_phone"]
                            self.admin_product_url = x["image_url"]
                            self.admin_product_price = x["product_price"]
                            self.admin_product_description = x["product_description"]

                            other_shops = Shops(on_release=self.selling_other)
                            other_shops.add_widget(Labels(text=self.admin_product_name))
                            other_shops.add_widget(Shop_image(source=self.admin_product_url))
                            other_shops.add_widget(Labels(text=self.admin_product_price + "/Tsh"))
                            other_shops.id = y
                            shop.add_widget(other_shops)
                            self.spin_active = False
                else:
                    self.other_shops = 0
                    self.order_spinner3()
        except:
            self.other_shops = 0
            self.order_spinner3()

    def selling_other(self, instance):
        print(instance.id)
        # self.count = self.count + 1
        product = instance.id
        self.customer_phone = self.all_products[product]["admin_phone"]
        self.admin_product_url = self.all_products[product]["image_url"]
        self.admin_product_name = self.all_products[product]["product_name"]
        self.admin_product_price = self.all_products[product]["product_price"]
        self.admin_product_description = self.all_products[product]["product_description"]
        sm = self.root
        sm.current = "selling_other"

    def summon(self):
        sm = self.root
        sm.current = "other_shops"
        if self.other_shops == 0:
            self.spin_active = True

    def front_shop(self):
        if True:
            try:
                print("ok")
                if self.front_shop_count == 0:
                    self.front_shop_count = self.front_shop_count + 1
                    print("yess..")
                    import firebase_admin
                    firebase_admin._apps.clear()
                    from firebase_admin import credentials, initialize_app, db
                    if not firebase_admin._apps:
                        shop = self.root.ids.front_shop
                        cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                        initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
                        store = db.reference("Yummy").child("Products_admin")
                        print("nice")
                        stores = store.get()
                        from retrive_data import Retrieve as RE
                        thread = threading.Thread(target=RE.front_shop, args=(RE(), stores))
                        thread.start()
                        print("good")
                        self.front_products = stores
                        for y, x in stores.items():
                            self.admin_product_name = x["product_name"]
                            self.customer_phone = x["admin_phone"]
                            self.admin_product_url = x["image_url"]
                            self.admin_product_price = x["product_price"]

                            front_shops = Front_shop(on_release=self.selling_front)
                            layout = FloatLayout()
                            layout.add_widget(Labels(text=self.admin_product_name,
                                                     pos_hint={"center_x": .5, "center_y": .2},
                                                     halign="center"))
                            layout.add_widget(Cool(source=self.admin_product_url))
                            front_shops.add_widget(layout)
                            front_shops.id = y
                            shop.add_widget(front_shops)
                            time.sleep(2)
                            self.spin_active = False
                            self.loading = ""
                    else:
                        print("f**k!")


            except:
                toast("no internet!")
                self.front_shop_offline()

    def front_shop_offline(self):
        filename = "helped/admin.json"
        try:
            file_size = os.path.getsize(filename)
            if file_size > 0:
                shop = self.root.ids.front_shop
                with open(filename) as file:
                    line = json.load(file)
                    print(line)
                    for y, x in line.items():
                        self.admin_product_name = x["product_name"]
                        self.customer_phone = x["admin_phone"]
                        self.admin_product_url = x["image_url"]
                        self.admin_product_price = x["product_price"]

                        front_shops = Front_shop(on_release=self.selling_front)
                        layout = FloatLayout()
                        layout.add_widget(Labels(text=self.admin_product_name,
                                                 pos_hint={"center_x": .5, "center_y": .2},
                                                 halign="center"))
                        layout.add_widget(Cool(source=self.admin_product_url))
                        front_shops.add_widget(layout)
                        front_shops.id = y
                        shop.add_widget(front_shops)
                        time.sleep(2)
                        self.spin_active = False
                        self.loading = ""
        except:
            button = MDTextButton(text="Retry", pos_hint={"center_x": .5, "center_y": .5},
                                  on_release=lambda x: self.refresh_front())
            button.id = "you"
            button.custom_color = 40 / 255, 123 / 255, 222 / 255, 1
            shop = self.root.ids.front_shop
            shop.add_widget(button)
            self.loading = ""
            self.spin_active = False

    def front_shop_comparison(self):
        filename = "helped/admin.json"
        try:
            file_size = os.path.getsize(filename)
            if file_size != 0:
                with open(filename) as file:
                    line = json.load(file)
                    local_len = len(line)
                    import firebase_admin
                    firebase_admin._apps.clear()
                    from firebase_admin import credentials, initialize_app, db
                    if not firebase_admin._apps:
                        cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
                        initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
                        store = db.reference("Yummy").child("Products_admin")
                        stores = store.get()
                        online_len = len(stores)
                    if local_len == online_len:
                        pass
                    else:
                        self.refresh_front()

            else:
                self.refresh_front()
        except:
            toast("something is wrong!")

    def front_shop_faster(self):
        filename = "helped/admin.json"
        try:
            if self.front_shop_count == 0:
                self.notifier()
                self.front_shop_count = self.front_shop_count + 1
                file_size = os.path.getsize(filename)
                thread = threading.Thread(target=self.front_shop_comparison)
                thread.start()
                if file_size != 0:
                    shop = self.root.ids.front_shop
                    with open(filename) as file:
                        line = json.load(file)
                        print(line)
                        self.front_products = line
                        for y, x in line.items():
                            self.admin_product_name = x["product_name"]
                            self.customer_phone = x["admin_phone"]
                            self.admin_product_url = x["image_url"]
                            self.admin_product_price = x["product_price"]

                            front_shops = Front_shop(on_release=self.selling_front)
                            layout = FloatLayout()
                            layout.add_widget(Labels(text=self.admin_product_name,
                                                     pos_hint={"center_x": .5, "center_y": .2},
                                                     halign="center"))
                            layout.add_widget(Cool(source=self.admin_product_url))
                            front_shops.add_widget(layout)
                            front_shops.id = y
                            shop.add_widget(front_shops)
                            self.spin_active = False
                            self.loading = ""
                else:
                    self.front_shop_count = 0
                    self.order_spinner2()
        except:
            self.front_shop_count = 0
            self.order_spinner2()

    def selling_front(self, instance):
        print(instance.id)
        self.count = self.count + 1
        self.category_tp = "admin"
        product = instance.id
        self.customer_phone = self.front_products[product]["admin_phone"]
        self.admin_product_url = self.front_products[product]["image_url"]
        self.admin_product_name = self.front_products[product]["product_name"]
        self.admin_product_price = self.front_products[product]["product_price"]
        sm = self.root
        sm.current = "selling"

    def success(self, *kwargs):
        self.refresh()

    def refresh(self):
        parent = self.root.ids.food_cat
        all_childs = parent.children
        identity = []
        self.food_count = 0
        for child in all_childs:
            identity.append(child.id)

        self.order_number = str(identity.__len__())

        for i in identity:
            self.remove_wide(i)

        if self.admin_phone == "0788204327":
            self.add_order()
        else:
            self.add_order_admin()

    def refresh_front(self):
        parent = self.root.ids.front_shop
        all_childs = parent.children
        identity = []
        self.front_shop_count = 0
        for child in all_childs:
            identity.append(child.id)

        for i in identity:
            print(i)
            self.remove_wide_front(i)

        self.spin_active = True
        self.order_spinner2()

    def refresh_other(self):
        parent = self.root.ids.other_shop
        all_childs = parent.children
        identity = []
        self.other_shops = 0
        for child in all_childs:
            identity.append(child.id)

        for i in identity:
            print(i)
            self.remove_wide_other(i)

        self.spin_active = True
        self.order_spinner3()

    def remove_wide_front(self, name):
        parent = self.root.ids.front_shop
        for child in parent.children:
            if name == child.id:
                parent.remove_widget(child)

    def remove_wide_other(self, name):
        parent = self.root.ids.other_shop
        for child in parent.children:
            if name == child.id:
                parent.remove_widget(child)

    def remove_wide(self, name):
        parent = self.root.ids.food_cat
        for child in parent.children:
            if name == child.id:
                parent.remove_widget(child)

    def remove_widgets(self, instance):
        name = instance.id
        parent = self.root.ids.food_cat
        for child in parent.children:
            if name == child.id:
                parent.remove_widget(child)
                self.del_entity(child.id)

    def del_entity(self, name):
        import firebase_admin
        firebase_admin._apps.clear()
        from firebase_admin import credentials, initialize_app, db
        if not firebase_admin._apps:
            cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
            initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})

            if self.admin_phone == "0788204327":
                db.reference("Yummy").child("Orders").child(name).delete()
            else:
                db.reference("Yummy").child("Admin").child(self.admin_phone).child("Orders").child(name).delete()

    def validate_user(self, phone, password):
        if phone == "" and phone.Isdigit():
            toast("please enter your phone number correctly")
        elif password == "":
            toast("please enter your password")
        else:
            self.spin_active = True
            thread = threading.Thread(target=self.Signing_in_admin_function, args=(phone, password))
            thread.start()

    def Signing_in_admin(self, phone, password):
        # thread = threading.Thread(target=self.Signing_in_admin_function, args=(phone, password))
        # thread.start()
        self.Signing_in_admin_function(phone, password)

    @mainthread
    def Signing_in_admin_function(self, phone, password):
        if DB.Signing_in_admin(DB(), phone, password):
            self.admin_name = DB.name_admin
            self.remember_me_admin(phone, password, self.admin_name)
            if not self.admin_true:
                self.listen_db(phone)
                sm = self.root
                sm.current = "admin_main"
        else:
            if self.admin_true:
                toast("no internet connection")
                self.spin_active = False
            else:
                self.spin_active = False
                toast("oops! phone number or password in correct or internet connection")

    # XXX---------CUSTOMER--------------XXX

    def id_generator(self):
        not_allowed = ".-:"
        date1 = datetime.datetime.now()
        date, time = id = str(date1).split(" ")
        self.admin_product_id = date + time
        product_id = ""
        for i in range(len(self.admin_product_id)):
            if self.admin_product_id[i] not in not_allowed:
                product_id = self.admin_product_id[i] + product_id
        id = self.admin_product_id = product_id
        print(id)
        return self.admin_product_id

    def get_info(self, phone, phone_other, name, price, product_name, image_path, password, category, description):
        if phone != "" and self.phone_number_check_admin(phone):
            if name != "" and name.isalpha() and price != "" and password != "":
                self.customer_phone = phone
                self.admin_password = password
                self.admin_name = name
                self.admin_product_image = image_path
                self.admin_product_price = price
                self.admin_product_name = product_name
                self.admin_product_id = self.id_generator()
                cate = category
                print(phone, name, price, product_name, image_path, password, self.admin_product_id)
                try:
                    thread = threading.Thread(target=self.transporter, args=(
                        phone, phone_other, name, price, product_name, image_path, password, self.admin_product_id,
                        cate, description))
                    thread.start()
                except:
                    toast("no internet")
            else:
                toast("check your info well")
                self.spin_active = False

        else:
            toast("check your mobile number")
            self.spin_active = False

    def transporter(self, phone, phone_other, name, price, product_name, image_path, password, id, cate, description):
        thread = threading.Thread(target=DB.upload_product_image, args=(
            DB(), cate, image_path, phone, phone_other, name, price, product_name, password, id, description))
        thread.start()

        thread.join()

        self.actively_reg()

    def listen_db(self, phone):
        try:
            import firebase_admin
            firebase_admin._apps.clear()
            from firebase_admin import credentials, initialize_app, db
            id = datetime.datetime.now()
            cred = credentials.Certificate("credential/farmzon-abdcb-c4c57249e43b.json")
            initialize_app(cred, {'databaseURL': 'https://farmzon-abdcb.firebaseio.com/'})
            self.admin_phone = phone
            if phone != "0788204327":
                print("i am listening......")
                my_stream = db.reference("Yummy").child("Admin").child(phone).child("Orders").listen(self.success)
            else:
                print("i am listening......")
                my_stream = db.reference("Yummy").child("Orders").listen(self.success)
        except:
            print("poor you")

    def Permission(self, android=None):
        if self.counter_image <= 0:
            if utils.platform == 'android':
                if self.count_update == 0:
                    from gallary import Gambler as GA
                    Clock.schedule_once(GA.user_select_image, 0)
                    self.admin_product_image = GA.path_of_picture
                    img = self.root.ids.product_image
                    img.source = GA.path_of_picture
                    self.count_update += self.count_update + 1
                else:
                    from gallary import Gambler as GA
                    self.count_update = self.count_update - 1
                    self.admin_product_image = GA.path_of_picture
                    img = self.root.ids.product_image
                    img.source = GA.path_of_picture

            else:
                self.counter_image = self.counter_image + 1
                for root, dirs, files in os.walk("/home/alpha9060/Downloads", topdown=False):
                    for file_ in files:
                        full_file_path = os.path.join(root, file_)
                        if full_file_path.endswith(('.png', '.jpg', '.jpeg')):
                            print(full_file_path)
                            image = full_file_path
                            cat_class = category_gal()
                            cat_class.add_widget(category_ga(source=image))
                            img = self.root.ids.images_added
                            img.add_widget(cat_class)
        else:
            pass

    ads = KivMob(TestIds.INTERSTITIAL)

    def adver(self):
        self.kill_adver()
        self.ads.show_interstitial()

    def build(self):

        self.ads.new_interstitial(TestIds.INTERSTITIAL)
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_palette = "DeepOrange"
        self.theme_cls.accent = "Brown"
        # Window.size = (360, 640)
        self.size_x, self.size_y = Window.size
        self.title = "yummy"
Пример #23
0
class Ytube(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.theme_cls.colors = 'Red'
        self.theme_cls.primary_palette = "Red"
        self.root = Builder.load_string(kv)


        menu_items = [
            {"icon": "application-settings",
            "text": "Setting"},

            {"icon": "account",
            'text': "About"},
        ]
        open_position = self.root.get_screen('main').ids.right_button
        self.menu = MDDropdownMenu(caller=open_position, items=menu_items, width_mult=3)
        self.menu.bind(on_release = self.menu_callback)
        



        Window.bind(on_keyboard=self.events)
        self.manager_open = False
        self.file_manager = MDFileManager(
            exit_manager=self.exit_manager,
            select_path=self.select_path,
        )
    
    # ------------------------------------ file manager -------------------------------------
    def file_manager_open(self):
        self.file_manager.show('/')  # output manager to the screen
        self.manager_open = True

    def select_path(self, path):
        '''It will be called when you click on the file name
        or the catalog selection button.

        :type path: str;
        :param path: path to the selected directory or file;
        '''

        self.exit_manager()
        return self.show_message(path)

    def exit_manager(self, *args):
        '''Called when the user reaches the root of the directory tree.'''

        self.manager_open = False
        self.file_manager.close()

    def events(self, instance, keyboard, keycode, text, modifiers):
        '''Called when buttons are pressed on the mobile device.'''

        if keyboard in (1001, 27):
            if self.manager_open:
                self.file_manager.back()
        return True
    # ------------------------------- File manager end ----------------------------------------
    
    def menu_callback(self, instance_menu, instance_menu_items):
        print(instance_menu)
        if instance_menu_items.text == 'Setting':
            self.root.current = 'setting'
            self.menu.dismiss()
        else:
            self.root.current = 'about'
            self.menu.dismiss()

    def start_downloading(self):
        user_input = self.root.get_screen('main').ids.url_input.text

        # video = YouTube(user_input)
        # print(type(video))
         
        if user_input != '' and re.search(r'^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$', user_input):
            self.root.current = 'progress'
            
            screen_id = self.root.get_screen('progress').ids.video_list

            for num in range(1):
                main_layout = MDFloatLayout()
                flip_card = MDCard(size_hint=(.9, .9), pos_hint={'center_x':.5, 'center_y': .5})
                box_1 = MDBoxLayout(orientation='vertical',)
                box_2 = MDBoxLayout(orientation='vertical', )
                box_3 = MDBoxLayout(orientation='vertical', padding=20)

                img = AsyncImage(source=video.thumbnail_url, size_hint=(.9, .9), pos_hint={'center_x': .5, 'center_y': .5})
                
                box_3.add_widget(img)
                box_3.add_widget(
                    MDLabel(
                        text=video.title, halign='center', font_style='Body2'
                        )
                            )
                box_2.add_widget(box_3)
                box_2.add_widget(MDRaisedButton(text='Download', pos_hint={'center_x': .5, 'center_y': .5}, size_hint=(.6, .1), on_release = self.quality_check,))

                box_1.add_widget(box_2)
                advertisement_box = MDBoxLayout(orientation='vertical', size_hint=(1, .2))
                advertisement_box.add_widget(MDLabel(text='Advertisement', halign='center'))
                advertisement_box.add_widget(MDProgressBar(pos_hint={"center_x": .5, }))
                box_1.add_widget(advertisement_box)


                flip_card.add_widget(box_1)
                
                main_layout.add_widget(flip_card)
                screen_id.add_widget(main_layout)

            
        else:
            self.show_message('Invalid URL!')
    
    def home(self):
        output = self.root.current = 'main'
        return output

    def show_message(self, text):
        snackbar = Snackbar(
                text=f"{text}",
            )
        return snackbar.show()

    def callback_for_bottom_sheet(self, *args):
        self.show_message(args[0])

    def quality_check(self, obj):
        bottom_sheet = MDGridBottomSheet()
        data = {
            "Audio": "file",
            "144p": "quality-low",
            "240p": "quality-low",
            "360p": "quality-medium",
            "480p": "quality-medium",
            "720p": "quality-high",
            "1080p": "quality-high",
        }
        for items in data.items():
            bottom_sheet.add_item(
                items[0],
                lambda x, y=items[0]: self.callback_for_bottom_sheet(y),
                icon_src = items[1]
            )
        return bottom_sheet.open()

    def on_start(self):
        #self.theme_cls.theme_style = "Dark"
        pass

    def build(self):
        return self.root
Пример #24
0
class Application(MDApp):
	def __init__(self, **kwargs):
		super().__init__(**kwargs)
		self.INTERFACE = Builder.load_file('main.kv')
		self.database = Database()

		menu_items = [{"text":f"item {i}"} for i in range(50)]
		self.menu = MDDropdownMenu(
            caller=self.INTERFACE.ids.refCommande,
            items=menu_items,
            position="center",
            width_mult=8,
        )
		self.menu.bind(on_release=self.set_item)


	def build(self):
		self.theme_cls.primary_palette = "Teal"
		self.items = [f"test {i}" for i in range(5)]

		return self.INTERFACE


	def set_item(self, instance_menu, instance_menu_item):
 		def set_item(interval):
 			self.INTERFACE.ids.refCommande.text = instance_menu_item.text
 			instance_menu.dismiss()
 		Clock.schedule_once(set_item, 0.5)


	# fonction Field du Date de livraison
	def show_datePicker(self):
		dialogDate = MDDatePicker(callback=self.get_date)
		dialogDate.open()
	def get_date(self, date):
		self.INTERFACE.ids.dateLivraison.text = date.__str__()
	

	def validateCommande(self, **kwargs):
		"""  Fonction Screen COMMANDE """
		champs = [
				self.INTERFACE.ids.refCommande,
				self.INTERFACE.ids.quantite,
				self.INTERFACE.ids.adresse,
				self.INTERFACE.ids.contact,
				self.INTERFACE.ids.dateLivraison
			]

		if not kwargs.get('validate_'):
			# verification des champs vides
			for val in champs:
				if val.text.strip() == '':
					return MDDialog(
						title="Erreur de validation",
						text=f"Le champ {val.hint_text} est obligatoire"
					).open()
			self.dialogCommande = MDDialog(
				title="Confirmation",
				text="Enregistrer la commande ?",
				buttons=[
					MDFlatButton(
						text="Continuer",
						text_color=self.theme_cls.primary_color,
						on_release=lambda f: self.validateCommande(validate_=True)
					)
				]
			)
			self.dialogCommande.open()
		else:
			self.dialogCommande.dismiss()
			for i in range(len(champs)): champs[i] = champs[i].text
			champs.append(self.INTERFACE.ids.nomClient.text)
			champs.append(date.today().__str__())
			ret = self.database.insertCommande(*champs)
			if ret[0]:
				MDDialog(
					title="Succes",
					text="Commande effectué",
					radius=[20, 7, 20, 7],
				).open()
			else:
				MDDialog(
					title="Erreur",
					text=str(ret[1]),
					radius=[20, 7, 20, 7],
				).open()
Пример #25
0
class EuApp(MDApp):
    terrainmenu = ObjectProperty()

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.eu = euhandler.euhandler()
        self.screen = Builder.load_string(KV)
        self.terrainmenu = MDDropdownMenu(
            caller=self.screen.ids.lndscr.ids.terrainButton,
            items=[{
                "viewclass": "MDMenuItem",
                "text": "Clear"
            }, {
                "viewclass": "MDMenuItem",
                "text": "Mount."
            }, {
                "viewclass": "MDMenuItem",
                "text": "Forest"
            }, {
                "viewclass": "MDMenuItem",
                "text": "Marsh"
            }],
            width_mult=4,
            opening_time=0)
        self.terrainmenu.bind(on_release=self.terrainmenu_item_selected)

        self.attackertechmenu = MDDropdownMenu(
            caller=self.screen.ids.lndscr.ids.attackerTechButton,
            position="bottom",
            items=[{
                "viewclass": "MDMenuItem",
                "text": "MED"
            }, {
                "viewclass": "MDMenuItem",
                "text": "REN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "ARQ"
            }, {
                "viewclass": "MDMenuItem",
                "text": "MOU"
            }, {
                "viewclass": "MDMenuItem",
                "text": "BAR"
            }, {
                "viewclass": "MDMenuItem",
                "text": "MAN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "DEN"
            }],
            width_mult=3,
            opening_time=0)
        self.attackertechmenu.bind(
            on_release=self.attackertechmenu_item_selected)

        self.defendertechmenu = MDDropdownMenu(
            caller=self.screen.ids.lndscr.ids.defenderTechButton,
            items=[{
                "viewclass": "MDMenuItem",
                "text": "MED"
            }, {
                "viewclass": "MDMenuItem",
                "text": "REN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "ARQ"
            }, {
                "viewclass": "MDMenuItem",
                "text": "MOU"
            }, {
                "viewclass": "MDMenuItem",
                "text": "BAR"
            }, {
                "viewclass": "MDMenuItem",
                "text": "MAN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "DEN"
            }],
            width_mult=3,
            opening_time=0)
        self.defendertechmenu.bind(
            on_release=self.defendertechmenu_item_selected)

        self.attackernavaltechmenu = MDDropdownMenu(
            caller=self.screen.ids.navscr.ids.attackerNavalTechButton,
            items=[{
                "viewclass": "MDMenuItem",
                "text": "GA"
            }, {
                "viewclass": "MDMenuItem",
                "text": "CAR"
            }, {
                "viewclass": "MDMenuItem",
                "text": "GLN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "LS"
            }, {
                "viewclass": "MDMenuItem",
                "text": "BA"
            }, {
                "viewclass": "MDMenuItem",
                "text": "VE"
            }, {
                "viewclass": "MDMenuItem",
                "text": "T-D"
            }],
            width_mult=3,
            opening_time=0)
        self.attackernavaltechmenu.bind(
            on_release=self.attackernavaltechmenu_item_selected)

        self.defendernavaltechmenu = MDDropdownMenu(
            caller=self.screen.ids.navscr.ids.defenderNavalTechButton,
            items=[{
                "viewclass": "MDMenuItem",
                "text": "GA"
            }, {
                "viewclass": "MDMenuItem",
                "text": "CAR"
            }, {
                "viewclass": "MDMenuItem",
                "text": "GLN"
            }, {
                "viewclass": "MDMenuItem",
                "text": "LS"
            }, {
                "viewclass": "MDMenuItem",
                "text": "BA"
            }, {
                "viewclass": "MDMenuItem",
                "text": "VE"
            }, {
                "viewclass": "MDMenuItem",
                "text": "T-D"
            }],
            width_mult=3,
            opening_time=0)
        self.defendernavaltechmenu.bind(
            on_release=self.defendernavaltechmenu_item_selected)

    def terrainmenu_item_selected(self, instance_menu, instance_menu_item):
        self.screen.ids.lndscr.ids.terrainButton.set_item(
            instance_menu_item.text)
        terrconv = {
            'Clear': 'clear',
            'Mount.': 'mountain',
            'Forest': 'forest',
            'Marsh': 'marsh'
        }
        self.eu.terrain = terrconv[instance_menu_item.text]
        self.update()
        self.terrainmenu.dismiss()

    def attackernavaltechmenu_item_selected(self, instance_menu,
                                            instance_menu_item):
        self.screen.ids.navscr.ids.attackerNavalTechButton.set_item(
            instance_menu_item.text)
        self.eu.attacker['ntech'] = instance_menu_item.text
        self.update()
        self.attackernavaltechmenu.dismiss()

    def defendernavaltechmenu_item_selected(self, instance_menu,
                                            instance_menu_item):
        self.screen.ids.navscr.ids.defenderNavalTechButton.set_item(
            instance_menu_item.text)
        self.eu.defender['ntech'] = instance_menu_item.text
        self.update()
        self.defendernavaltechmenu.dismiss()

    def attackertechmenu_item_selected(self, instance_menu,
                                       instance_menu_item):
        self.screen.ids.lndscr.ids.attackerTechButton.set_item(
            instance_menu_item.text)
        self.eu.attacker['ltech'] = instance_menu_item.text
        self.update()
        self.attackertechmenu.dismiss()

    def defendertechmenu_item_selected(self, instance_menu,
                                       instance_menu_item):
        self.screen.ids.lndscr.ids.defenderTechButton.set_item(
            instance_menu_item.text)
        self.eu.defender['ltech'] = instance_menu_item.text
        self.update()
        self.defendertechmenu.dismiss()

    def roll_slider_change(self, att_or_def, value):
        rounded = math.ceil(value)
        if att_or_def == 'att':
            self.screen.ids.lndscr.ids.att_roll_label.text = str(rounded)
            self.screen.ids.navscr.ids.att_roll_label.text = str(rounded)
            self.eu.attacker['roll'] = rounded
        elif att_or_def == 'def':
            self.screen.ids.lndscr.ids.def_roll_label.text = str(rounded)
            self.screen.ids.navscr.ids.def_roll_label.text = str(rounded)
            self.eu.defender['roll'] = rounded
        self.update()

    def assaultselected(self, instance, value):
        if value:
            self.eu.assault = value
            self.screen.ids.lndscr.ids.defenderPursuing.active = False
            self.screen.ids.lndscr.ids.attackerPursuing.active = False
            if dbug:
                print('Assault is ', value)
        else:
            self.eu.assault = value
            if dbug:
                print('Assault is ', value)
        self.update()

    def defenderpursuingselected(self, instance, value):
        if value:
            self.eu.defender_pursuing = value
            self.screen.ids.lndscr.ids.combatTypeSelector.active = True
            self.screen.ids.lndscr.ids.attackerPursuing.active = False
            self.screen.ids.navscr.ids.combatTypeSelector.active = True
            self.screen.ids.navscr.ids.attackerPursuing.active = False
            self.screen.ids.lndscr.ids.assaultSelector.active = False
            if dbug:
                print('Defender pursuing is ', value)
        else:
            self.eu.defender_pursuing = value
            if dbug:
                print('Defender pursuing is ', value)
        self.update()

    def breachselected(self, instance, value):
        if value:
            self.eu.breach = True
        else:
            self.eu.breach = False
        self.update()

    def attackerpursuingselected(self, instance, value):
        if value:
            self.eu.attacker_pursuing = value
            self.screen.ids.lndscr.ids.combatTypeSelector.active = True
            self.screen.ids.lndscr.ids.defenderPursuing.active = False
            self.screen.ids.navscr.ids.combatTypeSelector.active = True
            self.screen.ids.navscr.ids.defenderPursuing.active = False
            self.screen.ids.lndscr.ids.assaultSelector.active = False
            if dbug:
                print('Attacker pursuing is ', value)
        else:
            self.eu.attacker_pursuing = value
            if dbug:
                print('Attacker pursuing is ', value)
        self.update()

    def combatselected(self, instance, value):
        self.screen.ids.lndscr.ids.combatTypeSelector.active = value
        self.screen.ids.navscr.ids.combatTypeSelector.active = value
        if value:
            self.eu.type_of_combat = 'shock'
            if dbug:
                print('shock phase')
        else:
            self.eu.type_of_combat = 'fire'
            self.screen.ids.lndscr.ids.defenderPursuing.active = False
            self.screen.ids.lndscr.ids.attackerPursuing.active = False
            self.screen.ids.navscr.ids.defenderPursuing.active = False
            self.screen.ids.navscr.ids.attackerPursuing.active = False
            if dbug:
                print('fire phase')
        self.update()

    def textfield_change(self, textfield, att_or_def, unit):
        if textfield.text.isdigit():
            if int(textfield.text) < 0:
                textfield.text = '0'
            if dbug:
                print(att_or_def, ' ', textfield.text, ' ',
                      textfield.hint_text)
            if att_or_def == 'att':
                self.eu.attacker[unit] = int(textfield.text)
            else:
                self.eu.defender[unit] = int(textfield.text)
        else:
            #Field is not a positive digit set values to 0
            if att_or_def == 'att':
                self.eu.attacker[unit] = 0
            else:
                self.eu.defender[unit] = 0
        self.update()

    def increment(self, buttonInstance, screen, unit, att_or_def):
        #Define the id of the text field that needs to be changed
        textId = 'txt_field_' + unit + '_' + att_or_def
        #Get the current value of the field
        if not self.screen.ids[screen].ids[textId].text.isdigit():
            value = 0
        else:
            value = int(self.screen.ids[screen].ids[textId].text)
        #Read the text of the button to decide how to change
        if buttonInstance.text == '+':
            value += 1
        elif buttonInstance.text == '-':
            value += -1
        elif buttonInstance.text == '+10':
            value += 10
        elif buttonInstance.text == '-10':
            value += -10
        if value < 0:
            value = 0
        self.screen.ids[screen].ids[textId].text = str(value)

    def update(self):
        self.eu.updateall()
        base_string = '{0} pow  table {1}:  [{2}%, -{3}] : cause {4} loss'
        att_string = base_string.format(self.eu.results['attstr'],
                                        self.eu.results['tblatt'],
                                        self.eu.results['attresult'],
                                        self.eu.results['ainflictmorale'],
                                        self.eu.results['ainflict'])
        self.screen.ids.lndscr.ids['att_results'].text = att_string

        def_string = base_string.format(self.eu.results['defstr'],
                                        self.eu.results['tbldef'],
                                        self.eu.results['defresult'],
                                        self.eu.results['dinflictmorale'],
                                        self.eu.results['dinflict'])
        self.screen.ids.lndscr.ids['def_results'].text = def_string
        if dbug:
            self.eu.fancyprint()

        att_navstring = base_string.format(self.eu.results['attstr_n'],
                                           self.eu.results['tblatt_n'],
                                           self.eu.results['attresult_n'],
                                           self.eu.results['ainflictmorale_n'],
                                           self.eu.results['ainflict_n'])
        self.screen.ids.navscr.ids['att_results'].text = att_navstring

        def_navstring = base_string.format(self.eu.results['defstr_n'],
                                           self.eu.results['tbldef_n'],
                                           self.eu.results['defresult_n'],
                                           self.eu.results['dinflictmorale_n'],
                                           self.eu.results['dinflict_n'])
        self.screen.ids.navscr.ids['def_results'].text = def_navstring

        self.screen.ids.navscr.ids.att_wind_gauge_modifier_text.text = self.eu.results[
            'attwindgauge']
        self.screen.ids.navscr.ids.def_wind_gauge_modifier_text.text = self.eu.results[
            'defwindgauge']

    def get_id(self, instance):
        for id, widget in instance.parent.ids.items():
            if widget.__self__ == instance:
                return id

    def build(self):
        return self.screen
Пример #26
0
class NasaScreen(Screen):

    def from_get_date(self, date, *args):
        print(date)
        print(type(date))
        self.ids.fromd.text = str(date)

    def from_show_date_picker(self, *args):
        date_dialog = MDDatePicker(
            callback=self.from_get_date,
            year=2016,
            month=random.randint(1, 12),
            day=random.randint(1, 28),
        )
        date_dialog.open()

    def to_get_date(self, date, *args):
        print(date)
        print(type(date))
        self.ids.to.text = str(date)

    def to_show_date_picker(self, *args):
        date_dialog = MDDatePicker(
            callback=self.to_get_date,
            year=2017,
            month=random.randint(1, 12),
            day=random.randint(1, 28),
        )
        date_dialog.open()


    def on_enter(self):
        global screensArr
        screensArr.append(self.manager.current)
        print(self.manager.current, screensArr)

        self.ids.fromd.text = "2016-01-01"
        self.ids.to.text = "2016-12-31"
        
        try:
            self.remove_widget(spinner)
            self.remove_widget(label)
        except:
            pass

        ele_menu_items = [{"icon": "thermometer", "text": "Temperature"},
                          {"icon": "water", "text": "Moisture"},
                          {"icon": "weather-windy", "text": "Wind"}
                         ]

        self.ele_menu = MDDropdownMenu(
            caller=self.ids.ele_drop_item,
            items=ele_menu_items,
            position="bottom",
            width_mult=4,
        )
        self.ele_menu.bind(on_release=self.ele_set_item)

        per_menu_items = [{"icon": "calendar-today", "text": "Daily"},
                          {"icon": "calendar-clock", "text": "Interannual"}
                         ]

        self.per_menu = MDDropdownMenu(
            caller=self.ids.per_drop_item,
            items=per_menu_items,
            position="bottom",
            width_mult=4,
        )
        self.per_menu.bind(on_release=self.per_set_item)

    def ele_set_item(self, instance_menu, instance_menu_item):
        self.ids.ele_drop_item.set_item(instance_menu_item.text)
        global ele_data
        ele_data = instance_menu_item.text
        self.ids.ele_drop_item.text = instance_menu_item.text
        print(self.ids.ele_drop_item.text)
        self.ele_menu.dismiss()

    def per_set_item(self, instance_menu, instance_menu_item):
        self.ids.per_drop_item.set_item(instance_menu_item.text)
        global per_data
        per_data = instance_menu_item.text
        self.ids.per_drop_item.text = instance_menu_item.text
        print(self.ids.per_drop_item.text)
        self.per_menu.dismiss()

    def fetchData(self, *args):
        global lat, lon

        spinner = MDSpinner(
            size_hint=(None, None),
            size=(46, 46),
            pos_hint={'center_x': .5, 'center_y': .2},
            active=True,
        )

        self.add_widget(spinner)

        label = MDLabel(
            pos_hint={'center_y': 0.1},
            text="This may take a while",
            halign="center",
        )
        self.add_widget(label)

        def graphPlot(category, parameter, *args):
            def snk(*args):
                Snackbar(text = "Getting Data...").open()
            Clock.schedule_once(snk, 0.1)
            cat = ''
            para = ''
            if category == 'Interannual':
                cat = "INTERANNUAL"
                url = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?&request=execute&identifier=SinglePoint&parameters=" + parameter + "&startDate=" + self.ids.fromd.text[:4].replace('-','') + "&endDate=" + self.ids.to.text[:4].replace('-','') +"&userCommunity=AG&tempAverage=" + cat + "&outputList=JSON&lat=" + str(lat) + "&" + "lon=" + str(lon)
            else:
                cat = "DAILY"
                url = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?&request=execute&identifier=SinglePoint&parameters=" + parameter + "&startDate=" + self.ids.fromd.text.replace('-','') + "&endDate=" + self.ids.to.text.replace('-','') +"&userCommunity=AG&tempAverage=" + cat + "&outputList=JSON&lat=" + str(lat) + "&" + "lon=" + str(lon)

            if parameter == 'T2M_RANGE':
                para = 'Temperature (C)'
            elif parameter == 'RH2M':
                para = 'Moisture (%)'
            else:
                para = 'Wind Speed (m/s)'

            
            print(url)
            try:
                response = requests.get(url)
                print(response)
                data = response.json()

                data = data['features'][0]['properties']['parameter'][parameter]

                dates = []
                values = []

                for key, value in data.items():
                    if category == 'Interannual': 
                        if key[-2:] != '13' and value >= 0:
                            dates.append(key)
                            values.append(value)
                            print(key + " " + str(value))
                    else:
                        dates.append(key)
                        values.append(value)
                        print(key + " " + str(value))

                import matplotlib.pyplot as plt

                plt.figure(figsize=(17,10))        
                plt.plot(dates, values)
                plt.title(para + ' Vs Year')
                plt.xlabel('Year')
                plt.ylabel(para)
                plt.xticks(rotation=90)
                #my_path = os.path.dirname(os.path.realpath(__file__))

                global graphName
                graphName = 'graphs/graph_' + str(int(time.time())) + '.png'
                print(graphName)

                plt.savefig(graphName, bbox_inches='tight')

                #self.manager.current = 'graph'
                def changeScreen(*args):
                    self.manager.current = 'ndata'

                Clock.schedule_once(changeScreen, 1)
                
            except Exception as e:
                try:
                    self.remove_widget(spinner)
                    self.remove_widget(label)
                except:
                    pass
                print("Error")
                print(e)
                self.manager.current = "nasa"
                Snackbar(text="Can't get data from Nasa!").open()
        
        print(self.ids.ele_drop_item.text)
        print(self.ids.per_drop_item.text)
        
        if self.ids.ele_drop_item.text == 'Temperature':
            graphPlot(self.ids.per_drop_item.text, 'T2M_RANGE')
        elif self.ids.ele_drop_item.text == 'Moisture':
            graphPlot(self.ids.per_drop_item.text, 'RH2M')
        elif self.ids.ele_drop_item.text == 'Wind':
            graphPlot(self.ids.per_drop_item.text, 'WS2M')
        else:
            Snackbar(text="Select Search Topic and Period first!").open()
Пример #27
0
class Advanced(MDScreen):
    mask_menu = scaler_menu = compression_menu = video_codec_menu = audio_codec_menu = None
    video_codec_menu_items = [{
        "text": i
    } for i in [
        "default", "libx264 (.mp4)", "mpeg4 (.mp4)", "rawvideo (.avi)",
        "png (.avi)", "libvorbis (.ogv)", "libvpx (.webm)"
    ]]
    audio_codec_menu_items = [{
        "text": i
    } for i in [
        "default", "libmp3lame (.mp3)", "libvorbis (.ogg)",
        "libfdk_aac (.m4a)", "pcm_s16le (.wav)", "pcm_s32le (.wav)"
    ]]
    compression_menu_items = [{
        "text": i
    } for i in [
        "ultrafast", "superfast", "veryfast", "faster", "fast", "medium",
        "slow", "slower", "veryslow", "placebo"
    ]]
    scaler_menu_items = [{
        "text": i
    } for i in [
        "fast_bilinear", "bilinear", "bicubic", "experimental", "neighbor",
        "area", "bicublin", "gauss", "sinc", "lanczos", "spline"
    ]]
    mask_menu_items = [{"text": i} for i in ["A.I.", "Video/Image"]]

    tempdir = tempfile.mkdtemp()
    frame_filename = os.path.join(tempdir, "temp_preview.jpg")

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.video_codec_menu = MDDropdownMenu(
            caller=self.ids.video_codec_button,
            items=self.video_codec_menu_items,
            width_mult=4,
        )
        self.video_codec_menu.bind(on_release=self.video_codec_menu_callback)

        self.audio_codec_menu = MDDropdownMenu(
            caller=self.ids.audio_codec_button,
            items=self.audio_codec_menu_items,
            width_mult=4,
        )
        self.audio_codec_menu.bind(on_release=self.audio_codec_menu_callback)

        self.compression_menu = MDDropdownMenu(
            caller=self.ids.compression_button,
            items=self.compression_menu_items,
            width_mult=4,
        )
        self.compression_menu.bind(on_release=self.compression_menu_callback)

        self.scaler_menu = MDDropdownMenu(
            caller=self.ids.scaler_button,
            items=self.scaler_menu_items,
            width_mult=4,
        )
        self.scaler_menu.bind(on_release=self.scaler_menu_callback)

        self.mask_menu = MDDropdownMenu(
            caller=self.ids.mask_button,
            items=self.mask_menu_items,
            width_mult=4,
        )
        self.mask_menu.bind(on_release=self.mask_menu_callback)

    def on_enter(self, *args):
        MyThread(target=self.preview_queue).start()
        MyThread(target=self.time_queue).start()

    def video_codec_menu_callback(self, instance_menu, instance_menu_item):
        if "default" in instance_menu_item.text:
            app.ctrl.video_codec = None
        else:
            app.ctrl.video_codec = instance_menu_item.text.split()[0]
        instance_menu.caller.text = instance_menu_item.text
        instance_menu.dismiss()

    def audio_codec_menu_callback(self, instance_menu, instance_menu_item):
        if "default" in instance_menu_item.text:
            app.ctrl.audio_codec = None
        else:
            app.ctrl.audio_codec = instance_menu_item.text.split()[0]
        instance_menu.caller.text = instance_menu_item.text
        instance_menu.dismiss()

    def compression_menu_callback(self, instance_menu, instance_menu_item):
        app.ctrl.compression = instance_menu.caller.text = instance_menu_item.text
        instance_menu.dismiss()

    def scaler_menu_callback(self, instance_menu, instance_menu_item):
        app.ctrl.scaler = instance_menu.caller.text = instance_menu_item.text
        app.ctrl.do_again(1)
        instance_menu.dismiss()

    def mask_menu_callback(self, instance_menu, instance_menu_item):
        if instance_menu_item.text == "A.I.":
            app.ctrl.mask = ""
            instance_menu.caller.text = "A.I."
        else:
            app.file_manager_open()
            app.go_to = ["advanced"]
        app.ctrl.do_again(1)
        instance_menu.dismiss()

    def threads_button(self, up):
        if up:
            app.ctrl.threads = app.ctrl.p.var("threads", int) + 1
        else:
            app.ctrl.threads = app.ctrl.p.var("threads", int) - 1
        self.ids.threads_label.text = f'{app.ctrl.p.var("threads", int)} threads'

    def preview_queue(self):
        while app.sm.current == "advanced":
            sleep(1)
            if self.ids.preview_spinner.active:
                self.first_step_preview()

    def time_queue(self):
        while app.sm.current == "advanced":
            sleep(1)
            if not self.ids.time_bar.value:
                self.first_step_time()

    def first_step_preview(self):
        app.ctrl.call(2)
        app.ctrl.lock_wait("done", 2)
        self.update_preview_slider()
        self.second_step_preview()

    def second_step_preview(self):
        tim = app.ctrl.fake_get_frame / app.ctrl.p.final_clip.fps
        app.ctrl.p.processes(3,
                             False,
                             output=self.frame_filename,
                             get_frame_from_time=tim)
        app.ctrl.do_lock.release()
        self.update_preview_image()
        print("Image preview updated")

    def first_step_time(self):
        app.ctrl.call(2)
        app.ctrl.lock_wait("done", 2)
        self.second_step_time()

    def second_step_time(self):
        txt = self.ids.video_codec_button.text
        ext = "mp4" if txt == "default" else txt.split(".")[-1].split(")")[0]
        filename = os.path.join(self.tempdir, f"temp_video.{ext}")

        app.ctrl.p.processes(3, False, output=filename, logger=MyLogger())
        app.ctrl.do_lock.release()

    @mainthread
    def update_preview_spinner(self, _bool):
        if _bool:
            if self.ids.preview_slider.value:
                self.ids.preview_spinner.active = True
        else:
            self.ids.preview_spinner.active = False

    @mainthread
    def update_preview_slider(self):
        self.ids.preview_slider.max = app.ctrl.p.final_clip.fps

    @mainthread
    def update_preview_image(self):
        self.ids.preview_image.reload()
        self.update_preview_spinner(False)

    @mainthread
    def update_time(self, bar, label):
        self.ids.time_bar.value = bar
        self.ids.time_label.text = label
Пример #28
0
class AddServiceScreen(Screen):
    dialog = None

    # with self.root.canvas:
    #     Color(rgba=(.5, .5, .5))
    # return self.root

    def create_service(self):
        services = ["Laundry", "Dry Cleaning", "Ironing"]
        menu_items = [{"text": str(i)} for i in services]
        self.menu = MDDropdownMenu(
            caller=self.ids['client_services'],
            items=menu_items,
            width_mult=4,
        )
        self.menu.open()
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        print('inside menu callback')
        # self.ids['client_services'].hint_text = ''
        self.ids['client_services'].text = instance_menu_item.text
        instance_menu.dismiss()

    def select_date(self):
        print('inside select date')
        # date_dialog = MDDatePicker(
        #     callback=self.on_save,
        #     min_date=datetime.date(2021, 2, 1),
        #     max_date=datetime.date(2022, 12, 31),
        # )
        # To make the MDDatePicker work and the MDDropDown work install the
        #  pip3 install https://github.com/kivymd/KivyMD/archive/master.zip

        date_dialog = MDDatePicker()
        date_dialog.bind(on_save=self.on_save, on_cancel=self.on_cancel)
        date_dialog.open()

    def on_save(self, instance, value, date_range):
        self.ids['client_date'].text = str(value)

    def on_cancel(self, instance, value):
        instance.dismiss()

    def set_slot_item(self, instance_menu, instance_menu_item):
        self.ids['client_slot'].text = instance_menu_item.text
        instance_menu.dismiss()

    def available_slots(self):
        print('available slots are')
        time_slots = [
            "9 AM - 10 AM", "10:30 - 11:30", "12 PM - 2 PM", " 3 PM - 5 PM"
        ]
        menu_items = [{"text": str(i)} for i in time_slots]
        self.menu = MDDropdownMenu(
            caller=self.ids['client_slot'],
            items=menu_items,
            width_mult=4,
        )
        self.menu.open()
        self.menu.bind(on_release=self.set_slot_item)

    def select_time(self):
        time_dialog = MDTimePicker()
        time_dialog.bind(time=self.set_time)
        time_dialog.open()

    def set_time(self, instance, time):
        self.ids['client_time'].text = str(time)
        return time

    def add_service(self):
        print('add service')
        client_name = self.ids['client_name'].text
        client_phone = self.ids['client_phone'].text
        service_type = self.ids['client_services'].text
        service_dt = self.ids['client_date'].text
        service_time = self.ids['client_slot'].text
        desc = self.ids['client_desc'].text
        print(client_name, client_phone, service_type, service_dt,
              service_time, desc)

        try:

            receiver_email_id = "*****@*****.**"
            s = smtplib.SMTP('smtp.gmail.com', 587)
            s.starttls()
            s.login("*****@*****.**", "Arun@alf")
            # print(data)
            data = "Client Name : " + client_name + "\n" + "Client Phone: " + client_phone + "\n"
            data = data + "Service Type: " + service_type + "\n" + "Client Address: " + desc + "\n"
            data = data + "Service Date: " + service_dt + "\n" + "Service Time: " + service_time
            print(data)
            message = 'Subject: {}\n\n{}'.format("New Service Request", data)
            print('preparing to send email')
            s.sendmail("*****@*****.**", receiver_email_id, message)
            s.quit()
            print('Mail Sent.................')

            self.clear_data()
            self.show_dialog()
        except:
            print('error connecting email')

    def spin(self):
        btn = self.ids['submit']
        btn.add_widget(
            MDSpinner(
                active=True,
                pos_hint="'center_x': .5, 'center_y': .5",
            ))

    def show_dialog(self):

        self.dialog = MDDialog(
            title="Success!",
            text="Service request placed Successfully!",
            buttons=[
                MDFlatButton(
                    text="OK",
                    pos_hint={
                        "center_x": 0.5,
                        "center_y": 0.5
                    },
                    on_release=self.close_dialog,
                ),
            ],
        )
        self.dialog.open()

        # If registration successful return to login screen
        self.manager.current = 'login_screen'

    def close_dialog(self, inst):
        self.dialog.dismiss()

    def clear_data(self):
        self.ids['client_name'].text = ""
        self.ids['client_phone'].text = ""
        self.ids['client_services'].text = "Select Service Type *"
        self.ids['client_desc'].text = ""

    def show_datetime_picker(self):
        # min_date = datetime.strptime("2020:02:15", '%Y:%m:%d').date()
        # max_date = datetime.strptime("2020:05:30", '%Y:%m:%d').date()

        date_dialog = MDDatePicker(
            callback=self.got_date,
            min_date=datetime.date(2020, 2, 15),
            max_date=datetime.date(2022, 3, 27),
        )
        # date_dialog.bind(on_save=self.on_save, on_cancel=self.on_cancel)
        date_dialog.open()

    def show_time_picker(self):
        time_dialog = MDTimePicker()
        time_dialog.bind(time=self.get_time)
        time_dialog.open()

    def get_time(self, instance, time):
        print(instance, time)
        self.ids['service_time'].text = str(time)
        return time

    def got_date(self, the_date):
        print(the_date)
        self.ids['service_dt'].text = str(the_date)

    def go_home(self):
        self.manager.current = 'home_screen'
Пример #29
0
class MyApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.store = JsonStore('data.json')
        self.buffer_item = None
        self.auto_clear = False
        self.active_data_items = []
        self.history_data_items = []
        self.screen = Builder.load_file('app.kv')
        self.menu = MDDropdownMenu(caller=self.screen.ids.button,
                                   items=[{
                                       "text": 'Settings'
                                   }, {
                                       "text": 'About project'
                                   }],
                                   width_mult=4)
        self.menu.bind(on_release=self.callback_menu_toolbar)

        self.dialog_new_item = MDDialog(
            title="Add new item:",
            type="custom",
            md_bg_color=[1, 1, 1, 1.0],
            content_cls=Content(),
            buttons=[
                MDFlatButton(text="CANCEL",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_new_item_close),
                MDFlatButton(text="OK",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_new_item_ok),
            ],
        )

        self.dialog_complete = MDDialog(
            title="Complete item",
            text=
            "Do you want the item to move into the history?\n(If auto clear enable, item will be deleted)",
            md_bg_color=[1, 1, 1, 1.0],
            buttons=[
                MDFlatButton(text="NO",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_complete_no),
                MDFlatButton(text="YES",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_complete_yes),
            ],
        )

        self.dialog_delete = MDDialog(
            title="Delete item",
            text=
            "Are you sure you want to delete this item?\nYou will not restore them after delete",
            md_bg_color=[1, 1, 1, 1.0],
            buttons=[
                MDFlatButton(text="NO",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_delete_no),
                MDFlatButton(text="YES",
                             text_color=self.theme_cls.primary_color,
                             on_release=self.dialog_delete_yes),
            ],
        )

        self.but_add = MDFloatingActionButton(icon="plus",
                                              pos_hint={
                                                  "center_x": .9,
                                                  "center_y": .1
                                              },
                                              md_bg_color=[
                                                  0.11372549019607843,
                                                  0.9137254901960784,
                                                  0.7137254901960784, 1.0
                                              ],
                                              on_release=self.click_but_add)
        self.screen.ids.screen_manager.get_screen('main').add_widget(
            self.but_add)

    def click_but_add(self, *args):
        self.dialog_new_item.content_cls.ids.item.text = ''
        self.dialog_new_item.content_cls.ids.number.text = ''
        self.dialog_new_item.content_cls.ids.details.text = ''
        self.dialog_new_item.open()

    def dialog_complete_yes(self, *args):
        self.dialog_complete.dismiss()
        self.screen.ids.screen_manager.get_screen(
            'main').ids.scroll_active.remove_widget(self.buffer_item)
        self.active_data_items.remove({
            'text':
            self.buffer_item.text,
            'secondary_text':
            self.buffer_item.secondary_text
        })
        if not self.auto_clear:
            self.buffer_item = TwoLineAvatarIconListItem(
                text=self.buffer_item.text,
                secondary_text=self.buffer_item.secondary_text,
                on_release=self.click_on_history_list_item)
            self.screen.ids.screen_manager.get_screen(
                'main').ids.scroll_history.add_widget(self.buffer_item)
            self.history_data_items.append({
                'text':
                self.buffer_item.text,
                'secondary_text':
                self.buffer_item.secondary_text
            })
        self.buffer_item = None

    def dialog_complete_no(self, *args):
        self.dialog_complete.dismiss()
        self.buffer_item = None

    def dialog_delete_no(self, *args):
        self.dialog_delete.dismiss()
        self.buffer_item = None

    def dialog_delete_yes(self, *args):
        self.dialog_delete.dismiss()
        self.history_data_items.remove({
            'text':
            self.buffer_item.text,
            'secondary_text':
            self.buffer_item.secondary_text
        })
        self.screen.ids.screen_manager.get_screen(
            'main').ids.scroll_history.remove_widget(self.buffer_item)
        self.buffer_item = None

    def click_on_active_list_item(self, item):
        self.buffer_item = item
        self.dialog_complete.open()

    def click_on_history_list_item(self, item):
        self.buffer_item = item
        self.dialog_delete.open()

    def dialog_new_item_ok(self, *args):
        item = self.dialog_new_item.content_cls.ids.item.text
        number = self.dialog_new_item.content_cls.ids.number.text
        details = self.dialog_new_item.content_cls.ids.details.text
        self.screen.ids.screen_manager.get_screen(
            'main').ids.scroll_active.add_widget(
                TwoLineAvatarIconListItem(
                    text=item + '  ' + number,
                    secondary_text=details,
                    on_release=self.click_on_active_list_item))
        self.active_data_items.append({
            'text': item + '  ' + number,
            'secondary_text': details
        })
        self.dialog_new_item.dismiss()

    def dialog_new_item_close(self, *args):
        self.dialog_new_item.dismiss()

    def switch_clear_mode(self, switch, value):
        self.auto_clear = value

    def switch_color_mode(self, switch, value):
        if value:
            self.theme_cls.theme_style = 'Dark'
            self.dialog_new_item.md_bg_color = [0.15, 0.15, 0.15, 1.0]
            self.dialog_complete.md_bg_color = [0.15, 0.15, 0.15, 1.0]
            self.dialog_delete.md_bg_color = [0.15, 0.15, 0.15, 1.0]
        else:
            self.theme_cls.theme_style = 'Light'
            self.dialog_new_item.md_bg_color = [1, 1, 1, 1.0]
            self.dialog_complete.md_bg_color = [1, 1, 1, 1.0]
            self.dialog_delete.md_bg_color = [1, 1, 1, 1.0]

    def change_screen(self, name_screen):
        self.root.ids.screen_manager.current = name_screen

    def callback_menu_toolbar(self, instance_menu, instance_menu_item):
        if instance_menu_item.text == 'Settings':
            self.change_screen('settings')
        if instance_menu_item.text == 'About project':
            self.change_screen('about')
        instance_menu.dismiss()

    def on_stop(self):
        self.store.put(
            'settings',
            auto_clear=self.auto_clear,
            color_mode=self.theme_cls.theme_style,
            switch_color_mode_value=self.screen.ids.screen_manager.get_screen(
                'settings').ids.color_mode.active,
            switch_clear_mode_value=self.screen.ids.screen_manager.get_screen(
                'settings').ids.clear_mode.active)
        self.store.put('items_data',
                       active=self.active_data_items,
                       history=self.history_data_items)

    def on_start(self):
        settings = self.store.get('settings')
        self.auto_clear = settings['auto_clear']
        self.theme_cls.theme_style = settings['color_mode']
        self.screen.ids.screen_manager.get_screen(
            'settings'
        ).ids.color_mode.active = settings['switch_color_mode_value']
        self.screen.ids.screen_manager.get_screen(
            'settings'
        ).ids.clear_mode.active = settings['switch_clear_mode_value']
        self.active_data_items = self.store['items_data']['active']
        self.history_data_items = self.store['items_data']['history']

        for item in self.active_data_items:
            self.screen.ids.screen_manager.get_screen(
                'main').ids.scroll_active.add_widget(
                    TwoLineAvatarIconListItem(
                        text=item['text'],
                        secondary_text=item['secondary_text'],
                        on_release=self.click_on_active_list_item))
        for item in self.history_data_items:
            self.screen.ids.screen_manager.get_screen(
                'main').ids.scroll_history.add_widget(
                    TwoLineAvatarIconListItem(
                        text=item['text'],
                        secondary_text=item['secondary_text'],
                        on_release=self.click_on_history_list_item))

    def build(self):
        return self.screen
Пример #30
0
class SignupScreen(Screen):
    def get_date(self, date, *args):
        print(date)
        print(type(date))
        self.ids.date.text = str(date)

    def show_date_picker(self, *args):
        date_dialog = MDDatePicker(
            callback=self.get_date,
            year=random.randint(1997, 2005),
            month=random.randint(1, 12),
            day=random.randint(1, 28),
        )
        date_dialog.open()

    def on_enter(self, *args):

        menu_items = [{
            "icon": "gender-male",
            "text": "Male"
        }, {
            "icon": "gender-female",
            "text": "Female"
        }, {
            "icon": "gender-non-binary",
            "text": "Other"
        }, {
            "icon": "face",
            "text": "Prefer not to say"
        }]

        self.menu = MDDropdownMenu(
            caller=self.ids.gender,
            items=menu_items,
            position="bottom",
            width_mult=4,
        )
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        def set_item(interval):
            self.ids.gender.text = instance_menu_item.text
            instance_menu.dismiss()

        Clock.schedule_once(set_item, 0.5)

    def signup(self, *args):
        errors = 0

        import string

        def isEnglish(s):
            try:
                s.encode(encoding='utf-8').decode('ascii')
            except UnicodeDecodeError:
                return False
            else:
                return True

        # Check full name

        self.ids.flname.error = False
        self.ids.flname.helper_text = ""

        if isEnglish(self.ids.flname.text) == True:
            for char in self.ids.flname.text:
                if char in string.punctuation and char not in ['_', '.', ' ']:
                    self.ids.flname.error = True
                    self.ids.flname.helper_text = "Punctuations other than '.' and '_' aren't allowed!"
                    errors = 3
                else:
                    self.ids.flname.error = False

        else:
            self.ids.flname.error = True
            self.ids.flname.helper_text = "Non-English characters aren't allowed!"
            errors = 4

        # Check date

        from datetime import datetime
        date_obj = ''
        self.ids.date.error = False
        self.ids.date.helper_text = ""
        try:
            date_obj = datetime.strptime(self.ids.date.text, '%Y-%m-%d')
        except:
            self.ids.date.error = True
            self.ids.date.helper_text = "Incorrect date!"
            errors = 5

        # Check gender

        self.ids.gender.error = False
        self.ids.gender.helper_text = ""
        self.ids.gender.helper_text_mode = "on_focus"

        if self.ids.gender.text == 'Prefer not to say':
            self.ids.gender.text = 'Undefined'

        if self.ids.gender.text not in [
                'Male', 'Female', 'Other', 'Undefined'
        ]:
            self.ids.gender.error = True
            self.ids.gender.helper_text = "Incorrect gender!"
            errors = 6

        # Check Email
        import re

        self.ids.email.error = False
        self.ids.email.helper_text = ""

        regex = r'^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$'
        print(self.ids.email.text)
        if not (re.search(regex, self.ids.email.text)):
            self.ids.email.error = True
            self.ids.email.helper_text = "Incorrect email format!"
            errors = 7

        # Check Password

        # self.ids.passw.error = False
        # self.ids.passw.helper_text = ""

        # if isEnglish(self.ids.passw.text) == False:
        #     self.ids.passw.error = True
        #     self.ids.passw.helper_text = "Non-English letters aren't allowed!"
        #     errors = 8

        # # Check Confirm Password

        # self.ids.conf_pass.error = False
        # self.ids.conf_pass.helper_text = ""

        # if isEnglish(self.ids.conf_pass.text) == False:
        #     self.ids.conf_pass.error = True
        #     self.ids.conf_pass.helper_text = "Non-English letters aren't allowed!"
        #     errors = 9

        # Check if password does't match

        self.ids.passw.error = False
        self.ids.conf_pass.error = False
        self.ids.passw.helper_text = ""
        self.ids.conf_pass.helper_text = ""

        if (self.ids.passw.text != self.ids.conf_pass.text):
            self.ids.passw.error = True
            self.ids.conf_pass.error = True
            self.ids.passw.helper_text = "Passwords do not match!"
            self.ids.conf_pass.helper_text = "Passwords do not match!"
            errors = 10

        # Upload to firebase
        print("Signing up...")
        print(str(errors))
        if errors == 0:
            print("No errors")

            toast('Creating account...')

            def go(self, *args):
                data = {
                    'fullname': self.ids.flname.text,
                    'bdate': self.ids.date.text,
                    'gender': self.ids.gender.text,
                    'email': self.ids.email.text,
                    'points': 0,
                    'rank': 'Newbie',
                    'pic': 'not_uploaded'
                }

                import pyrebase
                from .fbconfig import users_firebaseConfig

                firebase = pyrebase.initialize_app(users_firebaseConfig)
                auth = firebase.auth()

                email = self.ids.email.text
                password = self.ids.passw.text

                try:
                    signup = auth.create_user_with_email_and_password(
                        email, password)
                    print(signup)
                    print(signup['localId'])
                    db = firebase.database()
                    db.child("users").child(signup['localId']).set(data)
                    Snackbar(text="Account created successfully!").open()
                    global userdata
                    userdata = data

                    self.manager.current = 'login'
                except requests.exceptions.HTTPError as e:
                    error_json = e.args[1]
                    error = json.loads(error_json)['error']['message']
                    print(error)
                    if error == "EMAIL_EXISTS":
                        print("Email already exists!")
                        Snackbar(text="Email already exists!").open()
                    elif error == "WEAK_PASSWORD":
                        print("Enter a stronger password!")
                        Snackbar(text="Enter a stronger password!").open()
                    else:
                        print(error)
                        Snackbar(text=error).open()

            threading.Thread(target=go, args=(self, *args)).start()