More work in removing dead weight
authorEd Page <eopage@byu.net>
Fri, 25 Sep 2009 18:08:03 +0000 (13:08 -0500)
committerEd Page <eopage@byu.net>
Fri, 25 Sep 2009 18:08:03 +0000 (13:08 -0500)
README [deleted file]
TODO [deleted file]
src/gtk_toolbox.py

diff --git a/README b/README
deleted file mode 100644 (file)
index b87ce9c..0000000
--- a/README
+++ /dev/null
@@ -1,37 +0,0 @@
-Building a package
-===================
-Run
-       make PLATFORM=... package
-which will create a "./pkg-.../..." heirarchy.  Move this structure to somewhere on the tablet, then run pypackager. 
-
-Supported PLATFORMs include
-       desktop
-       os2007
-       os2008
-
-SDK Enviroment
-===================
-
-Native
-
-Follow install instructions
-       Ubuntu: http://www.linuxuk.org/node/38
-Install Nokia stuff (for each target)
-       fakeroot apt-get install maemo-explicit
-
-Userful commands
-Login
-       /scratchbox/login
-Change targets
-       sb-conf select DIABLO_ARMEL
-       sb-conf select DIABLO_X86
-Fixing it
-       fakeroot apt-get -f install
-
-Starting scratchbox
-       Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -extension Composite
-       scratchbox
-       export DISPLAY=:2
-       af-sb-init.sh start
-Then running a command in the "Maemo" terminal will launch it in the Xephyr session
-       Tip: run with "run-standalone.sh" for niceness?
diff --git a/TODO b/TODO
deleted file mode 100644 (file)
index 25bc1a1..0000000
--- a/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-src/gv_views.py:
-21: @todo Alternate UI for dialogs (stackables)
-416: @todo Add multi-SMS messages like GoogleVoice
-
-
index 26803d7..da9accc 100644 (file)
@@ -4,43 +4,13 @@ from __future__ import with_statement
 
 import os
 import errno
-import sys
 import time
-import itertools
 import functools
 import contextlib
 import logging
 import threading
 import Queue
 
-import gobject
-import gtk
-
-
-def get_screen_orientation():
-       width, height = gtk.gdk.get_default_root_window().get_size()
-       if width < height:
-               return gtk.ORIENTATION_VERTICAL
-       else:
-               return gtk.ORIENTATION_HORIZONTAL
-
-
-def orientation_change_connect(handler, *args):
-       """
-       @param handler(orientation, *args) -> None(?)
-       """
-       initialScreenOrientation = get_screen_orientation()
-       orientationAndArgs = list(itertools.chain((initialScreenOrientation, ), args))
-
-       def _on_screen_size_changed(screen):
-               newScreenOrientation = get_screen_orientation()
-               if newScreenOrientation != orientationAndArgs[0]:
-                       orientationAndArgs[0] = newScreenOrientation
-                       handler(*orientationAndArgs)
-
-       rootScreen = gtk.gdk.get_default_root_window()
-       return gtk.connect(rootScreen, "size-changed", _on_screen_size_changed)
-
 
 @contextlib.contextmanager
 def flock(path, timeout=-1):
@@ -69,23 +39,6 @@ def flock(path, timeout=-1):
                os.unlink(path)
 
 
-@contextlib.contextmanager
-def gtk_lock():
-       gtk.gdk.threads_enter()
-       try:
-               yield
-       finally:
-               gtk.gdk.threads_leave()
-
-
-def find_parent_window(widget):
-       while True:
-               parent = widget.get_parent()
-               if isinstance(parent, gtk.Window):
-                       return parent
-               widget = parent
-
-
 def make_idler(func):
        """
        Decorator that makes a generator-function into a function that will continue execution on next call
@@ -106,37 +59,6 @@ def make_idler(func):
        return decorated_func
 
 
-def asynchronous_gtk_message(original_func):
-       """
-       @note Idea came from http://www.aclevername.com/articles/python-webgui/
-       """
-
-       def execute(allArgs):
-               args, kwargs = allArgs
-               with gtk_lock():
-                       original_func(*args, **kwargs)
-               return False
-
-       @functools.wraps(original_func)
-       def delayed_func(*args, **kwargs):
-               gobject.idle_add(execute, (args, kwargs))
-
-       return delayed_func
-
-
-def synchronous_gtk_message(original_func):
-       """
-       @note Idea came from http://www.aclevername.com/articles/python-webgui/
-       """
-
-       @functools.wraps(original_func)
-       def immediate_func(*args, **kwargs):
-               with gtk_lock():
-                       return original_func(*args, **kwargs)
-
-       return immediate_func
-
-
 def autostart(func):
        """
        >>> @autostart
@@ -281,103 +203,6 @@ def threaded_stage(target, thread_factory = threading.Thread):
        return queue_sink(messages)
 
 
-class LoginWindow(object):
-
-       def __init__(self, widgetTree):
-               """
-               @note Thread agnostic
-               """
-               self._dialog = widgetTree.get_widget("loginDialog")
-               self._parentWindow = widgetTree.get_widget("mainWindow")
-               self._serviceCombo = widgetTree.get_widget("serviceCombo")
-               self._usernameEntry = widgetTree.get_widget("usernameentry")
-               self._passwordEntry = widgetTree.get_widget("passwordentry")
-
-               self._serviceList = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
-               self._serviceCombo.set_model(self._serviceList)
-               cell = gtk.CellRendererText()
-               self._serviceCombo.pack_start(cell, True)
-               self._serviceCombo.add_attribute(cell, 'text', 1)
-               self._serviceCombo.set_active(0)
-
-               widgetTree.get_widget("loginbutton").connect("clicked", self._on_loginbutton_clicked)
-               widgetTree.get_widget("logins_close_button").connect("clicked", self._on_loginclose_clicked)
-
-       def request_credentials(self,
-               parentWindow = None,
-               defaultCredentials = ("", "")
-       ):
-               """
-               @note UI Thread
-               """
-               if parentWindow is None:
-                       parentWindow = self._parentWindow
-
-               self._serviceCombo.hide()
-               self._serviceList.clear()
-
-               self._usernameEntry.set_text(defaultCredentials[0])
-               self._passwordEntry.set_text(defaultCredentials[1])
-
-               try:
-                       self._dialog.set_transient_for(parentWindow)
-                       self._dialog.set_default_response(gtk.RESPONSE_OK)
-                       response = self._dialog.run()
-                       if response != gtk.RESPONSE_OK:
-                               raise RuntimeError("Login Cancelled")
-
-                       username = self._usernameEntry.get_text()
-                       password = self._passwordEntry.get_text()
-                       self._passwordEntry.set_text("")
-               finally:
-                       self._dialog.hide()
-
-               return username, password
-
-       def request_credentials_from(self,
-               services,
-               parentWindow = None,
-               defaultCredentials = ("", "")
-       ):
-               """
-               @note UI Thread
-               """
-               if parentWindow is None:
-                       parentWindow = self._parentWindow
-
-               self._serviceList.clear()
-               for serviceIdserviceName in services:
-                       self._serviceList.append(serviceIdserviceName)
-               self._serviceCombo.set_active(0)
-               self._serviceCombo.show()
-
-               self._usernameEntry.set_text(defaultCredentials[0])
-               self._passwordEntry.set_text(defaultCredentials[1])
-
-               try:
-                       self._dialog.set_transient_for(parentWindow)
-                       self._dialog.set_default_response(gtk.RESPONSE_OK)
-                       response = self._dialog.run()
-                       if response != gtk.RESPONSE_OK:
-                               raise RuntimeError("Login Cancelled")
-
-                       username = self._usernameEntry.get_text()
-                       password = self._passwordEntry.get_text()
-               finally:
-                       self._dialog.hide()
-
-               itr = self._serviceCombo.get_active_iter()
-               serviceId = int(self._serviceList.get_value(itr, 0))
-               self._serviceList.clear()
-               return serviceId, username, password
-
-       def _on_loginbutton_clicked(self, *args):
-               self._dialog.response(gtk.RESPONSE_OK)
-
-       def _on_loginclose_clicked(self, *args):
-               self._dialog.response(gtk.RESPONSE_CANCEL)
-
-
 def safecall(f, errorDisplay=None, default=None, exception=Exception):
        '''
        Returns modified f. When the modified f is called and throws an
@@ -391,351 +216,3 @@ def safecall(f, errorDisplay=None, default=None, exception=Exception):
                                errorDisplay.push_exception(e)
                        return default
        return _safecall
-
-
-class ErrorDisplay(object):
-
-       def __init__(self, widgetTree):
-               super(ErrorDisplay, self).__init__()
-               self.__errorBox = widgetTree.get_widget("errorEventBox")
-               self.__errorDescription = widgetTree.get_widget("errorDescription")
-               self.__errorClose = widgetTree.get_widget("errorClose")
-               self.__parentBox = self.__errorBox.get_parent()
-
-               self.__errorBox.connect("button_release_event", self._on_close)
-
-               self.__messages = []
-               self.__parentBox.remove(self.__errorBox)
-
-       def push_message_with_lock(self, message):
-               with gtk_lock():
-                       self.push_message(message)
-
-       def push_message(self, message):
-               self.__messages.append(message)
-               if 1 == len(self.__messages):
-                       self.__show_message(message)
-
-       def push_exception_with_lock(self):
-               with gtk_lock():
-                       self.push_exception()
-
-       def push_exception(self):
-               userMessage = str(sys.exc_info()[1])
-               self.push_message(userMessage)
-               logging.exception(userMessage)
-
-       def pop_message(self):
-               del self.__messages[0]
-               if 0 == len(self.__messages):
-                       self.__hide_message()
-               else:
-                       self.__errorDescription.set_text(self.__messages[0])
-
-       def _on_close(self, *args):
-               self.pop_message()
-
-       def __show_message(self, message):
-               self.__errorDescription.set_text(message)
-               self.__parentBox.pack_start(self.__errorBox, False, False)
-               self.__parentBox.reorder_child(self.__errorBox, 1)
-
-       def __hide_message(self):
-               self.__errorDescription.set_text("")
-               self.__parentBox.remove(self.__errorBox)
-
-
-class DummyErrorDisplay(object):
-
-       def __init__(self):
-               super(DummyErrorDisplay, self).__init__()
-
-               self.__messages = []
-
-       def push_message_with_lock(self, message):
-               self.push_message(message)
-
-       def push_message(self, message):
-               if 0 < len(self.__messages):
-                       self.__messages.append(message)
-               else:
-                       self.__show_message(message)
-
-       def push_exception(self, exception = None):
-               userMessage = str(sys.exc_value)
-               logging.exception(userMessage)
-
-       def pop_message(self):
-               if 0 < len(self.__messages):
-                       self.__show_message(self.__messages[0])
-                       del self.__messages[0]
-
-       def __show_message(self, message):
-               logging.debug(message)
-
-
-class MessageBox(gtk.MessageDialog):
-
-       def __init__(self, message):
-               parent = None
-               gtk.MessageDialog.__init__(
-                       self,
-                       parent,
-                       gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
-                       gtk.MESSAGE_ERROR,
-                       gtk.BUTTONS_OK,
-                       message,
-               )
-               self.set_default_response(gtk.RESPONSE_OK)
-               self.connect('response', self._handle_clicked)
-
-       def _handle_clicked(self, *args):
-               self.destroy()
-
-
-class MessageBox2(gtk.MessageDialog):
-
-       def __init__(self, message):
-               parent = None
-               gtk.MessageDialog.__init__(
-                       self,
-                       parent,
-                       gtk.DIALOG_DESTROY_WITH_PARENT,
-                       gtk.MESSAGE_ERROR,
-                       gtk.BUTTONS_OK,
-                       message,
-               )
-               self.set_default_response(gtk.RESPONSE_OK)
-               self.connect('response', self._handle_clicked)
-
-       def _handle_clicked(self, *args):
-               self.destroy()
-
-
-class PopupCalendar(object):
-
-       def __init__(self, parent, displayDate, title = ""):
-               self._displayDate = displayDate
-
-               self._calendar = gtk.Calendar()
-               self._calendar.select_month(self._displayDate.month, self._displayDate.year)
-               self._calendar.select_day(self._displayDate.day)
-               self._calendar.set_display_options(
-                       gtk.CALENDAR_SHOW_HEADING |
-                       gtk.CALENDAR_SHOW_DAY_NAMES |
-                       gtk.CALENDAR_NO_MONTH_CHANGE |
-                       0
-               )
-               self._calendar.connect("day-selected", self._on_day_selected)
-
-               self._popupWindow = gtk.Window()
-               self._popupWindow.set_title(title)
-               self._popupWindow.add(self._calendar)
-               self._popupWindow.set_transient_for(parent)
-               self._popupWindow.set_modal(True)
-               self._popupWindow.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
-               self._popupWindow.set_skip_pager_hint(True)
-               self._popupWindow.set_skip_taskbar_hint(True)
-
-       def run(self):
-               self._popupWindow.show_all()
-
-       def _on_day_selected(self, *args):
-               try:
-                       self._calendar.select_month(self._displayDate.month, self._displayDate.year)
-                       self._calendar.select_day(self._displayDate.day)
-               except Exception, e:
-                       logging.exception(e)
-
-
-class QuickAddView(object):
-
-       def __init__(self, widgetTree, errorDisplay, signalSink, prefix):
-               self._errorDisplay = errorDisplay
-               self._manager = None
-               self._signalSink = signalSink
-
-               self._clipboard = gtk.clipboard_get()
-
-               self._taskNameEntry = widgetTree.get_widget(prefix+"-nameEntry")
-               self._addTaskButton = widgetTree.get_widget(prefix+"-addButton")
-               self._pasteTaskNameButton = widgetTree.get_widget(prefix+"-pasteNameButton")
-               self._clearTaskNameButton = widgetTree.get_widget(prefix+"-clearNameButton")
-               self._onAddId = None
-               self._onAddClickedId = None
-               self._onAddReleasedId = None
-               self._addToEditTimerId = None
-               self._onClearId = None
-               self._onPasteId = None
-
-       def enable(self, manager):
-               self._manager = manager
-
-               self._onAddId = self._addTaskButton.connect("clicked", self._on_add)
-               self._onAddClickedId = self._addTaskButton.connect("pressed", self._on_add_pressed)
-               self._onAddReleasedId = self._addTaskButton.connect("released", self._on_add_released)
-               self._onPasteId = self._pasteTaskNameButton.connect("clicked", self._on_paste)
-               self._onClearId = self._clearTaskNameButton.connect("clicked", self._on_clear)
-
-       def disable(self):
-               self._manager = None
-
-               self._addTaskButton.disconnect(self._onAddId)
-               self._addTaskButton.disconnect(self._onAddClickedId)
-               self._addTaskButton.disconnect(self._onAddReleasedId)
-               self._pasteTaskNameButton.disconnect(self._onPasteId)
-               self._clearTaskNameButton.disconnect(self._onClearId)
-
-       def set_addability(self, addability):
-               self._addTaskButton.set_sensitive(addability)
-
-       def _on_add(self, *args):
-               try:
-                       name = self._taskNameEntry.get_text()
-                       self._taskNameEntry.set_text("")
-
-                       self._signalSink.stage.send(("add", name))
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-       def _on_add_edit(self, *args):
-               try:
-                       name = self._taskNameEntry.get_text()
-                       self._taskNameEntry.set_text("")
-
-                       self._signalSink.stage.send(("add-edit", name))
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-       def _on_add_pressed(self, widget):
-               try:
-                       self._addToEditTimerId = gobject.timeout_add(1000, self._on_add_edit)
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-       def _on_add_released(self, widget):
-               try:
-                       if self._addToEditTimerId is not None:
-                               gobject.source_remove(self._addToEditTimerId)
-                       self._addToEditTimerId = None
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-       def _on_paste(self, *args):
-               try:
-                       entry = self._taskNameEntry.get_text()
-                       addedText = self._clipboard.wait_for_text()
-                       if addedText:
-                               entry += addedText
-                       self._taskNameEntry.set_text(entry)
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-       def _on_clear(self, *args):
-               try:
-                       self._taskNameEntry.set_text("")
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
-
-class TapOrHold(object):
-
-       def __init__(self, widget):
-               self._widget = widget
-               self._isTap = True
-               self._isPointerInside = True
-               self._holdTimeoutId = None
-               self._tapTimeoutId = None
-               self._taps = 0
-
-               self._bpeId = None
-               self._breId = None
-               self._eneId = None
-               self._lneId = None
-
-       def enable(self):
-               self._bpeId = self._widget.connect("button-press-event", self._on_button_press)
-               self._breId = self._widget.connect("button-release-event", self._on_button_release)
-               self._eneId = self._widget.connect("enter-notify-event", self._on_enter)
-               self._lneId = self._widget.connect("leave-notify-event", self._on_leave)
-
-       def disable(self):
-               self._widget.disconnect(self._bpeId)
-               self._widget.disconnect(self._breId)
-               self._widget.disconnect(self._eneId)
-               self._widget.disconnect(self._lneId)
-
-       def on_tap(self, taps):
-               print "TAP", taps
-
-       def on_hold(self, taps):
-               print "HOLD", taps
-
-       def on_holding(self):
-               print "HOLDING"
-
-       def on_cancel(self):
-               print "CANCEL"
-
-       def _on_button_press(self, *args):
-               # Hack to handle weird notebook behavior
-               self._isPointerInside = True
-               self._isTap = True
-
-               if self._tapTimeoutId is not None:
-                       gobject.source_remove(self._tapTimeoutId)
-                       self._tapTimeoutId = None
-
-               # Handle double taps
-               if self._holdTimeoutId is None:
-                       self._tapTimeoutId = None
-
-                       self._taps = 1
-                       self._holdTimeoutId = gobject.timeout_add(1000, self._on_hold_timeout)
-               else:
-                       self._taps = 2
-
-       def _on_button_release(self, *args):
-               assert self._tapTimeoutId is None
-               # Handle release after timeout if user hasn't double-clicked
-               self._tapTimeoutId = gobject.timeout_add(100, self._on_tap_timeout)
-
-       def _on_actual_press(self, *args):
-               if self._holdTimeoutId is not None:
-                       gobject.source_remove(self._holdTimeoutId)
-               self._holdTimeoutId = None
-
-               if self._isPointerInside:
-                       if self._isTap:
-                               self.on_tap(self._taps)
-                       else:
-                               self.on_hold(self._taps)
-               else:
-                       self.on_cancel()
-
-       def _on_tap_timeout(self, *args):
-               self._tapTimeoutId = None
-               self._on_actual_press()
-               return False
-
-       def _on_hold_timeout(self, *args):
-               self._holdTimeoutId = None
-               self._isTap = False
-               self.on_holding()
-               return False
-
-       def _on_enter(self, *args):
-               self._isPointerInside = True
-
-       def _on_leave(self, *args):
-               self._isPointerInside = False
-
-
-if __name__ == "__main__":
-       if False:
-               import datetime
-               cal = PopupCalendar(None, datetime.datetime.now())
-               cal._popupWindow.connect("destroy", lambda w: gtk.main_quit())
-               cal.run()
-
-       gtk.main()