diff --git a/src/Main.java b/src/Main.java index fa99761..84ec8dc 100644 --- a/src/Main.java +++ b/src/Main.java @@ -7,12 +7,14 @@ public static void main(String[] args) { Main main = new Main(); - SimpleUIWindow window = new SimpleUIWindow(main); } public Main() { + SimpleUIWindow window = new SimpleUIWindow(this); + SwingPresenter presenter = window.getPresenter(); this.screenTemplates = new ScreenTemplates(curScreen); + this.screen = new Screen(screenTemplates, true, curScreen, presenter); this.curScreen = new CurScreen(screen, screenTemplates); - this.screen = new Screen(screenTemplates, true, curScreen); + changeCurScreen("000"); } public Map getWidget(String wid) { return this.screen.getWidgets().getWidget(wid).getValue(); @@ -26,7 +28,7 @@ public Map getWidget1(String scId, String wid) { return this.screenTemplates.getScreenTemplate(scId).getWidgets1().getWidget1(wid).getValue(); } - public Map getWidgets1(String scId) { + public Map getWidgets1(String scId) { return this.screenTemplates.getScreenTemplate(scId).getWidgets1().getValue(); } public Map getScreenTemplates() { diff --git a/src/Screen.java b/src/Screen.java index 0c80c60..6f389fe 100644 --- a/src/Screen.java +++ b/src/Screen.java @@ -4,10 +4,12 @@ private ScreenTemplates screenTemplates; private Widgets widgets; private boolean layout; - public Screen(ScreenTemplates screenTemplates, boolean layout, CurScreen curScreen) { + private SwingPresenter presenter; + public Screen(ScreenTemplates screenTemplates, boolean layout, CurScreen curScreen, SwingPresenter presenter) { this.screenTemplates = screenTemplates; this.layout = layout; this.widgets = new Widgets(screenTemplates, curScreen); + this.presenter = presenter; } public Map getValue() { Map temp_nil3 = new HashMap<>(); @@ -30,5 +32,6 @@ } public void updateFromCurScreen(String curScreen, Map value) { setValue(value); + presenter.screenUpdate(value); } } \ No newline at end of file diff --git a/src/ScreenTemplate.java b/src/ScreenTemplate.java index b6ddac0..ee57320 100644 --- a/src/ScreenTemplate.java +++ b/src/ScreenTemplate.java @@ -3,17 +3,23 @@ public class ScreenTemplate { private CurScreen curScreen; private Widgets1 widgets; + private boolean layout; public Map getValue() { Map temp_nil1 = new HashMap<>(); temp_nil1.put("widgets",this.widgets.getValue()); + temp_nil1.put("layout",this.getLayout()); return temp_nil1; } public void setValue(Map value) { widgets.setValue((Map) value.get("widgets")); + layout = (boolean) value.get("layout"); } public Widgets1 getWidgets1() { return this.widgets; } + public boolean getLayout() { + return layout; + } public ScreenTemplate(CurScreen curScreen) { this.curScreen = curScreen; this.widgets = new Widgets1(this.curScreen); diff --git a/src/ScreenTemplates.java b/src/ScreenTemplates.java index b013be6..d99665e 100644 --- a/src/ScreenTemplates.java +++ b/src/ScreenTemplates.java @@ -14,7 +14,7 @@ "text", "Next", "state", 0, "visible", true)), - "visible", true)); + "layout", true)); value.put("000", screenTemplate_tmp000); ScreenTemplate screenTemplate_tmp001 = new ScreenTemplate(curScreen); screenTemplate_tmp001.setValue(Map.of("widgets", Map.of("003", Map.of("type", "label", @@ -25,7 +25,7 @@ "text", "Back", "state", 0, "visible", true)), - "visible", true)); + "layout", true)); value.put("001", screenTemplate_tmp001); } public Map getValue() { diff --git a/src/SimpleUIWindow.java b/src/SimpleUIWindow.java index 4910354..84cfaf1 100644 --- a/src/SimpleUIWindow.java +++ b/src/SimpleUIWindow.java @@ -2,10 +2,22 @@ public class SimpleUIWindow extends JFrame { private Main main; + private JPanel mainPanel; + public SwingPresenter presenter; public SimpleUIWindow(Main main) { this.main = main; + + mainPanel = new JPanel(); + this.add(mainPanel); + presenter = new SwingPresenter(main, mainPanel); + + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(870, 640); setVisible(true); } + + public SwingPresenter getPresenter() { + return presenter; + } } diff --git a/src/SwingPresenter.java b/src/SwingPresenter.java new file mode 100644 index 0000000..58057a4 --- /dev/null +++ b/src/SwingPresenter.java @@ -0,0 +1,80 @@ +import javax.swing.*; +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +public class SwingPresenter { + private Main main; + private JPanel mainPanel; + protected Map components = new HashMap<>(); + + public SwingPresenter(Main main, JPanel mainPanel) { + this.main = main; + this.mainPanel = mainPanel; + } + + public void screenUpdate(Map value) { + mainPanel.removeAll(); + Map widgets = (Map) value.get("widgets"); + boolean layout = (boolean) value.get("layout"); + if (layout) { + mainPanel.setLayout(new FlowLayout()); + for (String key : widgets.keySet()) { + String type = (String) ((Map) widgets.get(key)).get("type"); + String text = (String) ((Map) widgets.get(key)).get("text"); + boolean visible = (boolean) ((Map) widgets.get(key)).get("visible"); + int state = (int) ((Map) widgets.get(key)).get("state"); + if (type.equals("textInput")) { + JTextField textField = new JTextField(10); + mainPanel.add(textField); + components.put(key, textField); + } else if (type.equals("label")) { + JLabel label = new JLabel(text); + mainPanel.add(label); + components.put(key, label); + } else if (type.equals("button")) { + JButton button = new JButton(text); + button.setSize(100, 20); + mainPanel.add(button); + components.put(key, button); + } else if (type.equals("table")) { + + } + } + } else { + mainPanel.setLayout(null); + for (String key : widgets.keySet()) { + String type = (String) ((Map) widgets.get(key)).get("type"); + int y = (int) ((Map) widgets.get(key)).get("y"); + int x = (int) ((Map) widgets.get(key)).get("x"); + int height = (int) ((Map) widgets.get(key)).get("height"); + String text = (String) ((Map) widgets.get(key)).get("text"); + boolean visible = (boolean) ((Map) widgets.get(key)).get("visible"); + int width = (int) ((Map) widgets.get(key)).get("width"); + int state = (int) ((Map) widgets.get(key)).get("state"); + if (type.equals("textInput")) { + JTextField textField = new JTextField(10); + textField.setLocation(x, y); + textField.setSize(width, height); + mainPanel.add(textField); + components.put(key, textField); + } else if (type.equals("label")) { + JLabel label = new JLabel(text); + label.setLocation(x, y); + label.setSize(width, height); + mainPanel.add(label); + components.put(key, label); + } else if (type.equals("button")) { + JButton button = new JButton(text); + button.setLocation(x, y); + button.setSize(width, height); + } else if (type.equals("table")) { + + } + } + } + mainPanel.invalidate(); + mainPanel.validate(); + mainPanel.repaint(); + } +} diff --git a/src/Widget.java b/src/Widget.java index d20581d..7e65f98 100644 --- a/src/Widget.java +++ b/src/Widget.java @@ -2,6 +2,7 @@ public class Widget { private CurScreen curScreen; + private String type; private int y; private boolean visible; private int height; @@ -13,6 +14,7 @@ private int state; public Map getValue() { Map temp_nil0 = new HashMap<>(); + temp_nil0.put("type",this.getType()); temp_nil0.put("y",this.getY()); temp_nil0.put("x",this.getX()); temp_nil0.put("height",this.getHeight()); @@ -22,6 +24,9 @@ temp_nil0.put("state",this.getState()); return temp_nil0; } + public String getType() { + return type; + } public int getY() { return this.y; } @@ -57,7 +62,8 @@ this.widget1 = screenTemplates.getScreenTemplate(curScreen.getValue()).getWidgets1().getWidget1(wid); this.widget1.updateStateFromState(wid, wid, wid, this.state, curScreen.getValue()); } - public Widget(boolean visible, ScreenTemplates screenTemplates, int width, int x, int y, String text, int state, int height, CurScreen curScreen) { + public Widget(String type, boolean visible, ScreenTemplates screenTemplates, int width, int x, int y, String text, int state, int height, CurScreen curScreen) { + this.type = type; this.visible = visible; this.screenTemplates = screenTemplates; this.width = width; diff --git a/src/Widget1.java b/src/Widget1.java index 73a2b32..2d87115 100644 --- a/src/Widget1.java +++ b/src/Widget1.java @@ -2,6 +2,7 @@ public class Widget1 { private CurScreen curScreen; + private String type; private int y; private boolean visible; private int height; @@ -11,6 +12,7 @@ private int state; public Map getValue() { Map temp_nil2 = new HashMap<>(); + temp_nil2.put("type",this.getType()); temp_nil2.put("y",this.getY()); temp_nil2.put("x",this.getX()); temp_nil2.put("height",this.getHeight()); @@ -20,6 +22,9 @@ temp_nil2.put("state",this.getState()); return temp_nil2; } + public String getType() { + return type; + } public int getY() { return this.y; } @@ -45,7 +50,8 @@ public int getState() { return this.state; } - public Widget1(boolean visible, int width, int x, int y, String text, int state, int height, CurScreen curScreen) { + public Widget1(String type, boolean visible, int width, int x, int y, String text, int state, int height, CurScreen curScreen) { + this.type = type; this.state = state; this.curScreen = curScreen; } diff --git a/src/Widgets.java b/src/Widgets.java index 4752df7..528d893 100644 --- a/src/Widgets.java +++ b/src/Widgets.java @@ -9,36 +9,45 @@ } public void setValue(Map value) { for (String key: value.keySet()) { - int y = (int) ((Map) value.get(key)).get("y"); - int x = (int) ((Map) value.get(key)).get("x"); - int height = (int) ((Map) value.get(key)).get("height"); - String text = (String) ((Map) value.get(key)).get("text"); - boolean visible = (boolean) ((Map) value.get(key)).get("visible"); - int width = (int) ((Map) value.get(key)).get("width"); - int state = (int) ((Map) value.get(key)).get("state"); - this.value.put(key, new Widget(true, screenTemplates, width, x, y, text, 0, height, curScreen)); + String type = ""; + if (((Map) value.get(key)).get("type") != null) type = (String) ((Map) value.get(key)).get("type"); + int y = 0; + if (((Map) value.get(key)) != null) y = (int) ((Map) value.get(key)).get("y"); + int x = 0; + if (((Map) value.get(key)) != null) x = (int) ((Map) value.get(key)).get("x"); + int height = 0; + if (((Map) value.get(key)) != null) height = (int) ((Map) value.get(key)).get("height"); + String text = ""; + if (((Map) value.get(key)) != null) text = (String) ((Map) value.get(key)).get("text"); + boolean visible = true; + if (((Map) value.get(key)) != null) visible = (boolean) ((Map) value.get(key)).get("visible"); + int width = 0; + if (((Map) value.get(key)) != null) width = (int) ((Map) value.get(key)).get("width"); + int state = 0; + if (((Map) value.get(key)) != null) state = (int) ((Map) value.get(key)).get("state"); + this.value.put(key, new Widget(type, true, screenTemplates, width, x, y, text, 0, height, curScreen)); } } public Widget getWidget(String wid) { return this.value.get(wid); } public void addMovableButton(String text, int x, int y, int width, int height, String wid) { - this.value.put(wid,new Widget(true, screenTemplates, width, x, y, text, 0, height, curScreen)); + this.value.put(wid,new Widget("button", true, screenTemplates, width, x, y, text, 0, height, curScreen)); } public void addMovableTextInput(int x, int y, int width, int height, String wid) { - this.value.put(wid,new Widget(true, screenTemplates, width, x, y, "", 0, height, curScreen)); + this.value.put(wid,new Widget("textInput", true, screenTemplates, width, x, y, "", 0, height, curScreen)); } public void addMovableLabel(String text, int x, int y, int width, int height, String wid) { - this.value.put(wid,new Widget(true, screenTemplates, width, x, y, text, 0, height, curScreen)); + this.value.put(wid,new Widget("label", true, screenTemplates, width, x, y, text, 0, height, curScreen)); } public void addButton(String text, String wid) { - this.value.put(wid,new Widget(true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); + this.value.put(wid,new Widget("button",true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); } public void addTextInput(String wid) { - this.value.put(wid,new Widget(true, screenTemplates, 0, 0, 0, "", 0, 0, curScreen)); + this.value.put(wid,new Widget("textInput", true, screenTemplates, 0, 0, 0, "", 0, 0, curScreen)); } public void addLabel(String text, String wid) { - this.value.put(wid,new Widget(true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); + this.value.put(wid,new Widget("label", true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); } public Widgets(ScreenTemplates screenTemplates, CurScreen curScreen) { this.screenTemplates = screenTemplates; diff --git a/src/Widgets1.java b/src/Widgets1.java index 4fca8a4..0012868 100644 --- a/src/Widgets1.java +++ b/src/Widgets1.java @@ -3,11 +3,18 @@ public class Widgets1 { private CurScreen curScreen; private Map value = new HashMap<>(); - public Map getValue() { - return new HashMap<>(this.value); + public Map getValue() { + Map value = new HashMap<>(); + for (String key: this.value.keySet()) { + Widget1 widget = this.value.get(key); + value.put(key, widget.getValue()); + } + return value; } public void setValue(Map value) { for (String key: value.keySet()) { + String type = ""; + if (((Map) value.get(key)).get("type") != null) type = (String) ((Map) value.get(key)).get("type"); int y = 0; if (((Map) value.get(key)).get("y") != null) y = (int) ((Map) value.get(key)).get("y"); int x = 0; @@ -22,7 +29,7 @@ if (((Map) value.get(key)).get("width") != null) width = (int) ((Map) value.get(key)).get("width"); int state = 0; if (((Map) value.get(key)).get("state") != null) state = (int) ((Map) value.get(key)).get("state"); - this.value.put(key, new Widget1(true, width, x, y, text, 0, height, curScreen)); + this.value.put(key, new Widget1(type,true, width, x, y, text, 0, height, curScreen)); } } public Widget1 getWidget1(String wid) {