Add Save/Modified display in modeline

This commit is contained in:
Oystein Kristoffer Tveit 2021-02-23 13:30:45 +01:00
parent d4aff39f55
commit 06276bcda1
5 changed files with 49 additions and 4 deletions

View File

@ -8,7 +8,7 @@ import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.stage.Stage; import javafx.stage.Stage;
import app.events.FileSaveStateChangedEvent;
import app.events.LanguageChangedEvent; import app.events.LanguageChangedEvent;
import app.model.Model; import app.model.Model;
@ -59,6 +59,7 @@ public class Main extends Application {
private void setupDefaults() { private void setupDefaults() {
MainController mainController = fxmlLoader.getController(); MainController mainController = fxmlLoader.getController();
mainController.getEventBus().post(new LanguageChangedEvent("Java")); mainController.getEventBus().post(new LanguageChangedEvent("Java"));
mainController.getEventBus().post(new FileSaveStateChangedEvent(true));
} }
/** /**

View File

@ -3,7 +3,6 @@ package app.controllers;
import java.net.URL; import java.net.URL;
import java.util.Collection; import java.util.Collection;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import com.google.common.eventbus.EventBus; import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
@ -16,6 +15,7 @@ import org.fxmisc.richtext.model.TwoDimensional.Position;
import app.events.EditorChangedEvent; import app.events.EditorChangedEvent;
import app.events.LanguageChangedEvent; import app.events.LanguageChangedEvent;
import app.events.FileSaveStateChangedEvent;
import app.model.Model; import app.model.Model;
import app.service.LanguageOperations; import app.service.LanguageOperations;
import javafx.fxml.FXML; import javafx.fxml.FXML;
@ -71,6 +71,10 @@ public class EditorController implements Initializable, Controller {
Position pos = this.editor.offsetToPosition(offset, Bias.Forward); Position pos = this.editor.offsetToPosition(offset, Bias.Forward);
this.eventBus.post(new EditorChangedEvent(pos.getMajor() + 1, pos.getMinor())); this.eventBus.post(new EditorChangedEvent(pos.getMajor() + 1, pos.getMinor()));
if (Model.getFileIsSaved())
this.eventBus.post(new FileSaveStateChangedEvent(false));
this.refreshHighlighting(); this.refreshHighlighting();
} }

View File

@ -8,13 +8,16 @@ import com.google.common.eventbus.Subscribe;
import app.events.EditorChangedEvent; import app.events.EditorChangedEvent;
import app.events.LanguageChangedEvent; import app.events.LanguageChangedEvent;
import app.model.Model; import app.events.FileSaveStateChangedEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label; import javafx.scene.control.Label;
public class ModelineController implements Initializable, Controller { public class ModelineController implements Initializable, Controller {
@FXML
private Label saveState;
@FXML @FXML
private Label columnrow; private Label columnrow;
@ -53,6 +56,15 @@ public class ModelineController implements Initializable, Controller {
this.setColumnRow(event.getColumn(), event.getLineNumber()); this.setColumnRow(event.getColumn(), event.getLineNumber());
} }
/**
* Updates the saveState label whenever the file either is saved or modified
* @param event
*/
@Subscribe
private void handle(FileSaveStateChangedEvent event) {
this.saveState.setText(event.getIsSaved() ? "Saved!" : "Modified");
}
/** /**
* Updates the modeline to display a new language * Updates the modeline to display a new language
* whenever it is changed. * whenever it is changed.

View File

@ -0,0 +1,18 @@
package app.events;
import app.model.Model;
public class FileSaveStateChangedEvent {
private boolean isSaved;
public FileSaveStateChangedEvent(boolean isSaved) {
this.isSaved = isSaved;
Model.setFileIsSaved(isSaved);
}
public boolean getIsSaved() {
return this.isSaved;
}
}

View File

@ -9,6 +9,7 @@ import javafx.scene.Scene;
* by multiple pieces in the application, including the primary scene. * by multiple pieces in the application, including the primary scene.
*/ */
public class Model { public class Model {
private static boolean fileIsSaved;
private static String activeFilePath; private static String activeFilePath;
private static String currentProjectPath; private static String currentProjectPath;
private static ProgrammingLanguage currentProgrammingLanguage; private static ProgrammingLanguage currentProgrammingLanguage;
@ -30,6 +31,10 @@ public class Model {
return scene; return scene;
} }
public static boolean getFileIsSaved() {
return fileIsSaved;
}
public static void setLanguage(ProgrammingLanguage language) { public static void setLanguage(ProgrammingLanguage language) {
Model.currentProgrammingLanguage = language; Model.currentProgrammingLanguage = language;
} }
@ -37,4 +42,9 @@ public class Model {
public static void setScene(Scene scene) { public static void setScene(Scene scene) {
Model.scene = scene; Model.scene = scene;
} }
}
public static void setFileIsSaved(boolean fileIsSaved) {
Model.fileIsSaved = fileIsSaved;
}
}