Esempio n. 1
0
class TextItem(QObject):

	def __init__(self, text, scene, dimensions, transform_fn):
		"""\
		transform_fn(dimensions, w, h): returns a QTransform

		 * dimensions: plotter dimension object
		 * w: text width in pixels
		 * h: text height in pixels
		"""
		QObject.__init__(self)

		self.text = text
		self.scene = scene
		self.dimensions = dimensions
		self.transform = transform_fn

		self.text_item = None
		self.rect = None
		for signal in text.changed, dimensions.changed:
			signal.connect(self.update)

		self.update()

	def update(self):
		# Delete previous text item
		if self.text_item != None:
			self.scene.removeItem(self.text_item)
			# Line below not for QGraphicsSimpleTextItem
			self.text_item.deleteLater()
			self.scene.removeItem(self.rect)

		# Exit if any parameters unset
		if self.text.text == None or self.text.style == None:
			return

		self.text_item = self.get_text_item()
		size = self.text_item.boundingRect()
		w = size.width()
		h = size.height()
		transform = self.transform(self.dimensions, w, h)
		self.text_item.setTransform(transform)
		self.scene.addItem(self.text_item)

		self.rect = QGraphicsRectItem(0,0, w,h)
		self.rect.setTransform(transform)
		if config.debug.plotter.show_text_boxes:
			self.scene.addItem(self.rect)

	def get_text_item(self):
		text_item = QGraphicsTextItem(self.text.text, None)
		text_item.setDefaultTextColor(self.text.style.colour) # QGraphicsTextItem
		#text_item.setPen(self.text.style.colour) # QGraphicsSimpleTextItem
		text_item.setFont(self.text.style.font)
		text_item.setPos(0,0)
		return text_item