@@ -21,7 +21,7 @@ def __init__(self, parent, **kwargs):
2121 self .currentItem = None
2222 self .dataframe = None
2323 self .annotations = None
24- self .data = None
24+ self .annotations_grouped = {}
2525
2626 def init (self , memDB ):
2727 self .memDB = memDB
@@ -31,17 +31,15 @@ def init(self, memDB):
3131
3232 self .dataframe = self .memDB .getDataValuesDF ()
3333 self .annotations = self .memDB .get_annotations ()
34- # sort_by_index = list(self.dataframe.columns).index("valuedatetime")
35- # columns = self.memDB.get_columns_with_annotations()
36- # self.dataframe.sort_values(self.dataframe.columns[sort_by_index], inplace=True)
37- # self.dataObjects = self.dataframe.values.tolist()
34+
35+ sort_by_index = self .dataframe .columns .tolist ().index ("valuedatetime" )
36+ self .dataframe .sort_values (self .dataframe .columns [sort_by_index ], inplace = True )
37+
38+ self .annotations_grouped = self .__group_annotations ()
3839 self .dataObjects = self .__merge_dataframe_with_annotations ()
40+
3941 col = self .memDB .get_columns_with_annotations ()
4042
41- # columns = \
42- # [ColumnDefn(x.strip(), align="left", valueGetter=i, minimumWidth=125, width=125,
43- # stringConverter='%Y-%m-%d %H:%M:%S' if "valuedatetime" == x.lower() else '%s')
44- # for x, i in self.memDB.getEditColumns()]
4543 columns = \
4644 [ColumnDefn (x .strip (), align = "left" , valueGetter = i , minimumWidth = 125 , width = 125 ,
4745 stringConverter = '%Y-%m-%d %H:%M:%S' if "valuedatetime" == x .lower () else '%s' )
@@ -51,16 +49,27 @@ def init(self, memDB):
5149
5250
5351 self .SetObjectGetter (self .ObjectGetter )
54- self .SetItemCount (len (self .dataframe ))
52+ self .SetItemCount (len (self .dataObjects ))
5553
5654 def __merge_dataframe_with_annotations (self ):
57- sort_by_index = self .dataframe .columns .tolist ().index ("valuedatetime" )
58- self .dataframe .sort_values (self .dataframe .columns [sort_by_index ], inplace = True )
59-
6055 data_list = self .dataframe .values .tolist ()
61- anno_list = self .annotations .values .tolist ()
6256 data = data_list
6357
58+ for key , value in self .annotations_grouped .iteritems ():
59+ for i in range (0 , len (data_list )):
60+ if key in data [i ]:
61+ data [i ].append (value )
62+ break
63+
64+ return data
65+
66+ def __group_annotations (self ):
67+ """
68+ Ideally, this method should only be called once. Use self.grouped_annotations after calling this method
69+ :return:
70+ """
71+ anno_list = self .annotations .values .tolist ()
72+
6473 anno = {}
6574 for i in range (0 , len (anno_list )):
6675 value_id = anno_list [i ][1 ]
@@ -70,16 +79,10 @@ def __merge_dataframe_with_annotations(self):
7079 else :
7180 anno [value_id ] = [annotation_code ]
7281
73- for key , value in anno .iteritems ():
74- for i in range (0 , len (data_list )):
75- if key in data_list [i ]:
76- data_list [i ].append (value )
77- break
78-
79- return data
82+ return anno
8083
8184 def EnableSorting (self ):
82- self .Bind (wx .EVT_LIST_COL_CLICK , self .onColSelected )
85+ self .Bind (wx .EVT_LIST_COL_CLICK , self .on_column_selected )
8386 if not self .smallImageList :
8487 self .SetImageLists ()
8588 if (not self .smallImageList .HasName (ObjectListView .NAME_DOWN_IMAGE ) and
@@ -93,35 +96,34 @@ def ObjectGetter(self, index):
9396 """
9497 return self .dataObjects [index % len (self .dataObjects )]
9598
96- def onColSelected (self , evt ):
99+ def on_column_selected (self , event ):
97100 """
98101 Allows users to sort by clicking on columns
99102 """
100- if isinstance (self .dataframe , pd .DataFrame ):
101- if self .dataframe .empty :
102- return
103- else :
104- if not self .dataframe :
105- return
103+ if not isinstance (self .dataframe , pd .DataFrame ):
104+ return
105+
106+ if self .dataframe .empty :
107+ return
106108
107- logger .debug ("Column: %s" % evt .m_col )
108- self .sortColumn (evt .m_col )
109+ if not len (self .dataObjects ):
110+ return
111+
112+ self .sortColumn (event .Column )
109113
110114 def sortColumn (self , selected_column ):
111115 oldSortColumnIndex = self .sortedColumnIndex
112116 self .sortedColumnIndex = selected_column
113- ascending = self .sortAscending
114- if ascending :
115- self .dataframe .sort_values (self .dataframe .columns [selected_column ], inplace = True )
116- self .sortAscending = False
117- elif not ascending :
118- self .dataframe .sort_values (self .dataframe .columns [selected_column ], ascending = False , inplace = True )
119- self .sortAscending = True
117+
118+ self .sortAscending = not self .sortAscending
119+ self .dataframe .sort_values (self .dataframe .columns [selected_column ], ascending = self .sortAscending , inplace = True )
120120
121121 self ._UpdateColumnSortIndicators (selected_column , oldSortColumnIndex )
122122
123- self .dataObjects = self .dataframe .values .tolist ()
124- if self .GetItemCount :
123+ # self.dataObjects = self.dataframe.values.tolist()
124+ self .dataObjects = self .__merge_dataframe_with_annotations ()
125+
126+ if self .GetItemCount ():
125127 itemFrom = self .GetTopItem ()
126128 itemTo = self .GetTopItem () + 1 + self .GetCountPerPage ()
127129 itemTo = min (itemTo , self .GetItemCount () - 1 )
0 commit comments