@@ -19,11 +19,10 @@
1919
2020import QtQuick 2.0
2121import Ubuntu.Settings.Menus 0.1 as Menus
22−import Ubuntu.Settings.Components 0.1 as SettingsComponents
2322import QMenuModel 0.1
2423import Utils 0.1 as Utils
2524import Ubuntu.Components.ListItems 0.1 as ListItems
26−import Ubuntu.Components 0.1
25+import Ubuntu.Components 1.1
2726
2827Item {
2928 id: menuFactory
@@ -32,32 +31,38 @@ Item {
3231 property var menuModel: null
3332
3433 property var _map: {
35− "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
36− "unity.widgets.systemsettings.tablet.switch" : switchMenu,
37−
38− "com.canonical.indicator.button" : buttonMenu,
39− "com.canonical.indicator.div" : separatorMenu,
40− "com.canonical.indicator.section" : sectionMenu,
41− "com.canonical.indicator.progress" : progressMenu,
42− "com.canonical.indicator.slider" : sliderMenu,
43− "com.canonical.indicator.switch" : switchMenu,
44− "com.canonical.indicator.alarm" : alarmMenu,
45− "com.canonical.indicator.appointment" : appointmentMenu,
46− "com.canonical.indicator.transfer" : transferMenu,
47− "com.canonical.indicator.button-section" : buttonSectionMenu,
48−
49− "com.canonical.indicator.messages.messageitem" : messageItem,
50− "com.canonical.indicator.messages.sourceitem" : groupedMessage,
51−
52− "com.canonical.unity.slider" : sliderMenu,
53− "com.canonical.unity.switch" : switchMenu,
54−
55− "com.canonical.unity.media-player" : mediaPayerMenu,
56− "com.canonical.unity.playback-item" : playbackItemMenu,
57−
58− "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
59− "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
60− "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
34+ "default": {
35+ "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
36+ "unity.widgets.systemsettings.tablet.switch" : switchMenu,
37+
38+ "com.canonical.indicator.button" : buttonMenu,
39+ "com.canonical.indicator.div" : separatorMenu,
40+ "com.canonical.indicator.section" : sectionMenu,
41+ "com.canonical.indicator.progress" : progressMenu,
42+ "com.canonical.indicator.slider" : sliderMenu,
43+ "com.canonical.indicator.switch" : switchMenu,
44+ "com.canonical.indicator.alarm" : alarmMenu,
45+ "com.canonical.indicator.appointment" : appointmentMenu,
46+ "com.canonical.indicator.transfer" : transferMenu,
47+ "com.canonical.indicator.button-section" : buttonSectionMenu,
48+ "com.canonical.indicator.link" : linkMenu,
49+
50+ "com.canonical.indicator.messages.messageitem" : messageItem,
51+ "com.canonical.indicator.messages.sourceitem" : groupedMessage,
52+
53+ "com.canonical.unity.slider" : sliderMenu,
54+ "com.canonical.unity.switch" : switchMenu,
55+
56+ "com.canonical.unity.media-player" : mediaPayerMenu,
57+ "com.canonical.unity.playback-item" : playbackItemMenu,
58+
59+ "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
60+ "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
61+ "com.canonical.indicator.network.modeminfoitem" : modeminfoitem,
62+ },
63+ "indicator-messages" : {
64+ "com.canonical.indicator.button" : messagesButtonMenu
65+ }
6166 }
6267
6368 function getExtendedProperty(object, propertyName, defaultValue) {
@@ -100,6 +105,7 @@ Item {
100105 return maximum;
101106 }
102107 enabled: menuData && menuData.sensitive || false
108+ highlightWhenPressed: false
103109
104110 onMenuModelChanged: {
105111 loadAttributes();
@@ -138,12 +144,43 @@ Item {
138144
139145 buttonText: menuData && menuData.label || ""
140146 enabled: menuData && menuData.sensitive || false
147+ highlightWhenPressed: false
141148
142149 onTriggered: {
143150 menuModel.activate(menuIndex);
144151 }
145152 }
146153 }
154+
155+ Component {
156+ id: messagesButtonMenu;
157+
158+ Item {
159+ objectName: "messagesButtonMenu"
160+ property QtObject menuData: null
161+ property var menuModel: menuFactory.menuModel
162+ property int menuIndex: -1
163+
164+ implicitHeight: units.gu(5)
165+ enabled: menuData && menuData.sensitive || false
166+
167+ Label {
168+ id: buttonMenuLabel
169+ text: menuData && menuData.label || ""
170+ anchors.centerIn: parent
171+ font.bold: true
172+ }
173+
174+ MouseArea {
175+ anchors {
176+ fill: buttonMenuLabel
177+ margins: units.gu(-1)
178+ }
179+ onClicked: menuModel.activate(menuIndex);
180+ }
181+ }
182+ }
183+
147184 Component {
148185 id: sectionMenu;
149186
@@ -169,6 +206,7 @@ Item {
169206 iconSource: menuData && menuData.icon || ""
170207 value : menuData && menuData.actionState || 0.0
171208 enabled: menuData && menuData.sensitive || false
209+ highlightWhenPressed: false
172210 }
173211 }
174212
@@ -183,10 +221,58 @@ Item {
183221 text: menuData && menuData.label || ""
184222 iconSource: menuData && menuData.icon || ""
185223 enabled: menuData && menuData.sensitive || false
224+ highlightWhenPressed: false
225+
226+ onTriggered: {
227+ menuModel.activate(menuIndex);
228+ }
229+
230+ // FIXME : At the moment, the indicators aren't using
231+ // com.canonical.indicators.link for settings menu. Need to fudge it.
232+ property bool settingsMenu: menuData && menuData.action.indexOf("settings") > -1 || false
233+ backColor: settingsMenu ? Qt.rgba(1,1,1,0.07) : "transparent"
234+ component: settingsMenu ? buttonForSettings : undefined
235+ Component {
236+ id: buttonForSettings
237+ Icon {
238+ name: "settings"
239+ height: units.gu(3)
240+ width: height
241+ color: Theme.palette.selected.backgroundText
242+ }
243+ }
244+ }
245+ }
246+
247+ Component {
248+ id: linkMenu;
249+
250+ Menus.StandardMenu {
251+ objectName: "linkMenu"
252+ property QtObject menuData: null
253+ property int menuIndex: -1
254+
255+ text: menuData && menuData.label || ""
256+ iconSource: menuData && menuData.icon || ""
257+ enabled: menuData && menuData.sensitive || false
258+ highlightWhenPressed: false
186259
187260 onTriggered: {
188261 menuModel.activate(menuIndex);
189262 }
263+
264+ backColor: Qt.rgba(1,1,1,0.07)
265+
266+ component: menuData.icon ? icon : undefined
267+ Component {
268+ id: icon
269+ Icon {
270+ source: menuData.icon
271+ height: units.gu(3)
272+ width: height
273+ color: Theme.palette.selected.backgroundText
274+ }
275+ }
190276 }
191277 }
192278
@@ -201,6 +287,7 @@ Item {
201287 text: menuData && menuData.label || ""
202288 enabled: menuData && menuData.sensitive || false
203289 checked: menuData && menuData.isToggled || false
290+ highlightWhenPressed: false
204291
205292 onTriggered: {
206293 menuModel.activate(menuIndex);
@@ -208,7 +295,6 @@ Item {
208295 }
209296 }
210297
211−
212298 Component {
213299 id: switchMenu;
214300
@@ -221,6 +307,7 @@ Item {
221307 iconSource: menuData && menuData.icon || ""
222308 enabled: menuData && menuData.sensitive || false
223309 checked: menuData && menuData.isToggled || false
310+ highlightWhenPressed: false
224311
225312 onTriggered: {
226313 menuModel.activate(menuIndex);
@@ -247,6 +334,7 @@ Item {
247334 iconSource: menuData && menuData.icon || "image://theme/alarm-clock"
248335 time: timeFormatter.timeString
249336 enabled: menuData && menuData.sensitive || false
337+ highlightWhenPressed: false
250338
251339 onMenuModelChanged: {
252340 loadAttributes();
@@ -286,6 +374,7 @@ Item {
286374 time: timeFormatter.timeString
287375 eventColor: getExtendedProperty(extendedData, "xCanonicalColor", Qt.rgba(0.0, 0.0, 0.0, 0.0))
288376 enabled: menuData && menuData.sensitive || false
377+ highlightWhenPressed: false
289378
290379 onMenuModelChanged: {
291380 loadAttributes();
@@ -351,10 +440,11 @@ Item {
351440
352441 text: menuData && menuData.label || ""
353442 enabled: menuData && menuData.sensitive || false
354− checked: menuData && menuData.isToggled || false
443+ active: menuData && menuData.isToggled || false
355444 secure: getExtendedProperty(extendedData, "xCanonicalWifiApIsSecure", false)
356445 adHoc: getExtendedProperty(extendedData, "xCanonicalWifiApIsAdhoc", false)
357446 signalStrength: strengthAction.valid ? strengthAction.state : 0
447+ highlightWhenPressed: false
358448
359449 onMenuModelChanged: {
360450 loadAttributes();
@@ -383,6 +473,7 @@ Item {
383473 property var menuModel: menuFactory.menuModel
384474 property int menuIndex: -1
385475 property var extendedData: menuData && menuData.ext || undefined
476+ highlightWhenPressed: false
386477
387478 property var statusLabelAction: UnityMenuAction {
388479 model: menuModel
@@ -468,9 +559,10 @@ Item {
468559 property var extendedData: menuData && menuData.ext || undefined
469560
470561 text: menuData && menuData.label || ""
471− iconSource: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_app.svg")
562+ iconSource: getExtendedProperty(extendedData, "icon", "image://theme/message")
472563 count: menuData && menuData.actionState.length > 0 ? menuData.actionState[0] : "0"
473564 enabled: menuData && menuData.sensitive || false
565+ highlightWhenPressed: false
474566 removable: true
475567
476568 onMenuModelChanged: {
@@ -502,17 +594,20 @@ Item {
502594 property var menuModel: menuFactory.menuModel
503595 property int menuIndex: -1
504596 property var actionState: menuData && menuData.actionState || undefined
597+ property bool running: getExtendedProperty(actionState, "running", false)
505598
506− playerIcon: menuData && menuData.icon || ""
507− playerName: menuData && menuData.label || ""
599+ playerIcon: menuData && menuData.icon || "image://theme/stock_music"
600+ playerName: menuData && menuData.label || i18n.tr("Nothing is playing")
508601
509− albumArt: getExtendedProperty(actionState, "art-url", "")
510− song: getExtendedProperty(actionState, "title", "unknown")
511− artist: getExtendedProperty(actionState, "artist", "unknown")
512− album: getExtendedProperty(actionState, "album", "unknown")
513− running: getExtendedProperty(actionState, "running", false)
602+ albumArt: getExtendedProperty(actionState, "art-url", "image://theme/stock_music")
603+ song: getExtendedProperty(actionState, "title", "")
604+ artist: getExtendedProperty(actionState, "artist", "")
605+ album: getExtendedProperty(actionState, "album", "")
606+ showTrack: running && (state == "Playing" || state == "Paused")
514607 state: getExtendedProperty(actionState, "state", "")
515608 enabled: menuData && menuData.sensitive || false
609+ highlightWhenPressed: false
610+ showDivider: false
516611
517612 onTriggered: {
518613 model.activate(modelIndex);
@@ -551,6 +646,7 @@ Item {
551646 canGoNext: nextAction.valid
552647 canGoPrevious: previousAction.valid
553648 enabled: menuData && menuData.sensitive || false
649+ highlightWhenPressed: false
554650
555651 onPlay: {
556652 playAction.activate();
@@ -590,9 +686,10 @@ Item {
590686 property var uid: getExtendedProperty(extendedData, "xCanonicalUid", undefined)
591687
592688 text: menuData && menuData.label || ""
593− iconSource: menuData && menuData.icon || ""
689+ iconSource: menuData && menuData.icon || "image://theme/transfer-none"
594690 maximum: 1.0
595691 enabled: menuData && menuData.sensitive || false
692+ highlightWhenPressed: false
596693 removable: true
597694 confirmRemoval: true
598695
@@ -688,7 +785,7 @@ Item {
688785 Component {
689786 id: buttonSectionMenu;
690787
691− ListItems.Standard {
788+ Menus.StandardMenu {
692789 objectName: "buttonSectionMenu"
693790 property QtObject menuData: null
694791 property var menuModel: menuFactory.menuModel
@@ -697,8 +794,9 @@ Item {
697794
698795 iconSource: menuData && menuData.icon || ""
699796 enabled: menuData && menuData.sensitive || false
797+ highlightWhenPressed: false
700798 text: menuData && menuData.label || ""
701− showDivider: false
799+ foregroundColor: Theme.palette.normal.backgroundText
702800
703801 onMenuModelChanged: {
704802 loadAttributes();
@@ -711,22 +809,35 @@ Item {
711809 menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-extra-label': 'string'});
712810 }
713811
714− control: Button {
715− text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
812+ component: Component {
813+ Button {
814+ objectName: "buttonSectionMenuControl"
815+ text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
716816
717− onClicked: {
718− menuModel.activate(menuIndex);
817+ onClicked: {
818+ menuModel.activate(menuIndex);
819+ }
719820 }
720821 }
721822 }
722823 }
723824
724− function load(modelData) {
825+ function load(modelData, context) {
725826 if (modelData.type !== undefined) {
726− var component = _map[modelData.type];
827+ var component = undefined;
828+
829+ var contextComponents = _map[context];
830+ if (contextComponents !== undefined) {
831+ component = contextComponents[modelData.type];
832+ }
833+
834+ if (component === undefined) {
835+ component = _map["default"][modelData.type];
836+ }
727837 if (component !== undefined) {
728838 return component;
729839 }
840+ console.debug("Don't know how to make " + modelData.type + " for " + context);
730841 }
731842 if (modelData.isCheck || modelData.isRadio) {
732843 return checkableMenu;