home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
p
/
python
/
!ibrowse
/
py
/
ibrowse
< prev
next >
Wrap
Text File
|
1996-04-10
|
6KB
|
191 lines
# 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()