<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Fri Apr 17 17:00:44 2009 -->
+<!--Generated with glade3 3.4.5 on Mon Apr 20 18:51:41 2009 -->
<glade-interface>
<widget class="GtkWindow" id="mainWindow">
<property name="default_width">800</property>
<property name="use_stock">True</property>
</widget>
</child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="preferencesMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">gtk-preferences</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
</widget>
</child>
</widget>
</widget>
</child>
</widget>
+ <widget class="GtkDialog" id="preferencesDialog">
+ <property name="border_width">5</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkVBox" id="prefsBackendLayout">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkComboBox" id="prefsBackendSelector">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="prefsBackendTabLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Backend</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="cancelPrefsButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="applyPrefsButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-apply</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</glade-interface>
self._clipboard = gtk.clipboard_get()
self.__window = self._widgetTree.get_widget("mainWindow")
self.__errorDisplay = gtk_toolbox.ErrorDisplay(self._widgetTree)
+ self._prefsDialog = gtk_toolbox.PreferencesDialog(self._widgetTree)
self._app = None
self._isFullScreen = False
"on_about": self._on_about_activate,
}
self._widgetTree.signal_autoconnect(callbackMapping)
- self._widgetTree.get_widget("connectMenuItem").connect("activate", lambda *args: self._switch_ui(self._defaultUIName))
+ self._widgetTree.get_widget("connectMenuItem").connect("activate", lambda *args: self.switch_ui(self._defaultUIName))
+ self._widgetTree.get_widget("preferencesMenuItem").connect("activate", self._on_prefs)
if self.__window:
if hildon is None:
)
try:
- self._switch_ui(activeUIName)
+ self.switch_ui(activeUIName)
except KeyError, e:
- self._switch_ui(self._defaultUIName)
+ self.switch_ui(self._defaultUIName)
def save_settings(self, config):
"""
for todoUI in self._todoUIs.itervalues():
todoUI.save_settings(config)
- def _switch_ui(self, uiName):
+ def get_uis(self):
+ return (ui for ui in self._todoUIs.iteritems())
+
+ def get_default_ui(self):
+ return self._defaultUIName
+
+ def switch_ui(self, uiName):
"""
@note UI Thread
"""
if status == conic.STATUS_CONNECTED:
self._deviceIsOnline = True
- self._switch_ui(self._defaultUIName)
+ self.switch_ui(self._defaultUIName)
elif status == conic.STATUS_DISCONNECTED:
self._deviceIsOnline = False
- self._switch_ui(self._fallbackUIName)
+ self.switch_ui(self._fallbackUIName)
def _on_window_state_change(self, widget, event, *args):
"""
def _on_logout(self, *args):
self._todoUI.logout()
- self._switch_ui(self._fallbackUIName)
+ self.switch_ui(self._fallbackUIName)
+
+ def _on_prefs(self, *args):
+ self._prefsDialog.enable()
+ try:
+ self._prefsDialog.run(self)
+ finally:
+ self._prefsDialog.disable()
def _on_about_activate(self, *args):
dlg = gtk.AboutDialog()
def disable(self):
self._addButton.disconnect(self._onAddId)
self._saveButton.disconnect(self._onSaveId)
- self._cancelButton.disconnect(self._onAddId)
+ self._cancelButton.disconnect(self._onCancelId)
def run(self, todoManager, taskId, parentWindow = None):
if parentWindow is not None:
self._pasteTaskNameButton.disconnect(self._onPasteTaskId)
self._clearDueDate.disconnect(self._onClearDueDateId)
self._addButton.disconnect(self._onAddId)
- self._cancelButton.disconnect(self._onAddId)
+ self._cancelButton.disconnect(self._onCancelId)
self._projectsList.clear()
self._projectCombo.set_model(None)
self._dialog.response(gtk.RESPONSE_CANCEL)
+class PreferencesDialog(object):
+
+ def __init__(self, widgetTree):
+ self._backendList = gtk.ListStore(gobject.TYPE_STRING)
+ self._backendCell = gtk.CellRendererText()
+
+ self._dialog = widgetTree.get_widget("preferencesDialog")
+ self._backendSelector = widgetTree.get_widget("prefsBackendSelector")
+ self._applyButton = widgetTree.get_widget("applyPrefsButton")
+ self._cancelButton = widgetTree.get_widget("cancelPrefsButton")
+
+ self._onApplyId = None
+ self._onCancelId = None
+
+ def enable(self):
+ self._dialog.set_default_size(800, 300)
+ self._onApplyId = self._applyButton.connect("clicked", self._on_apply_clicked)
+ self._onCancelId = self._cancelButton.connect("clicked", self._on_cancel_clicked)
+
+ cell = self._backendCell
+ self._backendSelector.pack_start(cell, True)
+ self._backendSelector.add_attribute(cell, 'text', 0)
+ self._backendSelector.set_model(self._backendList)
+
+ def disable(self):
+ self._applyButton.disconnect(self._onApplyId)
+ self._cancelButton.disconnect(self._onCancelId)
+
+ self._backendList.clear()
+ self._backendSelector.set_model(None)
+
+ def run(self, app, parentWindow = None):
+ if parentWindow is not None:
+ self._dialog.set_transient_for(parentWindow)
+
+ self._backendList.clear()
+ activeIndex = 0
+ for i, (uiName, ui) in enumerate(app.get_uis()):
+ self._backendList.append((uiName, ))
+ if uiName == app.get_default_ui():
+ activeIndex = i
+ self._backendSelector.set_active(activeIndex)
+
+ try:
+ response = self._dialog.run()
+ if response != gtk.RESPONSE_OK:
+ raise RuntimeError("Edit Cancelled")
+ finally:
+ self._dialog.hide()
+
+ backendName = self._backendSelector.get_active_text()
+ app.switch_ui(backendName)
+
+ def _on_apply_clicked(self, *args):
+ self._dialog.response(gtk.RESPONSE_OK)
+
+ def _on_cancel_clicked(self, *args):
+ self._dialog.response(gtk.RESPONSE_CANCEL)
+
+
if __name__ == "__main__":
if True:
win = gtk.Window()
self._todoItemScroll.hide_all()
self._itemList.clear()
- self._itemList.set_model(None)
+ self._todoItemTree.set_model(None)
def reset_task_list(self, projId):
self._projId = projId
self._projectsList = gtk.ListStore(gobject.TYPE_STRING)
self._projectsCombo = widgetTree.get_widget("projectsCombo")
+ self._projectCell = gtk.CellRendererText()
self._onListActivateId = 0
self._itemView = ItemListView(widgetTree, self._errorDisplay)
"""
self._projectsList.clear()
self._populate_projects()
+ cell = self._projectCell
+ self._projectsCombo.pack_start(cell, True)
+ self._projectsCombo.add_attribute(cell, 'text', 0)
currentProject = self._get_project()
projId = self._manager.lookup_project(currentProject)["id"]
@note UI Thread
"""
self._projectsCombo.disconnect(self._onListActivateId)
+ self._onListActivateId = 0
self._addView.disable()
self._itemView.disable()
self._projectsList.clear()
self._projectsCombo.set_model(None)
- self._projectsCombo.disconnect("changed", self._on_list_activate)
-
- self._manager = None
def _populate_projects(self):
projects = self._manager.get_projects()
if isVisible:
self._projectsList.append(row)
self._projectsCombo.set_model(self._projectsList)
- cell = gtk.CellRendererText()
- self._projectsCombo.pack_start(cell, True)
- self._projectsCombo.add_attribute(cell, 'text', 0)
self._projectsCombo.set_active(0)
def _reset_task_list(self):