Save/Load last hack index
[Hacks.git] / Main.js
diff --git a/Main.js b/Main.js
index 9a0a209..8f9789e 100644 (file)
--- a/Main.js
+++ b/Main.js
@@ -12,6 +12,9 @@ enyo.kind({
                                {name: "hacksListSelector", kind: "ListSelector", popupAlign: "left", onChange: "selectHack", style: "width: 200px"},
                                {kind: "Spacer"},
                                {name: "notice", className: "notice"}
+                       ]},
+                       {name: "noPrefsDialog", kind: "ModalDialog", caption: "No Preferences", components: [
+                               {kind: "Button", content: "Okay", onclick: "closeNoPrefsDialog"}
                        ]}
                ]},
                {name: "preferencesView", kind: "HackPreferences", onClose: "savePreferences"}
@@ -29,12 +32,14 @@ enyo.kind({
        ],
        create: function() {
                this.inherited(arguments);
-               /*
-               this.index = localStorage.getItem('hack.index');
-               if (!this.index)
+               try {
+                       this.index = localStorage.getItem('hack.index');
+                       if (!this.index)
+                               this.index = 0;
+               } catch(e) {
+                       enyo.log("Could not load last hack index");
                        this.index = 0;
-               */
-               this.index = 0;
+               }
                this.lastScrollPos = 0;
                this.$.hacksCarousel.setCenterView(this.getHack(this.index));
        },
@@ -68,23 +73,29 @@ enyo.kind({
        },
        openPreferences: function() {
                var view = this.$.hacksCarousel.fetchView('center');
-               view.stop();
 
                var meta = view.getPreferencesMetadata();
-               if (meta) {
+               if (meta.length) {
+                       view.stop();
                        var values = view.getPreferences();
                        this.$.preferencesView.load(this.hacksList[this.index].name, meta, values);
                        this.selectView(this.$.preferencesView);
                } else {
-                       alert("No prefs");
+                       this.$.noPrefsDialog.openAtCenter();
                }
        },
        savePreferences: function(inSender, prefs) {
-               enyo.log("Saving prefs: " + JSON.stringify(prefs));
-               this.back();
                var view = this.$.hacksCarousel.fetchView('center');
-               view.setPreferences(prefs);
-               view.start();
+               if (prefs == null) {
+                       enyo.log("Clearing prefs");
+                       view.resetPreferences(prefs);
+                       this.selectHack(this, this.index);
+               } else {
+                       enyo.log("Saving prefs: " + JSON.stringify(prefs));
+                       view.setPreferences(prefs);
+                       view.start();
+               }
+               this.back();
        },
        windowActivated: function() {
                this.startHack();
@@ -92,7 +103,7 @@ enyo.kind({
        windowDeactivated: function() {
                this.stopHack();
        },
-       selectHack: function(inSender, inValue, inOldValue) {
+       selectHack: function(inSender, inValue) {
                this.stopHack();
                this.index = inValue;
                this.lastScrollPos = 0;
@@ -108,7 +119,11 @@ enyo.kind({
                //enyo.log('starting view ' + view);
                if (view)
                        view.start();
-               //localStorage.setItem('hack.index', this.index);
+               try {
+                       localStorage.setItem('hack.index', this.index);
+               } catch(e) {
+                       enyo.log("Could not set hack index");
+               }
        },
        stopHack: function(direction) {
                var view = this.$.hacksCarousel.fetchView(direction || 'center');
@@ -172,5 +187,8 @@ enyo.kind({
        stopScroll: function(inSender) {
                this.lastScrollPos = this.$.hacksCarousel.scrollLeft;
                this.startHack();
+       },
+       closeNoPrefsDialog: function() {
+               this.$.noPrefsDialog.close();
        }
 });