X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=ui%2Fhildon_ui.py;h=c21b5a9e3a53a6f74d3b6a03bafbac7e82ea32d2;hb=e159d0094249d43b06a321a83029746a06247750;hp=43d9446b0b95c05f8524d84bcb9ca6909ee7846a;hpb=f7f6ed680538807c31adf2838d3bb6bd8568639d;p=meabook
diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py
index 43d9446..c21b5a9 100644
--- a/ui/hildon_ui.py
+++ b/ui/hildon_ui.py
@@ -6,6 +6,7 @@ import gtk
import hildon
import gobject
from gettext import gettext as _
+from meabook.constants import *
from meabook.ui.ui import MeabookUI
@@ -21,10 +22,47 @@ def create_button(title, value):
def create_menu_button(title):
+ """Create HildonMenu button."""
+
return hildon.Button(gtk.HILDON_SIZE_AUTO, \
hildon.BUTTON_ARRANGEMENT_HORIZONTAL, title)
+def set_selector_content(selector, handler, items=[]):
+ """Updates selector widget content."""
+
+ selector.handler_block(handler) # temporary block handler
+ # setting new content
+ # model: name, internal_name, type
+ model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \
+ gobject.TYPE_STRING)
+ for name, internal_name, item_type in items:
+ model.append((name, internal_name, item_type))
+ if selector.get_num_columns():
+ selector.remove_column(0)
+ selector.append_text_column(model, False)
+ selector.unselect_all(0)
+ selector.handler_unblock(handler) # reconnect callback
+
+
+def set_box_content(box, handler, items=[]):
+ """Updates box widget content."""
+
+ def on_button_click(widget):
+ handler(widget.get_title(), widget.get_data('iname'))
+
+ for child in box.get_children():
+ box.remove(child)
+ for title, value, internal_name, item_type in items:
+ button = create_button(title, value)
+ button.connect('clicked', on_button_click)
+ button.set_data('iname', internal_name)
+ button.set_relief(gtk.RELIEF_NONE)
+ button.show()
+ box.pack_start(button, expand=False)
+
+
+
class HildonMeabook(MeabookUI):
def __init__(self, controller, renderer, config):
MeabookUI.__init__(self, controller, renderer, config)
@@ -32,14 +70,12 @@ class HildonMeabook(MeabookUI):
self.window = hildon.StackableWindow()
self.window.set_title(_('Meabook'))
self.window.connect('destroy', self.exit)
-
# create menu buttons
- self.menu = hildon.AppMenu()
+ menu = hildon.AppMenu()
settings_button = create_menu_button(_('Settings'))
about_button = create_menu_button(_('About'))
import_button = create_menu_button(_('Import'))
search_button = create_menu_button(_('Search'))
-
# create filter widgets and connect signals
self.level1_filter = gtk.RadioButton(None, _('level1'))
self.level2_filter = gtk.RadioButton(self.level1_filter, _('level2'))
@@ -48,20 +84,18 @@ class HildonMeabook(MeabookUI):
self.level3_filter]:
filter_widget.set_mode(False)
filter_widget.connect('toggled', self.apply_filter_cb)
-
# create items widgets
self.selector = hildon.TouchSelector()
self.box_container = hildon.PannableArea()
self.box = gtk.VBox()
-
# create search widgets
widgets_box = gtk.VBox()
self.search_widgets_box = gtk.HBox()
- self.search_entry = hildon.Entry(gtk.HILDON_SIZE_AUTO)
+ self.search_entry = hildon.Entry(gtk.HILDON_SIZE_AUTO | \
+ gtk.HILDON_SIZE_FINGER_HEIGHT)
clear_search_entry_container = gtk.EventBox()
clear_search_entry_image = gtk.image_new_from_icon_name( \
'general_delete', gtk.HILDON_SIZE_FINGER_HEIGHT)
-
# connect signals
settings_button.connect('clicked', self.show_settings_dialog_cb)
about_button.connect('clicked', self.show_about_dialog_cb)
@@ -71,7 +105,6 @@ class HildonMeabook(MeabookUI):
self.search_entry.connect('key-release-event', self.search_item_cb)
clear_search_entry_container.connect('button-press-event', \
self.clear_search_entry_cb)
-
# packing widgets
# packing search widgets
clear_search_entry_container.add(clear_search_entry_image)
@@ -85,15 +118,15 @@ class HildonMeabook(MeabookUI):
widgets_box.pack_end(self.search_widgets_box, expand=False)
self.window.add(widgets_box)
# packing menu widgets
- self.menu.add_filter(self.level1_filter)
- self.menu.add_filter(self.level2_filter)
- self.menu.add_filter(self.level3_filter)
- self.menu.append(settings_button)
- self.menu.append(import_button)
- self.menu.append(search_button)
- self.menu.append(about_button)
- self.menu.show_all()
- self.window.set_app_menu(self.menu)
+ menu.add_filter(self.level1_filter)
+ menu.add_filter(self.level2_filter)
+ menu.add_filter(self.level3_filter)
+ menu.append(settings_button)
+ menu.append(import_button)
+ menu.append(search_button)
+ menu.append(about_button)
+ menu.show_all()
+ self.window.set_app_menu(menu)
self.window.show_all()
def _show_ui(self, view='selector', show_search=False):
@@ -105,6 +138,9 @@ class HildonMeabook(MeabookUI):
elif view == 'box':
self.selector.hide()
self.box_container.show_all()
+ else:
+ self.selector.hide()
+ self.box_container.hide()
if show_search:
self.search_entry.set_text('')
self.search_entry.set_placeholder(_('Enter search text here'))
@@ -120,39 +156,6 @@ class HildonMeabook(MeabookUI):
if title is not None:
self.window.set_title(title)
- def _set_selector_content(self, selector, handler, items=[]):
- """Updates selector widget content."""
-
- selector.handler_block(handler) # temporary block handler
- # setting new content
- # model: name, internal_name, type
- model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \
- gobject.TYPE_STRING)
- for name, internal_name, item_type in items:
- model.append((name, internal_name, item_type))
- if selector.get_num_columns():
- selector.remove_column(0)
- selector.append_text_column(model, False)
- selector.unselect_all(0)
- selector.handler_unblock(handler) # reconnect callback
-
- def _set_box_content(self, box, items):
- """Updates box widget content."""
-
- def on_button_click(widget):
- self._show_item_dialog(widget.get_title(), \
- widget.get_data('internal_name'))
-
- for child in box.get_children():
- box.remove(child)
- for title, value, internal_name, item_type in items:
- button = create_button(title, value)
- button.connect('clicked', on_button_click)
- button.set_data('internal_name', internal_name)
- button.set_relief(gtk.RELIEF_NONE)
- button.show()
- box.pack_start(button, expand=False)
-
def _show_items_dialog(self, title, items, touch_selector_view=True):
"""Creates dialog with items. If 'touch_selector_view' is True,
then items will be shown in TouchSelector widget, else each item
@@ -163,12 +166,12 @@ class HildonMeabook(MeabookUI):
if touch_selector_view:
container = hildon.TouchSelector()
handler = container.connect('changed', self.select_item_cb)
- self._set_selector_content(container, handler, items)
+ set_selector_content(container, handler, items)
else:
widgets_box = gtk.VBox()
container = hildon.PannableArea()
container.add_with_viewport(items_box)
- self._set_box_content(widgets_box, items)
+ set_box_content(widgets_box, self._show_item_dialog, items)
window.add(container)
window.show_all()
@@ -246,27 +249,7 @@ class HildonMeabook(MeabookUI):
dialog.destroy()
def create_about_dialog(self):
- from meabook.version import version
- dialog = hildon.Dialog()
- dialog.set_title(_('About'))
- info_label = gtk.Label()
- info_label.set_use_markup(True)
- info_label.set_justify(gtk.JUSTIFY_CENTER)
- info_label.set_markup("" \
- "Meabook - " \
- "Enterprise address book\nVersion %s\n\n\nDevelopers:\nTanya Makova | tanyshk@gmail.com\nMax Usachev | maxusachev@gmail.com" \
- "\n" % version)
-
- dialog.vbox.add(info_label)
- dialog.vbox.show_all()
- dialog.run()
- dialog.destroy()
+ AboutDialog()
def create_import_dialog(self):
chooser = gobject.new(hildon.FileChooserDialog, \
@@ -279,13 +262,12 @@ class HildonMeabook(MeabookUI):
def create_progress_dialog(self, title=None):
self._update_title(title)
- self.selector.hide()
+ self._show_ui('hide', False)
hildon.hildon_gtk_window_set_progress_indicator(self.window, 1)
self._unfreeze_ui()
def create_configuration_dialog(self, controller, config):
- dialog = ConfigurationDialog(controller, config)
- dialog.run()
+ ConfigurationDialog(controller, config).run()
def create_search_dialog(self, controller):
dialog = SearchDialog(controller)
@@ -304,8 +286,8 @@ class HildonMeabook(MeabookUI):
"""Shows Import Dialog."""
if self.controller.show_import_dialog():
+ self._show_ui('selector')
self.apply_filter_cb(self.level1_filter)
- self.selector.show_all()
hildon.hildon_gtk_window_set_progress_indicator(self.window, 0)
def show_settings_dialog_cb(self, widget):
@@ -315,7 +297,7 @@ class HildonMeabook(MeabookUI):
def show_search_dialog_cb(self, widget):
"""Show Search dialog."""
-
+
self.controller.show_search_dialog()
def apply_filter_cb(self, widget):
@@ -328,17 +310,15 @@ class HildonMeabook(MeabookUI):
if widget == self.level1_filter:
self._show_ui()
- self._set_selector_content(self.selector, self.handler, \
+ set_selector_content(self.selector, self.handler, \
self.controller.get_all_folders())
elif widget == self.level2_filter:
self._show_ui()
- self._set_selector_content(self.selector, self.handler, \
+ set_selector_content(self.selector, self.handler, \
self.controller.get_all_subfolders())
else:
- self._show_ui('box', True)
+ self._show_ui(view='box', show_search=True)
-
-
def select_item_cb(self, widget, column):
"""
Emits when changes selector content.
@@ -352,12 +332,12 @@ class HildonMeabook(MeabookUI):
internal_name))
else:
self._show_item_dialog(item_name, internal_name)
-
+
def search_item_cb(self, widget, event):
"""Search items from database."""
- self._set_box_content(self.box, \
- self.controller.get_all_files_by_pattern(widget.get_text(), \
+ set_box_content(self.box, self._show_item_dialog, \
+ self.controller.get_files_by_pattern(widget.get_text(), \
separated=True))
widget.grab_focus()
@@ -365,9 +345,39 @@ class HildonMeabook(MeabookUI):
"""Clears search entry content."""
self.search_entry.set_text('')
+ set_box_content(self.box, None)
+
+
+
+class AboutDialog(hildon.Dialog):
+ """Hildon About Dialog."""
+
+ def __init__(self):
+ from meabook.version import version
+ hildon.Dialog.__init__(self)
+ self.set_title(_('About'))
+ info_label = gtk.Label()
+ info_label.set_use_markup(True)
+ info_label.set_justify(gtk.JUSTIFY_CENTER)
+ info_label.set_markup("" \
+ "Meabook - " \
+ "Enterprise address book\nVersion %s\n\n\nDevelopers:\nTanya Makova | tanyshk@gmail.com\nMax Usachev | maxusachev@gmail.com" \
+ "\n" % version)
+ self.vbox.add(info_label)
+ self.vbox.show_all()
+ self.run()
+ self.destroy()
+
+
class SearchDialog:
- """Search dialog"""
+ """Hildon Search Dialog."""
def __init__(self, controller):
self.controller = controller
@@ -376,19 +386,20 @@ class SearchDialog:
dialog = hildon.Dialog()
dialog.set_title(_('Search'))
- select_keys = hildon.TouchSelector(text=True)
+ selector = hildon.TouchSelector(text=True)
#for item in ('cn', 'mobile'):
for item in self.controller.get_fields():
- select_keys.append_text(item)
- select_keys.set_active(0, 0)
+ selector.append_text(_(item))
+ selector.set_active(0, 0)
- button = hildon.PickerButton(gtk.HILDON_SIZE_AUTO | gtk.HILDON_SIZE_FINGER_HEIGHT,
- hildon.BUTTON_ARRANGEMENT_VERTICAL)
- button.set_title("Search key")
- button.set_selector(select_keys)
+ button = hildon.PickerButton(gtk.HILDON_SIZE_AUTO | \
+ gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+ button.set_alignment(0, 0, 0, 0)
+ button.set_title(_("Search criterion"))
+ button.set_selector(selector)
entry = hildon.Entry(gtk.HILDON_SIZE_AUTO | gtk.HILDON_SIZE_FINGER_HEIGHT)
- entry.set_placeholder("")
+ entry.set_placeholder(_("Enter search text here"))
dialog.vbox.pack_start(button, expand=False)
dialog.vbox.pack_end(entry, expand=False)
@@ -396,16 +407,17 @@ class SearchDialog:
dialog.add_button(_('Search'), gtk.RESPONSE_OK)
response = dialog.run()
if response == gtk.RESPONSE_OK:
- ret = (button.get_value(), entry.get_text())
+ result = (self.controller.get_localized_fields()[ \
+ button.get_value().decode('utf-8')], entry.get_text())
dialog.destroy()
- return ret
- else:
- dialog.destroy()
- return False
+ return result
+ dialog.destroy()
+ return (False, None)
+
class ConfigurationDialog:
- """Configuration dialog"""
+ """Hildon Configuration Dialog."""
def __init__(self, controller, config):
self.config = config
@@ -509,8 +521,7 @@ class ConfigurationDialog:
dialog.vbox.show_all()
response = dialog.run()
if response == gtk.RESPONSE_OK:
- fields_dict = dict([(_(field).decode('utf-8'), field) for field \
- in self.controller.get_fields()])
+ fields_dict = self.controller.get_localized_fields()
new_ordered_fields = [fields_dict[button.get_value().decode( \
'utf-8')] for button in vbox.get_children()]
self.config.set_order(new_ordered_fields)