@@ -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
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 }
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 }
0 commit comments