diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/Main.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/Main.java new file mode 100644 index 0000000..5185ee9 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/Main.java @@ -0,0 +1,54 @@ +package org.ntlab.rdl; + +import org.ntlab.rdl.applicationruntime.ApplicationEventReceiver; +import org.ntlab.rdl.applicationruntime.ApplicationRuntime; +import org.ntlab.rdl.applicationruntime.WidgetState; +import org.ntlab.rdl.swingadapter.SwingAdapter; + +public class Main { + public static void main(String[] args) { + // Runtime core + ApplicationRuntime runtime = new ApplicationRuntime(); + + // Adapter for Swing + SwingAdapter swingAdapter = new SwingAdapter(runtime.getUIState()); + + // Connect the adapter to runtime core + runtime.setScreenConfigurationSender(swingAdapter); + runtime.setWidgetPropertySender(swingAdapter); + + // Create a window + runtime.getUIState().createWindow("メモアプリ", 500, 300); + + // Create display screen + runtime.getUIDefinition().createScreen("メモ表示画面"); + runtime.getUIDefinition().addWidget("メモ表示画面", "label", new WidgetState("label", "メモ:", 50, 50, 50, 30)); + runtime.getUIDefinition().addWidget("メモ表示画面", "memo", new WidgetState("label", "", 120, 50, 300, 30)); + runtime.getUIDefinition().addWidget("メモ表示画面", "editButton", new WidgetState("button", "編集", 330, 170, 60, 30)); + + // Create edit screen + runtime.getUIDefinition().createScreen("メモ編集画面"); + runtime.getUIDefinition().addWidget("メモ編集画面", "label", new WidgetState("label", "メモ:", 50, 50, 50, 30)); + runtime.getUIDefinition().addWidget("メモ編集画面", "memoInput", new WidgetState("textInput", "", 120, 50, 300, 30)); + runtime.getUIDefinition().addWidget("メモ編集画面", "okButton", new WidgetState("button", "OK", 250, 170, 60, 30)); + runtime.getUIDefinition().addWidget("メモ編集画面", "canselButton", new WidgetState("button", "キャンセル", 330, 170, 120, 30)); + + // Setup Event Handler + runtime.setApplicationEventReceiver(new ApplicationEventReceiver() { + @Override + public void onWidgetStateChanged(String screenId, String widgetId, String state) { + if (screenId.equals("メモ表示画面") && widgetId.equals("editButton") && state.equals("clicked")) { + runtime.getUIState().setWidgetText("メモ編集画面", "memoInput", runtime.getUIState().getCurWidgetText("memo")); + runtime.getUIState().changeScreen("メモ編集画面"); + } else if (screenId.equals("メモ編集画面") && widgetId.equals("okButton") && state.equals("clicked")) { + runtime.getUIState().setWidgetText("メモ表示画面", "memo", runtime.getUIState().getCurWidgetText("memoInput")); + runtime.getUIState().changeScreen("メモ表示画面"); + } else if (screenId.equals("メモ編集画面") && widgetId.equals("canselButton") && state.equals("clicked")) { + runtime.getUIState().changeScreen("メモ表示画面"); + } + } + }); + + runtime.getUIState().changeScreen("メモ表示画面"); + } +} diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationDefinition.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationDefinition.java new file mode 100644 index 0000000..d6473f2 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationDefinition.java @@ -0,0 +1,14 @@ +package org.ntlab.rdl.applicationruntime; + +public class ApplicationDefinition { + private UIDefinition uiDefinition = new UIDefinition(); + private TableDefinition tableDefinition = new TableDefinition(); + + public UIDefinition getUiDefinition() { + return uiDefinition; + } + + public TableDefinition getTableDefinition() { + return tableDefinition; + } +} diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationPropertyUpdater.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationPropertyUpdater.java index 6aef9a8..348392e 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationPropertyUpdater.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationPropertyUpdater.java @@ -2,6 +2,7 @@ public interface ApplicationPropertyUpdater { public void setWidgetText(String screenId, String widgetId, String text); + public void setWidgetColor(String screenId, String widgetId, int color); public void setWidgetVisibility(String screenId, String widgetId, boolean visibility); public void setWidgetEnabled(String screenId, String widgetId, boolean enabled); } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationRuntime.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationRuntime.java index 88736ab..2d0636f 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationRuntime.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationRuntime.java @@ -1,15 +1,16 @@ package org.ntlab.rdl.applicationruntime; public class ApplicationRuntime { - private ApplicationState applicationState = new ApplicationState(); + private ApplicationDefinition applicationDefinition = new ApplicationDefinition(); + private ApplicationState applicationState = new ApplicationState(applicationDefinition); private ApplicationConstraintHandler constraintHandler; public void setConstraintHandler(ApplicationConstraintHandler constraintHandler) { this.constraintHandler = constraintHandler; } - public void setWidgetEventReceiver(ApplicationEventReceiver widgetEventReceiver) { - this.getUIState().setApplicationEventReceiver(widgetEventReceiver); + public void setApplicationEventReceiver(ApplicationEventReceiver applicationEventReceiver) { + this.getUIState().setApplicationEventReceiver(applicationEventReceiver); } public void setScreenConfigurationSender(ScreenConfigurationSender screenConfigurationSender) { @@ -20,6 +21,14 @@ this.getUIState().setWidgetPropertySender(widgetPropertySender); } + public UIDefinition getUIDefinition() { + return applicationDefinition.getUiDefinition(); + } + + public TableDefinition getTableDefinition() { + return applicationDefinition.getTableDefinition(); + } + public UIState getUIState() { return applicationState.getUIState(); } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationState.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationState.java index c70228a..262d69f 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationState.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ApplicationState.java @@ -1,8 +1,13 @@ package org.ntlab.rdl.applicationruntime; public class ApplicationState { - private UIState uiState = new UIState(); - private TableState tableState = new TableState(); + private UIState uiState; + private TableState tableState; + + public ApplicationState(ApplicationDefinition applicationDefinition) { + this.uiState = new UIState(applicationDefinition.getUiDefinition()); + this.tableState = new TableState(applicationDefinition.getTableDefinition()); + } public UIState getUIState() { return uiState; diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfiguration.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfiguration.java index 554efa3..5eadba9 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfiguration.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfiguration.java @@ -1,4 +1,20 @@ package org.ntlab.rdl.applicationruntime; +import java.util.HashMap; +import java.util.Map; + public class ScreenConfiguration { + private Map widgets = new HashMap<>(); + + public void addWidget(String widgetId, WidgetState widgetState) { + widgets.put(widgetId, widgetState); + } + + public Map getWidgets() { + return widgets; + } + + public WidgetState getWidgetState(String widgetId) { + return widgets.get(widgetId); + } } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfigurationSender.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfigurationSender.java index 12a90b4..a7315ce 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfigurationSender.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/ScreenConfigurationSender.java @@ -1,5 +1,6 @@ package org.ntlab.rdl.applicationruntime; public interface ScreenConfigurationSender { - public void createScreen(String screenId, ScreenConfiguration configuration); + public void createWindow(String title, int width, int height); + public void configureScreen(String screenId, ScreenConfiguration configuration); } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableDefinition.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableDefinition.java new file mode 100644 index 0000000..012e179 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableDefinition.java @@ -0,0 +1,27 @@ +package org.ntlab.rdl.applicationruntime; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TableDefinition { + private Map tableToKey = new HashMap<>(); + private Map tableToColumnNames = new HashMap<>(); + + public void addTable(String tableId, String keyName, String[] columnNames) { + tableToKey.put(tableId, keyName); + tableToColumnNames.put(tableId, columnNames); + } + + public Map getKeyNames() { + return tableToKey; + } + + public String getKeyName(String tableId) { + return tableToKey.get(tableId); + } + + public String[] getColumnNames(String tableId) { + return tableToColumnNames.get(tableId); + } +} diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableState.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableState.java index e79b0e2..f5ea923 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableState.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/TableState.java @@ -1,11 +1,44 @@ package org.ntlab.rdl.applicationruntime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class TableState { + Map> tables = new HashMap<>(); + TableDefinition tableDefinition; + + public TableState(TableDefinition tableDefinition) { + this.tableDefinition = tableDefinition; + Map keyNames = tableDefinition.getKeyNames(); + for (Map.Entry keyEntry : keyNames.entrySet()) { + String tableId = keyEntry.getKey(); + addTable(tableId); + } + } + + public void addTable(String tableId) { + Map table = new HashMap<>(); + tables.put(tableId, table); + } + + public void addRecord(String tableId, String key) { + Map table = tables.get(tableId); + String[] record = new String[tableDefinition.getColumnNames(tableId).length]; + table.put(key, record); + } + + public void removeRecord(String tableId, String key) { + tables.get(tableId).remove(key); + } + public String getValue(String tableId, String key, int columnNo) { - return null; + return tables.get(tableId).get(key)[columnNo]; } public void updateValue(String tableId, String key, int columnNo, String value) { - + String[] record = tables.get(tableId).get(key); + record[columnNo] = value; } } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIDefinition.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIDefinition.java new file mode 100644 index 0000000..d617796 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIDefinition.java @@ -0,0 +1,24 @@ +package org.ntlab.rdl.applicationruntime; + +import java.util.HashMap; +import java.util.Map; + +public class UIDefinition { + private Map screenConfigurations = new HashMap<>(); + + public void createScreen(String screenId) { + screenConfigurations.put(screenId, new ScreenConfiguration()); + } + + public void createScreen(String screenId, ScreenConfiguration screenConfiguration) { + screenConfigurations.put(screenId, screenConfiguration); + } + + public void addWidget(String screenId, String widgetId, WidgetState widgetState) { + screenConfigurations.get(screenId).addWidget(widgetId, widgetState); + } + + public ScreenConfiguration getScreenConfiguration(String screenId) { + return screenConfigurations.get(screenId); + } +} diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIState.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIState.java index a7dd869..08a4179 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIState.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/UIState.java @@ -1,11 +1,21 @@ package org.ntlab.rdl.applicationruntime; +import java.util.HashMap; +import java.util.Map; + public class UIState implements ApplicationPropertyUpdater, WidgetEventReceiver { - private String curScreenId; private ScreenConfigurationSender screenConfigurationSender; private WidgetPropertySender widgetPropertySender; private ApplicationEventReceiver applicationEventReceiver; + private String curScreenId; + private Map widgets = new HashMap<>(); + private UIDefinition uiDefinition; + + public UIState(UIDefinition uiDefinition) { + this.uiDefinition = uiDefinition; + } + public void setScreenConfigurationSender(ScreenConfigurationSender screenConfigurationSender) { this.screenConfigurationSender = screenConfigurationSender; } @@ -18,58 +28,98 @@ this.applicationEventReceiver = applicationEventReceiver; } + public void createWindow(String title, int width, int height) { + screenConfigurationSender.createWindow(title, width, height); + } + public void changeScreen(String nextScreenId) { this.curScreenId = nextScreenId; - + widgets.clear(); + ScreenConfiguration nextScreenConfiguration = uiDefinition.getScreenConfiguration(nextScreenId); + for (Map.Entry widgetEnt : nextScreenConfiguration.getWidgets().entrySet()) { + widgets.put(widgetEnt.getKey(), new WidgetState(widgetEnt.getValue())); + } + screenConfigurationSender.configureScreen(nextScreenId, nextScreenConfiguration); } public String getWidgetText(String screenId, String widgetId) { - return null; + if (screenId.equals(this.curScreenId)) { + return this.widgets.get(widgetId).getText(); + } + return uiDefinition.getScreenConfiguration(screenId).getWidgetState(widgetId).getText(); } @Override public void setWidgetText(String screenId, String widgetId, String text) { if (screenId.equals(this.curScreenId)) { + this.widgets.get(widgetId).setText(text); this.widgetPropertySender.sendWidgetText(widgetId, text); + } else { + this.uiDefinition.getScreenConfiguration(screenId).getWidgetState(widgetId).setText(text); + } + } + + @Override + public void setWidgetColor(String screenId, String widgetId, int color) { + if (screenId.equals(this.curScreenId)) { + this.widgets.get(widgetId).setColor(color); + this.widgetPropertySender.sendWidgetColor(widgetId, color); + } else { + this.uiDefinition.getScreenConfiguration(screenId).getWidgetState(widgetId).setColor(color); } } @Override public void setWidgetVisibility(String screenId, String widgetId, boolean visibility) { if (screenId.equals(this.curScreenId)) { + this.widgets.get(widgetId).setVisibility(visibility); this.widgetPropertySender.sendWidgetVisibility(widgetId, visibility); + } else { + this.uiDefinition.getScreenConfiguration(screenId).getWidgetState(widgetId).setVisibility(visibility); } } @Override public void setWidgetEnabled(String screenId, String widgetId, boolean enabled) { if (screenId.equals(this.curScreenId)) { + this.widgets.get(widgetId).setEnabled(enabled); this.widgetPropertySender.sendWidgetEnabled(widgetId, enabled); + } else { + this.uiDefinition.getScreenConfiguration(screenId).getWidgetState(widgetId).setEnabled(enabled); } } @Override + public void onWidgetTextChanged(String widgetId, String text) { + this.widgets.get(widgetId).setText(text); + } + + @Override public void onWidgetStateChanged(String widgetId, String state) { + this.widgets.get(widgetId).setState(state); applicationEventReceiver.onWidgetStateChanged(curScreenId, widgetId, state); } + public String getCurWidgetText(String widgetId) { + return this.widgets.get(widgetId).getText(); + } + + public String getCurWidgetState(String widgetId) { + return this.widgets.get(widgetId).getState(); + } + public void setCurWidgetText(String widgetId, String text) { + this.widgets.get(widgetId).setText(text); this.widgetPropertySender.sendWidgetText(widgetId, text); } public void setCurWidgetVisibility(String widgetId, boolean visibility) { + this.widgets.get(widgetId).setVisibility(visibility); this.widgetPropertySender.sendWidgetVisibility(widgetId, visibility); } public void setCurWidgetEnabled(String widgetId, boolean enabled) { + this.widgets.get(widgetId).setEnabled(enabled); this.widgetPropertySender.sendWidgetEnabled(widgetId, enabled); } - - public String getCurWidgetText(String widgetId) { - return null; - } - - public String getCurWidgetState(String widgetId) { - return null; - } } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetEventReceiver.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetEventReceiver.java index 76fbaa8..89f5db0 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetEventReceiver.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetEventReceiver.java @@ -1,5 +1,6 @@ package org.ntlab.rdl.applicationruntime; public interface WidgetEventReceiver { + public void onWidgetTextChanged(String widgetId, String text); public void onWidgetStateChanged(String widgetId, String state); } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetPropertySender.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetPropertySender.java index d7b1fa7..6623a09 100644 --- a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetPropertySender.java +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetPropertySender.java @@ -2,6 +2,7 @@ public interface WidgetPropertySender { public void sendWidgetText(String widgetId, String text); + public void sendWidgetColor(String widgetId, int color); public void sendWidgetEnabled(String widgetId, boolean enabled); public void sendWidgetVisibility(String widgetId, boolean visibility); } diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetState.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetState.java new file mode 100644 index 0000000..d0443d7 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/applicationruntime/WidgetState.java @@ -0,0 +1,131 @@ +package org.ntlab.rdl.applicationruntime; + +import java.awt.*; + +public class WidgetState { + private String type; + private String text; + private String state; + private int x; + private int y; + private int width; + private int height; + private int color; + private boolean visibility = true; + private boolean enabled = true; + + public WidgetState(String type, String text, int x, int y, int width, int height) { + this.type = type; + this.text = text; + this.state = ""; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.color = Color.BLACK.getRGB(); + } + + public WidgetState(String type, String text, String state, int x, int y, int width, int height, int color) { + this.type = type; + this.text = text; + this.state = state; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.color = color; + } + + public WidgetState(WidgetState widgetState) { + this.type = widgetState.type; + this.text = widgetState.text; + this.state = widgetState.state; + this.x = widgetState.x; + this.y = widgetState.y; + this.width = widgetState.width; + this.height = widgetState.height; + this.color = widgetState.color; + this.visibility = widgetState.visibility; + this.enabled = widgetState.enabled; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getColor() { + return color; + } + + public void setColor(int color) { + this.color = color; + } + + public boolean isVisible() { + return visibility; + } + + public void setVisibility(boolean visibility) { + this.visibility = visibility; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } +} diff --git a/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/swingadapter/SwingAdapter.java b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/swingadapter/SwingAdapter.java new file mode 100644 index 0000000..2613229 --- /dev/null +++ b/RDLApplicationRuntime/src/main/java/org/ntlab/rdl/swingadapter/SwingAdapter.java @@ -0,0 +1,195 @@ +package org.ntlab.rdl.swingadapter; + +import org.ntlab.rdl.applicationruntime.*; + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.HashMap; +import java.util.Map; + +public class SwingAdapter implements ScreenConfigurationSender, WidgetPropertySender { + private JFrame window; + private JPanel mainPanel; + private WidgetEventReceiver widgetEventReceiver; + private Map components = new HashMap<>(); + + public SwingAdapter(WidgetEventReceiver widgetEventReceiver) { + this.widgetEventReceiver = widgetEventReceiver; + } + + @Override + public void createWindow(String title, int width, int height) { + window = new JFrame(title); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + mainPanel = new JPanel(); + window.add(mainPanel); + window.setSize(width,height); + window.setVisible(true); + } + + @Override + public void configureScreen(String screenId, ScreenConfiguration configuration) { + mainPanel.removeAll(); + mainPanel.setLayout(null); + components.clear(); + for (Map.Entry widgetEnt: configuration.getWidgets().entrySet()) { + String widgetId = widgetEnt.getKey(); + WidgetState widgetState = widgetEnt.getValue(); + String type = widgetState.getType(); + Component component = null; + if (type.equals("button")) { + component = createButton(widgetId, widgetState); + } else if (type.equals("label")) { + component = createLabel(widgetId, widgetState); + } else if (type.equals("textInput")) { + component = createTextInput(widgetId, widgetState); + } else if (type.equals("table")) { + // Todo: + } + if (component != null) { + mainPanel.add(component); + components.put(widgetId, component); + } + } + mainPanel.invalidate(); + mainPanel.validate(); + mainPanel.repaint(); + } + + @Override + public void sendWidgetText(String widgetId, String text) { + Component component = components.get(widgetId); + if (component != null) { + if (component instanceof Button) { + ((JButton) component).setText(text); + } else if (component instanceof Label) { + ((Label) component).setText(text); + } else if (component instanceof TextField) { + ((TextField) component).setText(text); + } + } + } + + @Override + public void sendWidgetColor(String widgetId, int color) { + Component component = components.get(widgetId); + if (component != null) { + component.setForeground(new Color(color)); + } + } + + @Override + public void sendWidgetEnabled(String widgetId, boolean enabled) { + Component component = components.get(widgetId); + if (component != null) { + component.setEnabled(enabled); + } + } + + @Override + public void sendWidgetVisibility(String widgetId, boolean visibility) { + Component component = components.get(widgetId); + if (component != null) { + component.setVisible(visibility); + } + } + + private Component createButton(String widgetId, WidgetState widgetState) { + JButton button = new JButton(widgetState.getText()); + button.setLocation(widgetState.getX(), widgetState.getY()); + button.setSize(widgetState.getWidth(), widgetState.getHeight()); + button.setForeground(new Color(widgetState.getColor())); + button.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "clicked"); + } + @Override + public void mousePressed(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "pressed"); + } + @Override + public void mouseReleased(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "released"); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); + return button; + } + + private Component createLabel(String widgetId, WidgetState widgetState) { + JLabel label = new JLabel(widgetState.getText()); + label.setLocation(widgetState.getX(), widgetState.getY()); + label.setSize(widgetState.getWidth(), widgetState.getHeight()); + label.setForeground(new Color(widgetState.getColor())); + label.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "clicked"); + } + @Override + public void mousePressed(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "pressed"); + } + @Override + public void mouseReleased(MouseEvent e) { + widgetEventReceiver.onWidgetStateChanged(widgetId, "released"); + } + @Override + public void mouseEntered(MouseEvent e) { + } + @Override + public void mouseExited(MouseEvent e) { + } + }); + return label; + } + + private Component createTextInput(String widgetId, WidgetState widgetState) { + JTextField textField = new JTextField(10); + textField.setText(widgetState.getText()); + textField.setLocation(widgetState.getX(), widgetState.getY()); + textField.setSize(widgetState.getWidth(), widgetState.getHeight()); + textField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + Document d = e.getDocument(); + try { + widgetEventReceiver.onWidgetTextChanged(widgetId, d.getText(0, d.getLength())); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } + @Override + public void removeUpdate(DocumentEvent e) { + Document d = e.getDocument(); + try { + widgetEventReceiver.onWidgetTextChanged(widgetId, d.getText(0, d.getLength())); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } + @Override + public void changedUpdate(DocumentEvent e) { + Document d = e.getDocument(); + try { + widgetEventReceiver.onWidgetTextChanged(widgetId, d.getText(0, d.getLength())); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } + }); + return textField; + } +} diff --git a/src/main/java/org/ntlab/rdlworkbench/Main.java b/src/main/java/org/ntlab/rdlworkbench/Main.java index 56afc33..48adc9a 100644 --- a/src/main/java/org/ntlab/rdlworkbench/Main.java +++ b/src/main/java/org/ntlab/rdlworkbench/Main.java @@ -1,5 +1,8 @@ package org.ntlab.rdlworkbench; +import org.ntlab.rdl.applicationruntime.ApplicationRuntime; +import org.ntlab.rdl.swingadapter.SwingAdapter; + public class Main { public static void main(String[] args) { diff --git a/src/main/java/org/ntlab/rdlworkbench/simulator/SimulatorUIAdapter.java b/src/main/java/org/ntlab/rdlworkbench/simulator/SimulatorUIAdapter.java new file mode 100644 index 0000000..75ed26a --- /dev/null +++ b/src/main/java/org/ntlab/rdlworkbench/simulator/SimulatorUIAdapter.java @@ -0,0 +1,28 @@ +package org.ntlab.rdlworkbench.simulator; + +import org.ntlab.rdl.applicationruntime.ScreenConfigurationSender; +import org.ntlab.rdl.applicationruntime.WidgetEventReceiver; +import org.ntlab.rdl.applicationruntime.WidgetPropertySender; + +public class SimulatorUIAdapter implements WidgetEventReceiver { + private ScreenConfigurationSender screenConfigurationSender; + private WidgetPropertySender widgetPropertySender; + + public void setScreenConfigurationSender(ScreenConfigurationSender screenConfigurationSender) { + this.screenConfigurationSender = screenConfigurationSender; + } + + public void setWidgetPropertySender(WidgetPropertySender widgetPropertySender) { + this.widgetPropertySender = widgetPropertySender; + } + + @Override + public void onWidgetTextChanged(String widgetId, String text) { + + } + + @Override + public void onWidgetStateChanged(String widgetId, String state) { + + } +}