Tagging the pre-epage code
[quicknote] / src / quicknoteclasses / libnotizen.py
1 #!/usr/bin/env python2.5
2 # -*- coding: utf-8 -*-
3  
4 """
5  *
6  *  Copyright (C) 2007 Christoph Würstle
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  *
13 """
14  
15 import gobject
16 import time
17 import random
18 import logging
19
20 import gtk
21
22 import libspeichern
23 import simple_list
24 import uuid
25 import string
26
27
28
29 class Notizen(gtk.HBox):
30
31         def getTitle(self,buf):
32                 eol=buf.find("\n")
33                 if (eol>-1):
34                         title=buf[:eol]
35                 else:
36                         title=buf
37                 return title    
38                 
39
40         def noteChanged(self, widget=None, data=None):
41                 if (self.pos==-1)or(self.noteid==-1):
42                         return
43                 buf=self.textviewNote.get_buffer().get_text(self.textviewNote.get_buffer().get_start_iter(),self.textviewNote.get_buffer().get_end_iter())
44                 
45                 title=self.getTitle(buf)
46                 value, key = self.noteslist.get_item(self.pos)
47                 
48                 if (value!=title):
49                         self.noteslist.change_item(self.pos,title,self.noteid)
50                 
51
52
53         def saveNote(self,widget=None,data=None,data2=None):
54                 logging.info("saveNote params: pos:"+str(self.pos)+" noteid:"+str(self.noteid))
55                 #print "params:",data,data2
56                 buf=self.textviewNote.get_buffer().get_text(self.textviewNote.get_buffer().get_start_iter(),self.textviewNote.get_buffer().get_end_iter())
57                 if (buf==None)or(len(buf)==0): 
58                         return
59                 
60                 if (buf==self.note):
61                         return
62                 
63                 logging.info("Saving note: "+buf)
64                 if (self.pos==-1)or(self.noteid==-1):
65                         self.pos=-1
66                         self.noteid=str(uuid.uuid4())
67                         self.db.saveNote(self.noteid,buf,self.category)
68                         self.noteslist.append_item(self.getTitle(buf), self.noteid)
69                         self.pos=self.noteslist.select_last_item()
70                 else:
71                         self.db.saveNote(self.noteid,buf,self.category)
72                         
73                 self.topBox.defineThisCategory()
74                 
75                 
76         def setFocus(self):
77                 self.textviewNote.grab_focus()
78                 return False
79         
80         def noteslist_changed(self,data=None,data2=None):
81                 if (self.pos!=-1):
82                         self.saveNote()
83                 
84                 try:
85                         (pos, key, value) = self.noteslist.get_selection_data()
86                         if (pos==-1):
87                                 return
88                         #print "(pos, key, value) =", self.noteslist.get_selection_data()
89                 except:
90                         if (data!="new"):
91                                 return
92                         key=None
93                 
94                 
95                 if (key=="new")or(data=="new"):  #both methods supported click add note or new note (first one disabled)
96                         self.noteid=str(uuid.uuid4())
97                         self.db.saveNote(self.noteid,"",self.category)
98                         self.pos=-1
99                         self.noteslist.append_item("", self.noteid)
100                         self.textviewNote.get_buffer().set_text("")
101                         self.pos=self.noteslist.select_last_item()
102                 else:
103                         self.pos=pos
104                         self.noteid,pcdatum,self.category,self.note = self.db.loadNote(key)
105                         self.statuslabel.set_text(time.strftime(_("Last change: %d.%m.%y %H:%M"), time.localtime(pcdatum)))
106                         buf=self.textviewNote.get_buffer()
107                         buf.set_text(self.note)
108
109                 gobject.timeout_add(200, self.setFocus)
110                 
111         def add_note(self,widget=None,data=None):
112                 self.noteslist_changed("new")
113                 
114         def del_note(self,widget=None,data=None):
115                 if (self.noteid==-1): return
116                 mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_WARNING,gtk.BUTTONS_YES_NO,_("Really delete?")) 
117                 response=mbox.run() 
118                 mbox.hide() 
119                 mbox.destroy() 
120                 if response==gtk.RESPONSE_YES:
121                         self.db.delNote(self.noteid)
122                         self.noteid=-1
123                         self.noteslist.remove_item(self.pos)
124                         self.pos=-1
125                         self.textviewNote.get_buffer().set_text("")
126                         
127                 
128         def loadNotes(self,data=None):
129                 logging.info("loadNotes params: pos:"+str(self.pos)+" noteid:"+str(self.noteid))
130                 self.noteslist.clear_items()
131                 self.noteslist.append_item(_("new Note"), "new")
132                 
133                 self.category=self.topBox.getCategory()
134                 search=self.topBox.getSearchPattern()
135                 notes=self.db.searchNotes(search,self.category)
136                 
137                 if (notes!=None):
138                         for note in notes:
139                                 noteid,category,noteText = note
140                                 title=self.getTitle(noteText)
141                                 self.noteslist.append_item(title, noteid)
142                         
143                 self.noteid=-1
144                 self.pos=-1
145                 self.textviewNote.get_buffer().set_text("")
146
147
148         def show_history(self, widget=None, data=None,label=None):
149                 if (self.noteid==-1):
150                         mbox =  gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_INFO,gtk.BUTTONS_OK,_("No note selected.")) 
151                         response = mbox.run() 
152                         mbox.hide() 
153                         mbox.destroy() 
154                         return
155                 
156                 rows=self.db.getNoteHistory(self.noteid)
157                 
158                 import libhistory
159                 dialog=libhistory.Dialog()
160         
161                 lastNoteStr=""
162                 for row in rows:
163                         #for x in row:
164                         #       print x
165                         daten=row[4][1]
166                         if (daten!="")and(lastNoteStr!=daten):
167                                 lastNoteStr=daten
168                                 dialog.liststore.append([row[0],row[1],row[2],row[3],daten+"\n"])
169                         
170
171                                 
172                 dialog.vbox.show_all()
173                 dialog.set_size_request(600,380)
174                 
175
176                 if dialog.run() == gtk.RESPONSE_ACCEPT:
177                         print "saving"
178                         self.saveNote()
179                         data=dialog.get_selected_row()
180                         if data!=None:
181                                 self.db.speichereSQL(data[2],data[3].split(" <<Tren-ner>> "),rowid=self.noteid)
182                                 logging.info("loading History")
183                                 self.noteslist_changed()
184                 
185                 dialog.destroy()
186
187         def __init__(self,db,topBox):
188                 
189                 self.db=db
190                 self.topBox=topBox
191                 self.noteid=-1
192                 self.pos=-1
193                 self.note=None #Last notetext
194                 
195                 gtk.HBox.__init__(self,homogeneous=False, spacing=0)
196                 logging.info("libnotizen, init")
197                 
198                 self.noteslist = simple_list.SimpleList()
199                 self.noteslist.set_eventfunction__cursor_changed(self.noteslist_changed)
200
201                 self.noteslist.set_size_request(250,-1)
202                 
203                 vbox = gtk.VBox(homogeneous=False, spacing=0)
204                 
205                 #button=gtk.Button("add note")
206                 #button.connect("clicked", self.add_note, None)
207                 #vbox.pack_start(button, expand=False, fill=True, padding=3)
208                 
209                 frame=gtk.Frame(_("Titles"))
210                 frame.add(self.noteslist)
211                 vbox.pack_start(frame, expand=True, fill=True, padding=3)
212                 
213                 button=gtk.Button(_("add note"))
214                 button.connect("clicked", self.add_note, None)
215                 vbox.pack_start(button, expand=False, fill=True, padding=3)
216                 
217                 button=gtk.Button(_("del note"))
218                 button.connect("clicked", self.del_note, None)
219                 vbox.pack_start(button, expand=False, fill=True, padding=3)
220                 
221                 self.pack_start(vbox, expand=False, fill=True, padding=3)
222                 
223                 self.textviewNote=gtk.TextView()
224                 self.textviewNote.connect("focus-out-event",self.saveNote,"focus-out-event")
225                 buf=self.textviewNote.get_buffer()
226                 buf.set_text("")
227                 buf.connect("changed", self.noteChanged, None)
228                 
229                 #self.textviewNotiz.set_size_request(-1,50)
230                 scrolled_window = gtk.ScrolledWindow()
231                 scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
232                 scrolled_window.add(self.textviewNote)
233                 
234                 frame=gtk.Frame(_("Note"))
235                 frame.add(scrolled_window)
236                 
237                 
238                 vbox = gtk.VBox(homogeneous=False, spacing=0)
239                 vbox.pack_start(frame, expand=True, fill=True, padding=3)
240                 
241                 hbox = gtk.VBox(homogeneous=False, spacing=0)
242                 
243                 self.statuslabel=gtk.Label("Test")
244                 self.statuslabel.set_alignment(0.0,0.5)
245                 hbox.pack_start(self.statuslabel, expand=False, fill=True, padding=3)
246                 
247                 button=gtk.Button(_("History"))
248                 button.connect("clicked", self.show_history, None)
249                 hbox.pack_start(button, expand=False, fill=True, padding=3)
250                 
251                 
252                 vbox.pack_start(hbox, expand=False, fill=True, padding=3)
253                 
254                 
255                 self.pack_start(vbox, expand=True, fill=True, padding=3)
256
257                 
258                 
259                 self.loadNotes()
260                 self.topBox.connect("reload_notes",self.loadNotes)
261                 
262
263
264