+class pagefetch(object):
+ def __init__(self, fpage):
+ self.pg = fpage
+
+ def attach(self, reader):
+ self.rd = reader
+ self.msg = gtk.Alignment(0, 0.5, 0, 0)
+ self.hlay = gtk.HBox()
+ self.lbl = gtk.Label("Fetching page...")
+ self.hlay.pack_start(self.lbl)
+ self.lbl.show()
+ self.msg.add(self.hlay)
+ self.hlay.show()
+ self.rd.sbar.pack_start(self.msg)
+ self.msg.show()
+
+ self.pg.notify(self.haspage)
+
+ def haspage(self):
+ if self.rd.pagefetch.cur != self: return False
+ if not self.pg.done:
+ return True
+ if self.pg.val is not None:
+ self.rd.setpage(self.pg.val)
+ self.rd.pagefetch.set(None)
+
+ def abort(self):
+ self.rd.sbar.remove(self.msg)
+
+class imgfetch(object):
+ def __init__(self, fimage):
+ self.img = fimage
+ self.upd = False
+ self.error = None
+
+ def attach(self, reader):
+ self.rd = reader
+ self.msg = gtk.Alignment(0, 0.5, 0, 0)
+ self.hlay = gtk.HBox()
+ self.lbl = gtk.Label("Fetching image...")
+ self.hlay.pack_start(self.lbl)
+ self.lbl.show()
+ self.prog = gtk.ProgressBar()
+ self.prog.set_fraction(0.0)
+ self.hlay.pack_start(self.prog)
+ self.prog.show()
+ self.msg.add(self.hlay)
+ self.hlay.show()
+ self.rd.sbar.pack_start(self.msg)
+ self.msg.show()
+
+ self.img.notify(self.imgprog)
+
+ def imgprog(self):
+ if self.rd.imgfetch.cur != self: return False
+ if self.img.done:
+ try:
+ img = self.img.val
+ except Exception as e:
+ self.error = str(e)
+ else:
+ self.rd.setimg(img)
+ self.upd = True
+ self.rd.imgfetch.set(None)
+ else:
+ p = self.img.prog
+ if p: self.prog.set_fraction(p)
+ return True
+
+ def abort(self):
+ self.rd.sbar.remove(self.msg)
+ if not self.upd:
+ self.rd.setimg(None)
+ if self.error is not None:
+ self.rd.pagelbl.set_text("Error fetching image: " + self.error)
+
+class procslot(object):
+ __slots__ = ["cur", "p"]
+ def __init__(self, p):
+ self.cur = None
+ self.p = p
+
+ def set(self, proc):
+ if self.cur is not None:
+ self.cur.abort()
+ self.cur = None
+ if proc is not None:
+ self.cur = proc
+ try:
+ proc.attach(self.p)
+ except:
+ self.cur = None
+ raise
+