60 lines
2.8 KiB
Python
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) |