X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildonize.py;h=6c50017f5e2a80ce673b0bdd192629fbdb1aa04e;hb=15b7c992b85a342c95fc1d0e4312887b8d3a2cf4;hp=84a3de3c8ddea8a608f7d2c9954f3d2e653ed300;hpb=1618fc6973773b03ac5ecbc4a98778fe112f1fa3;p=gc-dialer diff --git a/src/hildonize.py b/src/hildonize.py index 84a3de3..6c50017 100644 --- a/src/hildonize.py +++ b/src/hildonize.py @@ -1,5 +1,11 @@ #!/usr/bin/env python +""" +Open Issues + @bug not all of a message is shown + @bug Buttons are too small +""" + import gobject import gtk @@ -122,6 +128,54 @@ except AttributeError: hildonize_menu = _null_hildonize_menu +def _hildon_set_button_auto_selectable(button): + button.set_theme_size(hildon.HILDON_SIZE_AUTO_HEIGHT) + + +def _null_set_button_auto_selectable(button): + pass + + +try: + hildon.HILDON_SIZE_AUTO_HEIGHT + gtk.Button.set_theme_size + set_button_auto_selectable = _hildon_set_button_auto_selectable +except AttributeError: + set_button_auto_selectable = _null_set_button_auto_selectable + + +def _hildon_set_button_finger_selectable(button): + button.set_theme_size(hildon.HILDON_SIZE_FINGER_HEIGHT) + + +def _null_set_button_finger_selectable(button): + pass + + +try: + hildon.HILDON_SIZE_FINGER_HEIGHT + gtk.Button.set_theme_size + set_button_finger_selectable = _hildon_set_button_finger_selectable +except AttributeError: + set_button_finger_selectable = _null_set_button_finger_selectable + + +def _hildon_set_button_thumb_selectable(button): + button.set_theme_size(hildon.HILDON_SIZE_THUMB_HEIGHT) + + +def _null_set_button_thumb_selectable(button): + pass + + +try: + hildon.HILDON_SIZE_THUMB_HEIGHT + gtk.Button.set_theme_size + set_button_thumb_selectable = _hildon_set_button_thumb_selectable +except AttributeError: + set_button_thumb_selectable = _null_set_button_thumb_selectable + + def _hildon_set_cell_thumb_selectable(renderer): renderer.set_property("scale", 1.5) @@ -136,6 +190,20 @@ else: set_cell_thumb_selectable = _null_set_cell_thumb_selectable +def _hildon_set_pix_cell_thumb_selectable(renderer): + renderer.set_property("stock-size", 48) + + +def _null_set_pix_cell_thumb_selectable(renderer): + pass + + +if IS_HILDON_SUPPORTED: + set_pix_cell_thumb_selectable = _hildon_set_pix_cell_thumb_selectable +else: + set_pix_cell_thumb_selectable = _null_set_pix_cell_thumb_selectable + + def _fremantle_show_information_banner(parent, message): hildon.hildon_banner_show_information(parent, "", message) @@ -356,15 +424,16 @@ def _hildon_request_number(parent, title, range, default): try: dialog.show_all() response = dialog.run() + + if response == gtk.RESPONSE_OK: + return spinner.get_value() + elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: + raise RuntimeError("User cancelled request") + else: + raise RuntimeError("Unrecognized response %r", response) finally: dialog.hide() - - if response == gtk.RESPONSE_OK: - return spinner.get_value() - elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: - raise RuntimeError("User cancelled request") - else: - raise RuntimeError("Unrecognized response %r", response) + dialog.destroy() def _null_request_number(parent, title, range, default): @@ -384,15 +453,16 @@ def _null_request_number(parent, title, range, default): try: dialog.show_all() response = dialog.run() + + if response == gtk.RESPONSE_OK: + return spinner.get_value_as_int() + elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: + raise RuntimeError("User cancelled request") + else: + raise RuntimeError("Unrecognized response %r", response) finally: dialog.hide() - - if response == gtk.RESPONSE_OK: - return spinner.get_value_as_int() - elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: - raise RuntimeError("User cancelled request") - else: - raise RuntimeError("Unrecognized response %r", response) + dialog.destroy() try: @@ -418,22 +488,26 @@ def _hildon_touch_selector(parent, title, items, defaultIndex): try: dialog.show_all() response = dialog.run() + + if response == gtk.RESPONSE_OK: + return selector.get_active(0) + elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: + raise RuntimeError("User cancelled request") + else: + raise RuntimeError("Unrecognized response %r", response) finally: dialog.hide() - - if response == gtk.RESPONSE_OK: - return selector.get_active(0) - elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: - raise RuntimeError("User cancelled request") - else: - raise RuntimeError("Unrecognized response %r", response) + dialog.destroy() -def _on_null_touch_selector_activated(treeView, path, column, dialog): +def _on_null_touch_selector_activated(treeView, path, column, dialog, pathData): dialog.response(gtk.RESPONSE_OK) + pathData[0] = path def _null_touch_selector(parent, title, items, defaultIndex = -1): + parentSize = parent.get_size() + model = gtk.ListStore(gobject.TYPE_STRING) for item in items: model.append((item, )) @@ -441,7 +515,7 @@ def _null_touch_selector(parent, title, items, defaultIndex = -1): cell = gtk.CellRendererText() set_cell_thumb_selectable(cell) column = gtk.TreeViewColumn(title) - column .pack_start(cell, expand=True) + column.pack_start(cell, expand=True) column.add_attribute(cell, "text", 0) treeView = gtk.TreeView() @@ -455,7 +529,6 @@ def _null_touch_selector(parent, title, items, defaultIndex = -1): scrolledWin = gtk.ScrolledWindow() scrolledWin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolledWin.add(treeView) - hildonize_scrollwindow(scrolledWin) dialog = gtk.Dialog( title, @@ -465,25 +538,27 @@ def _null_touch_selector(parent, title, items, defaultIndex = -1): ) dialog.set_default_response(gtk.RESPONSE_CANCEL) dialog.get_child().add(scrolledWin) - parentSize = parent.get_size() dialog.resize(parentSize[0], max(parentSize[1]-100, 100)) - treeView.connect("row-activated", _on_null_touch_selector_activated, dialog) + + scrolledWin = hildonize_scrollwindow(scrolledWin) + pathData = [None] + treeView.connect("row-activated", _on_null_touch_selector_activated, dialog, pathData) try: dialog.show_all() response = dialog.run() + + if response == gtk.RESPONSE_OK: + if pathData[0] is None: + raise RuntimeError("No selection made") + return pathData[0][0] + elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: + raise RuntimeError("User cancelled request") + else: + raise RuntimeError("Unrecognized response %r", response) finally: dialog.hide() - - if response == gtk.RESPONSE_OK: - model, itr = selection.get_selected() - if itr is None: - raise RuntimeError("No selection made") - return model.get_path(itr)[0] - elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: - raise RuntimeError("User cancelled request") - else: - raise RuntimeError("Unrecognized response %r", response) + dialog.destroy() try: @@ -496,7 +571,10 @@ except AttributeError: def _hildon_touch_selector_entry(parent, title, items, defaultItem): # Got a segfault when using append_text_column with TouchSelectorEntry, so using this way - selector = hildon.hildon_touch_selector_entry_new_text() + try: + selector = hildon.TouchSelectorEntry(text=True) + except TypeError: + selector = hildon.hildon_touch_selector_entry_new_text() defaultIndex = -1 for i, item in enumerate(items): selector.append_text(item) @@ -518,30 +596,39 @@ def _hildon_touch_selector_entry(parent, title, items, defaultItem): dialog.hide() if response == gtk.RESPONSE_OK: - selectedIndex = selector.get_active(0) - if 0 < selectedIndex: - return items[selectedIndex] - else: - return selector.get_entry().get_text() + return selector.get_entry().get_text() elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: raise RuntimeError("User cancelled request") else: raise RuntimeError("Unrecognized response %r", response) -def _on_null_touch_selector_entry_entry_activated(entry, dialog, customEntry, result): +def _on_null_touch_selector_entry_entry_changed(entry, result, selection, defaultIndex): + custom = entry.get_text().strip() + if custom: + result[0] = custom + selection.unselect_all() + else: + result[0] = None + selection.select_path((defaultIndex, )) + + +def _on_null_touch_selector_entry_entry_activated(customEntry, dialog, result): dialog.response(gtk.RESPONSE_OK) - result.append(customEntry.get_text()) + result[0] = customEntry.get_text() -def _on_null_touch_selector_entry_tree_activated(treeView, path, column, dialog, selection, result): +def _on_null_touch_selector_entry_tree_activated(treeView, path, column, dialog, result): dialog.response(gtk.RESPONSE_OK) - model, itr = selection.get_selected() + model = treeView.get_model() + itr = model.get_iter(path) if itr is not None: - result.append(model.get_value(itr, 0)) + result[0] = model.get_value(itr, 0) def _null_touch_selector_entry(parent, title, items, defaultItem): + parentSize = parent.get_size() + model = gtk.ListStore(gobject.TYPE_STRING) defaultIndex = -1 for i, item in enumerate(items): @@ -552,7 +639,7 @@ def _null_touch_selector_entry(parent, title, items, defaultItem): cell = gtk.CellRendererText() set_cell_thumb_selectable(cell) column = gtk.TreeViewColumn(title) - column .pack_start(cell, expand=True) + column.pack_start(cell, expand=True) column.add_attribute(cell, "text", 0) treeView = gtk.TreeView() @@ -568,46 +655,55 @@ def _null_touch_selector_entry(parent, title, items, defaultItem): customEntry = gtk.Entry() layout = gtk.VBox() - layout.pack_start(customEntry) + layout.pack_start(customEntry, expand=False) layout.pack_start(scrolledWin) - hildonize_scrollwindow(layout) - dialog = gtk.Dialog( title, parent, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), + (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), ) dialog.set_default_response(gtk.RESPONSE_CANCEL) dialog.get_child().add(layout) - parentSize = parent.get_size() dialog.resize(parentSize[0], max(parentSize[1]-100, 100)) + scrolledWin = hildonize_scrollwindow(scrolledWin) + + result = [None] if 0 < defaultIndex: selection.select_path((defaultIndex, )) + result[0] = defaultItem else: customEntry.set_text(defaultItem) - result = [] - customEntry.connect("activate", _on_null_touch_selector_entry_entry_activated, dialog, customEntry, result) - treeView.connect("row-activated", _on_null_touch_selector_entry_tree_activated, dialog, selection, result) + + customEntry.connect("activate", _on_null_touch_selector_entry_entry_activated, dialog, result) + customEntry.connect("changed", _on_null_touch_selector_entry_entry_changed, result, selection, defaultIndex) + treeView.connect("row-activated", _on_null_touch_selector_entry_tree_activated, dialog, result) try: dialog.show_all() response = dialog.run() - finally: - dialog.hide() - if response == gtk.RESPONSE_OK: - model, itr = selection.get_selected() - if len(result) != 1: - raise RuntimeError("No selection made") + if response == gtk.RESPONSE_OK: + _, itr = selection.get_selected() + if itr is not None: + return model.get_value(itr, 0) + else: + enteredText = customEntry.get_text().strip() + if enteredText: + return enteredText + elif result[0] is not None: + return result[0] + else: + raise RuntimeError("No selection made") + elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: + raise RuntimeError("User cancelled request") else: - return result[0] - elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT: - raise RuntimeError("User cancelled request") - else: - raise RuntimeError("Unrecognized response %r", response) + raise RuntimeError("Unrecognized response %r", response) + finally: + dialog.hide() + dialog.destroy() try: