From: epage Date: Wed, 11 Nov 2009 01:46:07 +0000 (+0000) Subject: The mess of things to get this to work for Fremantle X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;ds=sidebyside;h=bafaf4ec19e7a31266938e343894b5092f947f2b;p=quicknote The mess of things to get this to work for Fremantle git-svn-id: file:///svnroot/quicknote/trunk@72 bb7704e3-badb-4cfa-9ab3-9374dc87eaa2 --- diff --git a/src/gtk_toolbox.py b/src/gtk_toolbox.py index a2a2e2a..b81d444 100644 --- a/src/gtk_toolbox.py +++ b/src/gtk_toolbox.py @@ -284,6 +284,22 @@ def threaded_stage(target, thread_factory = threading.Thread): return queue_sink(messages) +def log_exception(logger): + + def log_exception_decorator(func): + + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except Exception: + logger.exception(func.__name__) + + return wrapper + + return log_exception_decorator + + class LoginWindow(object): def __init__(self, widgetTree): diff --git a/src/notizen.py b/src/notizen.py index ccac21a..57b0b3d 100644 --- a/src/notizen.py +++ b/src/notizen.py @@ -7,6 +7,9 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. + +@todo It would be nice to move the category selector to the category list's column and search below everything. +@todo Search would be activated by menu or CTRL+F rather than zoom """ import time @@ -21,6 +24,7 @@ except ImportError: gtkspell = None import hildonize +import gtk_toolbox import simple_list @@ -51,9 +55,6 @@ class Notizen(gtk.HBox): self._noteslist.set_eventfunction_cursor_changed(self._update_noteslist) self._noteslist.widget.set_size_request(250, -1) - frame = gtk.Frame(_("Titles")) - frame.add(self._noteslist.widget) - buttonHBox = gtk.HBox() button = gtk.Button(stock = gtk.STOCK_ADD) @@ -65,7 +66,7 @@ class Notizen(gtk.HBox): buttonHBox.pack_start(button, expand = True, fill = True, padding = 3) listVbox = gtk.VBox(homogeneous = False, spacing = 0) - listVbox.pack_start(frame, expand = True, fill = True, padding = 3) + listVbox.pack_start(self._noteslist.widget, expand = True, fill = True, padding = 3) listVbox.pack_start(buttonHBox, expand = False, fill = True, padding = 3) self.pack_start(listVbox, expand = False, fill = True, padding = 3) @@ -85,9 +86,6 @@ class Notizen(gtk.HBox): self._noteScrollWindow.add(self._noteBodyView) hildonize.hildonize_scrollwindow_with_viewport(self._noteScrollWindow) - frame = gtk.Frame(_("Note")) - frame.add(self._noteScrollWindow) - # History self._historyBox = gtk.HBox(homogeneous = False, spacing = 0) @@ -101,7 +99,7 @@ class Notizen(gtk.HBox): # Note and history stuff in same column noteVbox = gtk.VBox(homogeneous = False, spacing = 0) - noteVbox.pack_start(frame, expand = True, fill = True, padding = 3) + noteVbox.pack_start(self._noteScrollWindow, expand = True, fill = True, padding = 3) noteVbox.pack_start(self._historyBox, expand = False, fill = True, padding = 3) self.pack_start(noteVbox, expand = True, fill = True, padding = 3) @@ -177,10 +175,15 @@ class Notizen(gtk.HBox): self._noteBodyView.grab_focus() return False - def _update_noteslist(self, data = None, data2 = None): + def _update_noteslist(self, *args): if self._pos != -1: self.save_note() + if args: + data = args[0] + else: + data = None + try: (pos, key, value) = self._noteslist.get_selection_data() if (pos == -1): @@ -207,6 +210,7 @@ class Notizen(gtk.HBox): gobject.timeout_add(200, self._set_focus) + @gtk_toolbox.log_exception(_moduleLogger) def _on_note_changed(self, widget = None, data = None): if self._pos == -1 or self.noteId == -1: return @@ -219,9 +223,11 @@ class Notizen(gtk.HBox): if value != title: self._noteslist.change_item(self._pos, title, self.noteId) + @gtk_toolbox.log_exception(_moduleLogger) def _on_add_note(self, widget = None, data = None): self._update_noteslist("new") + @gtk_toolbox.log_exception(_moduleLogger) def _on_delete_note(self, widget = None, data = None): if (self.noteId == -1): return @@ -236,6 +242,7 @@ class Notizen(gtk.HBox): self._pos = -1 self._noteBodyView.get_buffer().set_text("") + @gtk_toolbox.log_exception(_moduleLogger) def _on_show_history(self, widget = None, data = None, label = None): if self.noteId == -1: mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, _("No note selected.")) diff --git a/src/quicknote_gtk.py b/src/quicknote_gtk.py index b03209e..4b71552 100644 --- a/src/quicknote_gtk.py +++ b/src/quicknote_gtk.py @@ -35,6 +35,7 @@ except ImportError: import constants import hildonize +import gtk_toolbox import speichern import kopfzeile @@ -48,7 +49,7 @@ except NameError: _ = lambda x: x -_moduleLogger = logging.getLogger("quick") +_moduleLogger = logging.getLogger("quicknote_gtk") class QuicknoteProgram(hildonize.get_app_class()): @@ -152,12 +153,8 @@ class QuicknoteProgram(hildonize.get_app_class()): self._window = gtk.Window() self._window.add(vbox) - self._window.connect("delete-event", self._on_delete_event) - self._window.connect("destroy", self._on_destroy) - self._window.connect("key-press-event", self._on_key_press) - self._window.connect("window-state-event", self._on_window_state_change) - self._on_toggle_word_wrap() + self.enable_zoom(True) try: os.makedirs(self._user_data) @@ -188,6 +185,11 @@ class QuicknoteProgram(hildonize.get_app_class()): self._prepare_sync_dialog() + self._window.connect("delete-event", self._on_delete_event) + self._window.connect("destroy", self._on_destroy) + self._window.connect("key-press-event", self._on_key_press) + self._window.connect("window-state-event", self._on_window_state_change) + self._window.show_all() self._load_settings() @@ -269,6 +271,7 @@ class QuicknoteProgram(hildonize.get_app_class()): self._topBox.show() self._notizen.show_history_area(True) + @gtk_toolbox.log_exception(_moduleLogger) def _on_device_state_change(self, shutdown, save_unsaved_data, memory_low, system_inactivity, message, userData): """ For system_inactivity, we have no background tasks to pause @@ -281,30 +284,40 @@ class QuicknoteProgram(hildonize.get_app_class()): if save_unsaved_data or shutdown: self._save_settings() + @gtk_toolbox.log_exception(_moduleLogger) def _on_window_state_change(self, widget, event, *args): if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN: self._window_in_fullscreen = True else: self._window_in_fullscreen = False + @gtk_toolbox.log_exception(_moduleLogger) def _on_key_press(self, widget, event, *args): RETURN_TYPES = (gtk.keysyms.Return, gtk.keysyms.ISO_Enter, gtk.keysyms.KP_Enter) + isCtrl = bool(event.get_state() & gtk.gdk.CONTROL_MASK) if ( event.keyval == gtk.keysyms.F6 or - event.keyval in RETURN_TYPES and event.get_state() & gtk.gdk.CONTROL_MASK + event.keyval in RETURN_TYPES and isCtrl ): # The "Full screen" hardware key has been pressed if self._window_in_fullscreen: self._window.unfullscreen () else: self._window.fullscreen () - elif event.keyval == gtk.keysyms.F7: + elif ( + event.keyval == gtk.keysyms.F7 or + event.keyval == gtk.keysyms.i and isCtrl + ): # Zoom In self.enable_zoom(True) - elif event.keyval == gtk.keysyms.F8: + elif ( + event.keyval == gtk.keysyms.F8 or + event.keyval == gtk.keysyms.o and isCtrl + ): # Zoom Out self.enable_zoom(False) + @gtk_toolbox.log_exception(_moduleLogger) def _on_view_sql_history(self, widget = None, data = None, data2 = None): import sqldialog sqldiag = sqldialog.SqlDialog(self._db) @@ -323,6 +336,7 @@ class QuicknoteProgram(hildonize.get_app_class()): sqldiag.destroy() + @gtk_toolbox.log_exception(_moduleLogger) def _on_move_category(self, widget = None, data = None): dialog = gtk.Dialog(_("Choose category"), self._window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) @@ -361,6 +375,7 @@ class QuicknoteProgram(hildonize.get_app_class()): dialog.destroy() + @gtk_toolbox.log_exception(_moduleLogger) def _on_delete_category(self, widget = None, data = None): if self._topBox.get_category() == "%" or self._topBox.get_category() == "undefined": mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("This category can not be deleted")) @@ -384,21 +399,26 @@ class QuicknoteProgram(hildonize.get_app_class()): self._topBox.categoryCombo.remove_text(pos) self._topBox.categoryCombo.set_active(0) + @gtk_toolbox.log_exception(_moduleLogger) def _on_sync_finished(self, data = None, data2 = None): self._topBox.load_categories() self._notizen.load_notes() + @gtk_toolbox.log_exception(_moduleLogger) def _on_sync_notes(self, widget = None, data = None): self._syncDialog.run() self._syncDialog.hide() + @gtk_toolbox.log_exception(_moduleLogger) def _on_toggle_word_wrap(self, *args): self._wordWrapEnabled = not self._wordWrapEnabled self._notizen.set_wordwrap(self._wordWrapEnabled) + @gtk_toolbox.log_exception(_moduleLogger) def _on_delete_event(self, widget, event, data = None): return False + @gtk_toolbox.log_exception(_moduleLogger) def _on_destroy(self, widget = None, data = None): try: self._save_settings() @@ -408,6 +428,7 @@ class QuicknoteProgram(hildonize.get_app_class()): finally: gtk.main_quit() + @gtk_toolbox.log_exception(_moduleLogger) def _on_show_about(self, widget = None, data = None): dialog = gtk.AboutDialog() dialog.set_position(gtk.WIN_POS_CENTER) diff --git a/src/simple_list.py b/src/simple_list.py index 04bedf8..5858e70 100644 --- a/src/simple_list.py +++ b/src/simple_list.py @@ -9,11 +9,13 @@ it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. """ +import logging import pango import gtk import hildonize +import gtk_toolbox try: @@ -22,6 +24,9 @@ except NameError: _ = lambda x: x +_moduleLogger = logging.getLogger("simple_list") + + class SimpleList(object): """ Stellt eine einfache Liste mit Laufbalken dar. Das wird mit @@ -41,7 +46,7 @@ class SimpleList(object): self._itemlist = gtk.ListStore(str, str) self._itemView = gtk.TreeView(self._itemlist) self._itemView.set_headers_visible(False) - self._itemView.get_selection().set_mode(gtk.SELECTION_BROWSE) + self._itemView.get_selection().set_mode(gtk.SELECTION_SINGLE) self._itemView.connect("cursor-changed", self._on_cursor_changed) self._itemView.connect("row-activated", self._on_row_activated) self._itemView.show() @@ -121,11 +126,13 @@ class SimpleList(object): """ self._itemView.connect("cursor-changed", function) + self._itemView.connect("row-activated", function) + @gtk_toolbox.log_exception(_moduleLogger) def _on_row_activated(self, treeview, path, view_column, data = None): """ - Setzt den Wert von self._selectedItems. Dieser Wert kann - mit der Methode "get_selection_data" abgerufen werden. + Sets the value of self._selectedItems. This value can + be retrieved using the method "get_selection_data. """ iter = self._itemlist.get_iter(path) @@ -138,10 +145,11 @@ class SimpleList(object): self._itemlist.get_value(iter, self.VALUE_IDX) # Value ) + @gtk_toolbox.log_exception(_moduleLogger) def _on_cursor_changed(self, widget, data1 = None, data2 = None): """ - Setzt den Wert von self._selectedItems. Dieser Wert kann - mit der Methode "get_selection_data" abgerufen werden. + Sets the value of self._selectedItems. This value can + be retrieved using the method "get_selection_data. """ selection = widget.get_selection()