// Listview view enyo.kind({ name: "Sugar.DesktopListView", kind: "Scroller", published: { activities: [] }, components: [ {name: "nomatch", classes: "listview-nomatch", showing: false}, {name: "message", classes: "listview-message", showing: false}, {name: "nofilter", kind: "Sugar.IconButton", icon: {directory: "icons", icon: "dialog-cancel.svg"}, classes: "listview-button", ontap: "nofilter", showing: false}, {name: "activityPopup", kind: "Sugar.Popup", showing: false}, {name: "activityList", classes: "activity-list", kind: "Repeater", onSetupItem: "setupItem", onresize: "resize", components: [ {name: "item", classes: "activity-list-item", components: [ {name: "favorite", kind: "Sugar.Icon", x: 0, y: 4, size: constant.iconSizeLargeFavorite, ontap: "doSwitchFavorite"}, {name: "activity", kind: "Sugar.Icon", x: 60, y: 5, size: constant.iconSizeList, ontap:"doRunNewActivity"}, {name: "name", classes: "activity-name"}, {name: "version", classes: "activity-version"}, {name: "help", kind: "Sugar.Icon", classes: "activity-help", x: 800, y: 4, showing: false, size: constant.iconSizeList, ontap:"doHelp"} ]} ]} ], handlers: { onScroll: "onscroll" }, // Constructor: init list create: function() { this.inherited(arguments); this.realLength = 0; this.favoriteActivityButton = null; if (!window.sugarizerOS) { this.activitiesChanged(); this.computeSize(); this.draw(); } else { var t = this; var a = arguments; sugarizerOS.initActivitiesPreferences(function (){ t.activitiesChanged(); t.computeSize(); t.draw(); }); } }, localize: function() { this.activitiesChanged(); }, computeSize: function() { var toolbar = document.getElementById("toolbar"); var canvas = document.getElementById("canvas"); var canvas_height = canvas.offsetHeight; this.applyStyle("height", canvas_height+"px"); }, resize: function() { this.computeSize(); app.resize(); }, // Initialize information for tutorial beforeHelp: function() { tutorial.setElement("owner", app.$.owner.getAttribute("id")); tutorial.setElement("journal", app.$.journal.getAttribute("id")); if (this.favoriteActivityButton) { tutorial.setElement("favoriteitembutton", this.favoriteActivityButton.getAttribute("id")); } }, // Get linked toolbar, same than the desktop view getToolbar: function() { return app.getToolbar(); }, // Draw screen draw: function() { // Set no matching activities var canvas_center = util.getCanvasCenter(); this.$.nomatch.applyStyle("margin-left", (canvas_center.x-constant.sizeEmpty/4)+"px"); var margintop = (canvas_center.y-constant.sizeEmpty/4); this.$.nomatch.applyStyle("margin-top", margintop+"px"); this.$.message.setContent(l10n.get("NoMatchingActivities")); this.$.nofilter.setText(l10n.get("ClearSearch")); }, // Property changed activitiesChanged: function() { var noFilter = app.getToolbar().getSearchText().length == 0; var length = (noFilter && this.activities.length > constant.listInitCount) ? constant.listInitCount : this.activities.length; this.realLength = this.activities.length; this.$.activityList.set("count", length, true); if (this.activities.length == 0) { this.$.nomatch.show(); this.$.message.show(); this.$.nofilter.show(); } else { this.$.nomatch.hide(); this.$.message.hide(); this.$.nofilter.hide(); } }, // Init setup for a line setupItem: function(inSender, inEvent) { // Set item in the template var activitiesList = sorted(this.activities); if (activitiesList[inEvent.index].type !== 'undefined' && activitiesList[inEvent.index].type == "native") { activitiesList[inEvent.index].isNative = true; } if (inEvent.index == 0) { this.favoriteActivityButton = inEvent.item.$.favorite; } inEvent.item.$.activity.setIcon(activitiesList[inEvent.index]); inEvent.item.$.activity.setPopupShow(enyo.bind(this, "showActivityPopup")); inEvent.item.$.activity.setPopupHide(enyo.bind(this, "hideActivityPopup")); inEvent.item.$.favorite.setIcon({directory: "icons", icon: "emblem-favorite-large.svg"}); inEvent.item.$.favorite.setColorized(activitiesList[inEvent.index].favorite); inEvent.item.$.name.setContent(activitiesList[inEvent.index].name); inEvent.item.$.version.setContent(l10n.get("VersionNumber", {number:activitiesList[inEvent.index].version})); inEvent.item.$.help.setIcon({directory: "icons", icon: "help-rev.svg"}); inEvent.item.$.help.setColorized(false); inEvent.item.$.help.setShowing(!activitiesList[inEvent.index].isNative); if (l10n.language.direction == "rtl") { inEvent.item.$.name.addClass("rtl-14"); inEvent.item.$.version.addClass("rtl-14"); } }, // Handle scroll to lazy display content onscroll: function(inSender, inEvent) { var scrollBounds = inEvent.scrollBounds; var currentCount = this.$.activityList.get("count"); if (app.getToolbar().getSearchText().length == 0 && scrollBounds && (scrollBounds.maxTop - scrollBounds.top) < constant.listScrollLimit && this.realLength > currentCount) { var length = Math.min(currentCount + constant.listStepCount, this.activities.length); humane.log(l10n.get("Loading")); this.$.activityList.set("count", length, true); } }, // Switch favorite value for clicked line doSwitchFavorite: function(inSender, inEvent) { var activitiesList = sorted(this.activities); this.switchFavorite(inEvent.dispatchTarget.container, activitiesList[inEvent.index]); }, switchFavorite: function(favorite, activity) { stats.trace(constant.viewNames[app.getView()], 'switch_favorite', activity.id, null); util.vibrate(); favorite.setColorized(preferences.switchFavoriteActivity(activity)); favorite.container.render(); preferences.save(); preferences.saveToServer(myserver); this.getToolbar().askRedraw(); this.$.activityPopup.hidePopup(); }, // Run new activity doRunNewActivity: function(inSender, inEvent) { var activitiesList = sorted(this.activities); this.runNewActivity(activitiesList[inEvent.index]) }, runNewActivity: function(activity) { // Start a new activity instance util.vibrate(); this.$.activityPopup.hidePopup(); preferences.runActivity(activity, null); }, // Popup menu handling showActivityPopup: function(icon) { // Create popup var activity = icon.icon; this.$.activityPopup.setHeader({ icon: activity, colorized: true, name: activity.name, title: null, action: null }); var items = []; items.push({ icon: icon.parent.container.$.favorite.icon, colorized: !activity.favorite, name: activity.favorite ? l10n.get("RemoveFavorite") : l10n.get("MakeFavorite"), action: enyo.bind(this, "switchFavorite"), data: [icon.parent.container.$.favorite, icon.icon] }); items.push({ icon: activity, colorized: false, name: l10n.get("StartNew"), action: enyo.bind(this, "runNewActivity"), data: [activity, null] }); this.$.activityPopup.setFooter(items); // Show popup this.$.activityPopup.setMargin({left: 0, top: (icon.owner.index*60)+20-mouse.position.y}); this.$.activityPopup.showPopup(); }, hideActivityPopup: function(icon) { // Hide popup if (!this.$.activityPopup) { return true; } if (this.$.activityPopup.cursorIsInside() || icon.cursorIsInside()) { return false; } this.$.activityPopup.hidePopup(); return true; }, // Remove filter nofilter: function() { app.getToolbar().setSearchText(""); app.filterActivities(); }, // Display help popup doHelp: function(inSender, inEvent) { var activitiesList = sorted(this.activities); var activities = []; for (var i = 0 ; i < activitiesList.length ; i++) { var activity = activitiesList[i]; if (activity.isNative || activity.type == "native") { continue; } var title = l10n.get('NameActivity', {name: activity.name}); var icon = {icon: activity.icon, directory: activity.directory, size: constant.sizeEmpty}; var description = l10n.get('TutoActivity'+activity.directory.substr(activity.directory.indexOf("/")+1).replace('.','')); if (i == inEvent.index) { tutorial.setElement("step", activities.length); } activities.push({title: title, icon: icon, description: description, step: i}); } tutorial.setElement("activities", activities); stats.trace(constant.viewNames[app.getView()], 'tutorial', 'start', null); tutorial.start(); } }); // Sort activities function sorted(activities) { var result = []; for (var i in activities) { result.push(activities[i]); } result.sort(function (a, b) { return a.name == b.name ? 0 : (a.name > b.name ? 1 : -1); }); return result; }