* New concept of saved states. Modules will be called before enter to restore a saved state (if applicable) and before leave to save one.

This commit is contained in:
Bryan Ashby 2015-09-17 23:11:21 -06:00
parent 9865da34cc
commit 1b46506cf8
3 changed files with 38 additions and 1 deletions

View File

@ -394,9 +394,13 @@ function Client(input, output) {
self.detachCurrentMenuModule = function() { self.detachCurrentMenuModule = function() {
if(self.currentMenuModule) { if(self.currentMenuModule) {
var savedState = self.currentMenuModule.getSaveState();
self.currentMenuModule.leave(); self.currentMenuModule.leave();
self.lastMenuModuleInfo = self.currentMenuModuleInfo; self.lastMenuModuleInfo = self.currentMenuModuleInfo;
self.lastMenuModuleInfo.savedState = savedState;
self.currentMenuModule = null; self.currentMenuModule = null;
} }
@ -463,6 +467,10 @@ Client.prototype.gotoMenuModule = function(options, cb) {
extraArgs : options.extraArgs, extraArgs : options.extraArgs,
} }
if(options.savedState) {
modInst.restoreSavedState(options.savedState);
}
modInst.enter(self); modInst.enter(self);
if(!callbackOnErrorOnly) { if(!callbackOnErrorOnly) {
@ -479,6 +487,7 @@ Client.prototype.fallbackMenuModule = function(cb) {
var modOpts = { var modOpts = {
name : self.lastMenuModuleInfo.menuName, name : self.lastMenuModuleInfo.menuName,
extraArgs : self.lastMenuModuleInfo.extraArgs, extraArgs : self.lastMenuModuleInfo.extraArgs,
savedState : self.lastMenuModuleInfo.savedState,
}; };
self.gotoMenuModule(modOpts, cb); self.gotoMenuModule(modOpts, cb);

View File

@ -185,6 +185,7 @@ require('util').inherits(MenuModule, PluginModule);
require('./mod_mixins.js').ViewControllerManagement.call(MenuModule.prototype); require('./mod_mixins.js').ViewControllerManagement.call(MenuModule.prototype);
MenuModule.prototype.enter = function(client) { MenuModule.prototype.enter = function(client) {
this.client = client; this.client = client;
assert(_.isObject(client)); assert(_.isObject(client));
@ -198,6 +199,14 @@ MenuModule.prototype.enter = function(client) {
this.initSequence(); this.initSequence();
}; };
MenuModule.prototype.getSaveState = function() {
// nothing in base
};
MenuModule.prototype.restoreSavedState = function(savedState) {
// nothing in base
};
MenuModule.prototype.leave = function() { MenuModule.prototype.leave = function() {
this.detachViewControllers(); this.detachViewControllers();
}; };

View File

@ -55,6 +55,7 @@ function AreaViewFSEModule(options) {
this.menuMethods.movementKeyPressed = function(formData, extraArgs) { this.menuMethods.movementKeyPressed = function(formData, extraArgs) {
var bodyView = self.viewControllers.body.getView(1); var bodyView = self.viewControllers.body.getView(1);
// :TODO: Create methods for up/down vs using keyPressXXXXX
switch(formData.key.name) { switch(formData.key.name) {
case 'down arrow' : bodyView.scrollDocumentUp(); break; case 'down arrow' : bodyView.scrollDocumentUp(); break;
case 'up arrow' : bodyView.scrollDocumentDown(); break; case 'up arrow' : bodyView.scrollDocumentDown(); break;
@ -94,3 +95,21 @@ AreaViewFSEModule.prototype.finishedLoading = function() {
this.loadMessageByUuid(this.messageList[this.messageIndex].messageUuid); this.loadMessageByUuid(this.messageList[this.messageIndex].messageUuid);
} }
}; };
AreaViewFSEModule.prototype.getSaveState = function() {
AreaViewFSEModule.super_.prototype.getSaveState.call(this);
return {
messageList : this.messageList,
messageIndex : this.messageIndex,
messageTotal : this.messageList.length,
}
};
AreaViewFSEModule.prototype.restoreSavedState = function(savedState) {
AreaViewFSEModule.super_.prototype.restoreSavedState.call(this, savedState);
this.messageList = savedState.messageList;
this.messageIndex = savedState.messageIndex;
this.messageTotal = savedState.messageTotal;
};