Viewing file: widgets.py (4.89 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import os, time from os.path import * import gnomeapplet, gtk, gtk.gdk, gconf, gobject, pango from gettext import gettext as _ import gtk, gtk.glade, egg.trayicon, gobject, gnomevfs import csv, os from gettext import gettext as _ import invest, invest.about, invest.chart from invest.quotes import get_quotes_updater from invest import *
COLORSCALE_POSITIVE = [ "white", "#ad7fa8", "#75507b", "#5c3566", "#729fcf", "#3465a4", "#204a87", "#8ae234", "#73d216", "#4e9a06", ] GREEN = COLORSCALE_POSITIVE[-1] COLORSCALE_NEGATIVE = [ "white", "#fce94f", "#e9b96e", "#fcaf3e", "#c17d11", "#f57900", "#ce5c00", "#ef2929", "#cc0000", "#a40000", ] RED = COLORSCALE_NEGATIVE[-1]
class InvestWidget(gtk.TreeView): def __init__(self): gtk.TreeView.__init__(self) self.set_property("headers-visible", False) self.set_property("rules-hint", True) self.set_reorderable(True) cell = gtk.CellRendererText () self.column_description = gtk.TreeViewColumn ("Description", cell) self.column_description.set_cell_data_func(cell, self._get_cell_data) self.append_column(self.column_description) self.connect('row-activated', self.on_row_activated) self.set_model(get_quotes_updater()) def _get_cell_data(self, column, cell, model, iter): if model[iter][model.TICKER_ONLY]: color = GREEN if model[iter][model.VARIATION] < 0: color = RED cell.set_property('markup', "<span face='Monospace'>%s: <span foreground='%s'>%+.2f</span> (<span foreground='%s'>%+.2f%%</span>)</span>" % (model[iter][model.SYMBOL], color, model[iter][model.VALUE], color, model[iter][model.VARIATION])) else: color = GREEN if model[iter][model.BALANCE] < 0: color = RED cell.set_property('markup', "<span face='Monospace'>%s: <span foreground='%s'>%.2f</span> (<span foreground='%s'>%+.2f%%</span>) %.2f</span>" % (model[iter][model.SYMBOL], color, model[iter][model.BALANCE], color, model[iter][model.BALANCE_PCT], model[iter][model.VALUE])) def on_row_activated(self, treeview, path, view_column): ticker = self.get_model()[self.get_model().get_iter(path)][0] if ticker == None: return invest.chart.show_chart([ticker])
gobject.type_register(InvestWidget) #class InvestTicker(gtk.Label): # def __init__(self): # gtk.Label.__init__(self, _("Waiting...")) # # self.quotes = [] # gobject.timeout_add(TICKER_TIMEOUT, self.scroll_quotes) # # get_quotes_updater().connect('quotes-updated', self.on_quotes_update) # # def on_quotes_update(self, updater): # self.quotes = [] # updater.foreach(self.update_quote, None) # # def update_quote(self, model, path, iter, user_data): # color = GREEN # if model[iter][model.BALANCE] < 0: # color = RED # # self.quotes.append( # "%s: <span foreground='%s'>%+.2f (%+.2f%%)</span> %.2f" % # (model[iter][model.SYMBOL], color, model[iter][model.BALANCE], model[iter][model.BALANCE_PCT], model[iter][model.VALUE])) # # def scroll_quotes(self): # if len(self.quotes) == 0: # return True # # q = self.quotes.pop() # self.set_markup("<span face='Monospace'>%s</span>" % q) # self.quotes.insert(0, q) # # return True # #gobject.type_register(InvestTicker)
class InvestTrend(gtk.Image): def __init__(self): gtk.Image.__init__(self) self.pixbuf = None self.previous_allocation = (0,0) self.connect('size-allocate', self.on_size_allocate) get_quotes_updater().connect('quotes-updated', self.on_quotes_update) def on_size_allocate(self, widget, allocation): if self.previous_allocation == (allocation.width, allocation.height): return self.pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, allocation.height, allocation.height) self.set_color("grey") self.previous_allocation = (allocation.width, allocation.height) def set_color(self, color, opacity=0xFF): if self.pixbuf != None: try: color = pango.Color(color) factor = float(0xFF)/0xFFFF self.pixbuf.fill( int(color.red*factor)<<24|int(color.green*factor)<<16|int(color.blue*factor)<<8|opacity) self.set_from_pixbuf(self.pixbuf) except Exception, e: print e
def on_quotes_update(self, updater): start_total = 0 now_total = 0 for row in updater: # Don't count the ticker only symbols in the color-trend if row[updater.TICKER_ONLY]: continue var = row[updater.VARIATION]/100 now = row[updater.VALUE]
start = now / (1 + var) portfolio_number = sum([purchase["amount"] for purchase in invest.STOCKS[row[updater.SYMBOL]]]) start_total += start * portfolio_number now_total += now * portfolio_number day_var = (now_total - start_total) / start_total * 100 color = int(2*day_var) opacity = min(0xFF, int(abs(127.5*day_var))) if day_var < 0: color = COLORSCALE_NEGATIVE[min(len(COLORSCALE_NEGATIVE)-1, abs(color))] else: color = COLORSCALE_POSITIVE[min(len(COLORSCALE_POSITIVE)-1, abs(color))]
self.set_color(color, opacity) gobject.type_register(InvestTrend)
|