@@ -79,7 +79,6 @@ StyledListView {
7979 onFilterChanged: {
8080 if (Boolean (filter)) {
8181 paletteSelectionModel .clear ()
82- expandedPopupIndex = null
8382 }
8483
8584 if (paletteProvider) {
@@ -123,25 +122,13 @@ StyledListView {
123122 paletteController .applyPaletteElement (index, Qt .NoModifier );
124123 }
125124
126- property var expandedPopupIndex: null // TODO: or use selection model? That would allow to preserve popups on removing palettes
127-
128- onExpandedPopupIndexChanged: {
129- if (footerItem) {
130- footerItem .height = 0
131- }
132- }
133-
134125 onCurrentIndexChanged: {
135126 if (paletteSelectionModel .hasSelection && paletteSelectionModel .currentIndex .row !== currentIndex) {
136127 paletteSelectionModel .clearSelection ();
137128 }
138129 }
139130
140131 function ensureYVisible (y ) {
141- if (y > footerItem .y ) {
142- footerItem .height = y - footerItem .y
143- }
144-
145132 if (y > contentY + height) {
146133 contentY = y - height;
147134 } else if (y < contentY) {
@@ -271,43 +258,34 @@ StyledListView {
271258 }
272259
273260 Loader {
274- id: palettePopup
261+ id: morePopup
275262 active: false
276263
277264 property var control: null
278- property var model: null
279- property alias isOpened: palettePopup .active
265+ property var popupModel: null
280266
281267 sourceComponent: MoreElementsPopup {
282- id: moreElementsPopup
283-
284- property var control: palettePopup .control
285- property var model: palettePopup .model
286-
287268 maxHeight: Math .min (0.75 * paletteTree .height , 500 )
288269
289270 // TODO: change settings to "hidden" model?
290- cellSize: control .cellSize
291- drawGrid: control .drawGrid
271+ cellSize: morePopup . control .cellSize ?? 0
272+ drawGrid: morePopup . control .drawGrid ?? false
292273
293- paletteName: model . display
294- paletteIsCustom: model . custom
295- paletteEditingEnabled: model . editable
274+ paletteName: morePopup . popupModel . display ?? " "
275+ paletteIsCustom: morePopup . popupModel . custom ?? false
276+ paletteEditingEnabled: morePopup . popupModel . editable ?? true
296277
297278 onIsOpenedChanged: {
298279 // build pool model on first popup appearance
299280 if (visible && ! poolPalette) {
300- poolPalette = paletteTree .paletteProvider .poolPaletteModel (control .modelIndex );
301- poolPaletteRootIndex = paletteTree .paletteProvider .poolPaletteIndex (control .modelIndex , poolPalette);
302- poolPaletteController = paletteTree .paletteProvider .poolPaletteController (poolPalette, control .modelIndex );
281+ poolPalette = paletteTree .paletteProvider .poolPaletteModel (morePopup . control .modelIndex );
282+ poolPaletteRootIndex = paletteTree .paletteProvider .poolPaletteIndex (morePopup . control .modelIndex , poolPalette);
283+ poolPaletteController = paletteTree .paletteProvider .poolPaletteController (poolPalette, morePopup . control .modelIndex );
303284
304285 customPalette = paletteTree .paletteProvider .customElementsPaletteModel
305- customPaletteRootIndex = paletteTree .paletteProvider .customElementsPaletteIndex (control .modelIndex ) // TODO: make a property binding? (but that works incorrectly)
286+ customPaletteRootIndex = paletteTree .paletteProvider .customElementsPaletteIndex (morePopup . control .modelIndex ) // TODO: make a property binding? (but that works incorrectly)
306287 customPaletteController = paletteTree .paletteProvider .customElementsPaletteController
307288 }
308- if (! isOpened) {
309- paletteTree .expandedPopupIndex = null
310- }
311289 }
312290
313291 property bool needScrollToBottom: false
@@ -320,7 +298,7 @@ StyledListView {
320298
321299 onClosed: {
322300 enablePaletteAnimations = false ;
323- palettePopup .active = false ;
301+ morePopup .active = false ;
324302 }
325303
326304 function scrollToPopupBottom () {
@@ -349,25 +327,25 @@ StyledListView {
349327 }
350328
351329 function close () {
352- if (palettePopup .active ) {
353- palettePopup .item .close ();
330+ if (morePopup .active ) {
331+ morePopup .item .close ()
354332 }
355333 }
356334
357335 function toggleOpened (model , control , parent ) {
358- if (palettePopup .active ) {
359- palettePopup .close ();
360- return ;
336+ if (morePopup .active ) {
337+ morePopup .close ()
338+ return
361339 }
362340
363- palettePopup .parent = parent;
364- palettePopup . model = model;
365- palettePopup .control = control;
341+ morePopup .parent = parent
342+ morePopup . popupModel = model
343+ morePopup .control = control
366344
367- palettePopup .active = true ;
368- palettePopup .item .setParentItem (parent);
345+ morePopup .active = true
346+ morePopup .item .setParentItem (parent)
369347
370- palettePopup .item .toggleOpened ();
348+ morePopup .item .toggleOpened ()
371349 }
372350 }
373351
@@ -407,8 +385,8 @@ StyledListView {
407385 }
408386
409387 Component .onDestruction : {
410- if (palettePopup .active && palettePopup . model === model) {
411- palettePopup .close ()
388+ if (morePopup .active && morePopup . popupModel === model) {
389+ morePopup .close ()
412390 }
413391 }
414392
@@ -494,22 +472,15 @@ StyledListView {
494472
495473 highlighted: (activeFocus && ! selected) || DelegateModel .isUnresolved
496474
497- property bool popupExpanded: palettePopup . isOpened
475+ property bool popupExpanded: morePopup . active
498476 onPopupExpandedChanged: {
499477 paletteTree .interactive = ! popupExpanded
500478 }
501479
502- function togglePopup (btn ) {
503- const expand = ! popupExpanded;
504- paletteTree .expandedPopupIndex = expand ? modelIndex : null ;
505- palettePopup .toggleOpened (model, control, btn)
506- }
507-
508480 property size cellSize: model .gridSize
509481 property bool drawGrid: model .drawGrid
510482
511483 function hidePalette () {
512- paletteTree .expandedPopupIndex = null ;
513484 paletteTree .paletteController .remove (modelIndex);
514485 }
515486
@@ -527,7 +498,7 @@ StyledListView {
527498
528499 Drag .onDragStarted : {
529500 if (popupExpanded) {
530- togglePopup ();
501+ morePopup . item . close ()
531502 }
532503
533504 paletteHeader .closeContextMenu ()
@@ -684,7 +655,10 @@ StyledListView {
684655
685656 Rectangle {
686657 id: mainPaletteContainer
658+
659+ readonly property var delegateModel: model
687660 readonly property int padding: 1
661+
688662 implicitHeight: mainPalette .implicitHeight + 2 * padding
689663 implicitWidth: parent .width
690664 height: implicitHeight
@@ -712,22 +686,20 @@ StyledListView {
712686 }
713687
714688 showMoreButton: ! paletteTree .searchOpened
715- onMoreButtonClicked : function (btn ) { control .togglePopup (btn) }
689+ onMoreButtonClicked : function (btn ) {
690+ morePopup .toggleOpened (mainPaletteContainer .delegateModel , control, btn)
691+ }
716692
717693 onVisibleChanged: {
718694 if (! visible && control .popupExpanded ) {
719- control . togglePopup ();
695+ morePopup . item . close ()
720696 }
721697 }
722698
723699 enableAnimations: paletteTree .enableAnimations
724- externalDropBlocked: paletteTree .expandedPopupIndex && ! control .popupExpanded // FIXME: find another way to prevent drops go under a popup
725700 }
726701 }
727702 }
728703 }
729704 }
730-
731- // placeholder footer item to reserve a space for "More" popup to expand
732- footer: Item { height: 0 }
733705}
0 commit comments