1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5var TopMidBottomView = (function() { 6 'use strict'; 7 8 // We inherit from View. 9 var superClass = View; 10 11 /** 12 * This view stacks three boxes -- one at the top, one at the bottom, and 13 * one that fills the remaining space between those two. Either the top 14 * or the bottom bar may be null. 15 * 16 * +----------------------+ 17 * | topbar | 18 * +----------------------+ 19 * | | 20 * | | 21 * | | 22 * | | 23 * | middlebox | 24 * | | 25 * | | 26 * | | 27 * | | 28 * | | 29 * +----------------------+ 30 * | bottombar | 31 * +----------------------+ 32 * 33 * @constructor 34 */ 35 function TopMidBottomView(topView, midView, bottomView) { 36 superClass.call(this); 37 38 this.topView_ = topView; 39 this.midView_ = midView; 40 this.bottomView_ = bottomView; 41 } 42 43 TopMidBottomView.prototype = { 44 // Inherit the superclass's methods. 45 __proto__: superClass.prototype, 46 47 setGeometry: function(left, top, width, height) { 48 superClass.prototype.setGeometry.call(this, left, top, width, height); 49 50 // Calculate the vertical split points. 51 var topbarHeight = 0; 52 if (this.topView_) 53 topbarHeight = this.topView_.getHeight(); 54 var bottombarHeight = 0; 55 if (this.bottomView_) 56 bottombarHeight = this.bottomView_.getHeight(); 57 var middleboxHeight = height - (topbarHeight + bottombarHeight); 58 if (middleboxHeight < 0) 59 middleboxHeight = 0; 60 61 // Position the boxes using calculated split points. 62 if (this.topView_) 63 this.topView_.setGeometry(left, top, width, topbarHeight); 64 this.midView_.setGeometry(left, top + topbarHeight, width, 65 middleboxHeight); 66 if (this.bottomView_) { 67 this.bottomView_.setGeometry(left, top + topbarHeight + middleboxHeight, 68 width, bottombarHeight); 69 } 70 }, 71 72 show: function(isVisible) { 73 superClass.prototype.show.call(this, isVisible); 74 if (this.topView_) 75 this.topView_.show(isVisible); 76 this.midView_.show(isVisible); 77 if (this.bottomView_) 78 this.bottomView_.show(isVisible); 79 } 80 }; 81 82 return TopMidBottomView; 83})(); 84