For notification time, switching from number editor to touch selector or equivelant
authorepage <eopage@byu.net>
Tue, 22 Sep 2009 03:08:34 +0000 (03:08 +0000)
committerepage <eopage@byu.net>
Tue, 22 Sep 2009 03:08:34 +0000 (03:08 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@458 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/gv_views.py
src/hildonize.py

index 5ee2033..f03da7c 100644 (file)
@@ -18,6 +18,7 @@ You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
+@todo Add CTRL-V support to Dialpad
 @todo Touch selector for notification time
 @todo Test if hildonize should do stackables by default
 @todo Alternate UI for dialogs
@@ -649,7 +650,7 @@ class AccountInfo(object):
                        self._smsCheckbox.set_active(self._notifyOnSms)
 
                        self._onNotifyToggled = self._notifyCheckbox.connect("toggled", self._on_notify_toggled)
-                       self._onMinutesChanged = self._minutesEntryButton.connect("clicked", self._on_minutes_changed)
+                       self._onMinutesChanged = self._minutesEntryButton.connect("clicked", self._on_minutes_clicked)
                        self._onMissedToggled = self._missedCheckbox.connect("toggled", self._on_missed_toggled)
                        self._onVoicemailToggled = self._voicemailCheckbox.connect("toggled", self._on_voicemail_toggled)
                        self._onSmsToggled = self._smsCheckbox.connect("toggled", self._on_sms_toggled)
@@ -659,6 +660,8 @@ class AccountInfo(object):
                        self._missedCheckbox.set_sensitive(False)
                        self._voicemailCheckbox.set_sensitive(False)
                        self._smsCheckbox.set_sensitive(False)
+               self._minutesEntryButton.set_sensitive(True)
+               self._onMinutesChanged = self._minutesEntryButton.connect("clicked", self._on_minutes_clicked)
 
                self.update(force=True)
 
@@ -800,11 +803,33 @@ class AccountInfo(object):
                except Exception, e:
                        self._errorDisplay.push_exception()
 
-       def _on_minutes_changed(self, *args):
+       def _on_minutes_clicked(self, *args):
+               recurrenceChoices = [
+                       (1, "1 minute"),
+                       (3, "3 minutes"),
+                       (5, "5 minutes"),
+                       (10, "10 minutes"),
+                       (15, "15 minutes"),
+                       (30, "30 minutes"),
+                       (45, "45 minutes"),
+                       (60, "1 hour"),
+                       (12*60, "12 hours"),
+               ]
                try:
-                       recurrence = hildonize.request_number(
-                               self._window, "Minutes", (1, 50), self._alarmHandler.recurrence
+                       actualSelection = self._alarmHandler.recurrence
+
+                       closestSelectionIndex = 0
+                       for i, possible in enumerate(recurrenceChoices):
+                               if possible[0] <= actualSelection:
+                                       closestSelectionIndex = i
+                       recurrenceIndex = hildonize.touch_selector(
+                               self._window,
+                               "Minutes",
+                               (("%s" % m[1]) for m in recurrenceChoices),
+                               closestSelectionIndex,
                        )
+                       recurrence = recurrenceChoices[recurrenceIndex][0]
+
                        self._update_alarm_settings(recurrence)
                except Exception, e:
                        self._errorDisplay.push_exception()
index 7861599..377313b 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 
+import gobject
 import gtk
 import dbus
 
@@ -335,3 +336,78 @@ try:
        request_number = _hildon_request_number
 except AttributeError:
        request_number = _null_request_number
+
+
+def _hildon_touch_selector(parent, title, items, defaultIndex):
+       model = gtk.ListStore(gobject.TYPE_STRING)
+       for item in items:
+               model.append((item, ))
+
+       selector = hildon.TouchSelector()
+       selector.append_text_column(model, True)
+       selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
+       selector.set_active(0, defaultIndex)
+
+       dialog = hildon.PickerDialog(parent)
+       dialog.set_selector(selector)
+
+       try:
+               dialog.show_all()
+               response = dialog.run()
+       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)
+
+
+def _null_touch_selector(parent, title, items, defaultIndex = -1):
+       model = gtk.ListStore(gobject.TYPE_STRING)
+       for item in items:
+               model.append((item, ))
+
+       cell = gtk.CellRendererText()
+
+       combo = gtk.ComboBox()
+       combo.set_model(model)
+       combo.pack_start(cell, True)
+       combo.add_attribute(cell, 'text', 0)
+       combo.set_active(defaultIndex)
+
+       dialog = gtk.Dialog(
+               title,
+               parent,
+               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
+               (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
+       )
+       dialog.set_default_response(gtk.RESPONSE_CANCEL)
+       dialog.get_child().add(combo)
+
+       try:
+               dialog.show_all()
+               response = dialog.run()
+       finally:
+               dialog.hide()
+
+       if response == gtk.RESPONSE_OK:
+               return combo.get_active()
+       elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
+               raise RuntimeError("User cancelled request")
+       else:
+               raise RuntimeError("Unrecognized response %r", response)
+
+
+try:
+       hildon.PickerDialog
+       hildon.TouchSelector
+       touch_selector = _hildon_touch_selector
+except AttributeError:
+       touch_selector = _null_touch_selector
+
+
+if __name__ == "__main__":
+       pass