// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġgit 4 idea . index Ċ Ċ import Ġjava . awt .* Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠPut Ġtwo Ġscroll able Ġpanels Ġin Ġa Ġvertical Ġstack . Ċ Ġ* ĠIf Ġboth Ġpanels Ġpreferred Ġheight Ġis Ġbigger Ġthan Ġ` panel . size Ġ/ Ġ 2 `, Ġgive Ġthem Ġboth Ġequal Ġheight . Ċ Ġ*/ Ċ internal Ġclass ĠStage Popup Vertical Layout Ġ: ĠLayout Manager Ġ{ ĊĠ Ġoverride Ġfun Ġadd Layout Component ( name : ĠString ?, Ġcomp : ĠComponent ) Ġ= ĠUnit ĊĠ Ġoverride Ġfun Ġremove Layout Component ( comp : ĠComponent ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġpreferred Layout Size ( parent : ĠContainer ): ĠDimension Ġ= Ġcompute Layout Size ( parent ) Ġ{ Ġit . preferred Size Ġ} ĊĠ Ġoverride Ġfun Ġminimum Layout Size ( parent : ĠContainer ): ĠDimension Ġ= Ġcompute Layout Size ( parent ) Ġ{ Ġit . minimum Size Ġ} ĊĊĠ Ġprivate Ġfun Ġcompute Layout Size ( parent : ĠContainer , Ġsize Fun : Ġ( Component ) Ġ-> ĠDimension ): ĠDimension Ġ{ ĊĠĠĠ Ġvar Ġwidth Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġheight Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( component Ġin Ġparent . components ) Ġ{ ĊĠĠĠĠĠ Ġval Ġsize Ġ= Ġsize Fun ( component ) ĊĠĠĠĠĠ Ġwidth Ġ= Ġmax ( width , Ġsize . width ) ĊĠĠĠĠĠ Ġheight Ġ+= Ġsize . height ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠDimension ( width , Ġheight ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlayout Container ( parent : ĠContainer ) Ġ{ ĊĠĠĠ Ġassert ( parent . component Count Ġ== Ġ 2 ) ĊĠĠĠ Ġval Ġsize Ġ= Ġparent . size ĊĠĠĠ Ġval Ġpanel 1 Ġ= Ġparent . getComponent ( 0 ) ĊĠĠĠ Ġval Ġpanel 2 Ġ= Ġparent . getComponent ( 1 ) ĊĊĠĠĠ Ġval Ġheight Ġ= Ġsize . height ĊĠĠĠ Ġval Ġpref Height 1 Ġ= Ġpanel 1 . preferred Size . height ĊĠĠĠ Ġval Ġpref Height 2 Ġ= Ġpanel 2 . preferred Size . height ĊĊĠĠĠ Ġval Ġheight 1 : ĠInt ĊĠĠĠ Ġval Ġheight 2 : ĠInt ĊĊĠĠĠ Ġval Ġis Big 1 Ġ= Ġpref Height 1 Ġ> Ġheight Ġ/ Ġ 2 ĊĠĠĠ Ġval Ġis Big 2 Ġ= Ġpref Height 2 Ġ> Ġheight Ġ/ Ġ 2 ĊĠĠĠ Ġif Ġ( is Big 1 Ġ&& Ġis Big 2 ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġsplit Ġpanel Ġin Ġhalf ĊĠĠĠĠĠ Ġheight 1 Ġ= Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠ Ġheight 2 Ġ= Ġheight Ġ- Ġheight 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( is Big 1 ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġscrollbar Ġfor Ġpanel 1 ĊĠĠĠĠĠ Ġheight 2 Ġ= Ġpref Height 2 ĊĠĠĠĠĠ Ġheight 1 Ġ= Ġheight Ġ- Ġheight 2 ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( is Big 2 ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġscrollbar Ġfor Ġpanel 2 ĊĠĠĠĠĠ Ġheight 1 Ġ= Ġpref Height 1 ĊĠĠĠĠĠ Ġheight 2 Ġ= Ġheight Ġ- Ġheight 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// Ġno Ġscrollbar Ġnecessary ĊĠĠĠĠĠ Ġheight 1 Ġ= Ġpref Height 1 ĊĠĠĠĠĠ Ġheight 2 Ġ= Ġpref Height 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpanel 1 . bounds Ġ= ĠRectangle ( 0 , Ġ 0 , Ġsize . width , Ġheight 1 ) ĊĠĠĠ Ġpanel 2 . bounds Ġ= ĠRectangle ( 0 , Ġheight 1 , Ġsize . width , Ġheight 2 ) ĊĠ Ġ} Ċ }