/**************************************************************************** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 - 2 0 2 0 ĠY ev gen y ĠK ras ik ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĠĠĠĠĠ Ġ* Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠĠĠĠĠĠĠ Ġ* Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ* Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĠĠĠĠĠ Ġ* Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ************************************************************************* ***/ Ċ Ċ package Ġcom . gitlab . y kr as ik . game dex . app . java fx . maintenance Ċ Ċ import Ġcom . gitlab . y kr as ik . game dex . Game Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . game . Rename Move Game Params Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . game . View Can Rename Move Game Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . game . View Can Show Game Details Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . game . View Game Params Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . maintenance . Folder Name Diff Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . maintenance . Folder Name Diff Filter Mode Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . maintenance . Folder Name Diff View Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . maintenance . Folder Name D iffs Ċ import Ġcom . gitlab . y kr as ik . game dex . app . api . util . broadcast Flow Ċ import Ġcom . gitlab . y kr as ik . game dex . app . java fx . common . Java Fx Common Ops Ċ import Ġcom . gitlab . y kr as ik . game dex . app . java fx . game . Game ContextMenu Ċ import Ġcom . gitlab . y kr as ik . game dex . app . java fx . game . Game Details Summary Builder Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx .* Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . control .* Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . theme . Icons Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . theme . back Button Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . theme . header Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . theme . size Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . view . Install able ContextMenu Ċ import Ġcom . gitlab . y kr as ik . game dex . java fx . view . Present able Screen Ċ import Ġdiff lib . Chunk Ċ import Ġdiff lib . Delta Ċ import Ġjavafx . event . EventTarget Ċ import Ġjavafx . geometry . Pos Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . layout . H Box Ċ import Ġjavafx . scene . layout . Priority Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . text . Font Weight Ċ import Ġt orn ad of x .* Ċ import Ġjava . util . function . Predicate Ċ Ċ /** Ċ Ġ* ĠUser : Ġy kr as ik Ċ Ġ* ĠDate : Ġ 2 7 / 0 4 / 2 0 1 9 Ċ Ġ* ĠTime : Ġ 1 3 : 4 6 Ċ Ġ*/ Ċ class ĠJava Fx Folder Name Diff Screen Ġ: ĠPresent able Screen (" Folder ĠName ĠD iffs ", ĠIcons . diff ), ĊĠĠĠ ĠFolder Name Diff View , ĊĠĠĠ ĠView Can Show Game Details , ĊĠĠĠ ĠView Can Rename Move Game Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgame ContextMenu Ġ= ĠGame ContextMenu () ĊĠĠĠ Ġprivate Ġval Ġcommon Ops : ĠJava Fx Common Ops Ġby Ġdi () ĊĊĠĠĠ Ġoverride Ġval Ġdiffs Ġ= Ġmutable State Flow ( emptyList < Folder Name D iffs >(), Ġdebug Name Ġ= Ġ" dif fs ") ĊĠĠĠ Ġprivate Ġval Ġdiffs Sorted Filtered Ġ= Ġdiffs . list . sorted Filtered ( Comparator . comp aring ( Folder Name D iffs :: name )) Ċ Ċ // ĠĠĠ Ġoverride Ġval Ġexclude Game Actions Ġ= Ġbroadcast Flow < Game >() ĊĊĠĠĠ Ġoverride Ġval Ġview Game Details Actions Ġ= Ġbroadcast Flow < View Game Params >() ĊĊĠĠĠ Ġoverride Ġval Ġsearch Text Ġ= Ġview Mutable State Flow ("", Ġdebug Name Ġ= Ġ" search Text ") ĊĠĠĠ Ġoverride Ġval Ġmatching Game Ġ= Ġmutable State Flow < Game ? >( null , Ġdebug Name Ġ= Ġ" matching Game ") ĊĊĠĠĠ Ġoverride Ġval Ġfilter Mode Ġ= Ġview Mutable State Flow ( Folder Name Diff Filter Mode . None , Ġdebug Name Ġ= Ġ" filter Mode ") ĊĠĠĠ Ġoverride Ġval Ġpredicate Ġ= Ġmutable State Flow ( Predicate < Folder Name D iffs > Ġ{ Ġtrue Ġ}, Ġdebug Name Ġ= Ġ" predicate ") ĊĊĠĠĠ Ġoverride Ġval Ġrename Move Game Actions Ġ= Ġbroadcast Flow < Rename Move Game Params >() ĊĊĠĠĠ Ġoverride Ġval Ġhide View Actions Ġ= Ġbroadcast Flow < Unit >() ĊĠĠĠ Ġoverride Ġval Ġcustom Navigation Button Ġ= Ġback Button Ġ{ Ġaction ( hide View Actions ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdiff ContextMenu Ġ= Ġobject Ġ: ĠInstall able ContextMenu < Pair < Game , ĠFolder Name Diff >>( Game . Null Ġto ĠFolder Name Diff ("", Ġ"", Ġ"", Ġnull )) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġroot Ġ= Ġv box Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj fx Button (" Rename Ġto ĠExpected ", ĠIcons . folder Edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( rename Move Game Actions ) Ġ{ ĠRename Move Game Params ( data . value . first , Ġinitial Suggestion Ġ= Ġdata . value . second . expected Folder Name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġa Ġ' search Ġonly Ġthis Ġprovider ' Ġoption ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgames View Ġ= Ġpretty ListView ( dif fs Sorted Filtered ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpretty List Cell Ġ{ Ġdiff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Ġ= ĠGame Details Summary Builder ( diff . game ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgame ContextMenu . install ( this ) Ġ{ ĠView Game Params ( selection Model . selected Item . game , Ġdiffs Sorted Filtered . map Ġ{ Ġit . game Ġ}) Ġ} ĊĠĠĠĠĠĠĠ Ġon User Select Ġ{ Ġview Game Details Actions . event ( View Game Params ( selection Model . selected Item . game , Ġdiffs Sorted Filtered . map Ġ{ Ġit . game Ġ})) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġselected Diff Ġ= Ġgames View . selection Model . selected ItemProperty () ĊĠĠĠ Ġprivate Ġval Ġdiffs Of Selected Game Ġ= Ġselected Diff . map ToList Ġ{ Ġit ?. dif fs Ġ?: Ġempty List () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdiffs View Ġ= Ġpretty ListView ( dif fs Of Selected Game ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpretty List Cell Ġ{ Ġdiff Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic Ġ= ĠH Box (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspacing Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Class ( Style . diff Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid pane Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh gap Ġ= Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv gap Ġ= Ġ 3 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack pane Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminWidth Ġ= Ġ 1 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 8 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid pane Constraints Ġ{ Ġrow Span Ġ= Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ+= Ġcommon Ops . provider Logo ( diff . provider Id ). to ImageView ( height Ġ= Ġ 8 0 . 0 , Ġwidth Ġ= Ġ 1 6 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Expected ") Ġ{ Ġgrid pane Constraints Ġ{ Ġcolumn RowIndex ( 1 , Ġ 0 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( diff . expected Folder Name , Ġdiff . patch ?. delt as Ġ?: Ġempty List ()) Ġ{ Ġit . rev ised Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid pane Constraints Ġ{ Ġcolumn RowIndex ( 2 , Ġ 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Actual ") Ġ{ Ġgrid pane Constraints Ġ{ Ġcolumn RowIndex ( 1 , Ġ 1 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( diff . folder Name , Ġdiff . patch ?. delt as Ġ?: Ġempty List ()) Ġ{ Ġit . original Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid pane Constraints Ġ{ Ġcolumn RowIndex ( 2 , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diff . patch Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack pane Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ+= ĠIcons . accept . size ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid pane Constraints Ġ{ Ġcolumn RowIndex ( 3 , Ġ 0 ); Ġrow Span Ġ= Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff ContextMenu . install ( this ) Ġ{ Ġselected Diff . value . game Ġto Ġdiff Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon User Select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrename Move Game Actions . event ( Rename Move Game Params ( selected Diff . value . game , Ġinitial Suggestion Ġ= Ġselection Model . selected Item . expected Folder Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġroot Ġ= Ġh box Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLeft ĊĠĠĠĠĠĠĠ Ġv box Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh grow Ġ= ĠPriority . ALWAYS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġscreen Bounds . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( games View . apply Ġ{ Ġv grow Ġ= ĠPriority . ALWAYS Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgap ( size Ġ= Ġ 1 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRight ĊĠĠĠĠĠĠĠ Ġv box Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh grow Ġ= ĠPriority . ALWAYS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( dif fs View . apply Ġ{ Ġv grow Ġ= ĠPriority . ALWAYS Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister () ĊĊĠĠĠĠĠĠĠ Ġmatching Game . property . type Safe OnChange Ġ{ Ġmatch Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Game ( match ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdiffs Sorted Filtered . filtered Items . predicate Property (). bind ( predicate . property ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Game ( game : ĠGame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgames View . selection Model . select ( dif fs Sorted Filtered . indexOf First Ġ{ Ġit . game . id Ġ== Ġgame . id Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEvent Target . render ( source : ĠString , Ġdelt as : ĠList < Delta < Char >>, Ġchunk Extractor : Ġ( Delta < Char >) Ġ-> ĠChunk < Char >) Ġ= Ġh box Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Class ( Style . diff Text ) ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentIndex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdelt as . sorted By Ġ{ Ġchunk Extractor ( it ). position Ġ}. forEach Ġ{ Ġdelta Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchunk Ġ= Ġchunk Extractor ( delta ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch ( source . substring ( currentIndex , Ġchunk . position )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentIndex Ġ= Ġchunk . position ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff ( source . substring ( currentIndex , ĠcurrentIndex Ġ+ Ġchunk . size ()), Ġdelta . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentIndex Ġ+= Ġchunk . size () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmatch ( source . substring ( currentIndex , Ġsource . length )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEvent Target . match ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġlabel ( text ) Ġ{ Ġadd Class ( Style . match ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEvent Target . diff ( text : ĠString , Ġtype : ĠDelta . TYPE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġlabel ( text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Class ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStyle . diff , Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelta . TYPE . CHANGE Ġ-> ĠStyle . change ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelta . TYPE . DELETE Ġ-> ĠStyle . delete ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelta . TYPE . INSERT Ġ-> ĠStyle . insert ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠH Box . build Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch TextField ( this @ Java Fx Folder Name Diff Screen , Ġsearch Text . property ) Ġ{ Ġis Focus Tra versable Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġgap () ĊĊĠĠĠĠĠĠĠ Ġbutton With Popover ( graphic Ġ= ĠIcons . filter , Ġclose On Action Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Combo Menu ( filter Mode . property , Ġgraphic Ġ= Ġ{ Ġit . icon Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġgap () Ċ // ĠĠĠĠĠĠĠ Ġexclude Button Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( exclude Game Actions ) Ġ{ Ġselected Diff . value !!. game Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtooltip ( selected Diff . string Binding Ġ{ Ġdiff Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Exclude Ġgame Ġ'${ diff ?. game ?. name }' Ġfrom Ġduplicates Ġreport ." Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsp acer () ĊĠĠĠĠĠĠĠ Ġheader ( dif fs Sorted Filtered . size Property . types afe String Binding Ġ{ Ġ" D iffs : Ġ$ it " Ġ}) ĊĠĠĠĠĠĠĠ Ġgap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠFolder Name Diff Filter Mode . icon : ĠNode ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFolder Name Diff Filter Mode . None Ġ-> ĠIcons . accept ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFolder Name Diff Filter Mode . Ignore If Single Match Ġ-> ĠIcons . account ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFolder Name Diff Filter Mode . Ignore If M aj ority Match Ġ-> ĠIcons . accounts ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠStyle Ġ: ĠStyles heet () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Item Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Text Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinsert Ġby Ġcss class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Ġby Ġcss class () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Style sheet Safe ( Style :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Ġ= Ġ" Mono spaced " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 8 . px ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Text Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Ġ= ĠPos . CENTER _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . BOLD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmulti ( Color . OR ANGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmulti ( Color . GREEN YELLOW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġmulti ( Color . IN DIAN RED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }