michael@0: michael@0: /** michael@0: * Manage the contents of the Windows 8 "Settings" charm. michael@0: */ michael@0: var SettingsCharm = { michael@0: _entries: new Map(), michael@0: _nextId: 0, michael@0: michael@0: /** michael@0: * Add a new item to the "Settings" menu in the Windows 8 charms. michael@0: * @param aEntry Object with a "label" property (string that will appear in the UI) michael@0: * and an "onselected" property (function to be called when the user chooses this entry) michael@0: */ michael@0: addEntry: function addEntry(aEntry) { michael@0: try { michael@0: let id = Services.metro.addSettingsPanelEntry(aEntry.label); michael@0: this._entries.set(id, aEntry); michael@0: } catch (e) { michael@0: // addSettingsPanelEntry does not work on non-Metro platforms michael@0: Cu.reportError(e); michael@0: } michael@0: }, michael@0: michael@0: init: function SettingsCharm_init() { michael@0: Services.obs.addObserver(this, "metro-settings-entry-selected", false); michael@0: michael@0: // Options michael@0: this.addEntry({ michael@0: label: Strings.browser.GetStringFromName("optionsCharm"), michael@0: onselected: function() FlyoutPanelsUI.show('PrefsFlyoutPanel') michael@0: }); michael@0: michael@0: // Search providers michael@0: this.addEntry({ michael@0: label: Strings.browser.GetStringFromName("searchCharm"), michael@0: onselected: function() FlyoutPanelsUI.show('SearchFlyoutPanel') michael@0: }); michael@0: michael@0: /* michael@0: * Temporarily disabled until we can have sync prefs together with the michael@0: * Desktop browser's sync prefs. michael@0: // Sync michael@0: this.addEntry({ michael@0: label: Strings.brand.GetStringFromName("syncBrandShortName"), michael@0: onselected: function() FlyoutPanelsUI.show('SyncFlyoutPanel') michael@0: }); michael@0: */ michael@0: michael@0: // About michael@0: this.addEntry({ michael@0: label: Strings.browser.GetStringFromName("aboutCharm1"), michael@0: onselected: function() FlyoutPanelsUI.show('AboutFlyoutPanel') michael@0: }); michael@0: michael@0: // Feedback michael@0: this.addEntry({ michael@0: label: Strings.browser.GetStringFromName("feedbackCharm"), michael@0: onselected: function() { michael@0: let url = Services.urlFormatter.formatURLPref("app.support.inputURL"); michael@0: BrowserUI.addAndShowTab(url, Browser.selectedTab); michael@0: } michael@0: }); michael@0: michael@0: // Help michael@0: this.addEntry({ michael@0: label: Strings.browser.GetStringFromName("helpOnlineCharm"), michael@0: onselected: function() { michael@0: let url = Services.urlFormatter.formatURLPref("app.support.baseURL") + michael@0: "firefox-help"; michael@0: BrowserUI.addAndShowTab(url, Browser.selectedTab); michael@0: } michael@0: }); michael@0: }, michael@0: michael@0: observe: function SettingsCharm_observe(aSubject, aTopic, aData) { michael@0: if (aTopic == "metro-settings-entry-selected") { michael@0: let entry = this._entries.get(parseInt(aData, 10)); michael@0: if (entry) michael@0: entry.onselected(); michael@0: } michael@0: }, michael@0: michael@0: uninit: function SettingsCharm_uninit() { michael@0: Services.obs.removeObserver(this, "metro-settings-entry-selected"); michael@0: } michael@0: };