diff --git a/modules/base/pymod/table.py b/modules/base/pymod/table.py index 98292b1e94022f6f7fed4533454964159bd98122..bb68a5a57e95d402f362b2e732472cbf0e9511d4 100644 --- a/modules/base/pymod/table.py +++ b/modules/base/pymod/table.py @@ -5,6 +5,7 @@ from ost import stutil import itertools import operator import cPickle +import weakref from ost import LogError, LogWarning, LogInfo, LogVerbose def MakeTitle(col_name): @@ -126,6 +127,45 @@ class TableCol: def __div__(self, rhs): return BinaryColExpr(operator.div, self, rhs) +class TableRow: + """ + Essentially a named tuple, but allows column names that are not valid + python variable names. + """ + def __init__(self, row_data, tab): + self.__dict__['tab'] = weakref.proxy(tab) + self.__dict__['row_data'] = row_data + + def __getitem__(self, col_name): + if type(col_name)==int: + return self.row_data[col_name] + return self.row_data[self.tab.GetColIndex(col_name)] + + def __str__(self): + s = [] + for k, v in zip(self.__dict__['tab'].col_names, self.__dict__['row_data']): + s.append('%s=%s' % (k, str(v))) + return ', '.join(s) + + + def __len__(self): + return len(self.row_data) + + def __setitem__(self, col_name, val): + if type(col_name)==int: + self.row_data[col_name] = val + else: + self.row_data[self.tab.GetColIndex(col_name)] = val + + def __getattr__(self, col_name): + if 'col_names' not in self.tab.__dict__ or col_name not in self.tab.col_names: + raise AttributeError(col_name) + return self.row_data[self.tab.GetColIndex(col_name)] + + def __setattr__(self, col_name, val): + if 'col_names' not in self.tab.__dict__ or col_name not in self.tab.col_names: + raise AttributeError(col_name) + self.row_data[self.tab.GetColIndex(col_name)] = val class Table(object): """ @@ -1230,7 +1270,7 @@ Statistics for column %(col)s if y_range: plt.ylim(y_range[0], y_range[1]) if diag_line: - plt.plot(x_range, y_range, '-') + plt.plot(x_range, y_range, '-', color='black') plt.ylabel(nice_y, size='x-large') else: diff --git a/modules/gui/pymod/table.py b/modules/gui/pymod/table.py index fd65e9ff69ad2a9f496894c3e30b58ad5f18e52e..94f1c64182bda5bde67b5ed5bd8a7541878851b7 100644 --- a/modules/gui/pymod/table.py +++ b/modules/gui/pymod/table.py @@ -1,7 +1,7 @@ from PyQt4.QtGui import * from PyQt4.QtCore import * - +from ost import table __all__=('Table', ) class TableModel(QAbstractTableModel): @@ -40,10 +40,20 @@ class Table(QTableView): self.setFrameShape(QFrame.NoFrame) self.setAttribute(Qt.WA_MacSmallSize) self.setShowGrid(False) - #self.horizontalHeader().setStretchLastSection(True) + self.double_click = None + self.horizontalHeader().setStretchLastSection(True) self.setContextMenuPolicy(Qt.CustomContextMenu) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding) self.setSortingEnabled(True) - self.setModel(self._model) \ No newline at end of file + self.setModel(self._model) + QObject.connect(self, SIGNAL('doubleClicked(QModelIndex)'), + self.OnDoubleClick) + def OnDoubleClick(self, model_index): + print 'DOUBLE' + if not self.double_click: + return + row = table.TableRow(self._model.table.rows[model_index.row()], + self._model.table) + self.double_click(row)