From 6733a6cf30f05b940330d4150705b996c9c8f96a Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 18 Mar 2010 18:38:19 -0500 Subject: [PATCH] Slowly cleaning up the code --- src/copydb.py | 35 +-- src/libbottombar.py | 150 +++++++------ src/libliststorehandler.py | 149 ++++++------- src/libmultilist.py | 510 ++++++++++++++++++++++---------------------- src/multilist.py | 3 +- 5 files changed, 414 insertions(+), 433 deletions(-) diff --git a/src/copydb.py b/src/copydb.py index e50f303..8361cf3 100755 --- a/src/copydb.py +++ b/src/copydb.py @@ -3,25 +3,30 @@ import time import sqlite3 -import shelve import uuid -db="/home/chris/Documents/Schule/Schule/schulplaner/schuljahr200708enni.s3db" -conn = sqlite3.connect(db) -cur = conn.cursor() -sql="UPDATE sync SET syncpartner=? WHERE syncpartner=?" -cur.execute(sql,(str(uuid.uuid4()),"self")) #Eigene Id ändern feststellen -conn.commit() +def copydb(db): + conn = sqlite3.connect(db) + cur = conn.cursor() -sql="DELETE FROM sync WHERE syncpartner=?" -cur.execute(sql,("self",)) -conn.commit() + sql = "UPDATE sync SET syncpartner=? WHERE syncpartner=?" + cur.execute(sql,(str(uuid.uuid4()),"self")) #Eigene Id ändern feststellen + conn.commit() -sql="INSERT INTO sync (syncpartner,uuid,pcdatum) VALUES (?,?,?)" -cur.execute(sql,("self",str(uuid.uuid4()),int(time.time()))) + sql = "DELETE FROM sync WHERE syncpartner=?" + cur.execute(sql,("self",)) + conn.commit() -sql="UPDATE sync SET pcdatum=?" -cur.execute(sql,(int(time.time()),)) + sql = "INSERT INTO sync (syncpartner,uuid,pcdatum) VALUES (?,?,?)" + cur.execute(sql,("self",str(uuid.uuid4()),int(time.time()))) -conn.commit() \ No newline at end of file + sql = "UPDATE sync SET pcdatum=?" + cur.execute(sql,(int(time.time()),)) + + conn.commit() + + +if __name__ == "__main__": + db = "/home/chris/Documents/Schule/Schule/schulplaner/schuljahr200708enni.s3db" + copydb(db) diff --git a/src/libbottombar.py b/src/libbottombar.py index 654c72d..5542fa5 100644 --- a/src/libbottombar.py +++ b/src/libbottombar.py @@ -1,166 +1,164 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - + """ - This file is part of Multilist. - - Multilist is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Multilist is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Multilist. If not, see . - - Copyright (C) 2008 Christoph Würstle +This file is part of Multilist. + +Multilist is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Multilist is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Multilist. If not, see . + +Copyright (C) 2008 Christoph Würstle """ import gobject -import time import logging import gtk +try: + _ +except NameError: + _ = lambda x: x + + +_moduleLogger = logging.getLogger(__name__) + + class Bottombar(gtk.HBox): - + __gsignals__ = { - 'changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_STRING,gobject.TYPE_STRING)), + 'changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_STRING,gobject.TYPE_STRING)), #'changedCategory': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,(gobject.TYPE_STRING,gobject.TYPE_STRING)) - } + } - def new_item(self,widget=None,data1=None,data2=None): dialog = gtk.Dialog(_("New item name:"),None,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - dialog.set_position(gtk.WIN_POS_CENTER) + dialog.set_position(gtk.WIN_POS_CENTER) entryKlasse=gtk.Entry() entryKlasse.set_text("") - + dialog.vbox.pack_start(entryKlasse, True, True, 0) - - dialog.vbox.show_all() + + dialog.vbox.show_all() #dialog.set_size_request(400,300) if dialog.run() == gtk.RESPONSE_ACCEPT: - #logging.info("new category name "+entryKlasse.get_text()) + #_moduleLogger.info("new category name "+entryKlasse.get_text()) #self.view.liststorehandler.rename_category(entryKlasse.get_text()) self.view.liststorehandler.add_row(entryKlasse.get_text()) dialog.destroy() - def del_item(self,widget=None,data1=None,data2=None): path, col = self.view.treeview.get_cursor() if path!=None: - mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_QUESTION,gtk.BUTTONS_YES_NO,_("Delete current item?")) - response=mbox.run() - mbox.hide() - mbox.destroy() + mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_QUESTION,gtk.BUTTONS_YES_NO,_("Delete current item?")) + response=mbox.run() + mbox.hide() + mbox.destroy() if response==gtk.RESPONSE_YES: self.view.del_active_row() else: - mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_ERROR,gtk.BUTTONS_OK,_("No item selected!")) - response=mbox.run() - mbox.hide() - mbox.destroy() - - + mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_ERROR,gtk.BUTTONS_OK,_("No item selected!")) + response=mbox.run() + mbox.hide() + mbox.destroy() + def checkout_items(self,widget=None,data1=None,data2=None): #self.view.del_active_row() - mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_QUESTION,gtk.BUTTONS_YES_NO,(_("Really checkout all items?"))) - response=mbox.run() - mbox.hide() - mbox.destroy() + mbox=gtk.MessageDialog(None,gtk.DIALOG_MODAL,gtk.MESSAGE_QUESTION,gtk.BUTTONS_YES_NO,(_("Really checkout all items?"))) + response=mbox.run() + mbox.hide() + mbox.destroy() if response==gtk.RESPONSE_YES: self.view.liststorehandler.checkout_rows() #n=len(self.view.liststorehandler.get_liststore()) #for i in range(n): # self.view.liststorehandler.checkout_rows() # #print i - + def search_list(self,widget=None,data1=None,data2=None): self.view.liststorehandler.get_liststore(widget.get_text()) - - + def rename_category(self,widget=None,data1=None,data2=None): dialog = gtk.Dialog(_("New category name:"),None,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - dialog.set_position(gtk.WIN_POS_CENTER) + + dialog.set_position(gtk.WIN_POS_CENTER) entryKlasse=gtk.Entry() entryKlasse.set_text(self.view.liststorehandler.selection.get_category()) - + dialog.vbox.pack_start(entryKlasse, True, True, 0) - - dialog.vbox.show_all() + + dialog.vbox.show_all() #dialog.set_size_request(400,300) if dialog.run() == gtk.RESPONSE_ACCEPT: - logging.info("new category name "+entryKlasse.get_text()) + _moduleLogger.info("new category name "+entryKlasse.get_text()) self.view.liststorehandler.rename_category(entryKlasse.get_text()) else: #print "Cancel",res pass - dialog.destroy() - - + dialog.destroy() + def rename_list(self,widget=None,data1=None,data2=None): dialog = gtk.Dialog(_("New list name:"),None,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - dialog.set_position(gtk.WIN_POS_CENTER) + + dialog.set_position(gtk.WIN_POS_CENTER) entryKlasse=gtk.Entry() entryKlasse.set_text(self.view.liststorehandler.selection.get_list()) - + dialog.vbox.pack_start(entryKlasse, True, True, 0) - - dialog.vbox.show_all() + + dialog.vbox.show_all() #dialog.set_size_request(400,300) if dialog.run() == gtk.RESPONSE_ACCEPT: - logging.info("new list name "+entryKlasse.get_text()) + _moduleLogger.info("new list name "+entryKlasse.get_text()) self.view.liststorehandler.rename_list(entryKlasse.get_text()) else: #print "Cancel",res pass - dialog.destroy() - + dialog.destroy() + def __init__(self,db,view,isHildon): gtk.HBox.__init__(self,homogeneous=False, spacing=3) - + self.db=db self.isHildon=isHildon self.view=view - - logging.info("libBottomBar, init") - - + + _moduleLogger.info("libBottomBar, init") + button=gtk.Button(_("New item")) button.connect("clicked",self.new_item) self.pack_start(button, expand=False, fill=True, padding=0) - + label=gtk.Label(" ") self.pack_start(label, expand=True, fill=True, padding=0) - + label=gtk.Label(_("Search:")) self.pack_start(label, expand=False, fill=True, padding=0) searchEntry=gtk.Entry() searchEntry.connect("changed",self.search_list) self.pack_start(searchEntry, expand=True, fill=True, padding=0) - + label=gtk.Label(" ") self.pack_start(label, expand=True, fill=True, padding=0) - + button=gtk.Button(_("Checkout all items")) button.connect("clicked",self.checkout_items) self.pack_start(button, expand=False, fill=True, padding=0) - + button=gtk.Button(_("Del item")) button.connect("clicked",self.del_item) self.pack_start(button, expand=False, fill=True, padding=0) - - - diff --git a/src/libliststorehandler.py b/src/libliststorehandler.py index 933a90c..2b013b8 100644 --- a/src/libliststorehandler.py +++ b/src/libliststorehandler.py @@ -1,33 +1,40 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - + """ - This file is part of Multilist. - - Multilist is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Multilist is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Multilist. If not, see . - - Copyright (C) 2008 Christoph Würstle +This file is part of Multilist. + +Multilist is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Multilist is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Multilist. If not, see . + +Copyright (C) 2008 Christoph Würstle """ import gtk -import gobject -import libspeichern import logging -class Liststorehandler(): - +try: + _ +except NameError: + _ = lambda x: x + + +_moduleLogger = logging.getLogger(__name__) + + +class Liststorehandler(object): + def get_unitsstore(self): if (self.unitsstore==None): self.unitsstore=gtk.ListStore(str, str, str,str,str, str,str, str, str,str, str, str,str) @@ -35,38 +42,34 @@ class Liststorehandler(): #row(3) quantities #row 4 units #row 6 priority - self.unitsstore.append(["-1","-1","","","","","","","","","","",""]) - self.unitsstore.append(["-1","-1","","1","g","","0","","","","","",""]) - self.unitsstore.append(["-1","-1","","2","kg","","1","","","","","",""]) - self.unitsstore.append(["-1","-1","","3","liter","","2","","","","","",""]) - self.unitsstore.append(["-1","-1","","4","packs","","3","","","","","",""]) - self.unitsstore.append(["-1","-1","","5","","","4","","","","","",""]) - self.unitsstore.append(["-1","-1","","6","","","5","","","","","",""]) - self.unitsstore.append(["-1","-1","","7","","","6","","","","","",""]) - self.unitsstore.append(["-1","-1","","8","","","7","","","","","",""]) - self.unitsstore.append(["-1","-1","","9","","","8","","","","","",""]) - self.unitsstore.append(["-1","-1","","","","","9","","","","","",""]) - + self.unitsstore.append(["-1","-1","","","","","","","","","","",""]) + self.unitsstore.append(["-1","-1","","1","g","","0","","","","","",""]) + self.unitsstore.append(["-1","-1","","2","kg","","1","","","","","",""]) + self.unitsstore.append(["-1","-1","","3","liter","","2","","","","","",""]) + self.unitsstore.append(["-1","-1","","4","packs","","3","","","","","",""]) + self.unitsstore.append(["-1","-1","","5","","","4","","","","","",""]) + self.unitsstore.append(["-1","-1","","6","","","5","","","","","",""]) + self.unitsstore.append(["-1","-1","","7","","","6","","","","","",""]) + self.unitsstore.append(["-1","-1","","8","","","7","","","","","",""]) + self.unitsstore.append(["-1","-1","","9","","","8","","","","","",""]) + self.unitsstore.append(["-1","-1","","","","","9","","","","","",""]) + return self.unitsstore - - - - + def get_liststore(self,titlesearch=""): if (self.liststore==None): self.liststore=gtk.ListStore(str, str, str,str,str, str,str, str, str,str, str, str,str) self.liststore.clear() - + titlesearch=titlesearch+"%" - - + if (self.selection.get_status()=="0"): #only 0 and 1 (active items) sql="SELECT uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2 FROM items WHERE list=? AND category LIKE ? AND status>=? AND title like ? ORDER BY category, status, title" rows=self.db.ladeSQL(sql,(self.selection.get_list(),self.selection.get_category(True),self.selection.get_status(),titlesearch)) else: sql="SELECT uid,status,title,quantitiy,unit,price,priority,date,private,stores,note,custom1,custom2 FROM items WHERE list=? AND category LIKE ? AND title LIKE ? ORDER BY category, title ASC" rows=self.db.ladeSQL(sql,(self.selection.get_list(),self.selection.get_category(True),titlesearch)) - + #print rows if ((rows!=None)and(len(rows)>0)): for row in rows: @@ -79,52 +82,45 @@ class Liststorehandler(): #self.liststore.append(["-1","-1",""," ","","","","","","","","",""]) #import uuid #self.liststore.append(["-1","-1","","","","","","","","","","",""]) - + return self.liststore - - + def emptyValueExists(self): for child in self.liststore: if child[2]=="": return True return False - - def update_row(self,irow,icol,new_text): #print "liststore 1" #for x in self.liststore: # print x[0],x[2] - + if (irow>-1)and(self.liststore[irow][0]!="-1")and(self.liststore[irow][0]!=None): sql = "UPDATE items SET "+self.collist[icol]+"=? WHERE uid=?" self.db.speichereSQL(sql,(new_text,self.liststore[irow][0]),rowid=self.liststore[irow][0]) - - logging.info("Updated row: "+self.collist[icol]+" new text "+new_text+" Titel: "+str(self.liststore[irow][2])+" with uid "+str(self.liststore[irow][0])) - - self.liststore[irow][icol]=new_text + + _moduleLogger.info("Updated row: "+self.collist[icol]+" new text "+new_text+" Titel: "+str(self.liststore[irow][2])+" with uid "+str(self.liststore[irow][0])) + + self.liststore[irow][icol]=new_text else: - logging.warning("update_row: row does not exist") + _moduleLogger.warning("update_row: row does not exist") return #if (self.emptyValueExists()==True)and(icol<2): # #print "letzter Eintrag ohne inhalt" # return - + #print "liststore 2" #for x in self.liststore: # print x[0],x[2] - - + def checkout_rows(self): sql = "UPDATE items SET status=? WHERE list=? AND category LIKE ? AND status=?" self.db.speichereSQL(sql,("-1",self.selection.get_list(),self.selection.get_category(True),"1")) for i in range(len(self.liststore)): if self.liststore[i][1]=="1": self.liststore[i][1]="-1" - - - - + def add_row(self,title=""): #self.update_row(-1,1,"-1") #for x in self.liststore: @@ -134,9 +130,9 @@ class Liststorehandler(): uid=str(uuid.uuid4()) sql = "INSERT INTO items (uid,list,category,status, title) VALUES (?,?,?,?,?)" self.db.speichereSQL(sql,(uid,self.selection.get_list(),self.selection.get_category(),status,title),rowid=uid) - logging.info("Insertet row: status = "+status+" with uid "+str(uid)) + _moduleLogger.info("Insertet row: status = "+status+" with uid "+str(uid)) #self.liststore[irow][0]=str(uuid.uuid4()) - + self.liststore.append([uid,status,title," ","","","","","","","","",""]) self.selection.comboLists_check_for_update() # if (irow>-1): @@ -147,62 +143,56 @@ class Liststorehandler(): #print "xy",self.liststore[len(self.liststore)-1][0] #Check if a new list/category is opened # self.selection.comboLists_check_for_update() - + def del_row(self,irow,row_iter): uid=self.liststore[irow][0] self.liststore.remove(row_iter) sql = "DELETE FROM items WHERE uid=?" self.db.speichereSQL(sql,(uid,)) - # - - + def get_colname(self,i): if i. - - Copyright (C) 2008 Christoph Würstle + """ +This file is part of Multilist. + +Multilist is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Multilist is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. -#/scratchbox/login -#Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -#af-sb-init.sh start -#run-standalone.sh ./eggtimer.py -# -#https://stage.maemo.org/svn/maemo/projects/haf/trunk/ -#http://www.maemo.org/platform/docs/pymaemo/pyosso_context.html -#http://maemo-hackers.org/apt/ +You should have received a copy of the GNU General Public License +along with Multilist. If not, see . + +Copyright (C) 2008 Christoph Würstle +""" -import time import os import sys import logging -try: - import gtk - #import gtk.glade -except: - print "gtk import failed" - sys.exit(1) - +import gtk + try: import hildon - import osso isHildon=True except: isHildon=False @@ -54,7 +38,14 @@ except: def __init__(self): print "PseudoClass hildon.Program" -#import libextdatei +try: + import osso +except ImportError: + osso = None + +import constants +import hildonize + import libspeichern import libsqldialog import libselection @@ -63,77 +54,96 @@ import libliststorehandler import libsync import libbottombar -version = "0.3.0" -app_name = "multilist" +try: + _ +except NameError: + _ = lambda x: x + - - +_moduleLogger = logging.getLogger(__name__) +PROFILE_STARTUP = False + + +class multilistclass(hildonize.get_app_class()): + + _user_data = os.path.join(os.path.expanduser("~"), ".%s" % constants.__app_name__) + _user_settings = "%s/settings.ini" % _user_data -class multilistclass(hildon.Program): - def on_key_press(self, widget, event, *args): - #Hildon Fullscreen Modus - if (isHildon==False): return - if event.keyval == gtk.keysyms.F6: - # The "Full screen" hardware key has been pressed - if self.window_in_fullscreen: - self.window.unfullscreen () - else: - self.window.fullscreen () - - 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 - - + 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 isCtrl + ): + # The "Full screen" hardware key has been pressed + if self.window_in_fullscreen: + self.window.unfullscreen () + else: + self.window.fullscreen () + return True + #elif event.keyval == gtk.keysyms.f and isCtrl: + # self._toggle_search() + # return True + elif ( + event.keyval in (gtk.keysyms.w, gtk.keysyms.q) and + event.get_state() & gtk.gdk.CONTROL_MASK + ): + self._window.destroy() + elif event.keyval == gtk.keysyms.l and event.get_state() & gtk.gdk.CONTROL_MASK: + with open(constants._user_logpath_, "r") as f: + logLines = f.xreadlines() + log = "".join(logLines) + self._clipboard.set_text(str(log)) + return True + + 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 speichereAlles(self,data=None,data2=None): logging.info("Speichere alles") - def ladeAlles(self,data=None,data2=None): logging.info("Lade alles") - + def beforeSync(self,data=None,data2=None): logging.info("Lade alles") - def sync_finished(self,data=None,data2=None): self.selection.comboList_changed() self.selection.comboCategory_changed() self.liststorehandler.update_list() - - + def prepare_sync_dialog(self): self.sync_dialog = gtk.Dialog(_("Sync"),None,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - self.sync_dialog.set_position(gtk.WIN_POS_CENTER) + + self.sync_dialog.set_position(gtk.WIN_POS_CENTER) sync=libsync.Sync(self.db,self.window,50503) sync.connect("syncFinished",self.sync_finished) self.sync_dialog.vbox.pack_start(sync, True, True, 0) self.sync_dialog.set_size_request(500,350) self.sync_dialog.vbox.show_all() sync.connect("syncFinished",self.sync_finished) - - + def sync_notes(self,widget=None,data=None): if self.sync_dialog==None: self.prepare_sync_dialog() self.sync_dialog.run() - self.sync_dialog.hide() - + self.sync_dialog.hide() def show_columns_dialog(self,widget=None,data=None): col_dialog = gtk.Dialog(_("Choose columns"),self.window,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - - col_dialog.set_position(gtk.WIN_POS_CENTER) + + col_dialog.set_position(gtk.WIN_POS_CENTER) cols=libview.Columns_dialog(self.db,self.liststorehandler) col_dialog.vbox.pack_start(cols, True, True, 0) col_dialog.set_size_request(500,350) col_dialog.vbox.show_all() - + resp=col_dialog.run() col_dialog.hide() if resp==gtk.RESPONSE_ACCEPT: @@ -147,255 +157,237 @@ class multilistclass(hildon.Program): #self.vbox.pack_end(self.bottombar, expand=True, fill=True, padding=0) #self.vbox.pack_end(view, expand=True, fill=True, padding=0) #self.vbox.pack_end(self.selection, expand=False, fill=True, padding=0) - col_dialog.destroy() - - def __init__(self): - home_dir = os.path.expanduser('~') - dblog=os.path.join(home_dir, "multilist.log") - logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename=dblog,filemode='a') - #logging.getLogger('').addHandler(console) - - # define a Handler which writes INFO messages or higher to the sys.stderr - console = logging.StreamHandler() - console.setLevel(logging.INFO) - # set a format which is simpler for console use - formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s') - # tell the handler to use this format - console.setFormatter(formatter) - # add the handler to the root logger - logging.getLogger('').addHandler(console) - + super(multilistclass, self).__init__() + self._clipboard = gtk.clipboard_get() + logging.info('Starting Multilist') - - if (isHildon==True): - logging.info('Hildon erkannt, rufe Hildon constructor auf') - hildon.Program.__init__(self) - - #Get the Main Window, and connect the "destroy" event - if (isHildon==False): - self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - self.window.set_default_size(700,500) - else: - self.window = hildon.Window() - self.add_window(self.window) - - #print "1b: ",time.clock() - - if (self.window): - self.window.connect("delete_event", self.delete_event) - self.window.connect("destroy", self.destroy) - self.window.set_title("Multilist") - - - - if (isHildon==True): self.window.connect("key-press-event", self.on_key_press) - self.window.connect("window-state-event", self.on_window_state_change) - self.window_in_fullscreen = False #The window isn't in full screen mode initially. - - - self.db=libspeichern.Speichern() - - self.selection=libselection.Selection(self.db,isHildon) - self.liststorehandler=libliststorehandler.Liststorehandler(self.db,self.selection) - self.view=libview.View(self.db,self.liststorehandler,self.window) - self.bottombar=libbottombar.Bottombar(self.db,self.view,isHildon) - + + try: + os.makedirs(self._user_data) + except OSError, e: + if e.errno != 17: + raise + + self.db = libspeichern.Speichern() + self.window_in_fullscreen = False #The window isn't in full screen mode initially. + #Haupt vbox für alle Elemente + self.window = gtk.Window() self.vbox = gtk.VBox(homogeneous=False, spacing=0) - - - + + self.selection = libselection.Selection(self.db, isHildon) + self.liststorehandler = libliststorehandler.Liststorehandler(self.db, self.selection) + self.view = libview.View(self.db, self.liststorehandler, self.window) + self.bottombar = libbottombar.Bottombar(self.db, self.view, isHildon) + #Menue - dateimenu = gtk.Menu() - - menu_items = gtk.MenuItem(_("Choose database file")) - dateimenu.append(menu_items) - menu_items.connect("activate", self.select_db_dialog, None) - - menu_items = gtk.MenuItem(_("SQL history")) - dateimenu.append(menu_items) - menu_items.connect("activate", self.view_sql_history, None) - - menu_items = gtk.MenuItem(_("SQL optimize")) - dateimenu.append(menu_items) - menu_items.connect("activate", self.optimizeSQL, None) - - menu_items = gtk.MenuItem(_("Sync items")) - self.prepare_sync_dialog() - dateimenu.append(menu_items) - menu_items.connect("activate", self.sync_notes, None) - - - menu_items = gtk.MenuItem(_("Quit")) - dateimenu.append(menu_items) - menu_items.connect("activate", self.destroy, None) - #menu_items.show() - - datei_menu = gtk.MenuItem(_("File")) - datei_menu.show() - datei_menu.set_submenu(dateimenu) - - - toolsmenu = gtk.Menu() - - - menu_items = gtk.MenuItem(_("Choose columns")) - toolsmenu.append(menu_items) - menu_items.connect("activate", self.show_columns_dialog, None) - - menu_items = gtk.MenuItem(_("Rename Category")) - toolsmenu.append(menu_items) - menu_items.connect("activate", self.bottombar.rename_category, None) - - menu_items = gtk.MenuItem(_("Rename List")) - toolsmenu.append(menu_items) - menu_items.connect("activate", self.bottombar.rename_list, None) - - tools_menu = gtk.MenuItem(_("Tools")) - tools_menu.show() - tools_menu.set_submenu(toolsmenu) - - - hilfemenu = gtk.Menu() - menu_items = gtk.MenuItem(_("About")) - hilfemenu.append(menu_items) - menu_items.connect("activate", self.show_about, None) - - hilfe_menu = gtk.MenuItem(_("Help")) - hilfe_menu.show() - hilfe_menu.set_submenu(hilfemenu) - - menu_bar = gtk.MenuBar() - menu_bar.show() - menu_bar.append (datei_menu) - menu_bar.append (tools_menu) - # unten -> damit als letztes menu_bar.append (hilfe_menu) - #Als letztes menü - menu_bar.append (hilfe_menu) - - if (isHildon==True): - menu = gtk.Menu() - for child in menu_bar.get_children(): - child.reparent(menu) - self.window.set_menu(menu) - menu_bar.destroy() + if hildonize.GTK_MENU_USED: + dateimenu = gtk.Menu() + + menu_items = gtk.MenuItem(_("Choose database file")) + dateimenu.append(menu_items) + menu_items.connect("activate", self.select_db_dialog, None) + + menu_items = gtk.MenuItem(_("SQL history")) + dateimenu.append(menu_items) + menu_items.connect("activate", self.view_sql_history, None) + + menu_items = gtk.MenuItem(_("SQL optimize")) + dateimenu.append(menu_items) + menu_items.connect("activate", self.optimizeSQL, None) + + menu_items = gtk.MenuItem(_("Sync items")) + dateimenu.append(menu_items) + menu_items.connect("activate", self.sync_notes, None) + + menu_items = gtk.MenuItem(_("Quit")) + dateimenu.append(menu_items) + menu_items.connect("activate", self.destroy, None) + #menu_items.show() + + datei_menu = gtk.MenuItem(_("File")) + datei_menu.show() + datei_menu.set_submenu(dateimenu) + + toolsmenu = gtk.Menu() + + menu_items = gtk.MenuItem(_("Choose columns")) + toolsmenu.append(menu_items) + menu_items.connect("activate", self.show_columns_dialog, None) + + menu_items = gtk.MenuItem(_("Rename Category")) + toolsmenu.append(menu_items) + menu_items.connect("activate", self.bottombar.rename_category, None) + + menu_items = gtk.MenuItem(_("Rename List")) + toolsmenu.append(menu_items) + menu_items.connect("activate", self.bottombar.rename_list, None) + + tools_menu = gtk.MenuItem(_("Tools")) + tools_menu.show() + tools_menu.set_submenu(toolsmenu) + + hilfemenu = gtk.Menu() + menu_items = gtk.MenuItem(_("About")) + hilfemenu.append(menu_items) + menu_items.connect("activate", self.show_about, None) + + hilfe_menu = gtk.MenuItem(_("Help")) + hilfe_menu.show() + hilfe_menu.set_submenu(hilfemenu) + + menu_bar = gtk.MenuBar() + menu_bar.show() + menu_bar.append (datei_menu) + menu_bar.append (tools_menu) + # unten -> damit als letztes menu_bar.append (hilfe_menu) + #Als letztes menü + menu_bar.append (hilfe_menu) + + self.vbox.pack_start(menu_bar, False, False, 0) else: - self.vbox.pack_start(menu_bar, False, False, 2) - - - + menuBar = gtk.MenuBar() + menuBar.show() + self.vbox.pack_start(menuBar, False, False, 0) #add to vbox below (to get it on top) - - - self.vbox.pack_end(self.bottombar, expand=False, fill=True, padding=0) self.vbox.pack_end(self.view, expand=True, fill=True, padding=0) self.vbox.pack_end(self.selection, expand=False, fill=True, padding=0) - - if (isHildon==True): self.osso_c = osso.Context(app_name, version, False) + #Get the Main Window, and connect the "destroy" event self.window.add(self.vbox) + + self.window = hildonize.hildonize_window(self, self.window) + hildonize.set_application_title(self.window, "%s" % constants.__pretty_app_name__) + menu_bar = hildonize.hildonize_menu( + self.window, + menu_bar, + ) + if hildonize.IS_FREMANTLE_SUPPORTED: + pass + + if not hildonize.IS_HILDON_SUPPORTED: + _moduleLogger.info("No hildonization support") + + if osso is not None: + self.osso_c = osso.Context( + constants.__app_name__, + constants.__version__, + False + ) + else: + _moduleLogger.info("No osso support") + self._osso_c = None + + self.window.connect("delete_event", self.delete_event) + self.window.connect("destroy", self.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() - - #print "8a" + self.prepare_sync_dialog() self.ladeAlles() - - - #print "9: ",time.clock() - - def main(self): - gtk.main() - if (isHildon==True): self.osso_c.close() - + def destroy(self, widget=None, data=None): - self.speichereAlles() - self.db.close() - gtk.main_quit() - - + try: + self.speichereAlles() + self.db.close() + try: + self._osso_c.close() + except AttributeError: + pass # Either None or close was removed (in Fremantle) + finally: + gtk.main_quit() + def delete_event(self, widget, event, data=None): #print "delete event occurred" return False - + def dlg_delete(self,widget,event,data=None): return False - def show_about(self, widget=None,data=None): - dialog = gtk.AboutDialog() - dialog.set_position(gtk.WIN_POS_CENTER) - dialog.set_name(app_name) - dialog.set_version(version) - dialog.set_copyright("") + dialog = gtk.AboutDialog() + dialog.set_position(gtk.WIN_POS_CENTER) + dialog.set_name(constants.__pretty_app_name__) + dialog.set_version(constants.__version__) + dialog.set_copyright("") dialog.set_website("http://axique.de/f=Multilist") - comments = "%s is a program to handle multiple lists." % app_name - dialog.set_comments(comments) - dialog.run() - dialog.destroy() - + comments = "%s is a program to handle multiple lists." % constants.__pretty_app_name__ + dialog.set_comments(comments) + dialog.set_authors(["Christoph Wurstle ", "Ed Page (Blame him for the most recent bugs)"]) + dialog.run() + dialog.destroy() + def on_info1_activate(self,menuitem): self.show_about(menuitem) - def view_sql_history(self,widget=None,data=None,data2=None): sqldiag=libsqldialog.sqlDialog(self.db) res=sqldiag.run() sqldiag.hide() if res==444: logging.info("exporting sql") - - if (isHildon==False): - dlg = gtk.FileChooserDialog(parent = self.window, action = gtk.FILE_CHOOSER_ACTION_SAVE) + + if not isHildon: + dlg = gtk.FileChooserDialog( + parent = self.window, + action = gtk.FILE_CHOOSER_ACTION_SAVE + ) dlg.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) - dlg.add_button( gtk.STOCK_OK, gtk.RESPONSE_OK) + dlg.add_button( gtk.STOCK_OK, gtk.RESPONSE_OK) else: #dlg = hildon.FileChooserDialog(parent = self.window, action = gtk.FILE_CHOOSER_ACTION_SAVE) dlg=hildon.FileChooserDialog(self.window, gtk.FILE_CHOOSER_ACTION_SAVE) - + dlg.set_title(_("Select SQL export file")) - if dlg.run() == gtk.RESPONSE_OK: + if dlg.run() == gtk.RESPONSE_OK: fileName = dlg.get_filename() dlg.destroy() sqldiag.exportSQL(fileName) else: dlg.destroy() - + sqldiag.destroy() - - def optimizeSQL(self,widget=None,data=None,data2=None): + def optimizeSQL(self,widget=None,data=None,data2=None): #optimiere sql self.db.speichereSQL("VACUUM",log=False) - - - def select_db_dialog(self,widget=None,data=None,data2=None): if (isHildon==False): - dlg = gtk.FileChooserDialog(parent = self.window, action = gtk.FILE_CHOOSER_ACTION_SAVE) + dlg = gtk.FileChooserDialog(parent = self.window, action = gtk.FILE_CHOOSER_ACTION_SAVE) dlg.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) - dlg.add_button( gtk.STOCK_OK, gtk.RESPONSE_OK) + dlg.add_button( gtk.STOCK_OK, gtk.RESPONSE_OK) else: #dlg = hildon.FileChooserDialog(parent = self.window, action = gtk.FILE_CHOOSER_ACTION_SAVE) dlg=hildon.FileChooserDialog(self.window, gtk.FILE_CHOOSER_ACTION_SAVE) - - - if self.db.ladeDirekt('datenbank'): + + if self.db.ladeDirekt('datenbank'): dlg.set_filename(self.db.ladeDirekt('datenbank')) dlg.set_title(_("Choose your database file")) - if dlg.run() == gtk.RESPONSE_OK: + if dlg.run() == gtk.RESPONSE_OK: fileName = dlg.get_filename() self.db.speichereDirekt('datenbank',fileName) self.speichereAlles() self.db.openDB() self.ladeAlles() - dlg.destroy() - - - + dlg.destroy() + + +def run_multilist(): + if hildonize.IS_HILDON_SUPPORTED: + gtk.set_application_name(constants.__pretty_app_name__) + app = multilistclass() + if not PROFILE_STARTUP: + gtk.main() + +if __name__ == "__main__": + logging.basicConfig(level=logging.DEBUG) + run_multilist() diff --git a/src/multilist.py b/src/multilist.py index 5d6fb81..aaacb6c 100755 --- a/src/multilist.py +++ b/src/multilist.py @@ -35,5 +35,4 @@ if __name__ == "__main__": _moduleLogger.info("Kernel: %s (%s) for %s" % os.uname()[2:]) _moduleLogger.info("Hostname: %s" % os.uname()[1]) - app = libmultilist.multilistclass() - app.main() + libmultilist.run_multilist() -- 1.7.9.5