]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java
Keep suite stabilising data model.
[gpl/argeo-suite.git] / org.argeo.suite.ui / src / org / argeo / suite / ui / DefaultEditionLayer.java
1 package org.argeo.suite.ui;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.cms.ui.CmsTheme;
7 import org.argeo.cms.ui.CmsUiProvider;
8 import org.argeo.cms.ui.util.CmsUiUtils;
9 import org.argeo.cms.ui.widgets.TabbedArea;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.custom.SashForm;
12 import org.eclipse.swt.layout.GridLayout;
13 import org.eclipse.swt.widgets.Composite;
14 import org.eclipse.swt.widgets.Control;
15
16 /** An app layer based on an entry area and an editor area. */
17 public class DefaultEditionLayer implements SuiteLayer {
18 private CmsUiProvider entryArea;
19 private CmsUiProvider workArea;
20
21 @Override
22 public Control createUi(Composite parent, Node context) throws RepositoryException {
23 if (entryArea != null) {
24 SashFormEditionArea sashFormEditionArea = new SashFormEditionArea(parent, parent.getStyle());
25 entryArea.createUi(sashFormEditionArea.getEntryArea(), context);
26 if (this.workArea != null) {
27 this.workArea.createUi(sashFormEditionArea.getEditorArea(), context);
28 }
29 return sashFormEditionArea;
30 } else {
31 if (this.workArea != null) {
32 Composite area = new Composite(parent, SWT.NONE);
33 this.workArea.createUi(area, context);
34 return area;
35 }
36 CmsTheme theme = CmsTheme.getCmsTheme(parent);
37 TabbedArea tabbedArea = createTabbedArea(parent, theme);
38 return tabbedArea;
39 }
40 }
41
42 @Override
43 public void view(CmsUiProvider uiProvider, Composite workArea, Node context) {
44 TabbedArea tabbedArea;
45 if (workArea instanceof SashFormEditionArea) {
46 tabbedArea = ((SashFormEditionArea) workArea).getTabbedArea();
47 } else if (workArea instanceof TabbedArea) {
48 tabbedArea = (TabbedArea) workArea;
49 } else
50 throw new IllegalArgumentException("Unsupported work area " + workArea.getClass().getName());
51 tabbedArea.view(uiProvider, context);
52 }
53
54 @Override
55 public void open(CmsUiProvider uiProvider, Composite workArea, Node context) {
56 TabbedArea tabbedArea = ((SashFormEditionArea) workArea).getTabbedArea();
57 tabbedArea.open(uiProvider, context);
58 }
59
60 public void setEntryArea(CmsUiProvider entryArea) {
61 this.entryArea = entryArea;
62 }
63
64 public void setWorkArea(CmsUiProvider workArea) {
65 this.workArea = workArea;
66 }
67
68 TabbedArea createTabbedArea(Composite parent, CmsTheme theme) {
69 TabbedArea tabbedArea = new TabbedArea(parent, SWT.NONE);
70 tabbedArea.setBodyStyle(SuiteStyle.mainTabBody.toStyleClass());
71 tabbedArea.setTabStyle(SuiteStyle.mainTab.toStyleClass());
72 tabbedArea.setTabSelectedStyle(SuiteStyle.mainTabSelected.toStyleClass());
73 tabbedArea.setCloseIcon(SuiteIcon.close.getSmallIcon(theme));
74 tabbedArea.setLayoutData(CmsUiUtils.fillAll());
75 return tabbedArea;
76 }
77
78 /** A work area based on an entry area and and a tabbed area. */
79 class SashFormEditionArea extends SashForm {
80 private static final long serialVersionUID = 2219125778722702618L;
81 private CmsTheme theme;
82 private Composite entryArea;
83 private Composite editorArea;
84 private TabbedArea tabbedArea;
85
86 SashFormEditionArea(Composite parent, int style) {
87 super(parent, SWT.HORIZONTAL);
88 theme = CmsTheme.getCmsTheme(parent);
89
90 if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc.
91 editorArea = new Composite(this, SWT.BORDER);
92 entryArea = new Composite(this, SWT.BORDER);
93 } else {
94 entryArea = new Composite(this, SWT.NONE);
95 editorArea = new Composite(this, SWT.NONE);
96 }
97 int[] weights = new int[] { 3000, 7000 };
98 setWeights(weights);
99 editorArea.setLayout(new GridLayout());
100
101 if (DefaultEditionLayer.this.workArea == null) {
102 tabbedArea = createTabbedArea(editorArea, theme);
103 }
104 }
105
106 Composite getEntryArea() {
107 return entryArea;
108 }
109
110 TabbedArea getTabbedArea() {
111 return tabbedArea;
112 }
113
114 Composite getEditorArea() {
115 return editorArea;
116 }
117
118 }
119 }