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
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)
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)
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()
#!/usr/bin/env python
+import gobject
import gtk
import dbus
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