8 class _NullHildonModule(object):
13 import hildon as _hildon
14 hildon = _hildon # Dumb but gets around pyflakiness
15 except (ImportError, OSError):
16 hildon = _NullHildonModule
19 IS_HILDON_SUPPORTED = hildon is not _NullHildonModule
22 class _NullHildonProgram(object):
24 def add_window(self, window):
28 def _hildon_get_app_class():
32 def _null_get_app_class():
33 return _NullHildonProgram
36 if IS_HILDON_SUPPORTED:
37 get_app_class = _hildon_get_app_class
39 get_app_class = _null_get_app_class
42 def _hildon_set_application_title(window, title):
46 def _null_set_application_title(window, title):
47 window.set_title(title)
50 if IS_HILDON_SUPPORTED:
51 set_application_title = _hildon_set_application_title
53 set_application_title = _null_set_application_title
56 def _fremantle_hildonize_window(app, window):
58 newWindow = hildon.StackableWindow()
59 oldWindow.get_child().reparent(newWindow)
60 app.add_window(newWindow)
64 def _hildon_hildonize_window(app, window):
66 newWindow = hildon.Window()
67 oldWindow.get_child().reparent(newWindow)
68 app.add_window(newWindow)
72 def _null_hildonize_window(app, window):
77 hildon.StackableWindow
78 hildonize_window = _fremantle_hildonize_window
79 except AttributeError:
82 hildonize_window = _hildon_hildonize_window
83 except AttributeError:
84 hildonize_window = _null_hildonize_window
87 def _fremantle_hildonize_menu(window, gtkMenu, buttons):
88 appMenu = hildon.AppMenu()
89 for button in buttons:
90 appMenu.append(button)
91 window.set_app_menu(appMenu)
92 gtkMenu.get_parent().remove(gtkMenu)
96 def _hildon_hildonize_menu(window, gtkMenu, ignoredButtons):
97 hildonMenu = gtk.Menu()
98 for child in gtkMenu.get_children():
99 child.reparent(hildonMenu)
100 window.set_menu(hildonMenu)
105 def _null_hildonize_menu(window, gtkMenu, ignoredButtons):
111 GTK_MENU_USED = False
112 hildonize_menu = _fremantle_hildonize_menu
113 except AttributeError:
115 if IS_HILDON_SUPPORTED:
116 hildonize_menu = _hildon_hildonize_menu
118 hildonize_menu = _null_hildonize_menu
121 def _hildon_set_cell_thumb_selectable(renderer):
122 renderer.set_property("scale", 1.5)
125 def _null_set_cell_thumb_selectable(renderer):
129 if IS_HILDON_SUPPORTED:
130 set_cell_thumb_selectable = _hildon_set_cell_thumb_selectable
132 set_cell_thumb_selectable = _null_set_cell_thumb_selectable
135 def _hildon_hildonize_text_entry(textEntry):
136 textEntry.set_property('hildon-input-mode', 7)
139 def _null_hildonize_text_entry(textEntry):
143 if IS_HILDON_SUPPORTED:
144 hildonize_text_entry = _hildon_hildonize_text_entry
146 hildonize_text_entry = _null_hildonize_text_entry
149 def _hildon_mark_window_rotatable(window):
150 # gtk documentation is unclear whether this does a "=" or a "|="
151 window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
154 def _null_mark_window_rotatable(window):
159 hildon.HILDON_PORTRAIT_MODE_SUPPORT
160 mark_window_rotatable = _hildon_mark_window_rotatable
161 except AttributeError:
162 mark_window_rotatable = _null_mark_window_rotatable
165 def _hildon_window_to_portrait(window):
166 # gtk documentation is unclear whether this does a "=" or a "|="
167 window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
170 def _hildon_window_to_landscape(window):
171 # gtk documentation is unclear whether this does a "=" or a "&= ~"
172 window.unset_flags(hildon.HILDON_PORTRAIT_MODE_REQUEST)
175 def _null_window_to_portrait(window):
179 def _null_window_to_landscape(window):
184 hildon.HILDON_PORTRAIT_MODE_SUPPORT
185 hildon.HILDON_PORTRAIT_MODE_REQUEST
187 window_to_portrait = _hildon_window_to_portrait
188 window_to_landscape = _hildon_window_to_landscape
189 except AttributeError:
190 window_to_portrait = _null_window_to_portrait
191 window_to_landscape = _null_window_to_landscape
194 def get_device_orientation():
195 bus = dbus.SystemBus()
197 rawMceRequest = bus.get_object("com.nokia.mce", "/com/nokia/mce/request")
198 mceRequest = dbus.Interface(rawMceRequest, dbus_interface="com.nokia.mce.request")
199 orientation, standState, faceState, xAxis, yAxis, zAxis = mceRequest.get_device_orientation()
200 except dbus.exception.DBusException:
201 # catching for documentation purposes that when a system doesn't
202 # support this, this is what to expect
205 if orientation == "":
206 return gtk.ORIENTATION_HORIZONTAL
207 elif orientation == "":
208 return gtk.ORIENTATION_VERTICAL
210 raise RuntimeError("Unknown orientation: %s" % orientation)
213 def _hildon_hildonize_password_entry(textEntry):
214 textEntry.set_property('hildon-input-mode', 7 | (1 << 29))
217 def _null_hildonize_password_entry(textEntry):
221 if IS_HILDON_SUPPORTED:
222 hildonize_password_entry = _hildon_hildonize_password_entry
224 hildonize_password_entry = _null_hildonize_password_entry
227 def _hildon_hildonize_combo_entry(comboEntry):
228 comboEntry.set_property('hildon-input-mode', 1 << 4)
231 def _null_hildonize_combo_entry(textEntry):
235 if IS_HILDON_SUPPORTED:
236 hildonize_combo_entry = _hildon_hildonize_combo_entry
238 hildonize_combo_entry = _null_hildonize_combo_entry
241 def _fremantle_hildonize_scrollwindow(scrolledWindow):
242 pannableWindow = hildon.PannableArea()
244 child = scrolledWindow.get_child()
245 scrolledWindow.remove(child)
246 pannableWindow.add(child)
248 parent = scrolledWindow.get_parent()
249 parent.remove(scrolledWindow)
250 parent.add(pannableWindow)
252 return pannableWindow
255 def _hildon_hildonize_scrollwindow(scrolledWindow):
256 hildon.hildon_helper_set_thumb_scrollbar(scrolledWindow, True)
257 return scrolledWindow
260 def _null_hildonize_scrollwindow(scrolledWindow):
261 return scrolledWindow
266 hildonize_scrollwindow = _fremantle_hildonize_scrollwindow
267 hildonize_scrollwindow_with_viewport = _hildon_hildonize_scrollwindow
268 except AttributeError:
270 hildon.hildon_helper_hildonize_scrollwindow
271 hildonize_scrollwindow = _hildon_hildonize_scrollwindow
272 hildonize_scrollwindow_with_viewport = _hildon_hildonize_scrollwindow
273 except AttributeError:
274 hildonize_scrollwindow = _null_hildonize_scrollwindow
275 hildonize_scrollwindow_with_viewport = _null_hildonize_scrollwindow
278 def _hildon_request_number(parent, title, range, default):
279 spinner = hildon.NumberEditor(*range)
280 spinner.set_value(default)
285 gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
286 (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
288 dialog.set_default_response(gtk.RESPONSE_CANCEL)
289 dialog.get_child().add(spinner)
293 response = dialog.run()
297 if response == gtk.RESPONSE_OK:
298 return spinner.get_value()
299 elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
300 raise RuntimeError("User cancelled request")
302 raise RuntimeError("Unrecognized response %r", response)
305 def _null_request_number(parent, title, range, default):
306 adjustment = gtk.Adjustment(default, range[0], range[1], 1, 5, 0)
307 spinner = gtk.SpinButton(adjustment, 0, 0)
308 spinner.set_wrap(False)
313 gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
314 (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
316 dialog.set_default_response(gtk.RESPONSE_CANCEL)
317 dialog.get_child().add(spinner)
321 response = dialog.run()
325 if response == gtk.RESPONSE_OK:
326 return spinner.get_value_as_int()
327 elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
328 raise RuntimeError("User cancelled request")
330 raise RuntimeError("Unrecognized response %r", response)
334 hildon.NumberEditor # TODO deprecated in fremantle
335 request_number = _hildon_request_number
336 except AttributeError:
337 request_number = _null_request_number