on xenial help sign in
MenuItemFactory: Add subtitle support to SwitchItem widget
2143b4ePete Woods
qml/Panel/Indicators/MenuItemFactory.qml+22−1
@@ -106,7 +106,7 @@ Item {
106 }
106 }
107
107
108 if (component === undefined) {
108 if (component === undefined) {
109− console.debug("Don't know how to make " + modelData.type + " for " + indicator);
109+ console.debug("Don't know how to make " + type + " for " + indicator);
110 }
110 }
111
111
112 return component
112 return component
@@ -398,7 +398,9 @@ Item {
398 id: switchItem
398 id: switchItem
399 objectName: "switchMenu"
399 objectName: "switchMenu"
400 property QtObject menuData: null
400 property QtObject menuData: null
401+ property var menuModel: menuFactory.menuModel
401 property int menuIndex: -1
402 property int menuIndex: -1
403+ property var extendedData: menuData && menuData.ext || undefined
402 property bool serverChecked: menuData && menuData.isToggled || false
404 property bool serverChecked: menuData && menuData.isToggled || false
403
405
404 text: menuData && menuData.label || ""
406 text: menuData && menuData.label || ""
@@ -407,6 +409,25 @@ Item {
407 checked: serverChecked
409 checked: serverChecked
408 highlightWhenPressed: false
410 highlightWhenPressed: false
409
411
412+ property var subtitleAction: UnityMenuAction {
413+ model: menuModel
414+ index: menuIndex
415+ name: getExtendedProperty(extendedData, "xCanonicalSubtitleAction", "")
416+ }
417+ subtitle.text: subtitleAction.valid ? subtitleAction.state : ""
418+
419+ onMenuModelChanged: {
420+ loadAttributes();
421+ }
422+ onMenuIndexChanged: {
423+ loadAttributes();
424+ }
425+
426+ function loadAttributes() {
427+ if (!menuModel || menuIndex == -1) return;
428+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-subtitle-action': 'string'});
429+ }
430+
410 ServerPropertySynchroniser {
431 ServerPropertySynchroniser {
411 objectName: "sync"
432 objectName: "sync"
412 syncTimeout: Utils.Constants.indicatorValueTimeout
433 syncTimeout: Utils.Constants.indicatorValueTimeout
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+6−1
@@ -370,7 +370,8 @@ Item {
370 function test_create_switchMenu_data() {
370 function test_create_switchMenu_data() {
371 return [
371 return [
372 {label: "testLabel1", enabled: true, checked: false, icon: "file:///testIcon1" },
372 {label: "testLabel1", enabled: true, checked: false, icon: "file:///testIcon1" },
373− {label: "testLabel2", enabled: false, checked: true, icon: "file:///testIcon2" },
373+ {label: "testLabel2", enabled: false, checked: true, icon: "file:///testIcon2", subtitleAction: "action::subtitle1" },
374+ {label: "testLabel2", enabled: false, checked: true, icon: "file:///testIcon3", subtitleAction: "action::subtitle2" },
374 ];
375 ];
375 }
376 }
376
377
@@ -380,6 +381,9 @@ Item {
380 menuData.sensitive = data.enabled;
381 menuData.sensitive = data.enabled;
381 menuData.icon = data.icon;
382 menuData.icon = data.icon;
382 menuData.isToggled = data.checked;
383 menuData.isToggled = data.checked;
384+ menuData.ext = {
385+ 'xCanonicalSubtitleAction': data.subtitleAction,
386+ };
383
387
384 loader.data = menuData;
388 loader.data = menuData;
385 loader.sourceComponent = factory.load(menuData);
389 loader.sourceComponent = factory.load(menuData);
@@ -390,6 +394,7 @@ Item {
390 compare(loader.item.iconSource, data.icon, "Icon does not match data");
394 compare(loader.item.iconSource, data.icon, "Icon does not match data");
391 compare(loader.item.checked, data.checked, "Checked does not match data");
395 compare(loader.item.checked, data.checked, "Checked does not match data");
392 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
396 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
397+ compare(loader.item.subtitleAction.name, data.subtitleAction === undefined ? "" : data.subtitleAction, "Subtitle action does not match data");
393 }
398 }
394
399
395 function test_create_alarmMenu_data() {
400 function test_create_alarmMenu_data() {