Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP refact(table): decouple buffer from table-view by moving paging up to model #70

Merged
merged 13 commits into from
Jun 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions vitables/plugins/columnorg/columnar_org.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def helpAbout(self, parent):
'folder': os.path.join(os.path.dirname(__file__)),
'author': 'Vicent Mas <[email protected]>',
'comment': translate('ArrayColsOrganizer',
"""
"""
<qt><p>Plugin that provides an alternative view for
arrays with the same number of rows. <p>
The user has to open all the arrays she whishes to see in
Expand All @@ -158,7 +158,7 @@ def helpAbout(self, parent):
<p>Note that all ticked arrays must have the same
dimensions for the `Group` menu item to enable.</qt>
""",
'Text of an About plugin message box')}
'Text of an About plugin message box')}
about_page = AboutPage(desc, parent)
return about_page

Expand Down Expand Up @@ -198,10 +198,10 @@ def addEntry(self):
triggered=self.groupArrays,
icon=object_group_icon,
statusTip=translate('MenuUpdater',
"""
"""
Use a unique widget to display Arrays as if
they where columns of a Table""",
"Status bar text for the Node -> Group Arrays action"))
"Status bar text for the Node -> Group Arrays action"))

object_ungroup_icon = QtGui.QIcon()
pixmap = QtGui.QPixmap(os.path.join(_PLUGIN_FOLDER,
Expand All @@ -219,8 +219,8 @@ def addEntry(self):
triggered=self.ungroupArrays,
icon=object_ungroup_icon,
statusTip=translate('MenuUpdater',
"""Ungroup previously grouped arrays.""",
"Status bar text for the Node -> Ungroup Arrays action"))
"""Ungroup previously grouped arrays.""",
"Status bar text for the Node -> Ungroup Arrays action"))

# Add the actions to the Node menu
vitables.utils.addToMenu(self.vtgui.node_menu, (self.group_action,
Expand Down Expand Up @@ -468,12 +468,12 @@ def customizeGroupedViews(self):

nd = len(datasheets)
for i in range(nd):
datasheets[nd-1].widget().verticalScrollBar().valueChanged.connect(
datasheets[nd - 1].widget().verticalScrollBar().valueChanged.connect(
datasheets[i].widget().verticalScrollBar().setValue)
if i < (nd - 1):
datasheets[i].widget().verticalScrollBar().hide()
datasheets[i].widget().setCornerWidget(None)
datasheets[i+1].widget().verticalHeader().hide()
datasheets[i + 1].widget().verticalHeader().hide()

def closeEvent(self, event):
""" Propagate the close event.
Expand Down
60 changes: 27 additions & 33 deletions vitables/plugins/timeseries/time_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
pd = None

from qtpy import QtCore
from qtpy import QtGui
from qtpy import QtWidgets

import vitables.utils
Expand Down Expand Up @@ -152,7 +151,7 @@ def tsFrequency(ts_kind, leaf):
if ts_kind == 'scikits_ts':
# The frequency of the time serie. Default is 6000 (daily)
special_attrs = getattr(leaf._v_attrs, 'special_attrs',
{'freq': 6000})
{'freq': 6000})
ts_freq = special_attrs['freq']
return ts_freq

Expand Down Expand Up @@ -225,14 +224,14 @@ def customiseModel(self, datasheet):
'ts_cols': time_cols,
'ts_freq': tsFrequency(ts_kind, leaf),
'ts_format': datetimeFormat(),
}
}
if isinstance(leaf, tables.Table):
leaf_kind = 'table'
else:
leaf_kind = 'array'
model_info = {
'leaf_kind': leaf_kind,
'rbuffer': model.rbuffer,
'model': model,
'numrows': model.rowCount(),
'formatContent': model.formatContent,
}
Expand All @@ -246,7 +245,6 @@ def customiseModel(self, datasheet):
model.tsFormatter = ts_model.tsFormatter
model.data = ts_model.data


def helpAbout(self, parent):
"""Full description of the plugin.

Expand All @@ -260,17 +258,17 @@ def helpAbout(self, parent):

# Plugin full description
desc = {'version': __version__,
'module_name': os.path.join(os.path.basename(__file__)),
'folder': os.path.join(os.path.dirname(__file__)),
'author': 'Vicent Mas <[email protected]>',
'about_text': translate('TimeFormatterPage',
"""<qt>
'module_name': os.path.join(os.path.basename(__file__)),
'folder': os.path.join(os.path.dirname(__file__)),
'author': 'Vicent Mas <[email protected]>',
'about_text': translate('TimeFormatterPage',
"""<qt>
<p>Plugin that provides nice string formatting for time fields.
<p>It supports not only native PyTables time datatypes but
also time series generated (and stored in PyTables tables) via
Pandas and scikits.timeseries packages.
</qt>""",
'Text of an About plugin message box')}
'Text of an About plugin message box')}
self.about_page = AboutPage(desc, parent)

# We need to install the event filter because the Preferences dialog
Expand Down Expand Up @@ -300,7 +298,7 @@ def __init__(self, model_info, ts_info, parent=None):
self.ts_freq = ts_info['ts_freq']
self.ts_format = ts_info['ts_format']
# Attributes required by the data() method
self.rbuffer = model_info['rbuffer']
self.model = model_info['model']
self.numrows = model_info['numrows']
self.ts_cols = ts_info['ts_cols']
self.formatContent = model_info['formatContent']
Expand All @@ -313,7 +311,6 @@ def __init__(self, model_info, ts_info, parent=None):
else:
self.data = self.array_data


def table_data(self, index, role=QtCore.Qt.DisplayRole):
"""Returns the data stored under the given role for the item
referred to by the index.
Expand All @@ -325,21 +322,21 @@ def table_data(self, index, role=QtCore.Qt.DisplayRole):
- `index`: the index of a data item
- `role`: the role being returned
"""
row, col = index.row(), index.column()

if not index.isValid() or \
not (0 <= index.row() < self.numrows):
if not index.isValid() or not (0 <= row < self.nrows):
return None
cell = self.rbuffer.getCell(self.rbuffer.start + index.row(),
index.column())

if role == QtCore.Qt.DisplayRole:
cell = self.model.cell(row, col)
if index.column() in self.ts_cols:
return self.tsFormatter(cell)
return self.formatContent(cell)
elif role == QtCore.Qt.TextAlignmentRole:
return int(QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
else:
return None

if role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop

return None

def array_data(self, index, role=QtCore.Qt.DisplayRole):
"""Returns the data stored under the given role for the item
Expand All @@ -352,19 +349,19 @@ def array_data(self, index, role=QtCore.Qt.DisplayRole):
- `index`: the index of a data item
- `role`: the role being returned
"""
row, col = index.row(), index.column()

if not index.isValid() or \
not (0 <= index.row() < self.numrows):
if not index.isValid() or not (0 <= row < self.nrows):
return None
cell = self.rbuffer.getCell(self.rbuffer.start + index.row(),
index.column())

if role == QtCore.Qt.DisplayRole:
cell = self.model.cell(row, col)
return self.tsFormatter(cell)
elif role == QtCore.Qt.TextAlignmentRole:
return int(QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
else:
return None

if role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop

return None

def timeFormatter(self):
"""Return the function to be used for formatting time series.
Expand All @@ -380,7 +377,6 @@ def timeFormatter(self):
time_formatter = self.formatPyTablesTS
return time_formatter


def formatPyTablesTS(self, content):
"""
Format a given date in a user friendly way.
Expand All @@ -396,7 +392,6 @@ def formatPyTablesTS(self, content):
except ValueError:
return content


def formatPandasTS(self, content):
"""Format a given date in a user friendly way.

Expand All @@ -405,14 +400,13 @@ def formatPandasTS(self, content):

:Parameter content: the content of the table cell being formatted
"""

# ImportError if pandas not installed!
date = pd.Timestamp(int(content))
try:
return date.strftime(self.ts_format)
except ValueError:
return content


def formatScikitsTS(self, content):
"""Format a given date in a user friendly way.

Expand Down
Loading