# Sid Meier's Civilization 4
# Copyright Firaxis Games 2005
import CvUtil
from CvPythonExtensions import (EventContextTypes, CyPopup, PopupStates)


# TODO remove
# DEBUG code for Python 3 linter
# unicode = str
# xrange = range


class PyPopup:
		############## S E T U P    F U N C T I O N S ###################
		def __init__(self, popupID=-1, contextType=EventContextTypes.NO_EVENTCONTEXT, bDynamic=True):
				self.ID = popupID
				self.popup = CyPopup(popupID, contextType, bDynamic)

		# Misc!

		def isNone(self):
				"verifies valid instance"
				return self.popup.isNone()

		def launch(self, bCreateOkButton=True, eState=PopupStates.POPUPSTATE_IMMEDIATE):
				"sets attributes to the popup launch"
				self.popup.launch(bCreateOkButton, eState)

		def setUserData(self, userData):
				"sets userData that is passed to OnOkClicked"
				self.popup.setUserData(userData)

		def setPosition(self, iX, iY):
				"set the location of the popup"
				self.popup.setPosition(iX, iY)

		def setSize(self, iXS, iYS):
				"sets the popups size"
				self.popup.setSize(iXS, iYS)

		def addSeparator(self):
				"adds a separator"
				self.popup.addSeparator()

		# Header String
		def setHeaderString(self, strText, uiFlags=CvUtil.FONT_CENTER_JUSTIFY):
				"sets the header text"
				self.popup.setHeaderString(strText, uiFlags)

		# Body String
		def setBodyString(self, strText, uiFlags=CvUtil.FONT_LEFT_JUSTIFY):
				"sets the body text"
				self.popup.setBodyString(strText, uiFlags)

		def setPythonBodyString(self, strText, strName, strHelpText, uiFlags=CvUtil.FONT_LEFT_JUSTIFY):
				"PYTHON - sets a body string with help text"
				self.popup.setPythonBodyString(strText, strName, strHelpText, uiFlags)

		def setPythonBodyStringXY(self, strText, strName, strHelpText, iX=-1, iY=-1, uiFlags=CvUtil.FONT_LEFT_JUSTIFY):
				self.popup.setPythonBodyStringXY(strText, strName, strHelpText, iX, iY, uiFlags)

		# Radio Buttons
		def createRadioButtons(self, iNumButtons, iGroup=0):
				"creates radio buttons - only 1 set allowed per popup"
				self.popup.createRadioButtons(iNumButtons, iGroup)

		def setRadioButtonText(self, iRadioButtonID, strText, iGroup=0):
				"sets radio button text - 0 based IDs"
				self.popup.setRadioButtonText(iRadioButtonID, strText, iGroup)

		def createPythonRadioButtons(self, iNumButtons, iGroup=0):
				"creates python radio buttons - only 1 set allowed per popup"
				self.popup.createPythonRadioButtons(iNumButtons, iGroup)

		def setPythonRadioButtonText(self, iRadioButtonID, strText, strHelpText, iGroup=0):
				"sets python radio button text - 0 based IDs"
				self.popup.setPythonRadioButtonText(iRadioButtonID, strText, strHelpText, iGroup)

		# Check Boxes
		def createCheckBoxes(self, iNumBoxes, iGroup=0):
				"creates check boxes - only 1 set allowed per popup"
				self.popup.createCheckBoxes(iNumBoxes, iGroup)

		def setCheckBoxText(self, iCheckBoxID, strText, iGroup=0):
				"sets the check box text"
				self.popup.setCheckBoxText(iCheckBoxID, strText, iGroup)

		def createPythonCheckBoxes(self, iNumBoxes, iGroup=0):
				"creates Python check boxes - only 1 set allowed per popup"
				self.popup.createPythonCheckBoxes(iNumBoxes, iGroup)

		def setPythonCheckBoxText(self, iCheckBoxID, strText, strHelpText, iGroup=0):
				"sets the Python check box text"
				self.popup.setPythonCheckBoxText(iCheckBoxID, strText, strHelpText, iGroup)

		# Edit Boxes
		def createEditBox(self, strText, iGroup=0):
				"adds an edit box"
				self.popup.createEditBox(strText, iGroup)

		def createEditBoxXY(self, strText, iX=-1, iY=-1, iGroup=0):
				"adds an edit box at XY"
				self.popup.createEditBox(strText, iX, iY, iGroup)

		def createPythonEditBox(self, strText, strHelpText, iGroup=0):
				"adds an Python edit box"
				self.popup.createPythonEditBox(strText, strHelpText, iGroup)

		def createPythonEditBoxXY(self, strText, strHelpText, iGroup=0, iX=-1, iY=-1):
				"adds an Python edit box at XY"
				self.popup.createPythonEditBoxXY(strText, strHelpText, iGroup, iX, iY)

		def setEditBoxMaxCharCount(self, maxCharCount, preferredCharCount=32, iGroup=0):
				"set the max character count and the preferred character count of the edit box"
				self.popup.setEditBoxMaxCharCount(maxCharCount, preferredCharCount, iGroup)

		# Pull Down
		def createPullDown(self, iGroup=0):
				"creates a pulldown menu"
				self.popup.createPullDown(iGroup)

		def createPullDownXY(self, iGroup=0, iX=-1, iY=-1):
				"creates a pulldown menu at XY"
				self.popup.createPullDownXY(iGroup, iX, iY)

		def addPullDownString(self, strText, iID, iGroup=0):
				"adds text to the pulldown"
				self.popup.addPullDownString(strText, iID, iGroup)

		def createPythonPullDown(self, strHelpText, iGroup=0):
				"creates a Python pulldown menu"
				self.popup.createPythonPullDown(strHelpText, iGroup)

		def createPythonPullDownXY(self, strHelpText, iGroup=0, iX=-1, iY=-1):
				"creates a Python pulldown menu at XY"
				self.popup.createPythonPullDownXY(strHelpText, iGroup, iX, iY)

		# List Box
		def createListBox(self, iGroup=0):
				"creates a listbox"
				self.popup.createListBox(iGroup)

		def createListBoxXY(self, iGroup=0, iX=-1, iY=-1):
				"creates a listbox at XY"
				self.popup.createListBoxXY(iGroup, iX, iY)

		def addListBoxString(self, strText, iID, iGroup=0):
				"adds list box IDs"
				self.popup.addListBoxString(strText, iID, iGroup)

		def createPythonListBox(self, strHelpText, iGroup=0):
				"creates a Python listbox"
				self.popup.createPythonListBox(strHelpText, iGroup)

		def createPythonListBoxXY(self, strHelpText, iGroup=0, iX=-1, iY=-1):
				"creates a Python listbox at XY"
				self.popup.createPythonListBoxXY(strHelpText, iGroup, iX, iY)

		# spin Box
		def createSpinBox(self, iIndex, strHelpText, iDefault, iIncrement, iMax, iMin):
				"creates a listbox"
				self.popup.createSpinBox(iIndex, strHelpText, iDefault, iIncrement, iMax, iMin)

		# Buttons
		def addButton(self, strText):
				"adds a Button"
				self.popup.addButton(strText)

		def addButtonXY(self, strText, iX=-1, iY=-1):
				"adds a Button at XY"
				self.popup.addButtonXY(strText, iX, iY)

		def addPythonButton(self, strFunctionName, strButtonText, strHelpText, strArtPointer="Art\Interface\Popups\PopupRadioButton.kfm", iData1=-1, iData2=-1, bOption=True):
				"adds a python button"
				self.popup.addPythonButton(strFunctionName, strButtonText, strHelpText, strArtPointer, iData1, iData2, bOption)

		def addPythonButtonXY(self, strFunctionName, strButtonText, strHelpText, strArtPointer="Art\Interface\Popups\PopupRadioButton.kfm", iData1=-1, iData2=-1, bOption=True, iX=-1, iY=-1):
				"adds a python button at XY"
				# Unofficial Patch begin
				self.popup.addPythonButtonXY(strFunctionName, strButtonText, strHelpText, strArtPointer, iData1, iData2, bOption, iX, iY)
				# Unofficial Patch end

		# Graphics
		def addDDS(self, strImageLocation, iX, iY, iWidth, iHeight):
				"adds a DDS"
				self.popup.addDDS(strImageLocation, iX, iY, iWidth, iHeight)

		def addPythonDDS(self, strImageLocation, strHelpText, iX, iY, iWidth, iHeight):
				"adds a DDS"
				self.popup.addPythonDDS(strImageLocation, strHelpText, iX, iY, iWidth, iHeight)

		############## T A B L E    F U N C T I O N S ###################

		def createTable(self, iRows, iColumns, iGroup=0):
				"creates a table that is size X, Y with GroupID"
				self.popup.createTable(iRows, iColumns, iGroup)
				#CvUtil.pyPrint( "py.Popup createTable( %d, %d )" %(iRows, iColumns) )

		def setTableCellSize(self, iCol, iPixels, iGroup=0):
				"set the size of the Cell - required before info is added"
				self.popup.setTableCellSize(iCol, iPixels, iGroup)

		def setTableYSize(self, iRow, iSize, iGroup=0):
				"sets the size of the Row"
				self.popup.setTableYSize(iRow, iSize, iGroup)

		def addTableCellText(self, iRow, iCol, strText, iGroup=0):
				"adds text to a Cell"
				if strText == 0 or strText == False or strText == 'None':
						self.addTableBlank(iRow, iCol, iGroup)
						return
				self.popup.addTableCellText(iRow, iCol, unicode(strText), iGroup)

		def addTableBlank(self, iRow, iCol, iGroup=0):
				"adds a blank entry to a table"
				self.addTableCellText(iRow, iCol, "", iGroup)

		def addTableCellImage(self, iRow, iCol, strImageLocation, iGroup=0):
				"sets a table cell to locate a cell in the table and have it use an image"
				if strImageLocation:
						self.popup.addTableCellImage(iRow, iCol, str(strImageLocation), iGroup)
						return
				self.addTableBlank(iRow, iCol, iGroup)

		def addTableCellDDS(self, iRow, iCol, strImageLocation, iX=5, iY=5, iWidth=20, iHeight=20, iGroup=0):
				"adds a DDS image to the popup - iX/iY are location, iWidth/iHeight adjust the DDS size"
				if strImageLocation:
						self.popup.addTableCellDDS(iRow, iCol, str(strImageLocation), iX, iY, iWidth, iHeight, iGroup)
						return
				self.addTableBlank(iRow, iCol, iGroup)

		def completeTableAndAttach(self, iGroup=0, iX=-1, iY=-1):
				"completes a Table and Adds it to the popup - iX,iY are for the Tables Location"
				self.popup.completeTableAndAttach(iGroup)


############ G R O U P      T A B L E S #########################

		def addTitleData(self, TitleList, SizeYTitle=34):
				"Takes a list of title data and adds it to the popup - (iType, iSize, Name, Data"
				# TEXT = 0
				DDS = 1
				IMG = 2

				for i in range(len(TitleList)):
						titleType, titleName, titleSize = TitleList[i]

						# handle setting title size
						self.setTableCellSize(i, titleSize)

						if titleType:  # if image type
								strFileLocation = titleName  # file location is the 2nd entry

								if titleType == DDS:
										# Unoffical Patch start
										#data = loopTitle[3]
										#iX, iY, iWidth, iHeight = data
										iX, iY, iWidth, iHeight = titleSize
										# Unoffical Patch end
										self.addTableCellDDS(0, i, strFileLocation, iX, iY, iWidth, iHeight)

								elif titleType == IMG:
										self.popup.addTableCellImage(0, i, strFileLocation)

						else:
								self.addTableCellText(0, i, titleName)
				self.setTableYSize(0, SizeYTitle)

		def addTableData(self, TableData):
				'Adds data to the table'
				iLenTable = len(TableData)
				for i in range(iLenTable):
						loopRowData = TableData[i]
						self.addTableCellText(i+1, 0, loopRowData[0])
						for j in range(len(loopRowData[1])):
								self.addTableCellText(i+1, j+1, loopRowData[1][j])
