>>> normalize_number("+012-(345)-678-90")
'+01234567890'
>>> normalize_number("1-(345)-678-9000")
- '+13456789000'
+ '13456789000'
>>> normalize_number("+1-(345)-678-9000")
'+13456789000'
"""
uglynumber = re.sub('[^0-9+]', '', prettynumber)
- if uglynumber.startswith("+"):
- pass
- elif uglynumber.startswith("1") and len(uglynumber) == 11:
- uglynumber = "+"+uglynumber
- elif len(uglynumber) == 10:
- uglynumber = "+1"+uglynumber
- else:
- pass
-
- #validateRe = re.compile("^\+?[0-9]{10,}$")
- #assert validateRe.match(uglynumber) is not None
return uglynumber
MAX_CHAR = 160
- def __init__(self, widgetTree):
+ def __init__(self, widgetTree, parent):
self._clipboard = gtk.clipboard_get()
self._widgetTree = widgetTree
self._window = self._widgetTree.get_widget("smsWindow")
self._window.connect("delete-event", self._on_delete)
self._window.connect("key-press-event", self._on_key_press)
+ self._window.connect("window-state-event", self._on_window_state_change)
+ self._isFullScreen = False
+ self._parent = parent
self._smsButton = self._widgetTree.get_widget("sendSmsButton")
self._smsButton.connect("clicked", self._on_send)
self._smsEntry.get_buffer().connect("changed", self._on_entry_changed)
self._smsEntrySize = None
- self._numberIndex = -1
self._contacts = []
- def add_contact(self, contactDetails, messages = (), parent = None, defaultIndex = -1):
+ def add_contact(self, contactDetails, messages = (), defaultIndex = -1):
contactNumbers = list(self._to_contact_numbers(contactDetails))
assert contactNumbers
contactIndex = defaultIndex if defaultIndex != -1 else 0
self._contacts.append(contact)
selector = gtk.Button(contactNumbers[0][1])
- #selector.connect("clicked", , len(self._contacts)) TODO
removeContact = gtk.Button(stock="gtk-delete")
- #removeContact.connect("clicked", , len(self._contacts)) TODO
row = gtk.HBox()
row.pack_start(selector, True, True)
row.pack_start(removeContact, False, False)
row.show_all()
self._targetList.pack_start(row)
+ selector.connect("clicked", self._on_choose_phone_n, row)
+ removeContact.connect("clicked", self._on_remove_phone_n, row)
self._update_button_state()
self._update_context()
- if parent is not None:
- parentSize = parent.get_size()
- self._window.resize(parentSize[0], max(parentSize[1]-10, 100))
+ parentSize = self._parent.get_size()
+ self._window.resize(parentSize[0], max(parentSize[1]-10, 100))
self._window.show()
self._window.present()
self._update_letter_count()
self._update_context()
+ def fullscreen(self):
+ self._window.fullscreen()
+
+ def unfullscreen(self):
+ self._window.unfullscreen()
+
def _remove_contact(self, contactIndex):
del self._contacts[contactIndex]
display = " - ".join((make_pretty(phoneNumber), phoneType))
yield (phoneNumber, display)
- def _request_number(self):
- try:
- assert 0 <= self._numberIndex, "%r" % self._numberIndex
-
- self._numberIndex = hildonize.touch_selector(
- self._dialog,
- "Phone Numbers",
- (description for (number, description) in self._contactDetails),
- self._numberIndex,
- )
- self._phoneButton.set_label(self._contactDetails[self._numberIndex][1])
- except Exception, e:
- _moduleLogger.exception("%s" % str(e))
-
def _hide(self):
self.clear()
self._window.hide()
+ def _request_number(self, contactIndex):
+ contactNumbers, index, messages = self._contacts[contactIndex]
+ assert 0 <= index, "%r" % index
+
+ index = hildonize.touch_selector(
+ self._window,
+ "Phone Numbers",
+ (description for (number, description) in contactNumbers),
+ index,
+ )
+ self._contacts[contactIndex] = contactNumbers, index, messages
+
+ def send_sms(self, numbers, message):
+ raise NotImplementedError()
+
+ def dial(self, number):
+ raise NotImplementedError()
+
def _on_phone(self, *args):
- self._request_number()
+ try:
+ assert len(self._contacts) == 1
+ self._request_number(0)
+
+ contactNumbers, numberIndex, messages = self._contacts[0]
+ self._phoneButton.set_label(contactNumbers[numberIndex][1])
+ row = list(self._targetList.get_children())[0]
+ phoneButton = list(row.get_children())[0]
+ phoneButton.set_label(contactNumbers[numberIndex][1])
+ except Exception, e:
+ _moduleLogger.exception("%s" % str(e))
+
+ def _on_choose_phone_n(self, button, row):
+ try:
+ assert 1 < len(self._contacts)
+ targetList = list(self._targetList.get_children())
+ index = targetList.index(row)
+ self._request_number(index)
+
+ contactNumbers, numberIndex, messages = self._contacts[0]
+ phoneButton = list(row.get_children())[0]
+ phoneButton.set_label(contactNumbers[numberIndex][1])
+ except Exception, e:
+ _moduleLogger.exception("%s" % str(e))
+
+ def _on_remove_phone_n(self, button, row):
+ try:
+ assert 1 < len(self._contacts)
+ targetList = list(self._targetList.get_children())
+ index = targetList.index(row)
+
+ del self._contacts[index]
+ self._targetList.remove(row)
+ self._update_context()
+ self._update_button_state()
+ except Exception, e:
+ _moduleLogger.exception("%s" % str(e))
def _on_entry_changed(self, *args):
self._update_letter_count()
enteredMessage = entryBuffer.get_text(entryBuffer.get_start_iter(), entryBuffer.get_end_iter())
enteredMessage = enteredMessage.strip()
assert enteredMessage
- # @todo
+ self.send_sms(phoneNumbers, enteredMessage)
self._hide()
def _on_dial(self, *args):
contact = self._contacts[0]
contactNumber = contact[0][contact[1]][0]
phoneNumber = make_ugly(contactNumber)
- # @todo
+ self.dial(phoneNumber)
self._hide()
def _on_delete(self, *args):
self._hide()
return True
+ def _on_window_state_change(self, widget, event, *args):
+ """
+ @note Hildon specific
+ """
+ try:
+ if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
+ self._isFullScreen = True
+ else:
+ self._isFullScreen = False
+ except Exception, e:
+ self._errorDisplay.push_exception()
+
def _on_key_press(self, widget, event):
+ RETURN_TYPES = (gtk.keysyms.Return, gtk.keysyms.ISO_Enter, gtk.keysyms.KP_Enter)
try:
- if event.keyval == ord("c") and event.get_state() & gtk.gdk.CONTROL_MASK:
+ if (
+ event.keyval == gtk.keysyms.F6 or
+ event.keyval in RETURN_TYPES and event.get_state() & gtk.gdk.CONTROL_MASK
+ ):
+ if self._isFullScreen:
+ self._window.unfullscreen()
+ else:
+ self._window.fullscreen()
+ elif event.keyval == ord("c") and event.get_state() & gtk.gdk.CONTROL_MASK:
message = "\n".join(
messagePart[0]
for messagePart in self._messagemodel
)
self._clipboard.set_text(str(message))
+ elif (
+ event.keyval == gtk.keysyms.w and
+ event.get_state() & gtk.gdk.CONTROL_MASK
+ ):
+ self._hide()
+ elif (
+ event.keyval == gtk.keysyms.q and
+ event.get_state() & gtk.gdk.CONTROL_MASK
+ ):
+ self._parent.destroy()
except Exception, e:
_moduleLogger.exception(str(e))
self._errorDisplay = errorDisplay
self._numberdisplay = widgetTree.get_widget("numberdisplay")
- self._smsButton = widgetTree.get_widget("sms")
- self._dialButton = widgetTree.get_widget("dial")
+ self._okButton = widgetTree.get_widget("dialpadOk")
self._backButton = widgetTree.get_widget("back")
- self._zeroOrPlusButton = widgetTree.get_widget("digit0")
+ self._plusButton = widgetTree.get_widget("plus")
self._phonenumber = ""
self._prettynumber = ""
"on_digit_clicked": self._on_digit_clicked,
}
widgetTree.signal_autoconnect(callbackMapping)
- self._dialButton.connect("clicked", self._on_dial_clicked)
- self._smsButton.connect("clicked", self._on_sms_clicked)
+ self._okButton.connect("clicked", self._on_ok_clicked)
+ self._plusButton.connect("clicked", self._on_plus)
self._originalLabel = self._backButton.get_label()
self._backTapHandler = gtk_toolbox.TapOrHold(self._backButton)
self._backTapHandler.on_hold = self._on_clearall
self._backTapHandler.on_holding = self._set_clear_button
self._backTapHandler.on_cancel = self._reset_back_button
- self._zeroOrPlusTapHandler = gtk_toolbox.TapOrHold(self._zeroOrPlusButton)
- self._zeroOrPlusTapHandler.on_tap = self._on_zero
- self._zeroOrPlusTapHandler.on_hold = self._on_plus
self._window = gtk_toolbox.find_parent_window(self._numberdisplay)
self._keyPressEventId = 0
def enable(self):
- self._dialButton.grab_focus()
+ self._okButton.grab_focus()
self._backTapHandler.enable()
- self._zeroOrPlusTapHandler.enable()
self._keyPressEventId = self._window.connect("key-press-event", self._on_key_press)
def disable(self):
self._keyPressEventId = 0
self._reset_back_button()
self._backTapHandler.disable()
- self._zeroOrPlusTapHandler.disable()
def add_contact(self, *args, **kwds):
"""
except Exception, e:
self._errorDisplay.push_exception()
- def _on_sms_clicked(self, widget):
+ def _on_ok_clicked(self, widget):
try:
phoneNumber = self.get_number()
self.add_contact(
- [("Dialer", phoneNumber)], (), self._window
+ [("Dialer", phoneNumber)], ()
)
- except Exception, e:
- self._errorDisplay.push_exception()
-
- def _on_dial_clicked(self, widget):
- try:
- #self.number_selected(action, phoneNumbers, message) TODO
- pass
+ self.set_number("")
except Exception, e:
self._errorDisplay.push_exception()
except Exception, e:
self._errorDisplay.push_exception()
- def _on_zero(self, *args):
- try:
- self.set_number(self._phonenumber + "0")
- except Exception, e:
- self._errorDisplay.push_exception()
-
def _on_plus(self, *args):
try:
self.set_number(self._phonenumber + "+")
self.add_contact(
contactPhoneNumbers,
messages = (description, ),
- parent = self._window,
defaultIndex = defaultIndex,
)
self._historyviewselection.unselect_all()
self.add_contact(
contactPhoneNumbers,
messages = description,
- parent = self._window,
defaultIndex = defaultIndex,
)
self._messageviewselection.unselect_all()
self.add_contact(
contactPhoneNumbers,
messages = (contactName, ),
- parent = self._window,
)
self._contactsviewselection.unselect_all()
except Exception, e: