From aed695e1181a8152fb3c4396dbac1f5969bdb6ba Mon Sep 17 00:00:00 2001 From: epage Date: Wed, 26 Aug 2009 02:25:00 +0000 Subject: [PATCH] Refactored out hildonization in hopes this will clean things up and make future hildonization easier git-svn-id: file:///svnroot/gc-dialer/trunk@418 c39d3808-3fe2-4d86-a59f-b7f623ee9f21 --- src/dc_glade.py | 62 +++++++++-------------- src/gc_views.py | 7 +-- src/gv_backend.py | 15 ------ src/hildonize.py | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 168 insertions(+), 58 deletions(-) create mode 100644 src/hildonize.py diff --git a/src/dc_glade.py b/src/dc_glade.py index 6ffb676..042671c 100755 --- a/src/dc_glade.py +++ b/src/dc_glade.py @@ -34,12 +34,8 @@ import warnings import gtk import gtk.glade -try: - import hildon -except ImportError: - hildon = None - import constants +import hildonize import gtk_toolbox @@ -111,47 +107,33 @@ class Dialcentral(object): self._errorDisplay = gtk_toolbox.ErrorDisplay(self._widgetTree) self._credentialsDialog = gtk_toolbox.LoginWindow(self._widgetTree) - self._app = None self._isFullScreen = False - if hildon is not None: - self._app = hildon.Program() - oldWindow = self._window - self._window = hildon.Window() - oldWindow.get_child().reparent(self._window) - self._app.add_window(self._window) + self._app = hildonize.get_app_class()() + self._window = hildonize.hildonize_window(self._app, self._window) + hildonize.hildonize_text_entry(self._widgetTree.get_widget("usernameentry")) + hildonize.hildonize_password_entry(self._widgetTree.get_widget("passwordentry")) + hildonize.hildonize_combo_entry(self._widgetTree.get_widget("callbackcombo").get_child()) + + for scrollingWidget in ( + 'recent_scrolledwindow', + 'message_scrolledwindow', + 'contacts_scrolledwindow', + "phoneSelectionMessage_scrolledwindow", + "phonetypes_scrolledwindow", + "smsMessage_scrolledwindow", + "smsMessage_scrolledEntry", + ): + hildonize.set_thumb_scrollbar(self._widgetTree.get_widget(scrollingWidget)) - try: - self._widgetTree.get_widget("usernameentry").set_property('hildon-input-mode', 7) - self._widgetTree.get_widget("passwordentry").set_property('hildon-input-mode', 7|(1 << 29)) - self._widgetTree.get_widget("callbackcombo").get_child().set_property('hildon-input-mode', (1 << 4)) - except TypeError, e: - warnings.warn(e.message) - for scrollingWidget in ( - 'recent_scrolledwindow', - 'message_scrolledwindow', - 'contacts_scrolledwindow', - "phoneSelectionMessage_scrolledwindow", - "phonetypes_scrolledwindow", - "smsMessage_scrolledwindow", - "smsMessage_scrolledEntry", - ): - hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget(scrollingWidget), True) - - gtkMenu = self._widgetTree.get_widget("dialpad_menubar") - menu = gtk.Menu() - for child in gtkMenu.get_children(): - child.reparent(menu) - self._window.set_menu(menu) - gtkMenu.destroy() + hildonize.hildonize_menu(self._window, self._widgetTree.get_widget("dialpad_menubar")) + if hildonize.IS_HILDON: self._window.connect("key-press-event", self._on_key_press) self._window.connect("window-state-event", self._on_window_state_change) else: pass # warnings.warn("No Hildon", UserWarning, 2) - # If under hildon, rely on the application name being shown - if hildon is None: - self._window.set_title("%s" % constants.__pretty_app_name__) + hildonize.set_application_title(self._window, "%s" % constants.__pretty_app_name__) callbackMapping = { "on_dialpad_quit": self._on_close, @@ -218,7 +200,7 @@ class Dialcentral(object): with gtk_toolbox.gtk_lock(): self._errorDisplay.push_exception() alarm_handler = None - if hildon is not None: + if hildonize.IS_HILDON: import led_handler self._ledHandler = led_handler.LedHandler() @@ -804,7 +786,7 @@ def run_dialpad(): #with gtk_toolbox.flock(_lock_file, 0): gtk.gdk.threads_init() - if hildon is not None: + if hildonize.IS_HILDON: gtk.set_application_name(constants.__pretty_app_name__) handle = Dialcentral() gtk.main() diff --git a/src/gc_views.py b/src/gc_views.py index 9162191..ba3b8c8 100644 --- a/src/gc_views.py +++ b/src/gc_views.py @@ -29,6 +29,7 @@ import pango import gtk import gtk_toolbox +import hildonize import null_backend @@ -810,7 +811,7 @@ class RecentCallsView(object): textrenderer = gtk.CellRendererText() textrenderer.set_property("yalign", 0) - textrenderer.set_property("scale", 1.5) + hildonize.set_cell_thumb_selectable(textrenderer) self._fromColumn = gtk.TreeViewColumn("From") self._fromColumn.pack_start(textrenderer, expand=True) self._fromColumn.add_attribute(textrenderer, "text", self.FROM_IDX) @@ -960,7 +961,7 @@ class MessagesView(object): self._messageRenderer = gtk.CellRendererText() self._messageRenderer.set_property("yalign", 0) - self._messageRenderer.set_property("scale", 1.5) + hildonize.set_cell_thumb_selectable(self._messageRenderer) self._messageRenderer.set_property("wrap-mode", pango.WRAP_WORD) self._messageRenderer.set_property("wrap-width", 500) self._messageColumn = gtk.TreeViewColumn("Messages") @@ -1110,7 +1111,7 @@ class ContactsView(object): self._contactColumn.pack_start(textrenderer, expand=False) self._contactColumn.add_attribute(textrenderer, 'text', 0) textrenderer = gtk.CellRendererText() - textrenderer.set_property("scale", 1.5) + hildonize.set_cell_thumb_selectable(textrenderer) self._contactColumn.pack_start(textrenderer, expand=True) self._contactColumn.add_attribute(textrenderer, 'text', 1) textrenderer = gtk.CellRendererText() diff --git a/src/gv_backend.py b/src/gv_backend.py index 7b97a87..29021c2 100644 --- a/src/gv_backend.py +++ b/src/gv_backend.py @@ -98,19 +98,6 @@ def itergroup(iterator, count, padValue = None): return itertools.izip(*nIterators) -def abbrev_relative_date(date): - """ - >>> abbrev_relative_date("42 hours ago") - '42 h' - >>> abbrev_relative_date("2 days ago") - '2 d' - >>> abbrev_relative_date("4 weeks ago") - '4 w' - """ - parts = date.split(" ") - return "%s %s" % (parts[0], parts[1][0]) - - class GVDialer(object): """ This class encapsulates all of the knowledge necessary to interace with the grandcentral servers @@ -334,7 +321,6 @@ class GVDialer(object): ] sortedRecent.sort(reverse = True) for exactDate, name, number, relativeDate, action in sortedRecent: - relativeDate = abbrev_relative_date(relativeDate) yield name, number, relativeDate, action def get_addressbooks(self): @@ -431,7 +417,6 @@ class GVDialer(object): sortedMessages = list(allMessages) sortedMessages.sort(reverse=True) for exactDate, header, number, relativeDate, message in sortedMessages: - relativeDate = abbrev_relative_date(relativeDate) yield header, number, relativeDate, message def _grab_json(self, flatXml): diff --git a/src/hildonize.py b/src/hildonize.py new file mode 100644 index 0000000..d64b1ae --- /dev/null +++ b/src/hildonize.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python + + +import gtk + + +class FakeHildonModule(object): + pass + + +try: + import hildon +except ImportError: + hildon = FakeHildonModule + + +IS_HILDON = hildon is not FakeHildonModule + + +class FakeHildonProgram(object): + + pass + + +if IS_HILDON: + def get_app_class(): + return hildon.Program +else: + def get_app_class(): + return FakeHildonProgram + + +if IS_HILDON: + def set_application_title(window, title): + pass +else: + def set_application_title(window, title): + window.set_title(title) + + +if IS_HILDON: + def hildonize_window(app, window): + oldWindow = window + newWindow = hildon.Window() + oldWindow.get_child().reparent(newWindow) + app.add_window(newWindow) + return newWindow +else: + def hildonize_window(app, window): + return window + + +if IS_HILDON: + def hildonize_menu(window, gtkMenu): + hildonMenu = gtk.Menu() + for child in gtkMenu.get_children(): + child.reparent(hildonMenu) + window.set_menu(hildonMenu) + gtkMenu.destroy() + return hildonMenu +else: + def hildonize_menu(window, gtkMenu): + return gtkMenu + + +if IS_HILDON: + def set_cell_thumb_selectable(renderer): + renderer.set_property(scale=1.5) +else: + def set_cell_thumb_selectable(renderer): + pass + + +if IS_HILDON: + def hildonize_text_entry(textEntry): + textEntry.set_property('hildon-input-mode', 7) +else: + def hildonize_text_entry(textEntry): + pass + + +if IS_HILDON: + def hildonize_password_entry(textEntry): + textEntry.set_property('hildon-input-mode', 7 | (1 << 29)) +else: + def hildonize_password_entry(textEntry): + pass + + +if IS_HILDON: + def hildonize_combo_entry(comboEntry): + comboEntry.set_property('hildon-input-mode', 1 << 4) +else: + def hildonize_combo_entry(textEntry): + pass + + +if IS_HILDON: + def set_thumb_scrollbar(scrolledWindow): + hildon.hildon_helper_set_thumb_scrollbar(scrolledWindow, True) +else: + def set_thumb_scrollbar(scrolledWindow): + pass + + +class WidgetSwapper(object): + + def __init__(self, parentWidget, newWidget = None): + self._parentWidget = parentWidget + self._oldWidget = parentWidget.get_child() + + self._activeWidget = self._oldWidget + self._widget = newWidget if newWidget is not None else self._oldWidget + self._isEnabled = False + + def enable(self): + assert not self._isEnabled, "Internal Error" + self._parentWidget.remove(self._oldWidget) + self._parentWidget.add(self._widget) + self._activeWidget = self.widget + + def disable(self): + assert self._isEnabled, "Internal Error" + self._parentWidget.remove(self._widget) + self._parentWidget.add(self._oldWidget) + self._activeWidget = self._oldWidget + + @property + def activeWidget(self): + return self._activeWidget + + @property + def widget(self): + return self._widget + + +if IS_HILDON: + def create_number_swapper(parentWidget): + return WidgetSwapper(parentWidget, hildon.NumberEditor()) +else: + def create_number_swapper(parentWidget): + return WidgetSwapper(parentWidget) -- 1.7.9.5