diff --git a/src/main/java/app/Main.java b/src/main/java/app/Main.java
index 2ea0f76..f2ee58e 100644
--- a/src/main/java/app/Main.java
+++ b/src/main/java/app/Main.java
@@ -2,8 +2,6 @@ package app;
import java.io.IOException;
-import com.google.common.eventbus.EventBus;
-
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
@@ -13,8 +11,6 @@ import javafx.stage.Stage;
public class Main extends Application {
- EventBus eventBus;
-
/**
* Boilerplate function to launch the application
*/
@@ -38,7 +34,11 @@ public class Main extends Application {
try {
document = fxmlLoader.load();
} catch (IOException e) {
- throw new RuntimeException(e);
+ System.err.println(e);
+ throw new RuntimeException(
+ "Couldn\'t find or missing permissions to load "
+ + getClass().getResource("/fxml/Main.fxml")
+ );
}
Scene scene = new Scene(document);
@@ -46,7 +46,4 @@ public class Main extends Application {
window.show();
}
- public EventBus getEventBus() {
- return this.eventBus;
- }
}
diff --git a/src/main/java/app/MainController.java b/src/main/java/app/MainController.java
index 78cef22..5aeb26d 100644
--- a/src/main/java/app/MainController.java
+++ b/src/main/java/app/MainController.java
@@ -1,15 +1,49 @@
package app;
import java.net.URL;
+import java.util.List;
import java.util.ResourceBundle;
+import com.google.common.eventbus.EventBus;
+
+import app.controllers.*;
import app.model.Model;
+import javafx.fxml.FXML;
import javafx.fxml.Initializable;
public class MainController implements Initializable {
+ @FXML
+ private EditorController editorController;
+
+ @FXML
+ private FiletreeController filetreeController;
+
+ @FXML
+ private ModelineController modelineController;
+
+ @FXML
+ private MenubarController menubarController;
+
+ private EventBus eventBus;
private Model model;
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ this.eventBus = new EventBus();
+
+ List.of(
+ editorController,
+ filetreeController,
+ modelineController,
+ menubarController
+ ).forEach(c -> c.setEventBus(this.eventBus));
+ }
+
+ public EventBus getEventBus() {
+ return this.eventBus;
+ }
+
/**
* Links the controller to the global model
* @param model The model to be linked
@@ -18,11 +52,4 @@ public class MainController implements Initializable {
this.model = model;
}
- /**
- * Initializes and customizes the properties of the javafx objects.
- */
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- //
- }
}
\ No newline at end of file
diff --git a/src/main/java/app/controllers/Controller.java b/src/main/java/app/controllers/Controller.java
new file mode 100644
index 0000000..ca86193
--- /dev/null
+++ b/src/main/java/app/controllers/Controller.java
@@ -0,0 +1,14 @@
+package app.controllers;
+
+import com.google.common.eventbus.EventBus;
+
+/**
+ * Interface to make a controller that contains an EventBus
+ */
+public interface Controller {
+ /**
+ * Registers the main EventBus into the controller.
+ * @param eventBus the main EventBus
+ */
+ public void setEventBus(EventBus eventBus);
+}
diff --git a/src/main/java/app/controllers/EditorController.java b/src/main/java/app/controllers/EditorController.java
index 3b80dcb..323dccb 100644
--- a/src/main/java/app/controllers/EditorController.java
+++ b/src/main/java/app/controllers/EditorController.java
@@ -3,21 +3,38 @@ package app.controllers;
import java.net.URL;
import java.util.ResourceBundle;
+import com.google.common.eventbus.EventBus;
+
import org.fxmisc.richtext.CodeArea;
import org.fxmisc.richtext.LineNumberFactory;
+import org.fxmisc.richtext.model.TwoDimensional.Bias;
+import org.fxmisc.richtext.model.TwoDimensional.Position;
+import app.events.EditorChangedEvent;
import app.model.Model;
-import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
+import javafx.scene.input.KeyEvent;
-public class EditorController implements Initializable {
+public class EditorController implements Initializable, Controller {
@FXML
private CodeArea editor;
+ private EventBus eventBus;
private Model model;
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ editor.setParagraphGraphicFactory(LineNumberFactory.get(editor));
+ }
+
+ @Override
+ public void setEventBus(EventBus eventBus) {
+ this.eventBus = eventBus;
+ this.eventBus.register(this);
+ }
+
/**
* Links the controller to the global model
* @param model The model to be linked
@@ -26,21 +43,20 @@ public class EditorController implements Initializable {
this.model = model;
}
- /**
- * Initializes and customizes the properties of the javafx objects.
- */
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- editor.setParagraphGraphicFactory(LineNumberFactory.get(editor));
- }
-
/**
* Handles events from the editor, and reflects them in the model
* @param event The object containing metadata of the event
*/
@FXML
- public void editorChanged(ActionEvent event) {
- //
+ public void editorChanged(KeyEvent event) {
+ int offset = this.editor.getCaretPosition();
+ Position pos = this.editor.offsetToPosition(offset, Bias.Forward);
+ this.eventBus.post(
+ new EditorChangedEvent(
+ event.getCode(),
+ pos.getMajor() + 1,
+ pos.getMinor()
+ ));
}
}
diff --git a/src/main/java/app/controllers/FiletreeController.java b/src/main/java/app/controllers/FiletreeController.java
index 159f3ee..70303f3 100644
--- a/src/main/java/app/controllers/FiletreeController.java
+++ b/src/main/java/app/controllers/FiletreeController.java
@@ -6,15 +6,27 @@ import javafx.scene.control.TreeView;
import java.net.URL;
import java.util.ResourceBundle;
+import com.google.common.eventbus.EventBus;
+
import app.model.Model;
import javafx.fxml.Initializable;
-public class FiletreeController implements Initializable {
+public class FiletreeController implements Initializable, Controller {
- // TODO: Add component references, and event handlers
-
+ private EventBus eventBus;
private Model model;
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ // TODO: implement
+ }
+
+ @Override
+ public void setEventBus(EventBus eventBus) {
+ this.eventBus = eventBus;
+ this.eventBus.register(this);
+ }
+
/**
* Links the controller to the global model
* @param model The model to be linked
@@ -23,12 +35,4 @@ public class FiletreeController implements Initializable {
this.model = model;
}
- /**
- * Initializes and customizes the properties of the javafx objects.
- */
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- // TODO: implement
- }
-
}
diff --git a/src/main/java/app/controllers/MenubarController.java b/src/main/java/app/controllers/MenubarController.java
index 5c8e14d..d849f0f 100644
--- a/src/main/java/app/controllers/MenubarController.java
+++ b/src/main/java/app/controllers/MenubarController.java
@@ -3,15 +3,27 @@ package app.controllers;
import java.net.URL;
import java.util.ResourceBundle;
+import com.google.common.eventbus.EventBus;
+
import app.model.Model;
import javafx.fxml.Initializable;
-public class MenubarController implements Initializable {
+public class MenubarController implements Initializable, Controller {
- // TODO: Add component references, and event handlers
-
+ private EventBus eventBus;
private Model model;
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ // TODO: implement
+ }
+
+ @Override
+ public void setEventBus(EventBus eventBus) {
+ this.eventBus = eventBus;
+ this.eventBus.register(this);
+ }
+
/**
* Links the controller to the global model
* @param model The model to be linked
@@ -20,12 +32,5 @@ public class MenubarController implements Initializable {
this.model = model;
}
- /**
- * Initializes and customizes the properties of the javafx objects.
- */
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- // TODO: implement
- }
}
diff --git a/src/main/java/app/controllers/ModelineController.java b/src/main/java/app/controllers/ModelineController.java
index 6bf11b7..459eba6 100644
--- a/src/main/java/app/controllers/ModelineController.java
+++ b/src/main/java/app/controllers/ModelineController.java
@@ -3,15 +3,37 @@ package app.controllers;
import java.net.URL;
import java.util.ResourceBundle;
+import com.google.common.eventbus.EventBus;
+import com.google.common.eventbus.Subscribe;
+
+import app.events.EditorChangedEvent;
import app.model.Model;
+import javafx.fxml.FXML;
import javafx.fxml.Initializable;
+import javafx.scene.control.Label;
-public class ModelineController implements Initializable {
+public class ModelineController implements Initializable, Controller {
- // TODO: Add component references, and event handlers
+ @FXML
+ private Label columnrow;
+ @FXML
+ private Label language;
+
+ private EventBus eventBus;
private Model model;
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ setColumnRow(0, 1);
+ }
+
+ @Override
+ public void setEventBus(EventBus eventBus) {
+ this.eventBus = eventBus;
+ this.eventBus.register(this);
+ }
+
/**
* Links the controller to the global model
* @param model The model to be linked
@@ -21,11 +43,17 @@ public class ModelineController implements Initializable {
}
/**
- * Initializes and customizes the properties of the javafx objects.
+ * Update the colum row counter
+ * @param column The column number
+ * @param row The row number
*/
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- // TODO: implement
+ public void setColumnRow(int column, int row) {
+ this.columnrow.setText(String.format("[%d:%d]", row, column));
}
-}
+ @Subscribe
+ public void handle(EditorChangedEvent event) {
+ System.out.println("Key pressed: " + event.getKeyCode());
+ this.setColumnRow(event.getColumn(), event.getLineNumber());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/app/events/EditorChangedEvent.java b/src/main/java/app/events/EditorChangedEvent.java
new file mode 100644
index 0000000..b85e8d9
--- /dev/null
+++ b/src/main/java/app/events/EditorChangedEvent.java
@@ -0,0 +1,29 @@
+package app.events;
+
+import javafx.scene.input.KeyCode;
+
+public class EditorChangedEvent implements Event {
+
+ private KeyCode keyCode;
+ private int lineNumber;
+ private int column;
+
+ public EditorChangedEvent(KeyCode keyCode, int lineNumber, int column) {
+ this.keyCode = keyCode;
+ this.lineNumber = lineNumber;
+ this.column = column;
+ }
+
+ public KeyCode getKeyCode() {
+ return this.keyCode;
+ }
+
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ public int getColumn() {
+ return column;
+ }
+
+}
diff --git a/src/main/java/app/events/Event.java b/src/main/java/app/events/Event.java
new file mode 100644
index 0000000..f7ca520
--- /dev/null
+++ b/src/main/java/app/events/Event.java
@@ -0,0 +1,3 @@
+package app.events;
+
+interface Event {}
diff --git a/src/main/resources/fxml/Main.fxml b/src/main/resources/fxml/Main.fxml
index 91da24f..d7bc4ff 100644
--- a/src/main/resources/fxml/Main.fxml
+++ b/src/main/resources/fxml/Main.fxml
@@ -2,6 +2,7 @@
+
-
+
@@ -23,10 +24,10 @@
-
+
-
+
@@ -34,7 +35,7 @@
-
+
diff --git a/src/main/resources/fxml/components/Editor.fxml b/src/main/resources/fxml/components/Editor.fxml
index 4774175..48751e3 100644
--- a/src/main/resources/fxml/components/Editor.fxml
+++ b/src/main/resources/fxml/components/Editor.fxml
@@ -9,6 +9,6 @@
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="app.controllers.EditorController">
-
+
\ No newline at end of file