37172-vm/algo_trader/ui/orders_panel.py
2025-12-27 04:26:41 +00:00

60 lines
2.8 KiB
Python

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)