SidebarView.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. * Copyright (C) 2011 Google Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are
  6. * met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. *
  11. * 2. Redistributions in binary form must reproduce the above
  12. * copyright notice, this list of conditions and the following disclaimer
  13. * in the documentation and/or other materials provided with the
  14. * distribution.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
  17. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  18. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  19. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
  20. * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  21. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. */
  28. /**
  29. * @constructor
  30. * @extends {WebInspector.SplitView}
  31. * @param {string=} sidebarPosition
  32. * @param {string=} sidebarWidthSettingName
  33. * @param {number=} defaultSidebarWidth
  34. * @param {number=} defaultSidebarHeight
  35. */
  36. WebInspector.SidebarView = function(sidebarPosition, sidebarWidthSettingName, defaultSidebarWidth, defaultSidebarHeight)
  37. {
  38. WebInspector.SplitView.call(this, true, sidebarWidthSettingName, defaultSidebarWidth, defaultSidebarHeight);
  39. this._minimumSidebarWidth = Preferences.minSidebarWidth;
  40. this._minimumMainWidthPercent = 50;
  41. this._minimumSidebarHeight = Preferences.minSidebarHeight;
  42. this._minimumMainHeightPercent = 50;
  43. this._sidebarPosition = sidebarPosition || WebInspector.SidebarView.SidebarPosition.Start;
  44. this.setSecondIsSidebar(this._sidebarPosition === WebInspector.SidebarView.SidebarPosition.End);
  45. }
  46. WebInspector.SidebarView.EventTypes = {
  47. Resized: "Resized"
  48. }
  49. /**
  50. * @enum {string}
  51. */
  52. WebInspector.SidebarView.SidebarPosition = {
  53. Start: "Start",
  54. End: "End"
  55. }
  56. WebInspector.SidebarView.prototype = {
  57. /**
  58. * @param {number} width
  59. */
  60. setMinimumSidebarWidth: function(width)
  61. {
  62. this._minimumSidebarWidth = width;
  63. },
  64. /**
  65. * @param {number} height
  66. */
  67. setMinimumSidebarHeight: function(height)
  68. {
  69. this._minimumSidebarHeight = height;
  70. },
  71. /**
  72. * @param {number} widthPercent
  73. */
  74. setMinimumMainWidthPercent: function(widthPercent)
  75. {
  76. this._minimumMainWidthPercent = widthPercent;
  77. },
  78. /**
  79. * @param {number} heightPercent
  80. */
  81. setMinimumMainHeightPercent: function(heightPercent)
  82. {
  83. this._minimumMainHeightPercent = heightPercent;
  84. },
  85. /**
  86. * @param {number} width
  87. */
  88. setSidebarWidth: function(width)
  89. {
  90. this.setSidebarSize(width);
  91. },
  92. /**
  93. * @return {number}
  94. */
  95. sidebarWidth: function()
  96. {
  97. return this.sidebarSize();
  98. },
  99. onResize: function()
  100. {
  101. WebInspector.SplitView.prototype.onResize.call(this);
  102. this.dispatchEventToListeners(WebInspector.SidebarView.EventTypes.Resized, this.sidebarWidth());
  103. },
  104. /**
  105. * @param {number} size
  106. */
  107. applyConstraints: function(size)
  108. {
  109. var minSidebarSize = this.isVertical() ? this._minimumSidebarWidth : this._minimumSidebarHeight;
  110. var minMainSizePercent = this.isVertical() ? this._minimumMainWidthPercent : this._minimumMainHeightPercent;
  111. return Number.constrain(size, minSidebarSize, this.totalSize() * (100 - minMainSizePercent) / 100);
  112. },
  113. hideMainElement: function()
  114. {
  115. if (this.isSidebarSecond())
  116. this.showOnlySecond();
  117. else
  118. this.showOnlyFirst();
  119. },
  120. showMainElement: function()
  121. {
  122. this.showBoth();
  123. },
  124. hideSidebarElement: function()
  125. {
  126. if (this.isSidebarSecond())
  127. this.showOnlyFirst();
  128. else
  129. this.showOnlySecond();
  130. },
  131. showSidebarElement: function()
  132. {
  133. this.showBoth();
  134. },
  135. /**
  136. * @return {Array.<Element>}
  137. */
  138. elementsToRestoreScrollPositionsFor: function()
  139. {
  140. return [ this.mainElement, this.sidebarElement ];
  141. },
  142. __proto__: WebInspector.SplitView.prototype
  143. }