Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/GetIABooksActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'GetIABooksActivity.py')
-rw-r--r--GetIABooksActivity.py150
1 files changed, 126 insertions, 24 deletions
diff --git a/GetIABooksActivity.py b/GetIABooksActivity.py
index c1b9f78..7f1bf89 100644
--- a/GetIABooksActivity.py
+++ b/GetIABooksActivity.py
@@ -30,6 +30,7 @@ except ImportError:
from sugar.graphics import style
from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toggletoolbutton import ToggleToolButton
from sugar.graphics.toolcombobox import ToolComboBox
from sugar.graphics.combobox import ComboBox
from sugar.graphics.menuitem import MenuItem
@@ -80,6 +81,7 @@ class GetIABooksActivity(activity.Activity):
self.languages = {}
self._lang_code_handler = languagenames.LanguageNames()
self.catalogs = {}
+ self.catalog_history = []
if os.path.exists('/etc/get-books.cfg'):
self._read_configuration('/etc/get-books.cfg')
@@ -266,19 +268,11 @@ class GetIABooksActivity(activity.Activity):
self.__language_changed_cb)
if len(self.catalogs) > 0:
- self.bt_catalogs = ToolButton('catalogs')
+ self.bt_catalogs = ToggleToolButton('catalogs')
self.bt_catalogs.set_tooltip(_('Catalogs'))
-
toolbar.insert(self.bt_catalogs, -1)
self.bt_catalogs.show()
- palette = self.bt_catalogs.get_palette()
- for key in self.catalogs.keys():
- menu_item = MenuItem(key)
- menu_item.connect('activate',
- self.__activate_catalog_cb, self.catalogs[key])
- palette.menu.append(menu_item)
- menu_item.show()
- self.bt_catalogs.connect('clicked', self.__bt_catalogs_clicked_cb)
+ self.bt_catalogs.connect('toggled', self.__toggle_cats_cb)
self._device_manager = devicemanager.DeviceManager()
self._refresh_sources(toolbar)
@@ -293,6 +287,10 @@ class GetIABooksActivity(activity.Activity):
palette = button.get_palette()
palette.popup(immediate=True, state=palette.SECONDARY)
+ def __switch_catalog_cb(self, catalog_name):
+ catalog_config = self.catalogs[catalog_name.decode('utf-8')]
+ self.__activate_catalog_cb(None, catalog_config)
+
def __activate_catalog_cb(self, menu, catalog_config):
query_language = self.get_query_language()
@@ -391,10 +389,67 @@ class GetIABooksActivity(activity.Activity):
self._download.props.sensitive = state
self.format_combo.props.sensitive = state
+ def move_up_catalog(self, treeview):
+ len_cat = len(self.catalog_history)
+ if self.treecol.get_title() == _('Catalogs'):
+ return
+ else:
+ # move a level up the tree
+ self.catalog_history.pop()
+ len_cat -= 1
+ if(len_cat == 1):
+ title = self.catalog_history[0]['title']
+ else:
+ title = self.catalog_history[len_cat - 2]['title'] + ' <- ' + \
+ self.catalog_history[len_cat - 1]['title']
+ self.treecol.set_title(title)
+ self.catalogs = self.catalog_history[len_cat - 1]['catalogs']
+ if len(self.catalogs) > 0:
+ self.path_iter = {}
+ self.categories = []
+ for key in self.catalogs.keys():
+ self.categories.append({'text': key, 'dentro': []})
+ self.treemodel.clear()
+ for p in self.categories:
+ self.path_iter[p['text']] = \
+ self.treemodel.append(None, [p['text']])
+
+ def move_down_catalog(self, treeview):
+ treestore, coldex = self.treeview.get_selection().get_selected()
+ len_cat = len(self.catalog_history)
+ if self.catalog_history[len_cat - 1]['catalogs'] == []:
+ self.catalog_history.pop()
+ self.treecol.set_title(self.catalog_history[len_cat - 1]['title'] \
+ + ' <- ' + treestore.get_value(coldex, 0))
+ self.catalog_history.append(\
+ {'title': treestore.get_value(coldex, 0),
+ 'catalogs': []})
+ self.__switch_catalog_cb(treestore.get_value(coldex, 0))
+
+ def _sort_logfile(self, treemodel, itera, iterb):
+ a = treemodel.get_value(itera, 0)
+ b = treemodel.get_value(iterb, 0)
+ if a == None or b == None:
+ return 0
+ a = a.lower()
+ b = b.lower()
+ if a > b:
+ return 1
+ if a < b:
+ return -1
+ return 0
+
+ def __toggle_cats_cb(self, button):
+ if button.get_active():
+ self.tree_scroller.show_all()
+ self.separa.show()
+ else:
+ self.tree_scroller.hide_all()
+ self.separa.hide()
+
def _create_controls(self):
self._download_content_length = 0
self._download_content_type = None
-
self.progressbox = gtk.HBox(spacing=20)
self.progressbar = gtk.ProgressBar()
self.progressbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)
@@ -408,6 +463,48 @@ class GetIABooksActivity(activity.Activity):
self.msg_label = gtk.Label()
+ self.list_box = gtk.HBox()
+
+ # Catalogs treeview
+ self.treeview = gtk.TreeView()
+ self.treeview.headers_clickble = True
+ self.treeview.hover_expand = True
+ self.treeview.rules_hint = True
+ self.treeview.connect('cursor-changed', self.move_down_catalog)
+ self.treemodel = gtk.TreeStore(gobject.TYPE_STRING)
+ sorter = gtk.TreeModelSort(self.treemodel)
+ sorter.set_sort_column_id(0, gtk.SORT_ASCENDING)
+ sorter.set_sort_func(0, self._sort_logfile)
+ self.treeview.set_model(sorter)
+ renderer = gtk.CellRendererText()
+ renderer.set_property('wrap-mode', gtk.WRAP_WORD)
+ self.treecol = gtk.TreeViewColumn(_('Catalogs'), renderer, text=0)
+ self.treecol.set_min_width(200)
+ self.treecol.set_property('clickable', True)
+ self.treecol.connect('clicked', self.move_up_catalog)
+ self.treeview.append_column(self.treecol)
+ if len(self.catalogs) > 0:
+ self.catalog_history.append({'title': _('Catalogs'),
+ 'catalogs': self.catalogs})
+ self.categories = []
+ self.path_iter = {}
+ for key in self.catalogs.keys():
+ self.categories.append({'text': key, 'dentro': []})
+ self.treemodel.clear()
+ for p in self.categories:
+ self.path_iter[p['text']] = self.treemodel.append(None,
+ [p['text']])
+ self.tree_scroller = gtk.ScrolledWindow(hadjustment=None,
+ vadjustment=None)
+ self.tree_scroller.set_policy(gtk.POLICY_NEVER,
+ gtk.POLICY_AUTOMATIC)
+ self.tree_scroller.add(self.treeview)
+ self.tree_scroller.set_size_request(200, -1)
+ self.list_box.pack_start(self.tree_scroller, expand=False, fill=False)
+ self.separa = gtk.VSeparator()
+ self.list_box.pack_start(self.separa, expand=False, fill=False)
+
+ # books listview
self.listview = ListView(self._lang_code_handler)
self.listview.connect('selection-changed', self.selection_cb)
@@ -419,6 +516,7 @@ class GetIABooksActivity(activity.Activity):
vadjustment.connect('value-changed',
self.__vadjustment_value_changed_cb)
self.list_scroller.add(self.listview)
+ self.list_box.pack_start(self.list_scroller, expand=True, fill=True)
self.scrolled = gtk.ScrolledWindow()
self.scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
@@ -431,8 +529,9 @@ class GetIABooksActivity(activity.Activity):
self.textview.set_left_margin(20)
self.textview.set_right_margin(20)
self.scrolled.add(self.textview)
- self.textview.show()
- self.scrolled.show()
+ self.list_box.show_all()
+ self.separa.hide()
+ self.tree_scroller.hide()
vbox_download = gtk.VBox()
@@ -469,7 +568,7 @@ class GetIABooksActivity(activity.Activity):
vbox = gtk.VBox()
vbox.pack_start(self.msg_label, False, False, 10)
vbox.pack_start(self.progressbox, False, False, 10)
- vbox.pack_start(self.list_scroller, True, True, 0)
+ vbox.pack_start(self.list_box, True, True, 0)
vbox.pack_start(bottom_hbox, False, False, 10)
self.set_canvas(vbox)
self.listview.show()
@@ -681,7 +780,6 @@ class GetIABooksActivity(activity.Activity):
self.queryresults.connect('updated', self.__query_updated_cb)
def __query_updated_cb(self, query, midway):
- logging.debug('__query_updated_cb midway %s', midway)
self.listview.populate(self.queryresults)
if (len(self.queryresults.get_catalog_list()) > 0):
self.show_message(_('New catalog list %s was found') \
@@ -689,10 +787,11 @@ class GetIABooksActivity(activity.Activity):
self.catalogs_updated(query, midway)
elif len(self.queryresults) == 0:
self.show_message(_('Sorry, no books could be found.'))
+ else:
+ self.catalog_history.pop()
if not midway and len(self.queryresults) > 0:
self.hide_message()
query_language = self.get_query_language()
- logging.error('LANGUAGE %s', query_language)
if query_language != 'all' and query_language != 'en':
# the bookserver send english books if there are not books in
# the requested language
@@ -726,15 +825,18 @@ class GetIABooksActivity(activity.Activity):
self.catalogs[catalog_item.get_title().strip()] = catalog_config
if len(self.catalogs) > 0:
- palette = self.bt_catalogs.get_palette()
- for menu_item in palette.menu.get_children():
- palette.menu.remove(menu_item)
+ len_cat = len(self.catalog_history)
+ self.catalog_history[len_cat - 1]['catalogs'] = self.catalogs
+ self.path_iter = {}
+ self.categories = []
for key in self.catalogs.keys():
- menu_item = MenuItem(key)
- menu_item.connect('activate',
- self.__activate_catalog_cb, self.catalogs[key])
- palette.menu.append(menu_item)
- menu_item.show()
+ self.categories.append({'text': key, 'dentro': []})
+ self.treemodel.clear()
+ for p in self.categories:
+ self.path_iter[p['text']] = \
+ self.treemodel.append(None, [p['text']])
+ else:
+ self.catalog_history.pop()
def __source_changed_cb(self, widget):
search_terms = self.get_search_terms()