Fixed dim_cursor_changed to to use the correct treemodel, and added show/hide on selection details
This commit is contained in:
parent
0d8702bb71
commit
41e8ed511b
@ -15,9 +15,9 @@ class SimpleMenu(gtk.Menu):
|
||||
def __init__(self):
|
||||
gtk.Menu.__init__(self)
|
||||
|
||||
def add_simple_item(self, title, function):
|
||||
def add_simple_item(self, title, function, *args):
|
||||
item = gtk.MenuItem(title)
|
||||
item.connect('activate', function)
|
||||
item.connect('activate', function, *args)
|
||||
self.append(item)
|
||||
item.show()
|
||||
|
||||
@ -104,10 +104,8 @@ class IdListController:
|
||||
def set_selection(self, selection):
|
||||
"""Set the selection to be displayed.
|
||||
The selection is not stored, the values are copied into the TreeStore"""
|
||||
|
||||
self._idstore.clear()
|
||||
id_list = list(selection[self._dimension])
|
||||
|
||||
idlist = list(selection[self._dimension])
|
||||
if self._annotation[self._dimension] != None:
|
||||
annlist = annotations.get_dim_annotations(self._dimension,
|
||||
@ -182,23 +180,21 @@ class SelectionListController:
|
||||
def __init__(self, seltree, idlist_controller):
|
||||
self._seltree = seltree
|
||||
self._sel_stores = {}
|
||||
self._detail_cols = []
|
||||
self._dimension = None
|
||||
self._idlist_controller = idlist_controller
|
||||
|
||||
# Selection renderers
|
||||
self._details_on = False
|
||||
|
||||
# Selection column
|
||||
renderer = gtk.CellRendererText()
|
||||
sel_column = gtk.TreeViewColumn('Selection', renderer, text=0)
|
||||
seltree.insert_column(sel_column, 0)
|
||||
|
||||
intersect_cs_col = gtk.TreeViewColumn('In curr.sel.', renderer, text=3)
|
||||
seltree.insert_column(intersect_cs_col, 1)
|
||||
|
||||
n_all_col = gtk.TreeViewColumn('# All', renderer, text=4)
|
||||
seltree.insert_column(n_all_col, 2)
|
||||
|
||||
rank_col = gtk.TreeViewColumn('Rank', renderer, text=5)
|
||||
seltree.insert_column(rank_col, 3)
|
||||
|
||||
# Detail columns
|
||||
cols = [('In CS', 3), ('All', 4), ('Rank', 5)]
|
||||
for name, store_col in cols:
|
||||
self._detail_cols.append(gtk.TreeViewColumn(name, renderer, text=store_col))
|
||||
|
||||
# Signals
|
||||
seltree.connect('row-activated', self._on_row_activated)
|
||||
seltree.connect('cursor-changed', self._on_cursor_changed)
|
||||
@ -212,6 +208,8 @@ class SelectionListController:
|
||||
# Selections context menu
|
||||
self._seltree_menu = SimpleMenu()
|
||||
self._seltree_menu.add_simple_item('Sort by selection', self._on_seltree_sort)
|
||||
self._seltree_menu.add_simple_item('Show details', self._enable_details, True)
|
||||
self._seltree_menu.add_simple_item('Hide details', self._enable_details, False)
|
||||
# self._seltree_menu.add_simple_item('Copy selection', self._on_seltree_copy_selection)
|
||||
#
|
||||
# Public interface
|
||||
@ -239,7 +237,7 @@ class SelectionListController:
|
||||
|
||||
if not self._get_current_selection_iter(selection, dim):
|
||||
n = len(selection[dim])
|
||||
values = (selection.title, selection, dim, n, n, 2)
|
||||
values = (selection.title, selection, dim, n, n, 0)
|
||||
store.insert_after(None, None, values)
|
||||
|
||||
def add_dataset(self, dataset):
|
||||
@ -259,11 +257,10 @@ class SelectionListController:
|
||||
n_sel = len(selection[dim_name])
|
||||
values = (selection.title, selection, dim_name, 0, n_sel, 0)
|
||||
store.insert_after(i, None, values)
|
||||
|
||||
|
||||
##
|
||||
## Private interface
|
||||
##
|
||||
#
|
||||
# Private interface
|
||||
#
|
||||
def _add_selection_store(self, dim):
|
||||
"""Add a new gtk.TreeStore for the selections on a dimension."""
|
||||
# Create new store
|
||||
@ -340,6 +337,15 @@ class SelectionListController:
|
||||
#
|
||||
# GTK callbacks
|
||||
#
|
||||
def _enable_details(self, widget, bool):
|
||||
if self._details_on == bool : return
|
||||
self._details_on = bool
|
||||
if bool==True:
|
||||
for col in self._detail_cols:
|
||||
self._seltree.insert_column(col, -1)
|
||||
else:
|
||||
for col in self._detail_cols:
|
||||
self._seltree.remove_column(col)
|
||||
|
||||
def _drag_data_received(self, widget, drag_context, x, y,
|
||||
selection, info, timestamp):
|
||||
@ -354,7 +360,6 @@ class SelectionListController:
|
||||
|
||||
def _on_cursor_changed(self, widget):
|
||||
"Show the list of identifier strings."
|
||||
|
||||
store = self._sel_stores[self._dimension]
|
||||
|
||||
p = self._seltree.get_cursor()[0]
|
||||
@ -366,7 +371,6 @@ class SelectionListController:
|
||||
|
||||
def _on_row_activated(self, widget, path, column):
|
||||
store = self._sel_stores[self._dimension]
|
||||
|
||||
i = store.get_iter(path)
|
||||
obj = store.get_value(i, 1)
|
||||
if isinstance(obj, dataset.Dataset):
|
||||
@ -450,33 +454,27 @@ class DimListController:
|
||||
|
||||
def set_dimension(self, dimname):
|
||||
self._current_dim = dimname
|
||||
|
||||
|
||||
dim = self.get_dimension(self._current_dim)
|
||||
path = self.dimstore.get_path(dim)
|
||||
|
||||
if self.dimlist.get_cursor()[0] != path:
|
||||
self.dimlist.set_cursor(self.dimstore.get_path(dim))
|
||||
|
||||
self._seltree_controller.set_dimension(dimname)
|
||||
|
||||
def dataset_changed(self):
|
||||
"""Callback function from Project."""
|
||||
self.update_dims()
|
||||
|
||||
##
|
||||
## Private interface
|
||||
##
|
||||
|
||||
def update_dims(self):
|
||||
"""Update the list of dimensions shown"""
|
||||
for dim in self.dim_names:
|
||||
if not self.get_dimension(dim):
|
||||
self.dimstore.insert_after(None, (dim,))
|
||||
|
||||
#def _dimension_filter(self, store, row):
|
||||
# """Filters out everything but the selected dimension."""
|
||||
# row_dim = store.get_value(row, 2)
|
||||
# return row_dim == self._current_dim
|
||||
|
||||
#
|
||||
# Private interface
|
||||
#
|
||||
def _dimension_filter(self, store, row):
|
||||
"""Filters out dimension with underscore prefix"""
|
||||
visible = False
|
||||
@ -493,18 +491,18 @@ class DimListController:
|
||||
def _on_dim_show(self, menuitem):
|
||||
self.dimlist.set_model(self.dimstore)
|
||||
|
||||
##
|
||||
## GTK Callbacks.
|
||||
##
|
||||
#
|
||||
# GTK Callbacks.
|
||||
#
|
||||
def _dim_cursor_changed(self, widget):
|
||||
cursor = self.dimlist.get_cursor()[0]
|
||||
i = self.dimstore.get_iter(cursor)
|
||||
row = self.dimstore.get_value(i, 0)
|
||||
i = self.dimlist.get_model().get_iter(cursor)
|
||||
row = self.dimlist.get_model().get_value(i, 0)
|
||||
self.set_dimension(row)
|
||||
|
||||
def _dim_row_activated(self, widget, path, column):
|
||||
self._seltree_controller.set_dimension(dim)
|
||||
|
||||
|
||||
def _dimlist_button_pressed(self, widget, event):
|
||||
if event.button == 3:
|
||||
self._dimlist_menu.popup(None, None, None, event.button, event.time)
|
||||
|
Reference in New Issue
Block a user