package Ġnet . d ank ito . richt ext editor . java . fx . toolbar Ċ Ċ import Ġjavafx . geometry . Insets Ċ import Ġjavafx . geometry . Pos Ċ import Ġjavafx . scene . control . Label Ċ import Ġjavafx . scene . control . ScrollPane Ċ import Ġjavafx . scene . layout . H Box Ċ import Ġjavafx . scene . layout . Pane Ċ import Ġjavafx . scene . layout . Region Ċ import Ġnet . d ank ito . utils . Color Ċ import Ġnet . d ank ito . utils . image . Image Reference Ċ import Ġnet . d ank ito . richt ext editor . command . CommandName Ċ import Ġnet . d ank ito . richt ext editor . command . SetColor Command Ċ import Ġnet . d ank ito . richt ext editor . command . Toolbar Command Ċ import Ġnet . d ank ito . richt ext editor . command . Toolbar Command Style Ċ import Ġnet . d ank ito . richt ext editor . java . fx . Java FX Command View Ċ import Ġnet . d ank ito . richt ext editor . java . fx . Rich Text Editor Ċ import Ġnet . d ank ito . richt ext editor . java . fx . command . Select Value Command Ċ import Ġnet . d ank ito . richt ext editor . java . fx . localization . Localization Ċ import Ġnet . d ank ito . richt ext editor . java . fx . util . Style App lier Ċ import Ġt orn ad of x .* ĊĊ Ċ open Ġclass ĠEditor Toolbar Ġ: ĠView () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGroup Margin Top Ġ= Ġ 4 . 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGroup Margin Bottom Ġ= Ġ 6 . 0 Ġ// Ġi Ġdon 't Ġknow Ġwhy Ġbut Ġfor Ġthat Ġbottom Ġmargin Ġreally Ġequals Ġtop Ġmargin Ġwe Ġhave Ġto Ġadd Ġan Ġadditional Ġmargin Ġof Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGroup Margin Left Right Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGroup Additional Height Ġ= Ġ 6 . 0 Ġ+ ĠGroup Margin Top Ġ+ ĠGroup Margin Bottom ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġeditor : ĠRich Text Editor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Rich Text Editor On Commands ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġlocalization Ġ= ĠLocalization () ĊĊĠĠĠ Ġprivate Ġval Ġcommand Inv ok edList eners Ġ= ĠArrayList <( Toolbar Command ) Ġ-> ĠUnit >() ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Layout : ĠH Box ĊĊĠĠĠ Ġprivate Ġval Ġcommands Ġ= ĠHashMap < Toolbar Command , ĠRegion >() ĊĊĠĠĠ Ġprivate Ġval Ġsearch Views Ġ= ĠArrayList < Search View >() ĊĊĠĠĠ Ġprivate Ġval Ġstyle App lier Ġ= ĠStyle App lier () ĊĊĠĠĠ Ġval Ġcommand Style Ġ= ĠToolbar Command Style () ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcommand Style . height Dp Ġ= Ġ 2 2 ĊĠĠĠĠĠĠĠ Ġcommand Style . width Dp Ġ= Ġ 2 2 ĊĠĠĠĠĠĠĠ Ġcommand Style . is Activated Color Ġ= ĠColor . Light Gray ĊĠĠĠĠĠĠĠ Ġcommand Style . enabled Tint Color Ġ= ĠColor . Black ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġval Ġroot Ġ= Ġscroll pane Ġ{ ĊĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġcommand Style . height Dp . toDouble () ĊĠĠĠĠĠĠĠ ĠmaxHeight Ġ= ĠminHeight ĊĊĠĠĠĠĠĠĠ Ġv bar Policy Ġ= ĠScroll Pane . ScrollBar Policy . NE VER ĊĊĠĠĠĠĠĠĠ Ġcontent Layout Ġ= Ġh box Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Ġ= ĠPos . CENTER _ LEFT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Group ( group : ĠCommand Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Layout . add ( group . root ) ĊĊĠĠĠĠĠĠĠ Ġgroup . root . min Height Ġ= Ġcommand Style . height Dp . toDouble () Ġ+ ĠGroup Additional Height Ġ- ĠGroup Margin Top Ġ- ĠGroup Margin Bottom ĊĠĠĠĠĠĠĠ Ġgroup . root . max Height Ġ= Ġgroup . root . min Height ĊĠĠĠĠĠĠĠ ĠH Box . set Margin ( group . root , ĠIn sets ( Group Margin Top , ĠGroup Margin Left Right , ĠGroup Margin Bottom , ĠGroup Margin Left Right )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Vertical Group ( group : ĠVertical Command Group , Ġto Group : ĠCommand Group ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( to Group Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . add ( group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Group . add Command ( group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgroup . min Height Ġ= Ġcommand Style . height Dp . toDouble () ĊĠĠĠĠĠĠĠ Ġgroup . max Height Ġ= Ġgroup . min Height ĊĠĠĠĠĠĠĠ ĠH Box . set Margin ( group , ĠIn sets ( 2 . 0 )) ĊĊĊĠĠĠĠĠĠĠ Ġgroup . command Inv oked Ġ= Ġ{ Ġcommand Inv oked ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġgroup . items . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdummy View Ġ= ĠLabel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . put ( item . command , Ġdummy View ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . command . executor Ġ= Ġeditor ?. java Script Executor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . command . command View Ġ= ĠJava FX Command View ( dummy View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Command In Extra Group ( command : ĠToolbar Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠCommand Group () ĊĠĠĠĠĠĠĠ Ġadd Group ( group ) ĊĊĠĠĠĠĠĠĠ Ġadd Command ( command , Ġgroup ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Command ( command : ĠToolbar Command , Ġto Group : ĠCommand Group ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand View : ĠRegion Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSelect Value Command Ġ-> ĠSelect Value View ( command ) Ġ{ Ġcommand Inv oked ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSet Color Command Ġ-> ĠSelect Color Command View ( command ) Ġ{ Ġcommand Inv oked ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠActive State Command View ( command ) Ġ{ Ġcommand Inv oked ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( to Group Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . add ( command View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Group . add Command ( command View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommands . put ( command , Ġcommand View ) ĊĊĠĠĠĠĠĠĠ Ġcommand . executor Ġ= Ġeditor ?. java Script Executor ĊĠĠĠĠĠĠĠ Ġcommand . command View Ġ= ĠJava FX Command View ( command View ) ĊĊĠĠĠĠĠĠĠ Ġcommand . command View ?. set BackgroundColor ( command . style . backgroundColor ) Ġ// Ġset Ġdefault Ġbackground , Ġbut Ġdon 't Ġdo Ġit Ġin ĠStyle App lier Ġbut ĠJava FX Command View Ġto Ġavoid Ġduplicate Ġcode ĊĠĠĠĠĠĠĠ Ġapply Command Style ( command , Ġcommand View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd After Command ( command : ĠToolbar Command , Ġcommand ToAdd After : ĠToolbar Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Command ( command ) ĊĊĠĠĠĠĠĠĠ Ġcommands . get ( command )?. let Ġ{ Ġcommand View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand View . remove From Parent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . get ( command ToAdd After )?. let Ġ{ Ġcommand View ToAdd After Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( command View ToAdd After . parent Ġas ? ĠP ane )?. let Ġ{ Ġpane Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġpane . children . indexOf ( command View ToAdd After ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpane . children . add ( index Ġ+ Ġ 1 , Ġcommand View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Command Style ( command : ĠToolbar Command , Ġcommand View : ĠRegion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapply Command Style ( command . icon , Ġcommand . style , Ġcommand View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply Command Style ( icon : ĠImage Reference , Ġstyle : ĠToolbar Command Style , Ġcommand View : ĠRegion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerge Styles ( command Style , Ġstyle ) ĊĊĠĠĠĠĠĠĠ Ġstyle App lier . apply Command Style ( icon , Ġstyle , Ġcommand View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge Styles ( command Style : ĠToolbar Command Style , Ġtoolbar Command Style : ĠToolbar Command Style ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . backgroundColor Ġ== ĠToolbar Command Style . Default BackgroundColor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . backgroundColor Ġ= Ġcommand Style . backgroundColor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . width Dp Ġ== ĠToolbar Command Style . Default Width Dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . width Dp Ġ= Ġcommand Style . width Dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . height Dp Ġ== ĠToolbar Command Style . Default Height Dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . height Dp Ġ= Ġcommand Style . height Dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . margin Right Dp Ġ== ĠToolbar Command Style . Default Margin Right Dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . margin Right Dp Ġ= Ġcommand Style . margin Right Dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . padding Dp Ġ== ĠToolbar Command Style . Default Padding Dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . padding Dp Ġ= Ġcommand Style . padding Dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . enabled Tint Color Ġ== ĠToolbar Command Style . Default Enabled Tint Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . enabled Tint Color Ġ= Ġcommand Style . enabled Tint Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . disabled Tint Color Ġ== ĠToolbar Command Style . Default Disabled Tint Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . disabled Tint Color Ġ= Ġcommand Style . disabled Tint Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( toolbar Command Style . is Activated Color Ġ== ĠToolbar Command Style . Default Is Activated Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Command Style . is Activated Color Ġ= Ġcommand Style . is Activated Color ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Search View In Extra Group ( style : ĠSearch View Style Ġ= ĠSearch View Style ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠCommand Group () ĊĠĠĠĠĠĠĠ Ġadd Group ( group ) ĊĊĠĠĠĠĠĠĠ Ġadd Search View ( style , Ġgroup ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Search View ( style : ĠSearch View Style Ġ= ĠSearch View Style (), Ġto Group : ĠCommand Group ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerge Styles ( command Style , Ġstyle . toolbar Command Style ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= ĠSearch View ( style , Ġlocalization ) ĊĊĠĠĠĠĠĠĠ ĠH Box . set Margin ( search View . root , ĠIn sets ( 4 . 0 , Ġ 0 . 0 , Ġ 4 . 0 , Ġ 0 . 0 )) ĊĊĠĠĠĠĠĠĠ Ġif ( to Group Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout . add ( search View . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Group . add Command ( search View . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsearch Views . add ( search View ) ĊĊĠĠĠĠĠĠĠ Ġsearch View . executor Ġ= Ġeditor ?. java Script Executor ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Command ( command Name : ĠCommand Name ): ĠToolbar Command ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcommands . keys . forEach Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( command . command Ġ== Ġcommand Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Rich Text Editor On Commands ( editor : ĠRich Text Editor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcommands . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . executor Ġ= Ġeditor ?. java Script Executor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsearch Views . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . executor Ġ= Ġeditor ?. java Script Executor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . editor Ġ= Ġeditor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcommand Inv oked ( command : ĠToolbar Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor ?. focus Editor ( false ) ĊĊĠĠĠĠĠĠĠ Ġcommand Inv ok edList eners . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . invoke ( command ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Command Inv oked Listener ( listener : Ġ( Toolbar Command ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcommand Inv ok edList eners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Command Inv oked Listener ( listener : Ġ( Toolbar Command ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcommand Inv ok edList eners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊ Ċ }