Skip to content

Commit 5f17346

Browse files
committed
Fix sliding and fixed row order reset in QuickSettingsPage.qml
Ensure user-defined order of sliding and fixed row toggles persists on page restart. - Modified refreshModel to use sliderToggles.value directly, preserving user-defined order for sliding row. - Split sliding row population into two loops: available toggles first, then unavailable toggles. - Modified refreshModel to use fixedToggles.value directly, preserving user-defined order for fixed row. - Split fixed row population into two loops: available toggles first, then unavailable toggles to fill slots.
1 parent 188ca2b commit 5f17346

File tree

1 file changed

+64
-25
lines changed

1 file changed

+64
-25
lines changed

src/qml/QuickSettingsPage.qml

Lines changed: 64 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -180,21 +180,42 @@ Item {
180180
function refreshModel() {
181181
slotModel.clear();
182182

183-
// Sort fixed toggles by availability
184-
var sortedFixedToggles = sortToggles(fixedToggles.value);
183+
// Use fixedToggles.value directly to preserve user-defined order
184+
var fixedTogglesArray = fixedToggles.value;
185+
186+
// Use sliderToggles.value directly to preserve user-defined order
187+
var sliderTogglesArray = sliderToggles.value;
185188

186-
// Sort slider toggles by availability
187-
var sortedSliderToggles = sortToggles(sliderToggles.value);
188189
//% "Fixed Row Content"
189190
slotModel.append({ type: "label", labelText: qsTrId("id-fixed-row"), toggleId: "", listView: "" });
190-
for (var i = 0; i < sortedFixedToggles.length && i < fixedRowLength; i++) {
191-
if (sortedFixedToggles[i]) {
192-
slotModel.append({
193-
type: "toggle",
194-
toggleId: sortedFixedToggles[i],
195-
listView: "fixed",
196-
labelText: ""
197-
});
191+
// Append available toggles in user-defined order
192+
for (var i = 0; i < fixedTogglesArray.length && i < fixedRowLength; i++) {
193+
var toggleId = fixedTogglesArray[i];
194+
if (toggleId) {
195+
var toggle = findToggle(toggleId);
196+
if (toggle && toggle.available) {
197+
slotModel.append({
198+
type: "toggle",
199+
toggleId: toggleId,
200+
listView: "fixed",
201+
labelText: ""
202+
});
203+
}
204+
}
205+
}
206+
// Append unavailable toggles to fill fixed row
207+
for (i = 0; i < fixedTogglesArray.length && countFixedToggles() < fixedRowLength; i++) {
208+
toggleId = fixedTogglesArray[i];
209+
if (toggleId) {
210+
toggle = findToggle(toggleId);
211+
if (toggle && !toggle.available && !isToggleInFixedRow(toggleId)) {
212+
slotModel.append({
213+
type: "toggle",
214+
toggleId: toggleId,
215+
listView: "fixed",
216+
labelText: ""
217+
});
218+
}
198219
}
199220
}
200221

@@ -234,14 +255,34 @@ Item {
234255
}
235256
//% "Sliding Row Content"
236257
slotModel.append({ type: "label", labelText: qsTrId("id-sliding-row"), toggleId: "", listView: "" });
237-
for (i = 0; i < sortedSliderToggles.length; i++) {
238-
if (sortedSliderToggles[i] && !isToggleInFixedRow(sortedSliderToggles[i])) {
239-
slotModel.append({
240-
type: "toggle",
241-
toggleId: sortedSliderToggles[i],
242-
listView: "slider",
243-
labelText: ""
244-
});
258+
// Append available toggles in user-defined order
259+
for (i = 0; i < sliderTogglesArray.length; i++) {
260+
toggleId = sliderTogglesArray[i];
261+
if (toggleId && !isToggleInFixedRow(toggleId)) {
262+
toggle = findToggle(toggleId);
263+
if (toggle && toggle.available) {
264+
slotModel.append({
265+
type: "toggle",
266+
toggleId: toggleId,
267+
listView: "slider",
268+
labelText: ""
269+
});
270+
}
271+
}
272+
}
273+
// Append unavailable toggles at the end
274+
for (i = 0; i < sliderTogglesArray.length; i++) {
275+
toggleId = sliderTogglesArray[i];
276+
if (toggleId && !isToggleInFixedRow(toggleId)) {
277+
toggle = findToggle(toggleId);
278+
if (toggle && !toggle.available) {
279+
slotModel.append({
280+
type: "toggle",
281+
toggleId: toggleId,
282+
listView: "slider",
283+
labelText: ""
284+
});
285+
}
245286
}
246287
}
247288
//% "Options"
@@ -312,7 +353,7 @@ Item {
312353
}
313354

314355
function isValidDropPosition(dropIndex) {
315-
// Prevent dropping on labels, config, cycler, or display items
356+
// Prevent dropping on labels, config, cycler, and display items
316357
var item = slotModel.get(dropIndex);
317358
if (item.type !== "toggle") {
318359
return false;
@@ -407,8 +448,7 @@ Item {
407448
}
408449
// Handle cross-row moves (both directions)
409450
else if ((draggedItemIndex > sliderLabelIndex && targetIndex < sliderLabelIndex) ||
410-
(draggedItemIndex < sliderLabelIndex && targetIndex > sliderLabelIndex && targetIndex < optionsLabelIndex)) {
411-
// Direct move without the two-step process
451+
(draggedItemIndex < sliderLabelIndex && targetIndex > sliderLabelIndex && targetIndex < optionsLabelIndex)) {
412452
slotModel.move(draggedItemIndex, targetIndex, 1);
413453
slotModel.setProperty(targetIndex, "listView", targetIndex < sliderLabelIndex ? "fixed" : "slider");
414454
draggedItemIndex = targetIndex;
@@ -801,7 +841,6 @@ Item {
801841

802842
// Adjust dropIndex for the last position in the sliding row
803843
if (dropIndex > sliderLabelIndex && dropIndex >= optionsIndex - 1) {
804-
// If dropping below the last toggle, set dropIndex to the last valid toggle position
805844
dropIndex = optionsIndex - 1;
806845
}
807846

@@ -811,7 +850,7 @@ Item {
811850
var prevItem = slotModel.get(dropIndex - 1);
812851
if (prevItem.type !== "label" &&
813852
((prevItem.listView === "fixed" && dropIndex < sliderLabelIndex) ||
814-
(prevItem.listView === "slider" && dropIndex > sliderLabelIndex))) {
853+
(prevItem.listView === "slider" && dropIndex > sliderLabelIndex))) {
815854
dropIndex -= 1;
816855
}
817856
}

0 commit comments

Comments
 (0)