running shrink version. Needs a lot of cleanup

This commit is contained in:
2023-01-05 15:10:42 +01:00
parent a940e22065
commit 8fe5e3430d
2 changed files with 114 additions and 37 deletions

View File

@@ -1,64 +1,114 @@
import sys import sys
from src import config from src import config
from src.data import log
from src.data import Message, compile_regex from src.data import Message, compile_regex
from src.pyside6.trade_widget import TradeCollection from src.pyside6.trade_widget import TradeCollection
from PySide6 import QtCore from PySide6 import QtCore
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QTabWidget from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget, QSizePolicy, QWidget
import qdarktheme 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.Fixed, QSizePolicy.Policy.Fixed)
self.setGeometry(0, 0, 20, 20)
self.trade_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:
# print(f'Super SIZEHINT {super().sizeHint()}')
return super().sizeHint()
# print(f'SIZEHINT {current.sizeHint()}')
size = current.sizeHint()
size.setHeight(size.height() + self.tabBar().sizeHint().height())
return size
def updateSizes(self):
self.main_window.updateSizes()
def new_trade(self, message: Message):
if message.trade:
unique_item = message.trade.unique_item()
if unique_item in self.trade_collections:
self.trade_collections[unique_item].add_trade(message)
else:
collection = TradeCollection(message, self)
collection.setParent(self)
self.addTab(collection, message.trade.item)
self.trade_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_collections[collection.unique_item].deleteLater()
del self.trade_collections[collection.unique_item]
if not self.trade_collections:
self.main_window.hide()
def del_collection(self, unique_item: str):
del self.trade_collections[unique_item]
if not self.trade_collections:
self.main_window.hide()
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint) self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.trades = {}
self.setWindowTitle("My App") self.setWindowTitle("My App")
self.main_widget = QTabWidget(self) self.tab_widget = ResizingTabWidget(self)
self.main_widget.setTabsClosable(True) self.tab_widget.currentChanged.connect(self.updateSizes)
self.main_widget.tabCloseRequested.connect(self.del_tab) # self.tab_widget = QTabWidget(self)
self.setCentralWidget(self.main_widget) self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
self.setGeometry(0, 0, 20, 20)
self.setCentralWidget(self.tab_widget)
def updateSizes(self):
for i in range(0, 10):
QApplication.processEvents()
log.debug(f'updateSizes {self.tab_widget.minimumSizeHint()}')
# self.resize(QtCore.QSize(200,200))
self.resize(self.tab_widget.minimumSizeHint())
QApplication.processEvents()
self.repaint()
# self.adjustSize()
@QtCore.Slot() @QtCore.Slot()
def new_trade(self, message: Message): def new_trade(self, message: Message):
if message.trade: self.tab_widget.new_trade(message)
unique_item = message.trade.unique_item()
if unique_item in self.trades:
self.trades[unique_item].add_trade(message)
else:
collection = TradeCollection(message, self)
collection.setParent(self.main_widget)
self.main_widget.addTab(collection, message.trade.item)
self.trades[message.trade.unique_item()] = collection
self.show()
def del_collection(self, unique_item: str):
del self.trades[unique_item]
if not self.trades:
self.hide()
def del_tab(self, index: int):
collection = self.main_widget.widget(index)
assert isinstance(collection, TradeCollection)
self.trades[collection.unique_item].deleteLater()
del self.trades[collection.unique_item]
if not self.trades:
self.hide()
def start_app(): def start_app():
app = QApplication(sys.argv) app = QApplication(sys.argv)
qdarktheme.setup_theme() qdarktheme.setup_theme()
app.setStyle('Material') # app.setStyle('Material')
window = MainWindow() window = MainWindow()
return app, window return app, window
if __name__ == "__main__": if __name__ == "__main__":
conf = config.read_config(r'config.yaml') conf = config.read_config(r'config.yaml')
compile_regex(conf) compile_regex(conf)
@@ -80,4 +130,3 @@ if __name__ == "__main__":
window.new_trade(message2) window.new_trade(message2)
window.new_trade(message3) window.new_trade(message3)
app.exec() app.exec()

View File

@@ -1,6 +1,8 @@
from PySide6.QtWidgets import QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QLabel, QSizePolicy from PySide6.QtWidgets import QPushButton, QHBoxLayout, QVBoxLayout, QWidget, QLabel, QSizePolicy
from PySide6 import QtCore
from src.data import Message from src.data import Message
from src import sendkeys from src import sendkeys
from src.data import log
class TradeWidget(QWidget): class TradeWidget(QWidget):
@@ -14,7 +16,14 @@ class TradeWidget(QWidget):
self.parent = parent self.parent = parent
self.main_layout = QHBoxLayout() self.main_layout = QHBoxLayout()
self.main_layout.setSpacing(0)
# self.main_layout.setMargin(0)
self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
self.main_layout.setContentsMargins(0, 0, 0, 0)
self.setContentsMargins(0, 0, 0, 0)
self.setGeometry(0, 0, 0, 20)
self.setLayout(self.main_layout) self.setLayout(self.main_layout)
assert message.trade
self.label_user = QLabel(message.user) self.label_user = QLabel(message.user)
self.label_item = QLabel(message.trade.item) self.label_item = QLabel(message.trade.item)
self.label_price = QLabel(f'{message.trade.amount} {message.trade.currency}') self.label_price = QLabel(f'{message.trade.amount} {message.trade.currency}')
@@ -26,13 +35,14 @@ class TradeWidget(QWidget):
('X', self.delete_callback)] ('X', self.delete_callback)]
for button in buttons: for button in buttons:
pb = QPushButton(button[0]) pb = QPushButton(button[0])
pb.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum) pb.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
pb.setContentsMargins(0, 0, 0, 0)
pb.clicked.connect(button[1]) pb.clicked.connect(button[1])
self.main_layout.addWidget(pb) self.main_layout.addWidget(pb)
self.main_layout.addWidget(self.label_item)
self.main_layout.addWidget(self.label_price) self.main_layout.addWidget(self.label_price)
self.main_layout.addWidget(self.label_user) self.main_layout.addWidget(self.label_user)
self.main_layout.addWidget(self.label_item)
def inv_callback(self): def inv_callback(self):
sendkeys.invite(message=self.message) sendkeys.invite(message=self.message)
@@ -60,16 +70,34 @@ class TradeCollection(QWidget):
def __init__(self, def __init__(self,
message: Message, message: Message,
parent): parent):
super(TradeCollection, self).__init__() super(TradeCollection, self).__init__(parent)
self.parent = parent self.parent = parent
assert message.trade assert message.trade
self.unique_item = message.trade.unique_item() self.unique_item = message.trade.unique_item()
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum)
self.setGeometry(0, 0, 20, 20)
self.main_layout = QVBoxLayout() 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.setLayout(self.main_layout)
trade = TradeWidget(message, self) trade = TradeWidget(message, self)
self.main_layout.addWidget(trade) self.main_layout.addWidget(trade)
self.trades = {message.unique_trade(): trade} self.trades = {message.unique_trade(): trade}
def childEvent(self, event: QtCore.QChildEvent) -> None:
if event.removed():
log.debug('Child removed')
self.parent.updateSizes()
if event.added():
log.debug('Child added')
return super().childEvent(event)
def resizeEvent(self, event):
# self.resized.emit()
log.debug('resizeEvent')
return super(TradeCollection, self).resizeEvent(event)
def add_trade(self, message: Message) -> None: def add_trade(self, message: Message) -> None:
assert message.trade assert message.trade
if message.unique_trade() in self.trades: if message.unique_trade() in self.trades: