Skip to content

Commit 99da85e

Browse files
committed
Update package manager view
1 parent ded6410 commit 99da85e

2 files changed

Lines changed: 60 additions & 10 deletions

File tree

src/libs/application/uishell/src/qml/PackageManagerView.qml

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ Item {
1919
property var model: null
2020
property var currentIndex: packageListProxyModel.invalidIndex()
2121
property Component singerExtraDelegate: null
22+
property bool refreshing: false
23+
24+
signal refreshRequested()
25+
signal uninstallRequested(index: int)
2226

2327
PackageListProxyModel {
2428
id: packageListProxyModel
@@ -33,6 +37,7 @@ Item {
3337
Accessible.role: Accessible.ListItem
3438
Layout.fillWidth: true
3539
height: 60
40+
highlighted: packageListProxyModel.packageIndexForIndex(view.currentIndex) === index
3641
onClicked: () => {
3742
view.currentIndex = packageListProxyModel.entryIndex(packageListProxyModel.packageModelIndex(packageCard.index))
3843
}
@@ -41,7 +46,8 @@ Item {
4146
atTop: packageCard.index === 0
4247
atBottom: packageCard.index === packageCard.repeater.count - 1
4348
property color _baseColor: view.useSplitView ? Theme.backgroundTertiaryColor : Theme.backgroundColor(view.ThemedItem.backgroundLevel)
44-
property color color: packageCard.pressed ? Theme.controlPressedColorChange.apply(_baseColor) : packageCard.hovered ? Theme.controlHoveredColorChange.apply(_baseColor) : _baseColor
49+
property color _unactiveColor: packageCard.highlighted ? Theme.controlCheckedColorChange.apply(_baseColor) : _baseColor
50+
property color color: packageCard.pressed ? Theme.controlPressedColorChange.apply(_unactiveColor) : packageCard.hovered ? Theme.controlHoveredColorChange.apply(_unactiveColor) : _unactiveColor
4551
Behavior on color {
4652
ColorAnimation {
4753
duration: Theme.colorAnimationDuration
@@ -157,6 +163,7 @@ Item {
157163
Button {
158164
text: qsTr("Uninstall")
159165
icon.source: "image://fluent-system-icons/delete"
166+
onClicked: view.uninstallRequested(pane.index)
160167
}
161168
}
162169
RowLayout {
@@ -662,7 +669,23 @@ Item {
662669
}
663670
Repeater {
664671
id: dependencyRepeater
665-
// TODO
672+
model: DelegateModel {
673+
model: packageListProxyModel
674+
rootIndex: packageListProxyModel.dependencyRootIndexForIndex(pane.modelIndex)
675+
delegate: LinkLabel {
676+
required property var modelData
677+
Layout.fillWidth: true
678+
wrapMode: Text.Wrap
679+
href: "#"
680+
linkText: {
681+
let refText = `${modelData.id}@${modelData.version}`
682+
if (modelData.name)
683+
return qsTr("%1 (%2)").arg(modelData.name).arg(refText)
684+
return refText
685+
}
686+
onLinkActivated: view.currentIndex = packageListProxyModel.entryIndex(packageListProxyModel.packageModelIndex(packageListProxyModel.findPackageIndex(modelData.id, modelData.version)))
687+
}
688+
}
666689
}
667690
}
668691
}
@@ -678,14 +701,34 @@ Item {
678701
spacing: 8
679702
Layout.margins: 8
680703
Layout.fillWidth: true
681-
TextField {
682-
id: searchTextField
704+
RowLayout {
683705
Layout.fillWidth: true
684-
placeholderText: qsTr("Search")
685-
ThemedItem.icon.source: "image://fluent-system-icons/search"
706+
TextField {
707+
id: searchTextField
708+
Layout.fillWidth: true
709+
placeholderText: qsTr("Search")
710+
ThemedItem.icon.source: "image://fluent-system-icons/search"
711+
// TODO temporarily not to implement search, waiting for Qt 6.11 SortFilterProxyModel
712+
}
713+
ToolButton {
714+
id: refreshButton
715+
text: qsTr("Refresh")
716+
icon.source: "image://fluent-system-icons/arrow_sync"
717+
display: AbstractButton.IconOnly
718+
onClicked: view.refreshRequested()
719+
highlighted: view.refreshing
720+
RotationAnimator {
721+
target: refreshButton.contentItem
722+
from: 0
723+
to: 360
724+
duration: 2000
725+
loops: Animation.Infinite
726+
running: view.refreshing
727+
alwaysRunToEnd: true
728+
}
729+
}
686730
}
687731
}
688-
689732
ScrollView {
690733
id: packagesScrollView
691734
contentWidth: availableWidth
@@ -695,7 +738,7 @@ Item {
695738
width: packagesScrollView.width
696739
spacing: 0
697740
Label {
698-
text: qsTr("No result found")
741+
text: qsTr("No package")
699742
ThemedItem.foregroundLevel: SVS.FL_Secondary
700743
Layout.alignment: Qt.AlignHCenter
701744
visible: packageCollectionLayout.visibleChildren.length === 1
@@ -740,8 +783,14 @@ Item {
740783
initialItem: PackageListView {
741784
}
742785
readonly property Item detailsItem: PackageDetailsView {
743-
StackView.onRemoved: () => {
744-
// TODO
786+
787+
}
788+
readonly property bool hasDetailPage: packageListProxyModel.packageIndexForIndex(view.currentIndex) >= 0
789+
onHasDetailPageChanged: () => {
790+
if (hasDetailPage) {
791+
push(detailsItem)
792+
} else {
793+
pop()
745794
}
746795
}
747796
}

src/libs/application/uishell/tests/PackageManagerView/main.qml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Window {
1919
PackageManagerView {
2020
anchors.fill: parent
2121
model: window.model
22+
onRefreshRequested: refreshing = !refreshing
2223
singerExtraDelegate: Rectangle {
2324
id: singerExtra
2425
required property var modelData

0 commit comments

Comments
 (0)