@@ -160,8 +160,6 @@ public void run()
160160 });
161161
162162 setMenuEnabled (false );
163- //stop.setVisible(false);
164- //stopb.setVisible(false);
165163
166164 final Thread initthread = new Thread ()
167165 {
@@ -397,27 +395,28 @@ public EnigmaSettings getInstance()
397395
398396 public void populateMenu ()
399397 {
400- //stopb = new JButton(); //$NON-NLS-1$
401- //stopb.addActionListener(this);
402- //stopb.setToolTipText(Messages.getString("EnigmaRunner.MENU_STOP"));
403- //stopb.setIcon(LGM.getIconForKey("EnigmaPlugin.STOP"));
404- //LGM.tool.add(stopb, 5);
398+ int toolPos = 4 ; // <- After "Save As" separator.
399+ stopb = new JButton (); //$NON-NLS-1$
400+ stopb .addActionListener (this );
401+ stopb .setToolTipText (Messages .getString ("EnigmaRunner.MENU_STOP" ));
402+ stopb .setIcon (LGM .getIconForKey ("EnigmaPlugin.STOP" ));
403+ LGM .tool .add (stopb , ++toolPos );
405404 runb = new JButton (); //$NON-NLS-1$
406405 runb .addActionListener (this );
407406 runb .setToolTipText (Messages .getString ("EnigmaRunner.MENU_RUN" ));
408407 runb .setIcon (LGM .getIconForKey ("EnigmaPlugin.EXECUTE" ));
409- LGM .tool .add (runb , 5 );
408+ LGM .tool .add (runb , ++ toolPos );
410409 debugb = new JButton (); //$NON-NLS-1$
411410 debugb .addActionListener (this );
412411 debugb .setToolTipText (Messages .getString ("EnigmaRunner.MENU_DEBUG" ));
413412 debugb .setIcon (LGM .getIconForKey ("EnigmaPlugin.DEBUG" ));
414- LGM .tool .add (debugb , 6 );
413+ LGM .tool .add (debugb , ++ toolPos );
415414 compileb = new JButton (); //$NON-NLS-1$
416415 compileb .addActionListener (this );
417416 compileb .setToolTipText (Messages .getString ("EnigmaRunner.MENU_COMPILE" ));
418417 compileb .setIcon (LGM .getIconForKey ("EnigmaPlugin.COMPILE" ));
419- LGM .tool .add (compileb , 7 );
420- LGM .tool .add (new JToolBar .Separator (), 8 );
418+ LGM .tool .add (compileb , ++ toolPos );
419+ LGM .tool .add (new JToolBar .Separator (), ++ toolPos );
421420
422421 JMenu menu = new GmMenu (Messages .getString ("EnigmaRunner.MENU_BUILD" )); //$NON-NLS-1$
423422 menu .setMnemonic ('B' );
@@ -445,11 +444,11 @@ public void populateMenu()
445444 compile .setAccelerator (KeyStroke .getKeyStroke (Messages .getKeyboardString ("EnigmaRunner.COMPILE" )));
446445 menu .add (compile );
447446 menu .addSeparator ();
448- // stop = addItem(Messages.getString("EnigmaRunner.MENU_STOP")); //$NON-NLS-1$
449- // stop.addActionListener(this);
450- // stop.setIcon(LGM.getIconForKey("EnigmaPlugin.STOP"));
451- // stop.setAccelerator(KeyStroke.getKeyStroke(Messages.getKeyboardString("EnigmaRunner.STOP")));
452- // menu.add(stop);
447+ stop = addItem (Messages .getString ("EnigmaRunner.MENU_STOP" )); //$NON-NLS-1$
448+ stop .addActionListener (this );
449+ stop .setIcon (LGM .getIconForKey ("EnigmaPlugin.STOP" ));
450+ stop .setAccelerator (KeyStroke .getKeyStroke (Messages .getKeyboardString ("EnigmaRunner.STOP" )));
451+ menu .add (stop );
453452 rebuild = addItem (Messages .getString ("EnigmaRunner.MENU_REBUILD_ALL" )); //$NON-NLS-1$
454453 rebuild .addActionListener (this );
455454 rebuild .setIcon (LGM .getIconForKey ("EnigmaPlugin.REBUILD_ALL" ));
@@ -631,10 +630,10 @@ public void setMenuEnabled(boolean en)
631630 run .setEnabled (en );
632631 debug .setEnabled (en );
633632 design .setEnabled (en );
634- // stop.setEnabled(!en);
633+ stop .setEnabled (!en );
635634 compile .setEnabled (en );
636635 rebuild .setEnabled (en );
637- // stopb.setEnabled(!en);
636+ stopb .setEnabled (!en );
638637 runb .setEnabled (en );
639638 debugb .setEnabled (en );
640639 compileb .setEnabled (en );
@@ -653,19 +652,22 @@ class CompilerThread extends Thread {
653652 }
654653
655654 public void run () {
656- EnigmaRunner .addDefaultExceptionHandler ();
657- ef .open ();
658- ef .progress (10 ,Messages .getString ("EnigmaRunner.POPULATING" )); //$NON-NLS-1$
659- EnigmaStruct es = EnigmaWriter .prepareStruct (LGM .currentFile ,LGM .root );
660- ef .progress (20 ,Messages .getString ("EnigmaRunner.CALLING" )); //$NON-NLS-1$
661- System .out .println ("Plugin: Delegating to ENIGMA (out of my hands now)" );
662- System .out .println (DRIVER .compileEGMf (es ,efi == null ? null : getUnixPath (efi .getAbsolutePath ()),mode ));
663- setupBaseKeywords ();
664- populateKeywords ();
665-
666- setMenuEnabled (true );
667- //stop.setEnabled(false);
668- //stopb.setEnabled(false);
655+ try {
656+ EnigmaRunner .addDefaultExceptionHandler ();
657+ ef .open ();
658+ ef .progress (10 ,Messages .getString ("EnigmaRunner.POPULATING" )); //$NON-NLS-1$
659+ EnigmaStruct es = EnigmaWriter .prepareStruct (LGM .currentFile ,LGM .root );
660+ if (Thread .currentThread ().isInterrupted ()) return ;
661+ ef .progress (20 ,Messages .getString ("EnigmaRunner.CALLING" )); //$NON-NLS-1$
662+ System .out .println ("Plugin: Delegating to ENIGMA (out of my hands now)" );
663+ System .out .println (DRIVER .compileEGMf (es ,efi == null ? null : getUnixPath (efi .getAbsolutePath ()),mode ));
664+ setupBaseKeywords ();
665+ populateKeywords ();
666+ } finally {
667+ if (!stop .isEnabled ())
668+ ef .progress (0 , Messages .getString ("EnigmaRunner.BUILD_STOPPED" ));
669+ setMenuEnabled (true );
670+ }
669671 }
670672 }
671673
@@ -674,8 +676,6 @@ public void compile(final int mode)
674676 {
675677 if (!assertReady ()) return ;
676678
677- //stop.setEnabled(true);
678- //stopb.setEnabled(true);
679679 EnigmaSettings es = LGM .currentFile .resMap .get (EnigmaSettings .class ).getResource ();
680680
681681 if (es .targets .get (TargetHandler .COMPILER ) == null )
@@ -723,7 +723,6 @@ else if (mode < MODE_DESIGN) //run/debug
723723 outname = new File (outname .getPath ());
724724 }
725725
726- setMenuEnabled (false );
727726 LGM .commitAll ();
728727 //TODO: commit changes, have to do it because it's attached to game settings frame
729728 //and doesn't get told.
@@ -732,12 +731,7 @@ else if (mode < MODE_DESIGN) //run/debug
732731 //System.out.println("Compiling with " + enigma);
733732
734733 cthread = new CompilerThread (mode , outname );
735- try {
736- cthread .join ();
737- } catch (InterruptedException e1 ) {
738- EnigmaRunner .showDefaultExceptionHandler (e1 );
739- }
740- //cthread.run(outname);
734+ setMenuEnabled (false ); // <- stop button needs cthread instance
741735 cthread .start ();
742736
743737 if (mode == MODE_DESIGN ) //design
@@ -768,10 +762,17 @@ public void actionPerformed(ActionEvent e)
768762 {
769763 if (!assertReady ()) return ;
770764 Object s = e .getSource ();
771- //if (s == stop || s == stopb) {
772- // cthread.interrupt();
773- // setMenuEnabled(true);
774- //}
765+ if (s == stop || s == stopb ) {
766+ if (cthread != null ) cthread .interrupt ();
767+ try {
768+ DRIVER .libStopBuild ();
769+ } catch (UnsatisfiedLinkError err ) {
770+ // enigma only added this recently
771+ // sink the error for now
772+ }
773+ stop .setEnabled (false );
774+ stopb .setEnabled (false );
775+ }
775776 if (s == run || s == runb ) compile (MODE_RUN );
776777 if (s == debug || s == debugb ) compile (MODE_DEBUG );
777778 if (s == design ) compile (MODE_DESIGN );
0 commit comments