on xenial help sign in
MenuItemFactory: use Menus.RadioMenu to create radio elements
3dd8231Marco Trevisan (Treviño)
qml/Panel/Indicators/MenuItemFactory.qml+33−1
@@ -362,6 +362,35 @@ Item {
362 }
362 }
363 }
363 }
364
364
365+ Component {
366+ id: radioMenu;
367+
368+ Menus.RadioMenu {
369+ id: radioItem
370+ objectName: "radioMenu"
371+ property QtObject menuData: null
372+ property int menuIndex: -1
373+ property bool serverChecked: menuData && menuData.isToggled || false
374+
375+ text: menuData && menuData.label || ""
376+ enabled: menuData && menuData.sensitive || false
377+ checked: serverChecked
378+ highlightWhenPressed: false
379+
380+ ServerPropertySynchroniser {
381+ objectName: "sync"
382+ syncTimeout: Utils.Constants.indicatorValueTimeout
383+
384+ serverTarget: radioItem
385+ serverProperty: "serverChecked"
386+ userTarget: radioItem
387+ userProperty: "checked"
388+
389+ onSyncTriggered: menuModel.activate(radioItem.menuIndex)
390+ }
391+ }
392+ }
393+
365 Component {
394 Component {
366 id: switchMenu;
395 id: switchMenu;
367
396
@@ -1023,9 +1052,12 @@ Item {
1023 return component;
1052 return component;
1024 }
1053 }
1025
1054
1026− if (modelData.isCheck || modelData.isRadio) {
1055+ if (modelData.isCheck) {
1027 return checkableMenu;
1056 return checkableMenu;
1028 }
1057 }
1058+ if (modelData.isRadio) {
1059+ return radioMenu;
1060+ }
1029 if (modelData.isSeparator) {
1061 if (modelData.isSeparator) {
1030 return separatorMenu;
1062 return separatorMenu;
1031 }
1063 }
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+25−2
@@ -140,13 +140,12 @@ Item {
140 }
140 }
141
141
142 function test_create_radio() {
142 function test_create_radio() {
143− skip("No radio component");
144 menuData.isRadio = true;
143 menuData.isRadio = true;
145
144
146 loader.data = menuData;
145 loader.data = menuData;
147 loader.sourceComponent = factory.load(menuData);
146 loader.sourceComponent = factory.load(menuData);
148 tryCompareFunction(function() { return loader.item != undefined; }, true);
147 tryCompareFunction(function() { return loader.item != undefined; }, true);
149− compare(loader.item.objectName, "checkableMenu", "Should have created a checkable menu");
148+ compare(loader.item.objectName, "radioMenu", "Should have created a radio menu");
150 }
149 }
151
150
152 function test_create_separator() {
151 function test_create_separator() {
@@ -340,6 +339,30 @@ Item {
340 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
339 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
341 }
340 }
342
341
342+ function test_create_radioMenu_data() {
343+ return [
344+ {label: "testLabel1", enabled: true, checked: false },
345+ {label: "testLabel2", enabled: false, checked: true },
346+ ];
347+ }
348+
349+ function test_create_radioMenu(data) {
350+ menuData.type = "";
351+ menuData.label = data.label;
352+ menuData.sensitive = data.enabled;
353+ menuData.isRadio = true;
354+ menuData.isToggled = data.checked;
355+
356+ loader.data = menuData;
357+ loader.sourceComponent = factory.load(menuData);
358+ tryCompareFunction(function() { return loader.item != undefined; }, true);
359+ compare(loader.item.objectName, "radioMenu", "Should have created a radio menu");
360+
361+ compare(loader.item.text, data.label, "Label does not match data");
362+ compare(loader.item.checked, data.checked, "Checked does not match data");
363+ compare(loader.item.enabled, data.enabled, "Enabled does not match data");
364+ }
365+
343 function test_create_switchMenu_data() {
366 function test_create_switchMenu_data() {
344 return [
367 return [
345 {label: "testLabel1", enabled: true, checked: false, icon: "file:///testIcon1" },
368 {label: "testLabel1", enabled: true, checked: false, icon: "file:///testIcon1" },