@@ -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" :  qsTrId (" id-fixed-row" :  " " :  " " 
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" :  qsTrId (" id-sliding-row" :  " " :  " " 
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" <  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