15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base class to represent a "view". A view is an absolutely positioned box on
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the page.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var View = (function() {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function View() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isVisible_ = true;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View.prototype = {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called to reposition the view on the page. Measurements are in pixels.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setGeometry: function(left, top, width, height) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.left_ = left;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.top_ = top;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.width_ = width;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.height_ = height;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called to show/hide the view.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show: function(isVisible) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isVisible_ = isVisible;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isVisible: function() {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.isVisible_;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Method of the observer class.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called to check if an observer needs the data it is
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * observing to be actively updated.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isActive: function() {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.isVisible();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getLeft: function() {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.left_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getTop: function() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.top_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getWidth: function() {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.width_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getHeight: function() {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.height_;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getRight: function() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.getLeft() + this.getWidth();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getBottom: function() {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.getTop() + this.getHeight();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setParameters: function(params) {},
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called when loading a log file, after clearing all events, but before
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * loading the new ones.  |polledData| contains the data from all
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * PollableData helpers.  |tabData| contains the data for the particular
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * tab.  |logDump| is the entire log dump, which includes the other two
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * values.  It's included separately so most views don't have to depend on
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * its specifics.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onLoadLogStart: function(polledData, tabData, logDump) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called as the final step of loading a log file.  Arguments are the same
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * as onLoadLogStart.  Returns true to indicate the tab should be shown,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * false otherwise.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onLoadLogFinish: function(polledData, tabData, logDump) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return View;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DivView is an implementation of View that wraps a DIV.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var DivView = (function() {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from View.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = View;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function DivView(divId) {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.node_ = $(divId);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!this.node_)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      throw new Error('Element ' + divId + ' not found');
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Initialize the default values to those of the DIV.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.width_ = this.node_.offsetWidth;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.height_ = this.node_.offsetHeight;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isVisible_ = this.node_.style.display != 'none';
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DivView.prototype = {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setGeometry: function(left, top, width, height) {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.setGeometry.call(this, left, top, width, height);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.node_.style.position = 'absolute';
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setNodePosition(this.node_, left, top, width, height);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show: function(isVisible) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.show.call(this, isVisible);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setNodeDisplay(this.node_, isVisible);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns the wrapped DIV
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getNode: function() {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.node_;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return DivView;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implementation of View that sizes its child to fit the entire window.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!View} childView The child view.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var WindowView = (function() {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from View.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = View;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function WindowView(childView) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.childView_ = childView;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    window.addEventListener('resize', this.resetGeometry.bind(this), true);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowView.prototype = {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setGeometry: function(left, top, width, height) {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.setGeometry.call(this, left, top, width, height);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.childView_.setGeometry(left, top, width, height);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show: function() {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.show.call(this, isVisible);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.childView_.show(isVisible);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resetGeometry: function() {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setGeometry(0, 0, window.innerWidth, window.innerHeight);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return WindowView;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * View that positions two views vertically. The top view should be
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fixed-height, and the bottom view will fill the remainder of the space.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  +-----------------------------------+
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |            topView                |
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  +-----------------------------------+
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          bottomView               |
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |                                   |
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  +-----------------------------------+
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var VerticalSplitView = (function() {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from View.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = View;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {!View} topView The top view.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {!View} bottomView The bottom view.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function VerticalSplitView(topView, bottomView) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.topView_ = topView;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.bottomView_ = bottomView;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VerticalSplitView.prototype = {
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setGeometry: function(left, top, width, height) {
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.setGeometry.call(this, left, top, width, height);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var fixedHeight = this.topView_.getHeight();
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.topView_.setGeometry(left, top, width, fixedHeight);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.bottomView_.setGeometry(
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          left, top + fixedHeight, width, height - fixedHeight);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show: function(isVisible) {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.show.call(this, isVisible);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.topView_.show(isVisible);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.bottomView_.show(isVisible);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return VerticalSplitView;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * View that positions two views horizontally. The left view should be
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fixed-width, and the right view will fill the remainder of the space.
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  +----------+--------------------------+
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  | leftView |       rightView          |
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  |          |                          |
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *  +----------+--------------------------+
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var HorizontalSplitView = (function() {
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from View.
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = View;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {!View} leftView The left view.
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {!View} rightView The right view.
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function HorizontalSplitView(leftView, rightView) {
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this);
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.leftView_ = leftView;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.rightView_ = rightView;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HorizontalSplitView.prototype = {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setGeometry: function(left, top, width, height) {
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.setGeometry.call(this, left, top, width, height);
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var fixedWidth = this.leftView_.getWidth();
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.leftView_.setGeometry(left, top, fixedWidth, height);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.rightView_.setGeometry(
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          left + fixedWidth, top, width - fixedWidth, height);
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show: function(isVisible) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      superClass.prototype.show.call(this, isVisible);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.leftView_.show(isVisible);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.rightView_.show(isVisible);
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return HorizontalSplitView;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
325