diff --git a/src/CurScreen.java b/src/CurScreen.java index 2432286..7511258 100644 --- a/src/CurScreen.java +++ b/src/CurScreen.java @@ -11,14 +11,7 @@ public String getValue() { return new String(this.value); } - public void updateFromState(String scId, String wid, int state) { - String temp_if1; - if ((state==0)) { - temp_if1 = "000"; - } else { - temp_if1 = this.value; - } - this.value = temp_if1; + public void updateFromState1(String scId, String wid, int state) { String temp_if0; if ((state==0)) { temp_if0 = "001"; @@ -29,6 +22,17 @@ Map screenTemplate = screenTemplates.getScreenTemplate(this.value).getValue(); this.screen.updateFromCurScreen(this.value, screenTemplate); } + public void updateFromState2(String scId, String wid, int state) { + String temp_if1; + if ((state==0)) { + temp_if1 = "000"; + } else { + temp_if1 = this.value; + } + this.value = temp_if1; + Map screenTemplate = screenTemplates.getScreenTemplate(this.value).getValue(); + this.screen.updateFromCurScreen(this.value, screenTemplate); + } public void changeCurScreen(String nextScId) { this.value = nextScId; Map screenTemplate = screenTemplates.getScreenTemplate(this.value).getValue(); diff --git a/src/Main.java b/src/Main.java index 84ec8dc..11575eb 100644 --- a/src/Main.java +++ b/src/Main.java @@ -11,13 +11,15 @@ 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.screenTemplates = new ScreenTemplates(); + this.screen = new Screen(screenTemplates, true, presenter); this.curScreen = new CurScreen(screen, screenTemplates); + this.screenTemplates.setCurScreen(curScreen); + this.screen.setCurScreen(curScreen); changeCurScreen("000"); } - public Map getWidget(String wid) { - return this.screen.getWidgets().getWidget(wid).getValue(); + public Widget getWidget(String wid) { + return this.screen.getWidgets().getWidget(wid); } public Map getScreenTemplate(String scId) { return this.screenTemplates.getScreenTemplate(scId).getValue(); @@ -25,8 +27,8 @@ public Map getWidgets() { return this.screen.getWidgets().getValue(); } - public Map getWidget1(String scId, String wid) { - return this.screenTemplates.getScreenTemplate(scId).getWidgets1().getWidget1(wid).getValue(); + public Widget1 getWidget1(String scId, String wid) { + return this.screenTemplates.getScreenTemplate(scId).getWidgets1().getWidget1(wid); } public Map getWidgets1(String scId) { return this.screenTemplates.getScreenTemplate(scId).getWidgets1().getValue(); diff --git a/src/Screen.java b/src/Screen.java index 6f389fe..779c6b4 100644 --- a/src/Screen.java +++ b/src/Screen.java @@ -4,22 +4,25 @@ private ScreenTemplates screenTemplates; private Widgets widgets; private boolean layout; + private String screenId; private SwingPresenter presenter; - public Screen(ScreenTemplates screenTemplates, boolean layout, CurScreen curScreen, SwingPresenter presenter) { + public Screen(ScreenTemplates screenTemplates, boolean layout, SwingPresenter presenter) { this.screenTemplates = screenTemplates; this.layout = layout; - this.widgets = new Widgets(screenTemplates, curScreen); + this.widgets = new Widgets(screenTemplates, presenter); this.presenter = presenter; } public Map getValue() { Map temp_nil3 = new HashMap<>(); temp_nil3.put("widgets",this.widgets.getValue()); temp_nil3.put("layout",this.getLayout()); + temp_nil3.put("screenId",this.getScreenId()); return temp_nil3; } public void setValue(Map value) { this.widgets.setValue((Map) value.get("widgets")); this.layout = (boolean) value.get("layout"); + this.screenId = (String) value.get("screenId"); } public Widgets getWidgets() { return this.widgets; @@ -27,8 +30,15 @@ public boolean getLayout() { return this.layout; } + public String getScreenId() { + return this.screenId; + } public void changeLayout(boolean layout) { this.layout = layout; + presenter.setLayout(layout); + } + public void setCurScreen(CurScreen curScreen) { + widgets.setCurScreen(curScreen); } public void updateFromCurScreen(String curScreen, Map value) { setValue(value); diff --git a/src/ScreenTemplate.java b/src/ScreenTemplate.java index ee57320..b472d00 100644 --- a/src/ScreenTemplate.java +++ b/src/ScreenTemplate.java @@ -4,15 +4,18 @@ private CurScreen curScreen; private Widgets1 widgets; private boolean layout; + private String screenId; public Map getValue() { Map temp_nil1 = new HashMap<>(); temp_nil1.put("widgets",this.widgets.getValue()); temp_nil1.put("layout",this.getLayout()); + temp_nil1.put("screenId",this.getScreenId()); return temp_nil1; } public void setValue(Map value) { widgets.setValue((Map) value.get("widgets")); layout = (boolean) value.get("layout"); + screenId = (String) value.get("screenId"); } public Widgets1 getWidgets1() { return this.widgets; @@ -20,8 +23,13 @@ public boolean getLayout() { return layout; } - public ScreenTemplate(CurScreen curScreen) { - this.curScreen = curScreen; - this.widgets = new Widgets1(this.curScreen); + public String getScreenId() { + return this.screenId; + } + public ScreenTemplate() { + this.widgets = new Widgets1(); + } + public void setCurScreen(CurScreen curScreen) { + this.widgets.setCurScreen(curScreen); } } \ No newline at end of file diff --git a/src/ScreenTemplates.java b/src/ScreenTemplates.java index d99665e..6608cef 100644 --- a/src/ScreenTemplates.java +++ b/src/ScreenTemplates.java @@ -3,9 +3,8 @@ public class ScreenTemplates { private CurScreen curScreen; private Map value = new HashMap<>(); - public ScreenTemplates(CurScreen curScreen) { - this.curScreen = curScreen; - ScreenTemplate screenTemplate_tmp000 = new ScreenTemplate(curScreen); + public ScreenTemplates() { + ScreenTemplate screenTemplate_tmp000 = new ScreenTemplate(); screenTemplate_tmp000.setValue(Map.of("widgets", Map.of("001", Map.of("type", "textInput", "text", "", "state", 0, @@ -14,9 +13,10 @@ "text", "Next", "state", 0, "visible", true)), - "layout", true)); + "layout", true, + "screenId", "000")); value.put("000", screenTemplate_tmp000); - ScreenTemplate screenTemplate_tmp001 = new ScreenTemplate(curScreen); + ScreenTemplate screenTemplate_tmp001 = new ScreenTemplate(); screenTemplate_tmp001.setValue(Map.of("widgets", Map.of("003", Map.of("type", "label", "text", "label", "state", 0, @@ -25,12 +25,19 @@ "text", "Back", "state", 0, "visible", true)), - "layout", true)); + "layout", true, + "screenId", "001")); value.put("001", screenTemplate_tmp001); } public Map getValue() { return new HashMap<>(this.value); } + public void setCurScreen(CurScreen curScreen) { + this.curScreen = curScreen; + for (ScreenTemplate screenTemplate: value.values()) { + screenTemplate.setCurScreen(curScreen); + } + } public ScreenTemplate getScreenTemplate(String nextScId) { return this.value.get(nextScId); } diff --git a/src/SwingPresenter.java b/src/SwingPresenter.java index e5f9be6..7bc8d3a 100644 --- a/src/SwingPresenter.java +++ b/src/SwingPresenter.java @@ -1,12 +1,15 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.util.HashMap; import java.util.Map; public class SwingPresenter { private Main main; private JPanel mainPanel; - protected Map components = new HashMap<>(); + private Map components = new HashMap<>(); + private String screenId; public SwingPresenter(Main main, JPanel mainPanel) { this.main = main; @@ -14,9 +17,14 @@ } public void screenUpdate(Map value) { - mainPanel.removeAll(); Map widgets = (Map) value.get("widgets"); boolean layout = (boolean) value.get("layout"); + String screenId = (String) value.get("screenId"); + if (this.screenId != null && this.screenId.equals(screenId)) { + return; + } + this.screenId = screenId; + mainPanel.removeAll(); if (layout) { mainPanel.setLayout(new FlowLayout()); for (String key : widgets.keySet()) { @@ -28,14 +36,71 @@ JTextField textField = new JTextField(10); mainPanel.add(textField); components.put(key, textField); + textField.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } else if (type.equals("label")) { JLabel label = new JLabel(text); mainPanel.add(label); components.put(key, label); + label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } else if (type.equals("button")) { JButton button = new JButton(text); mainPanel.add(button); components.put(key, button); + button.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } else if (type.equals("table")) { } @@ -57,16 +122,75 @@ textField.setSize(width, height); mainPanel.add(textField); components.put(key, textField); + textField.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } 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); + label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } else if (type.equals("button")) { JButton button = new JButton(text); button.setLocation(x, y); button.setSize(width, height); + mainPanel.add(button); + components.put(key, button); + button.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + } + @Override + public void mousePressed(MouseEvent e) { + main.mouseEvent(key, 1); + } + @Override + public void mouseReleased(MouseEvent e) { + main.mouseEvent(key, 0); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); } else if (type.equals("table")) { } @@ -76,4 +200,37 @@ mainPanel.validate(); mainPanel.repaint(); } + + public void setX(String wid, int x) { + int y = components.get(wid).getY(); + components.get(wid).setLocation(x, y); + } + + public void setY(String wid, int y) { + int x = components.get(wid).getX(); + components.get(wid).setLocation(x, y); + } + + public void setText(String wid, String text) { + Component widget = components.get(wid); + if (widget instanceof JButton) { + ((JButton) widget).setText(text); + } else if (widget instanceof JLabel) { + ((JLabel) widget).setText(text); + } else if (widget instanceof JTextField) { + ((JTextField) widget).setText(text); + } + } + + public void setVisible(String wid, boolean visible) { + components.get(wid).setVisible(visible); + } + + public void setLayout(boolean layout) { + if (layout) { + mainPanel.setLayout(new FlowLayout()); + } else { + mainPanel.setLayout(null); + } + } } diff --git a/src/Widget.java b/src/Widget.java index f411dc9..d596a92 100644 --- a/src/Widget.java +++ b/src/Widget.java @@ -2,6 +2,7 @@ public class Widget { private CurScreen curScreen; + private SwingPresenter presenter; private String type; private int y; private boolean visible; @@ -32,6 +33,7 @@ } public void changeY(String wid, int y) { this.y = y; + this.presenter.setY(wid, y); } public boolean getVisible() { return this.visible; @@ -48,11 +50,20 @@ public void textEvent(String wid, String nextText) { this.text = nextText; } + public void changeText(String wid, String text) { + this.text = text; + this.presenter.setText(wid, text); + } public int getX() { return this.x; } public void changeX(String wid, int x) { this.x = x; + this.presenter.setX(wid, x); + } + public void changeVisible(String wid, boolean visible) { + this.visible = visible; + this.presenter.setVisible(wid, visible); } public int getState() { return this.state; @@ -62,7 +73,10 @@ this.widget1 = screenTemplates.getScreenTemplate(curScreen.getValue()).getWidgets1().getWidget1(wid); this.widget1.updateStateFromState(wid, wid, wid, this.state, curScreen.getValue()); } - public Widget(String type, boolean visible, ScreenTemplates screenTemplates, int width, int x, int y, String text, int state, int height, CurScreen curScreen) { + public void setCurScreen(CurScreen curScreen) { + this.curScreen = curScreen; + } + public Widget(String type, boolean visible, ScreenTemplates screenTemplates, int width, int x, int y, String text, int state, int height, SwingPresenter presenter) { this.type = type; this.visible = visible; this.screenTemplates = screenTemplates; @@ -72,6 +86,6 @@ this.text = text; this.state = state; this.height = height; - this.curScreen = curScreen; + this.presenter = presenter; } } \ No newline at end of file diff --git a/src/Widget1.java b/src/Widget1.java index b0170fb..7229d02 100644 --- a/src/Widget1.java +++ b/src/Widget1.java @@ -45,12 +45,17 @@ } public void updateStateFromState(String self, String self2, String wid, int state, String curScreen) { this.state = state; - this.curScreen.updateFromState(curScreen, wid, this.state); + if (curScreen.equals("000") && wid.equals("002")) { + this.curScreen.updateFromState1(curScreen, wid, this.state); + } + if (curScreen.equals("001") && wid.equals("004")) { + this.curScreen.updateFromState2(curScreen, wid, this.state); + } } public int getState() { return this.state; } - public Widget1(String type, 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) { this.type = type; this.visible = visible; this.width = width; @@ -59,6 +64,9 @@ this.text = text; this.state = state; this.height = height; + } + + public void setCurScreen(CurScreen curScreen) { this.curScreen = curScreen; } } \ No newline at end of file diff --git a/src/Widgets.java b/src/Widgets.java index 0e00d37..2c9ed8c 100644 --- a/src/Widgets.java +++ b/src/Widgets.java @@ -3,6 +3,7 @@ public class Widgets { ScreenTemplates screenTemplates; CurScreen curScreen; + SwingPresenter presenter; private Map value = new HashMap<>(); public Map getValue() { return new HashMap<>(this.value); @@ -25,32 +26,52 @@ 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)); + Widget widget = new Widget(type, true, screenTemplates, width, x, y, text, 0, height, presenter); + widget.setCurScreen(curScreen); + this.value.put(key, widget); } } 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("button", true, screenTemplates, width, x, y, text, 0, height, curScreen)); + Widget widget = new Widget("button", true, screenTemplates, width, x, y, text, 0, height, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } public void addMovableTextInput(int x, int y, int width, int height, String wid) { - this.value.put(wid,new Widget("textInput", true, screenTemplates, width, x, y, "", 0, height, curScreen)); + Widget widget = new Widget("textInput", true, screenTemplates, width, x, y, "", 0, height, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } public void addMovableLabel(String text, int x, int y, int width, int height, String wid) { - this.value.put(wid,new Widget("label", true, screenTemplates, width, x, y, text, 0, height, curScreen)); + Widget widget = new Widget("label", true, screenTemplates, width, x, y, text, 0, height, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } public void addButton(String text, String wid) { - this.value.put(wid,new Widget("button",true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); + Widget widget = new Widget("button", true, screenTemplates, 0, 0, 0, text, 0, 0, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } public void addTextInput(String wid) { - this.value.put(wid,new Widget("textInput", true, screenTemplates, 0, 0, 0, "", 0, 0, curScreen)); + Widget widget = new Widget("textInput", true, screenTemplates, 0, 0, 0, "", 0, 0, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } public void addLabel(String text, String wid) { - this.value.put(wid,new Widget("label", true, screenTemplates, 0, 0, 0, text, 0, 0, curScreen)); + Widget widget = new Widget("label", true, screenTemplates, 0, 0, 0, text, 0, 0, presenter); + widget.setCurScreen(curScreen); + this.value.put(wid, widget); } - public Widgets(ScreenTemplates screenTemplates, CurScreen curScreen) { - this.screenTemplates = screenTemplates; + public void setCurScreen(CurScreen curScreen) { this.curScreen = curScreen; + for (Widget widget: value.values()) { + widget.setCurScreen(curScreen); + } + } + public Widgets(ScreenTemplates screenTemplates, SwingPresenter presenter) { + this.screenTemplates = screenTemplates; + this.presenter = presenter; } } \ No newline at end of file diff --git a/src/Widgets1.java b/src/Widgets1.java index 0012868..791a122 100644 --- a/src/Widgets1.java +++ b/src/Widgets1.java @@ -29,13 +29,16 @@ 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(type,true, width, x, y, text, 0, height, curScreen)); + this.value.put(key, new Widget1(type,true, width, x, y, text, 0, height)); } } public Widget1 getWidget1(String wid) { return this.value.get(wid); } - public Widgets1(CurScreen curScreen) { + public void setCurScreen(CurScreen curScreen) { this.curScreen = curScreen; + for (Widget1 widget: value.values()) { + widget.setCurScreen(curScreen); + } } } \ No newline at end of file