Refactored out hildonization in hopes this will clean things up and make future hildo...
authorepage <eopage@byu.net>
Wed, 26 Aug 2009 02:25:00 +0000 (02:25 +0000)
committerepage <eopage@byu.net>
Wed, 26 Aug 2009 02:25:00 +0000 (02:25 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@418 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/gc_views.py
src/gv_backend.py
src/hildonize.py [new file with mode: 0644]

index 6ffb676..042671c 100755 (executable)
@@ -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()
index 9162191..ba3b8c8 100644 (file)
@@ -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()
index 7b97a87..29021c2 100644 (file)
@@ -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 (file)
index 0000000..d64b1ae
--- /dev/null
@@ -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)