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

  1. # Iconbar handler for ibrowse
  2. # Created by Py_New on Thu,11 Jan
  3.  
  4. import tbevent
  5. import window
  6. from sys import exit,argv
  7. from swi import *
  8. from ifile import NoSuchFile, NoSuchNode
  9. import icache
  10. import string
  11. import regex, regsub
  12.  
  13. backcol=0xffffff00
  14. forecol=0x00000000
  15. fontname="Corpus.Bold"
  16. pointsize=11
  17. nchars=80
  18.  
  19. fh=swi(0x60081,".sii00;i",fontname,pointsize*16,pointsize*16)
  20. bb=block(9,[0,0,0,0,-1])
  21. big=2147483647
  22. swi(0x600a1,"isiiib",fh,'M'*nchars,(1<<18)+(1<<8)+(1<<5),big,big,bb)
  23.  
  24. width=(bb[7]-bb[5])/400
  25. ht=(bb[8]-bb[6])/200
  26. if width<1188:
  27.    width=1188
  28.  
  29.  
  30. ctrlchars=regex.compile("[\001-\037]")
  31.  
  32. class Display(window.Window):
  33.       actions={}
  34.       def __init__(self,file,ref):
  35.           self.list=[]
  36.           self.file=""
  37.           if self.move(file,ref):
  38.              window.Window.__init__(self,"Display")
  39.              tbevent.tbclasses[self.id]=self
  40.              self.handle=self.getwimphandle()
  41.              tbevent.winclasses[self.handle]=self
  42.              self.toolbar=window.Window(self.gettoolbars()[1])
  43.              self.setup()
  44.       def setup(self):
  45.           self.hide()
  46.           self.setextent(0,-ht*self.nl,width,ht+64)
  47.           if self.newmenu:
  48.              self.menu=self.newmenu
  49.              s="*****"
  50.              for t in self.menu:
  51.                  s=s+','+t[0]
  52.              self.toolbar.stringset_avaliable(3,s)
  53.           if self.notes:
  54.              s="*****"
  55.              for t in self.notes:
  56.                  s=s+','+t[0]
  57.              self.toolbar.stringset_avaliable(10,s)
  58.              self.toolbar.gadget_unfade(10)
  59.           else:
  60.                self.toolbar.gadget_fade(10)
  61.           self.settitle("("+self.file+")"+self.node)
  62.           self.show()
  63.           self.findstr=""
  64.           self.findline=0
  65.       def move(self,file,ref):
  66.           try:
  67.               file, node, header, menu, footnotes, text = \
  68.                icache.get_node(file, ref)
  69.           except NoSuchFile, file:
  70.                  print "can't find file ",file
  71.                  return 0
  72.           except NoSuchNode, node:
  73.                  print "can't find node ",node
  74.                  return 0
  75.           self.lines=string.splitfields(text,'\n')
  76.           self.nl=len(self.lines)
  77.           for n in range(self.nl):
  78.               self.lines[n]=regsub.gsub(ctrlchars," ",self.lines[n])
  79.           self.header=header
  80.           if self.file:
  81.              self.list=[(self.file,self.node)]+self.list[:10]
  82.           self.file=file
  83.           self.node=node
  84.           if menu:
  85.              self.newmenu=menu
  86.           else:
  87.              self.newmenu=[]
  88.           self.notes=footnotes
  89.           return 1
  90.       def E_SS_ValueChanged(self):
  91.           g=tbevent.idblock[5]
  92.           n=self.toolbar.stringset_getindex(g)-1
  93.           if n<0:
  94.              return
  95.           if g==3:
  96.              if self.move(self.file,self.menu[n][1]):
  97.                 self.setup()
  98.           if g==10:
  99.              if self.move(self.file,self.notes[n][1]):
  100.                 self.setup()
  101.       def E_Move(self):
  102.           s=self.toolbar.writeable_getvalue(4)
  103.           if self.move(self.file,s):
  104.              self.setup()
  105.       def E_Find(self):
  106.           s=self.toolbar.writeable_getvalue(4)
  107.           try:
  108.               pat=regex.compile(s)
  109.           except regex.error,msg:
  110.                  print "bad pattern ",msg
  111.                  return
  112.           if self.findstr!=s:
  113.              self.findstr=s
  114.              self.findline=0
  115.           for n in range(self.findline+1,self.nl):
  116.               if pat.search(self.lines[n])>=0:
  117.                  self.findline=n
  118.                  tbevent.wblock[0]=self.handle
  119.                  swi(0x600cc,".b",tbevent.wblock)
  120.                  tbevent.wblock[6]=64-ht*(n-2)
  121.                  swi(0x600c5,".b",tbevent.wblock)
  122.                  return
  123.       def E_Next(self):
  124.           prev,next,up=self.header
  125.           if next:
  126.              if self.move(self.file,next):
  127.                 self.setup()
  128.       def E_Previous(self):
  129.           prev,next,up=self.header
  130.           if prev:
  131.              if self.move(self.file,prev):
  132.                 self.setup()
  133.       def E_Up(self):
  134.           prev,next,up=self.header
  135.           if up:
  136.              if self.move(self.file,up):
  137.                 self.setup()
  138.       def E_Clone(self):
  139.            a=Display(self.file,self.node)
  140.       def E_Dir(self):
  141.           if self.move("dir","Top"):
  142.              self.setup()
  143.       def E_Last(self):
  144.           if self.list:
  145.              a=self.list[0]
  146.              self.list=self.list[1:]
  147.              if self.move(a[0],a[1]):
  148.                 self.setup()
  149.                 self.list=self.list[1:]
  150.       def W_Redraw(self):
  151.           more=swi(0x400c8,".b;i",tbevent.wblock)
  152.           bx=tbevent.wblock[1]-tbevent.wblock[5]
  153.           by=tbevent.wblock[4]-tbevent.wblock[6]
  154.           swi(0x4074f,"iiii",fh,backcol,forecol,14)
  155.           while more:
  156.                 tl=-1+(by-tbevent.wblock[10])/ht
  157.                 if tl<0:
  158.                    tl=0
  159.                 bl=2+(by-tbevent.wblock[8])/ht
  160.                 if bl>self.nl:
  161.                    bl=self.nl
  162.                 for y in range(tl,bl):
  163.                     swi(0x40086,"isiii000",fh,self.lines[y],272,bx,by-y*ht)
  164.                 more=swi(0x400ca,".b;i",tbevent.wblock)
  165.  
  166.  
  167. class Orphans:
  168.       actions={}
  169.       def __init__(self):
  170.           tbevent.tbclasses[0]=self
  171.       def BarClick(self):
  172.           a=Display("dir","Top")
  173.       def E_Q_Quit(self):
  174.           exit()
  175.  
  176. class Messenger:
  177.       def Wimp_MQuit(self):
  178.           exit()
  179.  
  180. if len(argv)>2:
  181.    if argv[1]=="-d":
  182.       tbevent.debugfile=open(argv[2],"w")
  183.  
  184. tbevent.initialise("<ibrowse$Dir>")
  185.  
  186. oi=Orphans()
  187. tbevent.msghandler=Messenger()
  188. tbevent.usereport=16
  189.  
  190. while 1:
  191.       tbevent.poll()