/**
Config the UI of dimension props which include x, y, width, height and angle using spinner widgets
@class DimensionProps
@constructor
@return {Object} instantiated DimensionProps
**/
define(['jquery', 'backbone', 'spinner'], function ($, Backbone, spinner) {
// Service name when lives inside Scene
BB.SERVICES['DIMENSION_PROPS_SCENE'] = 'DimensionPropsScene';
// Service name when lives inside Screen layout editor
BB.SERVICES['DIMENSION_PROPS_LAYOUT'] = 'DimensionPropsLayout';
var DimensionProps = BB.View.extend({
/**
Init the ChannelList component and enable sortable channels UI via drag and drop operations.
@method initialize
**/
initialize: function () {
var self = this;
self.m_cachedValues = {};
self.m_showAngle = self.options.showAngle || false;
self.m_showLock = self.options.showLock || false;
self.m_hideSpinners = self.options.hideSpinners || false;
self.$el = $(Elements.TEMPLATE_DIMENSION_PROPS).clone();
self.el = self.$el[0];
$(self.options.appendTo).append(self.el).fadeIn();
self.$el.show();
self._listenLockChange();
if (self.m_showAngle == false)
$('.DimAngle', self.el).hide();
if (self.m_showLock == false)
$('.lockPosition', self.el).hide();
if (self.m_hideSpinners)
self._hideSpinners();
var currID = self.$el.attr('id');
self.$el.attr('id', _.uniqueId(currID));
$('.spinnerDimWidth', self.$el).spinner({value: 0, min: 50, max: 9999, step: 1});
$('.spinnerDimHeight', self.$el).spinner({value: 0, min: 50, max: 9999, step: 1});
$('.spinner', self.$el).spinner({value: 0, min: -9999, max: 9999, step: 1});
var updateValues = _.debounce(function () {
var values = self.getValues();
if (_.isEqual(values, self.m_cachedValues))
return;
if (values.w < 50) {
values.w = 50;
self.setValues(values);
}
if (values.h < 50) {
values.h = 50;
self.setValues(values);
}
$(self).trigger('changed');
}, 50);
// update changes on icons up/down clicks
$('.spinner', self.$el).on('mouseup', function (e) {
if ($(e.target).prop("tagName") == 'INPUT')
return;
updateValues();
});
// update on mouse leaving input focus
$('.spinner-input', self.$el).on('focusin', function () {
self.m_cachedValues = self.getValues();
$('.spinner-input', self.$el).one('mouseout', function () {
$('.spinner-input', self.$el).blur();
updateValues();
});
});
},
/**
Listen to changes in lock status
@method _listenLockChange
**/
_listenLockChange: function () {
var self = this;
$(Elements.CLASS_LOCK_INPUT, self.$el).on('change', function (e) {
BB.comBroker.fire(BB.EVENTS.LOCK_CHANGED, self, null, $(e.target).prop('checked'));
});
},
/**
Listen to backbone events (maintain this)
@method events
events: {
'click .pushToTopButton': '_onPushToTopLayer',
'mouseout input': 'm_inputMouseOut'
},
**/
/**
Send the selected division (viewer) to be top most
@method _onPushToTopLayer
_onPushToTopLayer: function (e) {
log('push to top layer')
},
**/
/**
Hide the numeric spinner buttons
@method self.m_hideSpinners
**/
_hideSpinners: function(){
var self = this;
$('.spinner-buttons',self.$el).hide();
},
/**
Set the status of UI for lock status
@method setLock
@param {Boolean} i_status
**/
setLock: function(i_status){
var self = this;
$(Elements.CLASS_LOCK_INPUT, self.$el).prop('checked', i_status);
},
/**
Update the spinners UI with object literal values
@method setValues
@param {Object} i_values
**/
setValues: function (i_values, i_notifyChange) {
var self = this;
$('.spinnerDimWidth', self.$el).spinner('value', Math.round(i_values.w));
$('.spinnerDimHeight', self.$el).spinner('value', Math.round(i_values.h));
$('.spinnerDimLeft', self.$el).spinner('value', Math.round(i_values.x));
$('.spinnerDimTop', self.$el).spinner('value', Math.round(i_values.y));
if (self.m_showAngle)
$('.spinnerDimAngle', self.$el).spinner('value', Math.round(i_values.a));
if (i_notifyChange)
$(self).trigger('changed');
},
/**
Update the spinners UI with object literal values
@method getValues
@return {Object} values
**/
getValues: function () {
var self = this;
var a = 0;
var w = BB.lib.parseToFloatDouble($('.spinnerDimWidth', self.$el).spinner('value'));
var h = BB.lib.parseToFloatDouble($('.spinnerDimHeight', self.$el).spinner('value'));
var x = BB.lib.parseToFloatDouble($('.spinnerDimLeft', self.$el).spinner('value'));
var y = BB.lib.parseToFloatDouble($('.spinnerDimTop', self.$el).spinner('value'));
if (self.m_showAngle)
a = $('.spinnerDimAngle', self.$el).spinner('value');
return {
x: x,
y: y,
w: w,
h: h,
a: a
}
}
});
return DimensionProps;
});