from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView from PySide6.QtCore import Qt from storage.models import Order class OrdersPanel(QWidget): def __init__(self): super().__init__() self.init_ui() self.order_rows = {} # To keep track of rows by order_id def init_ui(self): layout = QVBoxLayout(self) # Title title_label = QLabel("Orders") title_label.setAlignment(Qt.AlignCenter) title_label.setStyleSheet("font-size: 24px; font-weight: bold; margin-bottom: 20px;") layout.addWidget(title_label) self.orders_table = QTableWidget() self.orders_table.setColumnCount(8) self.orders_table.setHorizontalHeaderLabels(["Order ID", "Symbol", "Type", "Side", "Quantity", "Price", "Status", "Timestamp"]) self.orders_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) layout.addWidget(self.orders_table) layout.addStretch(1) # Pushes content to the top self.setLayout(layout) def add_or_update_order(self, order: Order): if order.broker_order_id in self.order_rows: row_position = self.order_rows[order.broker_order_id] else: row_position = self.orders_table.rowCount() self.orders_table.insertRow(row_position) self.order_rows[order.broker_order_id] = row_position self.orders_table.setItem(row_position, 0, QTableWidgetItem(str(order.broker_order_id))) self.orders_table.setItem(row_position, 1, QTableWidgetItem(order.symbol)) self.orders_table.setItem(row_position, 2, QTableWidgetItem(order.order_type)) self.orders_table.setItem(row_position, 3, QTableWidgetItem(order.side)) self.orders_table.setItem(row_position, 4, QTableWidgetItem(str(order.quantity))) self.orders_table.setItem(row_position, 5, QTableWidgetItem(str(order.price))) self.orders_table.setItem(row_position, 6, QTableWidgetItem(order.status)) self.orders_table.setItem(row_position, 7, QTableWidgetItem(str(order.timestamp))) def add_order(self, order_id, symbol, order_type, side, quantity, price, status, timestamp): # This method is now a compatibility wrapper or can be removed if not used elsewhere # For now, create a dummy Order object and call add_or_update_order from storage.models import Order as DummyOrder # Use alias to avoid re-importing dummy_order = DummyOrder( broker_order_id=order_id, symbol=symbol, order_type=order_type, side=side, quantity=quantity, price=price, status=status, timestamp=timestamp ) self.add_or_update_order(dummy_order)