Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var DetailsView = (function() { | 5 var DetailsView = (function() { |
| 6 'use strict'; | 6 'use strict'; |
| 7 | 7 |
| 8 // We inherit from VerticalSplitView. | 8 // We inherit from DivView. |
| 9 var superClass = VerticalSplitView; | 9 var superClass = DivView; |
| 10 | 10 |
| 11 /** | 11 /** |
| 12 * The DetailsView handles the tabbed view that displays either the "log" or | 12 * The DetailsView is displays the "log" view. This class keeps track of the |
|
eroman
2011/11/16 04:03:46
wording: "is displays" --> "displays".
mmenke
2011/11/16 18:39:35
Done.
| |
| 13 * "timeline" view. This class keeps track of what the current view is, and | 13 * selected SourceEntries, and repaints when they change. |
| 14 * invalidates the specific view each time the selected data has changed. | |
| 15 * | 14 * |
| 16 * @constructor | 15 * @constructor |
| 17 */ | 16 */ |
| 18 function DetailsView(tabHandlesContainerId, | 17 function DetailsView(boxId) { |
| 19 logTabId, | 18 superClass.call(this, boxId); |
| 20 timelineTabId, | 19 this.sourceEntries_ = []; |
| 21 logBoxId, | |
| 22 timelineBoxId) { | |
| 23 var tabSwitcher = new TabSwitcherView(); | |
| 24 | |
| 25 superClass.call(this, new DivView(tabHandlesContainerId), tabSwitcher); | |
| 26 | |
| 27 this.tabSwitcher_ = tabSwitcher; | |
| 28 | |
| 29 this.logView_ = new DetailsLogView(logBoxId); | |
| 30 this.timelineView_ = new DetailsTimelineView(timelineBoxId); | |
| 31 | |
| 32 this.tabSwitcher_.addTab(logTabId, this.logView_, true, true); | |
| 33 this.tabSwitcher_.addTab(timelineTabId, this.timelineView_, true, true); | |
| 34 | |
| 35 // Default to the log view. | |
| 36 this.tabSwitcher_.switchToTab(logTabId, null); | |
| 37 } | 20 } |
| 38 | 21 |
| 39 // The delay between updates to repaint. | 22 // The delay between updates to repaint. |
| 40 var REPAINT_TIMEOUT_MS = 50; | 23 var REPAINT_TIMEOUT_MS = 50; |
| 41 | 24 |
| 42 DetailsView.prototype = { | 25 DetailsView.prototype = { |
| 43 // Inherit the superclass's methods. | 26 // Inherit the superclass's methods. |
| 44 __proto__: superClass.prototype, | 27 __proto__: superClass.prototype, |
| 45 | 28 |
| 46 /** | 29 setData: function(sourceEntries) { |
| 47 * Updates the data this view is using. | |
| 48 */ | |
| 49 setData: function(currentData) { | |
| 50 // Make a copy of the array (in case the caller mutates it), and sort it | 30 // Make a copy of the array (in case the caller mutates it), and sort it |
| 51 // by the source ID. | 31 // by the source ID. |
| 52 var sortedCurrentData = createSortedCopy(currentData); | 32 this.sourceEntries_ = createSortedCopy(sourceEntries); |
| 53 | 33 |
| 54 // TODO(eroman): Should not access private members of TabSwitcherView. | 34 // Repaint the view. |
| 55 for (var i = 0; i < this.tabSwitcher_.tabs_.length; ++i) | 35 if (this.isVisible() && !this.outstandingRepaint_) { |
| 56 this.tabSwitcher_.tabs_[i].contentView.setData(sortedCurrentData); | 36 this.outstandingRepaint_ = true; |
| 37 window.setTimeout(this.repaint.bind(this), | |
| 38 REPAINT_TIMEOUT_MS); | |
| 39 } | |
| 40 }, | |
| 41 | |
| 42 repaint: function() { | |
| 43 this.outstandingRepaint_ = false; | |
| 44 this.getNode().innerHTML = ''; | |
| 45 PaintLogView(this.sourceEntries_, this.getNode()); | |
| 46 }, | |
| 47 | |
| 48 show: function(isVisible) { | |
| 49 superClass.prototype.show.call(this, isVisible); | |
| 50 if (isVisible) { | |
| 51 this.repaint(); | |
| 52 } else { | |
| 53 this.getNode().innerHTML = ''; | |
| 54 } | |
| 57 } | 55 } |
| 58 }; | 56 }; |
| 59 | 57 |
| 60 function createSortedCopy(origArray) { | 58 function createSortedCopy(origArray) { |
| 61 var sortedArray = origArray.slice(0); | 59 var sortedArray = origArray.slice(0); |
| 62 sortedArray.sort(function(a, b) { | 60 sortedArray.sort(function(a, b) { |
| 63 return a.getSourceId() - b.getSourceId(); | 61 return a.getSourceId() - b.getSourceId(); |
| 64 }); | 62 }); |
| 65 return sortedArray; | 63 return sortedArray; |
| 66 } | 64 } |
| 67 | 65 |
| 68 //--------------------------------------------------------------------------- | |
| 69 | |
| 70 var DetailsSubView = (function() { | |
| 71 // We inherit from DivView. | |
| 72 var superClass = DivView; | |
| 73 | |
| 74 /** | |
| 75 * Base class for the Log view and Timeline view. | |
| 76 * | |
| 77 * @constructor | |
| 78 */ | |
| 79 function DetailsSubView(boxId) { | |
| 80 superClass.call(this, boxId); | |
| 81 this.sourceEntries_ = []; | |
| 82 } | |
| 83 | |
| 84 DetailsSubView.prototype = { | |
| 85 // Inherit the superclass's methods. | |
| 86 __proto__: superClass.prototype, | |
| 87 | |
| 88 setData: function(sourceEntries) { | |
| 89 this.sourceEntries_ = sourceEntries; | |
| 90 | |
| 91 // Repaint the view. | |
| 92 if (this.isVisible() && !this.outstandingRepaint_) { | |
| 93 this.outstandingRepaint_ = true; | |
| 94 window.setTimeout(this.repaint.bind(this), | |
| 95 REPAINT_TIMEOUT_MS); | |
| 96 } | |
| 97 }, | |
| 98 | |
| 99 repaint: function() { | |
| 100 this.outstandingRepaint_ = false; | |
| 101 this.getNode().innerHTML = ''; | |
| 102 }, | |
| 103 | |
| 104 show: function(isVisible) { | |
| 105 superClass.prototype.show.call(this, isVisible); | |
| 106 if (isVisible) { | |
| 107 this.repaint(); | |
| 108 } else { | |
| 109 this.getNode().innerHTML = ''; | |
| 110 } | |
| 111 } | |
| 112 }; | |
| 113 | |
| 114 return DetailsSubView; | |
| 115 })(); | |
| 116 | |
| 117 //--------------------------------------------------------------------------- | |
| 118 | |
| 119 var DetailsLogView = (function() { | |
| 120 // We inherit from DetailsSubView. | |
| 121 var superClass = DetailsSubView; | |
| 122 | |
| 123 /** | |
| 124 * Subview that is displayed in the log tab. | |
| 125 * @constructor | |
| 126 */ | |
| 127 function DetailsLogView(boxId) { | |
| 128 superClass.call(this, boxId); | |
| 129 } | |
| 130 | |
| 131 DetailsLogView.prototype = { | |
| 132 // Inherit the superclass's methods. | |
| 133 __proto__: superClass.prototype, | |
| 134 | |
| 135 repaint: function() { | |
| 136 superClass.prototype.repaint.call(this); | |
| 137 PaintLogView(this.sourceEntries_, this.getNode()); | |
| 138 } | |
| 139 }; | |
| 140 | |
| 141 return DetailsLogView; | |
| 142 })(); | |
| 143 | |
| 144 //--------------------------------------------------------------------------- | |
| 145 | |
| 146 var DetailsTimelineView = (function() { | |
| 147 // We inherit from DetailsSubView. | |
| 148 var superClass = DetailsSubView; | |
| 149 | |
| 150 /** | |
| 151 * Subview that is displayed in the timeline tab. | |
| 152 * @constructor | |
| 153 */ | |
| 154 function DetailsTimelineView(boxId) { | |
| 155 superClass.call(this, boxId); | |
| 156 } | |
| 157 | |
| 158 DetailsTimelineView.prototype = { | |
| 159 // Inherit the superclass's methods. | |
| 160 __proto__: superClass.prototype, | |
| 161 | |
| 162 repaint: function() { | |
| 163 superClass.prototype.repaint.call(this); | |
| 164 PaintTimelineView(this.sourceEntries_, this.getNode()); | |
| 165 } | |
| 166 }; | |
| 167 | |
| 168 return DetailsTimelineView; | |
| 169 })(); | |
| 170 | |
| 171 return DetailsView; | 66 return DetailsView; |
| 172 })(); | 67 })(); |
| OLD | NEW |