package ilarkesto.ui.swing; import ilarkesto.auth.LoginData; import ilarkesto.base.Reflect; import ilarkesto.base.Url; import ilarkesto.form.Form; import ilarkesto.form.FormButton; import ilarkesto.form.swing.FormDialog; import ilarkesto.swing.ExceptionPanel; import ilarkesto.swing.Swing; import ilarkesto.ui.AUi; import ilarkesto.ui.AView; import java.awt.Component; import java.io.File; import javax.swing.JFrame; import javax.swing.JOptionPane; public class SwingUi extends AUi { private JFrame frame; // --- dependencies --- protected ASwingApplicationConfig config; protected ASwingApplication application; public void setApplication(ASwingApplication application) { this.application = application; } public void setConfig(ASwingApplicationConfig config) { this.config = config; } // --- --- @Override protected Class<? extends AView> getEntityView() { return null; } @Override public void showView(Class<? extends AView> view) { // TODO: SwingView } @Override protected void showDialog(Class<? extends AView> view) { showView(view); // TODO } @Override protected void showView(String viewId) { Component component = getJavaComponent(viewId); showView(component); } private void showView(Component component) { JFrame frame = getFrame(); frame.add(component); frame.pack(); frame.setMinimumSize(frame.getPreferredSize()); Swing.center(frame); if (!frame.isVisible()) frame.setVisible(true); } @Override public void showWebPage(Url url) { throw new RuntimeException("Not implemented yet"); } @Override protected void showDialog(String viewId) { throw new RuntimeException("Not implemented yet"); } @Override public boolean isViewSet() { return frame != null; } private Component getJavaComponent(String id) { Object view = Reflect.getProperty(application, id); if (view == null) throw new RuntimeException("Component does not exist: " + id); Component javaComponent = null; if (view instanceof Component) { javaComponent = (Component) view; } else if (view instanceof AComponent) { AComponent c = (AComponent) view; model.autowire(c); javaComponent = c.getJavaComponent(); } if (javaComponent == null) { throw new RuntimeException("Unsupported component type: " + view.getClass().getName()); } return javaComponent; } public JFrame getFrame() { if (frame == null) { frame = new JFrame(); frame.addWindowListener(application.getShutdownWindowListener()); frame.setTitle(application.getApplicationLabel()); } return frame; } public void showDirSelectionDialog(File dir, String title, String description, final ADialogAdapter<File> adapter) { final DirSelectionComponent component = new DirSelectionComponent(); component.setUi(this); component.setSelectedDir(dir); showDialog(component.getJavaComponent(), title, description, localizer.string("dirSelection.ok"), localizer .string("dirSelection.ok.hint"), null, new ADialogAdapter() { @Override public void onSubmit(Object payload) { adapter.onSubmit(component.getSelectedDir()); } @Override public void onAbort() { super.onAbort(); } }); } public void showLoginDialog(final String id, final ADialogAdapter<LoginData> adapter) { LoginData initialLoginData = config.getLoginData(id); final LoginComponent loginComponent = new LoginComponent(); loginComponent.setUi(this); loginComponent.setInitialLoginData(initialLoginData); String description = localizer.string("login." + id + ".description"); showDialog(loginComponent.getJavaComponent(), localizer.string("login." + id + ".title"), description, localizer.string("login.okLabel"), localizer.string("login.okHint"), "password", new ADialogAdapter() { @Override public void onSubmit(Object payload) { LoginData loginData = loginComponent.getLoginData(); if (loginData.isSavePassword()) { config.setLoginData(id, loginData); } else { config.removeLoginData(id); } adapter.onSubmit(loginData); } @Override public void onAbort() { adapter.onAbort(); } }); } public <C extends Component> void showDialog(final C javaComponent, String title, String description, String okLabel, String okHint, String icon128, final ADialogAdapter<C> adapter) { SwingDialog dialog = new SwingDialog(); dialog.setUi(this); dialog.setComponent(javaComponent); dialog.setTitle(title); dialog.setDescription(description); dialog.setOkLabel(okLabel); dialog.setOkHint(okHint); dialog.setParentComponent(getParentComponent()); dialog.setIcon128(icon128); dialog.showDialog(new ADialogAdapter() { @Override public void onSubmit(Object payload) { adapter.onSubmit(javaComponent); } @Override public void onAbort() { adapter.onAbort(); } }); } public final FormButton showFormDialog(Form form) { return FormDialog.showDialog(Swing.getWindow(getParentComponent()), form); } public final void showErrorDialog(Throwable ex) { ExceptionPanel.showDialog(getParentComponent(), ex, localizer.string("dialog.error.title")); } public final void showErrorDialog(String message) { JOptionPane.showMessageDialog(getParentComponent(), Swing.createMessageComponent(message), localizer .string("dialog.error.title"), JOptionPane.ERROR_MESSAGE); } public final void showInfoDialog(String message) { Swing.showMessageDialog(getParentComponent(), message); } public final boolean showConfirmDialog(String message) { return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(getParentComponent(), message, localizer .string("dialog.confirm.title"), JOptionPane.OK_CANCEL_OPTION); } public final boolean showYesNoDialog(String message) { return JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(getParentComponent(), message, localizer .string("dialog.yesno.title"), JOptionPane.YES_NO_OPTION); } public Component getParentComponent() { return frame; } }