home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / invest / preferences.py < prev    next >
Encoding:
Python Source  |  2006-08-30  |  4.2 KB  |  127 lines

  1. from gettext import gettext as _
  2. from os.path import join
  3. import gtk, gtk.glade, gobject, gconf
  4. import invest
  5. from gettext import gettext as _
  6.  
  7. import cPickle
  8.  
  9. class PrefsDialog:
  10.     def __init__(self, applet):
  11.         self.glade = gtk.glade.XML(join(invest.GLADE_DATA_DIR, "prefs-dialog.glade"))
  12.  
  13.         self.dialog = self.glade.get_widget("preferences")
  14.         self.treeview = self.glade.get_widget("stocks")
  15.         
  16.         self.glade.get_widget("add").connect('clicked', self.on_add_stock)
  17.         self.glade.get_widget("add").connect('activate', self.on_add_stock)
  18.         self.glade.get_widget("remove").connect('clicked', self.on_remove_stock)
  19.         self.glade.get_widget("remove").connect('activate', self.on_remove_stock)
  20.         self.treeview.connect('key-press-event', self.on_tree_keypress)
  21.         
  22.         store = gtk.ListStore(str, int, float, float)
  23.         self.treeview.set_model(store)
  24.         self.model = store
  25.         
  26.         def on_cell_edited(cell, path, new_text, col, typ):
  27.             try:
  28.                 store[path][col] = typ(new_text)
  29.             except:
  30.                 pass
  31.         
  32.         def get_cell_data(column, cell, model, iter, data):
  33.             typ, col = data
  34.             if typ == int:
  35.                 cell.set_property('text', "%d" % typ(model[iter][col]))
  36.             elif typ == float:
  37.                 cell.set_property('text', "%.2f" % typ(model[iter][col]))
  38.             else:
  39.                 cell.set_property('text', typ(model[iter][col]))
  40.             
  41.         cell_description = gtk.CellRendererText ()
  42.         cell_description.set_property("editable", True)
  43.         cell_description.connect("edited", on_cell_edited, 0, str)
  44.         column_description = gtk.TreeViewColumn (_("Symbol"), cell_description)
  45.         column_description.set_attributes (cell_description, text=0)
  46.         self.treeview.append_column(column_description)
  47.         
  48.         cell_description = gtk.CellRendererText ()
  49.         cell_description.set_property("editable", True)
  50.         cell_description.connect("edited", on_cell_edited, 1, int)
  51.         column_description = gtk.TreeViewColumn (_("Amount"), cell_description)
  52.         column_description.set_cell_data_func(cell_description, get_cell_data, (int, 1))
  53.         self.treeview.append_column(column_description)
  54.         
  55.         cell_description = gtk.CellRendererText ()
  56.         cell_description.set_property("editable", True)
  57.         cell_description.connect("edited", on_cell_edited, 2, float)
  58.         column_description = gtk.TreeViewColumn (_("Price"), cell_description)
  59.         column_description.set_cell_data_func(cell_description, get_cell_data, (float, 2))
  60.         self.treeview.append_column(column_description)
  61.         
  62.         cell_description = gtk.CellRendererText ()
  63.         cell_description.set_property("editable", True)
  64.         cell_description.connect("edited", on_cell_edited, 3, float)
  65.         column_description = gtk.TreeViewColumn (_("Commission"), cell_description)
  66.         column_description.set_cell_data_func(cell_description, get_cell_data, (float, 3))
  67.         self.treeview.append_column(column_description)
  68.         
  69.         for key, purchases in invest.STOCKS.items():
  70.             for purchase in purchases:
  71.                 store.append([key, purchase["amount"], purchase["bought"], purchase["comission"]])
  72.  
  73.         try:
  74.             pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(join(invest.ART_DATA_DIR, "invest-16.png"), -1,-1)
  75.             self.dialog.set_icon(pixbuf)
  76.         except Exception, msg:
  77.             pass
  78.                 
  79.         self.sync_ui()
  80.         
  81.     def show_run_hide(self):
  82.         self.dialog.show_all()
  83.         self.dialog.run()
  84.         self.dialog.destroy()
  85.         
  86.         invest.STOCKS = {}
  87.         
  88.         def save_symbol(model, path, iter):
  89.             #if int(model[iter][1]) == 0 or float(model[iter][2]) < 0.0001:
  90.             #    return
  91.             
  92.             if not model[iter][0] in invest.STOCKS:
  93.                 invest.STOCKS[model[iter][0]] = []
  94.                 
  95.             invest.STOCKS[model[iter][0]].append({
  96.                 "amount": int(model[iter][1]),
  97.                 "bought": float(model[iter][2]),
  98.                 "comission": float(model[iter][3]),
  99.             })
  100.         self.model.foreach(save_symbol)
  101.         try:
  102.             cPickle.dump(invest.STOCKS, file(invest.STOCKS_FILE, 'w'))
  103.             print 'Stocks written to file'
  104.         except Exception, msg:
  105.             print 'Could not save stocks file:', msg
  106.             
  107.     
  108.     def sync_ui(self):
  109.         pass
  110.     
  111.     def on_add_stock(self, w):
  112.         self.treeview.get_model().append(["GOOG", 0, 0, 0])
  113.         
  114.     def on_remove_stock(self, w):
  115.         model, paths = self.treeview.get_selection().get_selected_rows()
  116.         for path in paths:
  117.             model.remove(model.get_iter(path))
  118.             
  119.     def on_tree_keypress(self, w, event):
  120.         if event.keyval == 65535:
  121.             self.on_remove_stock(self, w)
  122.             
  123.         return False
  124.         
  125. def show_preferences(applet):
  126.     PrefsDialog(applet).show_run_hide()
  127.