return queue_sink(messages)
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):
class LoginWindow(object):
def __init__(self, widgetTree):
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.
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
gtkspell = None
import hildonize
gtkspell = None
import hildonize
self._noteslist.set_eventfunction_cursor_changed(self._update_noteslist)
self._noteslist.widget.set_size_request(250, -1)
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)
buttonHBox = gtk.HBox()
button = gtk.Button(stock = gtk.STOCK_ADD)
buttonHBox.pack_start(button, expand = True, fill = True, padding = 3)
listVbox = gtk.VBox(homogeneous = False, spacing = 0)
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)
listVbox.pack_start(buttonHBox, expand = False, fill = True, padding = 3)
self.pack_start(listVbox, expand = False, fill = True, padding = 3)
self._noteScrollWindow.add(self._noteBodyView)
hildonize.hildonize_scrollwindow_with_viewport(self._noteScrollWindow)
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)
# History
self._historyBox = gtk.HBox(homogeneous = False, spacing = 0)
# Note and history stuff in same column
noteVbox = gtk.VBox(homogeneous = False, spacing = 0)
# 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)
noteVbox.pack_start(self._historyBox, expand = False, fill = True, padding = 3)
self.pack_start(noteVbox, expand = True, fill = True, padding = 3)
self._noteBodyView.grab_focus()
return False
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 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):
try:
(pos, key, value) = self._noteslist.get_selection_data()
if (pos == -1):
gobject.timeout_add(200, self._set_focus)
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
def _on_note_changed(self, widget = None, data = None):
if self._pos == -1 or self.noteId == -1:
return
if value != title:
self._noteslist.change_item(self._pos, title, self.noteId)
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")
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
def _on_delete_note(self, widget = None, data = None):
if (self.noteId == -1):
return
self._pos = -1
self._noteBodyView.get_buffer().set_text("")
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."))
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."))
import constants
import hildonize
import constants
import hildonize
import speichern
import kopfzeile
import speichern
import kopfzeile
-_moduleLogger = logging.getLogger("quick")
+_moduleLogger = logging.getLogger("quicknote_gtk")
class QuicknoteProgram(hildonize.get_app_class()):
class QuicknoteProgram(hildonize.get_app_class()):
self._window = gtk.Window()
self._window.add(vbox)
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._on_toggle_word_wrap()
try:
os.makedirs(self._user_data)
try:
os.makedirs(self._user_data)
self._prepare_sync_dialog()
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()
self._window.show_all()
self._load_settings()
self._topBox.show()
self._notizen.show_history_area(True)
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
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
if save_unsaved_data or shutdown:
self._save_settings()
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
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)
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
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 ()
):
# 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)
# 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)
# 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)
def _on_view_sql_history(self, widget = None, data = None, data2 = None):
import sqldialog
sqldiag = sqldialog.SqlDialog(self._db)
+ @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))
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))
+ @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"))
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"))
self._topBox.categoryCombo.remove_text(pos)
self._topBox.categoryCombo.set_active(0)
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()
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()
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)
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
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()
def _on_destroy(self, widget = None, data = None):
try:
self._save_settings()
+ @gtk_toolbox.log_exception(_moduleLogger)
def _on_show_about(self, widget = None, data = None):
dialog = gtk.AboutDialog()
dialog.set_position(gtk.WIN_POS_CENTER)
def _on_show_about(self, widget = None, data = None):
dialog = gtk.AboutDialog()
dialog.set_position(gtk.WIN_POS_CENTER)
published by the Free Software Foundation.\r
"""\r
\r
published by the Free Software Foundation.\r
"""\r
\r
\r
import pango\r
import gtk\r
\r
import hildonize\r
\r
import pango\r
import gtk\r
\r
import hildonize\r
+_moduleLogger = logging.getLogger("simple_list")\r
+\r
+\r
class SimpleList(object):\r
"""\r
Stellt eine einfache Liste mit Laufbalken dar. Das wird mit\r
class SimpleList(object):\r
"""\r
Stellt eine einfache Liste mit Laufbalken dar. Das wird mit\r
self._itemlist = gtk.ListStore(str, str)\r
self._itemView = gtk.TreeView(self._itemlist)\r
self._itemView.set_headers_visible(False)\r
self._itemlist = gtk.ListStore(str, str)\r
self._itemView = gtk.TreeView(self._itemlist)\r
self._itemView.set_headers_visible(False)\r
- self._itemView.get_selection().set_mode(gtk.SELECTION_BROWSE)\r
+ self._itemView.get_selection().set_mode(gtk.SELECTION_SINGLE)\r
self._itemView.connect("cursor-changed", self._on_cursor_changed)\r
self._itemView.connect("row-activated", self._on_row_activated)\r
self._itemView.show()\r
self._itemView.connect("cursor-changed", self._on_cursor_changed)\r
self._itemView.connect("row-activated", self._on_row_activated)\r
self._itemView.show()\r
"""\r
\r
self._itemView.connect("cursor-changed", function)\r
"""\r
\r
self._itemView.connect("cursor-changed", function)\r
+ self._itemView.connect("row-activated", function)\r
+ @gtk_toolbox.log_exception(_moduleLogger)\r
def _on_row_activated(self, treeview, path, view_column, data = None):\r
"""\r
def _on_row_activated(self, treeview, path, view_column, data = None):\r
"""\r
- Setzt den Wert von self._selectedItems. Dieser Wert kann\r
- mit der Methode "get_selection_data" abgerufen werden.\r
+ Sets the value of self._selectedItems. This value can\r
+ be retrieved using the method "get_selection_data.\r
"""\r
\r
iter = self._itemlist.get_iter(path)\r
"""\r
\r
iter = self._itemlist.get_iter(path)\r
self._itemlist.get_value(iter, self.VALUE_IDX) # Value\r
)\r
\r
self._itemlist.get_value(iter, self.VALUE_IDX) # Value\r
)\r
\r
+ @gtk_toolbox.log_exception(_moduleLogger)\r
def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
"""\r
def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
"""\r
- Setzt den Wert von self._selectedItems. Dieser Wert kann\r
- mit der Methode "get_selection_data" abgerufen werden.\r
+ Sets the value of self._selectedItems. This value can\r
+ be retrieved using the method "get_selection_data.\r
"""\r
\r
selection = widget.get_selection()\r
"""\r
\r
selection = widget.get_selection()\r