88import edu .wpi .grip .core .events .ProjectSettingsChangedEvent ;
99import edu .wpi .grip .core .events .TimerEvent ;
1010import edu .wpi .grip .core .events .UnexpectedThrowableEvent ;
11+ import edu .wpi .grip .core .events .WarningEvent ;
1112import edu .wpi .grip .core .serialization .Project ;
1213import edu .wpi .grip .core .settings .AppSettings ;
1314import edu .wpi .grip .core .settings .ProjectSettings ;
3132import java .util .logging .Logger ;
3233
3334import javafx .application .Platform ;
34- import javafx .event .ActionEvent ;
3535import javafx .fxml .FXML ;
3636import javafx .scene .Parent ;
3737import javafx .scene .Scene ;
@@ -275,9 +275,9 @@ protected void quit() {
275275 /**
276276 * Controls the export button in the main menu. Opens a filechooser with language selection.
277277 * The user can select the language to export to, save location and file name.
278- * @param actionEvent Unused event passed by the controller.
279278 */
280- public void generate (ActionEvent actionEvent ) {
279+ @ FXML
280+ public void generate () {
281281 final FileChooser fileChooser = new FileChooser ();
282282 fileChooser .setTitle ("Export to" );
283283 fileChooser .getExtensionFilters ().add (new ExtensionFilter (Language .JAVA .name , "*.java" ));
@@ -290,13 +290,15 @@ public void generate(ActionEvent actionEvent) {
290290 }
291291 Language lang = Language .get (fileChooser .getSelectedExtensionFilter ().getDescription ());
292292 Exporter exporter = new Exporter (pipeline .getSteps (), lang , file );
293- final Set <String > nonExportableSteps = exporter .getNonExportableSteps ();
293+ final Set <String > nonExportableSteps = exporter .getNonExportableStepNames ();
294294 if (!nonExportableSteps .isEmpty ()) {
295- StringBuilder b = new StringBuilder ("The following steps cannot be exported:\n " );
296- nonExportableSteps .forEach (n -> b .append (" " ).append (n ).append ('\n' ));
297- Alert alert = new Alert (Alert .AlertType .WARNING );
298- alert .setContentText (b .toString ());
299- alert .showAndWait ();
295+ StringBuilder b = new StringBuilder (
296+ "The following steps do not support code generation:\n \n "
297+ );
298+ nonExportableSteps .stream ()
299+ .sorted ()
300+ .forEach (n -> b .append (" - " ).append (n ).append ("\n " ));
301+ eventBus .post (new WarningEvent ("Cannot generate code" , b .toString ()));
300302 return ;
301303 }
302304 Thread exportRunner = new Thread (exporter );
@@ -325,7 +327,20 @@ protected void deploy() {
325327 }
326328
327329 @ Subscribe
328- @ SuppressWarnings ( {"PMD.UnusedPrivateMethod" , "PMD.UnusedFormalParameter" })
330+ public void onWarningEvent (WarningEvent e ) {
331+ if (Platform .isFxApplicationThread ()) {
332+ showWarningAlert (e );
333+ } else {
334+ Platform .runLater (() -> showWarningAlert (e ));
335+ }
336+ }
337+
338+ private void showWarningAlert (WarningEvent e ) {
339+ Alert alert = new WarningAlert (e .getHeader (), e .getBody (), root .getScene ().getWindow ());
340+ alert .showAndWait ();
341+ }
342+
343+ @ SuppressWarnings ({"PMD.UnusedPrivateMethod" , "PMD.UnusedFormalParameter" })
329344 private void runStopped (TimerEvent event ) {
330345 if (event .getTarget () instanceof PipelineRunner ) {
331346 Platform .runLater (() -> updateElapsedTimeLabel (event .getElapsedTime ()));
0 commit comments