from VectorSprite import VectorSprite
from EditableVectorShape import EditableVectorShape

class EditableVectorSprite(VectorSprite):
	detectDistance = 5
	shapeClass = EditableVectorShape
	
	def __init__(self, canvas = None):
		VectorSprite.__init__(self)
		self.lastShape = None
		self.candidates = []
		self.canvas = canvas
	
	def New(self, points):
		self.lastShape = VectorSprite.New(self, points)
	
	def Last(self):
		return self.lastShape
	
	def Select(self, pos):
		rev = self.shapes[:]
		rev.reverse()
		
		for s in rev:
			if s.SelectVerticies(pos):
				return s
		
		for s in rev:
			if s.SelectPolygons(pos):
				return s
	
	def DeselectAll(self):
		[s.DeselectAll() for s in self.shapes]
	
	def Selected(self):
		return [s for s in self.shapes if s.selected]
	
	def DeleteSelected(self):
		delme = [s for s in self.shapes if s.DeleteSelected()]
		for d in delme:
			self.shapes.remove(d)
			del d
	
	def MoveSelected(self, rel):
		[s.MoveSelected(rel) for s in self.shapes]
	
	def Hovering(self, pos):
		[s.ShowGuides(pos) for s in self.shapes]
	
	def SelectLast(self, pos):
		self.candidates = [s for s in self.shapes if s.SelectLast(pos)]
		if self.candidates:
			self.lastShape = self.candidates[-1]
		else:
			self.lastShape = None
	
	def SetLastPoint(self, point):
		self.lastShape.SetLastPoint(point)
	
	def TestDragged(self):
		# test the last dragged points
		# if the dragged-to point hits one in the same shape, delete it
		[s.TestForSnap() for s in self.shapes]
		# if it's in a different poly, snap


