X-Git-Url: http://git.maemo.org/git/?p=quicknote;a=blobdiff_plain;f=src%2Fnotizen.py;h=978ee28e2da47227326b23d94a6e21829dbc2b32;hp=19bf8d1a1511ff226a09c2f7b6160e3872c2af2f;hb=7161ab9f4f99c5eef4d490c070cb4caf864862b8;hpb=125b4fc6cc659ccd8ea0d83e4d7bc9e408cd35ed diff --git a/src/notizen.py b/src/notizen.py index 19bf8d1..978ee28 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 @@ -20,6 +23,8 @@ try: except ImportError: gtkspell = None +import hildonize +import gtk_toolbox import simple_list @@ -29,14 +34,16 @@ except NameError: _ = lambda x: x -_moduleLogger = logging.getLogger("notizen") +_moduleLogger = logging.getLogger(__name__) class Notizen(gtk.HBox): - def __init__(self, db, topBox): + def __init__(self, db, category, search): self._db = db - self._topBox = topBox + self._category = category + self._search = search + self._search.connect("hide", self._on_search_close) self.noteId = -1 self._pos = -1 self._noteBody = None #Last notetext @@ -45,19 +52,12 @@ class Notizen(gtk.HBox): gtk.HBox.__init__(self, homogeneous = False, spacing = 0) _moduleLogger.info("libnotizen, init") + # Note list self._noteslist = simple_list.SimpleList() self._noteslist.set_eventfunction_cursor_changed(self._update_noteslist) - - self._noteslist.set_size_request(250, -1) - - vbox = gtk.VBox(homogeneous = False, spacing = 0) - - frame = gtk.Frame(_("Titles")) - frame.add(self._noteslist) - vbox.pack_start(frame, expand = True, fill = True, padding = 3) + self._noteslist.widget.set_size_request(250, -1) buttonHBox = gtk.HBox() - vbox.pack_start(buttonHBox, expand = False, fill = True, padding = 3) button = gtk.Button(stock = gtk.STOCK_ADD) button.connect("clicked", self._on_add_note, None) @@ -67,8 +67,13 @@ class Notizen(gtk.HBox): button.connect("clicked", self._on_delete_note, None) buttonHBox.pack_start(button, expand = True, fill = True, padding = 3) - self.pack_start(vbox, expand = False, fill = True, padding = 3) + listVbox = gtk.VBox(homogeneous = False, spacing = 0) + listVbox.pack_start(self._category, expand = False, 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) + # Note view self._noteBodyView = gtk.TextView() self._noteBodyView.connect("focus-out-event", self.save_note, "focus-out-event") buf = self._noteBodyView.get_buffer() @@ -79,33 +84,19 @@ class Notizen(gtk.HBox): else: self._noteBodySpellChecker = None - #self.textviewNotiz.set_size_request(-1, 50) self._noteScrollWindow = gtk.ScrolledWindow() self._noteScrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self._noteScrollWindow.add(self._noteBodyView) + hildonize.hildonize_scrollwindow_with_viewport(self._noteScrollWindow) - frame = gtk.Frame(_("Note")) - frame.add(self._noteScrollWindow) - - vbox = gtk.VBox(homogeneous = False, spacing = 0) - vbox.pack_start(frame, expand = True, fill = True, padding = 3) - - self._historyBox = gtk.HBox(homogeneous = False, spacing = 0) - - self._historyStatusLabel = gtk.Label(_("No History")) - self._historyStatusLabel.set_alignment(0.0, 0.5) - self._historyBox.pack_start(self._historyStatusLabel, expand = True, fill = True, padding = 3) - - button = gtk.Button(_("History")) - button.connect("clicked", self._on_show_history, None) - self._historyBox.pack_start(button, expand = True, fill = True, padding = 3) - - vbox.pack_start(self._historyBox, expand = False, fill = True, padding = 3) - - self.pack_start(vbox, expand = True, fill = True, padding = 3) + # Note and history stuff in same column + noteVbox = gtk.VBox(homogeneous = False, spacing = 0) + noteVbox.pack_start(self._noteScrollWindow, expand = True, fill = True, padding = 3) + self.pack_start(noteVbox, expand = True, fill = True, padding = 3) self.load_notes() - self._topBox.connect("reload_notes", self.load_notes) + self._category.connect("category_changed", self.load_notes) + self._search.connect("search_changed", self.load_notes) def set_wordwrap(self, enableWordWrap): if enableWordWrap: @@ -115,19 +106,12 @@ class Notizen(gtk.HBox): self._noteScrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self._noteBodyView.set_wrap_mode(gtk.WRAP_NONE) - def show_history_area(self, visible): - if visible: - self._historyBox.show() - else: - self._historyBox.hide() - def load_notes(self, data = None): _moduleLogger.info("load_notes params: pos:"+str(self._pos)+" noteid:"+str(self.noteId)) self._noteslist.clear_items() - self._noteslist.append_item(_("New Note..."), "new") - self._categoryName = self._topBox.get_category() - search = self._topBox.get_search_pattern() + self._categoryName = self._category.get_queryable_category() + search = self._search.get_search_pattern() notes = self._db.searchNotes(search, self._categoryName) if notes is not None: @@ -150,17 +134,53 @@ class Notizen(gtk.HBox): if buf == self._noteBody: return - _moduleLogger.info("Saving note: "+buf) + title = self._get_title(buf) + _moduleLogger.info("Saving note: " + title) if self._pos == -1 or self.noteId == -1: self._pos = -1 self.noteId = str(uuid.uuid4()) self._db.saveNote(self.noteId, buf, self._categoryName) - self._noteslist.append_item(self._get_title(buf), self.noteId) + self._noteslist.append_item(title, self.noteId) self._pos = self._noteslist.select_last_item() else: self._db.saveNote(self.noteId, buf, self._categoryName) - self._topBox.define_this_category() + def show_history(self, *args): + if self.noteId == -1: + mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, _("No note selected.")) + response = mbox.run() + mbox.hide() + mbox.destroy() + return + + rows = self._db.getNoteHistory(self.noteId) + + import history + dialog = history.HistorySelectionDialog() + + lastNoteStr = "" + for row in rows: + daten = row[4][1] + if daten != "" and lastNoteStr != daten: + lastNoteStr = daten + dialog.noteHistory.append([row[0], row[1], row[2], row[3], daten+"\n"]) + + dialog.vbox.show_all() + dialog.set_size_request(600, 380) + + try: + userResponse = dialog.run() + + if userResponse == gtk.RESPONSE_ACCEPT: + self.save_note() + data = dialog.get_selected_row() + if data is not None: + self._db.speichereSQL(data[2], data[3].split(" <> "), rowid = self.noteId) + _moduleLogger.info("loading History") + self._update_noteslist() + + finally: + dialog.destroy() def _get_title(self, buf): """ @@ -176,13 +196,18 @@ 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): + if pos == -1: return except StandardError: if data != "new": @@ -200,12 +225,17 @@ class Notizen(gtk.HBox): else: self._pos = pos self.noteId, pcdatum, self._categoryName, self._noteBody = self._db.loadNote(key) - self._historyStatusLabel.set_text(time.strftime(_("Last change: %d.%m.%y %H:%M"), time.localtime(pcdatum))) buf = self._noteBodyView.get_buffer() buf.set_text(self._noteBody) gobject.timeout_add(200, self._set_focus) + @gtk_toolbox.log_exception(_moduleLogger) + def _on_search_close(self, *args): + if self.noteId != -1: + self._noteBodyView.grab_focus() + + @gtk_toolbox.log_exception(_moduleLogger) def _on_note_changed(self, widget = None, data = None): if self._pos == -1 or self.noteId == -1: return @@ -218,53 +248,31 @@ 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): + if self.noteId == -1: return - mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, _("Really delete?")) - response = mbox.run() - mbox.hide() - mbox.destroy() - if response == gtk.RESPONSE_YES: + + doDeletion = False + if self._noteBodyView.get_buffer().get_char_count() == 0: + doDeletion = True + else: + mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, _("Really delete?")) + try: + response = mbox.run() + finally: + mbox.hide() + mbox.destroy() + + doDeletion = response == gtk.RESPONSE_YES + + if doDeletion: self._db.delNote(self.noteId) self.noteId = -1 self._noteslist.remove_item(self._pos) self._pos = -1 self._noteBodyView.get_buffer().set_text("") - - 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.")) - response = mbox.run() - mbox.hide() - mbox.destroy() - return - - rows = self._db.getNoteHistory(self.noteId) - - import history - dialog = history.Dialog() - - lastNoteStr = "" - for row in rows: - daten = row[4][1] - if daten != "" and lastNoteStr != daten: - lastNoteStr = daten - dialog.noteHistory.append([row[0], row[1], row[2], row[3], daten+"\n"]) - - dialog.vbox.show_all() - dialog.set_size_request(600, 380) - - if dialog.run() == gtk.RESPONSE_ACCEPT: - print "saving" - self.save_note() - data = dialog.get_selected_row() - if data is not None: - self._db.speichereSQL(data[2], data[3].split(" <> "), rowid = self.noteId) - _moduleLogger.info("loading History") - self._update_noteslist() - - dialog.destroy()