from includes import *
from constants import *
from singleton import *

class Settings (Singleton):
	def __init__(self):
		Singleton.__init__( self )
		if self._isNew:
			self.sketcherData = SketcherData()
			self.dvData = DecompositionViewData()
			self.svData = SolutionViewData()
			self.load()
			
	def load(self):
		self.settings = QtCore.QSettings("TUDelft", "Geometric Constraint Solver")
		if len(self.settings.allKeys()) > 0:
			self.sketcherData.load(self.settings)
			self.dvData.load(self.settings)
		
	def save(self):
		self.settings = QtCore.QSettings("TUDelft", "Geometric Constraint Solver")
		self.sketcherData.save(self.settings)
		self.dvData.save(self.settings)
			
class SketcherData(QtCore.QObject):
	def __init__(self):
		QtCore.QObject.__init__(self)
		self.selectColor = QtGui.QColor(255.0, 255.0, 0.0)
		self.pointColor =  QtGui.QColor(33, 163, 125) #[0.13, 0.64, 0.49]
		self.lineColor = QtGui.QColor(0.0, 0.0, 255.0)
		self.fPointColor = QtGui.QColor(0.0, 255.0, 0.0)
		self.distanceColor = QtGui.QColor(0.0, 255.0, 255.0)
		self.angleColor = QtGui.QColor(255.0, 0.0, 0.0, 123)
		self.bgColor = QtGui.QColor(210,210,210)
		
		self.pointRadius = 5
		self.lineRadius = 2
		self.fPointRadius = 5
		self.distanceRadius = 2
		
		self.showGrid = True
		self.gridWidth = 50
		self.gridHeight = 50
	
	def save(self, settings):
		settings.beginGroup("sketcher")
		settings.setValue("selectColor", QtCore.QVariant(self.selectColor))
		settings.setValue("pointColor", QtCore.QVariant(self.pointColor))
		settings.setValue("lineColor", QtCore.QVariant(self.lineColor))
		settings.setValue("fixedPointColor", QtCore.QVariant(self.fPointColor))
		settings.setValue("distanceColor", QtCore.QVariant(self.distanceColor))
		settings.setValue("angleColor", QtCore.QVariant(self.angleColor))
		settings.setValue("backgroundColor", QtCore.QVariant(self.bgColor))
		
		settings.setValue("pointRadius", QtCore.QVariant(self.pointRadius))
		settings.setValue("lineRadius", QtCore.QVariant(self.lineRadius))
		settings.setValue("fixedPointRadius", QtCore.QVariant(self.fPointRadius))
		settings.setValue("distanceRadius", QtCore.QVariant(self.distanceRadius))
		settings.setValue("showGrid", QtCore.QVariant(self.showGrid))
		settings.setValue("gridWidth", QtCore.QVariant(self.gridWidth))
		settings.setValue("gridHeight", QtCore.QVariant(self.gridHeight))
		settings.endGroup()
	
	def load(self, settings):
		settings.beginGroup("sketcher")
		
		self.selectColor = QtGui.QColor(settings.value("selectColor"))
		self.pointColor = QtGui.QColor(settings.value("pointColor"))
		self.lineColor = QtGui.QColor(settings.value("lineColor"))
		self.fPointColor = QtGui.QColor(settings.value("fixedPointColor"))
		self.distanceColor = QtGui.QColor(settings.value("distanceColor"))
		self.angleColor = QtGui.QColor(settings.value("angleColor"))
		self.bgColor = QtGui.QColor(settings.value("backgroundColor"))
		
		self.pointRadius = settings.value("pointRadius").toInt()[0]
		self.lineRadius = settings.value("lineRadius").toInt()[0]
		self.fPointRadius = settings.value("fixedPointRadius").toInt()[0]
		self.distanceRadius = settings.value("distanceRadius").toInt()[0]
		self.showGrid = settings.value("showGrid").toBool();
		self.gridWidth = settings.value("gridWidth").toInt()[0]
		self.gridHeight = settings.value("gridHeight").toInt()[0]
		settings.endGroup()
		
class DecompositionViewData(QtCore.QObject):
	def __init__(self):
		QtCore.QObject.__init__(self)
		self.treeAlignment = TreeOrientation.TOP
		self.treeConnection = ConnectionType.BEZIER
		self.fixedClusterIds = []
	
	def save(self, settings):
		settings.beginGroup("decompositionview")
		settings.setValue("treeAlignment", QtCore.QVariant(self.treeAlignment))
		settings.setValue("treeConnection", QtCore.QVariant(self.treeConnection))
		settings.endGroup()
	
	def load(self, settings):
		settings.beginGroup("decompositionview")
		self.treeAlignment = settings.value("treeAlignment").toInt()[0]
		self.treeConnection = settings.value("treeConnection").toInt()[0]
		settings.endGroup()

class SolutionViewData(QtCore.QObject):
	def __init__(self):
		QtCore.QObject.__init__(self)
		self.pointColor =  QtGui.QColor(33, 163, 125) #[0.13, 0.64, 0.49]
		self.lineColor = QtGui.QColor(0.0, 0.0, 255.0)
		self.fPointColor = QtGui.QColor(0.0, 255.0, 0.0)
		self.distanceColor = QtGui.QColor(0.0, 255.0, 255.0)
		self.angleColor = QtGui.QColor(255.0, 0.0, 0.0, 123)
		self.bgColor = QtGui.QColor(210,210,210)
		
		self.pointRadius = 5
		self.lineRadius = 2
		self.fPointRadius = 5
		self.distanceRadius = 2

		self.pointVisible = True
		self.lineVisible = True
		self.fPointVisible = True
		self.distanceVisible = True
		self.angleVisible = True
		
		self.showGrid = True
		self.gridWidth = 50
		self.gridHeight = 50
	
	def save(self, settings):
		settings.beginGroup("sketcher")
		settings.setValue("pointColor", QtCore.QVariant(self.pointColor))
		settings.setValue("lineColor", QtCore.QVariant(self.lineColor))
		settings.setValue("fixedPointColor", QtCore.QVariant(self.fPointColor))
		settings.setValue("distanceColor", QtCore.QVariant(self.distanceColor))
		settings.setValue("angleColor", QtCore.QVariant(self.angleColor))
		settings.setValue("backgroundColor", QtCore.QVariant(self.bgColor))
		
		settings.setValue("pointRadius", QtCore.QVariant(self.pointRadius))
		settings.setValue("lineRadius", QtCore.QVariant(self.lineRadius))
		settings.setValue("fixedPointRadius", QtCore.QVariant(self.fPointRadius))
		settings.setValue("distanceRadius", QtCore.QVariant(self.distanceRadius))
		settings.setValue("showGrid", QtCore.QVariant(self.showGrid))
		settings.setValue("gridWidth", QtCore.QVariant(self.gridWidth))
		settings.setValue("gridHeight", QtCore.QVariant(self.gridHeight))

		settings.setValue("pointVisible", QtCore.QVariant(self.pointVisible))
		settings.setValue("lineVisible", QtCore.QVariant(self.lineVisible))
		settings.setValue("fPointVisible", QtCore.QVariant(self.fPointVisible))
		settings.setValue("distanceVisible", QtCore.QVariant(self.distanceVisible))
		settings.setValue("angleVisible", QtCore.QVariant(self.angleVisible))
		settings.endGroup()
	
	def load(self, settings):
		settings.beginGroup("sketcher")
		
		self.selectColor = QtGui.QColor(settings.value("selectColor"))
		self.pointColor = QtGui.QColor(settings.value("pointColor"))
		self.lineColor = QtGui.QColor(settings.value("lineColor"))
		self.fPointColor = QtGui.QColor(settings.value("fixedPointColor"))
		self.distanceColor = QtGui.QColor(settings.value("distanceColor"))
		self.angleColor = QtGui.QColor(settings.value("angleColor"))
		self.bgColor = QtGui.QColor(settings.value("backgroundColor"))
		
		self.pointRadius = settings.value("pointRadius").toInt()[0]
		self.lineRadius = settings.value("lineRadius").toInt()[0]
		self.fPointRadius = settings.value("fixedPointRadius").toInt()[0]
		self.distanceRadius = settings.value("distanceRadius").toInt()[0]
		self.showGrid = settings.value("showGrid").toBool();
		self.gridWidth = settings.value("gridWidth").toInt()[0]
		self.gridHeight = settings.value("gridHeight").toInt()[0]

		self.pointVisible = settings.value("pointVisible").toBool();
		self.lineVisible = settings.value("lineVisible").toBool();
		self.fPointVisible = settings.value("fPointVisible").toBool();
		self.distanceVisible = settings.value("distanceVisible").toBool();
		self.angleVisible = settings.value("angleVisible").toBool();
		settings.endGroup()