package Ġcom . ac mer obot ics . road runner . plugin Ċ Ċ import Ġcom . ac mer obot ics . road runner . gui . Main Panel Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġjava . awt . event . KeyEvent Ċ import Ġjava . awt . event . Key Listener Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files Ċ import Ġjavax . swing .* Ċ Ċ /** Ċ Ġ* ĠMain Ġwindow Ġfor ĠIntelliJ Ġplugin . Ċ Ġ*/ Ċ class ĠPath Designer Panel ( private Ġval Ġproject : ĠProject ) Ġ: ĠJPanel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmodule Manager Ġ= ĠModule Manager . getInstance ( project ) ĊĊĠĠĠ Ġprivate Ġval Ġmodule ComboBox Ġ= ĠJ ComboBox < String >() ĊĠĠĠ Ġprivate Ġval Ġtrajectory ComboBox Ġ= ĠJ ComboBox < String >() ĊĊĠĠĠ Ġprivate Ġval Ġtrajectory Name Field Ġ= ĠJTextField () ĊĊĠĠĠ Ġprivate Ġval Ġmain Panel Ġ= ĠMain Panel () ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Module : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Trajectory : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġcombo Box Module : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule ComboBox . selected Item Ġas ĠString ? ĊĊĠĠĠ Ġprivate Ġval Ġcombo Box Trajectory : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrajectory ComboBox . selected Item Ġas ĠString ? ĊĊĠĠĠ Ġprivate Ġvar Ġdirty : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġsave Button Ġ= ĠJButton (" Save ") ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Layout Ġ= ĠGroup Layout ( this ) ĊĠĠĠĠĠĠĠ Ġlayout Ġ= Ġgroup Layout ĊĊĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= Ġmodule Manager . modules ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . module FilePath . startsWith ( project . basePath !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name Ġ!= Ġproject . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule Label Ġ= ĠJLabel (" Module ", ĠSw ing Constants . RIGHT ) ĊĠĠĠĠĠĠĠ Ġmodule ComboBox . model Ġ= ĠDefault ComboBox Model ( modules . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġmodule ComboBox . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Module Ġ!= Ġcombo Box Module Ġ&& Ġ(! dirty Ġ|| Ġsave Prompt ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Module Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Module Selection () ĊĠĠĠĠĠĠĠ Ġval Ġph antom Label Ġ= ĠJLabel () ĊĊĠĠĠĠĠĠĠ Ġval Ġtrajectory Label Ġ= ĠJLabel (" Trajectory ", ĠSw ing Constants . RIGHT ) ĊĠĠĠĠĠĠĠ Ġtrajectory ComboBox . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Trajectory Ġ!= Ġcombo Box Trajectory Ġ&& Ġ(! dirty Ġ|| Ġsave Prompt ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĊĠĠĠĠĠĠĠ Ġval Ġadd Button Ġ= ĠJButton (" Add ") ĊĠĠĠĠĠĠĠ Ġadd Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! dirty Ġ|| Ġsave Prompt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Trajectory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrajectory Name Field . add Key Listener ( object Ġ: ĠKey Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkey Typed ( e : ĠKeyEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkey Pressed ( e : ĠKeyEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkey Released ( e : ĠKeyEvent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmark Dirty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsave Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Current Trajectory () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdelete Button Ġ= ĠJButton (" Delete ") ĊĠĠĠĠĠĠĠ Ġdelete Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Current Trajectory () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain Panel . on Trajectory Update Listener Ġ= Ġ{ Ġmark Dirty () Ġ} ĊĊĠĠĠĠĠĠĠ Ġgroup Layout . auto Create G aps Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġgroup Layout . auto Create Container G aps Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġgroup Layout . set Vertical Group ( group Layout . createSequentialGroup () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createParallelGroup ( GroupLayout . Alignment . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( module Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( module ComboBox ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( phantom Label )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createParallelGroup ( GroupLayout . Alignment . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory ComboBox ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( add Button )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createParallelGroup ( GroupLayout . Alignment . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory Name Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( save Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( delete Button )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( main Panel )) ĊĊĠĠĠĠĠĠĠ Ġgroup Layout . setHorizontal Group ( group Layout . createParallelGroup ( GroupLayout . Alignment . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createSequentialGroup () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( module Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( module ComboBox ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( phantom Label )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createSequentialGroup () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory ComboBox ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( add Button )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addGroup ( group Layout . createSequentialGroup () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( trajectory Name Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( save Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( delete Button )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent ( main Panel )) ĊĊĠĠĠĠĠĠĠ Ġgroup Layout . link Size ( module Label , Ġtrajectory Label ) ĊĠĠĠĠĠĠĠ Ġgroup Layout . link Size ( module ComboBox , Ġtrajectory ComboBox , Ġtrajectory Name Field ) ĊĠĠĠĠĠĠĠ Ġgroup Layout . link Size ( phantom Label , Ġadd Button ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Current Trajectory () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Trajectory Ġ= Ġcombo Box Trajectory Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġget Trajectory Assets Dir ( comboBox Module ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( trajectory Name Field . text . isEmpty () Ġ|| Ġtrajectory Name Field . text Ġ== Ġcombo Box Trajectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Panel . save ( File ( dir , Ġ"$ comboBox Trajectory . yaml ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Trajectory Ġ= Ġtrajectory Name Field . text ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir . to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold File Ġ= ĠFile ( dir , Ġ"$ comboBox Trajectory . yaml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew File Ġ= ĠFile ( dir , Ġ"$ new Trajectory . yaml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Panel . save ( new File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtra ject ories Ġ= Ġlist Trajectory Assets ( comboBox Module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġif Ġ( it Ġ== Ġcombo Box Trajectory ) Ġnew Trajectory Ġelse Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrajectory ComboBox . model Ġ= ĠDefault ComboBox Model ( tra ject ories . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrajectory ComboBox . selectedIndex Ġ= Ġtra ject ories . indexOf ( new Trajectory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmark Clean () ĊĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Unt itled Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn Ġ" unt itled " ĊĠĠĠĠĠĠĠ Ġval Ġtra ject ories Ġ= Ġlist Trajectory Assets ( comboBox Module ). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġ" unt itled " ĊĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġprefix ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ! in Ġtra ject ories ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ"$ prefix $ i " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Trajectory ( name Arg : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtra ject ories Ġ= Ġlist Trajectory Assets ( comboBox Module ). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġname Arg Ġ?: Ġnext Unt itled Name () ĊĠĠĠĠĠĠĠ Ġtra ject ories . add ( name ) ĊĠĠĠĠĠĠĠ Ġtra ject ories . sort () ĊĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġget Trajectory Assets Dir ( comboBox Module ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir . to Path ()) ĊĠĠĠĠĠĠĠ Ġmain Panel . save ( File ( dir , Ġ"$ name . yaml ")) ĊĊĠĠĠĠĠĠĠ Ġmark Clean () ĊĊĠĠĠĠĠĠĠ Ġtrajectory ComboBox . model Ġ= ĠDefault ComboBox Model ( tra ject ories . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġtrajectory ComboBox . selectedIndex Ġ= Ġtra ject ories . indexOf ( name ) ĊĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Current Trajectory () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Trajectory Ġ= Ġcombo Box Trajectory Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtrajectory File Ġ= ĠFile ( get Trajectory Assets Dir ( comboBox Module ), Ġ"$ comboBox Trajectory . yaml ") ĊĠĠĠĠĠĠĠ Ġtrajectory File . delete () ĊĠĠĠĠĠĠĠ Ġval Ġtra ject ories Ġ= Ġlist Trajectory Assets ( comboBox Module ). filter Ġ{ Ġit Ġ!= Ġcombo Box Trajectory Ġ} ĊĠĠĠĠĠĠĠ Ġtrajectory ComboBox . model Ġ= ĠDefault ComboBox Model ( tra ject ories . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Module Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Module Ġ== Ġcombo Box Module ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtra ject ories Ġ= Ġlist Trajectory Assets ( comboBox Module ) ĊĠĠĠĠĠĠĠ Ġtrajectory ComboBox . model Ġ= ĠDefault ComboBox Model ( tra ject ories . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġupdate Trajectory Selection () ĊĠĠĠĠĠĠĠ Ġcurrent Module Ġ= Ġcombo Box Module ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Trajectory Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Trajectory Ġ== Ġcombo Box Trajectory ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Module Ġ= Ġcombo Box Module Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcombo Box Trajectory Ġ= Ġcombo Box Trajectory ĊĠĠĠĠĠĠĠ Ġif Ġ( comboBox Trajectory Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrajectory Name Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Panel . load ( File ( get Trajectory Assets Dir ( comboBox Module ), Ġ"$ comboBox Trajectory . yaml ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrajectory Name Field . text Ġ= Ġcombo Box Trajectory ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmark Clean () ĊĠĠĠĠĠĠĠ Ġcurrent Trajectory Ġ= Ġcombo Box Trajectory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Trajectory Assets ( module String : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrajectory Assets Dir Ġ= Ġget Trajectory Assets Dir ( module String ) Ġ?: Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠ Ġif Ġ( trajectory Assets Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrajectory Assets Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. list Files Ġ{ Ġ_, Ġname Ġ-> Ġname . endsWith (". yaml ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Without Extension Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Trajectory Assets Dir ( module String : ĠString ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġmodule Manager . modules . first OrNull Ġ{ Ġit . name Ġ== Ġmodule String Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmodule File Ġ= ĠFile ( module . module FilePath ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( module File . parent , Ġ" src / main / assets / trajectory ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmark Dirty () Ġ{ ĊĠĠĠĠĠĠĠ Ġdirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsave Button . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmark Clean () Ġ{ ĊĠĠĠĠĠĠĠ Ġdirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsave Button . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Prompt (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠJOptionPane . show Confirm Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Save Ġthe Ġcurrent Ġtrajectory ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Un saved ĠChanges ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . YES _ NO _ OPTION ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . YES _ OPTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Current Trajectory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ