/*
*   Copyright (C) 2011 by Marco Martin <mart@kde.org>
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU Library General Public License as
*   published by the Free Software Foundation; either version 2, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU Library General Public License for more details
*
*   You should have received a copy of the GNU Library General Public
*   License along with this program; if not, write to the
*   Free Software Foundation, Inc.,
*   51 Franklin Street, Fifth Floor, Boston, MA  2.010-1301, USA.
*/

import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import "." 2.0

Item {
    id: root

    default property alias content: menuColumn.children
    property Item visualParent
    property int status: DialogStatus.Closed

    onVisualParentChanged: {
        //if is a menuitem move to menuColumn
        if (visualParent.separator !== undefined) {
            var obj = arrowComponent.createObject(visualParent)
        }
    }

    Component {
        id: arrowComponent
        PlasmaCore.SvgItem {
            svg: PlasmaCore.Svg {imagePath: "widgets/arrows"}
            elementId: "right-arrow"
            width: naturalSize.width
            height: naturalSize.height
            anchors {
                right: parent.right
                verticalCenter: parent.verticalCenter
            }
        }
    }
    function open()
    {
        var parent = root.visualParent ? root.visualParent : root.parent
        var pos = dialog.popupPosition(parent, Qt.AlignCenter)
        dialog.x = pos.x
        dialog.y = pos.y

        dialog.visible = true
        dialog.requestActivate()
    }

    function close()
    {
        dialog.visible = false
    }

    function addMenuItem(item)
    {
        item.parent = menuColumn
    }

    onChildrenChanged: {
        for (var i = 0; i < children.length; ++i) {
            var item = children[i]
            //if is a menuitem move to menuColumn
            if (item.separator !== undefined) {
                item.parent = menuColumn
            }
        }
    }

    visible: false

    PlasmaCore.Dialog {
        id: dialog
        visible: false
        windowFlags: Qt.Popup
        onVisibleChanged: {
            if (visible) {
                status = DialogStatus.Open
            } else {
                status = DialogStatus.Closed
            }
        }

        mainItem: Item {
            id: contentItem

            width: Math.max(menuColumn.width, theme.mSize(theme.defaultFont).width * 12)
            height: Math.min(menuColumn.height, theme.mSize(theme.defaultFont).height * 25)



            Flickable {
                id: listView
                anchors.fill: parent

                clip: true

                Column {
                    id: menuColumn
                    spacing: 4
                    onChildrenChanged: {
                        for (var i = 0; i < children.length; ++i) {
                            if (children[i].clicked != undefined)
                                children[i].clicked.connect(root.close)
                        }
                    }
                }
            }

            ScrollBar {
                id: scrollBar
                flickableItem: listView
                visible: listView.contentHeight > contentItem.height
                //platformInverted: root.platformInverted
                anchors { top: listView.top; right: listView.right }
            }
        }
    }


    onStatusChanged: {
        if (status == DialogStatus.Opening) {
            if (listView.currentItem != null) {
                listView.currentItem.focus = false
            }
            listView.currentIndex = -1
            listView.positionViewAtIndex(0, ListView.Beginning)
        }
        else if (status == DialogStatus.Open) {
            listView.focus = true
        }
    }
}
