* Switched the gc_views to support enable/disable in prep for null view support
authorepage <eopage@byu.net>
Thu, 5 Mar 2009 02:01:45 +0000 (02:01 +0000)
committerepage <eopage@byu.net>
Thu, 5 Mar 2009 02:01:45 +0000 (02:01 +0000)
* Created rough outline of null views
* Removed some of the line noise

How did I make such a change that covers a large area without any noticable bugs

git-svn-id: file:///svnroot/gc-dialer/trunk@203 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

Makefile
src/browser_emu.py
src/file_backend.py
src/gc_backend.py
src/gc_dialer.py
src/gc_views.py
src/null_views.py [new file with mode: 0644]
support/pylint.rc

index f06db9f..3b80bd3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 PROJECT_NAME=dialcentral
 SOURCE_PATH=src
-SOURCE=$(SOURCE_PATH)/gc_dialer.py $(SOURCE_PATH)/views.py $(SOURCE_PATH)/file_backend.py $(SOURCE_PATH)/evo_backend.py $(SOURCE_PATH)/gc_backend.py $(SOURCE_PATH)/browser_emu.py $(SOURCE_PATH)/__init__.py
+SOURCE=$(SOURCE_PATH)/gc_dialer.py $(SOURCE_PATH)/gc_views.py $(SOURCE_PATH)/null_views.py $(SOURCE_PATH)/file_backend.py $(SOURCE_PATH)/evo_backend.py $(SOURCE_PATH)/gc_backend.py $(SOURCE_PATH)/browser_emu.py $(SOURCE_PATH)/__init__.py
 PROGRAM=$(SOURCE_PATH)/$(PROJECT_NAME).py
 OBJ=$(SOURCE:.py=.pyc)
 BUILD_PATH=./build/
index 3083a1c..2438930 100644 (file)
@@ -110,7 +110,7 @@ class MozillaEmulator(object):
                @return: The raw HTML page data, unless fd was specified. When fd
                        was given, the return value is undefined.
                """
-               warnings.warn("Performing download of %s" % url, UserWarning, 2)
+               # warnings.warn("Performing download of %s" % url, UserWarning, 2)
 
                if extraheaders is None:
                        extraheaders = {}
index 2aa77a2..0476ef0 100644 (file)
@@ -91,11 +91,11 @@ class FilesystemAddressBookFactory(object):
                """
                @returns Iterable of (Address Book Factory, Book Id, Book Name)
                """
-               for root, dirs, files in os.walk(self.__path):
-                       for file in files:
-                               name, ext = file.rsplit(".", 1)
+               for root, dirs, filenames in os.walk(self.__path):
+                       for filename in filenames:
+                               name, ext = filename.rsplit(".", 1)
                                if ext in self.FILETYPE_SUPPORT:
-                                       yield self, os.path.join(root, file), name
+                                       yield self, os.path.join(root, filename), name
 
        def open_addressbook(self, bookId):
                name, ext = bookId.rsplit(".", 1)
@@ -105,19 +105,3 @@ class FilesystemAddressBookFactory(object):
        @staticmethod
        def factory_name():
                return "File"
-
-
-def print_books():
-       """
-       Included here for debugging.
-
-       Either insert it into the code or launch python with the "-i" flag
-       """
-       eab = FilesystemAddressBookFactory(os.path.expanduser("~/Desktop"))
-       for book in eab.get_addressbooks():
-               eab = eab.open_addressbook(book[1])
-               print book
-               for contact in eab.get_contacts():
-                       print "\t", contact
-                       for details in eab.get_contact_details(contact[0]):
-                               print "\t\t", details
index 50f2ece..0df3dec 100644 (file)
@@ -139,7 +139,7 @@ class GCDialer(object):
 
                # No point if we don't have the magic cookie
                if not self.is_authed():
-                       raise RunetimeError("Not Authenticated")
+                       raise RuntimeError("Not Authenticated")
 
                # Strip leading 1 from 11 digit dialing
                if len(number) == 11 and number[0] == 1:
@@ -153,7 +153,7 @@ class GCDialer(object):
                        )
                except urllib2.URLError, e:
                        warnings.warn("%s is not accesible" % GCDialer._clicktocallURL, UserWarning, 2)
-                       raise RunetimeError("%s is not accesible" % GCDialer._clicktocallURL)
+                       raise RuntimeError("%s is not accesible" % GCDialer._clicktocallURL)
 
                if GCDialer._gcDialingStrRe.search(callSuccessPage) is None:
                        raise RuntimeError("Grand Central returned an error")
index 45fab6e..440f038 100755 (executable)
@@ -53,6 +53,8 @@ class Dialcentral(object):
        _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()
 
@@ -77,16 +79,16 @@ class Dialcentral(object):
                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()
@@ -98,7 +100,7 @@ class Dialcentral(object):
                        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")
@@ -134,7 +136,7 @@ class Dialcentral(object):
                        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
@@ -146,7 +148,7 @@ class Dialcentral(object):
                        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
@@ -198,7 +200,10 @@ class Dialcentral(object):
                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()
 
index 1846da8..a407a45 100644 (file)
@@ -24,11 +24,6 @@ import warnings
 import gobject
 import gtk
 
-try:
-       import hildon
-except ImportError:
-       hildon = None
-
 
 def make_ugly(prettynumber):
        """
@@ -363,6 +358,7 @@ class Dialpad(object):
 
        def __init__(self, widgetTree):
                self._numberdisplay = widgetTree.get_widget("numberdisplay")
+               self._dialButton = widgetTree.get_widget("dial")
                self._phonenumber = ""
                self._prettynumber = ""
                self._clearall_id = None
@@ -376,16 +372,17 @@ class Dialpad(object):
                        "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):
@@ -435,21 +432,18 @@ class AccountInfo(object):
                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())
@@ -498,23 +492,29 @@ class RecentCallsView(object):
                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):
@@ -528,19 +528,6 @@ class RecentCallsView(object):
                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()
@@ -581,25 +568,65 @@ class ContactsView(object):
                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):
@@ -639,55 +666,6 @@ class ContactsView(object):
        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()
diff --git a/src/null_views.py b/src/null_views.py
new file mode 100644 (file)
index 0000000..15474c8
--- /dev/null
@@ -0,0 +1,72 @@
+#!/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)
index cad484c..404f6dc 100644 (file)
@@ -53,16 +53,16 @@ load-plugins=
 #enable-msg=
 
 # Disable the message(s) with the given id(s).
-disable-msg=W0403,W0612,W0613,C0103,C0111,C0301
+disable-msg=W0403,W0612,W0613,C0103,C0111,C0301,R0903,W0142,W0603,R0904
 
 [REPORTS]
 
 # set the output format. Available formats are text, parseable, colorized, msvs
 # (visual studio) and html
-output-format=text
+output-format=colorized
 
 # Include message's id in output
-include-ids=no
+include-ids=yes
 
 # Put messages in a separate file for each module / package specified on the
 # command line instead of printing them on stdout. Reports (if any) will be
@@ -70,7 +70,7 @@ include-ids=no
 files-output=no
 
 # Tells wether to display a full report or only the messages
-reports=yes
+reports=no
 
 # Python expression which should return a note less than 10 (10 is the highest
 # note).You have access to the variables errors warning, statement which