X-Git-Url: http://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=core%2Forg.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FDefaultEditionLayer.java;fp=core%2Forg.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FDefaultEditionLayer.java;h=7004ad01b1ef04e6a9926bf4e7d1aa521bf5fc52;hp=68081b4e646d944b9066c855f98cdc941b48f2ff;hb=38b1c40accd8da0b5bd791cc2b2257773b69ac56;hpb=e1f1fc1b5e198d4adb92366213fcb671c9b884a7 diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java index 68081b4..7004ad0 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java @@ -11,6 +11,7 @@ import org.argeo.cms.Localized; import org.argeo.cms.ui.CmsTheme; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ui.util.CmsUiUtils; +import org.argeo.jcr.JcrException; import org.argeo.suite.ui.widgets.TabbedArea; import org.argeo.util.LangUtils; import org.eclipse.swt.SWT; @@ -24,21 +25,33 @@ import org.osgi.framework.wiring.BundleWiring; /** An app layer based on an entry area and an editor area. */ public class DefaultEditionLayer implements SuiteLayer { private CmsUiProvider entryArea; + private CmsUiProvider defaultView; private CmsUiProvider workArea; private List weights = new ArrayList<>(); private boolean startMaximized = false; + private boolean fixedEntryArea = false; private boolean singleTab = false; private Localized title = null; @Override public Control createUi(Composite parent, Node context) throws RepositoryException { + // TODO Factorize more, or split into more specialised classes? if (entryArea != null) { - SashFormEditionArea sashFormEditionArea = new SashFormEditionArea(parent, parent.getStyle()); - entryArea.createUi(sashFormEditionArea.getEntryArea(), context); - if (this.workArea != null) { - this.workArea.createUi(sashFormEditionArea.getEditorArea(), context); + if (fixedEntryArea) { + FixedEditionArea editionArea = new FixedEditionArea(parent, parent.getStyle()); + entryArea.createUi(editionArea.getEntryArea(), context); + if (this.defaultView != null) { + editionArea.getTabbedArea().view(defaultView, context); + } + return editionArea; + } else { + SashFormEditionArea editionArea = new SashFormEditionArea(parent, parent.getStyle()); + entryArea.createUi(editionArea.getEntryArea(), context); + if (this.defaultView != null) { + editionArea.getTabbedArea().view(defaultView, context); + } + return editionArea; } - return sashFormEditionArea; } else { if (this.workArea != null) { Composite area = new Composite(parent, SWT.NONE); @@ -52,15 +65,51 @@ public class DefaultEditionLayer implements SuiteLayer { } @Override - public void view(CmsUiProvider uiProvider, Composite workArea, Node context) { - TabbedArea tabbedArea; + public void view(CmsUiProvider uiProvider, Composite workAreaC, Node context) { + if (workArea != null) { + try { + CmsUiUtils.clear(workAreaC); + workArea.createUi(workAreaC, context); + workAreaC.requestLayout(); + return; + } catch (RepositoryException e) { + throw new JcrException("Cannot rebuild work area", e); + } + } + + // tabbed area + TabbedArea tabbedArea = findTabbedArea(workAreaC); + if (tabbedArea == null) + throw new IllegalArgumentException("Unsupported work area " + workAreaC.getClass().getName()); + if (uiProvider == null) { + // reset + tabbedArea.closeAllTabs(); + if (this.defaultView != null) { + tabbedArea.view(defaultView, context); + } + } else { + tabbedArea.view(uiProvider, context); + } + } + + @Override + public Node getCurrentContext(Composite workArea) { + TabbedArea tabbedArea = findTabbedArea(workArea); + if (tabbedArea == null) + return null; + return tabbedArea.getCurrentContext(); + } + + private TabbedArea findTabbedArea(Composite workArea) { + TabbedArea tabbedArea = null; if (workArea instanceof SashFormEditionArea) { tabbedArea = ((SashFormEditionArea) workArea).getTabbedArea(); + } else if (workArea instanceof FixedEditionArea) { + tabbedArea = ((FixedEditionArea) workArea).getTabbedArea(); } else if (workArea instanceof TabbedArea) { tabbedArea = (TabbedArea) workArea; - } else - throw new IllegalArgumentException("Unsupported work area " + workArea.getClass().getName()); - tabbedArea.view(uiProvider, context); + } + return tabbedArea; } @Override @@ -78,6 +127,12 @@ public class DefaultEditionLayer implements SuiteLayer { weights = LangUtils.toStringList(properties.get(Property.weights.name())); startMaximized = properties.containsKey(Property.startMaximized.name()) && "true".equals(properties.get(Property.startMaximized.name())); + fixedEntryArea = properties.containsKey(Property.fixedEntryArea.name()) + && "true".equals(properties.get(Property.fixedEntryArea.name())); + if (fixedEntryArea && weights.size() != 0) { + throw new IllegalArgumentException("Property " + Property.weights.name() + " should not be set if property " + + Property.fixedEntryArea.name() + " is set."); + } singleTab = properties.containsKey(Property.singleTab.name()) && "true".equals(properties.get(Property.singleTab.name())); @@ -116,6 +171,10 @@ public class DefaultEditionLayer implements SuiteLayer { this.workArea = workArea; } + public void setDefaultView(CmsUiProvider defaultView) { + this.defaultView = defaultView; + } + TabbedArea createTabbedArea(Composite parent, CmsTheme theme) { TabbedArea tabbedArea = new TabbedArea(parent, SWT.NONE); tabbedArea.setSingleTab(singleTab); @@ -127,26 +186,26 @@ public class DefaultEditionLayer implements SuiteLayer { return tabbedArea; } - /** A work area based on an entry area and and a tabbed area. */ +// /** A work area based on an entry area and and a tabbed area. */ class SashFormEditionArea extends SashForm { private static final long serialVersionUID = 2219125778722702618L; - private CmsTheme theme; - private Composite entryArea; - private Composite editorArea; private TabbedArea tabbedArea; + private Composite entryC; SashFormEditionArea(Composite parent, int style) { super(parent, SWT.HORIZONTAL); - theme = CmsTheme.getCmsTheme(parent); + CmsTheme theme = CmsTheme.getCmsTheme(parent); + Composite editorC; if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc. - editorArea = new Composite(this, SWT.BORDER); - entryArea = new Composite(this, SWT.BORDER); + editorC = new Composite(this, SWT.BORDER); + entryC = new Composite(this, SWT.BORDER); } else { - entryArea = new Composite(this, SWT.NONE); - editorArea = new Composite(this, SWT.NONE); + entryC = new Composite(this, SWT.NONE); + editorC = new Composite(this, SWT.NONE); } + // sash form specific if (weights.size() != 0) { int[] actualWeight = new int[weights.size()]; for (int i = 0; i < weights.size(); i++) { @@ -158,30 +217,69 @@ public class DefaultEditionLayer implements SuiteLayer { setWeights(actualWeights); } if (startMaximized) - setMaximizedControl(editorArea); - GridLayout editorAreaLayout = new GridLayout(); - editorAreaLayout.verticalSpacing = 0; - editorAreaLayout.marginBottom = 0; - editorAreaLayout.marginHeight = 0; - editorArea.setLayout(editorAreaLayout); - - if (DefaultEditionLayer.this.workArea == null) { - tabbedArea = createTabbedArea(editorArea, theme); - } + setMaximizedControl(editorC); + + GridLayout editorAreaLayout = CmsUiUtils.noSpaceGridLayout(); +// editorAreaLayout.verticalSpacing = 0; +// editorAreaLayout.marginBottom = 0; +// editorAreaLayout.marginHeight = 0; +// editorAreaLayout.marginLeft = 0; +// editorAreaLayout.marginRight = 0; + editorC.setLayout(editorAreaLayout); + tabbedArea = createTabbedArea(editorC, theme); + } + + TabbedArea getTabbedArea() { + return tabbedArea; } Composite getEntryArea() { - return entryArea; + return entryC; + } + + } + + class FixedEditionArea extends Composite { + private static final long serialVersionUID = -5525672639277322465L; + private TabbedArea tabbedArea; + private Composite entryC; + + public FixedEditionArea(Composite parent, int style) { + super(parent, style); + CmsTheme theme = CmsTheme.getCmsTheme(parent); + + setLayout(CmsUiUtils.noSpaceGridLayout(2)); + + Composite editorC; + if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc. + editorC = new Composite(this, SWT.NONE); + entryC = new Composite(this, SWT.NONE); + } else { + entryC = new Composite(this, SWT.NONE); + editorC = new Composite(this, SWT.NONE); + } + entryC.setLayoutData(CmsUiUtils.fillHeight()); + + GridLayout editorAreaLayout = CmsUiUtils.noSpaceGridLayout(); +// editorAreaLayout.verticalSpacing = 0; +// editorAreaLayout.marginBottom = 0; +// editorAreaLayout.marginHeight = 0; +// editorAreaLayout.marginLeft = 0; +// editorAreaLayout.marginRight = 0; + editorC.setLayout(editorAreaLayout); + editorC.setLayoutData(CmsUiUtils.fillAll()); + + tabbedArea = createTabbedArea(editorC, theme); } TabbedArea getTabbedArea() { return tabbedArea; } - Composite getEditorArea() { - return editorArea; + Composite getEntryArea() { + return entryC; } - } + } \ No newline at end of file