Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
23750c6
Data Table shows annotation code
Dec 16, 2016
b3f5af0
Fixed bugs when sorting columns and in series service
Dec 16, 2016
91ac688
Silenced a error when clicking on annotations column. Its a patch for…
Dec 16, 2016
f5b17b7
update setup
Dec 16, 2016
4cac7d9
set schema
Dec 16, 2016
d8a0bc9
update paths in setup file
Dec 16, 2016
e7548d9
update setup stuff
Dec 19, 2016
ba5c068
update setup file
Dec 19, 2016
356b8e3
try to update setup file for mac settings
Dec 20, 2016
b88afd8
WORKING py2exe
Dec 20, 2016
6bc2b8e
add mkl dll through code
Dec 22, 2016
b88f20e
Sort by annotation
Dec 28, 2016
15e4b4b
Bug fix when selecting a different result
Dec 28, 2016
53ecd86
#273 Fixed the ribbons not highlighting correctly when hovering on an…
Jan 2, 2017
ea3325b
add setup info for make .ap file
Jan 9, 2017
855cf17
anno, set schema
Jan 9, 2017
23c4e14
Merge pull request #312 from ODM2/beta-display-anno
AmberSJones Jan 11, 2017
7560412
build action from scratch
Jan 19, 2017
23d3351
try/catch for datetime issue
kwuz Jan 20, 2017
0ca002a
only connect to an odm2 database
Jan 24, 2017
714af29
update text for dbconn form
Jan 24, 2017
28d94f1
add functionality to save annotations to the db
Jan 25, 2017
51fdff1
remove comments. fix issue #305
Jan 25, 2017
ca0e94f
merge
Jan 25, 2017
585b10d
Merge branch 'iss305c' into Beta_2.0.1
Jan 25, 2017
1c4552c
Merge branch 'Beta_2.0.1' into saveAction
Jan 25, 2017
e8b43fc
test before accessing anootations
Jan 25, 2017
1e20fec
update saving style
Jan 25, 2017
b43f640
fix saving a new series
Feb 6, 2017
0d32a79
fix save append
Feb 6, 2017
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
9 changes: 3 additions & 6 deletions odmtools/controller/frmDataTable.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,14 @@ def __init__(self, parent, **kwargs):
self.memDB = None
DataTable.__init__(self, parent, **kwargs)

def init(self, memDB):
self.memDB = memDB
self.olvDataTable.init(self.memDB)

def init_publishers(self):
Publisher.subscribe(self.onChangeSelection, "changeTableSelection")
Publisher.subscribe(self.onRefresh, "refreshTable")
Publisher.subscribe(self.olvDataTable.onDeselectAll, "deselectAllDataTable")

def init(self, memDB):
self.memDB = memDB
self.olvDataTable.init(self.memDB)
self.init_publishers()

def onItemSelected(self, event):
pass

Expand Down
109 changes: 85 additions & 24 deletions odmtools/controller/olvDataTable.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ def __init__(self, parent, **kwargs):
self.sortedColumnIndex = -1
self.currentItem = None
self.dataframe = None
self.annotations = None
self.annotations_grouped = {}

def init(self, memDB):
self.memDB = memDB
Expand All @@ -28,21 +30,62 @@ def init(self, memDB):
self.oddRowsBackColor = wx.Colour(191, 217, 217)

self.dataframe = self.memDB.getDataValuesDF()
sort_by_index = list(self.dataframe.columns).index("valuedatetime")
self.annotations = self.memDB.get_annotations()

sort_by_index = self.dataframe.columns.tolist().index("valuedatetime")
self.dataframe.sort_values(self.dataframe.columns[sort_by_index], inplace=True)
self.dataObjects = self.dataframe.values.tolist()

self.annotations_grouped = self.__group_annotations()
self.dataObjects = self.__merge_dataframe_with_annotations()

col = self.memDB.get_columns_with_annotations()

columns = \
[ColumnDefn(x.strip(), align="left", valueGetter=i, minimumWidth=125, width=125,
stringConverter='%Y-%m-%d %H:%M:%S' if "valuedatetime" == x.lower() else '%s')
for x, i in self.memDB.getEditColumns()]
stringConverter='%Y-%m-%d %H:%M:%S' if "valuedatetime" == x.lower() else '%s')
for x, i in col]

self.SetColumns(columns)


self.SetObjectGetter(self.ObjectGetter)
self.SetItemCount(len(self.dataframe))
self.SetItemCount(len(self.dataObjects))

def __merge_dataframe_with_annotations(self):
data_list = self.dataframe.values.tolist()
data = data_list
if self.annotations_grouped:
for key, value in self.annotations_grouped.iteritems():
for i in range(0, len(data_list)):
if key in data[i]:
data[i].append(value)
break

return data

def __group_annotations(self):
"""
Ideally, this method should only be called once. Use self.grouped_annotations after calling this method
:return:
"""
if (self.annotations):
anno_list = self.annotations.values.tolist()

anno = {}
for i in range(0, len(anno_list)):
value_id = anno_list[i][1]
annotation_code = anno_list[i][-1]
if value_id in anno:
anno[value_id].append(annotation_code)
else:
anno[value_id] = [annotation_code]

return anno
else:
return None

def EnableSorting(self):
self.Bind(wx.EVT_LIST_COL_CLICK, self.onColSelected)
self.Bind(wx.EVT_LIST_COL_CLICK, self.on_column_selected)
if not self.smallImageList:
self.SetImageLists()
if (not self.smallImageList.HasName(ObjectListView.NAME_DOWN_IMAGE) and
Expand All @@ -56,40 +99,58 @@ def ObjectGetter(self, index):
"""
return self.dataObjects[index % len(self.dataObjects)]

def onColSelected(self, evt):
def on_column_selected(self, event):
"""
Allows users to sort by clicking on columns
"""
if isinstance(self.dataframe, pd.DataFrame):
if self.dataframe.empty:
return
else:
if not self.dataframe:
return
if not isinstance(self.dataframe, pd.DataFrame):
return

if self.dataframe.empty:
return

if not len(self.dataObjects):
return

logger.debug("Column: %s" % evt.m_col)
self.sortColumn(evt.m_col)
self.sortColumn(event.Column)

def sortColumn(self, selected_column):
self.sortAscending = not self.sortAscending

oldSortColumnIndex = self.sortedColumnIndex
self.sortedColumnIndex = selected_column
ascending = self.sortAscending
if ascending:
self.dataframe.sort_values(self.dataframe.columns[selected_column], inplace=True)
self.sortAscending = False
elif not ascending:
self.dataframe.sort_values(self.dataframe.columns[selected_column], ascending=False, inplace=True)
self.sortAscending = True

self._UpdateColumnSortIndicators(selected_column, oldSortColumnIndex)

self.dataObjects = self.dataframe.values.tolist()
if self.GetItemCount:
if selected_column >= len(self.dataframe.columns):
self.dataObjects = self.sort_columns_by_annotation_code(reverse=self.sortAscending)
else:
self.dataframe.sort_values(self.dataframe.columns[selected_column], ascending=self.sortAscending, inplace=True)
self.dataObjects = self.__merge_dataframe_with_annotations()

if self.GetItemCount():
itemFrom = self.GetTopItem()
itemTo = self.GetTopItem() + 1 + self.GetCountPerPage()
itemTo = min(itemTo, self.GetItemCount() - 1)
self.RefreshItems(itemFrom, itemTo)

def sort_columns_by_annotation_code(self, reverse=False):
rows_with_annotation = []
rows_without_annotation = []

column_number_of_dataframe = len(self.dataframe.columns)

for i in self.dataObjects:
if len(i) > column_number_of_dataframe:
rows_with_annotation.append(i)
else:
rows_without_annotation.append(i)

if reverse:
return rows_without_annotation + rows_with_annotation
else:
return rows_with_annotation + rows_without_annotation

def onItemSelected(self, event):
"""

Expand Down
37 changes: 35 additions & 2 deletions odmtools/gui/mnuRibbon.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ def _init_ctrls(self, prnt):

# -------------------------------------------------------------------------------
editPage = RB.RibbonPage(self, wx.ID_ANY, "Edit")
# editPage.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter)

main_panel = RB.RibbonPanel(editPage, wx.ID_ANY, "Main", wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize,
RB.RIBBON_PANEL_NO_AUTO_MINIMISE)
Expand Down Expand Up @@ -204,14 +205,28 @@ def _init_ctrls(self, prnt):
self.CurrPage = 1
self.SetActivePageByIndex(self.CurrPage)

self.bindEvents()
self.__bind_events()
self.initPubSub()

def __init__(self, parent, id, name):
self.parent = parent
self._init_ctrls(parent)

def bindEvents(self):
def on_mouse_enter(self, event):
ribbon_panel = event.GetEventObject().GetParent()
ribbon_panel._hovered = True

self.Refresh()
event.Skip()

def on_mouse_leave(self, event):
ribbon_panel = event.GetEventObject().GetParent()
ribbon_panel._hovered = False

self.Refresh()
event.Skip()

def __bind_events(self):
###Docking Window Selection
self.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.onDocking, id=wxID_RIBBONVIEWTABLE)
self.Bind(RB.EVT_RIBBONBUTTONBAR_CLICKED, self.onDocking, id=wxID_RIBBONVIEWSERIES)
Expand Down Expand Up @@ -262,6 +277,24 @@ def bindEvents(self):
###Ribbon Event
self.Bind(RB.EVT_RIBBONBAR_PAGE_CHANGED, self.onFileMenu, id=wxID_PANEL1)

# ENTER
self.main_bar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 1
self.edit_bar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 2
self.record_bar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 3
self.PlotsOptions_bar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 4
self.plots_bar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 5
self.dateTime_buttonbar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 6
self.scriptBar.Bind(wx.EVT_ENTER_WINDOW, self.on_mouse_enter) # 7

# LEAVE
self.main_bar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 1
self.edit_bar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 2
self.record_bar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 3
self.PlotsOptions_bar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 4
self.plots_bar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 5
self.dateTime_buttonbar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 6
self.scriptBar.Bind(wx.EVT_LEAVE_WINDOW, self.on_mouse_leave) # 7

def initPubSub(self):
Publisher.subscribe(self.toggleEditButtons, "EnableEditButtons")
Publisher.subscribe(self.enableButtons, "EnablePlotButtons")
Expand Down
Loading