class TransformationParameterWidget(QWidget):
	"""
	TransformationParameterWidget
	"""

	def __init__(self):
		super(TransformationParameterWidget, self).__init__()

		self.cancelButton = QPushButton("Cancel")
		self.cancelButton.clicked.connect(self.cancelButtonClicked)

		self.applyButton = QPushButton("Apply")
		self.applyButton.clicked.connect(self.applyButtonClicked)

		self.mainLayout = QGridLayout()
		self.mainLayout.setSpacing(0)
		self.mainLayout.setContentsMargins(0, 0, 0, 0)

		self.widget = QWidget()
		self.widget.setLayout(self.mainLayout)

		self.showControls(False)

		self.transformationWidget = None
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(self.widget, 0, 0, 1, 2)
		layout.addWidget(self.cancelButton, 1, 0)
		layout.addWidget(self.applyButton, 1, 1)
		self.setLayout(layout)

	def setTransformationTool(self, transformationTool):
		self.transformationTool = transformationTool

		self.cleanUpTransformWidget()

		self.transformationWidget = self.transformationTool.getParameterWidget()
		self.mainLayout.addWidget(self.transformationWidget)
		self.showControls(True)

	@Slot()
	def cancelButtonClicked(self):
		"""
		Cancels the transform and hides the apply / cancel buttons
		"""
		self.showControls(False)
		self.cleanUpTransformWidget()

		self.transformationTool.cancelTransform()
		self.transformationTool.cleanUp()
		self.transformationTool = None

	@Slot()
	def applyButtonClicked(self):
		"""
		Applies the transform and hides the apply / cancel buttons
		"""
		self.showControls(False)
		self.cleanUpTransformWidget()

		self.transformationTool.applyTransform()
		self.transformationTool.cleanUp()
		self.transformationTool = None

	def showControls(self, show):
		self.widget.setVisible(show)
		self.applyButton.setVisible(show)
		self.cancelButton.setVisible(show)

	def cleanUpTransformWidget(self):
		item = self.mainLayout.takeAt(0)
		if item:
			item.widget().deleteLater()