From fc9ba20ea4446049ebf68e1e9b9dfd77352cedd2 Mon Sep 17 00:00:00 2001
From: Colin Noga <Tempus@chronometry.ca>
Date: Tue, 28 Aug 2012 13:02:14 -0500
Subject: export batch fixed, checkbox for secret added

---
 src/editorui/doodads.py    |   6 +--
 src/editorui/editormain.py |   1 -
 src/editorui/paths.py      |  37 +++++++++++++-
 src/exporter.py            |  18 ++++++-
 src/main.py                |  10 +++-
 src/mapdata.py             |   6 +--
 src/mapfile.py             |   7 ++-
 src/tileset.py             |   5 --
 src/ui.py                  | 124 +++++++++++++++++++++++++++++++--------------
 9 files changed, 155 insertions(+), 59 deletions(-)

(limited to 'src')

diff --git a/src/editorui/doodads.py b/src/editorui/doodads.py
index bdba4d4..7e150cd 100644
--- a/src/editorui/doodads.py
+++ b/src/editorui/doodads.py
@@ -47,7 +47,8 @@ class KPEditorDoodad(KPEditorItem):
 					elif isinstance(thong, float):
 						editWidget = QtGui.QDoubleSpinBox(parent)
 						editWidget.setSingleStep(0.05)
-						editWidget.setRange(-10000.0, 10000.0)
+						editWidget.setDecimals(2)
+						editWidget.setRange(-99999.0, 99999.0)
 						return editWidget
 
 					else:
@@ -313,8 +314,6 @@ class KPEditorDoodad(KPEditorItem):
 			model = self.menuWidget.model
 			rows = model.rowCount()
 
-			print 'Resolving'
-
 			for x in xrange(rows):
 				rowList = []
 
@@ -330,7 +329,6 @@ class KPEditorDoodad(KPEditorItem):
 
 				anmList.append(rowList)
 
-			print anmList
 			doodad.animations = anmList
 			doodad.setupAnimations()
 
diff --git a/src/editorui/editormain.py b/src/editorui/editormain.py
index 1ff08ee..3ee593b 100644
--- a/src/editorui/editormain.py
+++ b/src/editorui/editormain.py
@@ -764,7 +764,6 @@ class KPEditorWidget(QtGui.QGraphicsView):
 
 				KP.mainWindow.handleSelectedLayerChanged(kLayer)
 				index = KP.map.refLayer(kLayer)
-				print 'selecting row {0}'.format(index)
 				KP.mainWindow.layerList.selectLayer(index)
 
 				itemsUnder[0].setSelected(True)
diff --git a/src/editorui/paths.py b/src/editorui/paths.py
index 70c3b99..394b82a 100644
--- a/src/editorui/paths.py
+++ b/src/editorui/paths.py
@@ -86,6 +86,17 @@ class KPEditorNode(KPEditorItem):
 			self.setPalette(palette)
 
 
+	class SecretBox(QtGui.QCheckBox):
+		def __init__(self):
+			QtGui.QCheckBox.__init__(self)
+
+			palette = self.palette()
+			palette.setColor(QtGui.QPalette.ButtonText, Qt.black)
+			palette.setColor(QtGui.QPalette.Window, Qt.transparent)
+
+			self.setPalette(palette)
+
+
 	class mapArcEdit(QtGui.QLineEdit):
 		def __init__(self):
 			QtGui.QLineEdit.__init__(self)
@@ -129,10 +140,17 @@ class KPEditorNode(KPEditorItem):
 		self.stageProxy = self.HiddenProxy(self.stage, self, 6, 24)
 		self.stage.valueChanged.connect(self.stageChange)
 
+		self.secret = self.SecretBox()
+		self.secretProxy = self.HiddenProxy(self.secret, self, -60, 26)
+		self.secret.stateChanged.connect(self.secretChange)
+
 		if node.level != None:
 			self.world.setValue(node.level[0])
 			self.stage.setValue(node.level[1])
 
+		if node.hasSecret != None:
+			self.secret.setChecked(node.hasSecret)
+
 
 		self.foreignID = self.LevelSlotSpinner()
 		self.foreignIDProxy = self.HiddenProxy(self.foreignID, self, 60, 24)
@@ -216,6 +234,15 @@ class KPEditorNode(KPEditorItem):
 		KP.mainWindow.pathNodeList.update()
 
 
+	@QtCore.pyqtSlot(int)
+	def secretChange(self, secret):
+
+		node = self._nodeRef()
+		node.hasSecret = secret
+
+		KP.mainWindow.pathNodeList.update()
+
+
 	@QtCore.pyqtSlot(int)
 	def foreignIDChange(self, ID):
 
@@ -329,11 +356,12 @@ class KPEditorNode(KPEditorItem):
 			if node.level:
 				self.worldProxy.show()
 				self.stageProxy.show()
+				self.secretProxy.show()
 
 			else:
 				self.worldProxy.hide()
 				self.stageProxy.hide()
-
+				self.secretProxy.hide()
 
 			if node.mapChange != None:
 				self.foreignID.show()
@@ -349,6 +377,7 @@ class KPEditorNode(KPEditorItem):
 			self.buttonProxy.hide()
 			self.worldProxy.hide()
 			self.stageProxy.hide()
+			self.secretProxy.hide()
 			self.foreignID.hide()
 			self.transition.hide()
 			self.mapChange.hide()
@@ -358,7 +387,11 @@ class KPEditorNode(KPEditorItem):
 		node = self._nodeRef()
 		layer = KP.map.pathLayer
 
-		layer.nodes.remove(node)
+		try:
+			layer.nodes.remove(node)
+		except ValueError:
+			pass
+
 		KP.mainWindow.pathNodeList.removeLayer(node)
 
 		if len(node.exits) == 2:
diff --git a/src/exporter.py b/src/exporter.py
index b90cc49..48fff23 100644
--- a/src/exporter.py
+++ b/src/exporter.py
@@ -177,6 +177,7 @@ class KPMapExporter:
 		requiredFixUps = []
 		stringsToAdd = set()
 		textures = set()
+		texInfo = set()
 		tilesets = set()
 		offsets = {None: 0xFFFFFFFF}
 
@@ -250,6 +251,8 @@ class KPMapExporter:
 					w, h = doodad.size
 					data += struct.pack('>fffffii', x, y, w, h, doodad.angle, 0, len(doodad.animations))
 
+
+					texInfo.add((doodad.source[0], doodad.source[1].height() * doodad.source[1].width() * 2))
 					texture = doodad.source[1]
 					textures.add(texture)
 					requiredFixUps.append((len(data) - 8, texture))
@@ -308,7 +311,6 @@ class KPMapExporter:
 							oX, oY = opposite.position
 							deltaX, deltaY = oX-x, oY-y
 							angle = math.degrees(math.atan2(deltaX, deltaY)) % 360
-							print "Here: %d,%d Opposite %d,%d Delta: %d,%d Angle: %d" % (x,y,oX,oY,deltaX,deltaY,angle)
 
 							# Left = 270, Right = 90, Up = 180, Down = 0
 							if angle >= 225 and angle <= 315:
@@ -394,6 +396,20 @@ class KPMapExporter:
 			data += '\0'
 
 		# textures
+		texA = sorted(texInfo, key=lambda x: x[1])
+
+		s = 0
+		d = 0
+		for texItem in texA:
+			print texItem[1]/1000, "kb:", texItem[0]
+			s += texItem[1]
+			d += 1
+			if d == 10:
+				d = 0
+				print "So far:", s/1000, "kb"
+
+		print "Total:", s/1000, "kb"
+
 		texPadding = ((len(data) + 0x1F) & ~0x1F) - len(data)
 		data += ('\0' * texPadding)
 
diff --git a/src/main.py b/src/main.py
index f417d94..951e927 100644
--- a/src/main.py
+++ b/src/main.py
@@ -76,9 +76,15 @@ class KP:
 		tsInfo['hash'] = newHash
 
 		from tileset import KPTileset
-		print "Loading set: %s" % name
+
+		import time
+		b = time.clock()
+
 		cls.loadedTilesets[name] = KPTileset.loadFromArc(data)
-	
+
+		e = time.clock()
+		print "Loading set: {0} in {1}".format(name, e-b)
+
 
 	@classmethod
 	def tileset(cls, name):
diff --git a/src/mapdata.py b/src/mapdata.py
index 5d46685..8f3842a 100644
--- a/src/mapdata.py
+++ b/src/mapdata.py
@@ -149,7 +149,7 @@ class KPTileLayer(KPLayer):
 
 @mapfile.dumpable('associate_layer')
 class KPPathTileLayer(KPLayer):
-	__dump_attribs__ = KPLayer.__dump_attribs__ + ('tileset', 'objects', 'doodads')
+	__dump_attribs__ = KPLayer.__dump_attribs__ + ('tileset', 'objects', 'doodads', 'folder')
 
 	def _dump(self, mapObj, dest):
 		if isinstance(self.associate, KPNode):
@@ -182,6 +182,7 @@ class KPPathTileLayer(KPLayer):
 		self.objects = []
 		self.doodads = []
 		self.associate = pathnode
+		self.folder = ''
 
 		self.updateCache()
 
@@ -282,8 +283,6 @@ class KPDoodad(object):
 
 	def _dump(self, mapObj, dest):
 		dest['sourceRef'] = mapObj.refDoodad(self.source)
-		print self.animations
-		print mapObj, dest
 	
 	def _load(self, mapObj, src):
 		self.source = mapObj.derefDoodad(src['sourceRef'])
@@ -574,6 +573,7 @@ class KPMap(object):
 		if path is None:
 			raise "no path specified for this map"
 
+		KP.mainWindow.pathNodeList.setLayerFolders()
 		self.associateLayers = KP.mainWindow.pathNodeList.getLayers()
 
 		import mapfile
diff --git a/src/mapfile.py b/src/mapfile.py
index e1494b1..27e2ff9 100644
--- a/src/mapfile.py
+++ b/src/mapfile.py
@@ -66,7 +66,6 @@ def load(string):
 		try:
 			clsName = source['_t']
 			clsObj = DUMPABLE_CLASSES_BY_NAME[clsName]
-			print "Loading %s" % clsName
 		except KeyError:
 			# let's give this one more shot with the loadable proxies
 			try:
@@ -82,7 +81,11 @@ def load(string):
 			try:
 				setattr(obj, attrName, source[attrName])
 			except:
-				print "{0} was missing the attribute {1}".format(obj, attrName)
+				if attrName == 'folder':
+					obj.folder = ''
+
+				else:
+					print "{0} was missing the attribute {1}".format(obj, attrName)
 		
 		if hasattr(obj, '_preload'):
 			obj._preload(source)
diff --git a/src/tileset.py b/src/tileset.py
index cc36d18..ab6ac69 100644
--- a/src/tileset.py
+++ b/src/tileset.py
@@ -423,8 +423,6 @@ class KPTileset(object):
 
 	@staticmethod
 	def RGB4A3Decode(tex):
-		import time
-		b = time.clock()
 
 		out = bytearray(896*448*4)
 		dest = QtGui.QImage(896,448,QtGui.QImage.Format_ARGB32)
@@ -461,9 +459,6 @@ class KPTileset(object):
 								)
 						i += 2
 
-		e = time.clock()
-		print(e - b)
-
 		return dest
 
 
diff --git a/src/ui.py b/src/ui.py
index d5f9cdf..864b9ed 100644
--- a/src/ui.py
+++ b/src/ui.py
@@ -204,44 +204,74 @@ class KPPathNodeList(QtGui.QWidget):
 		item = self.KPPathNodeItem(self.tree, layer, associate)
 
 	def loadLayer(self, layer):
-		item = self.KPPathNodeItem(self.tree, layer, layer.associate)
 
-	def removeLayer(self, associate):
-		trash = None
+		# If there is a folder path available...
+		if layer.folder != '':
+			folder = layer.folder.split('/')
 
-		for itemI in xrange(self.tree.topLevelItemCount()):
-			item = self.tree.topLevelItem(itemI)
+			# Remove the last empty 
+			folder.pop()
 
-			if item.associate == associate:
-				trash = item
-			else:
-				trash = self.removeRecursor(item, associate)
+			myFolder = None
+
+			# Go Through each subfolder
+			for subfolder in folder:
+				itemList = self.findFolder(subfolder)
+
+				if itemList:
+					myFolder = itemList
+
+				else:
+					if myFolder:
+						item = QtGui.QTreeWidgetItem(myFolder)
+					else:
+						item = QtGui.QTreeWidgetItem(self.tree)
+
+					item.setIcon(0, KP.icon('Folder'))
+					item.setText(0, subfolder)
+					item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsDragEnabled | Qt.ItemIsDropEnabled | Qt.ItemIsEditable | Qt.ItemIsEnabled)
+					myFolder = item
 
-			if trash != None:
-				break
+			# Now that we've got all the folders, put it in!
+			self.KPPathNodeItem(myFolder, layer, layer.associate)
 
-		parent = trash.parent()
-		if parent:
-			parent.takeChild(trash)
 		else:
-			self.tree.takeTopLevelItem(self.tree.indexOfTopLevelItem(trash))
+			self.KPPathNodeItem(self.tree, layer, layer.associate)
 
-	def removeRecursor(self, parent, associate):
-		trash = None
+	def findFolder(self, matchString):
 
-		for itemI in xrange(parent.childCount()):
-			item = parent.child(itemI)
+		itemList = QtGui.QTreeWidgetItemIterator(self.tree, QtGui.QTreeWidgetItemIterator.Editable)
 
-			if item.associate == associate:
-				trash = item
-			else:
-				trash = self.removeRecursor(item, associate)
+		while itemList.value():
+			item = itemList.value()
+
+			if str(item.text(0)) == matchString:
+				return item
+
+			itemList += 1
 
-			if trash != None:
-				return trash
-		
 		return None
 
+	def removeLayer(self, associate):
+		itemList = QtGui.QTreeWidgetItemIterator(self.tree, QtGui.QTreeWidgetItemIterator.NotEditable)
+
+		while itemList.value():
+			item = itemList.value()
+
+			if not isinstance(item, self.KPPathNodeItem):
+				continue
+
+			if item.associate == associate:
+				parent = item.parent()
+				if parent:
+					parent.removeChild(item)
+				else:
+					index = self.tree.indexFromItem(item).row()
+					self.tree.takeTopLevelItem(self.tree.indexOfTopLevelItem(item))
+				return
+
+			itemList += 1
+
 	def getLayers(self):
 		layerList = []
 		for itemI in xrange(self.tree.topLevelItemCount()):
@@ -264,6 +294,27 @@ class KPPathNodeList(QtGui.QWidget):
 			else:
 				layerList.append(item.layer)
 
+	def setLayerFolders(self):
+
+		itemList = QtGui.QTreeWidgetItemIterator(self.tree, QtGui.QTreeWidgetItemIterator.NotEditable)
+
+		while itemList.value():
+			item = itemList.value()
+
+			if not isinstance(item, self.KPPathNodeItem):
+				continue
+
+			item.layer.folder = ''
+			daddy = item.parent()
+
+			while daddy:
+				item.layer.folder = str(daddy.text(0)) + '/' + item.layer.folder
+
+				daddy = daddy.parent()
+
+			itemList += 1
+
+
 	selectedLayerChanged = QtCore.pyqtSignal(KPLayer)
 
 
@@ -1373,15 +1424,17 @@ class KPMainWindow(QtGui.QMainWindow):
 		target = unicode(QtGui.QFileDialog.getExistingDirectory(self, 'Choose a folder'))
 
 		for fileName in os.listdir(target):
-			
-			if fileName[:-6] == ".kpmap":
+			print fileName
+
+			if fileName[-6:] == ".kpmap":
 				import mapfile
 
-				obj = mapfile.load(open(target, 'rb').read())
-				obj.save()
-				obj.export(target + filename[:-6] + '.kpbin')
+				print 'Found a map'
+				obj = mapfile.load(open(target + "/" + fileName, 'rb').read())
+				# obj.save()
+				obj.export(target + "/" + fileName[:-6] + '.kpbin')
 
-				print 'Saved and Exported {0}'.format(filename[:-6])
+				print 'Saved and Exported {0}'.format(fileName[:-6])
 
 
 # Edit
@@ -1510,7 +1563,6 @@ class KPMainWindow(QtGui.QMainWindow):
 			loaded = mapfile.load(data)
 			file.close()
 
-			print loaded
 			settings = KP.app.settings
 
 			presetList = []
@@ -1524,15 +1576,9 @@ class KPMainWindow(QtGui.QMainWindow):
 				presetList = []
 				presets = []
 			
-			print presetList, presets
-			print dir(presetList)
-
 			presetList.extend(loaded[0])
 			presets.extend(loaded[1])
 
-			print presetList
-			print presets
-
 			settings.setValue('AnimationPresets', mapfile.dump(presetList))
 			settings.setValue('AnimationPresetData', mapfile.dump(presets))
 
-- 
cgit v1.2.3