try:
import osso
- try:
- import abook
- import evolution.ebook as evobook
- except ImportError:
- abook = None
- evobook = None
except ImportError:
osso = None
a[0].next()
return True
except StopIteration:
+ del a[:]
return False
decorated_func.__name__ = func.__name__
class DummyAddressBook(object):
+ """
+ Minimal example of both an addressbook factory and an addressbook
+ """
def get_addressbooks(self):
"""
@returns Iterable of (Address Book Factory, Book Id, Book Name)
"""
- yield self, None, "None"
+ yield self, "", "None"
def open_addressbook(self, bookId):
return self
+ @staticmethod
+ def factory_name():
+ return ""
+
def get_contacts(self):
"""
@returns Iterable of (contact id, contact name)
"""
- return
+ return []
def get_contact_details(self, contactId):
"""
@returns Iterable of (Phone Type, Phone Number)
"""
- return
+ return []
-class SettingsWindow(object):
+class SettingsDialog(object):
+ """
+ @todo Remove this. Currently its only used for addressbooks and I want to make that a combo box on the contacts tab
+ """
def __init__(self, widgetTree, gcDialer):
self._gcDialer = gcDialer
self._cancelButton = self._widgetTree.get_widget("cancel_settings")
self._cancelButton.connect("clicked", self.custom_button_response(gtk.RESPONSE_CANCEL))
- self._booksCombo = self._widgetTree.get_widget("addressbooks_combo")
+ self._booksList = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+ for (factoryId, bookId), (factoryName, bookName) in self._gcDialer.get_addressbooks():
+ row = (str(factoryId), bookId, factoryName, bookName)
+ self._booksList.append(row)
+
+ self._booksView = self._widgetTree.get_widget("books_view")
+ self._booksView.set_model(self._booksList)
+
+ # Add the column to the treeview
+ column = gtk.TreeViewColumn("Addressbook")
+
+ textrenderer = gtk.CellRendererText()
+ column.pack_start(textrenderer, expand=False)
+ column.add_attribute(textrenderer, 'text', 2)
+
+ textrenderer = gtk.CellRendererText()
+ column.pack_start(textrenderer, expand=True)
+ column.add_attribute(textrenderer, 'text', 3)
+
+ column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ column.set_sort_column_id(2)
+ column.set_visible(True)
+ self._booksView.append_column(column)
- self._booksList = gtk.ListStore(gobject.TYPE_STRING)
- self._booksCombo.set_model(self._booksList)
- self._booksCombo.set_text_column(0)
- #for number, description in self._gcBackend.get_callback_numbers().iteritems():
- # self.callbacklist.append([make_pretty(number)])
- #self._booksCombo.get_child().set_text()
+ self._booksViewSelection = self._booksView.get_selection()
+ self._booksViewSelection.set_mode(gtk.SELECTION_SINGLE)
+ self.reset()
+
+ def reset(self):
+ pass
def custom_button_response(self, response):
return button_handler
- def run(self, contactDetails):
- self._booksList.clear()
-
- for phoneType, phoneNumber in contactDetails:
- self._booksList.append((phoneNumber, "%s - %s" % (make_pretty(phoneNumber), phoneType)))
-
+ def run(self):
userResponse = self._dialog.run()
if userResponse == gtk.RESPONSE_OK:
- pass
+ model, itr = self._booksViewSelection.get_selected()
+ if itr:
+ factoryId = int(self._booksList.get_value(itr, 0))
+ bookId = self._booksList.get_value(itr, 1)
+ self._gcDialer.open_addressbook(factoryId, bookId)
+ self._booksViewSelection.unselect_all()
else:
- pass
+ self.reset()
self._dialog.hide()
self._osso = osso.Context(Dialpad.__app_name__, Dialpad.__version__, False)
device = osso.DeviceState(self._osso)
device.set_device_state_callback(self._on_device_state_change, 0)
- if abook is not None and evobook is not None:
- abook.init_with_name(Dialpad.__app_name__, self._osso)
- self._ebook = evobook.open_addressbook("default")
- else:
- warnings.warn("No abook and No evolution address book support", UserWarning, 2)
else:
warnings.warn("No OSSO", UserWarning, 2)
"on_dialpad_quit": self._on_close,
"on_paste": self._on_paste,
"on_clear_number": self._on_clear_number,
+ "on_settings": self._on_settings,
"on_clearcookies_clicked": self._on_clearcookies_clicked,
"on_notebook_switch_page": self._on_notebook_switch_page,
self._gcBackend,
]
self._addressBook = None
- self.open_addressbook(*self.get_addressbooks().next()[0:2])
+ self.open_addressbook(*self.get_addressbooks().next()[0][0:2])
self._phoneTypeSelector = PhoneTypeSelector(self._widgetTree, self._gcBackend)
+ self._settingsDialog = SettingsDialog(self._widgetTree, self)
if not self._gcBackend.is_authed():
self.attempt_login(2)
gobject.idle_add(self._idly_init_contacts_view)
def _idly_init_recent_view(self):
- """ Deferred initalization of the recent view treeview """
+ """
+ Deferred initalization of the recent view treeview
+ """
recentview = self._widgetTree.get_widget("recentview")
recentview.set_model(self._recentmodel)
contactType = (self._gcContactIcon,)
else:
contactType = (self._gcContactText,)
- for contactId, contactName in self._gcBackend.get_contacts():
+ for contactId, contactName in self._addressBook.get_contacts():
self._contactsmodel.append(contactType + (contactName, "", contactId) + ("",))
yield
def get_addressbooks(self):
"""
- @returns Iterable of (Address Book Factory, Book Id, Book Name)
+ @returns Iterable of ((Factory Id, Book Id), (Factory Name, Book Name))
"""
- for factory in self._addressBookFactories:
+ for i, factory in enumerate(self._addressBookFactories):
for bookFactory, bookId, bookName in factory.get_addressbooks():
- yield bookFactory, bookId, bookName
+ yield (i, bookId), (factory.factory_name(), bookName)
- def open_addressbook(self, bookFactory, bookId):
- self._addressBook = bookFactory.open_addressbook(bookId)
+ def open_addressbook(self, bookFactoryId, bookId):
+ self._addressBook = self._addressBookFactories[bookFactoryId].open_addressbook(bookId)
self._contactstime = 0
+ gobject.idle_add(self._idly_populate_contactsview)
def set_number(self, number):
"""
"""
self._phonenumber = make_ugly(number)
self._prettynumber = make_pretty(self._phonenumber)
- self._numberdisplay.set_label("<span size='30000' weight='bold'>%s</span>" % ( self._prettynumber ) )
+ self._numberdisplay.set_label("<span size='30000' weight='bold'>%s</span>" % (self._prettynumber))
def set_account_number(self):
"""
self._isFullScreen = True
else:
self._isFullScreen = False
+
+ def _on_settings(self, *args, **kwds):
+ self._settingsDialog.run()
def _on_key_press(self, widget, event, *args):
"""
return
contactId = self._contactsmodel.get_value(itr, 3)
- contactDetails = self._gcBackend.get_contact_details(contactId)
+ contactDetails = self._addressBook.get_contact_details(contactId)
contactDetails = [phoneNumber for phoneNumber in contactDetails]
if len(contactDetails) == 0: