|
|
-
-
- // Local cache of icon coordonate
- var networkItemsCache = [];
- var wifiItemsCache = [];
- var lastWifiUpdate = 0;
-
- // Neighborhood view
- enyo.kind({
- name: "Sugar.NeighborhoodView",
- kind: enyo.Control,
- components: [
- {name: "owner", kind: "Sugar.Icon", size: constant.sizeNeighbor, colorized: true, classes: "owner-icon", showing: false},
- {name: "server", kind: "Sugar.Icon", size: constant.sizeNeighbor, colorized: true, classes: "server-icon", showing: false},
- {name: "network", showing: true, onresize: "draw", components: []},
- {name: "otherview", showing: true, components: []},
- {name: "networkPopup", kind: "Sugar.Popup", showing: false},
- {name: "empty", classes: "cloud-empty", showing: false},
- {name: "message", classes: "cloud-message", showing: false},
- {name: "settings", classes: "cloud-line", showing: false, components:[
- {name: "gotosettings", kind: "Sugar.IconButton", icon: {directory: "icons", icon: "preferences-system.svg"}, classes: "listview-button cloud-gotosettings", ontap: "doSettings"}
- ]},
- {name: "refresh", classes: "cloud-line", showing: false, components:[
- {name: "refreshstate", kind: "Sugar.IconButton", icon: {directory: "icons", icon: "system-restart.svg"}, classes: "listview-button cloud-gotosettings", ontap: "doRefresh"}
- ]}
- ],
- // Constructor: init list
- create: function() {
- this.inherited(arguments);
- this.$.owner.setIcon({directory: "icons", icon: "owner-icon.svg"});
- this.$.owner.setPopupShow(enyo.bind(this, "showBuddyPopup"));
- this.$.owner.setPopupHide(enyo.bind(this, "hideBuddyPopup"));
-
- if (window.sugarizerOS) {
- this.$.server.setIcon({directory: "icons", icon:"cloud-one.svg"});
- } else {
- this.$.server.setIcon({directory: "icons", icon: "network-wireless-connected-100.svg"});
- }
- this.$.server.setPopupShow(enyo.bind(this, "showServerPopup"));
- this.$.server.setPopupHide(enyo.bind(this, "hideServerPopup"));
- var cacheData = this.findInCache({icon: this.$.server});
- var serverColor = Math.floor(Math.random()*xoPalette.colors.length);
- this.$.server.setColorizedColor(cacheData ? cacheData.colorvalue : xoPalette.colors[serverColor]);
- this.users = [];
- this.activities = [];
- this.eeMode = false;
- this.timer = window.setInterval(enyo.bind(this, "updateNetworkState"), constant.timerUpdateNetwork);
- if (presence.isConnected() || window.sugarizerOS) {
- this.updateNetworkState();
- }
- if (l10n.language.direction == "rtl") {
- this.$.message.addClass("rtl-10");
- }
- this.draw();
- },
-
- // Get linked toolbar
- getToolbar: function() {
- if (this.toolbar == null)
- this.toolbar = new Sugar.NeighborhoodToolbar();
- return this.toolbar;
- },
-
- // Get linked popup
- getPopup: function() {
- return this.$.networkPopup;
- },
- createWifiIcons: function (items) {
- // If SugarizerOS, adding Wireless networks icons
- if (window.sugarizerOS) {
- var networkIcons = [];
- var networks = sugarizerOS.networks;
- var wifiInTutorial = false;
- for (var i = 0; i < networks.length; i++) {
- var currentNetwork = networks[i];
- var encryptionString = sugarizerOS.getEncryptionString(currentNetwork.capabilities);
- var connectedString = "";
- var securedString = "";
- var pwr = (-1 * currentNetwork.RSSI) % 10;
- if (currentNetwork.isConnected) {
- connectedString = "-connected";
- } else if (encryptionString != "OPEN") {
- securedString = "-locked";
- }
- if (pwr > 0) {
- if (pwr % 2 != 0) {
- pwr += 1;
- }
- pwr = pwr * 10;
- cacheIcon = sugarizerOS.getNetworkIconFromCache(currentNetwork.BSSID);
- if (!cacheIcon) {
- currentNetwork.networkId = currentNetwork.BSSID;
- currentNetwork.shared = false;
- currentNetwork.shared.id = currentNetwork.BSSID;
- currentNetwork.color = xoPalette.colors[Math.floor(Math.random() * xoPalette.colors.length)];
- } else {
- currentNetwork = cacheIcon;
- }
-
- iconString = "network-wireless"+connectedString+securedString+"-0"+pwr+".svg";
- if (pwr == 100) {
- iconString = "network-wireless"+connectedString+securedString+"-"+pwr+".svg";
- }
- var icon = this.$.network.createComponent({
- kind: "Sugar.Icon",
- icon: {directory: "icons", icon: iconString},
- size: constant.sizeNeighbor,
- colorized: true,
- colorizedColor: currentNetwork.color,
- popupShow: enyo.bind(this, "showWifiPopup"),
- popupHide: enyo.bind(this, "hideWifiPopup"),
- data: currentNetwork
- },
- {owner: this}
- );
- icon.render();
- if (!wifiInTutorial) {
- tutorial.setElement("wifi", icon.getAttribute("id"));
- wifiInTutorial = true;
- }
- networkIcons.push(icon);
- sugarizerOS.addNetworkIconToCache(currentNetwork);
- var item = {icon: icon, size: icon.getSize(), locked: false, child: []};
- items.push(item);
- }}
- }
- },
-
- // Update
- updateNetworkState: function() {
- var currentcolor = preferences.getColor();
- if (presence.isConnected() && currentcolor.stroke == "#005FE4" && currentcolor.fill == "#FF2B34" && this.toolbar && this.toolbar.getSearchText() == "Sugarizer contributors") {
- if (!this.eeMode) {
- var list = new Sugar.EE({mode: 3}).contributors();
- for (var i = 0 ; i < list.length ; i++) {
- this.users.push(list[i]);
- }
- this.eeMode = true;
- this.draw();
- this.filterNetwork();
- }
- } else if (presence.isConnected()) {
- this.$.owner.setShowing(true);
- this.$.server.setShowing(true);
- this.$.empty.setShowing(false);
- this.$.message.setShowing(false);
- this.$.settings.setShowing(false);
- this.$.refresh.setShowing(false);
- if (app.toolbar && app.toolbar.showServerWarning) {
- app.toolbar.showServerWarning(false);
- }
- presence.listUsers(enyo.bind(this, "userListReceived"));
- presence.listSharedActivities(enyo.bind(this, "sharedListReceived"));
- this.eeMode = false;
- }
- else if (window.sugarizerOS) {
- now = new Date().getTime();
- this.$.owner.setShowing(true);
- if (presence.isConnected())
- this.$.server.setShowing(true);
- this.$.empty.setShowing(false);
- this.$.message.setShowing(false);
- this.$.settings.setShowing(false);
- this.$.refresh.setShowing(false);
- sugarizerOS.isWifiEnabled(function(value){
- if (value != 0) {
- sugarizerOS.scanWifi();
- } else {
- sugarizerOS.networks = [];
- }
- });
- if (wifiItemsCache != sugarizerOS.networks && (now - lastWifiUpdate) > constant.wifiUpdateTime) {
- this.draw();
- wifiItemsCache = sugarizerOS.networks;
- lastWifiUpdate = now;
- }
- presence.listUsers(enyo.bind(this, "userListReceived"));
- presence.listSharedActivities(enyo.bind(this, "sharedListReceived"));
- this.eeMode = false;
- }
- else {
- this.$.owner.setShowing(false);
- this.$.server.setShowing(false);
- this.$.empty.setShowing(true);
- this.$.message.setShowing(true);
- if (app.toolbar && app.toolbar.showServerWarning) {
- app.toolbar.showServerWarning(true);
- }
- if (preferences.isConnected()) {
- this.$.message.setContent(l10n.get("UnableToConnect"));
- this.$.refresh.setShowing(true);
- } else {
- this.$.message.setContent(l10n.get("ServerNotSet"));
- this.$.settings.setShowing(true);
- }
- this.eeMode = false;
- }
- },
-
- // Popup menu for buddy handling
- showBuddyPopup: function(icon) {
- // Create popup
- this.getPopup().setHeader({
- icon: icon.icon,
- colorized: true,
- colorizedColor: null,
- name: preferences.getName(),
- title: null,
- action: null
- });
- this.getPopup().setItems(null);
- var items = [];
- items.push({
- icon: {directory: "icons", icon: "system-shutdown.svg"},
- colorized: false,
- name: l10n.get("Logoff"),
- action: enyo.bind(this, "doLogoff"),
- data: null
- });
- items.push({
- icon: {directory: "icons", icon: "system-restart.svg"},
- colorized: false,
- name: l10n.get("Restart"),
- action: enyo.bind(this, "doRestart"),
- data: null
- });
- items.push({
- icon: {directory: "icons", icon: "preferences-system.svg"},
- colorized: false,
- name: l10n.get("MySettings"),
- action: enyo.bind(this, "doSettings"),
- data: null
- });
- this.getPopup().setFooter(items);
-
- // Show popup
- this.getPopup().showPopup();
- },
- hideBuddyPopup: function(icon) {
- if (!this || !this.getPopup || !icon || !this.getPopup() || this.getPopup().cursorIsInside() || icon.cursorIsInside()) {
- return false;
- }
- this.getPopup().hidePopup();
- return true;
- },
- doLogoff: function() {
- stats.trace(constant.viewNames[app.getView()], 'click', 'logoff');
- this.getPopup().hidePopup();
- if (!preferences.isConnected() || (preferences.isConnected() && !preferences.getOptions("sync"))) {
- this.otherview = this.$.otherview.createComponent({kind: "Sugar.DialogWarningMessage"}, {owner:this});
- this.otherview.show();
- } else {
- preferences.addUserInHistory();
- util.cleanDatastore(null, function() {
- util.restartApp();
- });
- }
- },
- doRestart: function() {
- stats.trace(constant.viewNames[app.getView()], 'click', 'restart');
- util.restartApp();
- },
- doSettings: function() {
- stats.trace(constant.viewNames[app.getView()], 'click', 'my_settings');
- this.getPopup().hidePopup();
- this.otherview = this.$.otherview.createComponent({kind: "Sugar.DialogServer"}, {owner:this});
- this.otherview.show();
- },
- doRefresh: function() {
- if (!presence.isConnected()) {
- var that = this;
- presence.joinNetwork(function(error, user) {
- if (error) {
- console.log("WARNING: Can't connect to presence server");
- } else {
- that.updateNetworkState();
- }
- });
- } else {
- this.updateNetworkState();
- }
-
- },
-
- // Popup menu for server handling
- showServerPopup: function(icon) {
- // Create popup
- var name = myserver.getServer();
- var info = preferences.getServer();
- if (info && info.name) {
- name = info.name;
- }
- this.getPopup().setHeader({
- icon: icon.icon,
- colorized: true,
- colorizedColor: icon.colorizedColor,
- name: name,
- title: l10n.get("Connected"),
- action: null
- });
- this.getPopup().setItems(null);
- this.getPopup().setFooter(null);
-
- // Show popup
- this.getPopup().showPopup();
- },
- hideServerPopup: function(icon) {
- if (!this || !this.getPopup || !icon || !this.getPopup() || this.getPopup().cursorIsInside() || icon.cursorIsInside()) {
- return false;
- }
- this.getPopup().hidePopup();
- return true;
- },
-
- disconnect: function() {
- sugarizerOS.disconnectWifi();
- this.getPopup().hidePopup();
- },
-
- forgetPassword: function(network) {
- sugarizerOS.forgetNetwork(network.SSID);
- this.getPopup().hidePopup();
- },
-
- joinNetwork: function(network) {
- var t = this;
-
- sugarizerOS.isKnownNetwork(network.SSID, function (result) {
- if (result == 0) {
- sugarizerOS.setKey(network.SSID, "", true);
- } else {
- sugarizerOS.joinNetwork(network.SSID);
- }
- t.getPopup().hidePopup();
- });
- },
-
- enterKey: function (network) {
- this.getPopup().hidePopup();
- var t = this;
- sugarizerOS.isKnownNetwork(network.SSID, function (result) {
- if (result == 0) {
- sugarizerOS.NetworkBuffer = network;
- t.otherview = t.$.otherview.createComponent({
- kind: "Sugar.DialogNetworkKey"
- });
- t.otherview.show();
- } else {
- sugarizerOS.joinNetwork(network.SSID)
- }
- })
-
- },
- //Popup menu for Wireless Network handling
- showWifiPopup: function(icon) {
- // Create popup
- var data = icon.getData();
- var iconName = data.SSID + " (" + data.RSSI + ")" + "[" + sugarizerOS.getEncryptionString(data.capabilities) + "]";
- var power = (-1 * data.RSSI) % 5;
- this.getPopup().setHeader({
- icon: icon.icon,
- colorized: true,
- colorizedColor: icon.colorizedColor,
- name: iconName,
- title: data.BSSID,
- action: null
- });
- var items = [];
-
- var t = this;
- sugarizerOS.getWifiSSID(function (ssid) {
- if (ssid == null || ssid !== data.SSID) {
- item = {
- icon: {
- directory: "icons", icon: "activity-start.svg"
- },
- colorized: false,
- name: l10n.get("JoinNetwork"),
- action: enyo.bind(t, "joinNetwork"),
- data: [icon.getData(), null]
- };
- if (sugarizerOS.getEncryptionString(data.capabilities) != "OPEN") {
- item.action = enyo.bind(t, "enterKey");
- }
- } else {
- item = {
- icon: {
- directory: "icons",
- icon: "activity-start.svg"
- },
- colorized: false,
- name: l10n.get("Disconnect"),
- action: enyo.bind(t, "disconnect"),
- data: [icon.getData(), null]
- };
- }
- items.push(item);
-
-
- sugarizerOS.isKnownNetwork(data.SSID, function (result) {
- if (result == 1) {
- item = {
- icon: {
- directory: "icons",
- icon: "activity-start.svg"
- },
- colorized: false,
- name: l10n.get("ForgetPassword"),
- action: enyo.bind(t, "forgetPassword"),
- data: [icon.getData(), null]
- };
- if (sugarizerOS.getEncryptionString(data.capabilities) != "OPEN") {
- items.push(item);
- }
- }
-
- t.getPopup().setItems(items);
- t.getPopup().setFooter(null);
- // Show popup
- t.getPopup().showPopup();
- })
- })
- },
- hideWifiPopup: function (icon) {
- if ((!this || !this.getPopup || !icon || !this.getPopup() || this.getPopup() && this.getPopup().cursorIsInside()) || icon.cursorIsInside()) {
- return false;
- }
- this.getPopup().hidePopup();
- return true;
- },
-
- // Popup menu for user handling
- showUserPopup: function(icon) {
- // Create popup
- this.getPopup().setHeader({
- icon: icon.icon,
- colorized: true,
- colorizedColor: icon.colorizedColor,
- name: icon.getData().name,
- title: null,
- action: null
- });
- this.getPopup().setItems(null);
- this.getPopup().setFooter(null);
-
- // Show popup
- this.getPopup().showPopup();
- },
- hideUserPopup: function(icon) {
- if (!this || !this.getPopup || !icon || !this.getPopup() || this.getPopup().cursorIsInside() || icon.cursorIsInside()) {
- return false;
- }
- this.getPopup().hidePopup();
- return true;
- },
-
- // Popup menu for shared activities handling
- showActivityPopup: function(icon) {
- // Create popup
- this.getPopup().setHeader({
- icon: icon.icon,
- colorized: true,
- colorizedColor: icon.colorizedColor,
- name: icon.getData().activity.name,
- title: null,
- action: null
- });
- var items = [];
- items.push({
- icon: {directory: "icons", icon: "activity-start.svg"},
- colorized: false,
- name: l10n.get("JoinActivity"),
- action: enyo.bind(this, "joinActivity"),
- data: [icon.getData(), null]
- });
- this.getPopup().setItems(items);
- this.getPopup().setFooter(null);
-
- // Show popup
- this.getPopup().showPopup();
- },
- hideActivityPopup: function(icon) {
- if (!this || !this.getPopup || !icon || !this.getPopup() || this.getPopup().cursorIsInside() || icon.cursorIsInside()) {
- return false;
- }
- this.getPopup().hidePopup();
- return true;
- },
-
- // Join a shared activity
- joinActivity: function(data) {
- preferences.runActivity(
- data.activity,
- null,
- data.activity.name,
- data.shared.id);
- },
-
- // User list received
- userListReceived: function(users) {
- // Ensure that an update is need
- if (this.users.length == users.length) {
- var len = this.users.length;
- var found = 0;
- for(var i = 0 ; i < len ; i++) {
- for(var j = 0 ; j < len ; j++) {
- if (users[i].networkId == this.users[j].networkId) {
- found++;
- break;
- }
- }
- }
- if (found == len) {
- return;
- }
- }
-
- // Retrieve users
- this.users = users;
-
- // Add dummy users for testing
- var dummy = 0;
- for (var i = 0 ; i < dummy ; i++) {
- this.users.push({networkId: "nxx"+i, name: "dummy "+i, colorvalue: xoPalette.colors[Math.floor(Math.random()*xoPalette.colors.length)]});
- }
-
- // Redraw
- this.draw();
- },
-
- // Shared activities list received
- sharedListReceived: function(activities) {
- // Ensure that an update is need
- if (this.activities.length == activities.length) {
- var len = this.activities.length;
- var found = 0;
- for(var i = 0 ; i < len ; i++) {
- for(var j = 0 ; j < len ; j++) {
- if (activities[i].activityId == this.activities[j].activityId && activities[i].users.length == this.activities[j].users.length) {
- found++;
- break;
- }
- }
- }
- if (found == len) {
- return;
- }
- }
-
- // Retrieve activities
- this.activities = activities;
-
- // Redraw
- this.draw();
- },
-
- // Draw screen
- draw: function() {
- // Resize content and set Journal empty in the middle
- var canvas_center = util.getCanvasCenter();
- this.$.empty.applyStyle("margin-left", (canvas_center.x-constant.sizeEmpty/4-10)+"px");
- var margintop = (canvas_center.y-constant.sizeEmpty/4-80);
- this.$.empty.applyStyle("margin-top", margintop+"px");
- this.$.message.applyStyle("margin-top", (margintop+70)+"px");;
- this.$.gotosettings.applyStyle("margin-top", (margintop+90)+"px");
- this.$.gotosettings.setText(l10n.get("MySettings"));
- this.$.refreshstate.applyStyle("margin-top", (margintop+90)+"px");
- this.$.refreshstate.setText(l10n.get("Refresh"));
- tutorial.setElement("owner", this.$.owner.getAttribute("id"));
- tutorial.setElement("server", this.$.server.getAttribute("id"));
-
- // Clean network icons
- var items = [];
- enyo.forEach(this.$.network.getControls(), function(item) { items.push(item); });
- for (var i = 0 ; i < items.length ; i++) { items[i].destroy(); };
-
- // List items to draw
- var canvas_center = util.getCanvasCenter();
- items = [];
- items.push({icon: this.$.owner, x:(canvas_center.x-constant.sizeNeighbor/2), y: (canvas_center.y-constant.sizeNeighbor/2), size: this.$.owner.getSize(), locked: true, child: []});
- if (this.$.server.getShowing())
- items.push({icon: this.$.server, size: this.$.server.getSize(), locked: false, child: []});
-
- // Create network icons for items
- this.createNetworkIcons(items);
- this.createWifiIcons(items);
-
- // Compute icons position
- var len = items.length;
- for(var i = 0 ; i < len ; i++) {
- // Set icon position
- var current = items[i];
- if (current.locked)
- continue;
- var hasChild = (current.child.length > 0) ? 1 : 0;
- var cacheData = this.findInCache(current);
- var maxx = canvas_center.dx-current.size-2*hasChild*current.size;
- current.x = (cacheData && cacheData.x < maxx) ? cacheData.x : current.size*hasChild + Math.floor(Math.random()*maxx);
- var maxy = canvas_center.dy-current.size-2*hasChild*current.size;
- current.y = (cacheData && cacheData.y < maxy) ? cacheData.y : current.size*hasChild + Math.floor(Math.random()*maxy);
- if (!cacheData) this.addToCache(current);
-
- // Set child position
- var childLen = current.child.length;
- for (var j = 0 ; j < childLen ; j++) {
- var child = current.child[j];
- var angle = (2.0*Math.PI)/childLen * j;
- child.x = current.x + current.size * Math.sin(angle);
- child.y = current.y - current.size * Math.cos(angle);
- }
- }
- var collisions = this.detectCollisions(items);
- if (collisions.length > 0) {
- this.solveCollisions(collisions, items);
- }
-
- // Draw all icons
- for (var i = 0 ; i < len ; i++) {
- var current = items[i];
- current.icon.applyStyle("margin-left", current.x+"px");
- current.icon.applyStyle("margin-top", current.y+"px");
- var childLen = current.child.length;
- for (var j = 0 ; j < childLen ; j++) {
- var child = current.child[j];
- child.applyStyle("margin-left", child.x+"px");
- child.applyStyle("margin-top", child.y+"px");
- }
- }
-
- // Filter
- this.filterNetwork();
- },
-
- // Create network icons fro items
- createNetworkIcons: function(items) {
- // Add user icons
- var len = this.users.length;
- var userIcons = [];
- var otherInTutorial = false;
- for (var i = 0 ; i < len ; i++) {
- var currentUser = this.users[i];
- if (currentUser.networkId != preferences.getNetworkId()) {
- var icon = this.$.network.createComponent({
- kind: "Sugar.Icon",
- icon: {directory: "icons", icon: "owner-icon.svg"},
- size: constant.sizeNeighbor,
- colorized: true,
- colorizedColor: currentUser.colorvalue,
- popupShow: enyo.bind(this, "showUserPopup"),
- popupHide: enyo.bind(this, "hideUserPopup"),
- data: currentUser
- },
- {owner: this}
- );
- icon.render();
- if (!otherInTutorial) {
- tutorial.setElement("other", icon.getAttribute("id"));
- otherInTutorial = true;
- }
- userIcons.push(icon);
- }
- }
-
- // Add activities icons
- len = this.activities.length;
- var userIconsInActivities = [];
- var activityInTutorial = false;
- for (var i = 0 ; i < len ; i++) {
- // Unknown activity, ignoe
- var currentActivity = this.activities[i];
- var activityInfo = preferences.getActivity(currentActivity.activityId);
- if (activityInfo == preferences.genericActivity) {
- continue;
- }
-
- // Add activity icon
- var icon = this.$.network.createComponent({
- kind: "Sugar.Icon",
- icon: {directory: activityInfo.directory, icon: activityInfo.icon},
- size: constant.sizeNeighbor,
- colorized: true,
- colorizedColor: currentActivity.colorvalue,
- popupShow: enyo.bind(this, "showActivityPopup"),
- popupHide: enyo.bind(this, "hideActivityPopup"),
- data: {shared: currentActivity, activity: activityInfo}
- },
- {owner: this}
- );
- icon.render();
- if (!activityInTutorial) {
- tutorial.setElement("activity", icon.getAttribute("id"));
- activityInTutorial = true;
- }
-
- // Add childs
- var childIcons = [];
- var childLen = currentActivity.users.length;
- for (var j = 0 ; j < childLen ; j++) {
- var userIconsLength = userIcons.length;
- for (var k = 0 ; k < userIconsLength ; k++) {
- var iconToTest = userIcons[k];
- if (currentActivity.users[j] == iconToTest.getData().networkId) {
- childIcons.push(iconToTest);
- userIconsInActivities.push(iconToTest);
- }
- }
- }
- items.push({icon: icon, size: icon.getSize(), locked: false, child: childIcons});
- }
-
- // Add icons alone
- var userIconsLength = userIcons.length;
- var childLen = userIconsInActivities.length;
- for (var i = 0 ; i < userIconsLength ; i++) {
- var found = false;
- var icon = userIcons[i];
- for (var j = 0 ; j < childLen && !found ; j++) {
- if (icon.getData().networkId == userIconsInActivities[j].getData().networkId) {
- found = true;
- }
- }
- if (!found) {
- items.push({icon: icon, size: icon.getSize(), locked: false, child: []});
- }
- }
- },
-
- // Detect collisions on drawing
- detectCollisions: function(items) {
- var collisions = [];
- var len = items.length;
- for (var i = 0 ; i < len ; i++) {
- for (var j = i+1 ; j < len ; j++) {
- var item0 = items[i];
- var item1 = items[j];
- var size0 = item0.size;
- var size1 = item1.size;
- var min0x = item0.x, max0x = item0.x+size0;
- var min0y = item0.y, max0y = item0.y+size0;
- var min1x = item1.x, max1x = item1.x+size1;
- var min1y = item1.y, max1y = item1.y+size1;
- if (item0.child.length > 0) {
- min0x -= size0;
- max0x += size0;
- min0y -= size0;
- max0y += size0;
- }
- if (item1.child.length > 0) {
- min1x -= size1;
- max1x += size1;
- min1y -= size1;
- max1y += size1;
- }
- if (!(max0x < min1x || min0x > max1x || min0y > max1y || max0y < min1y)) {
- if (item0.locked) {
- collisions.push(item1);
- } else {
- collisions.push(item0);
- }
- }
- }
- }
- return collisions;
- },
-
- // Move items to avoid collisions
- solveCollisions: function(collisions, items) {
- var stillCollide = true;
- var canvas_center = util.getCanvasCenter();
- for(var i = 0 ; stillCollide && i < constant.maxCollisionTry ; i++) {
- // Move all item with collision
- for(var j = 0 ; j < collisions.length ; j++) {
- // Move item
- var current = collisions[j];
- var hasChild = (current.child.length > 0) ? 1 : 0;
- current.x = current.size*hasChild + Math.floor(Math.random()*(canvas_center.dx-current.size-2*hasChild*current.size));
- current.y = current.size*hasChild + Math.floor(Math.random()*(canvas_center.dy-current.size-2*hasChild*current.size));
-
- // Move childs
- var childLen = current.child.length;
- for (var k = 0 ; k < childLen ; k++) {
- var child = current.child[k];
- var angle = (2.0*Math.PI)/childLen * k;
- child.x = current.x + current.size * Math.sin(angle);
- child.y = current.y - current.size * Math.cos(angle);
- }
- }
-
- // Detect again
- collisions = this.detectCollisions(items);
- stillCollide = (collisions.length > 0);
- }
- },
-
- // Filter network items
- filterNetwork: function() {
- var filter = (this.toolbar && !this.eeMode) ? this.toolbar.getSearchText().toLowerCase() : '';
- enyo.forEach(this.$.network.getControls(), function(item) {
- item.setDisabled(filter.length != 0 && item.data && item.data.name && item.data.name.toLowerCase().indexOf(filter) == -1);
- });
- this.$.server.setDisabled(filter.length != 0 && myserver.getServer().toLowerCase().indexOf(filter) == -1);
- },
-
- // Cache handling
- addToCache: function(item) {
- // Get name
- var data = item.icon.getData();
- var name;
- if (!data) {
- name = "server";
- } else if (data.networkId) {
- name = data.networkId;
- } else if (data.shared && data.shared.id) {
- name = data.shared.id;
- }
-
- // Add to cache
- var len = networkItemsCache;
- var found = false;
- for(var i = 0 ; i < len ; i++) {
- var networkItem = networkItemsCache[i];
- if (networkItem.name == name) {
- networkItem.x = x;
- networkItem.y = y;
- found = true;
- }
- }
- if (!found) {
- networkItemsCache.push({name: name, x: item.x, y: item.y, colorvalue: item.icon.getColorizedColor()});
- }
- },
-
- findInCache: function(item) {
- // Get name
- var data = item.icon.getData();
- var name;
- if (!data) {
- name = "server";
- } else if (data.networkId) {
- name = data.networkId;
- } else if (data.shared && data.shared.id) {
- name = data.shared.id;
- }
-
- // Return to cache
- var len = networkItemsCache.length;
- var found = false;
- for(var i = 0 ; i < len ; i++) {
- var networkItem = networkItemsCache[i];
- if (networkItem.name == name) {
- return networkItem;
- }
- }
- return null;
- },
- destroy: function() {
- this.inherited(arguments);
- clearTimeout(this.timer);
- }
- });
-
-
-
-
-
- // Class for neighborhood toolbar
- enyo.kind({
- name: "Sugar.NeighborhoodToolbar",
- kind: enyo.Control,
- components: [
- {name: "neighborsearch", kind: "Sugar.SearchField", onTextChanged: "filterNetwork", classes: "neighbor-filter-text"},
- {name: "helpbutton", kind: "Button", classes: "toolbutton help-button", title:"Help", ontap: "startTutorial"},
- {name: "radialbutton", kind: "Button", classes: "toolbutton view-desktop-button", title:"Home", title:"Home", ontap: "gotoDesktop"}
- ],
-
- // Constructor
- create: function() {
- this.inherited(arguments);
- this.localize();
- },
-
- rendered: function() {
- this.inherited(arguments);
- this.localize();
- },
-
- localize: function() {
- // Localize items
- this.$.neighborsearch.setPlaceholder(l10n.get("SearchNeighbor"));
- this.$.radialbutton.setNodeProperty("title", l10n.get("Home"));
- this.$.helpbutton.setNodeProperty("title", l10n.get("Tutorial"));
- },
-
- // Handle search text content
- getSearchText: function() {
- return this.$.neighborsearch.getText();
- },
-
- // Event handling
- gotoDesktop: function() {
- window.clearInterval(app.otherview.timer);
- util.vibrate();
- app.showView(constant.radialView);
- },
-
- filterNetwork: function() {
- app.otherview.filterNetwork();
- },
-
- startTutorial: function() {
- tutorial.setElement("radialbutton", this.$.radialbutton.getAttribute("id"));
- tutorial.setElement("neighborsearch", this.$.neighborsearch.getAttribute("id"));
- stats.trace(constant.viewNames[app.getView()], 'tutorial', 'start', null);
- tutorial.start();
- }
- });
|