From 06f4dd783ed946168be00abdfdf4ffc127ba21e5 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Tue, 21 Jun 2011 01:58:24 +0200 Subject: Nodes can be scrolled and the item list is updated accordingly --- src/pubsub.py | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 8 deletions(-) (limited to 'src/pubsub.py') diff --git a/src/pubsub.py b/src/pubsub.py index 1b4a8e1e..0b8b02c5 100644 --- a/src/pubsub.py +++ b/src/pubsub.py @@ -47,9 +47,17 @@ class CollectionNode(PubsubNode): class PubsubItem(object): def __init__(self, idd, content): - self.idd = idd + self.id = idd self.content = content + def to_dict(self, columns): + """ + returns a dict of the values listed in columns + """ + ret = {} + for col in columns: + ret[col] = self.__dict__.get(col) or '' + return ret class PubsubBrowserTab(tabs.Tab): """ @@ -69,7 +77,7 @@ class PubsubBrowserTab(tabs.Tab): self.tab_win = windows.GlobalInfoBar() self.upper_message = windows.Topic() - self.upper_message.set_message('Pubsub server: %s' % (self.server,)) + self.upper_message.set_message('Pubsub server: %s/%s' % (self.server,self.current_node or '')) # Node List View node_columns = ('node', 'name',) @@ -77,7 +85,7 @@ class PubsubBrowserTab(tabs.Tab): self.node_listview = windows.ListWin(node_columns) # Item List View - item_columns = ('name',) + item_columns = ('id',) self.item_list_header = windows.ColumnHeaderWin(item_columns) self.item_listview = windows.ListWin(item_columns) @@ -85,8 +93,8 @@ class PubsubBrowserTab(tabs.Tab): self.input = self.default_help_message self.key_func['c'] = self.command_create_node - self.key_func["M-KEY_DOWN"] = self.node_listview.move_cursor_down - self.key_func["M-KEY_UP"] = self.node_listview.move_cursor_up + self.key_func["M-KEY_DOWN"] = self.scroll_node_down + self.key_func["M-KEY_UP"] = self.scroll_node_up self.key_func["KEY_DOWN"] = self.item_listview.move_cursor_down self.key_func["KEY_UP"] = self.item_listview.move_cursor_up self.resize() @@ -104,11 +112,11 @@ class PubsubBrowserTab(tabs.Tab): self.node_listview.resize_columns(column_size) self.node_listview.resize(self.height//2-2, self.width//2, 2, 0) - column_size = {'name': self.width//2,} + column_size = {'id': self.width//2,} self.item_list_header.resize_columns(column_size) self.item_list_header.resize(self.height//2+1, self.width//2, self.height//2, 0) self.item_listview.resize_columns(column_size) - self.item_listview.resize(self.height//2-4, self.width//2, self.height//2+3, 0) + self.item_listview.resize(self.height//2-3, self.width//2, self.height//2+1, 0) self.input.resize(1, self.width, self.height-1, 0) @@ -134,6 +142,26 @@ class PubsubBrowserTab(tabs.Tab): if key in self.key_func: return self.key_func[key]() + def get_selected_node_name(self): + """ + From the node_view_list, returns the node name of the selected + one. None can be returned + """ + line = self.node_listview.get_selected_row() + if not line: + return None + return line['node'] + + def get_node_by_name(self, name): + """ + in the current browsed node (or on the root), return the node with that name + """ + nodes = self.current_node and self.current_node.subnodes or self.nodes + for node in nodes: + if node.name == name: + return node + return None + def get_items(self, node): """ Get all items in the given node @@ -144,8 +172,22 @@ class PubsubBrowserTab(tabs.Tab): for it in items: item_list.append(PubsubItem(it.attrib['id'], it)) node.items = item_list + log.debug('get_selected_node_name: %s' % self.get_selected_node_name()) + if self.get_selected_node_name() == node.name: + self.display_items_from_node(node) log.debug('Item on node %s: %s' % (node.name, item_list)) + def display_items_from_node(self, node): + """ + takes a node, and set fill the item_listview with that + node’s items + """ + columns = self.item_list_header.get_columns() + self.item_listview.lines = [] + log.debug('display_items_from_node: %s' % node.items) + for item in node.items: + self.item_listview.lines.append(item.to_dict(columns)) + def add_nodes(self, node_list, parent=None): """ Add Node objects to the list of the parent. @@ -158,11 +200,11 @@ class PubsubBrowserTab(tabs.Tab): list_to_append = self.nodes else: list_to_append = parent.nodes + self.node_listview.add_lines(node_list) for node in node_list: new_node = LeafNode(node['node']) list_to_append.append(new_node) self.get_items(new_node) - self.node_listview.add_lines(node_list) def get_nodes(self, node=None): """ @@ -198,3 +240,28 @@ class PubsubBrowserTab(tabs.Tab): self.input = windows.CommandInput("[Create node]", self.reset_help_message, self.create_node, None) self.input.resize(1, self.width, self.height-1, 0) return True + + def scroll_node_up(self): + """ + scroll the node up, and update the item list if needed + """ + selected_node_before = self.get_selected_node_name() + self.node_listview.move_cursor_up() + selected_node_after = self.get_selected_node_name() + if selected_node_after is not selected_node_before: + self.display_items_from_node(self.get_node_by_name(selected_node_after)) + return True + return False + + def scroll_node_down(self): + """ + scroll the node down, and update the item list if needed + """ + selected_node_before = self.get_selected_node_name() + self.node_listview.move_cursor_down() + selected_node_after = self.get_selected_node_name() + if selected_node_after is not selected_node_before: + self.display_items_from_node(self.get_node_by_name(selected_node_after)) + return True + return False + -- cgit v1.2.3