_data_path = os.path.join(os.path.expanduser("~"), ".dialcentral")
def __init__(self):
+ self._connection = None
+ self._osso = None
self._gcBackend = None
self._clipboard = gtk.clipboard_get()
global hildon
self._app = None
self._isFullScreen = False
- if hildon is not None and self._window is gtk.Window:
- warnings.warn("Hildon installed but glade file not updated to work with hildon", UserWarning, 2)
- hildon = None
- elif hildon is not None:
+ if hildon is not None:
self._app = hildon.Program()
self._window = hildon.Window()
self._widgetTree.get_widget("vbox1").reparent(self._window)
self._app.add_window(self._window)
self._widgetTree.get_widget("usernameentry").set_property('hildon-input-mode', 7)
self._widgetTree.get_widget("passwordentry").set_property('hildon-input-mode', 7|(1 << 29))
+ self._widgetTree.get_widget("callbackcombo").get_child().set_property('hildon-input-mode', (1 << 4))
+ hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget('recent_scrolledwindow'), True)
+ hildon.hildon_helper_set_thumb_scrollbar(self._widgetTree.get_widget('contacts_scrolledwindow'), True)
gtkMenu = self._widgetTree.get_widget("dialpad_menubar")
menu = gtk.Menu()
self._window.connect("key-press-event", self._on_key_press)
self._window.connect("window-state-event", self._on_window_state_change)
else:
- warnings.warn("No Hildon", UserWarning, 2)
+ pass # warnings.warn("No Hildon", UserWarning, 2)
if hildon is not None:
self._window.set_title("Keypad")
device = osso.DeviceState(self._osso)
device.set_device_state_callback(self._on_device_state_change, 0)
else:
- warnings.warn("No OSSO", UserWarning, 2)
+ pass # warnings.warn("No OSSO", UserWarning)
try:
import conic
self._connection.connect("connection-event", self._on_connection_change, Dialcentral.__app_magic__)
self._connection.request_connection(conic.CONNECT_FLAG_NONE)
else:
- warnings.warn("No Internet Connectivity API ", UserWarning, 2)
+ pass # warnings.warn("No Internet Connectivity API ", UserWarning)
import gc_backend
import file_backend
self._contactsView.open_addressbook(*self._contactsView.get_addressbooks().next()[0][0:2])
gtk.gdk.threads_enter()
try:
- self._contactsView._init_books_combo()
+ self._dialpad.enable()
+ self._accountView.enable()
+ self._recentView.enable()
+ self._contactsView.enable()
finally:
gtk.gdk.threads_leave()
import gobject
import gtk
-try:
- import hildon
-except ImportError:
- hildon = None
-
def make_ugly(prettynumber):
"""
def __init__(self, widgetTree):
self._numberdisplay = widgetTree.get_widget("numberdisplay")
+ self._dialButton = widgetTree.get_widget("dial")
self._phonenumber = ""
self._prettynumber = ""
self._clearall_id = None
"on_back_released": self._on_back_released,
}
widgetTree.signal_autoconnect(callbackMapping)
- widgetTree.get_widget("dial").grab_default()
- widgetTree.get_widget("dial").grab_focus()
def enable(self):
- pass
+ self._dialButton.grab_focus()
def disable(self):
pass
def dial(self, number):
+ """
+ @note Actual dial function is patched in later
+ """
raise NotImplementedError
def get_number(self):
self._callbackList = gtk.ListStore(gobject.TYPE_STRING)
self._accountViewNumberDisplay = widgetTree.get_widget("gcnumber_display")
self._callbackCombo = widgetTree.get_widget("callbackcombo")
- if hildon is not None:
- self._callbackCombo.get_child().set_property('hildon-input-mode', (1 << 4))
-
- callbackMapping = {
- }
- widgetTree.signal_autoconnect(callbackMapping)
- self._callbackCombo.get_child().connect("changed", self._on_callbackentry_changed)
-
- self.set_account_number("")
def enable(self):
- pass
+ assert self._backend.is_authed()
+ self.set_account_number("")
+ self._callbackList.clear()
+ self.update()
+ self._callbackCombo.get_child().connect("changed", self._on_callbackentry_changed)
def disable(self):
- pass
+ self._callbackCombo.get_child().disconnect("changed", self._on_callbackentry_changed)
+ self.clear()
+ self._callbackList.clear()
def get_selected_callback_number(self):
return make_ugly(self._callbackCombo.get_child().get_text())
self._recentmodel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
self._recentview = widgetTree.get_widget("recentview")
self._recentviewselection = None
+ textrenderer = gtk.CellRendererText()
+ self._recentviewColumn = gtk.TreeViewColumn("Calls", textrenderer, text=1)
+ self._recentviewColumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- callbackMapping = {
- "on_recentview_row_activated": self._on_recentview_row_activated,
- }
- widgetTree.signal_autoconnect(callbackMapping)
+ def enable(self):
+ assert self._backend.is_authed()
+ self._recentview.set_model(self._recentmodel)
- self._init_recent_view()
- if hildon is not None:
- hildon.hildon_helper_set_thumb_scrollbar(widgetTree.get_widget('recent_scrolledwindow'), True)
+ self._recentview.append_column(self._recentviewColumn)
+ self._recentviewselection = self._recentview.get_selection()
+ self._recentviewselection.set_mode(gtk.SELECTION_SINGLE)
- def enable(self):
- pass
+ self._recentview.connect("row-activated", self._on_recentview_row_activated)
def disable(self):
- pass
+ self._recentview.disconnect("row-activated", self._on_recentview_row_activated)
+ self._recentview.remove_column(self._recentviewColumn)
+ self._recentview.set_model(None)
def number_selected(self, number):
+ """
+ @note Actual dial function is patched in later
+ """
raise NotImplementedError
def update(self):
self._recenttime = 0.0
self._recentmodel.clear()
- def _init_recent_view(self):
- self._recentview.set_model(self._recentmodel)
- textrenderer = gtk.CellRendererText()
-
- # Add the column to the treeview
- column = gtk.TreeViewColumn("Calls", textrenderer, text=1)
- column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
-
- self._recentview.append_column(column)
-
- self._recentviewselection = self._recentview.get_selection()
- self._recentviewselection.set_mode(gtk.SELECTION_SINGLE)
-
def _idly_populate_recentview(self):
self._recenttime = time.time()
self._recentmodel.clear()
self._contactsviewselection = None
self._contactsview = widgetTree.get_widget("contactsview")
+ self._contactColumn = gtk.TreeViewColumn("Contact")
+ displayContactSource = True
+ if displayContactSource:
+ textrenderer = gtk.CellRendererText()
+ self._contactColumn.pack_start(textrenderer, expand=False)
+ self._contactColumn.add_attribute(textrenderer, 'text', 0)
+ textrenderer = gtk.CellRendererText()
+ self._contactColumn.pack_start(textrenderer, expand=True)
+ self._contactColumn.add_attribute(textrenderer, 'text', 1)
+ textrenderer = gtk.CellRendererText()
+ self._contactColumn.pack_start(textrenderer, expand=True)
+ self._contactColumn.add_attribute(textrenderer, 'text', 4)
+ self._contactColumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ self._contactColumn.set_sort_column_id(1)
+ self._contactColumn.set_visible(True)
+
self._phoneTypeSelector = PhoneTypeSelector(widgetTree, self._backend)
- callbackMapping = {
- "on_contactsview_row_activated" : self._on_contactsview_row_activated,
- "on_addressbook_combo_changed": self._on_addressbook_combo_changed,
- }
- widgetTree.signal_autoconnect(callbackMapping)
- if hildon is not None:
- hildon.hildon_helper_set_thumb_scrollbar(widgetTree.get_widget('contacts_scrolledwindow'), True)
+ def enable(self):
+ assert self._backend.is_authed()
- self._init_contacts_view()
+ self._contactsview.set_model(self._contactsmodel)
+ self._contactsview.append_column(self._contactColumn)
+ self._contactsviewselection = self._contactsview.get_selection()
+ self._contactsviewselection.set_mode(gtk.SELECTION_SINGLE)
- def enable(self):
- pass
+ self._booksList.clear()
+ for (factoryId, bookId), (factoryName, bookName) in self.get_addressbooks():
+ if factoryName and bookName:
+ entryName = "%s: %s" % (factoryName, bookName)
+ elif factoryName:
+ entryName = factoryName
+ elif bookName:
+ entryName = bookName
+ else:
+ entryName = "Bad name (%d)" % factoryId
+ row = (str(factoryId), bookId, entryName)
+ self._booksList.append(row)
+
+ self._booksSelectionBox.set_model(self._booksList)
+ cell = gtk.CellRendererText()
+ self._booksSelectionBox.pack_start(cell, True)
+ self._booksSelectionBox.add_attribute(cell, 'text', 2)
+ self._booksSelectionBox.set_active(0)
+
+ self._contactsview.connect("row-activated", self._on_contactsview_row_activated)
+ self._booksSelectionBox.connect("changed", self._on_addressbook_combo_changed)
def disable(self):
- pass
+ self._booksSelectionBox.set_model(None)
+ self._contactsview.set_model(None)
+ self._contactsview.remove_column(self._contactColumn)
+ self._contactsview.disconnect("row-activated", self._on_contactsview_row_activated)
+ self._booksSelectionBox.disconnect("changed", self._on_addressbook_combo_changed)
def number_selected(self, number):
+ """
+ @note Actual dial function is patched in later
+ """
raise NotImplementedError
def get_addressbooks(self):
def extend(self, books):
self._addressBookFactories.extend(books)
- def _init_contacts_view(self):
- self._contactsview.set_model(self._contactsmodel)
-
- # Add the column to the treeview
- column = gtk.TreeViewColumn("Contact")
-
- #displayContactSource = False
- displayContactSource = True
- if displayContactSource:
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=False)
- column.add_attribute(textrenderer, 'text', 0)
-
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=True)
- column.add_attribute(textrenderer, 'text', 1)
-
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=True)
- column.add_attribute(textrenderer, 'text', 4)
-
- column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- column.set_sort_column_id(1)
- column.set_visible(True)
- self._contactsview.append_column(column)
-
- self._contactsviewselection = self._contactsview.get_selection()
- self._contactsviewselection.set_mode(gtk.SELECTION_SINGLE)
-
- def _init_books_combo(self):
- self._booksList.clear()
- for (factoryId, bookId), (factoryName, bookName) in self.get_addressbooks():
- if factoryName and bookName:
- entryName = "%s: %s" % (factoryName, bookName)
- elif factoryName:
- entryName = factoryName
- elif bookName:
- entryName = bookName
- else:
- entryName = "Bad name (%d)" % factoryId
- row = (str(factoryId), bookId, entryName)
- self._booksList.append(row)
-
- self._booksSelectionBox.set_model(self._booksList)
- cell = gtk.CellRendererText()
- self._booksSelectionBox.pack_start(cell, True)
- self._booksSelectionBox.add_attribute(cell, 'text', 2)
- self._booksSelectionBox.set_active(0)
-
def _idly_populate_contactsview(self):
#@todo Add a lock so only one code path can be in here at a time
self.clear()
--- /dev/null
+#!/usr/bin/python2.5
+
+# DialCentral - Front end for Google's Grand Central service.
+# Copyright (C) 2008 Mark Bergman bergman AT merctech DOT com
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# 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
+
+import gobject
+import gtk
+
+
+class Dialpad(object):
+
+ def __init__(self, widgetTree):
+ self._numberdisplay = widgetTree.get_widget("numberdisplay")
+ self._dialButton = widgetTree.get_widget("dial")
+
+ def enable(self):
+ self._dialButton.set_sensitive(False)
+
+ def disable(self):
+ self._dialButton.set_sensitive(True)
+
+
+class AccountInfo(object):
+
+ def __init__(self, widgetTree):
+ self._callbackList = gtk.ListStore(gobject.TYPE_STRING)
+ self._accountViewNumberDisplay = widgetTree.get_widget("gcnumber_display")
+ self._callbackCombo = widgetTree.get_widget("callbackcombo")
+
+ def enable(self):
+ self._callbackCombo.set_sensitive(False)
+
+ def disable(self):
+ self._callbackCombo.set_sensitive(True)
+
+
+class RecentCallsView(object):
+
+ def __init__(self, widgetTree):
+ pass
+
+ def enable(self):
+ pass
+
+ def disable(self):
+ pass
+
+
+class ContactsView(object):
+
+ def __init__(self, widgetTree):
+ self._booksSelectionBox = widgetTree.get_widget("addressbook_combo")
+
+ def enable(self):
+ self._booksSelectionBox.set_sensitive(False)
+
+ def disable(self):
+ self._booksSelectionBox.set_sensitive(True)