1 # -*- coding: utf-8 -*-
8 class TkWriter(formatter.DumbWriter):
9 def __init__(self, text,viewer):
10 formatter.DumbWriter.__init__(self, self)
15 self.text.insert("insert", data)
17 def anchor_bgn(self, href, name, type):
19 self.anchor = (href, name, type)
20 self.anchor_mark = self.text.index("insert")
26 self.text.tag_add(tag, self.anchor_mark, "insert")
27 def displayurl(event,v=self.viewer,u=url):
29 self.text.tag_bind(tag, "<ButtonPress>", displayurl)
30 self.text.tag_config(tag, foreground="blue", underline=1)
33 class HTMLParser(htmllib.HTMLParser):
34 def anchor_bgn(self, href, name, type):
35 htmllib.HTMLParser.anchor_bgn(self, href, name, type)
36 # On signale directement au writer le debut d'une reference
37 self.formatter.writer.anchor_bgn(href, name, type)
41 self.formatter.writer.anchor_end()
47 def __init__(self,fmt):
51 self.formatter.writer.write(data)
63 old=self.liste[self.index-1]
65 del self.liste[self.index:]
66 self.liste.append(url)
67 self.index=self.index+1
71 self.index=self.index-1
72 return self.liste[self.index-1]
77 if self.index < len(self.liste):
78 url=self.liste[self.index]
79 self.index=self.index+1
85 def __init__(self,parent):
86 self.init_window(parent)
89 self.historique=Historique()
93 def init_window(self,parent):
95 self.fenetre=Tkinter.Toplevel()
96 self.fenetre.title("AIDE EFICAS")
97 if self.fenetre.winfo_screenwidth() < 800 or self.fenetre.winfo_screenheight() < 600:
98 self.fenetre.wm_minsize(300, 150)
100 self.fenetre.wm_minsize(400, 200)
101 self.fenetre.protocol("WM_DELETE_WINDOW",self.destroy)
103 def createWidgets(self):
104 frame = self.frame = Tkinter.Frame(self.fenetre)
105 frame.pack(side="bottom", fill="x")
106 self.homeButton = Tkinter.Button(frame, text="Index",font="Helvetica 12 bold",
108 self.homeButton.pack(side="left")
109 self.b_retour = Tkinter.Button(frame, text="Back",font="Helvetica 12 bold",
111 self.b_retour.pack(side="left")
112 self.b_avance = Tkinter.Button(frame, text="Forward",font="Helvetica 12 bold",
113 command=self.goForward)
114 self.b_avance.pack(side="left")
116 self.b_close = Tkinter.Button(frame, text="Close",font="Helvetica 12 bold",
117 command=self.destroy)
118 self.b_close.pack(side="right")
119 self.config_boutons()
121 self.text=ScrolledText.ScrolledText(self.fenetre,bg='white',relief='sunken',font="Helvetica 12 bold")
122 self.text.pack(side="top", fill="both", expand=1)
123 self.text.bind("<Key-Prior>", self.page_up)
124 self.text.bind("<Key-Next>", self.page_down)
125 self.text.bind("<Key-Up>", self.unit_up)
126 self.text.bind("<Key-Down>", self.unit_down)
127 self.text.bind("<1>", self.clicked)
129 def clicked(self,event):
130 self.text.focus_set()
132 def page_up(self,event):
133 event.widget.yview_scroll(-1, "page")
134 def page_down(self,event):
135 event.widget.yview_scroll(1, "page")
136 def unit_up(self,event):
137 event.widget.yview_scroll(-1, "unit")
138 def unit_down(self,event):
139 event.widget.yview_scroll(1, "unit")
141 def config_boutons(self):
143 Activation du bouton précédent s'il y a lieu
145 if self.historique.index > 1 :
146 self.b_retour.config(state='normal')
148 self.b_retour.config(state='disabled')
149 if self.historique.index < len(self.historique.liste) :
150 self.b_avance.config(state='normal')
152 self.b_avance.config(state='disabled')
154 def openurl(self,url):
155 url=os.path.normpath(url)
156 if self.url and not os.path.isabs(url):
157 rep1,fich1=os.path.split(self.url)
158 rep2,fich2=os.path.split(url)
160 url=os.path.join(rep1,rep2,fich2)
161 url=os.path.normpath(url)
167 data="Impossible de trouver: "+url
169 if self.home is None:
173 def display(self,url):
174 data=self.openurl(url)
175 ext=os.path.splitext(url)[1]
176 self.text.config(state="normal")
177 self.text.delete("1.0", "end")
178 writer=TkWriter(self.text,self)
179 fmt=formatter.AbstractFormatter(writer)
181 parser=HTMLParser(fmt)
183 parser=DumbParser(fmt)
186 self.text.config(state="disabled")
187 self.historique.add(url)
188 self.config_boutons()
191 self.fenetre.bind("<KeyPress-BackSpace>", self.goBack)
193 def goHome(self,event=None):
194 if self.home and self.home != self.url:
195 self.display(self.home)
197 def goBack(self,event=None):
198 url=self.historique.getback()
199 if url:self.display(url)
201 def goForward(self,event=None):
202 url=self.historique.getforward()
203 if url:self.display(url)
207 self.fenetre.destroy()
211 if __name__ == "__main__":
213 v.display("fichiers/index.html")