APIs

Show:
  1. /**
  2. Config the UI of dimension props which include x, y, width, height and angle using spinner widgets
  3. @class DimensionProps
  4. @constructor
  5. @return {Object} instantiated DimensionProps
  6. **/
  7. define(['jquery', 'backbone', 'spinner'], function ($, Backbone, spinner) {
  8.  
  9. // Service name when lives inside Scene
  10. BB.SERVICES['DIMENSION_PROPS_SCENE'] = 'DimensionPropsScene';
  11.  
  12. // Service name when lives inside Screen layout editor
  13. BB.SERVICES['DIMENSION_PROPS_LAYOUT'] = 'DimensionPropsLayout';
  14.  
  15. var DimensionProps = BB.View.extend({
  16.  
  17. /**
  18. Init the ChannelList component and enable sortable channels UI via drag and drop operations.
  19. @method initialize
  20. **/
  21. initialize: function () {
  22. var self = this;
  23. self.m_cachedValues = {};
  24. self.m_showAngle = self.options.showAngle || false;
  25. self.m_showLock = self.options.showLock || false;
  26. self.m_hideSpinners = self.options.hideSpinners || false;
  27.  
  28. self.$el = $(Elements.TEMPLATE_DIMENSION_PROPS).clone();
  29. self.el = self.$el[0];
  30. $(self.options.appendTo).append(self.el).fadeIn();
  31. self.$el.show();
  32.  
  33. self._listenLockChange();
  34.  
  35. if (self.m_showAngle == false)
  36. $('.DimAngle', self.el).hide();
  37.  
  38. if (self.m_showLock == false)
  39. $('.lockPosition', self.el).hide();
  40.  
  41. if (self.m_hideSpinners)
  42. self._hideSpinners();
  43.  
  44. var currID = self.$el.attr('id');
  45. self.$el.attr('id', _.uniqueId(currID));
  46.  
  47. $('.spinnerDimWidth', self.$el).spinner({value: 0, min: 50, max: 9999, step: 1});
  48. $('.spinnerDimHeight', self.$el).spinner({value: 0, min: 50, max: 9999, step: 1});
  49. $('.spinner', self.$el).spinner({value: 0, min: -9999, max: 9999, step: 1});
  50.  
  51. var updateValues = _.debounce(function () {
  52. var values = self.getValues();
  53. if (_.isEqual(values, self.m_cachedValues))
  54. return;
  55.  
  56. if (values.w < 50) {
  57. values.w = 50;
  58. self.setValues(values);
  59. }
  60. if (values.h < 50) {
  61. values.h = 50;
  62. self.setValues(values);
  63. }
  64. $(self).trigger('changed');
  65. }, 50);
  66.  
  67. // update changes on icons up/down clicks
  68. $('.spinner', self.$el).on('mouseup', function (e) {
  69. if ($(e.target).prop("tagName") == 'INPUT')
  70. return;
  71. updateValues();
  72. });
  73.  
  74.  
  75. // update on mouse leaving input focus
  76. $('.spinner-input', self.$el).on('focusin', function () {
  77. self.m_cachedValues = self.getValues();
  78. $('.spinner-input', self.$el).one('mouseout', function () {
  79. $('.spinner-input', self.$el).blur();
  80. updateValues();
  81. });
  82. });
  83. },
  84.  
  85. /**
  86. Listen to changes in lock status
  87. @method _listenLockChange
  88. **/
  89. _listenLockChange: function () {
  90. var self = this;
  91. $(Elements.CLASS_LOCK_INPUT, self.$el).on('change', function (e) {
  92. BB.comBroker.fire(BB.EVENTS.LOCK_CHANGED, self, null, $(e.target).prop('checked'));
  93. });
  94. },
  95.  
  96. /**
  97. Listen to backbone events (maintain this)
  98. @method events
  99. events: {
  100. 'click .pushToTopButton': '_onPushToTopLayer',
  101. 'mouseout input': 'm_inputMouseOut'
  102. },
  103. **/
  104.  
  105. /**
  106. Send the selected division (viewer) to be top most
  107. @method _onPushToTopLayer
  108. _onPushToTopLayer: function (e) {
  109. log('push to top layer')
  110. },
  111. **/
  112.  
  113. /**
  114. Hide the numeric spinner buttons
  115. @method self.m_hideSpinners
  116. **/
  117. _hideSpinners: function(){
  118. var self = this;
  119. $('.spinner-buttons',self.$el).hide();
  120. },
  121.  
  122. /**
  123. Set the status of UI for lock status
  124. @method setLock
  125. @param {Boolean} i_status
  126. **/
  127. setLock: function(i_status){
  128. var self = this;
  129. $(Elements.CLASS_LOCK_INPUT, self.$el).prop('checked', i_status);
  130. },
  131.  
  132. /**
  133. Update the spinners UI with object literal values
  134. @method setValues
  135. @param {Object} i_values
  136. **/
  137. setValues: function (i_values, i_notifyChange) {
  138. var self = this;
  139. $('.spinnerDimWidth', self.$el).spinner('value', Math.round(i_values.w));
  140. $('.spinnerDimHeight', self.$el).spinner('value', Math.round(i_values.h));
  141. $('.spinnerDimLeft', self.$el).spinner('value', Math.round(i_values.x));
  142. $('.spinnerDimTop', self.$el).spinner('value', Math.round(i_values.y));
  143. if (self.m_showAngle)
  144. $('.spinnerDimAngle', self.$el).spinner('value', Math.round(i_values.a));
  145. if (i_notifyChange)
  146. $(self).trigger('changed');
  147. },
  148.  
  149. /**
  150. Update the spinners UI with object literal values
  151. @method getValues
  152. @return {Object} values
  153. **/
  154. getValues: function () {
  155. var self = this;
  156. var a = 0;
  157. var w = BB.lib.parseToFloatDouble($('.spinnerDimWidth', self.$el).spinner('value'));
  158. var h = BB.lib.parseToFloatDouble($('.spinnerDimHeight', self.$el).spinner('value'));
  159. var x = BB.lib.parseToFloatDouble($('.spinnerDimLeft', self.$el).spinner('value'));
  160. var y = BB.lib.parseToFloatDouble($('.spinnerDimTop', self.$el).spinner('value'));
  161.  
  162. if (self.m_showAngle)
  163. a = $('.spinnerDimAngle', self.$el).spinner('value');
  164.  
  165. return {
  166. x: x,
  167. y: y,
  168. w: w,
  169. h: h,
  170. a: a
  171. }
  172. }
  173. });
  174.  
  175. return DimensionProps;
  176.  
  177. });