1 #!/usr/bin/env python2.5
2 # -*- coding: utf-8 -*-
5 Copyright (C) 2007 Christoph Würstle
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation.
11 @todo Add hiding of the history button on zoom
30 class Notizen(gtk.HBox):
32 def __init__(self, db, topBox):
37 self.note = None #Last notetext
40 gtk.HBox.__init__(self, homogeneous = False, spacing = 0)
41 logging.info("libnotizen, init")
43 self.noteslist = simple_list.SimpleList()
44 self.noteslist.set_eventfunction__cursor_changed(self.noteslist_changed)
46 self.noteslist.set_size_request(250, -1)
48 vbox = gtk.VBox(homogeneous = False, spacing = 0)
50 frame = gtk.Frame(_("Titles"))
51 frame.add(self.noteslist)
52 vbox.pack_start(frame, expand = True, fill = True, padding = 3)
54 buttonHBox = gtk.HBox()
55 vbox.pack_start(buttonHBox, expand = False, fill = True, padding = 3)
57 button = gtk.Button(stock = gtk.STOCK_ADD)
58 button.connect("clicked", self.add_note, None)
59 buttonHBox.pack_start(button, expand = True, fill = True, padding = 3)
61 button = gtk.Button(stock = gtk.STOCK_DELETE)
62 button.connect("clicked", self.del_note, None)
63 buttonHBox.pack_start(button, expand = True, fill = True, padding = 3)
65 self.pack_start(vbox, expand = False, fill = True, padding = 3)
67 self.textviewNote = gtk.TextView()
68 self.textviewNote.connect("focus-out-event", self.saveNote, "focus-out-event")
69 buf = self.textviewNote.get_buffer()
71 buf.connect("changed", self.noteChanged, None)
73 #self.textviewNotiz.set_size_request(-1, 50)
74 self.scrolled_window = gtk.ScrolledWindow()
75 self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
76 self.scrolled_window.add(self.textviewNote)
78 frame = gtk.Frame(_("Note"))
79 frame.add(self.scrolled_window)
81 vbox = gtk.VBox(homogeneous = False, spacing = 0)
82 vbox.pack_start(frame, expand = True, fill = True, padding = 3)
84 hbox = gtk.HBox(homogeneous = False, spacing = 0)
86 self.statuslabel = gtk.Label("Test")
87 self.statuslabel.set_alignment(0.0, 0.5)
88 hbox.pack_start(self.statuslabel, expand = True, fill = True, padding = 3)
90 button = gtk.Button(_("History"))
91 button.connect("clicked", self.show_history, None)
92 hbox.pack_start(button, expand = True, fill = True, padding = 3)
94 vbox.pack_start(hbox, expand = False, fill = True, padding = 3)
96 self.pack_start(vbox, expand = True, fill = True, padding = 3)
99 self.topBox.connect("reload_notes", self.loadNotes)
101 def set_wordwrap(self, enableWordWrap):
103 self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
104 self.textviewNote.set_wrap_mode(gtk.WRAP_WORD)
106 self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
107 self.textviewNote.set_wrap_mode(gtk.WRAP_NONE)
109 def getTitle(self, buf):
116 def noteChanged(self, widget = None, data = None):
117 if self.pos == -1 or self.noteid == -1:
120 buf = self.textviewNote.get_buffer().get_text(self.textviewNote.get_buffer().get_start_iter(), self.textviewNote.get_buffer().get_end_iter())
122 title = self.getTitle(buf)
123 value, key = self.noteslist.get_item(self.pos)
126 self.noteslist.change_item(self.pos, title, self.noteid)
128 def saveNote(self, widget = None, data = None, data2 = None):
129 logging.info("saveNote params: pos:"+str(self.pos)+" noteid:"+str(self.noteid))
130 #print "params:", data, data2
131 buf = self.textviewNote.get_buffer().get_text(self.textviewNote.get_buffer().get_start_iter(), self.textviewNote.get_buffer().get_end_iter())
132 if buf is None or len(buf) == 0:
138 logging.info("Saving note: "+buf)
139 if self.pos == -1 or self.noteid == -1:
141 self.noteid = str(uuid.uuid4())
142 self.db.saveNote(self.noteid, buf, self.category)
143 self.noteslist.append_item(self.getTitle(buf), self.noteid)
144 self.pos = self.noteslist.select_last_item()
146 self.db.saveNote(self.noteid, buf, self.category)
148 self.topBox.defineThisCategory()
151 self.textviewNote.grab_focus()
154 def noteslist_changed(self, data = None, data2 = None):
159 (pos, key, value) = self.noteslist.get_selection_data()
162 except StandardError:
167 if key == "new" or data == "new":
168 #both methods supported click add note or new note (first one disabled)
169 self.noteid = str(uuid.uuid4())
170 self.db.saveNote(self.noteid, "", self.category)
172 self.noteslist.append_item("", self.noteid)
173 self.textviewNote.get_buffer().set_text("")
174 self.pos = self.noteslist.select_last_item()
177 self.noteid, pcdatum, self.category, self.note = self.db.loadNote(key)
178 self.statuslabel.set_text(time.strftime(_("Last change: %d.%m.%y %H:%M"), time.localtime(pcdatum)))
179 buf = self.textviewNote.get_buffer()
180 buf.set_text(self.note)
182 gobject.timeout_add(200, self.setFocus)
184 def add_note(self, widget = None, data = None):
185 self.noteslist_changed("new")
187 def del_note(self, widget = None, data = None):
188 if (self.noteid == -1):
190 mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, _("Really delete?"))
191 response = mbox.run()
194 if response == gtk.RESPONSE_YES:
195 self.db.delNote(self.noteid)
197 self.noteslist.remove_item(self.pos)
199 self.textviewNote.get_buffer().set_text("")
201 def loadNotes(self, data = None):
202 logging.info("loadNotes params: pos:"+str(self.pos)+" noteid:"+str(self.noteid))
203 self.noteslist.clear_items()
204 self.noteslist.append_item(_("new Note"), "new")
206 self.category = self.topBox.getCategory()
207 search = self.topBox.getSearchPattern()
208 notes = self.db.searchNotes(search, self.category)
210 if notes is not None:
212 noteid, category, noteText = note
213 title = self.getTitle(noteText)
214 self.noteslist.append_item(title, noteid)
218 self.textviewNote.get_buffer().set_text("")
220 def show_history(self, widget = None, data = None, label = None):
221 if self.noteid == -1:
222 mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, _("No note selected."))
223 response = mbox.run()
228 rows = self.db.getNoteHistory(self.noteid)
231 dialog = libhistory.Dialog()
236 if daten != "" and lastNoteStr != daten:
238 dialog.noteHistory.append([row[0], row[1], row[2], row[3], daten+"\n"])
240 dialog.vbox.show_all()
241 dialog.set_size_request(600, 380)
243 if dialog.run() == gtk.RESPONSE_ACCEPT:
246 data = dialog.get_selected_row()
248 self.db.speichereSQL(data[2], data[3].split(" <<Tren-ner>> "), rowid = self.noteid)
249 logging.info("loading History")
250 self.noteslist_changed()