167 lines
6.3 KiB
Python
167 lines
6.3 KiB
Python
from PySide6.QtWidgets import QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QLabel, QSizePolicy, QFrame
|
|
from PySide6 import QtCore
|
|
from PySide6.QtGui import QIcon
|
|
from src.data import Message
|
|
from src import sendkeys
|
|
from src.data import log
|
|
from typing import Callable
|
|
|
|
|
|
class TradeWidget(QWidget):
|
|
"""docstring for TradeWidget."""
|
|
|
|
def __init__(self,
|
|
message: Message,
|
|
parent):
|
|
super(TradeWidget, self).__init__(parent=parent)
|
|
self.message = message
|
|
self.parent = parent
|
|
|
|
self.main_layout = QHBoxLayout()
|
|
self.main_layout.setSpacing(0)
|
|
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
|
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
|
self.setLayout(self.main_layout)
|
|
assert message.trade
|
|
|
|
def new_button(self, icon_filename: str, tooltip: str, callback: Callable[[], None]) -> QPushButton:
|
|
icon = QIcon(icon_filename)
|
|
button = QPushButton(icon=icon, text='', parent=self)
|
|
button.setToolTip(tooltip)
|
|
button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
|
button.setContentsMargins(0, 0, 0, 0)
|
|
button.clicked.connect(callback)
|
|
self.main_layout.addWidget(button)
|
|
return button
|
|
|
|
def new_Label(self, text: str) -> QLabel:
|
|
label = QLabel(text, self)
|
|
label.setFrameStyle(QFrame.Panel | QFrame.Sunken)
|
|
label.setAlignment(QtCore.Qt.AlignLeft)
|
|
self.main_layout.addWidget(label)
|
|
return label
|
|
|
|
|
|
class Trade_In_Widget(TradeWidget):
|
|
|
|
def __init__(self,
|
|
message: Message,
|
|
parent):
|
|
super(Trade_In_Widget, self).__init__(message=message, parent=parent)
|
|
|
|
self.inv_button = self.new_button('icons/material_invite.svg', 'Invite', self.inv_callback)
|
|
self.trade_button = self.new_button('icons/material_trade.svg', 'Trade', self.trade_callback)
|
|
self.thank_button = self.new_button('icons/material_thank.svg', 'Thank you', self.thank_callback)
|
|
self.wait_button = self.new_button('icons/material_wait2.svg', 'Busy', self.wait_callback)
|
|
self.close_button = self.new_button('icons/material_close.svg', 'Dismiss', self.close_callback)
|
|
|
|
# self.label_item = self.new_Label(message.trade.item)
|
|
self.label_price = self.new_Label(f'{message.trade.amount} {message.trade.currency}')
|
|
self.label_user = self.new_Label(message.user)
|
|
assert message.trade
|
|
if message.trade.tab:
|
|
self.label_tab = self.new_Label(message.trade.tab)
|
|
|
|
def inv_callback(self):
|
|
sendkeys.invite(message=self.message)
|
|
|
|
def thank_callback(self):
|
|
sendkeys.send_to_format(type='ty', message=self.message)
|
|
sendkeys.kick(message=self.message)
|
|
self.close_callback()
|
|
|
|
def trade_callback(self):
|
|
sendkeys.trade(message=self.message)
|
|
|
|
def wait_callback(self):
|
|
sendkeys.send_to_format(type='wait', message=self.message)
|
|
|
|
def close_callback(self):
|
|
self.deleteLater()
|
|
self.parent.del_trade(self.message)
|
|
|
|
|
|
class Trade_Out_Widget(TradeWidget):
|
|
|
|
def __init__(self,
|
|
message: Message,
|
|
parent):
|
|
super(Trade_Out_Widget, self).__init__(message=message, parent=parent)
|
|
|
|
self.inv_button = self.new_button('icons/material_door.svg', 'Join', self.join_callback)
|
|
self.trade_button = self.new_button('icons/material_trade.svg', 'Trade', self.trade_callback)
|
|
self.thank_button = self.new_button('icons/material_thank.svg', 'Thank you', self.thank_callback)
|
|
self.wait_button = self.new_button('icons/material_leave.svg', 'Leave group', self.leave_callback)
|
|
self.wait_button = self.new_button('icons/material_home.svg', 'Return to Hideout', self.return_callback)
|
|
self.close_button = self.new_button('icons/material_close.svg', 'Dismiss', self.close_callback)
|
|
|
|
# self.label_item = self.new_Label(message.trade.item)
|
|
assert message.trade
|
|
self.label_price = self.new_Label(f'{message.trade.amount} {message.trade.currency}')
|
|
self.label_user = self.new_Label(message.user)
|
|
|
|
def join_callback(self):
|
|
sendkeys.join(message=self.message)
|
|
|
|
def thank_callback(self):
|
|
sendkeys.send_to_format(type='ty', message=self.message)
|
|
sendkeys.kick(message=self.message)
|
|
|
|
def trade_callback(self):
|
|
sendkeys.trade(message=self.message)
|
|
|
|
def leave_callback(self):
|
|
sendkeys.leave()
|
|
|
|
def return_callback(self):
|
|
sendkeys.return_to_ho()
|
|
|
|
def close_callback(self):
|
|
self.deleteLater()
|
|
self.parent.del_trade(self.message)
|
|
|
|
|
|
class TradeCollection(QWidget):
|
|
"""This holds the content of one tab.
|
|
One tab corresponds to a unique item."""
|
|
|
|
def __init__(self,
|
|
parent,
|
|
unique_user_item: int):
|
|
super(TradeCollection, self).__init__(parent)
|
|
self.parent = parent
|
|
self.unique_user_item = unique_user_item
|
|
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
|
|
self.setGeometry(0, 0, 20, 20)
|
|
self.main_layout = QVBoxLayout()
|
|
self.main_layout.setSpacing(0)
|
|
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
|
self.setContentsMargins(0, 0, 0, 0)
|
|
self.setLayout(self.main_layout)
|
|
self.trades = {}
|
|
|
|
def childEvent(self, event: QtCore.QChildEvent) -> None:
|
|
if event.removed() or event.added():
|
|
log.debug('Child added/removed')
|
|
self.parent.updateSizes()
|
|
return super().childEvent(event)
|
|
|
|
def add_trade(self, message: Message) -> None:
|
|
assert message.trade
|
|
if message.unique_trade() in self.trades:
|
|
return
|
|
if message.to_from == 'From':
|
|
trade = Trade_In_Widget(message, self)
|
|
else:
|
|
trade = Trade_Out_Widget(message, self)
|
|
|
|
self.main_layout.addWidget(trade)
|
|
self.trades[message.unique_trade()] = trade
|
|
|
|
def del_trade(self, message: Message):
|
|
assert message.trade
|
|
del self.trades[message.unique_trade()]
|
|
if not self.trades:
|
|
self.parent.del_collection(self.unique_user_item)
|
|
self.deleteLater()
|