150 lines
5.5 KiB
Python
150 lines
5.5 KiB
Python
import sys
|
|
from src import config
|
|
from src.data import log
|
|
from src.data import Message, compile_regex
|
|
from src.pyside6.trade_widget import TradeCollection
|
|
from PySide6 import QtCore
|
|
from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget, QSizePolicy
|
|
import qdarktheme
|
|
|
|
|
|
class ResizingTabWidget(QTabWidget):
|
|
def __init__(self, main_window):
|
|
super().__init__(main_window)
|
|
self.main_window = main_window
|
|
self.currentChanged.connect(self.updateGeometry)
|
|
|
|
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
|
|
self.setGeometry(0, 0, 20, 20)
|
|
|
|
self.trade_in_collections = {}
|
|
self.trade_out_collections = {}
|
|
self.setTabsClosable(True)
|
|
self.tabCloseRequested.connect(self.del_tab)
|
|
|
|
def minimumSizeHint(self):
|
|
return self.sizeHint()
|
|
|
|
def sizeHint(self):
|
|
current = self.currentWidget()
|
|
if not current:
|
|
return super().sizeHint()
|
|
size = current.sizeHint()
|
|
size.setHeight(size.height() + self.tabBar().sizeHint().height())
|
|
size.setWidth(max(size.width(), self.tabBar().sizeHint().width()))
|
|
|
|
return size
|
|
|
|
def updateSizes(self):
|
|
self.adjustSize()
|
|
self.main_window.updateSizes()
|
|
|
|
def new_in_trade(self, message: Message):
|
|
if message.trade:
|
|
unique_item = message.trade.unique_item()
|
|
if unique_item in self.trade_in_collections:
|
|
self.trade_in_collections[unique_item].add_trade(message)
|
|
else:
|
|
collection = TradeCollection(message, self)
|
|
self.addTab(collection, message.trade.item)
|
|
self.trade_in_collections[message.trade.unique_item()] = collection
|
|
|
|
self.main_window.show()
|
|
|
|
self.main_window.updateSizes()
|
|
|
|
def new_out_trade(self, message: Message):
|
|
if message.trade:
|
|
unique_item = message.trade.unique_item()
|
|
if unique_item in self.trade_out_collections:
|
|
self.trade_out_collections[unique_item].add_trade(message)
|
|
else:
|
|
collection = TradeCollection(message, self)
|
|
self.addTab(collection, message.trade.item)
|
|
self.trade_out_collections[message.trade.unique_item()] = collection
|
|
|
|
self.main_window.show()
|
|
|
|
self.main_window.updateSizes()
|
|
|
|
def del_tab(self, index: int):
|
|
collection = self.widget(index)
|
|
assert isinstance(collection, TradeCollection)
|
|
self.trade_in_collections[collection.unique_item].deleteLater()
|
|
del self.trade_in_collections[collection.unique_item]
|
|
if not self.trade_in_collections:
|
|
self.main_window.hide()
|
|
|
|
def del_collection(self, unique_item: str):
|
|
del self.trade_in_collections[unique_item]
|
|
if not self.trade_in_collections:
|
|
self.main_window.hide()
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
|
|
self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint)
|
|
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
|
|
|
self.setWindowTitle("My App")
|
|
|
|
self.tab_widget = ResizingTabWidget(self)
|
|
self.tab_widget.currentChanged.connect(self.updateSizes)
|
|
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
|
|
self.setGeometry(0, 0, 20, 20)
|
|
|
|
self.setCentralWidget(self.tab_widget)
|
|
|
|
def updateSizes(self):
|
|
QApplication.processEvents()
|
|
log.debug(f'updateSizes {self.tab_widget.minimumSizeHint()} / {self.sizeHint()}')
|
|
self.resize(self.tab_widget.minimumSizeHint())
|
|
|
|
@QtCore.Slot()
|
|
def new_in_trade(self, message: Message):
|
|
self.tab_widget.new_in_trade(message)
|
|
|
|
@QtCore.Slot()
|
|
def new_out_trade(self, message: Message):
|
|
self.tab_widget.new_out_trade(message)
|
|
|
|
|
|
def start_app():
|
|
app = QApplication(sys.argv)
|
|
qss = """QToolTip {
|
|
background-color: black;
|
|
color: white;
|
|
border: black solid 1px
|
|
}"""
|
|
qdarktheme.setup_theme(additional_qss=qss, custom_colors={"primary": "#eda65a"})
|
|
# app.setStyle('Material')
|
|
|
|
window = MainWindow()
|
|
return app, window
|
|
|
|
|
|
if __name__ == "__main__":
|
|
conf = config.read_config(r'config.yaml')
|
|
compile_regex(conf)
|
|
text = '2021/03/08 23:24:52 17931875 bb3 [INFO Client 1492] @From Sinusal: Hi, I would like to buy your level 21 23% Vaal Impurity of Lightning ' \
|
|
'listed for 18 chaos in Ritual (stash tab "$"; position: left 22, top 5)'
|
|
text2 = '2021/03/08 23:24:52 17931875 bb3 [INFO Client 1492] @From NiceGuy: Hi, I would like to buy your level 21 23% Vaal Impurity of Lightning ' \
|
|
'listed for 18 chaos in Ritual (stash tab "$"; position: left 22, top 5)'
|
|
text3 = '2023/01/02 23:57:26 15123437 cffb0734 [INFO Client 16668] @From <SETSU?> LASTTRYPOEenjoyer: ' \
|
|
'Hi, I would like to buy your Watcher\'s Eye, Prismatic Jewel listed for 2.5 divine in Sanctum (stash tab "$2"; position: left 8, top 7)'
|
|
message = Message.from_text(text)
|
|
message2 = Message.from_text(text2)
|
|
message3 = Message.from_text(text3)
|
|
assert message
|
|
assert message2
|
|
assert message3
|
|
app, window = start_app()
|
|
window.new_in_trade(message)
|
|
window.new_in_trade(message)
|
|
window.new_in_trade(message2)
|
|
window.new_in_trade(message3)
|
|
app.exec()
|