Example #1
0
class SImageBrower(QWidget):
	"""docstring for SImageBrower"""
	atkRegx = re.compile('.*[aA][tT][kK].*\.[(bmp)(BMP)]')
	movRegx = re.compile('.*[Mm][Oo][Vv].*\.[(bmp)(BMP)]')
	spcRegx = re.compile('.*[Ss][Pp][CcEe].*\.[(bmp)(BMP)]')
	def __init__(self, indexDir):
		super(SImageBrower, self).__init__()
		self.indexDir = indexDir
		self.container = QHBoxLayout()
		self.container.addStretch(0)
		self.container.setAlignment(Qt.AlignLeft)
		self.setLayout(self.container)
		self.folderBrower = SImageFolderView(indexDir)
		self.container.addWidget(self.folderBrower)
		self.folderBrower.setClickedHandle(self.folderSelectedHandle)
		self.animationPanel = AnimationPanel()
		self.frameSelecter = ToggleToolBar()
		middleLayout = QVBoxLayout()
		self.container.addLayout(middleLayout)
		self.initToolBar()
		middleLayout.addWidget(self.frameToolBar)
		middleLayout.addWidget(self.frameSelecter)
		self.container.addWidget(self.animationPanel)


	def resetImageDir(self, imageDir):
		self.indexDir = imageDir
		self.folderBrower.resetRootDir(imageDir)

	def initToolBar(self):
		self.frameToolBar = QToolBar()
		self.frameToolBar.setFixedSize(300,40)
		#button
		self.frameToolBar.addSeparator()
		newAnimationButton = QPushButton("创建新动画",self)
		newAnimationButton.setFixedSize(80,30)
		newAnimationButton.clicked.connect(self.createNewAnimationView)
		self.frameToolBar.addWidget(newAnimationButton)
		#button
		self.frameToolBar.addSeparator()
		saveAnimationButton = QPushButton("保存新动画为连续图片",self)
		saveAnimationButton.setFixedSize(140,30)
		saveAnimationButton.clicked.connect(self.saveNewAnimation)
		self.frameToolBar.addWidget(saveAnimationButton)
		#button
		self.frameToolBar.addSeparator()
		clearAll = QPushButton("清除",self)
		clearAll.setFixedSize(50,30)
		clearAll.clicked.connect(lambda :self.frameSelecter.clearAllSelected())
		self.frameToolBar.addWidget(clearAll)
		
	
	def createNewAnimationView(self):
		bmps = self.frameSelecter.getSelected()
		if bmps:
			self.animationPanel.addAnimationView(AnimationView(bmps))
			self.frameSelecter.clearAllSelected()

	def saveNewAnimation(self):
		pass

	def refreshAnimationPanel(self):
		if self.animationPanel:
			self.animationPanel.closeAll()

	def folderSelectedHandle(self,modelIndex):
		filePath =self.folderBrower.getFilePathByModelIndex(modelIndex)
		if not os.path.exists(filePath) : return
		if not os.path.isdir(filePath) : return
		files = os.listdir(filePath)
		atkImags = []
		movImags = []
		spcImags = []
		##形象文件分类
		for fileName in files:
			fileAbsPath = "".join([filePath,"\\",fileName])
			if self.atkRegx.match(fileName):
				atkImags.append(fileAbsPath)
			if self.movRegx.match(fileName):
				movImags.append(fileAbsPath)
			if self.spcRegx.match(fileName):
				spcImags.append(fileAbsPath)
		self.frameSelecter.removeAllButton()
		self.createImageButtons(atkImags,movImags,spcImags)
		self.frameSelecter.clearAllSelected()
		self.refreshAnimationPanel()
		self.createAtkAnimationView(atkImags)
		self.createMoveAnimationView(movImags)
		self.createDefAnimationView(movImags,spcImags)

	def createImageButtons(self,atk,mov,spc):
		if atk:
			self.frameSelecter.createImageButtons(atk[0])
		if mov:
			self.frameSelecter.createImageButtons(mov[0])
		if spc:
			self.frameSelecter.createImageButtons(spc[0])

	def createAnimationView(self,img,groupCount,frameCount,needTurn):
		frameSize = img.width()
		backColor = None
		if not backColor:
			backColor = QColor(img.pixel(0,0))
		self.animationPanel.setBackGround(backColor)
		#共groupCout组图片
		for i in range(0,groupCount):
			bmps = []
			#每组动画frameCount幀图片
			for j in range(0,frameCount):
				bmp = QPixmap(img.copy(0,(j+i*frameCount)*frameSize,frameSize,frameSize))
				eliminateBackgroundColor(bmp)
				bmps.append(bmp)
			#创建动画视图
			self.animationPanel.addAnimationView(AnimationView(bmps))
		if needTurn:
			bmps=[]
			for j in range(0,frameCount):
				bmp = QPixmap(img.copy(0,(j+(groupCount-1)*frameCount)*frameSize,frameSize,frameSize).mirrored(True,False))
				eliminateBackgroundColor(bmp)
				bmps.append(bmp)
			#创建动画视图
			self.animationPanel.addAnimationView(AnimationView(bmps))

	def createAtkAnimationView(self,atkImags):
		if not atkImags : return
		for imgPath in atkImags:
			atkImg = QImage(imgPath)
			self.createAnimationView(atkImg,3,4,True)

	def createMoveAnimationView(self,movImags):
		if not movImags : return
		for imgPath in movImags:
			movImg = QImage(imgPath)
			self.createAnimationView(movImg,3,2,True)


	def createDefAnimationView(self,movImags,spcImags):
		if not spcImags or not movImags : return
		spcImg,movImg = QImage(spcImags[0]),QImage(movImags[0])
		spcFrameSize,movFrameSize = spcImg.width(),movImg.width()
		for i in range(0,3):
			firstFrame = QPixmap(movImg.copy(0,(i+6)*movFrameSize,movFrameSize,movFrameSize))
			secondFrame = QPixmap(spcImg.copy(0,i*spcFrameSize,spcFrameSize,spcFrameSize))
			eliminateBackgroundColor(firstFrame)
			eliminateBackgroundColor(secondFrame)
			bmps = [firstFrame,secondFrame]
			self.animationPanel.addAnimationView(AnimationView(bmps))
			if i == 2:
				firstFrame = QPixmap(firstFrame.toImage().mirrored(True,False))
				secondFrame = QPixmap(secondFrame.toImage().mirrored(True,False))
				bmps = [firstFrame,secondFrame]
				self.animationPanel.addAnimationView(AnimationView(bmps))

	def createAwaitAnimationView(self,atkImags,movImags):
		if not atkImags : return
		if not movImags : return