class RecipesList(Frame, BaseClass, Scrollable):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        BaseClass.__init__(self)
        Scrollable.__init__(self)

        self.parent = parent

        self.frame.configure(bg='lightgrey')

        self._create_recipes()

        self._button_add_new = CustomButton(self,
                                            view='border_orange',
                                            text='New',
                                            width=5,
                                            height=1,
                                            font=(self.default_font, 14,
                                                  'bold'))
        self._button_add_new.place(relx=1, rely=1, x=-110, y=-40)

        self._button_add_new.bind('<Button-1>', self._on_button_add_new_click)

    def _on_button_add_new_click(self, event):
        RecipeDialogNew(self)

    def _create_recipes(self):
        for i in range(0, 30):
            recipe = Recipe(self.frame)
            recipe.pack(fill=BOTH, pady=2)
    def __init__(self, parent):
        Frame.__init__(self, parent)
        BaseClass.__init__(self)

        self.parent = parent
        self['bg'] = 'white smoke'

        Grid.rowconfigure(self, 0, weight=1)
        Grid.columnconfigure(self, 0, weight=1)
        Grid.columnconfigure(self, 1, weight=1)
        Grid.columnconfigure(self, 2, weight=1)

        self._button_switcher = CustomButton(self,
                                             view='border_green',
                                             text='Show Available',
                                             font=(self.default_font, 14,
                                                   'normal', 'bold'),
                                             height=1,
                                             width=14)
        self._button_switcher.grid(column=0, row=0)

        self._label_search = CustomLabel(self,
                                         text='Search: ',
                                         bg='white smoke',
                                         font=('Halvetica', 12, 'normal',
                                               'normal'))
        self._label_search.grid(column=1, row=0, sticky=E)

        self._entry_search = CustomEntry(self, text='Text', width=50)
        self._entry_search.grid(column=2, row=0, padx=(0, 40), sticky=W)
        self._entry_search.bind('<Key>', self._on_entry_search_key)
        self.get_root().bind('<Button-1>', self._remove_focus)
예제 #3
0
    def __init__(self, parent, **kw):
        BaseClass.__init__(self)
        Toplevel.__init__(self, parent)

        self._parent = parent
        self['bg'] = 'white'
        self.geometry('350x100')
        if 'data' in kw: self._data = kw['data']

        for i in range(0, 2):
            Grid.columnconfigure(self, i, weight=1)
            Grid.rowconfigure(self, i, weight=1)

        self._button_cancel = CustomButton(self,
                                           view='normal_red',
                                           text='Cancel')
        self._button_cancel.grid(row=1, column=0)
        self._button_cancel.bind('<Button-1>', self._on_button_cancel_click)

        self._button_apply = CustomButton(self,
                                          view='normal_green',
                                          text='Accept')
        self._button_apply.grid(row=1, column=1)
        self._button_apply.bind('<Button-1>', self._on_button_apply_click)

        self._label_text = CustomLabel(
            self, text='Are you shure you want to delete this product?')
        self._label_text.grid(row=0, column=0, columnspan=2)
예제 #4
0
class Product(Frame, BaseClass):
    def __init__(self, parent, *args, **kw):
        Frame.__init__(self, parent)
        BaseClass.__init__(self)

        if kw['picture']: self._picture = kw['picture']
        if kw['name']: self._name = kw['name']
        self['bg'] = 'white'

        Grid.columnconfigure(self, 1, weight=1)

        self._picture_product = CustomPicture(self,
                                              picture=self._picture,
                                              size=70)
        self._picture_product.grid(column=0, row=1, pady=(0, 10), padx=(10, 0))

        self._label_product_name = CustomLabel(self,
                                               font=(self.default_font, 11,
                                                     'bold'),
                                               text=self._name)
        self._label_product_name.grid(column=1,
                                      row=1,
                                      sticky=W,
                                      padx=(10, 0),
                                      pady=(0, 10))

        self._button_delete_product = CustomButton(
            self,
            view='normal_red',
            text='Delete',
            command=self._on_button_delete_product_click)
        self._button_delete_product.grid(column=0,
                                         row=0,
                                         sticky=W,
                                         pady=(10, 5),
                                         padx=(15, 0))

        self._button_edit_product = CustomButton(
            self,
            view='normal_green',
            text='Edit',
            command=self._on_button_edit_product_click)
        self._button_edit_product.grid(column=1,
                                       row=0,
                                       sticky=E,
                                       pady=(10, 5),
                                       padx=(0, 15))

    def _on_button_delete_product_click(self):
        ProductDialogDelete(self, data=self._name)

    def _on_button_edit_product_click(self):
        pass
    def __init__(self, parent):
        Frame.__init__(self, parent)
        BaseClass.__init__(self)
        Scrollable.__init__(self)

        self.parent = parent

        self.frame.configure(bg='lightgrey')

        self._create_recipes()

        self._button_add_new = CustomButton(self,
                                            view='border_orange',
                                            text='New',
                                            width=5,
                                            height=1,
                                            font=(self.default_font, 14,
                                                  'bold'))
        self._button_add_new.place(relx=1, rely=1, x=-110, y=-40)

        self._button_add_new.bind('<Button-1>', self._on_button_add_new_click)
    def __init__(self, parent, **kw):
        BaseClass.__init__(self)
        Toplevel.__init__(self, parent)

        self.parent = parent
        self['bg'] = 'white'

        self.geometry('500x350')

        for i in range(0, 4):
            Grid.columnconfigure(self, i, weight=1)
            Grid.rowconfigure(self, i, weight=1)

        self._bottom_padding = 20

        self._button_exit = CustomButton(self,
                                         view='normal_red',
                                         text='Cancel',
                                         command=self._on_button_exit_click)
        self._button_exit.grid(row=4, column=0, pady=(0, self._bottom_padding))

        self._button_apply = CustomButton(self,
                                          view='normal_green',
                                          text='Apply',
                                          command=self._on_button_apply_click)
        self._button_apply.grid(row=4,
                                column=2,
                                pady=(0, self._bottom_padding))

        self._button_change_picture = CustomButton(
            self,
            view='normal_blue',
            text='Change Picture',
            command=self._on_button_change_picture_click)
        self._button_change_picture.grid(row=1, column=1, sticky=N)

        self._picture = CustomPicture(self,
                                      picture=self._get_placeholder(),
                                      size=150)
        self._picture.grid(column=1, row=0, pady=(20, 0))

        self._entry_name = CustomEntry(self, width=25)
        self._entry_name.grid(row=2, column=1, columnspan=2, sticky=W + E)

        self._label_name = CustomLabel(self, text='Product Name: ')
        self._label_name.grid(row=2, column=0, sticky=W + E)
class ProductDialogNew(Toplevel, BaseClass):
    def __init__(self, parent, **kw):
        BaseClass.__init__(self)
        Toplevel.__init__(self, parent)

        self.parent = parent
        self['bg'] = 'white'

        self.geometry('500x350')

        for i in range(0, 4):
            Grid.columnconfigure(self, i, weight=1)
            Grid.rowconfigure(self, i, weight=1)

        self._bottom_padding = 20

        self._button_exit = CustomButton(self,
                                         view='normal_red',
                                         text='Cancel',
                                         command=self._on_button_exit_click)
        self._button_exit.grid(row=4, column=0, pady=(0, self._bottom_padding))

        self._button_apply = CustomButton(self,
                                          view='normal_green',
                                          text='Apply',
                                          command=self._on_button_apply_click)
        self._button_apply.grid(row=4,
                                column=2,
                                pady=(0, self._bottom_padding))

        self._button_change_picture = CustomButton(
            self,
            view='normal_blue',
            text='Change Picture',
            command=self._on_button_change_picture_click)
        self._button_change_picture.grid(row=1, column=1, sticky=N)

        self._picture = CustomPicture(self,
                                      picture=self._get_placeholder(),
                                      size=150)
        self._picture.grid(column=1, row=0, pady=(20, 0))

        self._entry_name = CustomEntry(self, width=25)
        self._entry_name.grid(row=2, column=1, columnspan=2, sticky=W + E)

        self._label_name = CustomLabel(self, text='Product Name: ')
        self._label_name.grid(row=2, column=0, sticky=W + E)

    def _on_button_change_picture_click(self):
        picture_path = filedialog.askopenfilename()

        the_file = open(picture_path, 'rb')
        self._new_picture = the_file.read()

        the_file.close()

        self._picture.set_picture(self._new_picture)

    def _get_placeholder(self):
        self.database.query(
            'select `blob` from meta where text = "placeholder"')
        return self.database.fetch_one()[0]

    def _on_button_exit_click(self):
        self.destroy()

    def _on_button_apply_click(self):
        if self._entry_name.get() == "" or not hasattr(self, '_new_picture'):
            return

        self.database.query(
            'insert into products (name, picture) values (?, ?)',
            [self._entry_name.get(), self._new_picture])

        data = dict()
        data['name'] = self._entry_name.get()
        data['picture'] = self._new_picture

        self.event_dispatcher.dispatch_event(
            NewProductEvent(NewProductEvent.ASK, data))

        self.destroy()
예제 #8
0
class Recipe(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        BaseClass.__init__(self)

        self.parent = parent
        self['bg'] = 'white'
        self._ingredients = list()
        self._description = """
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere a, pede.

Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.

Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.

Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.
        """

        self._button_delete = CustomButton(self,
                                           view='normal_red',
                                           text='Delete')
        self._button_delete.grid(row=0,
                                 column=0,
                                 pady=(10, 10),
                                 padx=(10, 0),
                                 sticky=W)

        self._button_edit = CustomButton(self,
                                         view='normal_green',
                                         text='Edit')
        self._button_edit.grid(row=0,
                               column=1,
                               pady=(10, 10),
                               padx=(0, 10),
                               sticky=E)

        self._picture = CustomPicture(self,
                                      picture=self._get_placeholder(),
                                      size=150)
        self._picture.grid(column=0, row=1, pady=(0, 10), padx=(10, 0))

        Grid.columnconfigure(self, 1, weight=1)

        self._frame_text = Frame(self, bg='white')
        self._frame_text.grid(row=1, column=1, sticky=N + E + W + S)

        Grid.columnconfigure(self._frame_text, 0, weight=1)
        Grid.columnconfigure(self._frame_text, 1, weight=1)

        self._label_name = CustomLabel(self._frame_text,
                                       text='Cake',
                                       font=(self.default_font, 14, 'normal',
                                             'bold'))
        self._label_name.grid(row=0,
                              column=0,
                              columnspan=2,
                              sticky=W,
                              padx=(50, 0))

        self._label_ingredients_column_1 = CustomLabel(self._frame_text,
                                                       text='''
            1. Яицо куриное
            2. Пшеничная мука
            3. Сливки 33%-ные 
            4. Сыр маскарпоне
            5. Молочный шоколад
            6. Вишневый компот
            ''',
                                                       justify=LEFT)
        self._label_ingredients_column_1.grid(row=1, column=0, sticky=W + N)

        self._label_ingredients_column_2 = CustomLabel(self._frame_text,
                                                       text='''
            7. Топленое сливочное масло
            8. Шоколадное печенье
            9. Клубника
            10. Клубничный йогурт
            11. Мягкий творог
            12. Сахар
            ''',
                                                       justify=LEFT)
        self._label_ingredients_column_2.grid(row=1,
                                              column=1,
                                              sticky=W + N,
                                              padx=(0, 50))

        self._label_name.bind('<Button-1>', self._expand)
        self._picture.bind('<Button-1>', self._expand)
        self._label_ingredients_column_1.bind('<Button-1>', self._expand)
        self._label_ingredients_column_2.bind('<Button-1>', self._expand)

        self.event_dispatcher.add_event_listener(RecipeExpandEvent.ASK,
                                                 self._shrink)

    def _shrink(self, event):
        data = event.data
        if data == self: return
        else:
            if hasattr(self, '_label_description') and self._label_description:
                self._label_description.grid_forget()
                self._label_description.destroy()
                self._label_description = None
                self._label_description_title.grid_forget()
                self._label_description_title.destroy()
                self._label_description_title = None

    def _expand(self, event):
        self.event_dispatcher.dispatch_event(
            RecipeExpandEvent(RecipeExpandEvent.ASK, self))

        self._label_description_title = CustomLabel(self,
                                                    text='Recipe:',
                                                    font=(self.default_font,
                                                          14, 'bold'))
        self._label_description_title.grid(row=2, column=0, columnspan=2)

        self._label_description = CustomLabel(self,
                                              text=self._description,
                                              wraplength=(self.winfo_width() -
                                                          40),
                                              justify=LEFT)
        self._label_description.grid(row=3, column=0, columnspan=2)

    def _get_placeholder(self):
        self.database.query(
            'select picture from products where name = "{}"'.format('Banana'))
        return self.database.fetch_one()[0]
예제 #9
0
class RecipeDialogNew(Toplevel, BaseClass):
    def __init__(self, parent, **kw):
        BaseClass.__init__(self)
        Toplevel.__init__(self, parent)

        self.parent = parent
        self['bg'] = 'white'
        self.geometry('480x650')

        self._vertical_padding = 20
        self._horizontal_padding = 20

        for i in range(0, 8):
            Grid.columnconfigure(self, i, weight=1)
            Grid.rowconfigure(self, i, weight=1)

        self._label_name = CustomLabel(self, text="Name: ")
        self._label_name.grid(row=0, column=1, sticky=S + W)

        self._entry_name = CustomEntry(self, width=35)
        self._entry_name.grid(row=1, column=1, sticky=N)

        self._label_ingredients = CustomLabel(self, text='Ingredients:')
        self._label_ingredients.grid(row=2, column=1, sticky=S + W)

        self._frame_ingredients = Frame(self)
        self._frame_ingredients.grid(row=3, column=1, sticky=N + E + W + S)

        self._scrollbar_ingredients = Scrollbar(self._frame_ingredients,
                                                orient=VERTICAL)

        self._listbox_ingredients = Listbox(
            self._frame_ingredients,
            selectmode=EXTENDED,
            yscrollcommand=self._scrollbar_ingredients.set)
        self._scrollbar_ingredients.config(
            command=self._listbox_ingredients.yview)
        self._listbox_ingredients.pack(side=LEFT, fill=BOTH, expand=1)
        self._scrollbar_ingredients.pack(side=RIGHT, fill=BOTH)

        for item in self._get_all_ingredients():
            self._listbox_ingredients.insert(END, item[0])

        self._label_description = CustomLabel(self, text='Description:')
        self._label_description.grid(row=4, column=1, sticky=S + W)

        self._entry_description = Text(self, height=10, width=50)
        self._entry_description.grid(row=5, column=1, sticky=N)

        self._picture = CustomPicture(self,
                                      picture=self._get_placeholder(),
                                      size=100)
        self._picture.grid(row=6, column=1)

        self._button_picture = CustomButton(self,
                                            view='normal_blue',
                                            text='Change Picture')
        self._button_picture.grid(row=7, column=1, sticky=N)
        self._button_picture.bind('<Button-1>', self._on_button_picture_click)

        self._button_exit = CustomButton(self,
                                         view='normal_red',
                                         text='Cancel')
        self._button_exit.grid(row=8,
                               column=0,
                               sticky=N + E + W + S,
                               pady=(0, self._vertical_padding),
                               padx=(self._horizontal_padding, 0))
        self._button_exit.bind('<Button-1>', self._on_button_exit_click)

        self._button_apply = CustomButton(self,
                                          view='normal_green',
                                          text='Apply')
        self._button_apply.grid(row=8,
                                column=2,
                                sticky=N + E + W + S,
                                pady=(0, self._vertical_padding),
                                padx=(0, self._horizontal_padding))
        self._button_apply.bind('<Button-1>', self._on_button_apply_click)

    def _on_button_apply_click(self, event):
        if self._entry_description.get(
                1.0, END) == '' or not hasattr(self, '_new_picture'):
            return

        ingredients_indexes = self._listbox_ingredients.curselection()
        ingredients_string = ''
        for i in ingredients_indexes:
            ingredients_string += '|' + self._listbox_ingredients.get(i) + '|'

        self.database.query(
            'insert into recipes (name, description, picture, ingredients) values (?, ?, ?, ?)',
            [
                self._entry_name.get(),
                self._entry_description.get(1.0, END), self._new_picture,
                ingredients_string
            ])

        data = dict()
        data['name'] = self._entry_name.get()
        data['description'] = self._entry_description.get(1.0, END)
        data['picture'] = self._new_picture
        data['ingredients'] = ingredients_string

        self.event_dispatcher.dispatch_event(
            NewRecipeEvent(NewRecipeEvent.ASK, data))

        self.destroy()

    def _on_button_exit_click(self, event):
        self.destroy()

    def _get_placeholder(self):
        self.database.query(
            'select `blob` from meta where text = "placeholder"')
        return self.database.fetch_one()[0]

    def _get_all_ingredients(self):
        self.database.query('select `name` from products')
        self._ingredients = self.database.fetch_all()
        return self._ingredients

    def _on_button_picture_click(self, event):
        picture_path = filedialog.askopenfilename()

        the_file = open(picture_path, 'rb')
        self._new_picture = the_file.read()

        the_file.close()

        self._picture.set_picture(self._new_picture)
예제 #10
0
    def __init__(self, parent, **kw):
        BaseClass.__init__(self)
        Toplevel.__init__(self, parent)

        self.parent = parent
        self['bg'] = 'white'
        self.geometry('480x650')

        self._vertical_padding = 20
        self._horizontal_padding = 20

        for i in range(0, 8):
            Grid.columnconfigure(self, i, weight=1)
            Grid.rowconfigure(self, i, weight=1)

        self._label_name = CustomLabel(self, text="Name: ")
        self._label_name.grid(row=0, column=1, sticky=S + W)

        self._entry_name = CustomEntry(self, width=35)
        self._entry_name.grid(row=1, column=1, sticky=N)

        self._label_ingredients = CustomLabel(self, text='Ingredients:')
        self._label_ingredients.grid(row=2, column=1, sticky=S + W)

        self._frame_ingredients = Frame(self)
        self._frame_ingredients.grid(row=3, column=1, sticky=N + E + W + S)

        self._scrollbar_ingredients = Scrollbar(self._frame_ingredients,
                                                orient=VERTICAL)

        self._listbox_ingredients = Listbox(
            self._frame_ingredients,
            selectmode=EXTENDED,
            yscrollcommand=self._scrollbar_ingredients.set)
        self._scrollbar_ingredients.config(
            command=self._listbox_ingredients.yview)
        self._listbox_ingredients.pack(side=LEFT, fill=BOTH, expand=1)
        self._scrollbar_ingredients.pack(side=RIGHT, fill=BOTH)

        for item in self._get_all_ingredients():
            self._listbox_ingredients.insert(END, item[0])

        self._label_description = CustomLabel(self, text='Description:')
        self._label_description.grid(row=4, column=1, sticky=S + W)

        self._entry_description = Text(self, height=10, width=50)
        self._entry_description.grid(row=5, column=1, sticky=N)

        self._picture = CustomPicture(self,
                                      picture=self._get_placeholder(),
                                      size=100)
        self._picture.grid(row=6, column=1)

        self._button_picture = CustomButton(self,
                                            view='normal_blue',
                                            text='Change Picture')
        self._button_picture.grid(row=7, column=1, sticky=N)
        self._button_picture.bind('<Button-1>', self._on_button_picture_click)

        self._button_exit = CustomButton(self,
                                         view='normal_red',
                                         text='Cancel')
        self._button_exit.grid(row=8,
                               column=0,
                               sticky=N + E + W + S,
                               pady=(0, self._vertical_padding),
                               padx=(self._horizontal_padding, 0))
        self._button_exit.bind('<Button-1>', self._on_button_exit_click)

        self._button_apply = CustomButton(self,
                                          view='normal_green',
                                          text='Apply')
        self._button_apply.grid(row=8,
                                column=2,
                                sticky=N + E + W + S,
                                pady=(0, self._vertical_padding),
                                padx=(0, self._horizontal_padding))
        self._button_apply.bind('<Button-1>', self._on_button_apply_click)