1 // ==========================================================================
  2 // Project:   SproutCore - JavaScript Application Framework
  3 // Copyright: ©2006-2011 Strobe Inc. and contributors.
  4 //            Portions ©2008-2011 Apple Inc. All rights reserved.
  5 // License:   Licensed under MIT license (see license.js)
  6 // ==========================================================================
  7 
  8 sc_require('render_delegates/panel');
  9 
 10 SC.BaseTheme.pickerRenderDelegate = SC.RenderDelegate.create({
 11   className: 'picker',
 12 
 13   render: function (dataSource, context) {
 14     var panelRenderDelegate = dataSource.get('theme').panelRenderDelegate;
 15 
 16     panelRenderDelegate.render(dataSource, context);
 17 
 18     var preferType = dataSource.get('preferType'),
 19       pointerPosition = dataSource.get('pointerPos');
 20 
 21     if (preferType == SC.PICKER_POINTER || preferType == SC.PICKER_MENU_POINTER) {
 22       context.push('<div class="sc-pointer ' + pointerPosition + '"></div>');
 23       context.addClass(pointerPosition);
 24 
 25       // Track the last pointerPosition used so that we can remove it when it changes.
 26       dataSource.renderState._lastPointerPosition = pointerPosition;
 27     }
 28   },
 29 
 30   update: function (dataSource, $) {
 31     var panelRenderDelegate = dataSource.get('theme').panelRenderDelegate;
 32 
 33     panelRenderDelegate.update(dataSource, $);
 34 
 35     var preferType = dataSource.get('preferType'),
 36       pointerPosition = dataSource.get('pointerPos');
 37 
 38     if (preferType == SC.PICKER_POINTER || preferType == SC.PICKER_MENU_POINTER) {
 39       var lastPointerPosition = dataSource.renderState._lastPointerPosition;
 40 
 41       if (lastPointerPosition !== pointerPosition) {
 42         var el = $.find('.sc-pointer');
 43 
 44         // Totally overwrite the pointer class.
 45         el.attr('class', "sc-pointer " + pointerPosition);
 46 
 47         // Update the view layer class
 48         $.removeClass(lastPointerPosition);
 49         $.addClass(pointerPosition);
 50 
 51         // Track the last pointerPosition used so that we can remove it when it changes.
 52         dataSource.renderState._lastPointerPosition = pointerPosition;
 53       }
 54     }
 55 
 56   }
 57 });
 58