#$Id: ticker.py,v 1.1 2002/12/08 04:50:33 vanous Exp $
#! /usr/bin/env python
from wxPython.wx import * # import modulů použitých funkcí

ID_ABOUT=wxNewId()
ID_EXIT=wxNewId()
ID_REFRESH=wxNewId()
ID_OPEN=wxNewId()
#vytvoření identifikátorů položek v menu

verze='0.5-alpha '
jmeno="News Ticker " + verze


vsechno=[]
#další globální pole ;-)

import tickurl, conf
#import modulů pro stažení a parsování rss plus modulu pro získání a ukládání konfigurace

UlozenaSize=conf.GetSize()	
browser=conf.GetBrowser()
browser2=conf.GetBrowser2()
#získáme uložené údaje z konfiguračního souboru


class MainWindow(wxFrame): 
#hlavní okno

    def __init__(self,parent,id): 
        self.dirname="." 
        wxFrame.__init__(self,parent,-4, jmeno, size = UlozenaSize, style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
        EVT_SIZE(self, self.OnSize) #událost při změně velikosti
        self.control = wxListBox(self, 60, wxPoint(80, 50), wxSize(80, 100),['Tento program byl vytvořen','pro vyzkoušení si','Pythonu, XML a wxWindow.'], wxLB_SINGLE) #vytvoření listboxu
#        EVT_LISTBOX(self, 60, self.EvtListBoxClick)
        EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick) #událost při kliknutí na listbox
        EVT_BUTTON(self, ID_OPEN, self.EvtListBoxDClick) #událost při kliknutí na button _open_
##        EVT_BUTTON(self, ID_REFRESH, self.MakeMenu) #událost při kliknutí na button _refresh_
       
#        EVT_LISTBOX_RCLICKED(self, 60, self.EvtListRClick)

        self.bar=self.CreateStatusBar() # A Statusbar in the bottom of the window 
        self.bar.SetFieldsCount(3) #nastavení vlastností status baru
        self.bar.SetStatusWidths([-1, 80])
##        self.but = wxButton(self.bar, ID_REFRESH, "Obnovit") #vložení tlačítka do status baru
        self.but2 = wxButton(self.bar, ID_OPEN, "Otevřít") #vložení tlačítka do status baru
#        self.OnSize(None)
        self.MakeMenu(self) #vytvoření menu

    def MakeMenu(self,e): #funkce vytvoreni menu
        # Setting up the menu
         filemenu= wxMenu() #inicializace
         filemenu.Append(ID_ABOUT, "&O programu"," Informace o tomto programu") #přidání položky do menu
         filemenu.AppendSeparator() #přidání oddělovače (šedá čára)
         global servery_def # globální proměnná pro data
         servery_def=conf.GetServer() #načtení parametrů o serverech z konf. souboru
         for server in servery_def: # smyčka
            nId=wxNewId() #vytvoření nového ID pro jednotlivé položky menu
            filemenu.Append(nId, server[0]," Načti data " + server[0] + " (" + server[1] + ")") #přidání položky do menu
            EVT_MENU(self, nId, self.mojo) #přidání události položky menu

         filemenu.AppendSeparator() # přidání oddělovače
         filemenu.Append(ID_EXIT,"&Konec"," Ukončení programu") #přidání další položky menu
         # Creating the menubar. 
         self.menuBar = wxMenuBar() 
         self.menuBar.Append(filemenu,"&Servery") # Adding the "filemenu" to the MenuBar 
         self.SetMenuBar(self.menuBar)  # Adding the MenuBar to the Frame content. 
         EVT_MENU(self, ID_ABOUT, self.OnAbout) # attach the menu-event ID_ABOUT to the method self.OnAbout 
         EVT_MENU(self, ID_EXIT, self.OnExit)   # attach the menu-event ID_EXIT to the method self.OnExit 
         self.Show(true) # zobrazit
    

    def mojo(self,e): #funkce události kliknutí na položku v menu
          u = self.menuBar.GetLabel(e.GetId()) #zjištění položky menu
          for i in servery_def:
              if i[0]==u: #nalezení odpovídající položky v poli
                 self.nacti(i[1],i[2]) #stažení odpovídajícího rss souboru
         
    def OnSize(self, event): # zpracování události při změně velikosti okna
        import conf
        self.cSize=self.GetSize() #načtení rozměrů z konf. souboru
        conf.SetSize(self.cSize.width, self.cSize.height) #nastavení zjištěných údajů
        event.Skip()
        rect=self.bar.GetFieldRect(1) # tady se zpracovává velikost pole ve status baru, 
        rect2=self.bar.GetFieldRect(2) # podle něj se pak vypočte a umístí tlačítko
##        self.but.SetPosition(wxPoint(rect.x+2, rect.y+2))
##        self.but.SetSize(wxSize(rect.width-4, rect.height-4))
        self.but2.SetPosition(wxPoint(rect2.x+2, rect2.y+2)) #samotný výpočet a umístění tlačítka
        self.but2.SetSize(wxSize(rect2.width-4, rect2.height-4))

    def OnAbout(self,e): # o programu ;-)
        d= wxMessageDialog( self, jmeno +
                                  "\nnapsaný ve wxPython.\n"
    		                      "\n"
								  "Petr Vaněk\n"
								  "vanous@penguin.cz","O programu", wxOK)  # Create a message dialog box o programu
        d.ShowModal() # Shows it 
        d.Destroy() # finally destroy it when finished. 

    def OnExit(self,e): 
        self.Close(true)  # Close the frame.

#    def EvtListBoxClick(self, event):
#        self.control.GetItemText(self.currentItem)
#        self.SetStatusText("%s " % (vsechno[self.control.GetSelection()][0]))
#        self.SetStatusText(self.control.GetSelection())
#         self.control.GetItemText(self.currentItem)
#         self.SetStatusText("%s " % (vsechno[self.control.GetSelection()][0]))
#        self.SetToolTip(wxToolTip('toooool'))
#        self.SetStatusText(self.control.GetSelection())
#         d= wxMessageDialog( self,"%s " % (vsechno[self.control.GetSelection()][1]), wxOK)
##         d= wxMessageDialog( self,"%s " % (vsechno[self.control.GetSelection()][2]),"Popisek:",wxOK)
# Create a message dialog box 
##         d.ShowModal() # Shows it 
##         d.Destroy() # finally destroy it when finished. 

#    def EvtListBoxRClick(self, event):
#        self.control.GetItemText(self.currentItem)
#        self.SetStatusText("Pravy klik")
#        self.SetStatusText("%s " % (vsechno[self.control.GetSelection()][0]))
#        self.SetToolTip(wxToolTip('toooool'))
#        self.SetStatusText(self.control.GetSelection())
	
    def PravaMys(self,event):
        d=wxMessageDialog( self,"pravak",wxOK)
        d.ShowModal()
        d.Destroy()

    def EvtListBoxDClick(self, event): #dvojklik - otevření v browseru
        import os
        os.system(browser + " \"" + vsechno[self.control.GetSelection()][0] + "\"" + browser2) # spuštění příkazu s parametry
#        self.control.Delete(self.control.GetSelection()) # po přečtení se položka vymaže z menu, je ale potřeba projít i pole s daty a provést tam změny, odloženo na neurčito ;-)
    
    def nacti(self,url,koding): #stažení dat z požadovaného serveru
        global vsechno # oblíbené globální položky
        if vsechno != 0:
            vsechno[:]=[] # vytvoření prázdného pole (tuple)
        try:
            vsechno=tickurl.convert(url,koding) # stažení a parsing. tady by to chtělo ošetřit timeout, popřípadě dát možnost ručního přerušení.
        except:
            chyba=wxMessageDialog(self, "Naslala chyba při stahování z adresy\n" + url, "Soubor RSS nestažen",wxICON_HAND, wxDefaultPosition) # ošetření chyby
            chyba.ShowModal()
            chyba.Destroy()
#        print vsechno
        sampleList=[]
        for i in vsechno: # rozsekání na kousky
           pavel=i[1]
           petr=pavel
           petr=pavel.encode(koding)
           sampleList.append(petr)
        self.control.Set(sampleList) # naplnění list boxu
        self.SetTitle(jmeno + sampleList[0]) # nastavení title okna

app = wxPySimpleApp() # spuštění
frame = MainWindow(None, -1) 
frame.Show(1) 
app.MainLoop() 
app.MainLoop()

