View Javadoc
1   package org.argeo.cms.ui.util;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.jcr.Node;
7   import javax.jcr.RepositoryException;
8   
9   import org.argeo.cms.CmsException;
10  import org.argeo.cms.ui.CmsStyles;
11  import org.argeo.cms.ui.CmsUiProvider;
12  import org.eclipse.rap.rwt.RWT;
13  import org.eclipse.swt.SWT;
14  import org.eclipse.swt.layout.GridData;
15  import org.eclipse.swt.layout.GridLayout;
16  import org.eclipse.swt.widgets.Composite;
17  import org.eclipse.swt.widgets.Control;
18  
19  /** A header in three parts */
20  public class SimpleCmsHeader implements CmsUiProvider {
21  	private List<CmsUiProvider> lead = new ArrayList<CmsUiProvider>();
22  	private List<CmsUiProvider> center = new ArrayList<CmsUiProvider>();
23  	private List<CmsUiProvider> end = new ArrayList<CmsUiProvider>();
24  
25  	private Boolean subPartsSameWidth = false;
26  
27  	@Override
28  	public Control createUi(Composite parent, Node context) throws RepositoryException {
29  		Composite header = new Composite(parent, SWT.NONE);
30  		header.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_HEADER);
31  		header.setBackgroundMode(SWT.INHERIT_DEFAULT);
32  		header.setLayout(CmsUiUtils.noSpaceGridLayout(new GridLayout(3, false)));
33  
34  		configurePart(context, header, lead);
35  		configurePart(context, header, center);
36  		configurePart(context, header, end);
37  		return header;
38  	}
39  
40  	protected void configurePart(Node context, Composite parent, List<CmsUiProvider> partProviders)
41  			throws RepositoryException {
42  		final int style;
43  		final String custom;
44  		if (lead == partProviders) {
45  			style = SWT.LEAD;
46  			custom = CmsStyles.CMS_HEADER_LEAD;
47  		} else if (center == partProviders) {
48  			style = SWT.CENTER;
49  			custom = CmsStyles.CMS_HEADER_CENTER;
50  		} else if (end == partProviders) {
51  			style = SWT.END;
52  			custom = CmsStyles.CMS_HEADER_END;
53  		} else {
54  			throw new CmsException("Unsupported part providers " + partProviders);
55  		}
56  
57  		Composite part = new Composite(parent, SWT.NONE);
58  		part.setData(RWT.CUSTOM_VARIANT, custom);
59  		GridData gridData = new GridData(style, SWT.FILL, true, true);
60  		part.setLayoutData(gridData);
61  		part.setLayout(CmsUiUtils.noSpaceGridLayout(new GridLayout(partProviders.size(), subPartsSameWidth)));
62  		for (CmsUiProvider uiProvider : partProviders) {
63  			Control subPart = uiProvider.createUi(part, context);
64  			subPart.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
65  		}
66  	}
67  
68  	public void setLead(List<CmsUiProvider> lead) {
69  		this.lead = lead;
70  	}
71  
72  	public void setCenter(List<CmsUiProvider> center) {
73  		this.center = center;
74  	}
75  
76  	public void setEnd(List<CmsUiProvider> end) {
77  		this.end = end;
78  	}
79  
80  	public void setSubPartsSameWidth(Boolean subPartsSameWidth) {
81  		this.subPartsSameWidth = subPartsSameWidth;
82  	}
83  
84  	public List<CmsUiProvider> getLead() {
85  		return lead;
86  	}
87  
88  	public List<CmsUiProvider> getCenter() {
89  		return center;
90  	}
91  
92  	public List<CmsUiProvider> getEnd() {
93  		return end;
94  	}
95  
96  }