on xenial help sign in
MenuItemFactory: use Menus.RadioMenu to create radio elements
commit3dd8231e2cdd1e1fe961f396501f412ac6f74fab authorMarco Trevisan (Treviño) <mail@3v1n0.net> dateWed 26 Oct 2016, 22:57 (10 years ago) parent347fc2c
2 files changed+58−3
qml/Panel/Indicators/MenuItemFactory.qml+33−1 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+25−2
qml/Panel/Indicators/MenuItemFactory.qml+33−1
@@ -362,6 +362,35 @@ Item {
362362 }
363363 }
364364
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+
365394 Component {
366395 id: switchMenu;
367396
@@ -1023,9 +1052,12 @@ Item {
10231052 return component;
10241053 }
10251054
1026− if (modelData.isCheck || modelData.isRadio) {
1055+ if (modelData.isCheck) {
10271056 return checkableMenu;
10281057 }
1058+ if (modelData.isRadio) {
1059+ return radioMenu;
1060+ }
10291061 if (modelData.isSeparator) {
10301062 return separatorMenu;
10311063 }
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+25−2
@@ -140,13 +140,12 @@ Item {
140140 }
141141
142142 function test_create_radio() {
143− skip("No radio component");
144143 menuData.isRadio = true;
145144
146145 loader.data = menuData;
147146 loader.sourceComponent = factory.load(menuData);
148147 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");
150149 }
151150
152151 function test_create_separator() {
@@ -340,6 +339,30 @@ Item {
340339 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
341340 }
342341
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+
343366 function test_create_switchMenu_data() {
344367 return [
345368 {label: "testLabel1", enabled: true, checked: false, icon: "file:///testIcon1" },