Minor tweaks
[gc-dialer] / src / hildonize.py
index 74cdb41..6c50017 100644 (file)
@@ -190,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)
 
@@ -508,7 +522,7 @@ def _null_touch_selector(parent, title, items, defaultIndex = -1):
        treeView.set_model(model)
        treeView.append_column(column)
        selection = treeView.get_selection()
-       selection.set_mode(gtk.SELECTION_NONE)
+       selection.set_mode(gtk.SELECTION_SINGLE)
        if 0 < defaultIndex:
                selection.select_path((defaultIndex, ))
 
@@ -589,17 +603,27 @@ def _hildon_touch_selector_entry(parent, title, items, defaultItem):
                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 = 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):
@@ -615,14 +639,14 @@ 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()
        treeView.set_model(model)
        treeView.append_column(column)
        selection = treeView.get_selection()
-       selection.set_mode(gtk.SELECTION_NONE)
+       selection.set_mode(gtk.SELECTION_SINGLE)
 
        scrolledWin = gtk.ScrolledWindow()
        scrolledWin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
@@ -638,7 +662,7 @@ def _null_touch_selector_entry(parent, title, items, defaultItem):
                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)
@@ -646,23 +670,33 @@ def _null_touch_selector_entry(parent, title, items, defaultItem):
 
        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()
 
                if response == gtk.RESPONSE_OK:
-                       if len(result) != 1:
-                               raise RuntimeError("No selection made")
+                       _, itr = selection.get_selected()
+                       if itr is not None:
+                               return model.get_value(itr, 0)
                        else:
-                               return result[0]
+                               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: