diff --git a/pom.xml b/pom.xml
index 6bcf008..a258536 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,7 +117,19 @@
oop.lernquiz.App
+
+ jar-with-dependencies
+
+
+
+ jar-with-dependencies
+ package
+
+ single
+
+
+
maven-install-plugin
diff --git a/src/main/java/oop/lernquiz/controller/FrageErstellenController.java b/src/main/java/oop/lernquiz/controller/FrageErstellenController.java
index 9f52121..9c69a70 100644
--- a/src/main/java/oop/lernquiz/controller/FrageErstellenController.java
+++ b/src/main/java/oop/lernquiz/controller/FrageErstellenController.java
@@ -1,21 +1,56 @@
package oop.lernquiz.controller;
+import oop.lernquiz.model.Antwort;
+import oop.lernquiz.model.Frage;
+import oop.lernquiz.model.Schwierigkeit;
import oop.lernquiz.navigator.Navigator;
+import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties;
+import oop.lernquiz.store.ThemaStore;
import oop.lernquiz.view.FrageErstellenView;
import oop.lernquiz.view.IView;
+import java.util.ArrayList;
+
public class FrageErstellenController extends Controller {
+ private ThemaBearbeitungsProperties props;
+
+ private FrageErstellenController(ThemaBearbeitungsProperties props) {
+ this.props = props;
+ }
+
+ public void weitereErstellen(String[] fragenDaten) {
+ this.frageErstellen(fragenDaten);
+ Navigator.navigateTo("frage-erstellen", this.props);
+ }
- public void weitereErstellen() {
- Navigator.navigateTo("frage-erstellen");
+ public void erstellen(String[] fragenDaten) {
+ this.frageErstellen(fragenDaten);
+ Navigator.navigateTo("thema-bearbeiten", this.props);
}
- public void erstellen() {
- Navigator.navigateTo("thema-bearbeiten");
+ private void frageErstellen(String[] fragenDaten) {
+ var antworten = new ArrayList();
+ for (int i = 2; i < fragenDaten.length; i++) {
+ antworten.add(new Antwort(fragenDaten[i], i == 2));
+ }
+
+ Schwierigkeit schwierigkeit = Schwierigkeit.ALLE;
+ for (Schwierigkeit s : Schwierigkeit.values()) {
+ if (s.name().equals(fragenDaten[1])) {
+ schwierigkeit = s;
+ }
+ }
+ if(schwierigkeit == Schwierigkeit.ALLE) {
+ throw new IllegalArgumentException("Schwierigkeit kann nicht ALLE sein");
+ }
+
+ var frage = new Frage(fragenDaten[0], antworten, schwierigkeit);
+
+ ThemaStore.getInstance().addFrage(this.props.getThema(), frage);
}
public void abbrechen() {
- Navigator.navigateTo("thema-bearbeiten");
+ Navigator.navigateTo("thema-bearbeiten", this.props);
}
@Override
diff --git a/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java b/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java
index e7faef0..53124aa 100644
--- a/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java
+++ b/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java
@@ -1,17 +1,31 @@
package oop.lernquiz.controller;
+import oop.lernquiz.model.Lernkarte;
import oop.lernquiz.navigator.Navigator;
+import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties;
+import oop.lernquiz.store.ThemaStore;
import oop.lernquiz.view.IView;
import oop.lernquiz.view.LernkarteErstellenView;
public class LernkarteErstellenController extends Controller {
+ private ThemaBearbeitungsProperties props;
- public void erstellen() {
- Navigator.goBack();
+ private LernkarteErstellenController(ThemaBearbeitungsProperties props) {
+ this.props = props;
+ }
+
+ public void erstellen(String name, String inhalt) {
+ var lernkarte = new Lernkarte(name, inhalt);
+
+ System.out.println("Lernkarte: " + name);
+
+ ThemaStore.getInstance().addLernkarte(this.props.getThema(), lernkarte);
+
+ Navigator.navigateTo("thema-bearbeiten", this.props);
}
public void abbrechen() {
- Navigator.goBack();
+ Navigator.navigateTo("thema-bearbeiten", this.props);
}
@Override
diff --git a/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java b/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java
index fa60b9e..02054b8 100644
--- a/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java
+++ b/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java
@@ -1,17 +1,23 @@
package oop.lernquiz.controller;
import oop.lernquiz.navigator.Navigator;
+import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties;
import oop.lernquiz.view.IView;
import oop.lernquiz.view.ThemaBearbeitenView;
public class ThemaBearbeitenController extends Controller {
+ private final ThemaBearbeitungsProperties props;
+
+ private ThemaBearbeitenController(ThemaBearbeitungsProperties props) {
+ this.props = props;
+ }
public void frageHinzufuegen() {
- Navigator.navigateTo("frage-erstellen");
+ Navigator.navigateTo("frage-erstellen", this.props);
}
public void lernkarteHinzufuegen() {
- Navigator.navigateTo("lernkarte-erstellen");
+ Navigator.navigateTo("lernkarte-erstellen", this.props);
}
public void abbrechen() {
@@ -22,6 +28,13 @@ public void speichern() {
Navigator.navigateTo("themen");
}
+ @Override
+ public void setView(ThemaBearbeitenView view) {
+ super.setView(view);
+
+ this.view.setFragen(this.props.getThema().getFragen());
+ }
+
@Override
public void setView(IView view) {
}
diff --git a/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java b/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java
index a9ebf7b..7048ec6 100644
--- a/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java
+++ b/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java
@@ -1,6 +1,7 @@
package oop.lernquiz.controller;
import oop.lernquiz.navigator.Navigator;
+import oop.lernquiz.store.ThemaStore;
import oop.lernquiz.view.IView;
import oop.lernquiz.view.ThemaErstellenView;
@@ -11,6 +12,9 @@ public void abbrechen() {
}
public void erstellen(String name) {
+ if(!ThemaStore.getInstance().addThema(name)) {
+ }
+
Navigator.goBack();
}
diff --git a/src/main/java/oop/lernquiz/controller/ThemenController.java b/src/main/java/oop/lernquiz/controller/ThemenController.java
index e9f5b9f..6e940c3 100644
--- a/src/main/java/oop/lernquiz/controller/ThemenController.java
+++ b/src/main/java/oop/lernquiz/controller/ThemenController.java
@@ -2,6 +2,7 @@
import oop.lernquiz.model.Thema;
import oop.lernquiz.navigator.Navigator;
+import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties;
import oop.lernquiz.store.ThemaStore;
import oop.lernquiz.view.IView;
import oop.lernquiz.view.ThemenView;
@@ -10,7 +11,7 @@ public class ThemenController extends Controller {
private ThemenController() {}
public void themaBearbeiten(Thema thema) {
- Navigator.navigateTo("thema-bearbeiten");
+ Navigator.navigateTo("thema-bearbeiten", new ThemaBearbeitungsProperties(thema));
}
public void themaErstellen() {
diff --git a/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java b/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java
index 914c7a2..3a5a147 100644
--- a/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java
+++ b/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java
@@ -33,7 +33,7 @@ public ViewController createViewController(NavigatorProperties properties) {
controllerConstructor.setAccessible(true);
controller = controllerConstructor.newInstance();
} else {
- var controllerConstructor = controllerClass.getDeclaredConstructor(NavigatorProperties.class);
+ var controllerConstructor = controllerClass.getDeclaredConstructor(properties.getClass());
controllerConstructor.setAccessible(true);
controller = controllerConstructor.newInstance(properties);
}
diff --git a/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java b/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java
new file mode 100644
index 0000000..9bc3f3c
--- /dev/null
+++ b/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java
@@ -0,0 +1,15 @@
+package oop.lernquiz.navigator.props;
+
+import oop.lernquiz.model.Thema;
+
+public class ThemaBearbeitungsProperties implements NavigatorProperties {
+ private Thema thema;
+
+ public ThemaBearbeitungsProperties(Thema thema) {
+ this.thema = thema;
+ }
+
+ public Thema getThema() {
+ return thema;
+ }
+}
diff --git a/src/main/java/oop/lernquiz/store/ThemaStore.java b/src/main/java/oop/lernquiz/store/ThemaStore.java
index 54ec461..eb22202 100644
--- a/src/main/java/oop/lernquiz/store/ThemaStore.java
+++ b/src/main/java/oop/lernquiz/store/ThemaStore.java
@@ -122,6 +122,31 @@ public List getThemen() {
return themaList;
}
+ /**
+ * fügt ein Thema hinzu, wenn kein Thema mit dem Namen existiert
+ *
+ * @return true wenn das thema erstellt wurde
+ */
+ public boolean addThema(String name) {
+ for (Thema thema : themaList) {
+ if (thema.getName().equals(name)) {
+ return false;
+ }
+ }
+
+ themaList.add(new Thema(name, ""));
+
+ return true;
+ }
+
+ public void addFrage(Thema thema, Frage frage) {
+ thema.getFragen().add(frage);
+ }
+
+ public void addLernkarte(Thema thema, Lernkarte lernkarte) {
+ thema.getLernkarten().add(lernkarte);
+ }
+
public static ThemaStore getInstance() {
if (instance == null) {
instance = new ThemaStore();
diff --git a/src/main/java/oop/lernquiz/view/FrageErstellenView.java b/src/main/java/oop/lernquiz/view/FrageErstellenView.java
index 95a94bc..406000f 100644
--- a/src/main/java/oop/lernquiz/view/FrageErstellenView.java
+++ b/src/main/java/oop/lernquiz/view/FrageErstellenView.java
@@ -2,11 +2,9 @@
import oop.lernquiz.controller.FrageErstellenController;
import oop.lernquiz.controller.IController;
+import oop.lernquiz.model.Schwierigkeit;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.*;
public class FrageErstellenView extends View {
private Label frageLabel;
@@ -17,6 +15,8 @@ public class FrageErstellenView extends View {
private Label richtigeAntwortLabel;
private Label[] falscheAntwortLabel;
+ private Combo schwierigkeit;
+
protected FrageErstellenView(Composite composite) {
super(composite);
}
@@ -62,20 +62,44 @@ protected void buildUI() {
y += 35;
}
+ var lbl = new Label(composite, SWT.NONE);
+ lbl.setText("Schwierigkeit");
+ lbl.setLocation(25, y);
+ lbl.pack();
+
+ this.schwierigkeit = new Combo(this.composite, SWT.DROP_DOWN | SWT.BORDER);
+ this.schwierigkeit.setLocation(150, y);
+ for (int i = 1; i < Schwierigkeit.values().length; i++) {
+ this.schwierigkeit.add(Schwierigkeit.values()[i].name());
+ }
+ this.schwierigkeit.select(0);
+ this.schwierigkeit.pack();
+
var abbrechen = new Button(composite, 0);
abbrechen.setText("Abbrechen");
abbrechen.setBounds(400, 400, 100, 40);
- abbrechen.addListener(SWT.Selection, ev -> controller.erstellen());
+ abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen());
var erstellen = new Button(composite, 0);
erstellen.setText("Erstellen");
erstellen.setBounds(520, 400, 100, 40);
- erstellen.addListener(SWT.Selection, ev -> controller.erstellen());
+ erstellen.addListener(SWT.Selection, ev -> controller.erstellen(this.fragenDaten()));
var weitereErstellen = new Button(composite, 0);
weitereErstellen.setText("Weitere Erstellen");
weitereErstellen.setBounds(640, 400, 140, 40);
- weitereErstellen.addListener(SWT.Selection, ev -> controller.weitereErstellen());
+ weitereErstellen.addListener(SWT.Selection, ev -> controller.weitereErstellen(this.fragenDaten()));
+ }
+
+ private String[] fragenDaten() {
+ return new String[]{
+ frageText.getText(),
+ schwierigkeit.getText(),
+ richtigeAntwort.getText(),
+ falscheAntwort[0].getText(),
+ falscheAntwort[1].getText(),
+ falscheAntwort[2].getText()
+ };
}
@Override
diff --git a/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java b/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java
index 5c0edab..9115449 100644
--- a/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java
+++ b/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java
@@ -39,16 +39,12 @@ protected void buildUI() {
var abbrechen = new Button(composite, 0);
abbrechen.setText("Abbrechen");
abbrechen.setBounds(540, 400, 100, 40);
- abbrechen.addListener(SWT.Selection, ev -> {
- controller.erstellen();
- });
+ abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen());
var erstellen = new Button(composite, 0);
erstellen.setText("Erstellen");
erstellen.setBounds(680, 400, 100, 40);
- erstellen.addListener(SWT.Selection, ev -> {
- controller.abbrechen();
- });
+ erstellen.addListener(SWT.Selection, ev -> controller.erstellen(name.getText(), inhalt.getText()));
}
@Override
diff --git a/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java b/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java
index 5110c62..0040733 100644
--- a/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java
+++ b/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java
@@ -2,46 +2,97 @@
import oop.lernquiz.controller.IController;
import oop.lernquiz.controller.ThemaBearbeitenController;
+import oop.lernquiz.model.Frage;
import oop.lernquiz.util.ElementCenter;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.*;
+
+import java.util.List;
public class ThemaBearbeitenView extends View {
+ private ScrolledComposite scroll;
+ private Composite fragenListe;
+
protected ThemaBearbeitenView(Composite composite) {
super(composite);
}
@Override
protected void buildUI() {
- var lbl = new Label(composite, SWT.NONE);
- lbl.setText("Thema Bearbeiten");
- ElementCenter.centerElementOnX(lbl, 20);
+ {
+ this.composite.setLayout(new GridLayout(2, false));
+
+ var first = new Composite(this.composite, SWT.NONE);
+ first.setLayout(new GridLayout(1, false));
+ var data = new GridData(SWT.FILL, SWT.FILL, false, true);
+ data.widthHint = 500;
+ data.heightHint = this.composite.getSize().y;
+ first.setLayoutData(data);
+
+ scroll = new ScrolledComposite(first, SWT.V_SCROLL);
+ scroll.setLayout(new GridLayout(1, false));
+ scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ fragenListe = new Composite(scroll, SWT.NONE);
+ fragenListe.setLayout(new GridLayout(2, false));
+ fragenListe.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ }
+ var controls = new Composite(this.composite, SWT.NONE);
+ controls.setLayout(new GridLayout(1, false));
+ var data = new GridData(SWT.FILL, SWT.FILL, false, true);
+ controls.setLayoutData(data);
- var frageErstellen = new Button(composite, 0);
+ var frageErstellen = new Button(controls, 0);
frageErstellen .setText("Frage Erstellen");
frageErstellen .setBounds(640, 120, 140, 40);
frageErstellen .addListener(SWT.Selection, ev -> {
controller.frageHinzufuegen();
});
- var lernkarteErstellen = new Button(composite, 0);
+ var lernkarteErstellen = new Button(controls, 0);
lernkarteErstellen.setText("Lernkarte Erstellen");
lernkarteErstellen.setBounds(640, 200, 140, 40);
lernkarteErstellen.addListener(SWT.Selection, ev -> controller.lernkarteHinzufuegen());
- var abbrechen = new Button(composite, 0);
+ var abbrechen = new Button(controls, 0);
abbrechen.setText("Abbrechen");
abbrechen.setBounds(500, 380, 100, 40);
abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen());
- var speichern = new Button(composite, 0);
+ var speichern = new Button(controls, 0);
speichern.setText("Speichern");
speichern.setBounds(640, 380, 100, 40);
speichern.addListener(SWT.Selection, ev -> controller.speichern());
}
+ public void setFragen(List fragen) {
+ var textData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ textData.widthHint = 200;
+
+ var editData = new GridData(SWT.FILL, SWT.FILL, false, false);
+
+ editData.widthHint = 200;
+ for (var frage : fragen) {
+ var lbl = new Text(fragenListe, SWT.WRAP | SWT.READ_ONLY);
+ lbl.setText(frage.getFrage());
+ lbl.setLayoutData(textData);
+
+ var bearbeiten = new Button(fragenListe, 0);
+ bearbeiten.setText("Bearbeiten");
+ bearbeiten.setLayoutData(editData);
+ }
+
+ scroll.setContent(fragenListe);
+ scroll.setExpandHorizontal(true);
+ scroll.setExpandVertical(true);
+ scroll.setMinSize(fragenListe.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ }
+
@Override
public void setController(IController controller) {
diff --git a/src/main/java/oop/lernquiz/view/ThemenView.java b/src/main/java/oop/lernquiz/view/ThemenView.java
index 4bff442..533ed53 100644
--- a/src/main/java/oop/lernquiz/view/ThemenView.java
+++ b/src/main/java/oop/lernquiz/view/ThemenView.java
@@ -43,14 +43,14 @@ protected void buildUI() {
var erstellen = new Button(composite, 0);
erstellen.setText("Thema Erstellen");
- erstellen.setBounds(680, 200, 100, 40);
+ erstellen.setBounds(660, 200, 120, 40);
erstellen.addListener(SWT.Selection, ev -> {
controller.themaErstellen();
});
var schliessen = new Button(composite, 0);
schliessen.setText("Zurück");
- schliessen.setBounds(680, 400, 100, 40);
+ schliessen.setBounds(660, 400, 120, 40);
schliessen.addListener(SWT.Selection, ev -> {
controller.zurueck();
});