// Ġ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 Ġcom . intellij . openapi . ui Ċ Ċ import Ġcom . intellij . ide . util . Properties Component Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . ui . One Pixel Splitter Ċ import Ġorg . jetbrains . annotations . Non N ls Ċ import Ġjavax . swing . Swing Utilities Ċ Ċ class ĠNon Pro portional One Pixel Splitter ( ĊĠ Ġvertical : ĠBoolean , ĊĠ Ġ@ Non N ls Ġprivate Ġval Ġproportion Key : ĠString , ĊĠ Ġprivate Ġval Ġdefault Pro portion : ĠFloat Ġ= Ġ 0 . 5 f , ĊĠ Ġprivate Ġval Ġdis posable : ĠDis posable , ĊĠ Ġprivate Ġval Ġproject : ĠProject ? Ċ ) Ġ: ĠOne Pixel Splitter ( vertical , Ġproportion Key , Ġdefault Pro portion ) Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger < Non Pro portional One Pixel Splitter >() ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġproperties Component Ġget () Ġ= Ġif Ġ( project Ġ!= Ġnull ) Ġ ĠProperties Component . getInstance ( project ) Ġelse ĠProperties Component . getInstance () ĊĊĠ Ġprivate Ġval Ġsize Ġget () Ġ= Ġif Ġ( orientation ) Ġheight Ġelse Ġwidth ĊĠ Ġprivate Ġval Ġmin Size Ġget () Ġ= Ġif Ġ( orientation ) Ġminimum Size . height Ġelse Ġminimum Size . width ĊĊĠ Ġ// Ġhack ĊĠ Ġvar Ġmax Retry Count Ġ= Ġ 1 0 0 ĊĊĠ Ġprivate Ġvar Ġadd Notify Timestamp : ĠLong Ġ= Ġ 0 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠDis poser . register ( dis posable , ĠDis posable Ġ{ ĊĠĠĠĠĠ Ġsave Pro portion () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġdivider Position Strategy Ġ= ĠDiv ider Position Strategy . KEEP _ FIRST _ SIZE ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Notify () Ġ{ ĊĠĠĠ Ġsuper . add Notify () ĊĠĠĠ Ġdivider Position Strategy Ġ= ĠDiv ider Position Strategy . KEEP _ PRO PORT ION ĊĠĠĠ Ġinvoke Later When ({ Ġcheck Size () Ġ}, Ġ++ add Notify Timestamp ) Ġ{ ĊĠĠĠĠĠ Ġload Pro portion () ĊĠĠĠĠĠ Ġdivider Position Strategy Ġ= ĠDiv ider Position Strategy . KEEP _ FIRST _ SIZE ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" D uplicated Code ") ĊĠ Ġprivate Ġfun Ġinvoke Later When ( condition : Ġ() Ġ-> ĠBoolean , Ġtimestamp : ĠLong , Ġcount : ĠInt Ġ= Ġ 0 , Ġaction : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( add Notify Timestamp Ġ!= Ġtimestamp ) Ġreturn ĊĊĠĠĠ ĠSw ing Utilities . invoke Later Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠDis poser . is Disposed ( dis posable ) Ġ-> Ġreturn @ invoke Later ĊĠĠĠĠĠĠĠ Ġcondition () Ġ-> Ġaction () ĊĠĠĠĠĠĠĠ Ġcount Ġ> Ġmax Retry Count Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Could Ġnot Ġrestore Ġpro port ions Ġin Ġ$ max Retry Count Ġtimes . Ġ${ dump () }") ĊĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġinvoke Later When ( condition , Ġtimestamp , Ġcount Ġ+ Ġ 1 , Ġaction ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Non N ls Ġprivate Ġfun Ġdump () Ġ= Ġ"$ size =$ size , Ġmin Size =${ min Size }" ĊĊĠ Ġprivate Ġfun Ġcheck Size () Ġ= Ġsize Ġ!= Ġ 0 Ġ&& Ġmin Size Ġ< Ġsize ĊĊĠ Ġoverride Ġfun Ġset Pro portion ( pro portion : ĠFloat ) Ġ{ ĊĠĠĠ Ġif Ġ( pro portion Ġ< Ġ 0 Ġ|| Ġproportion Ġ> Ġ 1 ) Ġreturn ĊĊĠĠĠ Ġsuper . set Pro portion ( pro portion ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġload Pro portion () Ġ{ ĊĠĠĠ Ġif Ġ(! StringUtil . isEmpty ( pro portion Key )) Ġ{ ĊĠĠĠĠĠ Ġproportion Ġ= Ġproperties Component . get Float ( pro portion Key , Ġmy Pro portion ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġsave Pro portion () Ġ{ ĊĠĠĠ Ġif Ġ(! StringUtil . isEmpty ( pro portion Key )) Ġ{ ĊĠĠĠĠĠ Ġproperties Component . setValue ( pro portion Key , Ġmy Pro portion , Ġdefault Pro portion ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ