mirror of
https://github.com/KDE/latte-dock.git
synced 2024-12-26 23:21:37 +03:00
scrolling,support multiple layouts and positions
This commit is contained in:
parent
88af46f5bf
commit
f5a46b3da9
@ -214,7 +214,8 @@ Item {
|
||||
|
||||
property int tasksHeight: mouseHandler.height
|
||||
property int tasksWidth: mouseHandler.width
|
||||
property int userPanelPosition: latteView ? latteView.panelAlignment : plasmoid.configuration.plasmoidPosition
|
||||
//updated from Binding
|
||||
property int userPanelPosition
|
||||
|
||||
readonly property real currentPanelOpacity: latteView ? latteView.currentPanelTransparency / 100 : 1
|
||||
|
||||
@ -363,6 +364,36 @@ Item {
|
||||
source: "indicators/Manager.qml"
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: root
|
||||
property: "userPanelPosition"
|
||||
value: {
|
||||
if (latteView) {
|
||||
if (latteView.panelUserSetAlignment === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (inConfigureAppletsMode) {
|
||||
return Latte.Types.Center;
|
||||
} else if (latteView.panelUserSetAlignment === Latte.Types.Justify) {
|
||||
if (latteView.latteAppletPos>=0 && latteView.latteAppletPos<100) {
|
||||
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? Latte.Types.Left : Latte.Types.Top;
|
||||
} else if (latteView.latteAppletPos>=100 && latteView.latteAppletPos<200) {
|
||||
return Latte.Types.Center;
|
||||
} else if (latteView.latteAppletPos>=200) {
|
||||
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? Latte.Types.Right : Latte.Types.Bottom;
|
||||
}
|
||||
|
||||
return Latte.Types.Center;
|
||||
}
|
||||
|
||||
return latteView.panelUserSetAlignment;
|
||||
}
|
||||
|
||||
return plasmoid.configuration.plasmoidPosition;
|
||||
}
|
||||
}
|
||||
|
||||
/////
|
||||
|
||||
function initializeHoveredIndex() {
|
||||
@ -1067,7 +1098,7 @@ Item {
|
||||
width: ( icList.orientation === Qt.Horizontal ) ? icList.width + spacing : smallSize
|
||||
height: ( icList.orientation === Qt.Vertical ) ? icList.height + spacing : smallSize
|
||||
|
||||
property int spacing: root.iconSize / 2
|
||||
property int spacing: latteView ? 0 : root.iconSize / 2
|
||||
property int smallSize: Math.max(0.10 * root.iconSize, 16)
|
||||
|
||||
Behavior on opacity{
|
||||
@ -1207,6 +1238,13 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
/* Rectangle {
|
||||
anchors.fill: scrollableList
|
||||
color: "transparent"
|
||||
border.width: 1
|
||||
border.color: "blue"
|
||||
} */
|
||||
|
||||
TasksLayout.ScrollableList {
|
||||
id: scrollableList
|
||||
width: !root.vertical ? Math.min(root.width, icList.width) : thickness
|
||||
@ -1214,9 +1252,6 @@ Item {
|
||||
contentWidth: icList.width
|
||||
contentHeight: icList.height
|
||||
|
||||
readonly property bool centered: userPanelPosition === Latte.Types.Center
|
||||
readonly property bool reversed: Qt.application.layoutDirection === Qt.RightToLeft
|
||||
|
||||
property int thickness: !thickAnimated ? root.thickMargins + root.iconSize : (root.thickMargins + root.iconSize) * root.zoomFactor
|
||||
|
||||
readonly property bool thickAnimated: latteView && (latteView.animationsNeedBothAxis>0 || latteView.animationsNeedThickness>0)
|
||||
@ -1231,15 +1266,8 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
TasksLayout.ScrollPositioner {
|
||||
id: listViewBase
|
||||
x: !root.vertical ? icList.width / 2 : 0
|
||||
y: !root.vertical ? 0 : icList.height / 2
|
||||
width: !root.vertical ? 1 : scrollableList.width
|
||||
height: !root.vertical ? scrollableList.height : 1
|
||||
color: "transparent"
|
||||
border.width: 1
|
||||
border.color: "transparent"//"purple"
|
||||
|
||||
ListView {
|
||||
id:icList
|
||||
@ -1308,7 +1336,7 @@ Item {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // ScrollPositioner
|
||||
} // ScrollableList
|
||||
|
||||
TasksLayout.ScrollEdgeShadows {
|
||||
@ -1316,7 +1344,9 @@ Item {
|
||||
width: !root.vertical ? scrollableList.width : thickness
|
||||
height: !root.vertical ? thickness : scrollableList.height
|
||||
visible: scrollableList.contentsExceed
|
||||
}
|
||||
|
||||
flickable: scrollableList
|
||||
} // ScrollEdgeShadows
|
||||
|
||||
Task.VisualAddItem{
|
||||
id: newDroppedLauncherVisual
|
||||
@ -2017,11 +2047,11 @@ Item {
|
||||
//user set Panel Positions
|
||||
// 0-Center, 1-Left, 2-Right, 3-Top, 4-Bottom
|
||||
states: [
|
||||
|
||||
///Bottom Edge
|
||||
State {
|
||||
name: "bottomCenter"
|
||||
when: (root.position === PlasmaCore.Types.BottomPosition && userPanelPosition===Latte.Types.Center)
|
||||
when: ((plasmoid.location===PlasmaCore.Types.BottomEdge || plasmoid.location===PlasmaCore.Types.Floating)
|
||||
&& root.userPanelPosition===Latte.Types.Center)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2034,7 +2064,8 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "bottomLeft"
|
||||
when: (root.position === PlasmaCore.Types.BottomPosition && userPanelPosition===Latte.Types.Left)
|
||||
when: ((plasmoid.location===PlasmaCore.Types.BottomEdge || plasmoid.location===PlasmaCore.Types.Floating)
|
||||
&& root.userPanelPosition===Latte.Types.Left)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2047,7 +2078,8 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "bottomRight"
|
||||
when: (root.position === PlasmaCore.Types.BottomPosition && userPanelPosition===Latte.Types.Right)
|
||||
when: ((plasmoid.location===PlasmaCore.Types.BottomEdge || plasmoid.location===PlasmaCore.Types.Floating)
|
||||
&& root.userPanelPosition===Latte.Types.Right)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2061,7 +2093,7 @@ Item {
|
||||
///Top Edge
|
||||
State {
|
||||
name: "topCenter"
|
||||
when: (root.position === PlasmaCore.Types.TopPosition && userPanelPosition===Latte.Types.Center)
|
||||
when: (plasmoid.location===PlasmaCore.Types.TopEdge && root.userPanelPosition===Latte.Types.Center)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2074,7 +2106,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "topLeft"
|
||||
when: (root.position === PlasmaCore.Types.TopPosition && userPanelPosition===Latte.Types.Left)
|
||||
when: (plasmoid.location===PlasmaCore.Types.TopEdge && root.userPanelPosition===Latte.Types.Left)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2087,7 +2119,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "topRight"
|
||||
when: (root.position === PlasmaCore.Types.TopPosition && userPanelPosition===Latte.Types.Right)
|
||||
when: (plasmoid.location===PlasmaCore.Types.TopEdge && root.userPanelPosition===Latte.Types.Right)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2101,7 +2133,7 @@ Item {
|
||||
////Left Edge
|
||||
State {
|
||||
name: "leftCenter"
|
||||
when: (root.position === PlasmaCore.Types.LeftPosition && userPanelPosition===Latte.Types.Center)
|
||||
when: (plasmoid.location===PlasmaCore.Types.LeftEdge && root.userPanelPosition===Latte.Types.Center)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2114,7 +2146,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "leftTop"
|
||||
when: (root.position === PlasmaCore.Types.LeftPosition && userPanelPosition===Latte.Types.Top)
|
||||
when: (plasmoid.location===PlasmaCore.Types.LeftEdge && root.userPanelPosition===Latte.Types.Top)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2127,7 +2159,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "leftBottom"
|
||||
when: (root.position === PlasmaCore.Types.LeftPosition && userPanelPosition===Latte.Types.Bottom)
|
||||
when: (plasmoid.location===PlasmaCore.Types.LeftEdge && root.userPanelPosition===Latte.Types.Bottom)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2141,7 +2173,7 @@ Item {
|
||||
///Right Edge
|
||||
State {
|
||||
name: "rightCenter"
|
||||
when: (root.position === PlasmaCore.Types.RightPosition && userPanelPosition===Latte.Types.Center)
|
||||
when: (plasmoid.location===PlasmaCore.Types.RightEdge && root.userPanelPosition===Latte.Types.Center)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2154,7 +2186,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "rightTop"
|
||||
when: (root.position === PlasmaCore.Types.RightPosition && userPanelPosition===Latte.Types.Top)
|
||||
when: (plasmoid.location===PlasmaCore.Types.RightEdge && root.userPanelPosition===Latte.Types.Top)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
@ -2167,7 +2199,7 @@ Item {
|
||||
},
|
||||
State {
|
||||
name: "rightBottom"
|
||||
when: (root.position === PlasmaCore.Types.RightPosition && userPanelPosition===Latte.Types.Bottom)
|
||||
when: (plasmoid.location===PlasmaCore.Types.RightEdge && root.userPanelPosition===Latte.Types.Bottom)
|
||||
|
||||
AnchorChanges {
|
||||
target: barLine
|
||||
|
@ -30,6 +30,8 @@ Item {
|
||||
readonly property int thickness: latteView ? latteView.realPanelSize : root.iconSize + root.thickMargins
|
||||
readonly property color appliedColor: root.appShadowColorSolid
|
||||
|
||||
property Item flickable
|
||||
|
||||
LinearGradient {
|
||||
id: firstGradient
|
||||
width: !root.vertical ? gradientLength : shadowsContainer.thickness
|
||||
@ -74,8 +76,8 @@ Item {
|
||||
}
|
||||
AnchorChanges {
|
||||
target: shadowsContainer
|
||||
anchors{ top:undefined; bottom:parent.bottom; left:undefined; right:undefined;
|
||||
horizontalCenter:parent.horizontalCenter; verticalCenter:undefined}
|
||||
anchors{ top:undefined; bottom:flickable.bottom; left:undefined; right:undefined;
|
||||
horizontalCenter:flickable.horizontalCenter; verticalCenter:undefined}
|
||||
}
|
||||
},
|
||||
State {
|
||||
@ -94,8 +96,8 @@ Item {
|
||||
}
|
||||
AnchorChanges {
|
||||
target: shadowsContainer
|
||||
anchors{ top:parent.top; bottom:undefined; left:undefined; right:undefined;
|
||||
horizontalCenter:parent.horizontalCenter; verticalCenter:undefined}
|
||||
anchors{ top:flickable.top; bottom:undefined; left:undefined; right:undefined;
|
||||
horizontalCenter:flickable.horizontalCenter; verticalCenter:undefined}
|
||||
}
|
||||
},
|
||||
State {
|
||||
@ -114,8 +116,8 @@ Item {
|
||||
}
|
||||
AnchorChanges {
|
||||
target: shadowsContainer
|
||||
anchors{ top:undefined; bottom:undefined; left:parent.left; right:undefined;
|
||||
horizontalCenter:undefined; verticalCenter:parent.verticalCenter}
|
||||
anchors{ top:undefined; bottom:undefined; left:flickable.left; right:undefined;
|
||||
horizontalCenter:undefined; verticalCenter:flickable.verticalCenter}
|
||||
}
|
||||
},
|
||||
State {
|
||||
@ -134,8 +136,8 @@ Item {
|
||||
}
|
||||
AnchorChanges {
|
||||
target: shadowsContainer
|
||||
anchors{ top:undefined; bottom:undefined; left:undefined; right:parent.right;
|
||||
horizontalCenter:undefined; verticalCenter:parent.verticalCenter}
|
||||
anchors{ top:undefined; bottom:undefined; left:undefined; right:flickable.right;
|
||||
horizontalCenter:undefined; verticalCenter:flickable.verticalCenter}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, 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 General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.7
|
||||
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
|
||||
import org.kde.latte 0.2 as Latte
|
||||
|
||||
Rectangle {
|
||||
id: listViewBase
|
||||
x: {
|
||||
if (!root.vertical) {
|
||||
if (root.userPanelPosition === Latte.Types.Center) {
|
||||
return icList.width / 2;
|
||||
} else if (root.userPanelPosition === Latte.Types.Left){
|
||||
return 0;
|
||||
} else if (root.userPanelPosition === Latte.Types.Right){
|
||||
return icList.width;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
y: {
|
||||
if (!root.vertical) {
|
||||
return 0;
|
||||
} else {
|
||||
if (root.userPanelPosition === Latte.Types.Center) {
|
||||
return icList.height / 2;
|
||||
} else if (root.userPanelPosition === Latte.Types.Top){
|
||||
return 0;
|
||||
} else if (root.userPanelPosition === Latte.Types.Bottom){
|
||||
return icList.height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
width: !root.vertical ? 1 : scrollableList.width
|
||||
height: !root.vertical ? scrollableList.height : 1
|
||||
|
||||
color: "transparent"
|
||||
border.width: 1
|
||||
border.color: "transparent" //"purple"
|
||||
}
|
@ -31,6 +31,9 @@ Flickable{
|
||||
|
||||
property int offset: 0
|
||||
|
||||
readonly property bool centered: userPanelPosition === Latte.Types.Center
|
||||
readonly property bool reversed: Qt.application.layoutDirection === Qt.RightToLeft
|
||||
|
||||
readonly property bool contentsExceed: !root.vertical ? Math.floor(contentWidth) > width : Math.floor(contentHeight) > height
|
||||
readonly property int contentsExtraSpace: {
|
||||
if (contentsExceed) {
|
||||
@ -53,26 +56,26 @@ Flickable{
|
||||
readonly property int alignment: {
|
||||
if (plasmoid.location === PlasmaCore.Types.LeftEdge) {
|
||||
if (centered) return Latte.Types.LeftEdgeCenterAlign;
|
||||
if (root.panelAlignment === Latte.Types.Top) return Latte.Types.LeftEdgeTopAlign;
|
||||
if (root.panelAlignment === Latte.Types.Bottom) return Latte.Types.LeftEdgeBottomAlign;
|
||||
if (userPanelPosition === Latte.Types.Top) return Latte.Types.LeftEdgeTopAlign;
|
||||
if (userPanelPosition === Latte.Types.Bottom) return Latte.Types.LeftEdgeBottomAlign;
|
||||
}
|
||||
|
||||
if (plasmoid.location === PlasmaCore.Types.RightEdge) {
|
||||
if (centered) return Latte.Types.RightEdgeCenterAlign;
|
||||
if (root.panelAlignment === Latte.Types.Top) return Latte.Types.RightEdgeTopAlign;
|
||||
if (root.panelAlignment === Latte.Types.Bottom) return Latte.Types.RightEdgeBottomAlign;
|
||||
if (userPanelPosition === Latte.Types.Top) return Latte.Types.RightEdgeTopAlign;
|
||||
if (userPanelPosition === Latte.Types.Bottom) return Latte.Types.RightEdgeBottomAlign;
|
||||
}
|
||||
|
||||
if (plasmoid.location === PlasmaCore.Types.BottomEdge) {
|
||||
if (centered) return Latte.Types.BottomEdgeCenterAlign;
|
||||
|
||||
if ((root.panelAlignment === Latte.Types.Left && !reversed)
|
||||
|| (root.panelAlignment === Latte.Types.Right && reversed)) {
|
||||
if ((userPanelPosition === Latte.Types.Left && !reversed)
|
||||
|| (userPanelPosition === Latte.Types.Right && reversed)) {
|
||||
return Latte.Types.BottomEdgeLeftAlign;
|
||||
}
|
||||
|
||||
if ((root.panelAlignment === Latte.Types.Right && !reversed)
|
||||
|| (root.panelAlignment === Latte.Types.Left && reversed)) {
|
||||
if ((userPanelPosition === Latte.Types.Right && !reversed)
|
||||
|| (userPanelPosition === Latte.Types.Left && reversed)) {
|
||||
return Latte.Types.BottomEdgeRightAlign;
|
||||
}
|
||||
}
|
||||
@ -80,13 +83,13 @@ Flickable{
|
||||
if (plasmoid.location === PlasmaCore.Types.TopEdge) {
|
||||
if (centered) return Latte.Types.TopEdgeCenterAlign;
|
||||
|
||||
if ((root.panelAlignment === Latte.Types.Left && !reversed)
|
||||
|| (root.panelAlignment === Latte.Types.Right && reversed)) {
|
||||
if ((userPanelPosition === Latte.Types.Left && !reversed)
|
||||
|| (userPanelPosition === Latte.Types.Right && reversed)) {
|
||||
return Latte.Types.TopEdgeLeftAlign;
|
||||
}
|
||||
|
||||
if ((root.panelAlignment === Latte.Types.Right && !reversed)
|
||||
|| (root.panelAlignment === Latte.Types.Left && reversed)) {
|
||||
if ((userPanelPosition === Latte.Types.Right && !reversed)
|
||||
|| (userPanelPosition === Latte.Types.Left && reversed)) {
|
||||
return Latte.Types.TopEdgeRightAlign;
|
||||
}
|
||||
}
|
||||
@ -94,7 +97,6 @@ Flickable{
|
||||
return Latte.Types.BottomEdgeCenterAlign;
|
||||
}
|
||||
|
||||
|
||||
function increasePos() {
|
||||
if (!root.vertical) {
|
||||
contentX = Math.min(scrollLastPos, contentX + scrollStep);
|
||||
|
Loading…
Reference in New Issue
Block a user