[profitpy commit] r320 - in trunk: . profit/lib profit/lib/widgets profit/models profit/session profit/workbench pr...

1 view
Skip to first unread message

codesite...@google.com

unread,
Aug 2, 2008, 3:37:58 AM8/2/08
to profitp...@googlegroups.com
Author: troy.melhase
Date: Sat Aug 2 00:37:23 2008
New Revision: 320

Added:
trunk/profit/models/orders.py (contents, props changed)
Modified:
trunk/README
trunk/profit/lib/gui.py
trunk/profit/lib/widgets/extendedshell.py
trunk/profit/lib/widgets/importexportdialog.py
trunk/profit/lib/widgets/messagetypeselect.py
trunk/profit/models/__init__.py
trunk/profit/session/__init__.py
trunk/profit/workbench/accountdisplay.py
trunk/profit/workbench/main.py
trunk/profit/workbench/orderdisplay.py
trunk/profit/workbench/widgets/ui_orderdisplay.ui

Log:
Much better order display.

Modified: trunk/README
==============================================================================
--- trunk/README (original)
+++ trunk/README Sat Aug 2 00:37:23 2008
@@ -1,4 +1,4 @@
-== To Do for 0.2 ==
+== TODO for 0.2 ==

micro:

@@ -10,14 +10,10 @@

macro:

-1. add buffer editor to shell panel. perhaps update shell w/ code
from eric4
-
4. add viewable historical data requests and plots

5. finish strategy design tool and its integration with the workbench

-6. finish neural network design tool and its integration
-
7. write the README (this file) and release the code


@@ -30,3 +26,77 @@
3. fix bugs, like the zoom bugs

4. add peer-to-peer discovery and trade data exchange
+
+6. finish neural network design tool and its integration
+
+
+Model Usage Survey
+==================
+
+
+accountdisplay.py
+ AccountTableModel(QStandardItemModel)
+ on_session_UpdateAccountValue
+ -> adds message values to local dict (called "items")
+
+ AccountDisplay
+ connect(session, Signals.createdAccountData, newPlotSeries)
+ connect(model, Signals.standardItemChanged, plot.on_controlsTree_itemChanged)
+ connect(model, Signals.rowsInserted, self.updateModelItems)
+
+centraltabs.py
+ CentralTabs(QTabWidget)
+ connect(app, Signals.itemActivated, self.createTab)
+ connect(app, Signals.openUrl, self.createTab)
+ connect(app, Signals.tickerClicked, self.createTab)
+
+executionsdisplay.py
+ ExecutionsTableModel(QAbstractTableModel)
+ on_session_ExecDetails
+ > adds message index to local list (called "messageIndexes")
+ ExecutionsDisplay
+
+orderdisplay.py
+ OrderDisplay(QFrame)
+ on_session_OrderStatus -> updates self.orderTable
+ on_session_OpenOrder -> updates self.orderTable
+
+
+plotdatadialog.py
+ CurveDataTableModel(QAbstractTableModel)
+
+portfoliodisplay.py
+ PortfolioDisplay ->
+ on_session_UpdatePortfolio -> updates self.portfolioTable
+
+
+sessiontree.py
+ SessionTreeModel(QStandardItemModel)
+ on_strategy_createdTicker
+ on_session_createdTicker
+
+ SessionTree
+ connect(self, Signals.openUrl, app, Signals.openUrl)
+ connect(self, Signals.itemActivated, app, Signals.itemActivated)
+
+strategydisplay.py
+ StrategyDisplayModel(QStandardItemModel)
+ StrategyDisplay
+ connect(model, Signals.itemChanged,
+ self.on_strategyTable_itemChanged)
+ connect(view.selectionModel(), Signals.selectionChanged,
+ self.on_strategyTable_selectionChanged)
+ connect(self, Signals.strategy.requestActivate,
+ instance(), Signals.strategy.requestActivate)
+
+tickerdisplay.py
+ TickerDisplay(QFrame)
+ connect(self, Signals.openUrl, app, Signals.openUrl)
+ connect(self, Signals.tickerClicked, app, Signals.tickerClicked)
+
+ on_session_UpdatePortfolio
+ on_session_TickPrice_TickSize
+
+
+
+

Modified: trunk/profit/lib/gui.py
==============================================================================
--- trunk/profit/lib/gui.py (original)
+++ trunk/profit/lib/gui.py Sat Aug 2 00:37:23 2008
@@ -198,3 +198,29 @@

def setText(self, text):
QTableWidgetItem.setText(self, str(text))
+
+
+class WaitMessageBox(QMessageBox):
+ """ Runs a callable until it returns true, or until the user aborts.
+
+ """
+ def __init__(self, callback, parent):
+ """ Initializer.
+
+ @param callback callable to run in a timer
+ @param parent ancestor widget
+ """
+ QMessageBox.__init__(self, parent)
+ self.callback = callback
+ self.setIcon(self.Information)
+ self.addButton(self.Abort)
+ self.setWindowModality(Qt.NonModal)
+ self.startTimer(500)
+
+ def timerEvent(self, event):
+ """ Runs the callback and closes this dialog when it's true.
+
+ """
+ if self.callback():
+ self.killTimer(event.timerId())
+ self.accept()

Modified: trunk/profit/lib/widgets/extendedshell.py
==============================================================================
--- trunk/profit/lib/widgets/extendedshell.py (original)
+++ trunk/profit/lib/widgets/extendedshell.py Sat Aug 2 00:37:23 2008
@@ -6,7 +6,7 @@
# Author: Troy Melhase <tr...@gci.net>

from PyQt4.QtCore import Qt, pyqtSignature
-from PyQt4.QtGui import QFrame
+from PyQt4.QtGui import QFrame, QToolBar

from profit.lib import BasicHandler, defaults
from profit.lib.widgets.ui_extendedshell import Ui_ExtendedShell
@@ -25,6 +25,10 @@
""" Make our widgets like we like.

"""
+ self.tb = QToolBar(self.editorFrame)
+ self.tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+ self.verticalLayout.insertWidget(0, self.tb)
+ self.tb.addAction(self.actionExecute)
settings = self.settings
settings.beginGroup(self.__class__.__name__)
defaultState = defaults.leftSplitterState()

Modified: trunk/profit/lib/widgets/importexportdialog.py
==============================================================================
--- trunk/profit/lib/widgets/importexportdialog.py (original)
+++ trunk/profit/lib/widgets/importexportdialog.py Sat Aug 2 00:37:23 2008
@@ -18,8 +18,14 @@
self.setWindowTitle(str(self.windowTitle()) % typeText)
self.promptText.setText(str(self.promptText.text()) % typeText)

+ def allTypes(self):
+ """ Returns list of all type names (as strings)
+
+ """
+ return self.messageTypeDisplay.allTypes()
+
def selectedTypes(self):
- """ Delegate lookup of selected message types to the display widget.
+ """ Returns list of seleected type names (as strings)

"""
return self.messageTypeDisplay.selectedTypes()

Modified: trunk/profit/lib/widgets/messagetypeselect.py
==============================================================================
--- trunk/profit/lib/widgets/messagetypeselect.py (original)
+++ trunk/profit/lib/widgets/messagetypeselect.py Sat Aug 2 00:37:23 2008
@@ -43,6 +43,12 @@
listWidget = self.typesList
return [listWidget.item(r) for r in range(listWidget.count())]

+ def allTypes(self):
+ """ Returns list of all type names (as strings)
+
+ """
+ return [str(i.text()) for i in self.listItems()]
+
def selectedTypes(self):
""" Returns list of seleected type names (as strings)


Modified: trunk/profit/models/__init__.py
==============================================================================
--- trunk/profit/models/__init__.py (original)
+++ trunk/profit/models/__init__.py Sat Aug 2 00:37:23 2008
@@ -5,61 +5,85 @@
# Distributed under the terms of the GNU General Public License v2
# Author: Troy Melhase <tr...@gci.net>

-from PyQt4.QtCore import Qt, QModelIndex, QObject,
QAbstractTableModel, QVariant, QAbstractItemModel
-from profit.lib import Signals
+from PyQt4.QtCore import Qt, QModelIndex, QVariant, QAbstractItemModel


-class ListStorage(QObject):
- def __init__(self, parent):
- QObject.__init__(self, parent)
- self.storage = []
+class BasicItem(object):
+ """

- def __contains__(self, item):
- return item in self.storage
+ """
+ def __init__(self, data, parent=None):
+ self.data = data
+ self.parent = parent
+ self.children = []

- def __getitem__(self, index):
- return self.storage[index]
+ def __getitem__(self, column):
+ return self.data[column]

- def __setitem__(self, index, value):
- self.storage[index] = value
-
- def __str__(self):
- return str(self.storage)
-
- def __len__(self):
- return len(self.storage)
+ def __setitem__(self, column, value):
+ self.data[column] = value

def append(self, item):
- self.storage.append(item)
+ self.children.append(item)

+ def child(self, row):
+ return self.children[row]

-class BasicModelMixin(object):
- horizontalLabels = []
- verticalLabels = []
- sessionResendSignals = []
-
- def headerData(self, section, orientation, role=Qt.DisplayRole):
- if (orientation == Qt.Horizontal) and (role == Qt.DisplayRole):
- return QVariant(self.horizontalLabels[section])
- elif (orientation == Qt.Vertical) and (role == Qt.DisplayRole):
- return QVariant(self.verticallabels[section])
- return QVariant()
+ def childCount(self):
+ return len(self.children)

- def columnCount(self, parent=QModelIndex()):
- return len(self.horizontalLabels)
+ def itemCount(self):
+ return len(self.data)

- def rowCount(self, parent=QModelIndex()):
- if parent.isValid():
- return 0
- return len(self)
+ def row(self):
+ if self.parent:
+ return self.parent.children.index(self)
+ return 0


-class BasicModel(QAbstractItemModel, BasicModelMixin):
- def __init__(self, parent=None):
+class BasicItemModel(QAbstractItemModel):
+ """
+
+ """
+ def __init__(self, root, parent=None):
QAbstractItemModel.__init__(self, parent)
+ self.invisibleRootItem = root
+
+ def indexItem(self, index):
+ valid = index.isValid()
+ return (index.internalPointer() if valid else self.invisibleRootItem)
+
+ def columnCount(self, index):
+ return self.indexItem(index).itemCount()
+
+ def flags(self, index):
+ if index.isValid():
+ return Qt.ItemIsEnabled | Qt.ItemIsSelectable
+ return Qt.ItemIsEnabled
+
+ def headerData(self, section, orientation, role):
+ if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+ header = self.invisibleRootItem[section]
+ return self.invisibleRootItem[section]
+ return QVariant()

+ def index(self, row, column, parent):
+ item = self.indexItem(parent)
+ child = item.child(row)
+ if child:
+ return self.createIndex(row, column, child)
+ return QModelIndex()
+
+ def parent(self, index):
+ if not index.isValid():
+ return QModelIndex()
+ parent = index.internalPointer().parent
+ if parent is self.invisibleRootItem:
+ return QModelIndex()
+ return self.createIndex(parent.row(), 0, parent)

-class BasicTableModel(QAbstractTableModel, BasicModelMixin):
- def __init__(self, parent=None):
- QAbstractTableModel.__init__(self, parent)
+ def rowCount(self, index):
+ if index.column() > 0:
+ return 0
+ return self.indexItem(index).childCount()


Added: trunk/profit/models/orders.py
==============================================================================
--- (empty file)
+++ trunk/profit/models/orders.py Sat Aug 2 00:37:23 2008
@@ -0,0 +1,165 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright 2007 Troy Melhase <tr...@gci.net>
+# Distributed under the terms of the GNU General Public License v2
+
+from PyQt4.QtCore import Qt, QModelIndex, QVariant, QString
+from profit.lib import valueAlign
+from profit.models import BasicItem, BasicItemModel
+
+
+class OrdersModel(BasicItemModel):
+ """
+
+ """
+ def __init__(self, session=None, parent=None):
+ BasicItemModel.__init__(self, RootOrderItem(), parent)
+ self.symbolIcon = lambda x:None
+ self.session = session
+ if session is not None:
+ session.registerMeta(self)
+
+ def data(self, index, role):
+ """
+
+ """
+ if not index.isValid():
+ return QVariant()
+ item = index.internalPointer()
+ data = QVariant()
+ if (role == Qt.DecorationRole and index.column() == 1):
+ data = QVariant(self.symbolIcon(item.symbol()))
+ elif role in (Qt.DisplayRole, Qt.ToolTipRole):
+ data = QVariant(item[index.column()])
+ elif role in (Qt.TextAlignmentRole, ):
+ try:
+ float(item[index.column()])
+ data = QVariant(valueAlign)
+ except:
+ pass
+ return data
+
+ def findOrderItem(self, orderId):
+ """ Returns the item for the given order id, or None.
+
+ """
+ orderItems = self.invisibleRootItem.children
+ try:
+ return [item for item in orderItems if item[0]==orderId][0]
+ except (IndexError, ):
+ pass
+
+ def on_session_OrderStatus(self, message):
+ """ Adds a status row if the order is known to the model.
+
+ """
+ orderId = message.orderId
+ item = self.findOrderItem(orderId)
+ if item:
+ item.append(StatusOrderItem.fromMessage(message, item))
+ item.update(message)
+ self.reset()
+
+ def on_session_OpenOrder(self, message):
+ """ Adds a new order row if the order isn't known to the model.
+
+ """
+ orderId = message.orderId
+ if not self.findOrderItem(orderId):
+ root = self.invisibleRootItem
+ root.append(OrderItem.fromMessage(message, root))
+ self.reset()
+
+
+class OrderItem(BasicItem):
+ """ Base class for items in the order model.
+
+ """
+ columnLookups = [
+ ('Order Id', lambda msg:msg.contract and msg.orderId),
+ ('Symbol', lambda msg:msg.contract.m_symbol),
+ ('Status', lambda msg:msg.status),
+ ('Filled', lambda msg: msg.filled),
+ ('Action', lambda msg:msg.order.m_action),
+ ('Type', lambda msg:msg.order.m_orderType),
+ ('Limit Price', lambda msg:msg.order.m_lmtPrice),
+ ('Open/Close', lambda msg:('Open' if
msg.order.m_openClose=='O' else 'Close')),
+ ('Security Type', lambda msg:msg.contract.m_secType),
+ ('Expiry', lambda msg:msg.contract.m_expiry),
+ ('Strike', lambda msg:msg.contract.m_strike),
+ ('Right', lambda msg:(msg.contract.m_right if
msg.contract.m_right !='?' else '')),
+ ('Remaining', lambda msg:msg.remaining),
+ ('Total Quantity', lambda msg:msg.order.m_totalQuantity),
+ ('Aux Price', lambda msg:msg.order.m_auxPrice),
+ ('Average Fill Price', lambda msg:msg.avgFillPrice),
+ ('Last Fill Price', lambda msg:msg.lastFillPrice),
+ ('Perm Id', lambda msg:msg.permId),
+ ('Parent Id', lambda msg:msg.parentId),
+ ('Client Id', lambda msg:msg.clientId),
+ ('Why Held', lambda msg:msg.whyHeld),
+ ('Order State', lambda msg:msg.orderState),
+ ]
+
+ def __init__(self, data, parent=None, message=None):
+ BasicItem.__init__(self, data, parent)
+ self.message = message
+
+ @classmethod
+ def fromMessage(cls, message, parent):
+ """ New instance from message values
+
+ @param cls class object
+ @param message ib.opt.message object
+ @param parent parent of this item
+ @return new instance of cls
+ """
+ values = []
+ for label, lookup in cls.columnLookups:
+ try:
+ value = lookup(message)
+ except (AttributeError, ):
+ value = ''
+ values.append(value)
+ return cls(values, parent, message)
+
+ def symbol(self):
+ """ Returns the symbol for this item or ''
+
+ """
+ try:
+ return self.message.contract.m_symbol
+ except (AttributeError, ):
+ return ''
+
+ def update(self, message):
+ """ Update the item with values from a message.
+
+ @param message ib.opt.message object
+ @return None
+ """
+ for column, (label, lookup) in enumerate(self.columnLookups):
+ try:
+ self[column] = lookup(message)
+ except (AttributeError, ):
+ pass
+
+
+class RootOrderItem(OrderItem):
+ """ Order model item with automatic values (for horizontal headers).
+
+ """
+ def __init__(self):
+ OrderItem.__init__(self, self.horizontalLabels())
+
+ def horizontalLabels(self):
+ """ Generates list of horizontal header values.
+
+ """
+ return map(QVariant, [label for label, lookup in self.columnLookups])
+
+
+class StatusOrderItem(OrderItem):
+ """ Specialized status item; empty for now.
+
+ """

Modified: trunk/profit/session/__init__.py
==============================================================================
--- trunk/profit/session/__init__.py (original)
+++ trunk/profit/session/__init__.py Sat Aug 2 00:37:23 2008
@@ -22,6 +22,8 @@
from profit.session.requestthread import RequestThread
from profit.strategy.builder import SessionStrategyBuilder

+from profit.models.orders import OrdersModel
+

class DataMaps(object):
def __init__(self, session):
@@ -33,6 +35,11 @@
self.contract = collection.ContractDataCollection(session)


+class DataModels(object):
+ def __init__(self, session):
+ self.orders = OrdersModel(session)
+
+
class Session(QObject):
""" This is the big-honkin Session class.

@@ -48,6 +55,7 @@
self.messagesTyped = {}
self.savedLength = 0
self.maps = DataMaps(self)
+ self.models = DataModels(self)

def __str__(self):
""" x.__str__() <==> str(x)

Modified: trunk/profit/workbench/accountdisplay.py
==============================================================================
--- trunk/profit/workbench/accountdisplay.py (original)
+++ trunk/profit/workbench/accountdisplay.py Sat Aug 2 00:37:23 2008
@@ -10,11 +10,7 @@
from profit.lib import BasicHandler, Signals, valueAlign
from profit.lib.gui import colorIcon, complementColor
from profit.lib.widgets.plot import PlotCurve, ControlTreeValueItem
-from profit.series import Series
from profit.workbench.widgets.ui_accountdisplay import Ui_AccountDisplay
-
-
-## TODO: clean up cross-wired signals if possible


class AccountTableModel(QStandardItemModel):

Modified: trunk/profit/workbench/main.py
==============================================================================
--- trunk/profit/workbench/main.py (original)
+++ trunk/profit/workbench/main.py Sat Aug 2 00:37:23 2008
@@ -7,10 +7,11 @@

from functools import partial
try:
- from os import P_NOWAIT, getpgrp, killpg, popen, spawnvp
+ from os import P_NOWAIT, getpgrp, killpg, spawnvp
from signal import SIGQUIT
except (ImportError, ):
pass
+from os import environ
from os.path import abspath, basename
from subprocess import Popen
from sys import argv, executable
@@ -23,7 +24,7 @@

from profit.lib import defaults
from profit.lib import Signals, Settings, instance
-from profit.lib.gui import ValueColorItem, warningBox
+from profit.lib.gui import ValueColorItem, WaitMessageBox, warningBox
from profit.lib.widgets.dock import Dock
from profit.lib.widgets.output import OutputWidget
from profit.lib.widgets.propertyeditor import PropertyEditor
@@ -496,6 +497,14 @@
self.recentSeparator.setVisible(count > 0)

def warningOpenTabs(self):
+ """ Returns true if it's okay to have open tabs. Maybe
prompts user.
+
+ """
+ try:
+ if int(environ.get('WORKBENCH_IGNORE_TABS', 0)):
+ return True
+ except (ValueError, ):
+ pass
if self.centralTabs.count():
buttons = QMessageBox.Ignore|QMessageBox.Abort|QMessageBox.Close
button = QMessageBox.warning(self, 'Warning',
@@ -508,9 +517,15 @@
return True

def centralTabState(self):
+ """ Returns a list of open tab names.
+
+ """
return [s for s in self.centralTabs.pageMap()]

def writeSettings(self):
+ """ Saves some main window settings.
+
+ """
settings = Settings()
settings.beginGroup(settings.keys.main)
settings.setValue(settings.keys.size, self.size())
@@ -519,18 +534,3 @@
settings.setValue(settings.keys.winstate, self.saveState())
settings.setValueDump(settings.keys.ctabstate, self.centralTabState())
settings.endGroup()
-
-
-class WaitMessageBox(QMessageBox):
- def __init__(self, callback, parent):
- QMessageBox.__init__(self, parent)
- self.callback = callback
- self.setIcon(self.Information)
- self.addButton(self.Abort)
- self.setWindowModality(Qt.NonModal)
- self.startTimer(500)
-
- def timerEvent(self, event):
- if self.callback():
- self.killTimer(event.timerId())
- self.accept()

Modified: trunk/profit/workbench/orderdisplay.py
==============================================================================
--- trunk/profit/workbench/orderdisplay.py (original)
+++ trunk/profit/workbench/orderdisplay.py Sat Aug 2 00:37:23 2008
@@ -4,30 +4,12 @@
# Copyright 2007 Troy Melhase <tr...@gci.net>
# Distributed under the terms of the GNU General Public License v2

-from itertools import ifilter
-
-from PyQt4.QtCore import Qt
from PyQt4.QtGui import QFrame

-from profit.lib import BasicHandler, makeCheckNames
+from profit.lib import BasicHandler, Signals
+from profit.lib.gui import symbolIcon
from profit.workbench.widgets.ui_orderdisplay import Ui_OrderDisplay

-## TODO: orders should be displayed in a parent/child relationship,
-## with the OpenOrder message as the parent and the related
-## OrderStatus messages as children.
-
-
-def replayOrderMessages(messages, openOrder, orderStatus):
- """
-
- """
- isOrderMessage = makeCheckNames('OpenOrder', 'OrderStatus')
- calls = {'OpenOrder':openOrder, 'OrderStatus':orderStatus}
- def pred((t, m)):
- return isOrderMessage(m)
- for time, message in ifilter(pred, messages):
- calls[message.typeName](message)
-

class OrderDisplay(QFrame, Ui_OrderDisplay, BasicHandler):
""" OrderDisplay -> table of orders
@@ -39,10 +21,7 @@
@param parent ancestor of this object
"""
QFrame.__init__(self, parent)
- self.setAttribute(Qt.WA_DeleteOnClose)
self.setupUi(self)
- self.orderItems = {}
- self.orderTable.verticalHeader().hide()
self.requestSession()

def setSession(self, session):
@@ -52,56 +31,16 @@
@return None
"""
self.session = session
- replayOrderMessages(
- session.messages,
- self.on_session_OpenOrder,
- self.on_session_OrderStatus,
- )
- session.registerMeta(self)
-
- def on_session_OrderStatus(self, message):
- orderId = message.orderId
- items = self.getTableRowItems(orderId)
- table = self.orderTable
- items[3].setText(message.status)
- items[9].setText(message.filled)
- items[10].setText(message.remaining)
- items[11].setText(message.avgFillPrice)
- items[12].setText(message.lastFillPrice)
- items[13].setText(message.parentId)
- items[14].setText(message.clientId)
- items[15].setText(message.permId)
- table.resizeColumnsToContents()
-
- def on_session_OpenOrder(self, message):
- order = message.order
- orderId = order.m_orderId
- items = self.getTableRowItems(orderId)
- contract = message.contract
- items[0].setText(str(orderId))
- items[1].setSymbol(contract.m_symbol)
- items[2].setText(order.m_totalQuantity)
- #items[3].setText('') # active
- items[4].setText(order.m_action)
- items[5].setText(order.m_orderType)
- items[6].setText(order.m_lmtPrice)
- items[7].setText(order.m_auxPrice)
- items[8].setText(order.m_openClose)
- #items[9].setText('') # filled
- #items[10].setText('') # remaining
- for col in [0, 2, 6, 7, 9, 10, 11, 12, 13, 14, 15]:
- items[col].setValueAlign()
-
- def makeTableRowItems(self, orderId):
- table = self.orderTable
- items = self.orderItems[orderId] = table.newItemsRow()
- table.resizeRowsToContents()
- return items
-
- def getTableRowItems(self, orderId):
- try:
- items = self.orderItems[orderId]
- except (KeyError, ):
- items = self.makeTableRowItems(orderId)
- return items
+ model = session.models.orders
+ model.symbolIcon = symbolIcon
+ self.connect(model, Signals.modelReset, self.resizeTree)
+ self.orderView.setModel(model)

+ def resizeTree(self):
+ """ Resizes all columns in the order tree.
+
+ """
+ view = self.orderView
+ cols = range(view.model().invisibleRootItem.itemCount())
+ for col in cols:
+ view.resizeColumnToContents(col)

Modified: trunk/profit/workbench/widgets/ui_orderdisplay.ui
==============================================================================
--- trunk/profit/workbench/widgets/ui_orderdisplay.ui (original)
+++ trunk/profit/workbench/widgets/ui_orderdisplay.ui Sat Aug 2
00:37:23 2008
@@ -23,102 +23,19 @@
<widget class="FilterBar" native="1" name="widget" />
</item>
<item>
- <widget class="LocalTable" name="orderTable" >
- <property name="frameShape" >
- <enum>QFrame::NoFrame</enum>
+ <widget class="QTreeView" name="orderView" >
+ <property name="editTriggers" >
+ <set>QAbstractItemView::NoEditTriggers</set>
</property>
- <property name="frameShadow" >
- <enum>QFrame::Plain</enum>
- </property>
- <property name="selectionMode" >
- <enum>QAbstractItemView::SingleSelection</enum>
+ <property name="showDropIndicator" stdset="0" >
+ <bool>false</bool>
</property>
- <property name="selectionBehavior" >
- <enum>QAbstractItemView::SelectRows</enum>
+ <property name="alternatingRowColors" >
+ <bool>true</bool>
</property>
- <property name="sortingEnabled" >
- <bool>false</bool>
+ <property name="animated" >
+ <bool>true</bool>
</property>
- <column>
- <property name="text" >
- <string>Order Id</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Symbol</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Size</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Status</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Action</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Type</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Limit Price</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Aux Price</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Open Close</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Filled</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Remaining</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Average Fill Price</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Last Fill Price</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Parent Id</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Client Id</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Perm Id</string>
- </property>
- </column>
</widget>
</item>
</layout>
@@ -128,11 +45,6 @@
<class>FilterBar</class>
<extends>QWidget</extends>
<header location="global" >profit.lib.widgets.filterbar.h</header>
- </customwidget>
- <customwidget>
- <class>LocalTable</class>
- <extends>QTableWidget</extends>
- <header location="global" >profit.lib.widgets.localtable.h</header>
</customwidget>
</customwidgets>
<resources/>

Reply all
Reply to author
Forward
0 new messages