## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
import CvUtil
from CvPythonExtensions import *

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])
