def __init__(self, mainwin, machine):
		self._mainwin = mainwin
		self._machine = machine

		super(ControlGraphicsView, self).__init__(None)

		self._ui = Ui_GraphicsViewWindow()
		self._ui.setupUi(self)

		self._ui.markOrigin.clicked.connect(self.markOrigin)
		self._ui.gotoXY.clicked.connect(self.gotoXY)
		self._ui.polarFixXY.clicked.connect(self.polarFixXY)
		self._ui.closeButton.clicked.connect(self.close)
class ControlGraphicsView(QtGui.QDialog):
	closed = QtCore.Signal()

	def __init__(self, mainwin, machine):
		self._mainwin = mainwin
		self._machine = machine

		super(ControlGraphicsView, self).__init__(None)

		self._ui = Ui_GraphicsViewWindow()
		self._ui.setupUi(self)

		self._ui.markOrigin.clicked.connect(self.markOrigin)
		self._ui.gotoXY.clicked.connect(self.gotoXY)
		self._ui.polarFixXY.clicked.connect(self.polarFixXY)
		self._ui.closeButton.clicked.connect(self.close)

	@QtCore.Slot()
	def markOrigin(self):
		(x, y) = self._scene.getCursorPosition()
		self._scene.setCrosshairPosition(x, y)
		self._mainwin.setOriginOffset(x, y)

	@QtCore.Slot()
	def gotoXY(self):
		if isinstance(self._machine.action(), ProgrammedMotionController):
			return
		elif not isinstance(self._machine.action(), ManualMotionController):
			self._machine.setAction(ManualMotionController(self._machine))

		(posX, posY) = self._scene.getCursorPosition()
		(orgX, orgY) = self._scene.getCrosshairPosition()

		(posR, posPhi) = toPolar(posX - orgX, posY - orgY)
		(r, deltaPhi) = self._mainwin.polarCorrection()
		(posX, posY) = fromPolar(posR * r, posPhi + deltaPhi)

		workpiecePos = self._mainwin.workpiecePos()
		self._machine.action().gotoXYZ(posX + workpiecePos[0], posY + workpiecePos[1])

	@QtCore.Slot()
	def polarFixXY(self):
		(orgX, orgY) = self._scene.getCrosshairPosition()
		(posX, posY) = self._scene.getCursorPosition()
		(r1, phi1) = toPolar(posX - orgX, posY - orgY)

		workpiecePos = self._mainwin.workpiecePos()
		posX = self._machine.machineStatus().x() - workpiecePos[0] + orgX
		posY = self._machine.machineStatus().y() - workpiecePos[1] + orgY
		(r2, phi2) = toPolar(posX - orgX, posY - orgY)
		self._mainwin.setPolarCorrection(r2 / r1, phi2 - phi1)

	def closeEvent(self, event):
		self.closed.emit()
		event.accept()

	def render(self, parser):
		self._scene = MyGraphicsScene()

		renderer = SceneRenderer(self._scene)
		renderer.render(parser)

		self._ui.graphicsView.setScene(self._scene)

		bbox = self._scene.itemsBoundingRect()
		bbox.setTop(bbox.top() - bbox.height() * 0.1)
		bbox.setBottom(bbox.bottom() + bbox.height() * 0.1)
		bbox.setLeft(bbox.left() - bbox.width() * 0.1)
		bbox.setRight(bbox.right() + bbox.width() * 0.1)
		self._scene.setSceneRect(bbox)
		self._ui.graphicsView.fitInView(bbox, QtCore.Qt.KeepAspectRatio)
		self._ui.graphicsView.autoconfSizes()  # @fixme wait for initial resize