feat(ProfileShowcase): Adding the MovableModel to the ProfileShowcaseModels to intercept the SFPM events

This is needed for the DND.
This commit is contained in:
Alex Jbanca 2024-02-29 09:43:38 +02:00 committed by Alex Jbanca
parent c916bfa84e
commit 4a4a5d5c4b
6 changed files with 30 additions and 63 deletions

View File

@ -70,20 +70,8 @@ SplitView {
SplitView.fillHeight: true SplitView.fillHeight: true
emptyInShowcasePlaceholderText: "No items in showcase" emptyInShowcasePlaceholderText: "No items in showcase"
emptyHiddenPlaceholderText: "No hidden items" emptyHiddenPlaceholderText: "No hidden items"
onChangePositionRequested: function (key, to) { onChangePositionRequested: function (from, to) {
for (var i = 0; i < inShowcaseModelItem.count; i++) { inShowcaseModelItem.move(from, to, 1)
if (inShowcaseModelItem.get(i).key === key) {
inShowcaseModelItem.move(i, to, 1)
break
}
}
for (var i = 0; i < hiddenModelItem.count; i++) {
if (hiddenModelItem.get(i).key === key) {
hiddenModelItem.move(from, to, 1)
break
}
}
} }
onSetVisibilityRequested: function (key, toVisibility) { onSetVisibilityRequested: function (key, toVisibility) {
for (var i = 0; i < inShowcaseModelItem.count; i++) { for (var i = 0; i < inShowcaseModelItem.count; i++) {

View File

@ -34,7 +34,7 @@ QObject {
/** /**
* Returns dirty state of the showcase model. * Returns dirty state of the showcase model.
*/ */
readonly property alias dirty: writable.dirty readonly property bool dirty: writable.dirty || !visibleModel.synced || !hiddenModel.synced
function revert() { function revert() {
writable.revert() writable.revert()
@ -48,8 +48,8 @@ QObject {
writable.setVisibility(key, visibility) writable.setVisibility(key, visibility)
} }
function changePosition(key, to) { function changePosition(from, to) {
writable.changePosition(key, to) visible.move(from, to)
} }
// internals, debug purpose only // internals, debug purpose only
@ -81,7 +81,7 @@ QObject {
} }
SortFilterProxyModel { SortFilterProxyModel {
id: visible id: visibleSFPM
sourceModel: writable sourceModel: writable
delayed: true delayed: true
@ -90,12 +90,24 @@ QObject {
sorters: RoleSorter { roleName: "position" } sorters: RoleSorter { roleName: "position" }
} }
MovableModel {
id: visible
sourceModel: visibleSFPM
}
SortFilterProxyModel { SortFilterProxyModel {
id: hidden id: hiddenSFPM
sourceModel: writable sourceModel: writable
delayed: true delayed: true
filters: HiddenFilter {} filters: HiddenFilter {}
} }
MovableModel {
id: hidden
sourceModel: hiddenSFPM
}
} }

View File

@ -91,8 +91,8 @@ QObject {
collectibles.setVisibility(key, visibility) collectibles.setVisibility(key, visibility)
} }
function changeCollectiblePosition(key, to) { function changeCollectiblePosition(from, to) {
collectibles.changePosition(key, to) collectibles.changePosition(from, to)
} }
ProfileShowcaseModelAdapter { ProfileShowcaseModelAdapter {

View File

@ -61,39 +61,6 @@ WritableProxyModel {
set(sourceIdx, { visibility, position }) set(sourceIdx, { visibility, position })
} }
/* Sets the position of the item. The "to" parameter is expected to be
* a target index in the list and must be in range [0; count - 1].
*/
function changePosition(key, to) {
const visible = d.getVisibleEntries()
visible.sort((a, b) => a.position - b.position)
const idx = visible.findIndex(item => item.key === key)
if (idx === -1) {
console.warn(`Entry with key ${key} not found`)
return
}
const count = visible.length
if (to < 0 || to >= count) {
console.warn(`Destination position out of range: ${to}`)
return
}
// swap
[visible[idx], visible[to]] = [visible[to], visible[idx]]
visible.forEach((e, i) => {
if (e.position === i)
return
const idx = d.indexByKey(e.key)
set(idx, { position: i })
})
}
readonly property QtObject d_: QtObject { readonly property QtObject d_: QtObject {
id: d id: d

View File

@ -31,7 +31,7 @@ DoubleFlickableWithFolding {
property string emptyHiddenPlaceholderText property string emptyHiddenPlaceholderText
// Signal to requst position change of the visible items // Signal to requst position change of the visible items
signal changePositionRequested(var key, int to) signal changePositionRequested(int from, int to)
// Signal to request visibility change of the items // Signal to request visibility change of the items
signal setVisibilityRequested(var key, int toVisibility) signal setVisibilityRequested(var key, int toVisibility)
@ -46,7 +46,7 @@ DoubleFlickableWithFolding {
Drag.keys: dragKeys Drag.keys: dragKeys
dragParent: root dragParent: dragParentData
visualIndex: visualIndexData visualIndex: visualIndexData
dragAxis: Drag.YAxis dragAxis: Drag.YAxis
showcaseVisibility: model ? model.visibility ?? Constants.ShowcaseVisibility.NoOne : showcaseVisibility: model ? model.visibility ?? Constants.ShowcaseVisibility.NoOne :
@ -322,7 +322,7 @@ DoubleFlickableWithFolding {
var to = visualIndex var to = visualIndex
if (to === from) if (to === from)
return return
root.changePositionRequested(drag.source.key, to) root.changePositionRequested(drag.source.visualIndex, to)
} }
drag.accept() drag.accept()
} }

View File

@ -204,8 +204,8 @@ SettingsContentBase {
inShowcaseModel: priv.showcaseModels.communitiesVisibleModel inShowcaseModel: priv.showcaseModels.communitiesVisibleModel
hiddenModel: priv.showcaseModels.communitiesHiddenModel hiddenModel: priv.showcaseModels.communitiesHiddenModel
onChangePositionRequested: function (key, to) { onChangePositionRequested: function (from, to) {
priv.showcaseModels.changeCommunityPosition(key, to) priv.showcaseModels.changeCommunityPosition(from, to)
} }
onSetVisibilityRequested: function (key, toVisibility) { onSetVisibilityRequested: function (key, toVisibility) {
priv.showcaseModels.setCommunityVisibility(key, toVisibility) priv.showcaseModels.setCommunityVisibility(key, toVisibility)
@ -219,8 +219,8 @@ SettingsContentBase {
hiddenModel: priv.showcaseModels.accountsHiddenModel hiddenModel: priv.showcaseModels.accountsHiddenModel
currentWallet: root.walletStore.overview.mixedcaseAddress currentWallet: root.walletStore.overview.mixedcaseAddress
onChangePositionRequested: function (key, to) { onChangePositionRequested: function (from, to) {
priv.showcaseModels.changeAccountPosition(key, to) priv.showcaseModels.changeAccountPosition(from, to)
} }
onSetVisibilityRequested: function (key, toVisibility) { onSetVisibilityRequested: function (key, toVisibility) {
@ -238,8 +238,8 @@ SettingsContentBase {
inShowcaseModel: priv.showcaseModels.collectiblesVisibleModel inShowcaseModel: priv.showcaseModels.collectiblesVisibleModel
hiddenModel: priv.showcaseModels.collectiblesHiddenModel hiddenModel: priv.showcaseModels.collectiblesHiddenModel
onChangePositionRequested: function (key, to) { onChangePositionRequested: function (from, to) {
priv.showcaseModels.changeCollectiblePosition(key, to) priv.showcaseModels.changeCollectiblePosition(from, to)
} }
onSetVisibilityRequested: function (key, toVisibility) { onSetVisibilityRequested: function (key, toVisibility) {