home *** CD-ROM | disk | FTP | other *** search
- # Iconbar handler for ibrowse
- # Created by Py_New on Thu,11 Jan
-
- import tbevent
- import window
- from sys import exit,argv
- from swi import *
- from ifile import NoSuchFile, NoSuchNode
- import icache
- import string
- import regex, regsub
-
- backcol=0xffffff00
- forecol=0x00000000
- fontname="Corpus.Bold"
- pointsize=11
- nchars=80
-
- fh=swi(0x60081,".sii00;i",fontname,pointsize*16,pointsize*16)
- bb=block(9,[0,0,0,0,-1])
- big=2147483647
- swi(0x600a1,"isiiib",fh,'M'*nchars,(1<<18)+(1<<8)+(1<<5),big,big,bb)
-
- width=(bb[7]-bb[5])/400
- ht=(bb[8]-bb[6])/200
- if width<1188:
- width=1188
-
-
- ctrlchars=regex.compile("[\001-\037]")
-
- class Display(window.Window):
- actions={}
- def __init__(self,file,ref):
- self.list=[]
- self.file=""
- if self.move(file,ref):
- window.Window.__init__(self,"Display")
- tbevent.tbclasses[self.id]=self
- self.handle=self.getwimphandle()
- tbevent.winclasses[self.handle]=self
- self.toolbar=window.Window(self.gettoolbars()[1])
- self.setup()
- def setup(self):
- self.hide()
- self.setextent(0,-ht*self.nl,width,ht+64)
- if self.newmenu:
- self.menu=self.newmenu
- s="*****"
- for t in self.menu:
- s=s+','+t[0]
- self.toolbar.stringset_avaliable(3,s)
- if self.notes:
- s="*****"
- for t in self.notes:
- s=s+','+t[0]
- self.toolbar.stringset_avaliable(10,s)
- self.toolbar.gadget_unfade(10)
- else:
- self.toolbar.gadget_fade(10)
- self.settitle("("+self.file+")"+self.node)
- self.show()
- self.findstr=""
- self.findline=0
- def move(self,file,ref):
- try:
- file, node, header, menu, footnotes, text = \
- icache.get_node(file, ref)
- except NoSuchFile, file:
- print "can't find file ",file
- return 0
- except NoSuchNode, node:
- print "can't find node ",node
- return 0
- self.lines=string.splitfields(text,'\n')
- self.nl=len(self.lines)
- for n in range(self.nl):
- self.lines[n]=regsub.gsub(ctrlchars," ",self.lines[n])
- self.header=header
- if self.file:
- self.list=[(self.file,self.node)]+self.list[:10]
- self.file=file
- self.node=node
- if menu:
- self.newmenu=menu
- else:
- self.newmenu=[]
- self.notes=footnotes
- return 1
- def E_SS_ValueChanged(self):
- g=tbevent.idblock[5]
- n=self.toolbar.stringset_getindex(g)-1
- if n<0:
- return
- if g==3:
- if self.move(self.file,self.menu[n][1]):
- self.setup()
- if g==10:
- if self.move(self.file,self.notes[n][1]):
- self.setup()
- def E_Move(self):
- s=self.toolbar.writeable_getvalue(4)
- if self.move(self.file,s):
- self.setup()
- def E_Find(self):
- s=self.toolbar.writeable_getvalue(4)
- try:
- pat=regex.compile(s)
- except regex.error,msg:
- print "bad pattern ",msg
- return
- if self.findstr!=s:
- self.findstr=s
- self.findline=0
- for n in range(self.findline+1,self.nl):
- if pat.search(self.lines[n])>=0:
- self.findline=n
- tbevent.wblock[0]=self.handle
- swi(0x600cc,".b",tbevent.wblock)
- tbevent.wblock[6]=64-ht*(n-2)
- swi(0x600c5,".b",tbevent.wblock)
- return
- def E_Next(self):
- prev,next,up=self.header
- if next:
- if self.move(self.file,next):
- self.setup()
- def E_Previous(self):
- prev,next,up=self.header
- if prev:
- if self.move(self.file,prev):
- self.setup()
- def E_Up(self):
- prev,next,up=self.header
- if up:
- if self.move(self.file,up):
- self.setup()
- def E_Clone(self):
- a=Display(self.file,self.node)
- def E_Dir(self):
- if self.move("dir","Top"):
- self.setup()
- def E_Last(self):
- if self.list:
- a=self.list[0]
- self.list=self.list[1:]
- if self.move(a[0],a[1]):
- self.setup()
- self.list=self.list[1:]
- def W_Redraw(self):
- more=swi(0x400c8,".b;i",tbevent.wblock)
- bx=tbevent.wblock[1]-tbevent.wblock[5]
- by=tbevent.wblock[4]-tbevent.wblock[6]
- swi(0x4074f,"iiii",fh,backcol,forecol,14)
- while more:
- tl=-1+(by-tbevent.wblock[10])/ht
- if tl<0:
- tl=0
- bl=2+(by-tbevent.wblock[8])/ht
- if bl>self.nl:
- bl=self.nl
- for y in range(tl,bl):
- swi(0x40086,"isiii000",fh,self.lines[y],272,bx,by-y*ht)
- more=swi(0x400ca,".b;i",tbevent.wblock)
-
-
- class Orphans:
- actions={}
- def __init__(self):
- tbevent.tbclasses[0]=self
- def BarClick(self):
- a=Display("dir","Top")
- def E_Q_Quit(self):
- exit()
-
- class Messenger:
- def Wimp_MQuit(self):
- exit()
-
- if len(argv)>2:
- if argv[1]=="-d":
- tbevent.debugfile=open(argv[2],"w")
-
- tbevent.initialise("<ibrowse$Dir>")
-
- oi=Orphans()
- tbevent.msghandler=Messenger()
- tbevent.usereport=16
-
- while 1:
- tbevent.poll()