Example #1
0
    def buy_command(self):
        # item_name = None
        affordable = None
        print(recent_selection['selected'])
        item_name = self.get_tree_item_name(recent_selection['selected'][0])

        if item_name is not None:
            affordable = user_info['char'].buy_sell(item_name, 'buy',
                                                    self.conn)

        currency_dict = static_functions.convert_currency(
            user_info['char'].currency)
        self.update_currency_treeview(currency_dict)
        self.root.update()

        if affordable:
            self.buy_item_gui(recent_selection['selected'])

            if not database.in_inventory(self.conn, user_info['inv'],
                                         item_name, '+'):
                user_info['char'].add_item_db(self.conn, item_name,
                                              user_info['acc'].id,
                                              user_info['inv'])

        self.check_value_and_toggle()
Example #2
0
 def populate_inventory_treeview_db(self, db_char_items):
     for item in db_char_items:
         converted_value = static_functions.convert_currency(item[2])
         cur_type = static_functions.inspecto_gadget(converted_value)
         item_id = self.inventory_treeview.insert('', 'end', text=item[0])
         static_functions.img_tag(self.inventory_treeview, item_id,
                                  cur_type)
         self.inventory_treeview.set(item_id, 'quantity', item[1])
         self.inventory_treeview.set(item_id, 'unit_value',
                                     converted_value[cur_type])
Example #3
0
 def new_tree_item(self, some_treeview, some_callback):
     item_name = some_treeview.item(some_callback[0])['text']
     item_value = sql.execute_fetchone_sql(self.conn,
                                           sql.query_store_item_value(),
                                           item_name)
     converted_value = static_functions.convert_currency(item_value[0])
     cur_type = static_functions.inspecto_gadget(converted_value)
     new_item = self.inventory_treeview.insert(
         '', 'end', text=some_treeview.item(some_callback[0])['text'])
     static_functions.img_tag(self.inventory_treeview, new_item, cur_type)
     self.new_inventory_quantity(new_item)
     self.new_inventory_unit_value(new_item, converted_value[cur_type])
Example #4
0
    def sell_command(self):
        tup = inv_selected['selected']
        item = self.inventory_treeview.item(tup, 'text')
        user_info['char'].buy_sell(item, 'sell', self.conn)
        currency_dict = static_functions.convert_currency(
            user_info['char'].currency)
        self.update_currency_treeview(currency_dict)
        self.sell_item_gui(inv_selected['selected'])
        self.root.update()

        if not database.in_inventory(self.conn, user_info['inv'], item, '-'):
            database.delete_item(self.conn, item, user_info['inv'])
Example #5
0
    def add_currency_command(self, cur_type):
        answer = simpledialog.askinteger(
            'Input',
            f'How much {cur_type} do you want to add?',
            minvalue=1,
            maxvalue=100000)

        if cur_type == 'gold':
            answer = answer * 100
        elif cur_type == 'silver':
            answer = answer * 10

        user_info['char'].currency += answer
        user_info['char'].update_currency_db(self.conn)
        new_cur_dict = static_functions.convert_currency(
            user_info['char'].currency)
        self.update_currency_treeview(new_cur_dict)
Example #6
0
    def subtract_currency_command(self, cur_type):
        answer = simpledialog.askinteger(
            'Input',
            f'How much {cur_type} do you want to add?',
            minvalue=1,
            maxvalue=100000)

        if cur_type == 'gold':
            answer = answer * 100
        elif cur_type == 'silver':
            answer = answer * 10
        if answer > user_info['char'].currency:
            error_box.cant_remove_that_much()
        else:
            user_info['char'].currency -= answer
            user_info['char'].update_currency_db(self.conn)
            new_cur_dict = static_functions.convert_currency(
                user_info['char'].currency)
            self.update_currency_treeview(new_cur_dict)
Example #7
0
    def __init__(self, root):
        self.conn = database.create_connection(database.db)

        MainWindow.__init__(self, root)
        self.currency_dict = static_functions.convert_currency(
            user_info['char'].currency)

        self.gen_frame = LabelFrame(root, text='General Store')
        self.bs_frame = LabelFrame(root, text='Blacksmith')
        self.ship_frame = LabelFrame(root, text='Shipyard')
        self.stable_frame = LabelFrame(root, text='Stables')

        # Treeviews

        self.shipyard_treeview = ttk.Treeview(
            self.ship_frame
        )  # ttk.Treeview(parent) Sets a treeview to a given parent window
        self.general_store_treeview = ttk.Treeview(self.gen_frame)
        self.blacksmith_treeview = ttk.Treeview(self.bs_frame)
        self.stables_treeview = ttk.Treeview(self.stable_frame)
        self.inventory_treeview = ttk.Treeview(root)
        self.currency_treeview = ttk.Treeview(root)

        # List of store treeviews
        self.store_treeviews = [
            self.shipyard_treeview, self.stables_treeview,
            self.blacksmith_treeview, self.general_store_treeview
        ]

        recent_selection['selected'] = 'None'
        inv_selected['selected'] = 'none'

        # Scrollbars
        self.gen_vsb = ttk.Scrollbar(self.gen_frame,
                                     orient="vertical",
                                     command=self.general_store_treeview.yview)
        self.bs_vsb = ttk.Scrollbar(self.bs_frame,
                                    orient="vertical",
                                    command=self.blacksmith_treeview.yview)
        self.stable_vsb = ttk.Scrollbar(self.stable_frame,
                                        orient="vertical",
                                        command=self.stables_treeview.yview)

        self.general_store_treeview.configure(yscrollcommand=self.gen_vsb.set)
        self.blacksmith_treeview.configure(yscrollcommand=self.bs_vsb.set)
        self.stables_treeview.configure(yscrollcommand=self.stable_vsb.set)

        # TODO: Refactor menu names, they are currently s***e.
        # Menus

        store_popup_menu = Menu(tearoff=False)
        store_popup_menu.add_command(label='Add Item',
                                     command=self.add_command)

        inventory_popup_menu = Menu(tearoff=False)
        inventory_popup_menu.add_command(label='Subtract One',
                                         command=self.subtract_one_command)
        inventory_popup_menu.add_command(label='Remove Item',
                                         command=self.remove_command)
        inventory_popup_menu.add_command(label='Update Quantity',
                                         command=self.update_quantity_command)

        currency_popup_menu = Menu(tearoff=False)
        update_submenu = Menu(tearoff=False)
        add_submenu = Menu(tearoff=False)
        subtract_submenu = Menu(tearoff=False)

        update_submenu.add_command(
            label='Gold', command=lambda: self.update_currency_command('gold'))
        update_submenu.add_command(
            label='Silver',
            command=lambda: self.update_currency_command('silver'))
        update_submenu.add_command(
            label='Copper',
            command=lambda: self.update_currency_command('copper'))

        add_submenu.add_command(
            label='Gold', command=lambda: self.add_currency_command('gold'))
        add_submenu.add_command(
            label='Silver',
            command=lambda: self.add_currency_command('silver'))
        add_submenu.add_command(
            label='Copper',
            command=lambda: self.add_currency_command('copper'))

        subtract_submenu.add_command(
            label='Gold',
            command=lambda: self.subtract_currency_command('gold'))
        subtract_submenu.add_command(
            label='Silver',
            command=lambda: self.subtract_currency_command('silver'))
        subtract_submenu.add_command(
            label='Copper',
            command=lambda: self.subtract_currency_command('copper'))

        currency_popup_menu.add_cascade(label='Update', menu=update_submenu)
        currency_popup_menu.add_cascade(label='Add', menu=add_submenu)
        currency_popup_menu.add_cascade(label='Subtract',
                                        menu=subtract_submenu)

        def select_item(event, some_tree):
            iid = some_tree.identify_row(event.y)
            if iid is not None:
                print(iid)
                some_tree.selection_set(iid)
                return True

        def general_store_popup(event):
            if select_item(event, self.general_store_treeview):
                store_popup_menu.post(event.x_root, event.y_root)

        def blacksmith_popup(event):
            if select_item(event, self.blacksmith_treeview):
                store_popup_menu.post(event.x_root, event.y_root)

        def stables_popup(event):
            if select_item(event, self.stables_treeview):
                store_popup_menu.post(event.x_root, event.y_root)

        def shipyard_popup(event):
            if select_item(event, self.shipyard_treeview):
                store_popup_menu.post(event.x_root, event.y_root)

        def inventory_popup(event):
            if select_item(event, self.inventory_treeview):
                inventory_popup_menu.post(event.x_root, event.y_root)

        def currency_popup(event):
            currency_popup_menu.post(event.x_root, event.y_root)

        def format_store(some_treeview):
            some_treeview.tag_configure('gold', image=gold_img)
            some_treeview.tag_configure('silver', image=silver_img)
            some_treeview.tag_configure('copper', image=copper_img)
            some_treeview.config(columns='price')
            some_treeview.column('price', width=85, anchor='center')
            some_treeview.column('#0', width=150)
            some_treeview.heading('price', text='Price')
            some_treeview.heading('#0', text='Item')

        for treeview in self.store_treeviews:
            format_store(treeview)

        # TODO: Verify purpose of error handling.
        try:
            self.populate_all_trees()
        except TclError:
            pass

        # Creates the initial currency item. If item exists, updates treeview instead.
        # TODO: Verify that error handling is both necessary and used correctly.
        try:
            self.currency_treeview.insert('',
                                          'end',
                                          'gold',
                                          text=self.currency_dict['gp'])

        except TclError:
            print('tcl error')
            self.update_currency_treeview(self.currency_dict)

        # Binds
        self.shipyard_treeview.bind('<<TreeviewSelect>>',
                                    self.shipyard_callback)
        self.blacksmith_treeview.bind('<<TreeviewSelect>>',
                                      self.blacksmith_callback)
        self.stables_treeview.bind('<<TreeviewSelect>>', self.stables_callback)
        self.inventory_treeview.bind('<<TreeviewSelect>>',
                                     self.inventory_callback)
        self.general_store_treeview.bind('<<TreeviewSelect>>',
                                         self.general_store_callback)

        # for treeview in self.store_treeviews:
        #     treeview.bind('<Button-3>', general_store_popup)

        self.general_store_treeview.bind('<Button-3>', general_store_popup)
        self.blacksmith_treeview.bind('<Button-3>', blacksmith_popup)
        self.stables_treeview.bind('<Button-3>', stables_popup)
        self.shipyard_treeview.bind('<Button-3>', shipyard_popup)

        self.inventory_treeview.bind('<Button-3>', inventory_popup)
        self.currency_treeview.bind('<Button-3>', currency_popup)

        # General grid formatting
        self.general_store_treeview.grid(row=0, column=0)
        self.blacksmith_treeview.grid(row=0, column=0)
        self.stables_treeview.grid(row=0, column=0)
        self.shipyard_treeview.grid(row=0, column=0)

        self.gen_vsb.grid(row=0, column=1, sticky='ns')
        self.bs_vsb.grid(row=0, column=1, sticky='ns')
        self.stable_vsb.grid(row=0, column=1, sticky='ns')

        self.gen_frame.grid(row=0, column=0)
        self.bs_frame.grid(row=0, column=1)
        self.stable_frame.grid(row=0, column=2)
        self.ship_frame.grid(row=0, column=3)

        # self.general_store_treeview.grid(row=0, column=0)
        # self.blacksmith_treeview.grid(row=0, column=1)
        # self.stables_treeview.grid(row=0, column=2)
        # self.shipyard_treeview.grid(row=0, column=3)
        self.inventory_treeview.grid(row=3, columnspan=4, sticky=W + E)
        self.currency_treeview.grid(row=2, columnspan=4)

        # Currency formatting

        self.currency_treeview.config(columns=['silver', 'copper'], height=1)
        self.currency_treeview.column('#0', width=55, anchor='center')
        self.currency_treeview.column('silver', width=55, anchor='center')
        self.currency_treeview.column('copper', width=65, anchor='center')
        self.currency_treeview.heading('#0', text='Gold', image=gold_img)
        self.currency_treeview.heading('silver',
                                       text='Silver',
                                       image=silver_img)
        self.currency_treeview.heading('copper',
                                       text='Copper',
                                       image=copper_img)
        self.currency_treeview.set('gold', 'silver', self.currency_dict['sp'])
        self.currency_treeview.set('gold', 'copper', self.currency_dict['cp'])

        # Inventory formatting
        self.inventory_treeview.tag_configure('gold', image=gold_img)
        self.inventory_treeview.tag_configure('silver', image=silver_img)
        self.inventory_treeview.tag_configure('copper', image=copper_img)
        self.inventory_treeview.config(columns=('quantity', 'unit_value'))
        self.inventory_treeview.column('quantity', width=2, anchor='center')
        self.inventory_treeview.heading('quantity', text='Quantity')
        self.inventory_treeview.column('unit_value', width=55, anchor='center')
        self.inventory_treeview.heading('unit_value', text='Unit Value')
        self.inventory_treeview.column('#0', width=700)
        self.inventory_treeview.heading('#0', text='Item')

        # Buttons
        self.buy = Button(text='Buy', bg='gray', command=self.buy_command)
        self.buy.grid(row=1, columnspan=4, sticky=W + E)
        self.sell = Button(text='Sell',
                           bg='gray',
                           activebackground='green',
                           command=self.sell_command)
        self.sell.grid(row=4, columnspan=4, sticky=N + W + E)
        self.logout_button = Button(text='Log-out',
                                    bg='gray',
                                    command=self.logout_command)
        self.logout_button.grid(row=5, column=0, pady=50, sticky=S + W)
        self.dashboard_page_character_select_button = Button(
            text='Character Selection',
            bg='gray',
            command=self.char_select_command)

        self.dashboard_page_character_select_button.grid(row=5,
                                                         column=3,
                                                         pady=50,
                                                         sticky=S + E)

        self.populate_inventory()

        cur_size = self.screen_size()
        # TODO: Magic numbers are bad mkay.
        if cur_size['h'] != 647:
            self.center([1019, 647])