import gtk
import hildon
import gettext
+from meabook.config import Config
from meabook.database.SQLite import SQLite
_ = gettext.gettext
+
+
+def create_button(title, value):
+ """Create HildonButton."""
+
+ button = hildon.Button(gtk.HILDON_SIZE_AUTO | \
+ gtk.HILDON_SIZE_FINGER_HEIGHT, \
+ hildon.BUTTON_ARRANGEMENT_VERTICAL, title, value)
+ button.set_style(hildon.BUTTON_STYLE_PICKER)
+ button.set_alignment(0, 0, 0, 0)
+ return button
+
+
class HildonMeabook():
def __init__(self, basedir):
self.database = SQLite(basedir)
+ self.config = Config(basedir, self.database)
self.window = hildon.StackableWindow()
self.window.set_title(_('Meabook'))
self.window.connect('destroy', self.exit)
gtk.main_quit()
def show_settings_dialog(self, widget):
- print 'settings'
+ """Shows Config dialog."""
+
+ dialog = ConfigurationDialog(self.database, self.config)
+ dialog.run()
def show_about_dialog(self, widget):
"""Shows About dialog."""
elif widget == self.level2_filter:
self.callback_id = self.selector.connect('changed', \
self.show_lowlevel_dialog)
+ else:
+ self.callback_id = self.selector.connect('changed', \
+ self.show_item_dialog)
def _create_items_dialog(self, title):
"""Creates dialog for showing items."""
selected_item = widget.get_current_text()
window, selector = self._create_items_dialog(selected_item)
- selector.connect('changed', self.show_item_info)
+ selector.connect('changed', self.show_item_dialog)
for item in self.database.get_lowlevel_entries():
selector.append_text(item)
window.show_all()
- def show_item_info(self, widget, column):
+ def show_item_dialog(self, widget, column):
"""Shows detailed item information."""
- def create_button(title, value):
- """Create HildonButton."""
-
- button = hildon.Button(gtk.HILDON_SIZE_AUTO | \
- gtk.HILDON_SIZE_FINGER_HEIGHT, \
- hildon.BUTTON_ARRANGEMENT_VERTICAL, title, value)
- button.set_style(hildon.BUTTON_STYLE_PICKER)
- button.set_alignment(0, 0, 0, 0)
- return button
-
selected_item = widget.get_current_text()
entry = self.database.get_entry(selected_item)
window = hildon.StackableWindow()
pannable_area.add_with_viewport(vbox)
window.add(pannable_area)
window.show_all()
+
+
+
+
+class ConfigurationDialog:
+ """Configuration dialog"""
+
+ def __init__(self, database, config):
+ self.config = config
+ self.database = database
+ self.window = hildon.StackableWindow()
+ self.window.set_title(_('Configuration'))
+
+ # create menu
+ menu = hildon.AppMenu()
+ self.button_order = gtk.RadioButton(None, _('Order'))
+ self.button_order.set_mode(False)
+ self.button_order.connect('clicked', self.show_order_settings, \
+ self.database.get_fields())
+ self.button_items = gtk.RadioButton(self.button_order, _('Items'))
+ self.button_items.set_mode(False)
+ self.button_items.connect('clicked', self.show_items_settings, \
+ self.database.get_fields())
+ menu.add_filter(self.button_items)
+ menu.add_filter(self.button_order)
+ menu.show_all()
+
+ # create other widgets
+ self.window.set_app_menu(menu)
+ self.selector = hildon.TouchSelector(text=True)
+ self.pannable_area = hildon.PannableArea()
+ vbox = gtk.VBox()
+ vbox.pack_start(self.selector)
+ vbox.pack_start(self.pannable_area)
+ self.window.add(vbox)
+
+ def show_items_settings(self, widget, items):
+ """Shows dialog for selecting necessary items."""
+
+ self.pannable_area.hide()
+
+ # fill items list
+ for item in items:
+ self.selector.append_text(_(item))
+
+ self.selector.set_column_selection_mode( \
+ hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE)
+ self.selector.unselect_all(0)
+
+ # mark necessary items
+ items_to_select = self.config.get_fields()
+ model = self.selector.get_model(0)
+ for index, item in enumerate(items_to_select):
+ self.selector.select_iter(0, model.get_iter(index), False)
+
+ self.selector.show()
+
+ def show_order_settings(self, widget, items):
+ """Shows dialog for selecting items order."""
+
+ self.selector.hide()
+ vbox = gtk.VBox()
+ for item in items:
+ button = create_button(item, '')
+ button.set_style(hildon.BUTTON_STYLE_NORMAL)
+ button.set_alignment(0, 0.5, 0, 0)
+ vbox.pack_start(button)
+ self.pannable_area.add_with_viewport(vbox)
+ self.pannable_area.show_all()
+
+ def run(self):
+ """Runs dialog."""
+
+ # activate first tab
+ # FIXME: read from config
+ self.window.show_all()