text: // Copyright (c) 2013 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  'use strict';
  
  /**
   * @fileoverview A text widget for monitoring ValueBar value and previewValue.
   */
  base.require('ui');
  base.require('base.properties');
  base.require('ui.mouse_tracker');
  
  base.exportTo('ui', function() {
  
    /**
     * @constructor
     */
    var ValueDisplay = ui.define('value-display');
  
    ValueDisplay.prototype = {
      __proto__: HTMLDivElement.prototype,
  
      decorate: function() {
        this.className = 'value-display';
        this.currentValueDisplay_ = ui.createDiv({
          className: 'value-value',
          parent: this
        });
        this.previewValueDisplay_ = ui.createDiv({
          className: 'value-set-to',
          parent: this
        });
        this.setValueText_ = this.setValueText_.bind(this);
        this.setPreviewValueText_ = this.setPreviewValueText_.bind(this);
      },
  
      get valueBar() {
        return this.valueBar_;
      },
  
      set valueBar(newValue) {
        if (this.valueBar_)
          this.detach_();
        this.valueBar_ = newValue;
        if (this.valueBar_)
          this.attach_();
      },
  
      attach_: function() {
        this.valueBar_.addEventListener('valueChange',
            this.setValueText_);
        this.valueBar_.addEventListener('previewValueChange',
            this.setPreviewValueText_);
      },
  
      dettach_: function() {
        this.valueBar_.removeEventListener('valueChange',
            this.setValueText_);
        this.valueBar_.removeEventListener('previewValueChange',
            this.setPreviewValueText_);
      },
  
      setValueText_: function(event) {
        if (typeof event.newValue === undefined)
          return;
        this.currentValueDisplay_.textContent = event.newValue.toFixed(2);
        this.setPreviewValueText_(event);
      },
  
      setPreviewValueText_: function(event) {
        this.previewValueDisplay_.textContent =
            ' (\u2192 ' + event.newValue.toFixed(2) + ')';
      }
  
    };
  
    return {
      ValueDisplay: ValueDisplay
    };
  });
  