package Ġyet . ui . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . support . annotation . Drawable Res Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġyet . theme . Colors Ċ import Ġyet . ui . ext .* Ċ import Ġyet . ui . page . Cmd Ċ import Ġyet . ui . res .* Ċ import Ġyet . ui . view creator .* Ċ import Ġyet . util . fore ĊĊ Ċ class ĠTitle Bar ( context : ĠContext ) Ġ: ĠRelative Layout ( context ) Ġ{ Ċ ĉ val Ġleft Cmd s Ġ= ĠArrayList < Cmd >() Ċ ĉ val Ġright Cmd s Ġ= ĠArrayList < Cmd >() Ċ ĉ var Ġtitle View : ĠView ? Ġ= Ġnull Ċ ĉ var Ġtitle Center Ġ= ĠTitle Bar . Title Center ĊĊ ĉ var Ġleft Linear : ĠLinearLayout ? Ġ= Ġnull Ċ ĉ var Ġright Linear : ĠLinearLayout ? Ġ= Ġnull ĊĊ ĉ var Ġpush Model : ĠBoolean Ġ= Ġfalse Ċĉ ĉ private Ġset Ċ ĉ private Ġvar Ġleft Back Ġ= ĠArrayList < Cmd >() Ċ ĉ private Ġvar Ġright Back Ġ= ĠArrayList < Cmd >() Ċ ĉ private Ġvar Ġtitle Back : ĠView ? Ġ= Ġnull ĊĊ ĉ var Ġpop Window : ĠPopup Window ? Ġ= Ġnull ĊĊ ĉ init Ġ{ Ċĉ ĉ back Color ( Colors . Theme ) Ċ ĉ } ĊĊ ĉ fun Ġpush ( block : ĠTitle Bar . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ if Ġ(! push Model ) Ġ{ Ċĉĉ ĉ push Model Ġ= Ġtrue ĊĊĉĉ ĉ moveTo ( left Cmd s , Ġleft Back ) Ċĉĉ ĉ moveTo ( right Cmd s , Ġright Back ) ĊĊĉĉ ĉ title Back Ġ= Ġtitle View Ċĉĉ ĉ title View Ġ= Ġnull ĊĊĉĉ ĉ this . block () Ċĉĉ ĉ commit () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġpop () Ġ{ Ċĉ ĉ if Ġ( push Model ) Ġ{ Ċĉĉ ĉ push Model Ġ= Ġfalse Ċĉĉ ĉ moveTo ( left Back , Ġleft Cmd s ) Ċĉĉ ĉ moveTo ( right Back , Ġright Cmd s ) Ċĉĉ ĉ title View Ġ= Ġtitle Back Ċĉĉ ĉ title Back Ġ= Ġnull ĊĊĉĉ ĉ commit () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ private Ġfun Ġ< T > Ġmove To ( from : ĠArrayList < T >, Ġdest : ĠArrayList < T >) Ġ{ Ċĉ ĉ dest . clear () Ċĉ ĉ dest . addAll ( from ) Ċĉ ĉ from . clear () Ċ ĉ } ĊĊ ĉ fun Ġfind MenuItem ( cmd : ĠString ): ĠAction MenuItem Info ? Ġ{ Ċĉ ĉ for Ġ( c Ġin Ġleft Cmd s ) Ġ{ Ċĉĉ ĉ val Ġb Ġ= Ġc . items . find Ġ{ Ċĉĉĉ ĉ it . cmd Ġ== Ġcmd Ċĉĉ ĉ } Ċĉĉ ĉ if Ġ( b Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ return Ġb Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ for Ġ( c Ġin Ġright Cmd s ) Ġ{ Ċĉĉ ĉ val Ġb Ġ= Ġc . items . find Ġ{ Ċĉĉĉ ĉ it . cmd Ġ== Ġcmd Ċĉĉ ĉ } Ċĉĉ ĉ if Ġ( b Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ return Ġb Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġnull Ċ ĉ } ĊĊ ĉ fun Ġfind ( block : Ġ( Cmd ) Ġ-> ĠBoolean ): ĠCmd ? Ġ{ Ċĉ ĉ return Ġleft Cmd s . find ( block ) Ġ?: Ġright Cmd s . find ( block ) Ċ ĉ } ĊĊ ĉ fun Ġfind ( cmd : ĠString ): ĠCmd ? Ġ{ Ċĉ ĉ return Ġfind Ġ{ Ċĉĉ ĉ it . cmd Ġ== Ġcmd Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġcommit () Ġ{ Ċĉ ĉ left Linear ?. removeAll Views () Ċĉ ĉ right Linear ?. removeAll Views () Ċĉ ĉ removeAll Views () ĊĊĉ ĉ if Ġ( left Cmd s . isNotEmpty ()) Ġ{ Ċĉĉ ĉ val Ġll Ġ= Ġthis . create Linear Horizontal () Ċĉĉ ĉ for Ġ( c Ġin Ġleft Cmd s ) Ġ{ Ċĉĉĉ ĉ ll . addView ( c . view , Ġc . param ) Ċĉĉĉ ĉ if Ġ( c . items . isEmpty ()) Ġ{ Ċĉĉĉĉ ĉ c . view . setOnClickListener Ġ{ Ċĉĉĉĉĉ ĉ c . onClick ( c ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ c . view . setOnClickListener Ġ{ Ċĉĉĉĉĉ ĉ pop Menu ( c ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ addView ( ll , ĠR Param . Parent Left . Height Fill . Width Wrap ) Ċĉĉ ĉ left Linear Ġ= Ġll Ċĉ ĉ } ĊĊĉ ĉ if Ġ( right Cmd s . isNotEmpty ()) Ġ{ Ċĉĉ ĉ val Ġll Ġ= Ġthis . create Linear Horizontal () Ċĉĉ ĉ for Ġ( c Ġin Ġright Cmd s ) Ġ{ Ċĉĉĉ ĉ ll . addView ( c . view , Ġc . param ) Ċĉĉĉ ĉ if Ġ( c . items . isEmpty ()) Ġ{ Ċĉĉĉĉ ĉ c . view . setOnClickListener Ġ{ Ċĉĉĉĉĉ ĉ c . onClick ( c ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ c . view . setOnClickListener Ġ{ Ċĉĉĉĉĉ ĉ pop Menu ( c ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ addView ( ll , ĠR Param . Parent Right . Height Fill . Width Wrap ) Ċĉĉ ĉ right Linear Ġ= Ġll Ċĉ ĉ } Ċĉ ĉ val Ġv Ġ= Ġtitle View Ċĉ ĉ if Ġ( v Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ if Ġ( title Center ) Ġ{ Ċĉĉĉ ĉ addView ( v , ĠR Param . Center In Parent . Height Fill . Width Wrap ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ if Ġ( left Linear Ġ== Ġnull ) Ġ{ Ċĉĉĉĉ ĉ addView ( v , ĠR Param . Center Vertical . Parent Left . Height Fill . Width Wrap . margin s ( 1 5 , Ġ 0 , Ġ 0 , Ġ 0 )) Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ addView ( v , ĠR Param . Center Vertical . to Right Of ( left Linear !! ). Height Fill . Width Wrap . margin s ( 1 5 , Ġ 0 , Ġ 0 , Ġ 0 )) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ } ĊĊ ĉ fun Ġtitle ( text : ĠString ): ĠTextView Ġ{ Ċĉ ĉ val Ġtv Ġ= Ġcreate TextView A () Ċĉ ĉ tv . textColor White () Ċĉ ĉ tv . text Ġ= Ġtext Ċĉ ĉ title View Ġ= Ġtv Ċĉ ĉ return Ġtv Ċ ĉ } ĊĊ ĉ fun Ġtitle Image (@ Drawable Res Ġres Id : ĠInt ): ĠImageView Ġ{ Ċĉ ĉ val Ġiv Ġ= Ġcreate ImageView () Ċĉ ĉ iv . setImage Resource ( res Id ) Ċĉ ĉ iv . scale Center Crop () Ċĉ ĉ title View Ġ= Ġiv Ċĉ ĉ return Ġiv Ċ ĉ } ĊĊ ĉ fun Ġon Title Click ( block : Ġ() Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ title View ?. onClick Ġ{ Ċĉĉ ĉ block () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġremove Back () Ġ{ Ċĉ ĉ left Cmd s . removeAll Ġ{ Ġit . cmd Ġ== ĠBACK Ġ} Ċ ĉ } ĊĊ ĉ fun Ġremove Cmd ( cmd : ĠString ) Ġ{ Ċĉ ĉ left Cmd s . removeAll Ġ{ Ġit . cmd Ġ== Ġcmd Ġ} Ċĉ ĉ right Cmd s . removeAll Ġ{ Ġit . cmd Ġ== Ġcmd Ġ} Ċ ĉ } ĊĊĊ ĉ fun Ġshow Back ( res Id : ĠInt Ġ= ĠRes . back ): ĠCmd Ġ{ Ċĉ ĉ left Cmd s . removeAll Ġ{ Ġit . cmd Ġ== ĠBACK Ġ} Ċĉ ĉ val Ġiv Ġ= Ġcreate Image Item View () Ċĉ ĉ val Ġd Ġ= ĠD . tint ed ( res Id , ĠColors . WHITE ) Ċĉ ĉ iv . setImage Drawable ( d ) Ċĉ ĉ val Ġc Ġ= ĠCmd ( BACK ) Ċĉ ĉ c . view Ġ= Ġiv Ċĉ ĉ c . param Ġ= ĠL Param . size ( HEIGHT ) Ċĉ ĉ left Cmd s . add ( c ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ fun Ġaction Image ( res Id : ĠInt , Ġcmd : ĠString Ġ= Ġ"$ res Id "): ĠCmd Ġ{ Ċĉ ĉ return Ġaction Image ( Res . drawable ( res Id ), Ġcmd ) Ċ ĉ } ĊĊ ĉ fun Ġaction Image ( d : ĠDrawable , Ġcmd : ĠString Ġ= ĠCmd . gen Cmd ): ĠCmd Ġ{ Ċĉ ĉ val Ġiv Ġ= Ġcreate Image Item View () Ċĉ ĉ iv . setImage Drawable ( d . tint ed White ) Ċĉ ĉ val Ġc Ġ= ĠCmd ( cmd ) Ċĉ ĉ c . view Ġ= Ġiv Ċĉ ĉ c . param Ġ= ĠL Param . height Fill (). width ( HEIGHT ) Ċĉ ĉ right Cmd s . add ( c ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ fun Ġaction Text ( text : ĠString , Ġcmd : ĠString Ġ= Ġtext ): ĠCmd Ġ{ Ċĉ ĉ val Ġtv Ġ= Ġcreate Text Item View () Ċĉ ĉ tv . text Ġ= Ġtext Ċĉ ĉ val Ġc Ġ= ĠCmd ( cmd ) Ċĉ ĉ c . view Ġ= Ġtv Ċĉ ĉ c . param Ġ= ĠL Param . Height Fill . Width Wrap Ċĉ ĉ right Cmd s . add ( c ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ fun Ġleft Image ( res Id : ĠInt , Ġcmd : ĠString Ġ= Ġ"$ res Id "): ĠCmd Ġ{ Ċĉ ĉ return Ġleft Image ( Res . drawable ( res Id ), Ġcmd ) Ċ ĉ } ĊĊ ĉ fun Ġleft Image ( d : ĠDrawable , Ġcmd : ĠString Ġ= ĠCmd . gen Cmd ): ĠCmd Ġ{ Ċĉ ĉ val Ġiv Ġ= Ġcreate Image Item View () Ċĉ ĉ iv . setImage Drawable ( d . tint ed White ) Ċĉ ĉ val Ġc Ġ= ĠCmd ( cmd ) Ċĉ ĉ c . view Ġ= Ġiv Ċĉ ĉ c . param Ġ= ĠL Param . height Fill (). width ( HEIGHT ) Ċĉ ĉ left Cmd s . add ( c ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ fun Ġleft Text ( text : ĠString , Ġcmd : ĠString Ġ= Ġtext ): ĠCmd Ġ{ Ċĉ ĉ val Ġtv Ġ= Ġcreate Text Item View () Ċĉ ĉ tv . text Ġ= Ġtext Ċĉ ĉ val Ġc Ġ= ĠCmd ( cmd ) Ċĉ ĉ c . view Ġ= Ġtv Ċĉ ĉ c . param Ġ= ĠL Param . Height Fill . Width Wrap Ċĉ ĉ left Cmd s . add ( c ) Ċĉ ĉ return Ġc Ċ ĉ } ĊĊ ĉ private Ġfun Ġpop Menu ( cmd : ĠCmd ) Ġ{ Ċĉ ĉ val Ġp Ġ= ĠPopup Window ( context ) Ċĉ ĉ p . width Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT Ċĉ ĉ p . height Ġ= ĠViewGroup . LayoutParams . WRAP _ CONTENT Ċĉ ĉ p . is Focus able Ġ= Ġtrue Ċĉ ĉ p . is Outside Touchable Ġ= Ġtrue Ċĉ ĉ p . setBackground Drawable ( Color Drawable ( 0 )) Ċĉ ĉ val Ġgd Ġ= ĠShapes . rect Ġ{ Ċĉĉ ĉ fill Color Ġ= ĠColors . Theme Ċĉĉ ĉ corner List Dp ( 0 , Ġ 0 , Ġ 2 , Ġ 2 ) Ċĉ ĉ } Ċĉ ĉ val Ġpop Root View Ġ= Ġcontext . create Linear Vertical () Ċĉ ĉ pop Root View . minimum Width Ġ= Ġdp ( 1 5 0 ) Ċĉ ĉ pop Root View . back Drawable ( gd ). padding ( 5 ) Ċĉ ĉ pop Root View . divider () Ċĉ ĉ val Ġitem List Ġ= ĠArrayList < Action MenuItem Info >( cmd . items ) Ċĉ ĉ for Ġ( c Ġin Ġitem List ) Ġ{ Ċĉĉ ĉ val Ġv Ġ= Ġmenu Item View ( c ) Ċĉĉ ĉ pop Root View . addView ( v , ĠL Param . Width Fill . height ( 4 5 )) Ċĉĉ ĉ v . setOnClickListener Ġ{ Ċĉĉĉ ĉ pop Window ?. dismiss () Ċĉĉĉ ĉ fore Ġ{ Ċĉĉĉĉ ĉ c . onClick ( c . cmd ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ p . content View Ġ= Ġpop Root View Ċĉ ĉ pop Window Ġ= Ġp ĊĊĉ ĉ p . setOn Dismiss Listener Ġ{ Ċĉĉ ĉ ( pop Window ?. content View Ġas ? ĠViewGroup )?. removeAll Views () Ċĉĉ ĉ pop Window Ġ= Ġnull Ċĉ ĉ } Ċĉ ĉ p . show As DropDown ( cmd . view , Ġ 0 , Ġ 1 ) Ċ ĉ } ĊĊ ĉ fun Ġmenu ( block : ĠCmd . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġm Ġ= Ġfind ( MENU ) Ġ?: Ġaction Image ( Res . menu , ĠMENU ) Ċĉ ĉ m . block () Ċ ĉ } ĊĊ ĉ fun Ġmenu ( res Id : ĠInt , Ġblock : ĠCmd . () Ġ-> ĠUnit ) Ġ{ Ċĉ ĉ val Ġm Ġ= Ġfind ( MENU ) Ġ?: Ġaction Image ( res Id , ĠMENU ) Ċĉ ĉ m . block () Ċ ĉ } ĊĊ ĉ private Ġfun Ġmenu Item View ( item : ĠAction MenuItem Info ): ĠView Ġ{ Ċĉ ĉ val Ġtv Ġ= Ġcontext . create TextView B () Ċĉ ĉ tv . single Line () Ċĉ ĉ tv . back Color Trans Fade () Ċĉ ĉ tv . gravity Left Center (). padding ( 5 , Ġ 5 , Ġ 2 0 , Ġ 5 ) Ċĉ ĉ tv . text Ġ= Ġitem . text ĊĊĉ ĉ var Ġd : ĠDrawable Ġ= Ġif Ġ( item . drawable Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ item . drawable !!. mutate () Ċĉ ĉ } Ġelse Ġif Ġ( item . res Icon Ġ!= Ġ 0 ) Ġ{ Ċĉĉ ĉ Res . drawable ( item . res Icon ). mutate () Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ D . color ( Color . TRANSP ARENT ) Ċĉ ĉ } Ċĉ ĉ d Ġ= Ġd . tint ed White . sized ( Title Bar . Img Size ) Ċĉ ĉ tv . compound Drawable Padding Ġ= Ġdp ( 1 0 ) Ċĉ ĉ tv . set Compound Draw ables ( d , Ġnull , Ġnull , Ġnull ) Ċĉ ĉ tv . textColor White () Ċĉ ĉ return Ġtv Ċ ĉ } ĊĊ ĉ fun Ġcreate Image Item View (): ĠImageView Ġ{ Ċĉ ĉ val Ġiv Ġ= ĠImageView ( context ) Ċĉ ĉ iv . scale Center Crop () Ċĉ ĉ iv . back Color Trans Fade () Ċĉ ĉ iv . padding ( PAD _ H OR , ĠPAD _ VER , ĠPAD _ H OR , ĠPAD _ VER ) Ċĉ ĉ return Ġiv Ċ ĉ } ĊĊ ĉ fun Ġcreate Text Item View (): ĠTextView Ġ{ Ċĉ ĉ val Ġiv Ġ= Ġcreate TextView B () Ċĉ ĉ iv . back Color Trans Fade () Ċĉ ĉ iv . textColor White () Ċĉ ĉ iv . gravity Center () Ċĉ ĉ iv . minimum Width Ġ= Ġdp ( HEIGHT ) Ċĉ ĉ iv . padding ( 5 , Ġ 0 , Ġ 5 , Ġ 0 ) Ċĉ ĉ return Ġiv Ċ ĉ } ĊĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ const Ġval ĠBACK Ġ= Ġ" back " Ċĉ ĉ const Ġval ĠMENU Ġ= Ġ" menu " Ċĉ ĉ const Ġval ĠImg Size Ġ= Ġ 2 4 Ċĉ ĉ const Ġval ĠHEIGHT Ġ= Ġ 5 0 // Ġdp Ċĉ ĉ const Ġval ĠPAD _ VER Ġ= Ġ( HEIGHT Ġ- ĠImg Size ) Ġ/ Ġ 2 Ċĉ ĉ const Ġval ĠPAD _ H OR Ġ= Ġ( HEIGHT Ġ- ĠImg Size ) Ġ/ Ġ 2 Ċĉ ĉ var ĠTitle Center Ġ= Ġtrue Ċ ĉ } Ċ }