Skip to content
Snippets Groups Projects
Commit bc25a9ab authored by juoksuorava's avatar juoksuorava
Browse files

Lisätty toiminnallisuudet 1-6 tehtävänannosta.

parent 54896997
No related branches found
No related tags found
No related merge requests found
Pipeline #21413 passed
......@@ -3,12 +3,20 @@ package fi.utu.tech.visualnotes.graphics;
import fi.utu.tech.graphics.Point2D;
import fi.utu.tech.visualnotes.graphics.shapes.*;
import fi.utu.tech.visualnotes.graphics.shapes.Shape.ShapeType;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import java.nio.file.Path;
public class MainWindow extends VBox {
......@@ -26,24 +34,71 @@ public class MainWindow extends VBox {
this.stage = stage;
root = new ShapeGraphRoot();
view = new ShapeGraphView(root);
view.setView(0, 0, 500, 500);
canvas = new Canvas(1000, 1000);
color = Color.Black;
view.setView(0, 0, 300, 150);
canvas = new Canvas(600, 300);
color = Color.Red;
shapeToDraw = ShapeType.Line;
setPrefSize(500, 500);
setMaxSize(500,500);
getChildren().addAll(canvas);
setPrefSize(300, 150);
setMaxSize(300,150);
graphicsContext = canvas.getGraphicsContext2D();
//Buttons for the options-menu
ObservableList<Color> colors = FXCollections.observableArrayList(
Color.Red,
Color.Blue,
Color.Green,
Color.Yellow,
Color.Orange,
Color.Black,
Color.White
);
ObservableList<ShapeType> shapes = FXCollections.observableArrayList(
ShapeType.Line,
ShapeType.Oval,
ShapeType.Rectangle
);
ComboBox listOfColors = new ComboBox(colors);
listOfColors.setValue(colors.get(0));
listOfColors.setOnAction(event -> {
color = (Color)listOfColors.getValue();
});
ComboBox listOfShapes = new ComboBox(shapes);
listOfShapes.setValue(shapes.get(0));
listOfShapes.setOnAction(event -> {
shapeToDraw = (ShapeType)listOfShapes.getValue();
});
Button clear = new Button("Clear");
clear.setOnAction(event -> {
graphicsContext.clearRect(0,0,canvas.getWidth(),canvas.getHeight());
root.clear();
});
Button load = new Button("Open file");
load.setOnAction(event -> loadFile());
Button save = new Button("Save file");
save.setOnAction(event -> saveFile());
//Options-menu
VBox options = new VBox(listOfColors, listOfShapes, clear, load, save);
options.setAlignment(Pos.BOTTOM_LEFT);
options.setSpacing(5);
getChildren().addAll(canvas, options);
//Event handlers for drawing
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
startPoint = new Point2D(mouseEvent.getX(),mouseEvent.getY());
}
});
canvas.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
......@@ -70,4 +125,38 @@ public class MainWindow extends VBox {
}
});
}
private void loadFile() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Load from");
File fileSelected = fileChooser.showOpenDialog(stage);
if (fileSelected == null) return;
Path path = fileSelected.toPath();
if (path.toString().endsWith(".vin")) {
graphicsContext.clearRect(0, 0, canvas.getWidth(), getHeight());
new Thread(() -> {
try {
root.load(path);
for (Shape shape : root.contents()) {
shape.render(graphicsContext, view.offset());
}
} catch (Exception e) { e.printStackTrace(); }
}).start();
} else { return; }
}
private void saveFile() {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("vin files (.vin)", "*.vin"));
fileChooser.setTitle("Save to");
File fileSelected = fileChooser.showSaveDialog(stage);
if (fileSelected == null) return;
Path path = fileSelected.toPath();
new Thread(() -> {
try {
root.save(path);
} catch (Exception e) { e.printStackTrace(); }
}).start();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment