# coding=utf-8
import sys
import xbmc, xbmcaddon, xbmcgui

ADDON        = xbmcaddon.Addon()
LANGUAGE     = ADDON.getLocalizedString

def getNewOrder( currentPositions, indexToMove ):
    # Show select dialog
    w = ShowDialog( "DialogSelect.xml", sys.modules[ "__main__" ].CWD, order=currentPositions, focus=indexToMove, windowtitle=LANGUAGE(30104) )
    w.doModal()
    newOrder = w.newOrder
    del w

    return newOrder

class ShowDialog( xbmcgui.WindowXMLDialog ):
    def __init__( self, *args, **kwargs ):
        xbmcgui.WindowXMLDialog.__init__( self )
        self.order = kwargs.get( "order" )
        self.windowtitle = kwargs.get( "windowtitle" )
        self.selectedItem = kwargs.get( "focus" )
        self.newOrder = []

    def onInit(self):
        self.list = self.getControl(3)

        # Set visibility
        self.getControl(3).setVisible(True)
        self.getControl(3).setEnabled(True)
        self.getControl(5).setVisible(False)
        self.getControl(6).setVisible(False)
        self.getControl(1).setLabel(self.windowtitle)

        # Set Cancel label
        self.getControl(7).setLabel(xbmc.getLocalizedString(222))

        # Add all the items to the list
        for i, key in enumerate( sorted( self.order ) ):
            # Get the label and localise if necessary
            label = self.order[ key ][ 0 ]
            if label.isdigit():
                label = xbmc.getLocalizedString( int( label ) )
                if label == "":
                    label = self.order[ key ][ 0 ]
            if self.order[ key ][ 3 ] == "folder":
                label = "%s >" %( label )

            # Create the listitem and add it
            listitem = xbmcgui.ListItem( label=label )
            self.list.addItem( listitem )

            # And add it to the list that we'll eventually return
            self.newOrder.append( self.order[ key ] )

            # If it's the item we're moving, save it separately
            if i == self.selectedItem:
                self.itemMoving = self.order[ key ]

        # Set focus
        self.list.selectItem(self.selectedItem)
        self.setFocus(self.list)

    def onAction(self, action):
        # Check if the selected item has changed
        if self.list.getSelectedPosition() != self.selectedItem:
            # Remove the item we're moving from the list of items
            self.newOrder.pop( self.selectedItem )

            # Add the item we're moving at its new location
            self.newOrder.insert( self.list.getSelectedPosition(), self.itemMoving )

            # Update its current current position
            self.selectedItem = self.list.getSelectedPosition()

            # Update the labels of all list items
            for i in range( len( self.newOrder ) ):
                item = self.list.getListItem( i )
                label = self.newOrder[ i ][ 0 ]
                if label.isdigit():
                    label = xbmc.getLocalizedString( int( label ) )
                    if label == "":
                        label = self.newOrder[ i ][ 0 ]
                if self.newOrder[ i ][ 3 ] == "folder":
                    label = "%s >" %( label )
                if item.getLabel() != label:
                    item.setLabel( label )

        if action.getId() in ( 9, 10, 92, 216, 247, 257, 275, 61467, 61448, ):
            self.close()
            return

    def onClick(self, controlID):
        if controlID == 7:
            # Cancel button
            self.newOrder = None
        
        self.close()
