7 class TkWriter(formatter.DumbWriter):
8 def __init__(self, text,viewer):
9 formatter.DumbWriter.__init__(self, self)
14 self.text.insert("insert", data)
16 def anchor_bgn(self, href, name, type):
18 self.anchor = (href, name, type)
19 self.anchor_mark = self.text.index("insert")
25 self.text.tag_add(tag, self.anchor_mark, "insert")
26 def displayurl(event,v=self.viewer,u=url):
28 self.text.tag_bind(tag, "<ButtonPress>", displayurl)
29 self.text.tag_config(tag, foreground="blue", underline=1)
32 class HTMLParser(htmllib.HTMLParser):
33 def anchor_bgn(self, href, name, type):
34 htmllib.HTMLParser.anchor_bgn(self, href, name, type)
35 # On signale directement au writer le debut d'une reference
36 self.formatter.writer.anchor_bgn(href, name, type)
40 self.formatter.writer.anchor_end()
46 def __init__(self,fmt):
50 self.formatter.writer.write(data)
62 old=self.liste[self.index-1]
64 del self.liste[self.index:]
65 self.liste.append(url)
66 self.index=self.index+1
70 self.index=self.index-1
71 return self.liste[self.index-1]
76 if self.index < len(self.liste):
77 url=self.liste[self.index]
78 self.index=self.index+1
84 def __init__(self,parent):
85 self.init_window(parent)
88 self.historique=Historique()
92 def init_window(self,parent):
94 self.fenetre=Tkinter.Toplevel()
95 self.fenetre.title("AIDE EFICAS")
96 if self.fenetre.winfo_screenwidth() < 800 or self.fenetre.winfo_screenheight() < 600:
97 self.fenetre.wm_minsize(300, 150)
99 self.fenetre.wm_minsize(400, 200)
100 self.fenetre.protocol("WM_DELETE_WINDOW",self.destroy)
102 def createWidgets(self):
103 frame = self.frame = Tkinter.Frame(self.fenetre)
104 frame.pack(side="bottom", fill="x")
105 self.homeButton = Tkinter.Button(frame, text="Index",font="Helvetica 12 bold",
107 self.homeButton.pack(side="left")
108 self.b_retour = Tkinter.Button(frame, text="Back",font="Helvetica 12 bold",
110 self.b_retour.pack(side="left")
111 self.b_avance = Tkinter.Button(frame, text="Forward",font="Helvetica 12 bold",
112 command=self.goForward)
113 self.b_avance.pack(side="left")
115 self.b_close = Tkinter.Button(frame, text="Close",font="Helvetica 12 bold",
116 command=self.destroy)
117 self.b_close.pack(side="right")
118 self.config_boutons()
120 self.text=ScrolledText.ScrolledText(self.fenetre,bg='white',relief='sunken',font="Helvetica 12 bold")
121 self.text.pack(side="top", fill="both", expand=1)
122 self.text.bind("<Key-Prior>", self.page_up)
123 self.text.bind("<Key-Next>", self.page_down)
124 self.text.bind("<Key-Up>", self.unit_up)
125 self.text.bind("<Key-Down>", self.unit_down)
126 self.text.bind("<1>", self.clicked)
128 def clicked(self,event):
129 self.text.focus_set()
131 def page_up(self,event):
132 event.widget.yview_scroll(-1, "page")
133 def page_down(self,event):
134 event.widget.yview_scroll(1, "page")
135 def unit_up(self,event):
136 event.widget.yview_scroll(-1, "unit")
137 def unit_down(self,event):
138 event.widget.yview_scroll(1, "unit")
140 def config_boutons(self):
142 Activation du bouton précédent s'il y a lieu
144 if self.historique.index > 1 :
145 self.b_retour.config(state='normal')
147 self.b_retour.config(state='disabled')
148 if self.historique.index < len(self.historique.liste) :
149 self.b_avance.config(state='normal')
151 self.b_avance.config(state='disabled')
153 def openurl(self,url):
154 url=os.path.normpath(url)
155 if self.url and not os.path.isabs(url):
156 rep1,fich1=os.path.split(self.url)
157 rep2,fich2=os.path.split(url)
159 url=os.path.join(rep1,rep2,fich2)
160 url=os.path.normpath(url)
166 data="Impossible de trouver: "+url
168 if self.home is None:
172 def display(self,url):
173 data=self.openurl(url)
174 ext=os.path.splitext(url)[1]
175 self.text.config(state="normal")
176 self.text.delete("1.0", "end")
177 writer=TkWriter(self.text,self)
178 fmt=formatter.AbstractFormatter(writer)
180 parser=HTMLParser(fmt)
182 parser=DumbParser(fmt)
185 self.text.config(state="disabled")
186 self.historique.add(url)
187 self.config_boutons()
190 self.fenetre.bind("<KeyPress-BackSpace>", self.goBack)
192 def goHome(self,event=None):
193 if self.home and self.home != self.url:
194 self.display(self.home)
196 def goBack(self,event=None):
197 url=self.historique.getback()
198 if url:self.display(url)
200 def goForward(self,event=None):
201 url=self.historique.getforward()
202 if url:self.display(url)
206 self.fenetre.destroy()
210 if __name__ == "__main__":
212 v.display("fichiers/index.html")