2

I'm trying to modify Cura Desktop Application. There is one Toolbar which is used to rotate/move objects.

In default Cura Application it is on left side of screen. I've changed it to bottom of screen but because of this the menu open when I clicked on Toolbar button is synced properly. All menus are opened on bottom-left side of screen as shown in attached imageenter image description here

which should be on perticular button of Toolbar. Here is Code of Toolbar.qml

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1

import UM 1.0 as UM

Item {
    id: base;

    width: buttons.width;
    height: buttons.height
    property int activeY

    Rectangle{
        id : bottomRow
        visible: true;
        width: menu.width
        height: buttons.height
        color: "#363636";
        anchors{
            bottom: parent.bottom
        }

        RowLayout {
            id: buttons;

            anchors.bottom: parent.bottom;
            anchors.horizontalCenter: parent.horizontalCenter;

            spacing: UM.Theme.getSize("button_lining").width
            Repeater {
                id: repeat

                model: UM.ToolModel { }

                Button {
                    text: model.name
                    iconSource: UM.Theme.getIcon(model.icon);

                    checkable: true;
                    checked: model.active;
                    enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled;

                    // style: UM.Theme.styles.tool_button;
                    style: UM.Theme.styles.tool_button_toolbar;

                    onCheckedChanged:
                    {
                        if(checked)
                        {
                            base.activeY = y
                        }
                    }
                    //Workaround since using ToolButton"s onClicked would break the binding of the checked property, instead
                    //just catch the click so we do not trigger that behaviour.
                    MouseArea {
                        anchors.fill: parent;
                        onClicked: {
                            forceActiveFocus() //First grab focus, so all the text fields are updated
                            if(parent.checked)
                            {
                                UM.Controller.setActiveTool(null)
                            }
                            else
                            {
                                UM.Controller.setActiveTool(model.id);
                            }
                        }
                    }
                }
            }
        }
    }

    UM.PointingRectangle {
        id: panelBorder;

        anchors.bottom: parent.top;
        anchors.bottomMargin: UM.Theme.getSize("default_margin").width;

        // anchors.top: base.top;
        anchors.topMargin: base.activeY

        z: buttons.z -1

        target: Qt.point(parent.right, base.activeY +  UM.Theme.getSize("button").height/2)
        arrowSize: UM.Theme.getSize("default_arrow").width

        width: {
            if (panel.item && panel.width > 0){
                 return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width)
            }
            else {
                return 0
            }
        }
        height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0;

        opacity: panel.item && panel.width > 0 ? 1 : 0
        Behavior on opacity { NumberAnimation { duration: 100 } }

        color: UM.Theme.getColor("lining");

        UM.PointingRectangle {
            id: panelBackground;

            color: UM.Theme.getColor("tool_panel_background");
            anchors.fill: parent
            anchors.margins: UM.Theme.getSize("default_lining").width

            // target: Qt.point(-UM.Theme.getSize("default_margin").width, UM.Theme.getSize("button").height/2)
            // target: Qt.point(UM.Theme.getSize("default_margin").width, UM.Theme.getSize("button").height/2)
            arrowSize: parent.arrowSize
            MouseArea //Catch all mouse events (so scene doesnt handle them)
            {
                anchors.fill: parent
            }
        }

        Loader {
            id: panel

            x: UM.Theme.getSize("default_margin").width;
            y: UM.Theme.getSize("default_margin").height;

            source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : "";
            enabled: UM.Controller.toolsEnabled;
        }
    }

    Rectangle
    {
        x: -base.x + base.mouseX + UM.Theme.getSize("default_margin").width
        y: -base.y + base.mouseY + UM.Theme.getSize("default_margin").height

        width: toolHint.width + UM.Theme.getSize("default_margin").width
        height: toolHint.height;
        color: UM.Theme.getColor("tooltip")
        Label
        {
            id: toolHint
            text: UM.ActiveTool.properties.getValue("ToolHint") != undefined ? UM.ActiveTool.properties.getValue("ToolHint") : ""
            color: UM.Theme.getColor("tooltip_text")
            font: UM.Theme.getFont("default")
            anchors.horizontalCenter: parent.horizontalCenter
        }

        visible: toolHint.text != "";
    }
}

Kindly Suggest how can I sync menu with particular Button of ToolBar so it should display on top of that button.

RaTh0D
  • 323
  • 3
  • 19

0 Answers0