@@ -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
202288 text: menuData && menuData.label || ""
203289 enabled: menuData && menuData.sensitive || false
290+ highlightWhenPressed: false
204291
205292 onServerCheckedChanged: {
206293 // value can be changed by menu, so a binding won't work.
@@ -212,7 +299,6 @@ Item {
212299 }
213300 }
214301
215−
216302 Component {
217303 id: switchMenu;
218304
@@ -225,6 +311,7 @@ Item {
225311 text: menuData && menuData.label || ""
226312 iconSource: menuData && menuData.icon || ""
227313 enabled: menuData && menuData.sensitive || false
314+ highlightWhenPressed: false
228315
229316 onServerCheckedChanged: {
230317 // value can be changed by menu, so a binding won't work.
@@ -255,6 +342,7 @@ Item {
255342 iconSource: menuData && menuData.icon || "image://theme/alarm-clock"
256343 time: timeFormatter.timeString
257344 enabled: menuData && menuData.sensitive || false
345+ highlightWhenPressed: false
258346
259347 onMenuModelChanged: {
260348 loadAttributes();
@@ -294,6 +382,7 @@ Item {
294382 time: timeFormatter.timeString
295383 eventColor: getExtendedProperty(extendedData, "xCanonicalColor", Qt.rgba(0.0, 0.0, 0.0, 0.0))
296384 enabled: menuData && menuData.sensitive || false
385+ highlightWhenPressed: false
297386
298387 onMenuModelChanged: {
299388 loadAttributes();
@@ -363,10 +452,11 @@ Item {
363452 secure: getExtendedProperty(extendedData, "xCanonicalWifiApIsSecure", false)
364453 adHoc: getExtendedProperty(extendedData, "xCanonicalWifiApIsAdhoc", false)
365454 signalStrength: strengthAction.valid ? strengthAction.state : 0
455+ highlightWhenPressed: false
366456
367457 onServerCheckedChanged: {
368458 // value can be changed by menu, so a binding won't work.
369− checked = serverChecked;
459+ active = serverChecked;
370460 }
371461 onMenuModelChanged: {
372462 loadAttributes();
@@ -395,6 +485,7 @@ Item {
395485 property var menuModel: menuFactory.menuModel
396486 property int menuIndex: -1
397487 property var extendedData: menuData && menuData.ext || undefined
488+ highlightWhenPressed: false
398489
399490 property var statusLabelAction: UnityMenuAction {
400491 model: menuModel
@@ -480,9 +571,10 @@ Item {
480571 property var extendedData: menuData && menuData.ext || undefined
481572
482573 text: menuData && menuData.label || ""
483− iconSource: getExtendedProperty(extendedData, "icon", "qrc:/indicators/artwork/messaging/default_app.svg")
574+ iconSource: getExtendedProperty(extendedData, "icon", "image://theme/message")
484575 count: menuData && menuData.actionState.length > 0 ? menuData.actionState[0] : "0"
485576 enabled: menuData && menuData.sensitive || false
577+ highlightWhenPressed: false
486578 removable: true
487579
488580 onMenuModelChanged: {
@@ -514,17 +606,20 @@ Item {
514606 property var menuModel: menuFactory.menuModel
515607 property int menuIndex: -1
516608 property var actionState: menuData && menuData.actionState || undefined
609+ property bool running: getExtendedProperty(actionState, "running", false)
517610
518− playerIcon: menuData && menuData.icon || ""
519− playerName: menuData && menuData.label || ""
611+ playerIcon: menuData && menuData.icon || "image://theme/stock_music"
612+ playerName: menuData && menuData.label || i18n.tr("Nothing is playing")
520613
521− albumArt: getExtendedProperty(actionState, "art-url", "")
522− song: getExtendedProperty(actionState, "title", "unknown")
523− artist: getExtendedProperty(actionState, "artist", "unknown")
524− album: getExtendedProperty(actionState, "album", "unknown")
525− running: getExtendedProperty(actionState, "running", false)
614+ albumArt: getExtendedProperty(actionState, "art-url", "image://theme/stock_music")
615+ song: getExtendedProperty(actionState, "title", "")
616+ artist: getExtendedProperty(actionState, "artist", "")
617+ album: getExtendedProperty(actionState, "album", "")
618+ showTrack: running && (state == "Playing" || state == "Paused")
526619 state: getExtendedProperty(actionState, "state", "")
527620 enabled: menuData && menuData.sensitive || false
621+ highlightWhenPressed: false
622+ showDivider: false
528623
529624 onTriggered: {
530625 model.activate(modelIndex);
@@ -563,6 +658,7 @@ Item {
563658 canGoNext: nextAction.valid
564659 canGoPrevious: previousAction.valid
565660 enabled: menuData && menuData.sensitive || false
661+ highlightWhenPressed: false
566662
567663 onPlay: {
568664 playAction.activate();
@@ -602,9 +698,10 @@ Item {
602698 property var uid: getExtendedProperty(extendedData, "xCanonicalUid", undefined)
603699
604700 text: menuData && menuData.label || ""
605− iconSource: menuData && menuData.icon || ""
701+ iconSource: menuData && menuData.icon || "image://theme/transfer-none"
606702 maximum: 1.0
607703 enabled: menuData && menuData.sensitive || false
704+ highlightWhenPressed: false
608705 removable: true
609706 confirmRemoval: true
610707
@@ -700,7 +797,7 @@ Item {
700797 Component {
701798 id: buttonSectionMenu;
702799
703− ListItems.Standard {
800+ Menus.StandardMenu {
704801 objectName: "buttonSectionMenu"
705802 property QtObject menuData: null
706803 property var menuModel: menuFactory.menuModel
@@ -709,8 +806,9 @@ Item {
709806
710807 iconSource: menuData && menuData.icon || ""
711808 enabled: menuData && menuData.sensitive || false
809+ highlightWhenPressed: false
712810 text: menuData && menuData.label || ""
713− showDivider: false
811+ foregroundColor: Theme.palette.normal.backgroundText
714812
715813 onMenuModelChanged: {
716814 loadAttributes();
@@ -723,22 +821,35 @@ Item {
723821 menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-extra-label': 'string'});
724822 }
725823
726− control: Button {
727− text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
824+ component: Component {
825+ Button {
826+ objectName: "buttonSectionMenuControl"
827+ text: getExtendedProperty(extendedData, "xCanonicalExtraLabel", "")
728828
729− onClicked: {
730− menuModel.activate(menuIndex);
829+ onClicked: {
830+ menuModel.activate(menuIndex);
831+ }
731832 }
732833 }
733834 }
734835 }
735836
736− function load(modelData) {
837+ function load(modelData, context) {
737838 if (modelData.type !== undefined) {
738− var component = _map[modelData.type];
839+ var component = undefined;
840+
841+ var contextComponents = _map[context];
842+ if (contextComponents !== undefined) {
843+ component = contextComponents[modelData.type];
844+ }
845+
846+ if (component === undefined) {
847+ component = _map["default"][modelData.type];
848+ }
739849 if (component !== undefined) {
740850 return component;
741851 }
852+ console.debug("Don't know how to make " + modelData.type + " for " + context);
742853 }
743854 if (modelData.isCheck || modelData.isRadio) {
744855 return checkableMenu;