From: Daniel Martin Yerga Date: Tue, 12 May 2009 15:37:37 +0000 (+0200) Subject: some fixes X-Git-Url: http://vcs.maemo.org/git/?p=stockthis;a=commitdiff_plain;h=83c15b60bc2fc7db56040419a128d2162072b942 some fixes --- diff --git a/TODO b/TODO index e72b2f2..1c8e381 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,10 @@ * Sort markets for countries. - * Add favorites and create favorites view. + * Add favorites and create favorites view (portfolios). -> refresh automatically + * Indexes for markets. + * Currencies. + * Improve the alignment of the labels in quotes view. + * Improve the font size in Companies view. + ftse350 UK @@ -79,7 +84,3 @@ http://finance.yahoo.com/q/cp?s=^GSPTSE S&P CNX NIFTY (^NSEI) 50 India http://es.finance.yahoo.com/q/cp?s=^NSEI - - - - diff --git a/changelog b/changelog index 96a937d..6295da3 100644 --- a/changelog +++ b/changelog @@ -1,8 +1,16 @@ +2009-05-09 Daniel Martín Yerga + + * stockthis.py: Show error if fails to get internet data. + Rename Components to Companies. + +2009-05-02 Daniel Martín Yerga + + * stockthis.py: Added grid lines to the components treeview. + 2009-05-01 Daniel Martín Yerga - * marketdata.py: Added mibtel + * marketdata.py: Added mibtel, ftse250 markets. 2009-04-30 Daniel Martín Yerga - * Release 0.1 - + * Release 0.1 diff --git a/markets/tsx b/markets/tsx new file mode 100644 index 0000000..dcb6e0e --- /dev/null +++ b/markets/tsx @@ -0,0 +1,208 @@ +ABX.TO BARRICK GOLD CORP COM NPV 39.13 May 8 Up 0.58 (1.50%) 4,547,656 +ACM-A.TO ASTRAL MEDIA INC CLASS'A'NON-VT 30.00 May 8 Down 0.26 (0.86%) 127,401 +ACO-X.TO ATCO LTD CLASS I NON-VOTING COM 35.35 May 8 Down 0.35 (0.98%) 56,390 +AEM.TO AGNICO EAGLE MINES COM NPV 57.22 May 8 Up 1.12 (2.00%) 941,214 +AER.TO AEROPLAN INCOME FD 9.02 May 8 Up 0.27 (3.09%) 726,526 +AET-UN.TO ARC ENERGY TRUST TRUST UNITS 17.40 May 8 Up 0.79 (4.76%) 1,628,693 +AGF-B.TO AGF MANAGEMENT LTD CLASS'B'NON- 13.05 May 8 Up 0.50 (3.98%) 218,905 +AGI.TO ALAMOS GOLD INC COM NPV 8.25 May 8 Down 0.12 (1.43%) 492,555 +AGU.TO AGRIUM INC COM NPV 52.00 May 8 Down 0.46 (0.88%) 1,028,580 +ALA-UN.TO ALTAGAS INCOME TST TRUST UNITS 16.23 May 8 Up 0.53 (3.38%) 417,418 +ARE.TO AECON GROUP INC. COM NPV 11.82 May 8 Down 0.14 (1.17%) 339,422 +ARZ.TO AURIZON MINES COM NPV 4.80 May 8 Up 0.21 (4.58%) 446,280 +ATD-B.TO ALIMENTATION COUCHE-TARD INC 13.58 May 8 Up 0.18 (1.34%) 249,599 +AVN-UN.TO ADVANTAGE ENERGY I TRUST UNITS 4.20 May 8 Up 0.21 (5.26%) 804,537 +AXC.TO ADDAX PETROLEUM COM NPV 38.15 May 8 Up 4.37 (12.94%) 883,743 +BA-UN.TO BELL ALIANT REGIONAL COMM INC F 24.18 May 8 Down 0.02 (0.08%) 167,131 +BAM-A.TO BROOKFIELD ASSET MGMT INC 21.22 May 8 Up 1.05 (5.21%) 1,121,243 +BBD-B.TO BOMBARDIER INC CLASS'B'S/VTG NP 4.16 May 8 Up 0.12 (2.97%) 8,797,732 +BCE.TO BCE INC COM NPV 24.67 May 8 Down 0.23 (0.92%) 4,635,476 +BEI-UN.TO BOARDWALK R/EST IN TRUST UNITS 30.43 May 8 Up 1.11 (3.79%) 103,884 +BFC.TO BFI CANADA LTD 11.90 May 8 Up 0.26 (2.23%) 830,950 +BIR.TO BIRCHCLIFF ENERGY LTD 6.88 May 8 Up 0.22 (3.30%) 1,362,352 +BMO.TO BK OF MONTREAL COM NPV 44.70 May 8 Up 1.53 (3.54%) 2,285,097 +BNP-UN.TO BONAVISTA ENERGY T TRUST UNITS 19.41 May 8 Up 0.91 (4.92%) 278,706 +BNS.TO BK OF NOVA SCOTIA COM NPV 37.66 May 8 Up 1.54 (4.26%) 3,033,259 +BPO.TO BROOKFIELD PROPERT COM NPV 9.84 May 8 Up 0.43 (4.57%) 973,437 +BTE-UN.TO BAYTEX ENERGY TR 18.60 May 8 Up 0.79 (4.44%) 372,932 +BVF.TO BIOVAIL CORP COM NPV 13.08 May 8 Up 0.92 (7.57%) 1,659,974 +CAE.TO CAE INC COM NPV 8.28 May 8 Up 0.33 (4.15%) 322,969 +CAR-UN.TO CANADIAN APT PPTYS REAL ESTA 12.75 May 8 0.00 (0.00%) 174,345 +CCA.TO COGECO CABLE INC 29.25 May 8 Down 0.39 (1.32%) 137,657 +CCL-B.TO CCL INDUSTRIES INC 'B'NON-VTG C 23.00 May 8 Down 1.55 (6.31%) 797,922 +CCO.TO CAMECO CORP COM NPV 29.69 May 8 Up 0.51 (1.75%) 1,065,167 +CFP.TO CANFOR CORPORATION COM NPV 6.58 May 8 Up 0.23 (3.62%) 125,628 +CGX-UN.TO CINEPLEX GALAXY IN SBI NPV 15.24 May 8 Up 0.02 (0.13%) 111,256 +CIX.TO CI FINL INC 17.55 May 8 Up 1.10 (6.69%) 717,635 +CJR-B.TO CORUS ENTERTAINMNT CLASS 'B' NO 16.34 May 8 Up 0.53 (3.35%) 171,920 +CLC-UN.TO CML HLTHCARE INC UNITS 13.50 May 8 Up 0.20 (1.50%) 171,331 +CLS.TO CELESTICA INC. SV 7.26 May 8 Down 0.11 (1.49%) 653,858 +CM.TO CANADIAN IMP BANK COM NPV 61.19 May 8 Up 2.24 (3.80%) 1,506,395 +CNQ.TO CDN NAT RES COM NPV 63.44 May 8 Up 3.10 (5.14%) 3,260,549 +CNR.TO CDN NATL RAILWAYS COM NPV 49.20 May 8 Down 0.36 (0.73%) 1,139,984 +COM.TO CARDIOME PHARMA CO COM NPV 5.18 May 8 Up 0.16 (3.19%) 117,493 +COS-UN.TO CANADIAN OIL SANDS TRUST UNITS 29.90 May 8 Up 1.55 (5.47%) 1,680,617 +CP.TO CAN PACIFIC RYS COM NPV 44.82 May 8 Up 1.00 (2.28%) 701,252 +CPG-UN.TO CRESCENT PT ENERGY TR 30.00 May 8 Up 0.39 (1.32%) 972,385 +CR.TO CREW ENERGY INC 6.74 May 8 Up 0.42 (6.65%) 1,141,462 +CSH-UN.TO CHARTWELL SENIORS TRUST UNITS 5.00 May 8 Up 0.28 (5.93%) 402,879 +CTC-A.TO CANADIAN TIRE CORP LTD CL A NV 50.42 May 8 Up 0.02 (0.04%) 241,306 +CU.TO CDN UTILITIES CLASS'A'COM NON-V +CUF-UN.TO COMINAR REAL ESTAT TRUST UNITS 14.69 May 8 Up 0.08 (0.55%) 185,939 +CWB.TO CDN WESTERN BANK COM NPV 14.27 May 8 Up 0.07 (0.49%) 311,988 +CWI-UN.TO CONSUMERS' WATERHE TRUST UNITS 6.90 May 8 Down 0.10 (1.43%) 219,181 +CWT-UN.TO CALLOWAY REAL ESTA TRUST UNITS 13.05 May 8 Up 0.95 (7.85%) 605,850 +DAY-UN.TO DAYLIGHT RESOURCES COM NPV 7.80 May 8 Up 0.26 (3.45%) 1,513,186 +DC-A.TO DUNDEE CORPORATION 'A'SUB-VTG N 7.28 May 8 Up 0.50 (7.37%) 146,563 +DHF-UN.TO DAVIS HENDERSON INCOME FD 14.09 May 8 Up 0.13 (0.93%) 196,289 +DII-B.TO DOREL INDUSTRIES CLASS'B'SUB VT 22.75 May 8 Up 0.75 (3.41%) 73,222 +ECA.TO ENCANA CORP COM NPV 65.42 May 8 Up 4.10 (6.69%) 3,736,847 +EFX-UN.TO ENERFLEX SYSTEMS I TRUST UNITS 11.15 May 8 Up 0.20 (1.83%) 98,788 +EGU.TO EURO GOLDFIELDS COM NPV 3.19 May 8 Up 0.07 (2.24%) 85,522 +ELD.TO ELDORADO GOLD CORP COM NPV 9.75 May 8 Down 0.30 (2.99%) 3,440,913 +EMA.TO EMERA INC COM NPV 19.96 May 8 Down 0.05 (0.25%) 163,557 +EMP-A.TO EMPIRE CO CLASS'A'N/VTG COM NPV 47.50 May 8 Down 0.50 (1.04%) 124,910 +ENB.TO ENBRIDGE INC COM NPV 36.82 May 8 Down 0.60 (1.60%) 1,535,674 +EP-UN.TO EPCOR POWER L.P. SBI NPV 13.67 May 8 Up 0.29 (2.17%) 120,974 +EQN.TO EQUINOX MINERALS COM NPV 2.58 May 8 Up 0.08 (3.20%) 4,205,460 +ERF-UN.TO ENERPLUS RES FUND TRUST UNITS-S 27.20 May 8 Up 1.46 (5.67%) 660,229 +ESI.TO ENSIGN ENERGY SVS COM NPV 14.80 May 8 Up 0.64 (4.52%) 157,230 +EXE-UN.TO EXTENDICARE REAL I TRUST UNITS 5.50 May 8 Up 0.25 (4.76%) 365,159 +FCE-UN.TO FORT CHICAGO ENERG CL 'A' UNITS 7.28 May 8 Up 0.08 (1.11%) 2,078,685 +FFH.TO FAIRFAX FINL HLDGS SUB-VTG COM 323.10 May 8 Up 9.91 (3.16%) 40,400 +FGL.TO FORZANI GROUP CLASS'A'COM NPV +FM.TO 1ST QUANTUM MINLS COM NPV +FNV.TO FRANCO NEVADA CORP COM NPV +FNX.TO FNX MINING CO INC COM NPV +FRU-UN.TO FREEHOLD ROYALTY T TRUST UNITS +FSV.TO FIRSTSERVICE CORP SUB-VTG COM N +FTS.TO FORTIS INC COM NPV +FTT.TO FINNING INTL INC COM NPV +G.TO GOLDCORP INC COM NPV +GAM.TO GAMMON GOLD INC COM NPV +GIB-A.TO CGI GROUP INC CL A SV +GIL.TO GILDAN ACTIVEWEAR COM NPV +GNA.TO GERDAU AMERISTEEL CORP +GWO.TO GREAT WEST LIFECO COM NPV +HBM.TO HUDBAY MINERALS IN COM NPV +HCG.TO HOME CAPITAL GROUP COM NPV +HPX.TO HIGHPINE OIL & GAS COM NPV +HR-UN.TO H&R REAL ESTATE INVT TR +HSE.TO HUSKY ENERGY INC COM NPV +HTE-UN.TO HARVEST ENERGY TR TRUST UNITS +IAG.TO INDL ALLIANCE INS COM NPV +IGM.TO IGM FINANCIAL INC COM NPV +IIC.TO ING CANADA INC COM NPV +IMG.TO IAMGOLD CORP COM NPV +IMN.TO INMET MINING CORP COM NPV +IMO.TO IMPERIAL OIL COM NPV +INN-UN.TO INNVEST REAL ESTAT TRUST UNITS +IPL-UN.TO INTER PIPELINE FD CLASS'A'LTD P +IVN.TO IVANHOE MINES COM NPV +JAZ-UN.TO JAZZ AIR INCOME FD TRUST UNITS +K.TO KINROSS GOLD CORP +KEY-UN.TO KEYERA FACILITIES TRUST UNITS +KHD.TO CANADIAN HYDRO DEV COM NPV +L.TO LOBLAWS COS LTD COM NPV +LB.TO LAURENTIAN BNK CDA COM CAD1 +LIF-UN.TO LABRADOR IRON ORE TRUST UNITS +LUN.TO LUNDIN MINING CORP COM NPV +MBT.TO MANITOBA TELECOM S COM NPV +MDA.TO MACDONALD DETTWILE COM NPV +MDI.TO MAJOR DRILLING INC COM NPV +MDS.TO MDS INC COM NPV +MFC.TO MANULIFE FINL CORP COM NPV +MFI.TO MAPLE LEAF FOODS COM NPV +MFL.TO MINEFINDERS CORP COM NPV +MG-A.TO MAGNA INTERNATIONAL INC CL A SV +MRU-A.TO METRO INC CL A SV +MX.TO METHANEX CORP COM NPV +NA.TO NATL BK OF CANADA COM NPV +NAE-UN.TO NAL OIL & GAS TST TRUST UNITS +NCX.TO NOVA CHEMICALS COM NPV +NGD.TO NEW GOLD INC COM NPV +NKO.TO NIKO RESOURCES COM NPV +NPI-UN.TO NORTHLAND PWR INC TRUST UNIT +NVA.TO NUVISTA ENERGY COM NPV +NWF-UN.TO NORTH WEST CO UNIT TRUST +NXY.TO NEXEN INC COM NPV +OCX.TO ONEX CORPORATION SV +OSK.TO OSISKO MINING CORP +OTC.TO OPEN TEXT CO COM NPV +PAA.TO PAN AMER SILVER COM NPV +PBG.TO PETROBANK ENERGY & COM NPV +PCA.TO PETRO CANADA COM NPV +PD-UN.TO PRECISION DRILLING TR +PEY-UN.TO PEYTO ENERGY TRUST UNIT TRUST +PGF-UN.TO PENGROWTH ENERGY T SBI NPV +PIF-UN.TO PEMBINA PIPELINE INCOME TRUST U +PJC-A.TO JEAN COUTU GROUP CLASS'A'SUB VT +PMT-UN.TO PARAMOUNT ENERGY TRUST UNITS +PMZ-UN.TO PRIMARIS RETAIL RE TRUST UNITS +POT.TO POTASH CORP SASK COM NPV +POW.TO POWER CORP CDA +PRE.TO PACIFIC RUBIALES ENERGY CORP +PRQ.TO PROGRESS ENERGY RESOURCES CORP +PSI.TO PASON SYSTEM INCOR COM NPV +PVE-UN.TO PROVIDENT ENERGY T TRUST UNITS +PWF.TO POWER FINL CORP COM NPV +PWT-UN.TO PENN WEST ENERGY TR +QBR-B.TO QUEBECOR INC CLASS'B'SUB VTG NP +QUA.TO QUADRA MINING COM NPV +RBA.TO RITCHIE BROS AUCTIONEERS +RBI.TO RED BACK MNG LTD COM NPV +RCI-B.TO ROGERS COMMUNICATIONS INC. CL B +REF-UN.TO CDN REAL EST INV T TRUST UNITS +REI-UN.TO RIOCAN REAL ESTATE TRUST UNITS +RET-A.TO REITMANS(CANADA) CLASS'A'NON VT +RIM.TO RESEARCH IN MOTION LTD +RON.TO RONA INC COM NPV +RUS.TO RUSSEL METALS INC COM NPV +RY.TO ROYAL BK OF CANADA COM NPV +S.TO SHERRITT INTL CORP COM NPV +SAP.TO SAPUTO INC +SC.TO SHOPPERS DRUG MART COM NPV +SCC.TO SEARS CANADA INC COM NPV +SCL-A.TO SHAWCOR LTD +SIF-UN.TO ENERGY SAVINGS INC UNITS +SJR-B.TO SHAW COMMUNICATION 'B'CNV NPV +SLF.TO SUN LIFE FINL INC COM NPV +SLW.TO SILVER WHEATON COR COM NPV +SNC.TO SNC-LAVALIN GROUP COM NPV +SPB.TO SUPERIOR PLUS INCOME FD +SSO.TO SILVER STD RES INC COM NPV +STN.TO STANTEC INC COM NPV +SU.TO SUNCOR ENERGY INC +SVM.TO SILVERCORP METALS INC +SVY.TO SAVANNA ENERGY SER COM NPV +SXC.TO SXC HEALTH SOLUTIO COM NPV +T.TO TELUS CORPORATION COM NPV +TA.TO TRANSALTA CORP MTN COM NPV +TCK-B.TO TECK COMINCO LIMITED CL B SV +TCL-A.TO TRANSCONTINENTAL INC A +TCM.TO THOMPSON CREEK MET COM NPV +TCW.TO TRICAN WELL SERVIC COM NPV +TD.TO TORONTO-DOMINION COM NPV +TDG.TO TRINIDAD ENERGY SVCS INCOME +TFI.TO TRANSFORCE INCOME FD +THI.TO Tim Hortons Inc +TIH.TO TOROMONT INDUSTRIE COM STK NPV +TLM.TO TALISMAN ENERGY IN COM NPV +TNX.TO TANZANIAN ROYALTY COM NPV +TOG.TO TRISTAR OIL & GAS COM NPV +TRE.TO SINO-FOREST CORP COM NPV +TRI.TO THOMSON REUTERS CORP +TRP.TO TRANSCANADA CORP COM NPV +TRZ-B.TO TRANSAT AT INC COM NPV VTG SHS +TS-B.TO TORSTAR CLASS'B'N/VTG COM NPV +UTS.TO UTS ENERGY CORP COM NPV +UUU.TO Uranium One Inc +VET-UN.TO VERMILION ENERGY TRUST UNITS +VT.TO VITERRA INC +WFT.TO WEST FRASER TIMBER COM NPV +WJA.TO WESTJET AIRLINES COM VOTING SHA +WN.TO WESTON (GEORGE) COM NPV +WTE-UN.TO WESTSHORE TERMINAL TRUST UNIT +X.TO TMX GROUP INC/GROUPE TMX INC +YLO-UN.TO YELLOW PAGES INCOM TRUST UNITS +YRI.TO YAMANA GOLD INC COM NPV diff --git a/stockthis.py b/stockthis.py index 15ec37d..7fb51f5 100644 --- a/stockthis.py +++ b/stockthis.py @@ -27,13 +27,13 @@ try: HILDON = True except: HILDON = False - + try: import osso OSSO = True - osso_c = osso.Context("net.yerga.stockthis", "0.1", False) + osso_c = osso.Context("net.yerga.stockthis", "0.2", False) except: - OSSO = False + OSSO = False from marketdata import markets, idmarket, localmarkets, localids @@ -48,7 +48,7 @@ if '/usr/share' in runningpath: running_locally = False else: running_locally = True - + if running_locally: imgdir = 'pixmaps/' else: @@ -68,18 +68,18 @@ class StocksPy: if FREMANTLE: self.window = hildon.StackableWindow() else: - self.window = hildon.Window() - self.program.add_window(self.window) + self.window = hildon.Window() + self.program.add_window(self.window) else: self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - self.window.set_default_size(800, 480) - self.window.set_title('StocksPy') + self.window.set_default_size(800, 480) + self.window.set_title('StockThis') self.window.connect("destroy", gtk.main_quit) 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 - + if HILDON: if FREMANTLE: menu = hildon.AppMenu() @@ -90,49 +90,49 @@ class StocksPy: self.window.set_menu(menu) about_menu = gtk.MenuItem("About") about_menu.set_size_request(-1, 55) - + about_menu.connect("activate", self.on_about) - menu.append(about_menu) + menu.append(about_menu) menu.show_all() else: #TODO: create a gtk.menubar pass - - + + vbox = gtk.VBox() - + self.toolbar = gtk.HBox() self.toolbar.set_property("no-show-all", True) self.toolbar.hide() self.toolbar.set_homogeneous(True) self.toolbar.set_size_request(-1, 55) - + self.markets_btn = gtk.Button('Markets') self.markets_btn.connect("clicked", self.create_markets_view) self.markets_btn.set_property("can_focus", False) - - self.components_btn = gtk.Button('Components') + + self.components_btn = gtk.Button('Companies') self.components_btn.connect("clicked", self.show_components_view) - self.components_btn.set_property("can_focus", False) - + self.components_btn.set_property("can_focus", False) + self.graph_btn = gtk.Button('Graphs') self.graph_btn.connect("clicked", self.create_graphs_view) self.graph_btn.set_property("can_focus", False) - + self.refresh_btn = gtk.Button('Refresh') self.refresh_btn.connect("clicked", self.refresh_stock_data) self.refresh_btn.set_property("can_focus", False) - + self.quotes_btn = gtk.Button('Quotes') self.quotes_btn.connect("clicked", self.show_quotes_view) - self.quotes_btn.set_property("can_focus", False) - - self.toolbar.pack_start(self.markets_btn) + self.quotes_btn.set_property("can_focus", False) + + self.toolbar.pack_start(self.markets_btn) self.toolbar.pack_start(self.components_btn) self.toolbar.pack_start(self.graph_btn) - self.toolbar.pack_start(self.quotes_btn) - self.toolbar.pack_start(self.refresh_btn) - + self.toolbar.pack_start(self.quotes_btn) + self.toolbar.pack_start(self.refresh_btn) + self.mainbox = gtk.VBox() @@ -154,26 +154,26 @@ class StocksPy: self.window.show_all() - def create_markets_view(self, widget): + def create_markets_view(self, widget): names = markets ids = idmarket self.toolbar.hide() - + actual_view = self.mainbox.get_children() if len(actual_view) > 0: for a_widget in actual_view: a_widget.destroy() - self.marketsbox = gtk.VBox() + self.marketsbox = gtk.VBox() lnames = len(names) - + for i in range(lnames): button = gtk.Button(names[i]) button.connect("clicked", self.create_components_view, ids[i]) button.set_size_request(-1, 65) button.set_property("can_focus", False) self.marketsbox.pack_start(button, True, True, 2) - + self.mainbox.pack_start(self.marketsbox, True, True, 2) self.mainbox.show_all() @@ -181,11 +181,11 @@ class StocksPy: kind = self.market_id self.create_components_view(widget, kind) - def create_components_view(self, widget, kind): + def create_components_view(self, widget, kind): actual_view = self.mainbox.get_children() for i in actual_view: i.destroy() - + self.market_id = kind self.toolbar.show() self.components_btn.hide() @@ -193,62 +193,63 @@ class StocksPy: self.refresh_btn.hide() self.graph_btn.hide() self.quotes_btn.hide() - + names = localmarkets[idmarket.index(kind)] ids = localids[idmarket.index(kind)] - + self.compbox = gtk.VBox() - + self.components_trv = gtk.TreeView() - + self.components_trv.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_HORIZONTAL) + if not FREMANTLE: selection = self.components_trv.get_selection() selection.connect("changed", self.changed_selection, ids) else: self.components_trv.connect("row-activated", self.select_component, ids) - + self.components_trv.set_rubber_banding(True) - self.components_trv.set_headers_visible(False) + self.components_trv.set_headers_visible(False) self.components_model = self.__create_components_model() self.components_trv.set_model(self.components_model) - self._components_trv_columns(self.components_trv) + self._components_trv_columns(self.components_trv) self.add_initial_components(names, ids) - - self.compbox.pack_start(self.components_trv, True, True, 0) + + self.compbox.pack_start(self.components_trv, True, True, 0) self.mainbox.pack_start(self.compbox, True, True, 0) self.mainbox.show_all() def select_component(self, widget, path, column, ids): self.create_quotes_view(widget,self.components_model[path][1] ) - + def changed_selection(self, widget, ids): n, i, m = self.get_selected_from_treeview(self.components_trv, self.components_model, 1) if n is not None: self.create_quotes_view(widget, n) - + def __create_components_model(self): lstore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) return lstore - def _components_trv_columns(self, treeview): + def _components_trv_columns(self, treeview): renderer = gtk.CellRendererText() renderer.set_property('scale', 1.6) #renderer.set_property("background", 'lightgray') renderer.set_property("xpad", 15) column = gtk.TreeViewColumn('Name', renderer, text=0) column.set_expand(True) - treeview.append_column(column) - + treeview.append_column(column) + renderer = gtk.CellRendererText() column = gtk.TreeViewColumn('IDS', renderer, text=1) column.set_visible(False) - treeview.append_column(column) - + treeview.append_column(column) + def add_initial_components(self, kind, ids): for i in range(len(kind)): - niter = self.components_model.append() - self.components_model.set(niter, 0, kind[i], 1, ids[i]) + niter = self.components_model.append() + self.components_model.set(niter, 0, kind[i], 1, ids[i]) def get_selected_from_treeview(self, treeview, model, setting): selection = treeview.get_selection() @@ -269,93 +270,93 @@ class StocksPy: self.components_btn.show() self.markets_btn.show() self.refresh_btn.show() - self.graph_btn.show() - self.quotes_btn.hide() - + self.graph_btn.show() + self.quotes_btn.hide() + #actual_view = self.mainbox.get_children() #actual_view[0].destroy() - + try: self.graphbox.destroy() except: pass - + for i in range(len(localids)): if kind in localids[i]: - ind1, ind2 = i, localids[i].index(kind) + ind1, ind2 = i, localids[i].index(kind) self.quotesbox = gtk.VBox() - label1 = gtk.Label('') - label1.set_markup(''+localmarkets[ind1][ind2]+'') - color = gtk.gdk.color_parse("#03A5FF") - label1.modify_fg(gtk.STATE_NORMAL, color) + self.titlelbl = gtk.Label('') + self.titlelbl.set_markup(''+localmarkets[ind1][ind2]+'') + color = gtk.gdk.color_parse("#03A5FF") + self.titlelbl.modify_fg(gtk.STATE_NORMAL, color) self.databox = gtk.VBox() - + self.imagebox = gtk.VBox() - self.dataimg = gtk.Image() + self.dataimg = gtk.Image() self.imagebox.pack_start(self.dataimg) - - self.show_data(kind) - + + self.show_data(kind) + hbox1 = gtk.HBox() - + label2 = gtk.Label('') label2.set_markup('Price:') self.lprice = gtk.Label('') - + hbox1.pack_start(label2, False, False, 50) hbox1.pack_start(self.lprice, False, False, 185) - + hbox2 = gtk.HBox() label4 = gtk.Label('') label4.set_markup('Change:') self.lchange = gtk.Label('') self.lpercent = gtk.Label('') - + hbox2.pack_start(label4, False, False, 50) - hbox2.pack_start(self.lchange , False, False, 145) + hbox2.pack_start(self.lchange , False, False, 145) hbox2.pack_start(self.lpercent, False, False, 0) - + hbox3 = gtk.HBox() - + label7 = gtk.Label('') label7.set_markup('Volume:') self.lvolume = gtk.Label('') - + hbox3.pack_start(label7, False, False, 50) - hbox3.pack_start(self.lvolume , False, False, 145) - + hbox3.pack_start(self.lvolume , False, False, 145) + hbox4 = gtk.HBox() - + label9 = gtk.Label('') label9.set_markup('52 week high:') self.l52whigh = gtk.Label('') - + hbox4.pack_start(label9, False, False, 50) - hbox4.pack_start(self.l52whigh , False, False, 55) - + hbox4.pack_start(self.l52whigh , False, False, 55) + hbox5 = gtk.HBox() - + label11 = gtk.Label('') label11.set_markup('52 week low:') self.l52wlow = gtk.Label('') - + hbox5.pack_start(label11, False, False, 50) hbox5.pack_start(self.l52wlow , False, False, 70) - + self.databox.pack_start(hbox1, True, True, 0) self.databox.pack_start(hbox2, True, True, 0) self.databox.pack_start(hbox3, True, True, 0) self.databox.pack_start(hbox4, True, True, 0) self.databox.pack_start(hbox5, True, True, 0) - - self.quotesbox.pack_start(label1, False, False, 0) - self.quotesbox.pack_start(gtk.HSeparator(), False, False, 0) - self.quotesbox.pack_start(self.databox, True, True, 0) - self.quotesbox.pack_start(self.imagebox, True, True, 0) + + self.quotesbox.pack_start(self.titlelbl, False, False, 0) + self.quotesbox.pack_start(gtk.HSeparator(), False, False, 0) + self.quotesbox.pack_start(self.databox, True, True, 0) + self.quotesbox.pack_start(self.imagebox, True, True, 0) self.mainbox.pack_start(self.quotesbox, True, True, 0) self.mainbox.show_all() @@ -369,14 +370,20 @@ class StocksPy: self.databox.hide() thread.start_new_thread(self.get_data, (kind,)) - def get_data(self, kind): + def get_data(self, kind): self.graph_btn.show() self.refresh_btn.show() - self.quotes_btn.hide() - + self.quotes_btn.hide() + from ystockquote import ystockquote as yt - data = yt.get_all(kind) - + try: + data = yt.get_all(kind) + except: + print 'Failed to get internet data' + data = {'price': 'N/A', 'change': 'N/A', 'volume':'N/A', + '52_week_high': 'N/A', '52_week_low': 'N/A'} + self.titlelbl.set_markup('Failed to get data') + try: ch_percent = 100.0 * float(data['change'])/float(data['price']) except ValueError: @@ -385,58 +392,58 @@ class StocksPy: self.lprice.set_label(data['price']) self.lchange.set_label(data['change']) self.lpercent.set_label('%6.2f %%' % ch_percent) - + if '-' in data['change']: color = gtk.gdk.color_parse("#FF0000") else: - color = gtk.gdk.color_parse("#16EB78") - + color = gtk.gdk.color_parse("#16EB78") + self.lpercent.modify_fg(gtk.STATE_NORMAL, color) - self.lchange.modify_fg(gtk.STATE_NORMAL, color) - + self.lchange.modify_fg(gtk.STATE_NORMAL, color) + self.lvolume.set_label(data['volume']) self.l52whigh.set_label(data['52_week_high']) self.l52wlow.set_label(data['52_week_low']) - - self.databox.show_all() - self.imagebox.hide() + + self.databox.show_all() + self.imagebox.hide() def refresh_stock_data(self, widget): self.show_data(self.stocks_id) - def create_graphs_view(self, widget): + def create_graphs_view(self, widget): self.graph_btn.hide() self.refresh_btn.hide() self.quotes_btn.show() - + self.graph = gtk.Image() - + kind = self.stocks_id - + self.show_graph(None, '1d', kind) - + for i in range(len(localids)): if kind in localids[i]: ind1, ind2 = i, localids[i].index(kind) - #self.mainbox.destroy() + #self.mainbox.destroy() #self.mainbox = gtk.VBox() - #self.swin.add_with_viewport(self.mainbox) - + #self.swin.add_with_viewport(self.mainbox) + actual_view = self.mainbox.get_children() for a_widget in actual_view: - a_widget.destroy() + a_widget.destroy() self.graphbox = gtk.VBox() - label1 = gtk.Label(localmarkets[ind1][ind2]) + self.graphs_title = gtk.Label(localmarkets[ind1][ind2]) color = gtk.gdk.color_parse("#03A5FF") - label1.modify_fg(gtk.STATE_NORMAL, color) - + self.graphs_title.modify_fg(gtk.STATE_NORMAL, color) + hbox1 = gtk.HBox() hbox1.set_size_request(-1, 55) hbox1.set_homogeneous(True) - + self.btn1d = gtk.Button('1d') self.btn1d.set_property("can_focus", False) self.btn1d.connect("clicked", self.show_graph, '1d', kind) @@ -461,22 +468,22 @@ class StocksPy: self.btnmax = gtk.Button('max') self.btnmax.set_property("can_focus", False) self.btnmax.connect("clicked", self.show_graph, 'max', kind) - + hbox1.pack_start(self.btn1d) - hbox1.pack_start(self.btn5d) - hbox1.pack_start(self.btn3m) - hbox1.pack_start(self.btn6m) - hbox1.pack_start(self.btn1y) - hbox1.pack_start(self.btn2y) - hbox1.pack_start(self.btn5y) - hbox1.pack_start(self.btnmax) - - self.graphbox.pack_start(label1, False, False, 2) - self.graphbox.pack_start(hbox1, False, False, 0) + hbox1.pack_start(self.btn5d) + hbox1.pack_start(self.btn3m) + hbox1.pack_start(self.btn6m) + hbox1.pack_start(self.btn1y) + hbox1.pack_start(self.btn2y) + hbox1.pack_start(self.btn5y) + hbox1.pack_start(self.btnmax) + + self.graphbox.pack_start(self.graphs_title, False, False, 2) + self.graphbox.pack_start(hbox1, False, False, 0) self.graphbox.pack_start(self.graph, True, True, 5) - + self.mainbox.pack_start(self.graphbox, False, False, 2) - self.mainbox.show_all() + self.mainbox.show_all() def show_graph(self, widget, option, kind): import thread @@ -486,51 +493,56 @@ class StocksPy: def get_graph_data(self, option, kind): if option == '1d': url = 'http://uk.ichart.yahoo.com/b?s=%s' % kind - elif option == '5d': + elif option == '5d': url = 'http://uk.ichart.yahoo.com/w?s=%s' % kind - elif option == '3m': + elif option == '3m': url = 'http://chart.finance.yahoo.com/c/3m/s/%s' % kind.lower() - elif option == '6m': + elif option == '6m': url = 'http://chart.finance.yahoo.com/c/6m/s/%s' % kind.lower() - elif option == '1y': + elif option == '1y': url = 'http://chart.finance.yahoo.com/c/1y/s/%s' % kind.lower() - elif option == '2y': + elif option == '2y': url = 'http://chart.finance.yahoo.com/c/2y/s/%s' % kind.lower() - elif option == '5y': + elif option == '5y': url = 'http://chart.finance.yahoo.com/c/5y/s/%s' % kind.lower() - elif option == 'max': + elif option == 'max': url = 'http://chart.finance.yahoo.com/c/my/s/%s' % kind.lower() - - myimg = urllib2.urlopen(url) - imgdata=myimg.read() - pbl = gtk.gdk.PixbufLoader() - pbl.write(imgdata) + try: + myimg = urllib2.urlopen(url) + imgdata=myimg.read() + + pbl = gtk.gdk.PixbufLoader() + pbl.write(imgdata) + + pbuf = pbl.get_pixbuf() + pbl.close() + self.graph.set_from_pixbuf(pbuf) + except: + print 'no internet data' + self.graphs_title.set_label('Failed to get data') + self.graph.destroy() - pbuf = pbl.get_pixbuf() - pbl.close() - - self.graph.set_from_pixbuf(pbuf) #Functions for fullscreen - def on_window_state_change(self, widget, event, *args): + 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 #F6 fullscreen, F7 bigger font, F8 smaller font - def on_key_press(self, widget, event, *args): + def on_key_press(self, widget, event, *args): if event.keyval == gtk.keysyms.F6: if self.window_in_fullscreen: self.window.unfullscreen () else: - self.window.fullscreen () + self.window.fullscreen () def on_about(self, widget): dialog = gtk.AboutDialog() dialog.set_name("StockThis") - dialog.set_version("0.1") + dialog.set_version("0.2") dialog.set_copyright("Copyright © 2009") dialog.set_website("http://stockthis.garage.maemo.org") dialog.set_authors(["Daniel Martin Yerga "]) @@ -540,10 +552,9 @@ class StocksPy: dialog.set_artists(["Logo by Daniel Martin Yerga"]) dialog.run() dialog.destroy() - + if __name__ == "__main__": stockspy = StocksPy() gtk.gdk.threads_enter() gtk.main() gtk.gdk.threads_leave() -