/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠMark . Ċ Ġ* Ċ Ġ* Ġ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 Ġres aver . gui Ċ Ċ import Ġmf . Bi Int Consumer Ċ import Ġmf . Hex 3 2 Formatter Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Flow Layout Ċ import Ġjava . awt . GridLayout Ċ import Ġjava . awt . event . ActionEvent Ċ import Ġjava . beans . Property ChangeEvent Ċ import Ġjavax . swing .* Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ċ Ġ*/ Ċ class ĠChange Flag Dialog ( parent : ĠSave Window ?, Ġmask : ĠInt , Ġfilter : ĠInt , Ġdone : ĠBi Int Consumer ) Ġ: ĠJ Dialog ( parent , Ġ"", Ġtrue ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm Ġ= Ġmask ĊĠĠĠĠĠĠĠ Ġvar Ġf Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag Ġ= ĠFLAGS [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġm Ġand Ġ 0 x 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġf Ġand Ġ 0 x 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġm Ġ ush r Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf Ġ= Ġf Ġ ush r Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= Ġ" x " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Mask () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Field . value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Illegal Ġmask Ġand / or Ġfield .", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter Field . value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Illegal Ġmask Ġand / or Ġfield .", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġb ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġflag Toggle ( b : ĠJButton ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠlistOf (* FLAGS ). indexOf ( b ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( b . text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLABEL _ X Ġ-> Ġset Flag ( i , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLABEL _ 0 Ġ-> Ġset Flag ( i , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLABEL _ 1 Ġ-> Ġset Flag ( i , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Illegal Ġvalue .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġi ĊĠĠĠĠ Ġ* Ġ@ param Ġval ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Flag ( i : ĠInt , Ġ` val `: ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" button Ġ% d , Ġ% d \ n ", Ġi , Ġ` val `) ĊĠĠĠĠĠĠĠ Ġval Ġflag Ġ= ĠFLAGS [ i ] ĊĠĠĠĠĠĠĠ Ġval Ġclear Bit Ġ= Ġ( 0 x 1 Ġshl Ġi ). inv () ĊĠĠĠĠĠĠĠ Ġval Ġset Bit Ġ= Ġ 0 x 1 Ġshl Ġi ĊĠĠĠĠĠĠĠ Ġwhen Ġ(` val `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġand Ġclear Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter Ġand Ġclear Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= ĠLABEL _ X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġor Ġset Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter Ġand Ġclear Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= ĠLABEL _ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġor Ġset Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter Ġor Ġset Bit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag !!. text Ġ= ĠLABEL _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Illegal Ġflag Ġvalue .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmask Field . value Ġ= Ġmask ĊĠĠĠĠĠĠĠ Ġfilter Field . value Ġ= Ġfilter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ("% 0 8 x Ġ/ Ġ% 0 8 x ", Ġmask , Ġfilter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmask : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġfilter : ĠInt ĊĠĠĠ Ġprivate Ġval Ġmask Field : ĠJ Formatted TextField ĊĠĠĠ Ġprivate Ġval Ġfilter Field : ĠJ Formatted TextField ĊĠĠĠ Ġprivate Ġval ĠFLAGS : ĠArray < JButton ?> Ġ= ĠarrayOf Null s ( 3 2 ) ĊĠĠĠ Ġprivate Ġval ĠFILTER : ĠJButton ĊĠĠĠ Ġprivate Ġval ĠCLEAR : ĠJButton ĊĠĠĠ Ġprivate Ġval ĠCANCEL : ĠJButton ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLABEL _ X Ġ= Ġ" x " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLABEL _ 0 Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLABEL _ 1 Ġ= Ġ" 1 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĊĠĠĠĠ Ġ* Ġ@ param Ġmask ĊĠĠĠĠ Ġ* Ġ@ param Ġfilter ĊĠĠĠĠ Ġ* Ġ@ param Ġdone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mask Ġ= Ġmask ĊĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmask ĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFLAGS [ i ] Ġ= ĠJButton () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmask Field Ġ= ĠJ Formatted TextField ( Hex 3 2 Formatter ()) ĊĠĠĠĠĠĠĠ Ġfilter Field Ġ= ĠJ Formatted TextField ( Hex 3 2 Formatter ()) ĊĠĠĠĠĠĠĠ Ġmask Field . value Ġ= Ġthis . mask ĊĠĠĠĠĠĠĠ Ġfilter Field . value Ġ= Ġthis . filter ĊĠĠĠĠĠĠĠ ĠFILTER Ġ= ĠJButton (" Set ĠFilter ") ĊĠĠĠĠĠĠĠ ĠCLEAR Ġ= ĠJButton (" Clear ") ĊĠĠĠĠĠĠĠ ĠCANCEL Ġ= ĠJButton (" Cancel ") ĊĠĠĠĠĠĠĠ Ġmask Field . columns Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġfilter Field . columns Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġmask Field . addProperty ChangeListener (" value ") Ġ{ Ġe : ĠProperty ChangeEvent ? Ġ-> Ġupdate Mask () Ġ} ĊĠĠĠĠĠĠĠ Ġfilter Field . addProperty ChangeListener (" value ") Ġ{ Ġe : ĠProperty ChangeEvent ? Ġ-> Ġupdate Filter () Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . setLayout ( Border Layout ()) ĊĠĠĠĠĠĠĠ Ġval ĠTOP Ġ= ĠJPanel ( Flow Layout ()) ĊĠĠĠĠĠĠĠ Ġval ĠC ENTER Ġ= ĠJPanel ( GridLayout ( 2 , Ġ 3 2 )) ĊĠĠĠĠĠĠĠ Ġval ĠBOTTOM Ġ= ĠJPanel ( Flow Layout ()) ĊĠĠĠĠĠĠĠ Ġsuper . add ( TOP , ĠBorderLayout . NORTH ) ĊĠĠĠĠĠĠĠ Ġsuper . add ( BOTTOM , ĠBorderLayout . SO UTH ) ĊĠĠĠĠĠĠĠ Ġsuper . add ( CENTER , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠĠĠ ĠTOP . add ( JLabel (" Mask ")) ĊĠĠĠĠĠĠĠ ĠTOP . add ( mask Field ) ĊĠĠĠĠĠĠĠ ĠTOP . add ( JLabel (" Filter ")) ĊĠĠĠĠĠĠĠ ĠTOP . add ( filter Field ) ĊĠĠĠĠĠĠĠ ĠBOTTOM . add ( FILTER ) ĊĠĠĠĠĠĠĠ ĠBOTTOM . add ( CLEAR ) ĊĠĠĠĠĠĠĠ ĠBOTTOM . add ( CANCEL ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC ENTER . add ( JLabel (( 3 1 Ġ- Ġi ). toString (), ĠJLabel . CENTER )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠFLAGS [ 3 1 Ġ- Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC ENTER . add ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb !!. addActionListener Ġ{ Ġe : ĠAction Event Ġ-> Ġflag Toggle ( e . source Ġas ĠJButton ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFILTER . addActionListener Ġ{ Ġe : ĠAction Event ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone . consume ( this . mask , Ġthis . filter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠCANCEL . addActionListener Ġ{ Ġe : ĠAction Event ? Ġ-> Ġthis . isVisible Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ ĠCLEAR . addActionListener Ġ{ Ġe : ĠAction Event ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . mask Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . setDefault Close Operation ( DIS POSE _ ON _ CLOSE ) ĊĠĠĠĠĠĠĠ Ġthis . update () ĊĠĠĠ Ġ} Ċ }