X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fdialogs%2FCmsWizardDialog.java;h=de41bbfe15c8b31b9b48537b9f85ea5cf700feec;hb=d2e617c3adda3874dd0fbc26ebe83f64814293c1;hp=93888bf46be0507b1af932de01c68d2685b898f4;hpb=aa951f3b427a5b98f32abbb01eb8e21d0284e499;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/dialogs/CmsWizardDialog.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/dialogs/CmsWizardDialog.java index 93888bf46..de41bbfe1 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/dialogs/CmsWizardDialog.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/dialogs/CmsWizardDialog.java @@ -3,6 +3,7 @@ package org.argeo.cms.ui.dialogs; import java.lang.reflect.InvocationTargetException; import org.argeo.cms.CmsException; +import org.argeo.cms.CmsMsg; import org.argeo.cms.util.CmsUtils; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.Selected; @@ -12,6 +13,9 @@ import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.IWizardContainer2; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -25,10 +29,11 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain private IWizard wizard; private IWizardPage currentPage; + private int currentPageIndex; private Label titleBar; private Label message; - private Composite body; + private Composite[] pageBodies; private Composite buttons; private Button back; private Button next; @@ -58,7 +63,7 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain titleBar.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, false)); updateTitleBar(); Button cancelButton = new Button(messageArea, SWT.FLAT); - cancelButton.setText("Cancel"); + cancelButton.setText(CmsMsg.cancel.lead()); cancelButton.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false, 1, 3)); cancelButton.addSelectionListener((Selected) (e) -> closeShell(CANCEL)); message = new Label(messageArea, SWT.WRAP); @@ -66,9 +71,17 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain updateMessage(); } - body = new Composite(parent, SWT.BORDER); - body.setLayout(CmsUtils.noSpaceGridLayout()); + Composite body = new Composite(parent, SWT.BORDER); + body.setLayout(new FormLayout()); body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + pageBodies = new Composite[wizard.getPageCount()]; + IWizardPage[] pages = wizard.getPages(); + for (int i = 0; i < pages.length; i++) { + pageBodies[i] = new Composite(body, SWT.NONE); + pageBodies[i].setLayout(CmsUtils.noSpaceGridLayout()); + setSwitchingFormData(pageBodies[i]); + pages[i].createControl(pageBodies[i]); + } showPage(currentPage); buttons = new Composite(parent, SWT.NONE); @@ -84,17 +97,17 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain if (!singlePage) { back = new Button(buttons, SWT.PUSH); - back.setText("Back"); + back.setText(CmsMsg.wizardBack.lead()); back.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); back.addSelectionListener((Selected) (e) -> backPressed()); next = new Button(buttons, SWT.PUSH); - next.setText("Next"); + next.setText(CmsMsg.wizardNext.lead()); next.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); next.addSelectionListener((Selected) (e) -> nextPressed()); } finish = new Button(buttons, SWT.PUSH); - finish.setText("Finish"); + finish.setText(CmsMsg.wizardFinish.lead()); finish.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); finish.addSelectionListener((Selected) (e) -> finishPressed()); @@ -115,10 +128,24 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain @Override public void showPage(IWizardPage page) { - // clear - for (Control c : body.getChildren()) - c.dispose(); - page.createControl(body); + IWizardPage[] pages = wizard.getPages(); + int index = -1; + for (int i = 0; i < pages.length; i++) { + if (page == pages[i]) { + index = i; + break; + } + } + if (index < 0) + throw new CmsException("Cannot find index of wizard page " + page); + pageBodies[index].moveAbove(pageBodies[currentPageIndex]); + + // // clear + // for (Control c : body.getChildren()) + // c.dispose(); + // page.createControl(body); + // body.layout(true, true); + currentPageIndex = index; currentPage = page; } @@ -128,17 +155,21 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain back.setEnabled(wizard.getPreviousPage(currentPage) != null); if (next != null) next.setEnabled(wizard.getNextPage(currentPage) != null && currentPage.canFlipToNextPage()); - finish.setEnabled(wizard.canFinish()); + if (finish != null) { + finish.setEnabled(wizard.canFinish()); + } } @Override public void updateMessage() { - message.setText(currentPage.getMessage()); + if (currentPage.getMessage() != null) + message.setText(currentPage.getMessage()); } @Override public void updateTitleBar() { - titleBar.setText(currentPage.getTitle()); + if (currentPage.getTitle() != null) + titleBar.setText(currentPage.getTitle()); } @Override @@ -164,15 +195,27 @@ public class CmsWizardDialog extends LightweightDialog implements IWizardContain protected void nextPressed() { IWizardPage page = wizard.getNextPage(currentPage); showPage(page); + updateButtons(); } protected void backPressed() { IWizardPage page = wizard.getPreviousPage(currentPage); showPage(page); + updateButtons(); } protected void finishPressed() { if (wizard.performFinish()) closeShell(OK); } + + private static void setSwitchingFormData(Composite composite) { + FormData fdLabel = new FormData(); + fdLabel.top = new FormAttachment(0, 0); + fdLabel.left = new FormAttachment(0, 0); + fdLabel.right = new FormAttachment(100, 0); + fdLabel.bottom = new FormAttachment(100, 0); + composite.setLayoutData(fdLabel); + } + }