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
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, QVBoxLayout, QTabWidget
from PySide6.QtWidgets import QApplication, QMainWindow, QTabWidget, QSizePolicy, QWidget
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):
def __init__(self):
super().__init__()
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
# self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.trades = {}
self.setWindowTitle("My App")
self.main_widget = QTabWidget(self)
self.main_widget.setTabsClosable(True)
self.main_widget.tabCloseRequested.connect(self.del_tab)
self.setCentralWidget(self.main_widget)
self.tab_widget = ResizingTabWidget(self)
self.tab_widget.currentChanged.connect(self.updateSizes)
# self.tab_widget = QTabWidget(self)
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()
def new_trade(self, message: Message):
if message.trade:
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()
self.tab_widget.new_trade(message)
def start_app():
app = QApplication(sys.argv)
qdarktheme.setup_theme()
app.setStyle('Material')
# app.setStyle('Material')
window = MainWindow()
return app, window
if __name__ == "__main__":
conf = config.read_config(r'config.yaml')
compile_regex(conf)
@@ -80,4 +130,3 @@ if __name__ == "__main__":
window.new_trade(message2)
window.new_trade(message3)
app.exec()