diff --git a/core/menu_view.js b/core/menu_view.js index 21a47dbe..db6c641a 100644 --- a/core/menu_view.js +++ b/core/menu_view.js @@ -32,8 +32,7 @@ function MenuView(options) { this.focusedItemIndex = options.focusedItemIndex || 0; this.focusedItemIndex = this.items.length >= this.focusedItemIndex ? this.focusedItemIndex : 0; - this.itemSpacing = options.itemSpacing || 1; - this.itemSpacing = parseInt(this.itemSpacing, 10); + this.itemSpacing = _.isNumber(options.itemSpacing) ? options.itemSpacing : 0; this.focusPrefix = options.focusPrefix || ''; this.focusSuffix = options.focusSuffix || ''; @@ -105,6 +104,13 @@ MenuView.prototype.setItems = function(items) { } }; +MenuView.prototype.setItemSpacing = function(itemSpacing) { + assert(_.isNumber(itemSpacing)); + + this.itemSpacing = itemSpacing; + this.positionCacheExpired = true; +}; + MenuView.prototype.setHotKeys = function(hotKeys) { if(_.isObject(hotKeys)) { if(this.caseInsensitiveHotKeys) { diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index 924f2749..10c6b486 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -4,6 +4,8 @@ var MenuView = require('./menu_view.js').MenuView; var ansi = require('./ansi_term.js'); var strUtil = require('./string_util.js'); +var miscUtil = require('./misc_util.js'); + var util = require('util'); var assert = require('assert'); @@ -16,8 +18,6 @@ function VerticalMenuView(options) { var self = this; - this.itemSpacing = 3; // :TODO: bring from options/configurable - this.calculateDimens = function() { if(!self.dimens || !self.dimens.width) { var l = 0; @@ -31,7 +31,7 @@ function VerticalMenuView(options) { } if(this.items.length > 0) { - this.dimens.height = (self.items.length * self.itemSpacing) - (self.itemSpacing - 1); + this.dimens.height = (self.items.length * (self.itemSpacing + 1)) - (self.itemSpacing); } else { this.dimens.height = 0; } @@ -45,7 +45,7 @@ function VerticalMenuView(options) { var x = self.position.x; for(var i = 0; i < count; ++i) { if(i > 0) { - x += self.itemSpacing; + x += self.itemSpacing + 1; } self.items[i].xPosition = x; diff --git a/core/view_controller.js b/core/view_controller.js index 24f5c026..9b44a8c6 100644 --- a/core/view_controller.js +++ b/core/view_controller.js @@ -178,9 +178,13 @@ function ViewController(options) { } setViewProp('items', function(v) { view.setItems(v); }); + setViewProp('itemSpacing', function(v) { view.setItemSpacing(v); }); + setViewProp('text', function(v) { view.setText(v); }); setViewProp('textStyle'); setViewProp('focusTextStyle'); + setViewProp('textMaskChar', function(v) { view.textMaskChar = v.substr(0, 1); }); + setViewProp('maxLength'); setViewProp('width', function(v) { view.dimens.width = parseInt(v, 10); }); @@ -208,7 +212,7 @@ function ViewController(options) { } }); - setViewProp('textMaskChar', function(v) { view.textMaskChar = v.substr(0, 1); }); + setViewProp('hotKeys', function(v) { view.setHotKeys(v); }); setViewProp('submit', function(v) { diff --git a/mods/menu.json b/mods/menu.json index c4c24ee0..517f1cee 100644 --- a/mods/menu.json +++ b/mods/menu.json @@ -230,6 +230,7 @@ "Art Display", "Other" ], + "itemSpacing" : 1, // :TODO: justify not working?? "focusTextStyle" : "small i" }