PoeTrade/src/gui.py

85 lines
3.8 KiB
Python

from tkinter import ttk
from tkinter import Tk
from tkinter import Button, Label
from .data import Message
from src import sendkeys
from typing import Callable
class Gui(Tk):
def __init__(self, parent=None) -> None:
Tk.__init__(self, parent)
self.title("Uber Trader")
# self.geometry("300x200+10+20")
self.overrideredirect(1) # remove border
self.wm_withdraw() # Hide window
self.attributes('-topmost', True) # always on top
style = ttk.Style()
style.configure("BW.TLabel", foreground="white", background="black")
self.tab_control = ttk.Notebook(self, style='BW.TLabel')
self.tab_control.pack(expand=1, fill='both')
self.tab_control.bind("<ButtonPress-1>", self.start_move)
self.tab_control.bind("<ButtonRelease-1>", self.stop_move)
self.tab_control.bind("<B1-Motion>", self.do_move)
self.tabs = dict()
def add_tab(self, number: int, message: Message) -> None:
self.wm_deiconify()
tab = ttk.Frame(self.tab_control, style='BW.TLabel')
if message.user not in self.tabs:
self.tabs[message.user] = dict()
if message.trade.item not in self.tabs[message.user]:
self.tabs[message.user][message.trade.item] = (tab, message)
ttk.Label(tab, text=message.trade.item, style='BW.TLabel').pack(anchor='e', side='left')
Label(tab, text=f'{message.trade.amount} {message.trade.currency}').pack(anchor='e', side='left')
self.add_button(tab=tab, text='Inv', callback=self.inv_callback, message=message)
# Button(tab, text='Inv', command=lambda mess=message: self.inv_callback(message, tab)).pack(anchor='e', side='left')
Button(tab, text='Trade', command=lambda mess=message: self.trade_callback(message, tab)).pack(anchor='e', side='left')
Button(tab, text='Ty', command=lambda mess=message: self.ty_callback(message, tab)).pack(anchor='e', side='left')
Button(tab, text='Wait', command=lambda mess=message: self.wait_callback(message, tab)).pack(anchor='e', side='left')
Button(tab, text='X', command=lambda mess=message: self.destroy_tab(message, tab)).pack(anchor='e', side='left')
self.tab_control.add(tab, text=message.user)
def add_button(tab: ttk.Frame, text: str, callback: Callable, message: Message) -> None:
Button(tab, text=text, command=lambda mess=message: callback(message, tab)).pack(anchor='e', side='left')
def start_move(self, event):
self.x = event.x
self.y = event.y
def stop_move(self, event):
self.x = None
self.y = None
def do_move(self, event):
deltax = event.x - self.x
deltay = event.y - self.y
x = self.winfo_x() + deltax
y = self.winfo_y() + deltay
self.geometry(f"+{x}+{y}")
def inv_callback(self, message: Message, tab: ttk.Frame):
sendkeys.invite(message=message)
sendkeys.send_to_format(type='pickup', message=message)
def ty_callback(self, message: Message, tab: ttk.Frame):
sendkeys.send_to_format(type='ty', message=message)
sendkeys.kick(message=message)
self.destroy_tab(message=message, tab=tab)
def trade_callback(self, message: Message, tab: ttk.Frame):
sendkeys.trade(message=message)
def wait_callback(self, message: Message, tab: ttk.Frame):
sendkeys.send_to_format(type='wait', message=message)
def destroy_tab(self, message: Message, tab: ttk.Frame) -> None:
if message.user in self.tabs:
if message.trade.item in self.tabs[message.user]:
del self.tabs[message.user][message.trade.item]
if not self.tabs[message.user]:
del self.tabs[message.user]
tab.destroy()
if not self.tabs:
self.wm_withdraw()