package Ġcom . def lated pickle . sp nor f Ċ Ċ import Ġjava . awt .* Ċ import Ġjava . awt . datat rans fer . Data Flavor Ċ import Ġjava . awt . d nd . Dn D Constants Ċ import Ġjava . awt . d nd . Drop Target Ċ import Ġjava . awt . d nd . Drop Target Drag Event Ċ import Ġjava . awt . d nd . Drop Target Drop Event Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjava . io . File Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . Swing Utilities Ċ import Ġjavax . swing . Timer Ċ Ċ class ĠDock Panel ( val Ġpadding Insets : ĠIn sets ) Ġ: ĠJPanel () Ġ{ ĊĠĠĠ Ġval Ġgrid BagLayout Ġ= ĠGrid BagLayout () ĊĊĠĠĠ Ġ// ĠConfig ĠOptions ĊĠĠĠ Ġval Ġbar Icon Files Ġ= Ġmutable ListOf < File >() ĊĠĠĠ Ġval Ġbar Icon Buttons Ġ= Ġmutable ListOf < Dock Button >() ĊĠĠĠ Ġval Ġbar Width Ġ= Ġ 2 0 ĊĠĠĠ Ġval Ġbar Height Ġ= Ġ 2 0 ĊĊĠĠĠ Ġval Ġdistance Limit Ġ= ĠRectangle ( 6 0 , Ġ 1 0 , Ġ 6 0 , Ġ 1 0 ) ĊĊĠĠĠ Ġvar Ġrow Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġcolumn Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġthis . drop Target Ġ= Ġobject Ġ: ĠDrop Target () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdrag Over ( dt de : ĠDrop Target Drag Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . drag Over ( dt de ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġa Ġtemporary Ġbutton , Ġin Ġthe Ġcolumn Ġclosest Ġto Ġthe Ġmouse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdrop ( dt de : ĠDrop Target Drop Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsuper . drop ( dt de ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd ĠD n D Ġfor Ġdock Ġbuttons , Ġso Ġthey Ġcan Ġbe Ġre - organ ised ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠReject Ġ( or Ġresolve ) Ġif Ġit 's Ġa Ġshortcut Ġor Ġnot Ġan Ġexecutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdt de . accept Drop ( Dn D Constants . ACTION _ COPY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdropped Files Ġ= Ġdt de . transfer able . get Transfer Data ( Data Flavor . java FileList Flavor ) Ġas ĠList < File > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġdropped Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠCheck Ġif Ġthe Ġfile Ġis Ġa Ġshortcut Ġthen Ġreject Ġit Ġor Ġresolve Ġthe Ġlinked Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar Icon Files . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhighlight Type Ġ= ĠHighlight Type . POWER ĊĊĠĠĠĠĠĠĠ Ġval Ġweight Max Ġ= Ġ 1 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġweight Multiplier Ġ= Ġwhen Ġ( highlight Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHighlight Type . MULTI PLIER Ġ-> Ġ 7 . 0 Ġ// Ġ 3 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHighlight Type . POWER Ġ-> Ġ 1 . 3 Ġ// Ġ 1 . 0 0 6 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer ( 1 0 0 0 Ġ/ Ġ 6 0 , ĠActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Weights Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . bar Icon Buttons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmouse Location Ġ= ĠMouse Info . get Pointer Info (). location ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Location Ġ= ĠGlobal Values . frame !!. location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Size Ġ= ĠGlobal Values . frame !!. size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġmouse Ġis Ġoutside Ġthe Ġrange Ġborder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrectangle Ġ= ĠRectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Location . x Ġ- Ġdistance Limit . x , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Location . y Ġ- Ġdistance Limit . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Size . width Ġ+ Ġ( distance Limit . width Ġ* Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Size . height Ġ+ Ġ( distance Limit . height Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rectangle . contains ( mouse Location )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . weight Ġ= Ġ 1 0 0 Ġ/ Ġthis . bar Icon Buttons . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġmouse Ġpointer Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative Mouse Location Ġ= ĠMouse Info . get Pointer Info (). location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSw ing Utilities . convert Point From Screen ( relative Mouse Location , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Location Ġ= Ġi . location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Size Ġ= Ġi . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġdistance Ġfrom Ġthe Ġpointer Ġto Ġthis Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= ĠPoint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Mouse Location . x Ġ- Ġbutton Location . x Ġ- Ġ( button Size . width Ġ/ Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Mouse Location . y Ġ- Ġbutton Location . y Ġ- Ġ( button Size . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . update ( distance ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Weights Ġ+= Ġi . weight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . bar Icon Buttons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġweight Max Ġ- Ġwhen Ġ( highlight Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHighlight Type . MULTI PLIER Ġ-> Ġ( i . weight Ġ* Ġweight Multiplier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHighlight Type . POWER Ġ-> Ġ( Math . pow ( i . weight . toDouble (), Ġweight Multiplier )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprintln ("${ i . text }, Ġ$ percentage ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġconstraints Ġbased Ġon Ġweight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . grid BagLayout . set Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . column , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints . WEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints . BOTH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Insets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . re validate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġtimer . start () ĊĊĠĠĠĠĠĠĠ Ġthis . layout Ġ= Ġgrid BagLayout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . paint Component ( g ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġan Ġembedded Ġscripting Ġlanguage , Ġso Ġthis Ġcan Ġbe Ġcompletely Ġcustom izable ĊĠĠĠĠĠĠĠ Ġg . color Ġ= ĠColor . WHITE ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( Global Values . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . HORIZONTAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( Global Values . side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide . TOP Ġ-> Ġg . fillRect ( 0 , Ġ 0 , Ġthis . width , Ġbar Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide . BOTTOM Ġ-> Ġg . fillRect ( 0 , Ġthis . height Ġ- Ġbar Height , Ġthis . width , Ġthis . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . VERTICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( Global Values . side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide . LEFT Ġ-> Ġg . fillRect ( 0 , Ġ 0 , Ġbar Width , Ġthis . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSide . RIGHT Ġ-> Ġg . fillRect ( this . width Ġ- Ġbar Width , Ġ 0 , Ġbar Width , Ġthis . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Button ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġshell Folder Ġ= ĠShell Folder . get Shell Folder ( File ( i )) ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġicon Ġ= ĠImage Icon ( shell Folder . get Icon ( true )) ĊĠĠĠĠĠĠĠ Ġbar Icon Buttons . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDock Button ( file . name . substring After Last ("\ \" ). substring Before (". "). capitalize ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . row Ġ= Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . column Ġ= Ġcolumn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . grid BagLayout . set Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints . WEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGridBagConstraints . BOTH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Insets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). exec ( file . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( Global Values . orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . HORIZONTAL Ġ-> Ġcolumn ++ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrientation . VERTICAL Ġ-> Ġrow ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }