diff --git a/src/controls/Dialog.qml b/src/controls/Dialog.qml index 45b9d39..4650a2d 100644 --- a/src/controls/Dialog.qml +++ b/src/controls/Dialog.qml @@ -1,188 +1,190 @@ /* * Copyright 2018 Camilo Higuita * * 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 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 02110-1301, USA. */ import QtQuick 2.5 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 import org.kde.mauikit 1.0 as Maui import org.kde.kirigami 2.7 as Kirigami Maui.Popup { id: control property string message : "" property string title: "" property string acceptText: "Ok" property string rejectText: "No" property bool defaultButtons: true property bool confirmationDialog: false default property alias content : page.contentData property alias acceptButton : _acceptButton property alias rejectButton : _rejectButton property alias textEntry : _textEntry property alias entryField: _textEntry.visible property alias page : page property alias footBar : page.footBar property alias headBar: page.headBar property alias closeButton: _closeButton signal accepted() signal rejected() clip: false maxWidth: Maui.Style.unit * 300 maxHeight: (_pageContent.implicitHeight * 1.2) +( page.footBar.height ) + Maui.Style.space.huge + page.padding widthHint: 0.9 heightHint: 0.9 Maui.Badge { id: _closeButton + parent: Application.Overlay iconName: "qrc:/assets/dialog-close.svg" // Kirigami.Theme.backgroundColor: hovered ? Kirigami.Theme.negativeTextColor : Kirigami.Theme.backgroundColor // Kirigami.Theme.textColor: Kirigami.Theme.highlightedTextColor anchors { verticalCenter: parent.top horizontalCenter: parent.left horizontalCenterOffset: control.width === control.parent.width ? _closeButton.width : 0 } z: control.z+999 onClicked: close() } Maui.Page { id: page + clip: true anchors.fill: parent anchors.margins: Maui.Style.unit padding: Maui.Style.space.medium footBar.visible: control.defaultButtons || footBar.count > 1 property QtObject _rejectButton : Button { id: _rejectButton visible: defaultButtons Kirigami.Theme.textColor: Kirigami.Theme.negativeTextColor Kirigami.Theme.backgroundColor: Qt.lighter(Kirigami.Theme.negativeTextColor, 1.7) text: rejectText onClicked: rejected() } property QtObject _acceptButton: Button { id: _acceptButton visible: defaultButtons Kirigami.Theme.backgroundColor: Qt.lighter(Kirigami.Theme.positiveTextColor, 2) Kirigami.Theme.textColor: Kirigami.Theme.positiveTextColor text: acceptText onClicked: accepted() } Component { id: _defaultButtonsComponent Row { spacing: Maui.Style.space.big children: [_rejectButton, _acceptButton] } } footBar.rightContent: Loader { sourceComponent: control.defaultButtons ? _defaultButtonsComponent : undefined } ColumnLayout { id: _pageContent anchors.fill: parent spacing: Maui.Style.space.medium Label { visible: title.length > 0 Layout.fillWidth: true Layout.alignment: Qt.AlignCenter color: Kirigami.Theme.textColor text: title font.weight: Font.Thin font.bold: true font.pointSize:Maui.Style.fontSizes.huge elide: Qt.ElideRight wrapMode: Text.Wrap } Kirigami.ScrollablePage { visible: message.length > 0 Layout.preferredHeight: Math.min(contentHeight, 500) Layout.fillWidth: true Layout.alignment: Qt.AlignCenter Kirigami.Theme.backgroundColor: "transparent" padding: 0 leftPadding: padding rightPadding: padding topPadding: padding bottomPadding: padding Label { id: body width: parent.width padding: 0 text: message textFormat : TextEdit.AutoText color: Kirigami.Theme.textColor font.pointSize:Maui.Style.fontSizes.default wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere elide: Text.ElideLeft verticalAlignment: Qt.AlignVCenter } } Maui.TextField { id: _textEntry visible: false Layout.fillWidth: true Layout.alignment: Qt.AlignCenter focus: visible onAccepted: control.accepted() } } } } diff --git a/src/controls/ToolBar.qml b/src/controls/ToolBar.qml index 63e00de..6584c1e 100644 --- a/src/controls/ToolBar.qml +++ b/src/controls/ToolBar.qml @@ -1,308 +1,310 @@ /* * Copyright 2018 Camilo Higuita * * 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 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 02110-1301, USA. */ import QtQuick 2.6 import QtQuick.Controls 2.2 import org.kde.kirigami 2.7 as Kirigami import org.kde.mauikit 1.0 as Maui import QtQuick.Layouts 1.3 import QtGraphicalEffects 1.0 import "private" ToolBar { id: control implicitHeight: Maui.Style.toolBarHeight implicitWidth: mainFlickable.contentWidth spacing: Maui.Style.space.small padding: 0 + clip: true property alias stickyRightContent : rightRowContent.sticky property alias stickyLeftContent : leftRowContent.sticky property alias stickyMiddleContent : middleRowContent.sticky property alias leftContent : leftRowContent.data property alias middleContent : middleRowContent.data property alias rightContent : rightRowContent.data property alias middleLayout : middleRowContent property alias leftLayout : leftRowContent property alias rightLayout : rightRowContent property alias layout : layout readonly property alias fits : mainFlickable.fits property int margins: Maui.Style.space.medium property int count : leftContent.length + middleContent.length + rightContent.length property bool flickable: true property bool strech : true property bool leftSretch: strech property bool rightSretch: strech property bool middleStrech: strech // leftPadding: Kirigami.Units.smallSpacing*2 // rightPadding: Kirigami.Units.smallSpacing*2 // background: Rectangle // { // id: headBarBG // color: colorScheme.backgroundColor // implicitHeight: Maui.Style.toolBarHeightAlt // radius: floating ? Maui.Style.radiusV : 0 // border.color: floating ? colorScheme.borderColor : "transparent" // // SequentialAnimation on radius // { // ColorAnimation { to: colorScheme.backgroundColor ; duration: 1000 } // } // // Kirigami.Separator // { // visible: drawBorder // color: colorScheme.borderColor // height: Maui.Style.unit // anchors // { // left: parent.left // right: parent.right // bottom: control.position == ToolBar.Footer ? undefined : parent.bottom // top: control.position == ToolBar.Footer ? parent.top : undefined // } // } // // layer.enabled: dropShadow // layer.effect: DropShadow // { // anchors.fill: headBarBG // horizontalOffset: 0 // verticalOffset: Maui.Style.unit * (altToolBars ? -1 : 1) // radius: 8 // samples: 25 // color: Qt.darker(colorScheme.backgroundColor, 1.4) // source: headBarBG // } // } MouseArea { id: _rightFlickRec width: Maui.Style.iconSizes.medium height: parent.height visible: !mainFlickable.atXEnd && !mainFlickable.fits && control.flickable hoverEnabled: true anchors { top: parent.top bottom: parent.bottom right: parent.right } z: 999 EdgeShadow { visible: true parent: parent edge: Qt.RightEdge anchors { right: parent.right top: parent.top bottom: parent.bottom } opacity: 1 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration easing.type: Easing.InOutQuad } } } Kirigami.Icon { visible: !Kirigami.Settings.isMobile anchors.centerIn: parent source: "qrc:/assets/arrow-right.svg" isMask: true width: Maui.Style.iconSizes.small height: Maui.Style.iconSizes.small color: _rightFlickRec.hovered ? Kirigami.Theme.highlightColor : Kirigami.Theme.textColor } enabled: !mainFlickable.atXEnd opacity: enabled ? 1 : 0.4 onClicked: { if(!mainFlickable.atXEnd) mainFlickable.contentX += control.height if(mainFlickable.atXEnd) mainFlickable.returnToBounds() } } MouseArea { id: _leftFlickRec width: Maui.Style.iconSizes.medium height: parent.height visible: !mainFlickable.atXBeginning && !mainFlickable.fits && control.flickable hoverEnabled: true anchors { top: parent.top bottom: parent.bottom left: parent.left } z: 999 EdgeShadow { visible: true parent: parent edge: Qt.LeftEdge anchors { left: parent.left top: parent.top bottom: parent.bottom } opacity: 1 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration easing.type: Easing.InOutQuad } } } Kirigami.Icon { anchors.centerIn: parent visible: !Kirigami.Settings.isMobile source: "qrc:/assets/arrow-left.svg" isMask: true width: Maui.Style.iconSizes.small height: Maui.Style.iconSizes.small color: _leftFlickRec.hovered ? Kirigami.Theme.highlightColor : Kirigami.Theme.textColor } enabled: !mainFlickable.atXBeginning opacity: enabled ? 1 : 0.4 onClicked: { if(!mainFlickable.atXBeginning) mainFlickable.contentX -= control.height if(mainFlickable.atXBeginning) mainFlickable.returnToBounds() } } + Flickable { id: mainFlickable property bool fits : contentWidth < control.width onFitsChanged: returnToBounds() height: control.implicitHeight anchors { left: parent.left right: parent.right bottom: control.position === ToolBar.Header ? parent.bottom : undefined top: control.position === ToolBar.Footer ? parent.top : undefined } - + anchors.leftMargin: !fits && _leftFlickRec.visible && control.flickable && !Kirigami.Settings.isMobile ? _leftFlickRec.width : margins anchors.rightMargin: !fits && _rightFlickRec.visible && control.flickable && !Kirigami.Settings.isMobile ? _rightFlickRec.width : margins flickableDirection: Flickable.HorizontalFlick interactive: !fits && Maui.Handy.isTouch contentWidth: ((control.margins) + Maui.Style.space.medium) + (control.stickyLeftContent ? leftRowContent.implicitWidth : leftRowContent.width) + (control.stickyMiddleContent ? middleRowContent.implicitWidth : middleRowContent.width) + (control.stickyRightContent ? rightRowContent.implicitWidth : rightRowContent.width) boundsBehavior: Kirigami.Settings.isMobile ? Flickable.DragOverBounds : Flickable.StopAtBounds clip: true RowLayout { id: layout width: control.width - control.margins - Maui.Style.space.medium height: control.height RowLayout { id: leftRowContent // visible: control.leftSretch && implicitWidth property bool sticky : false Layout.leftMargin: rightRowContent.implicitWidth && implicitWidth === 0 && middleRowContent.implicitWidth && control.leftSretch ? rightRowContent.implicitWidth : undefined Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft spacing: leftContent.length > 0 ? control.spacing : 0 Layout.minimumWidth: !sticky ? undefined : implicitWidth Layout.fillWidth: control.leftSretch && implicitWidth Layout.fillHeight: true } RowLayout { id: middleRowContent property bool sticky : false // visible: control.middleStrech && implicitWidth Layout.alignment: Qt.AlignCenter spacing: middleContent.length === 1 ? 0 : control.spacing Layout.minimumWidth: !sticky ? undefined : implicitWidth // Layout.maximumWidth: control.width - leftRowContent.implicitWidth - rightRowContent.implicitWidth Layout.fillWidth: control.middleStrech Layout.fillHeight: true } RowLayout { id: rightRowContent // visible: control.rightSretch && implicitWidth property bool sticky : false Layout.rightMargin: leftRowContent.implicitWidth && implicitWidth === 0 && middleRowContent.implicitWidth && control.rightSretch ? leftRowContent.implicitWidth : undefined Layout.alignment: Qt.AlignVCenter | Qt.AlignRight spacing: rightContent.length > 0 ? control.spacing : 0 Layout.minimumWidth: !sticky ? undefined : implicitWidth // Layout.maximumWidth: !sticky ? rightRowContent.width : implicitWidth Layout.fillWidth: control.rightSretch && implicitWidth Layout.fillHeight: true } } // ScrollBar.horizontal: ScrollBar { visible: false} } }