Added support for identifiers sorting, and selection
This commit is contained in:
parent
ffe1ce6319
commit
01ef4bdedd
|
@ -27,6 +27,8 @@ class IdListController:
|
||||||
|
|
||||||
def __init__(self, idlist):
|
def __init__(self, idlist):
|
||||||
self._idlist = idlist
|
self._idlist = idlist
|
||||||
|
self._idlist.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
|
||||||
|
self._idlist.set_rubber_banding(True)
|
||||||
|
|
||||||
# dimname: current_annotation_name
|
# dimname: current_annotation_name
|
||||||
self._annotation = {}
|
self._annotation = {}
|
||||||
|
@ -37,6 +39,7 @@ class IdListController:
|
||||||
# id, annotation
|
# id, annotation
|
||||||
self._idstore = gtk.ListStore(gobject.TYPE_STRING,
|
self._idstore = gtk.ListStore(gobject.TYPE_STRING,
|
||||||
gobject.TYPE_STRING,)
|
gobject.TYPE_STRING,)
|
||||||
|
self._idstore.set_sort_func(0, self._numeric_compare)
|
||||||
|
|
||||||
# Annotation tree column
|
# Annotation tree column
|
||||||
self._annotation_column = None
|
self._annotation_column = None
|
||||||
|
@ -46,6 +49,9 @@ class IdListController:
|
||||||
|
|
||||||
renderer = gtk.CellRendererText()
|
renderer = gtk.CellRendererText()
|
||||||
dim_column = gtk.TreeViewColumn('Identifiers', renderer, text=0)
|
dim_column = gtk.TreeViewColumn('Identifiers', renderer, text=0)
|
||||||
|
dim_column.set_sort_indicator(True)
|
||||||
|
dim_column.set_sort_column_id(0)
|
||||||
|
dim_column.set_sort_order(gtk.SORT_ASCENDING)
|
||||||
idlist.insert_column(dim_column, 0)
|
idlist.insert_column(dim_column, 0)
|
||||||
idlist.connect('button-press-event', self._button_pressed)
|
idlist.connect('button-press-event', self._button_pressed)
|
||||||
|
|
||||||
|
@ -53,7 +59,7 @@ class IdListController:
|
||||||
menu = self._menu = SimpleMenu()
|
menu = self._menu = SimpleMenu()
|
||||||
menu.add_simple_item('Import...', self._on_import_list)
|
menu.add_simple_item('Import...', self._on_import_list)
|
||||||
menu.add_simple_item('Export...', self._on_export_list)
|
menu.add_simple_item('Export...', self._on_export_list)
|
||||||
|
menu.add_simple_item('Add to selection', self._on_make_selection)
|
||||||
item = gtk.MenuItem('Show annotations')
|
item = gtk.MenuItem('Show annotations')
|
||||||
menu.append(item)
|
menu.append(item)
|
||||||
item.show()
|
item.show()
|
||||||
|
@ -95,6 +101,9 @@ class IdListController:
|
||||||
if self._annotation_column == None:
|
if self._annotation_column == None:
|
||||||
renderer = gtk.CellRendererText()
|
renderer = gtk.CellRendererText()
|
||||||
col = gtk.TreeViewColumn(annotation, renderer, text=1)
|
col = gtk.TreeViewColumn(annotation, renderer, text=1)
|
||||||
|
col.set_sort_indicator(True)
|
||||||
|
col.set_sort_column_id(1)
|
||||||
|
col.set_sort_order(gtk.SORT_ASCENDING)
|
||||||
self._idlist.append_column(col)
|
self._idlist.append_column(col)
|
||||||
self._annotation_column = col
|
self._annotation_column = col
|
||||||
self._annotation_column.set_title(annotation)
|
self._annotation_column.set_title(annotation)
|
||||||
|
@ -111,7 +120,7 @@ class IdListController:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Otherwise show selection, possibly with annotations.
|
# Otherwise show selection, possibly with annotations.
|
||||||
id_list = list(selection[self._dimension])
|
#id_list = list(selection[self._dimension])
|
||||||
idlist = list(selection[self._dimension])
|
idlist = list(selection[self._dimension])
|
||||||
if self._annotation[self._dimension] != None:
|
if self._annotation[self._dimension] != None:
|
||||||
annlist = annotations.get_dim_annotations(self._dimension,
|
annlist = annotations.get_dim_annotations(self._dimension,
|
||||||
|
@ -149,6 +158,7 @@ class IdListController:
|
||||||
|
|
||||||
self._menu_ann.set_submenu(annotations_menu)
|
self._menu_ann.set_submenu(annotations_menu)
|
||||||
|
|
||||||
|
|
||||||
def import_annotation_file(self):
|
def import_annotation_file(self):
|
||||||
"""Pops up a file dialog and ask the user to select the annotation
|
"""Pops up a file dialog and ask the user to select the annotation
|
||||||
file to be loaded. Only one file can be selected. The file is loaded
|
file to be loaded. Only one file can be selected. The file is loaded
|
||||||
|
@ -172,6 +182,25 @@ class IdListController:
|
||||||
##
|
##
|
||||||
## GTK Callbacks
|
## GTK Callbacks
|
||||||
##
|
##
|
||||||
|
|
||||||
|
def _numeric_compare(self, treemodel, iter1, iter2):
|
||||||
|
column = treemodel.get_sort_column_id()[0]
|
||||||
|
|
||||||
|
item1 = treemodel.get_value(iter1, column)
|
||||||
|
item2 = treemodel.get_value(iter2, column)
|
||||||
|
|
||||||
|
try:
|
||||||
|
item1 = float(item1)
|
||||||
|
item2 = float(item2)
|
||||||
|
except:
|
||||||
|
logger.log("notice", "Could not convert to float: %s, %s" %(item1, item2))
|
||||||
|
|
||||||
|
if item1==item2: return 0
|
||||||
|
if item1>item2:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return -1
|
||||||
|
|
||||||
def _popup_menu(self, *rest):
|
def _popup_menu(self, *rest):
|
||||||
self._update_annotations_menu()
|
self._update_annotations_menu()
|
||||||
self._menu.popup(None, None, None, 0, 0)
|
self._menu.popup(None, None, None, 0, 0)
|
||||||
|
@ -190,6 +219,14 @@ class IdListController:
|
||||||
def _on_import_list(self, menuitem):
|
def _on_import_list(self, menuitem):
|
||||||
self.import_annotation_file()
|
self.import_annotation_file()
|
||||||
|
|
||||||
|
def _on_make_selection(self, menuitem):
|
||||||
|
selection = self._idlist.get_selection()
|
||||||
|
model, paths = selection.get_selected_rows()
|
||||||
|
if paths==None: return
|
||||||
|
iters = [self._idstore.get_iter(p) for p in paths]
|
||||||
|
ids = [self._idstore.get_value(i, 0) for i in iters]
|
||||||
|
main.project.set_selection(self._dimension, ids)
|
||||||
|
|
||||||
|
|
||||||
class SelectionListController:
|
class SelectionListController:
|
||||||
def __init__(self, seltree, idlist_controller):
|
def __init__(self, seltree, idlist_controller):
|
||||||
|
|
Reference in New Issue