Skip to content

Commit

Permalink
sync: from linuxdeepin/dtkdeclarative
Browse files Browse the repository at this point in the history
Synchronize source files from linuxdeepin/dtkdeclarative.

Source-pull-request: linuxdeepin/dtkdeclarative#386
  • Loading branch information
deepin-ci-robot committed Aug 22, 2024
1 parent 67adc18 commit b744553
Show file tree
Hide file tree
Showing 43 changed files with 1,183 additions and 136 deletions.
1 change: 1 addition & 0 deletions chameleon/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ set(QML_FILES
Frame.qml
GroupBox.qml
ItemDelegate.qml
ListView.qml
MenuItem.qml
Menu.qml
MenuSeparator.qml
Expand Down
9 changes: 9 additions & 0 deletions chameleon/ListView.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

import org.deepin.dtk 1.0 as D

D.ListView {

}
52 changes: 52 additions & 0 deletions examples/exhibition/ControlGroup.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

import QtQuick 2.0
import QtQuick.Window 2.11
import QtQuick.Layouts 1.11
import org.deepin.dtk 1.0
import ".."

ControlGroup {
title: "磁盘"
ControlGroupItem {
Label {
visible: true
text: "test0111111111111"
}
Label {
visible: true
text: "test13333333333"
}
}
ControlGroupItem {
Rectangle {
width: 100
height: 100
color: "red"
border.color: "black"
border.width: 5
radius: 10
}
Switch {
checked: true
Layout.alignment: Qt.AlignHCenter
}
}
ControlGroupItem {
Rectangle {
width: 100
height: 100
color: "green"
border.color: "black"
border.width: 5
radius: 10
}
Button {
width: 100
height: 100
Layout.alignment: Qt.AlignHCenter
}
}
}
1 change: 1 addition & 0 deletions examples/exhibition/qml-qt6.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@
<file>ToolBar.qml</file>
<file>Dialog.qml</file>
<file>ProgressBar.qml</file>
<file>ControlGroup.qml</file>
</qresource>
</RCC>
3 changes: 3 additions & 0 deletions qt6/src/dtkdeclarative_qml.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
<file>qml/private/ButtonPanel.qml</file>
<file>qml/ActionButton.qml</file>
<file>qml/ItemDelegate.qml</file>
<file>qml/ListView.qml</file>
<file>qml/CheckDelegate.qml</file>
<file>qml/TipsSlider.qml</file>
<file>qml/SliderTipItem.qml</file>
Expand Down Expand Up @@ -109,6 +110,8 @@
<file>qml/ButtonIndicator.qml</file>
<file>qml/EmbeddedProgressBar.qml</file>
<file>qml/WaterProgressBar.qml</file>
<file>qml/ControlGroup.qml</file>
<file>qml/ControlGroupItem.qml</file>
<file>qml/private/ProgressBarImpl.qml</file>
<file>qml/private/ProgressBarPanel.qml</file>
<file>qml/PlaceholderText.qml</file>
Expand Down
4 changes: 4 additions & 0 deletions qt6/src/qml.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ set(QML_DTK_CONTROLS
"qml/ComboBox.qml"
"qml/ActionButton.qml"
"qml/ItemDelegate.qml"
"qml/ListView.qml"
"qml/CheckDelegate.qml"
"qml/TipsSlider.qml"
"qml/SliderTipItem.qml"
Expand Down Expand Up @@ -96,6 +97,9 @@ set(QML_DTK_CONTROLS
"qml/EmbeddedProgressBar.qml"
"qml/WaterProgressBar.qml"
"qml/PlaceholderText.qml"
"qml/ControlGroup.qml"
"qml/ControlGroupItem.qml"
"qml/DragItemsImage.qml"
)

foreach(QML_FILE ${QML_DTK_CONTROLS})
Expand Down
1 change: 1 addition & 0 deletions qt6/src/qml/ArrowListView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Layouts 1.11
import org.deepin.dtk 1.0 as D
import org.deepin.dtk.style 1.0 as DS
import org.deepin.dtk.private 1.0 as P

Expand Down
24 changes: 24 additions & 0 deletions qt6/src/qml/ButtonBox.qml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import QtQuick 2.11
import QtQuick.Layouts 1.11
import org.deepin.dtk 1.0 as D
import org.deepin.dtk.style 1.0 as DS
import org.deepin.dtk.private 1.0 as P

Control {
id: control
Expand All @@ -31,4 +32,27 @@ Control {
outsideBorderColor: null
color2: color1
}

ParallelAnimation {
running: btnGroup.checkedButton && (btnGroup.checkedButton.x !== backgroundPanel.x || btnGroup.checkedButton.y !== backgroundPanel.y)
NumberAnimation { target: backgroundPanel; property: "x"; to: btnGroup.checkedButton ? btnGroup.checkedButton.x : backgroundPanel.x; duration: 200 }
NumberAnimation { target: backgroundPanel; property: "y"; to: btnGroup.checkedButton ? btnGroup.checkedButton.y : backgroundPanel.y; duration: 200 }
NumberAnimation { target: backgroundPanel; property: "width"; to: btnGroup.checkedButton ? btnGroup.checkedButton.width : backgroundPanel.width; duration: 200 }
NumberAnimation { target: backgroundPanel; property: "height"; to: btnGroup.checkedButton ? btnGroup.checkedButton.height : backgroundPanel.height; duration: 200 }
}

P.ButtonPanel {
id: backgroundPanel
visible: btnGroup.checkedButton
implicitWidth: visible ? btnGroup.checkedButton.width : 0
implicitHeight: visible ? btnGroup.checkedButton.height : 0
button: control
outsideBorderColor: null
color1: D.Palette {
normal {
common: Qt.rgba(0, 0, 0, 0.2)
}
}
color2: color1
}
}
25 changes: 21 additions & 4 deletions qt6/src/qml/CheckDelegate.qml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ T.CheckDelegate {
id: control
property Component content
property D.Palette backgroundColor: DS.Style.itemDelegate.checkBackgroundColor
property string indicatorIcon: control.checkState === Qt.Unchecked ? "item_unchecked" : "item_checked"
property bool indicatorVisible: control.checked

implicitWidth: DS.Style.control.implicitWidth(control)
implicitHeight: DS.Style.control.implicitHeight(control)
Expand All @@ -26,15 +28,22 @@ T.CheckDelegate {
indicator: Loader {
x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
y: control.topPadding + (control.availableHeight - height) / 2
active: control.checked
active: indicatorVisible

sourceComponent: D.DciIcon {
palette: control.D.DTK.makeIconPalette(control.palette)
mode: control.D.ColorSelector.controlState
theme: control.D.ColorSelector.controlTheme
name: "menu_select"
name: indicatorIcon
sourceSize: Qt.size(DS.Style.itemDelegate.checkIndicatorIconSize, DS.Style.itemDelegate.checkIndicatorIconSize)
fallbackToQIcon: false
onNameChanged: {
play(D.DTK.NormalState);
}
Component.onCompleted: {
if (indicatorVisible)
play(D.DTK.NormalState);
}
}
}

Expand All @@ -58,12 +67,12 @@ T.CheckDelegate {
}
}

background: Item {
background: Control {
implicitWidth: DS.Style.itemDelegate.width
implicitHeight: DS.Style.itemDelegate.height
Rectangle {
anchors.fill: parent
visible: !checked
visible: !checked && !control.ListView.view
color: control.D.ColorSelector.backgroundColor
radius: DS.Style.control.radius
}
Expand All @@ -74,4 +83,12 @@ T.CheckDelegate {
radius: DS.Style.control.radius
}
}

onHoveredChanged: {
if (checked || !ListView.view)
return

if (ListView.view)
ListView.view.setHoverItem(control.hovered ? control : null)
}
}
173 changes: 173 additions & 0 deletions qt6/src/qml/ControlGroup.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

import QtQuick 2.0
import QtQuick.Layouts 1.11
import org.deepin.dtk 1.0 as D
import org.deepin.dtk.style 1.0 as DS

ColumnLayout {
id: root
spacing: 10

property string title
property bool isExpanded: true
property int interval: 400 / (itemLayout.children.length)
property int index: 0
property int titleHeight: 36
default property alias childItem: itemLayout.children

Control {
id: title
Layout.fillWidth: true
Layout.preferredHeight: 36
property int inset: 4
leftInset: inset
rightInset: inset
topInset: inset
bottomInset: inset
state: "normal"
states: [
State {
name: "normal"
PropertyChanges {
target: title
inset:4
}
},
State {
name: "hovered"
PropertyChanges {
target: title
inset:0
}
},
State {
name: "pressed"
PropertyChanges {
target: title
inset: 4
}
}
]
transitions: [
Transition {
from: "normal"
to: "hovered"
NumberAnimation {
properties: "inset"
easing.type: Easing.Linear
duration: 500
}
},
Transition {
from: "hovered"
to: "normal"
NumberAnimation {
properties: "inset"
easing.type: Easing.Linear
duration: 500
}
},
Transition {
from: "hovered"
to: "pressed"
NumberAnimation {
properties: "inset"
easing.type: Easing.Linear
duration: 500
}
},
Transition {
from: "pressed"
to: "hovered"
NumberAnimation {
properties: "inset"
easing.type: Easing.Linear
duration: 500
}
}
]
RowLayout {
anchors.fill: parent
spacing: 0
Label {
Layout.fillWidth: true
Layout.fillHeight: true
text: root.title
font: DTK.fontManager.t5
verticalAlignment: Qt.AlignVCenter
}
D.DciIcon {
rotation: root.isExpanded ? 0 : - 90
name: "arrow_ordinary_down"
mode: title.D.ColorSelector.controlState
theme: title.D.ColorSelector.controlTheme
palette: D.DTK.makeIconPalette(title.palette)
sourceSize: Qt.size(36, 36)

Behavior on rotation {
NumberAnimation {
duration: root.interval
easing.type: Easing.Linear
}
}
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: root.isExpanded = !root.isExpanded
onPressed: title.state = "pressed"
onReleased: title.state = "hovered"
onEntered: title.state = "hovered"
onExited: title.state = "normal"
}
background: Item {
Loader {
anchors.fill: parent
active: title.hovered
sourceComponent: D.RoundRectangle {
color: DS.Style.itemDelegate.normalColor
radius: DS.Style.control.radius
corners: D.RoundRectangle.TopLeftCorner | D.RoundRectangle.TopRightCorner | D.RoundRectangle.BottomLeftCorner | D.RoundRectangle.BottomRightCorner
}
}
}
}

Timer {
id: timer
}

ColumnLayout {
id: itemLayout
Layout.fillHeight: false
}

onIsExpandedChanged: (isExpanded) => {
for(let i = 0; i < itemLayout.children.length; ++i) {
itemLayout.children[i].isExpanded = !itemLayout.children[i].isExpanded
}
// delay(0, timeout)
}

function timeout() {
itemLayout.children[index].isExpanded = !itemLayout.children[index].isExpanded
++index
if (index === itemLayout.children.length) {
timer.stop()
timer.triggered.disconnect(timeout)
index = 0
}
}

function delay(delayTime, cb) {
timer.interval = delayTime
timer.repeat = true
timer.triggered.connect(cb)
timer.restart()
}
}
Loading

0 comments on commit b744553

Please sign in to comment.