Ejemplo n.º 1
0
def findDefaultFontFamily():
	for generic in generics:
		if len(generic) > 0:
			fontFamily = generic[0]
			kaplot.debug("default font family %r, font %r will be used" % (generic.name, fontFamily.name), printonce=True)
			return fontFamily
	raise Exception, "no font found"
Ejemplo n.º 2
0
		def _checkProductions(self, *args, **kwargs):
			"""Bind the custom gui-event to this function, all arguments will be ignored"""
			if not self.producerQueue.empty():
				callable, args, kwargs = self.producerQueue.get()
				product = callable(*args, **kwargs)
				self.productQueue.put(product)
				kaplot.debug("product is produced")
Ejemplo n.º 3
0
		def _handleDeleteWindow(self):
			#self.root.quit()
			kaplot.debug("closing window")
			self.root.withdraw()
			if self.threaded:
				self.closelock.set()
			else:
				self.keeprunning = False
Ejemplo n.º 4
0
		def run(self):
			self.testMutex = threading.Semaphore(1)
			self.root = Tkinter.Tk()
			self.root.withdraw()
			self.root.bind('<<Other-Thread-Event>>', self._checkProductions)
			self.startEvent.set()
			kaplot.debug("running tk mainloop")
			self.root.mainloop()
			kaplot.debug("end of tk mainloop")
Ejemplo n.º 5
0
		def close(self):
			if self.threaded:
				kaplot.debug("waiting for deleteEvent")
				self.deleteEvent.wait()
			else:
				try:
					while True:
						self.update()
						self.parent.state() # this might throw an exception if app is destoyed.. which is what we want
						time.sleep(0.02)
				except _tkinter.TclError:
					pass
Ejemplo n.º 6
0
 def draw(self, device):
     device.preDraw(self)
     self.layout()
     #device.pushContext(self.context)
     for page in self.pages:
         device.preDrawPage(self, page)
         start = time()
         page.draw(device)
         kaplot.debug("time to draw page:", time() - start)
         device.postDrawPage(self, page)
     #device.popContext()
     device.postDraw(self)
Ejemplo n.º 7
0
def findMatchingFontFamilies(fontname):
	firstGenericFontFamily = findGenericFontFamily(fontname)
	fontnameList = []
	if firstGenericFontFamily:
		kaplot.debug("font %r is part of generic family %r" % (fontname, firstGenericFontFamily.name), printonce=True)
		fontnameList.extend(list(firstGenericFontFamily))
		for generic in generics:
			if generic != firstGenericFontFamily:
				fontnameList.extend(list(generic))
	else:
		for generic in generics:
			fontnameList.extend(list(generic))
	return fontnameList
Ejemplo n.º 8
0
 def plot(self, device):
     device.pushContext(self.context)
     begin = time()
     cinterface = device.getCInterface()
     if cinterface:
         polylines, labels = _contour.contour(self.data2d, self.level,
                                              cinterface)
     else:
         polylines, labels = _contour.contour(self.data2d, self.level)
         for x, y in polylines:
             device.plotPolyline(x, y)
     kaplot.debug("time for contour:", time() - begin)
     device.popContext()
Ejemplo n.º 9
0
			def _updateImage():
				kaplot.debug("updating image")
				self.pageImages[self.currentPage] = \
					PIL.Image.fromstring("RGB", (self.image.width, self.image.height), self.image.get_rgb_string(), "raw", "RGB", 0, 0)
				current = self.pageImages[self.currentDisplayPage]
				#self.overlay = current.copy()
				self.canvas.delete(Tkinter.ALL)
				self.tkimage = PIL.ImageTk.PhotoImage(current)
				width, height = self.image.width, self.image.height
				self.canvas.create_image(width/2., height/2., image=self.tkimage)
				self.canvas["width"] = self.image.width
				self.canvas["height"] = self.image.height
				self.canvas.update()
				#self.label["image"]  = self.tkimage
				self._refreshDocument()
				self.root.deiconify()
Ejemplo n.º 10
0
def findFontFamily(fontFamilyName):
	fontFamily = None

	# a case sensitive lookup
	if fontFamilyName in fontFamilies.keys():
		fontFamily = fontFamilies[fontFamilyName]

	# generic searching
	if fontFamily == None:
		for generic in generics:
			if generic.name == fontFamilyName.lower():
				if len(generic) > 0:
					fontFamily = generic[0]
					kaplot.debug("generic font family %r is found, font %r will be used" %\
						(generic.name, fontFamily.name), printonce=True)
				else:
					kaplot.debug("no font present for generic font family %r" % (fontFamilyName.lower()))
				break

	# a case insensitive sensitive lookup with substrings matching
	if fontFamily == None:
		for someFontFamily in fontFamilies.values():
			if someFontFamily.fuzzyMatch(fontFamilyName=fontFamilyName):
				fontFamily = someFontFamily
				kaplot.debug("font family %r not found, but %r matches it name" %\
					(fontFamilyName, fontFamily.name), printonce=True)
				break

	# find a font with a similar generic family
	if fontFamily == None:
		generic = findGenericFontFamily(fontFamilyName)
		if generic:
			# now take the first font in this family that is present
			if len(generic) > 0:
				fontFamily = generic[0]
				kaplot.debug("font family %r not found, but %r is part of the same font family(%r)" % \
						 (fontFamilyName, fontFamily.name, generic.name), printonce=True)

	if fontFamily == None:
		kaplot.debug("can't recognise or find font %r, using a default font" % fontFamilyName, printonce=True)
		fontFamily = findDefaultFontFamily()

	return fontFamily
Ejemplo n.º 11
0
		def mainloop(self):
			self.root.deiconify()
			if not self.threaded:
				self.keeprunning = True
		# 		#clear(self.root.mainloop()
				#return False
				#self.root.iconify()
				try:
					while self.keeprunning:
						self.update()
						self.parent.state() # this might throw an exception if app is destoyed.. which is what we want
						time.sleep(0.02)
				except _tkinter.TclError:
					kaplot.debug("exit mainloop")
				#tkMaster.mainloop()
				#self.root.mainloop()
			else:
				kaplot.debug("waiting for window to close")
				self.closelock.clear()
				self.closelock.wait()
Ejemplo n.º 12
0
	def createImageWindow(threaded=False):
		kaplot.debug("creating window, threaded=%r" % threaded)
		if threaded:
			def createPlotWindow(root):
				frame = createFrame(root)
				window = TkWindow(frame, 500, 400, 1, threaded=True)
				window.grid(row=0, column=0, sticky="NWSE")
				frame.columnconfigure(0, weight=1)
				frame.rowconfigure(0, weight=1)
				return window
			windowThread = getGuiThread()
			window = windowThread.executeFromThread(createPlotWindow, windowThread.root)
			return window
		else:
			tkMaster = getTkMaster()
			frame = createFrame(tkMaster)
			window = TkWindow(frame, 500, 400, 1, threaded=False)
			window.grid(row=0, column=0, sticky="NWSE")
			frame.columnconfigure(0, weight=1)
			frame.rowconfigure(0, weight=1)
			return window
Ejemplo n.º 13
0
		def executeFromThread(self, callable, *args, **kwargs):
			#self.createMutex.acquire()
			if threading.currentThread() == self: # these can be executed directly
				kaplot.debug("calling executeFromThread from gui thread, returning directly")
				return callable(*args, **kwargs)
			else:
				self.producerQueue.put((callable, args, kwargs))
				kaplot.debug("generating event to execute a function in the gui thread")
				self._generateGuiEvent()
				kaplot.debug("waiting for reply from the gui thread")
				result = self.productQueue.get()
				kaplot.debug("got return value from gui thread")
	
			#self.createMutex.release()
			return result
Ejemplo n.º 14
0
    def handleMouseEvent(self, x, y, options, window):
        if self.onmouse and self.onmouse(x, y, options, window):
            return
        text = self.getMouseMoveText(x, y)
        window.setInfoText(text)
        if options["leftdouble"]:
            #print "double click, select container"
            vx, vy = self.getDocument().windowToViewport(x,
                                                         y,
                                                         viewport=((0, 0),
                                                                   (1, 1)))
            container = self.page.findContainer(vx, vy, previous=self)
            kaplot.debug("found container", container)
            if container:
                container.flashViewport(window)
                window.select(container)

        if options["rightup"]:
            self.flashViewport(window)
            menu = window.createMenu()
            clipboardMenu = window.createMenu()

            clipboardMenu.addCommand("viewport", self.testClipboard)

            menu.addSubMenu("zoom", self.getZoomMenu(window, x, y, menu))
            menu.addSubMenu("grow", self.getGrowMenu(window, menu))
            menu.addSubMenu("flip", self.getFlipMenu(window, menu))
            menu.addSeparator()
            wx, wy = self.windowToWorld(x, y)

            def center(window, x, y):
                self.center(x, y)
                window.refreshDocument()

            def centerx(window, x):
                self.centerx(x)
                window.refreshDocument()

            def centery(window, y):
                self.centery(y)
                window.refreshDocument()

            menu.addCommand("center", center, args=[wx, wy])
            menu.addCommand("center x", centerx, args=[wx])
            menu.addCommand("center y", centery, args=[wy])

            def fitChildren(window):
                self.fitChildren()
                window.refreshDocument()

            menu.addCommand("fit", fitChildren)

            menu.addSeparator()

            #menuOptions.append(("select", self.getSelectionMenu()))
            menu.addSubMenu("context",
                            self.getContextMenu(window, self.context, menu))
            #childMenu = window.createMenu(menu)
            #for i, child in enumerate(self.objects):
            #	name = "object [%d] = %s" % (i, str(child.__class__))
            #	childMenu.addSubMenu(name, self.getContextMenu(window, child.context, childMenu))
            #menu.addSubMenu("children", childMenu)
            #print "showing popup menu"
            window.showPopupMenu(menu)
            #print "showed it"

        if options["dragging"] and options["leftisdown"]:
            x1, y1 = options["dragposition"]
            x2, y2 = x, y
            xlist = [x1, x2, x2, x1]
            ylist = [y1, y1, y2, y2]
            #winx1, winy1 = self.getDocument().viewportToWindow(0, 0, self.innerViewport)
            #winx2, winy2 = self.getDocument().viewportToWindow(1, 1, self.innerViewport)
            #print winx1, winy1
            extraText = self.getMouseDragText(x1, y1, x2, y2)
            #if self.fitmode == "xy":
            #	xlist = [x1, x2, x2, x1]
            #	ylist = [y1, y1, y2, y2]
            #elif self.fitmode == "x":
            #	xlist = [x1, x2, x2, x1]
            #	ylist = [winy1, winy1, winy2, winy2]
            #elif self.fitmode == "y":
            #	xlist = [winx1, winx2, winx2, winx1]
            #	ylist = [y1, y1, y2, y2]
            window.setRubberBand(xlist, ylist, close=True)
            window.setInfoExtraText(extraText)
            window.refreshWindow()
        elif options["wasdragging"] and options["leftup"]:
            x1, y1 = options["dragposition"]
            x2, y2 = x, y
            w1 = self.windowToWorld(x1, y1)
            w2 = self.windowToWorld(x2, y2)
            v1 = self.getDocument().windowToViewport(x1, y1)
            v2 = self.getDocument().windowToViewport(x2, y2)

            #if self.fitmode == "x":
            #
            def zoomtobox(window, p1, p2):
                self.world = p1, p2
                window.refreshDocument()

            def changeviewport(window, v1, v2):
                self.viewport = v1, v2
                window.refreshDocument()

            menu = window.createMenu()
            menu.addCommand("zoom", zoomtobox, args=[w1, w2])
            menu.addCommand("change viewport", changeviewport, args=[v1, v2])
            window.showPopupMenu(menu)
            window.removeRubberBand()
            window.refreshWindow()

        if options["dragging"] and options["middleisdown"]:
            x1, y1 = options["dragposition"]
            x2, y2 = x, y
            extraText = self.getMouseDragText(x1, y1, x2, y2)
            xlist = [x1, x2]
            ylist = [y1, y2]
            window.setRubberBand(xlist, ylist, close=False)
            window.setInfoExtraText(extraText)
            window.refreshWindow()
        elif options["wasdragging"] and options["middleup"]:
            x1, y1 = options["dragposition"]
            x2, y2 = x, y
            (wx1, wy1) = self.windowToWorld(x1, y1)
            (wx2, wy2) = self.windowToWorld(x2, y2)
            dx = wx2 - wx1
            dy = wy2 - wy1

            def pan(window, dx, dy):
                (x1, y1), (x2, y2) = self.getWorld()
                self.world = (x1 + dx, y1 + dy), (x2 + dx, y2 + dy)
                window.refreshDocument()

            menu = window.createMenu()
            menu.addCommand("pan", pan, args=[dx, dy])
            menu.addCommand("pan (x only)", pan, args=[dx, 0])
            menu.addCommand("pan (y only)", pan, args=[0, dy])
            window.showPopupMenu(menu)
            window.removeRubberBand()
            window.refreshWindow()
Ejemplo n.º 15
0
		def __init__(self, parent, width, height, pageCount, threaded=False, **kw):
			Tkinter.Frame.__init__(self, parent, **kw)
			Window.__init__(self)
			self.parent = parent
			self.root = parent
			self.width = width
			self.height = height
			self.pageCount = pageCount
			self.threaded = threaded
			kaplot.debug("treaded = %s" % threaded)
	
			root = parent
	
			self.currentDisplayPage = 0
			self.currentPage = 0
			def image():
				return PIL.Image.fromstring("RGB", (self.width, self.height), "\x00\x00\x00" * width * height)
			self.pageImages = [image() for k in range(self.pageCount)]
			
			self.tkimage = PIL.ImageTk.PhotoImage(self.pageImages[self.currentPage])
			#self.label = Tkinter.Label(self, image=self.tkimage, relief=Tkinter.SUNKEN, bd=2)
			#self.label.grid(row=1, column=0, columnspan=4, rowspan=2, sticky="NE")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
			self.canvas = Tkinter.Canvas(self, relief=Tkinter.SUNKEN, bd=0, takefocus=True)
			self.canvas.grid(row=10, column=0, columnspan=4, rowspan=2, sticky="NW")
	
			self.zoomwidth, self.zoomheight = 128, 128
			self.zoomimage = PIL.Image.fromstring("RGB", (self.zoomwidth, self.zoomheight), "\x00\x00\x00" * self.zoomwidth * self.zoomheight)#, "raw", "RGB", gs.width*3, 1)
			self.zoomtkimage = PIL.ImageTk.PhotoImage(self.zoomimage)
			self.zoomlabel = Tkinter.Label(self, image=self.zoomtkimage, relief=Tkinter.SUNKEN, bd=2)
			self.zoomlabel.grid(row=0, column=0, columnspan=1, rowspan=2,sticky="W")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
			
			self.infoText = Tkinter.Text(self, width=30, height=7, wrap=Tkinter.NONE, takefocus=False)
			self.infoText.grid(row=0, column=1)
	
			self.infoTextCopy = Tkinter.Text(self, width=30, height=7, wrap=Tkinter.NONE, takefocus=False)
			self.infoTextCopy.grid(row=0, column=2)
	
			self.infoTextExtra = Tkinter.Text(self, width=30, height=7, wrap=Tkinter.NONE, takefocus=False)
			self.infoTextExtra.grid(row=0, column=3)
			
			if 0:
				self.button1 = Tkinter.Button(self, text="Test", bd=2)
				self.button1.grid(row=1, column=1, columnspan=1, sticky="W")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
				
				self.scale1label = Tkinter.Label(self, text="E:", bd=2)
				self.scale1label.grid(row=2, column=0, columnspan=1, sticky="E")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
				def test(*args, **kwargs):
					print args, kwargs
				self.scale1 = Tkinter.Scale(self, from_=0, to=100, bd=2, orient=Tkinter.HORIZONTAL, length=500, command=test)
				self.scale1.grid(row=2, column=1, columnspan=3, sticky="W")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
				
				self.scale2label = Tkinter.Label(self, text="L:", bd=2)
				self.scale2label.grid(row=3, column=0, columnspan=1, sticky="E")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
				self.scale2 = Tkinter.Scale(self, from_=0, to=1000, bd=2, orient=Tkinter.HORIZONTAL, length=500)
				self.scale2.grid(row=3, column=1, columnspan=3, sticky="W")#Tkinter.W+Tkinter.E+Tkinter.N+Tkinter.S)
	
			self.frameCount = 0
			#self.label.bind("<Button-1>", self._onMouseClick)
			self.bind('<<refresh>>', self._refresh)
			#self.bind('<Destroy>', self._handleDeleteWindow)
			self.root.protocol("WM_DELETE_WINDOW", self._handleDeleteWindow)
			self.bind("<Key>", self.keyEvent)
			self.canvas.bind("<Key>", self.keyEvent)
			self.canvas.bind("<Motion>", self.mouseEvent)
			self.canvas.bind("<Enter>", self.mouseEventEnter)
			self.canvas.bind("<Button-1>", self.mouseEvent)
			self.canvas.bind("<Button-2>", self.mouseEvent)
			self.canvas.bind("<Button-3>", self.mouseEvent)
			self.canvas.bind("<ButtonRelease-1>", self.mouseEvent)
			self.canvas.bind("<ButtonRelease-2>", self.mouseEvent)
			self.canvas.bind("<ButtonRelease-3>", self.mouseEvent)
			self.canvas.bind("<Double-Button-1>", self.mouseEventDouble)
			self.canvas.bind("<Double-Button-2>", self.mouseEventDouble)
			self.canvas.bind("<Double-Button-3>", self.mouseEventDouble)
			
	
			self.mouseOptions = {}
			self.mouseOptions["dragposition"] = (0, 0)
			self.mouseOptions["moving"] = False
			self.mouseOptions["dragging"] = False
			self.mouseOptions["wasdragging"] = False
			self.mouseOptions["leftdouble"] = False
			self.mouseOptions["leftup"] = False
			self.mouseOptions["leftdown"] = False
			self.mouseOptions["leftisdown"] = False
			self.mouseOptions["middledouble"] = False
			self.mouseOptions["middleup"] = False
			self.mouseOptions["middledown"] = False
			self.mouseOptions["middleisdown"] = False
			self.mouseOptions["rightdouble"] = False
			self.mouseOptions["rightup"] = False
			self.mouseOptions["rightdown"] = False
			self.mouseOptions["rightisdown"] = False
			self.mouseOptions["shift"] = False
			self.mouseOptions["control"] = False
			self.mouseOptions["alt"] = False
			self.lastMousePos = (0, 0)
			self._canvasItems = []
			self.keeprunning = True
			self.defaultCursor = self.getMouseCursor()
			self.menus = []
			if threaded:
				self.closelock = threading.Event(0)
			#self.mainMenu = Tkinter.Menu(self.
			self.canvas.focus_set()
Ejemplo n.º 16
0
		def refreshDocument(self):
			kaplot.debug("refresh document requested")
			def _refreshDocument():
				kaplot.debug("refreshing document")
				self.document.draw(self.device)
			self.root.after_idle(_refreshDocument)
Ejemplo n.º 17
0
 def layout(self):
     for page in self.pages:
         start = time()
         page.layout()
         kaplot.debug("time to layout page:", time() - start)
Ejemplo n.º 18
0
	def postDraw(self, document):
		super(AggDeviceWindow, self).postDraw(document)
		kaplot.debug("agg post draw")
		self.window.updateImage()
Ejemplo n.º 19
0
		def refreshWindow(self):
			kaplot.debug("refresh window requested")
			self.root.after_idle(self._refreshDocument)
Ejemplo n.º 20
0
			def _refreshDocument():
				kaplot.debug("refreshing document")
				self.document.draw(self.device)
Ejemplo n.º 21
0
			def _setImage():
				kaplot.debug("setting image")
				self.image = image
Ejemplo n.º 22
0
 def select(self, object):
     kaplot.debug("selected", object)
     self.selectedObject = object