1 package org.argeo.cms.ui.forms;
2
3 import java.util.Observable;
4 import java.util.Observer;
5
6 import javax.jcr.Node;
7
8 import org.argeo.cms.ui.CmsEditable;
9 import org.argeo.cms.ui.util.CmsUiUtils;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.events.SelectionEvent;
12 import org.eclipse.swt.events.SelectionListener;
13 import org.eclipse.swt.widgets.Button;
14 import org.eclipse.swt.widgets.Composite;
15
16
17 public class FormEditorHeader implements SelectionListener, Observer {
18 private static final long serialVersionUID = 7392898696542484282L;
19
20
21 private final CmsEditable cmsEditable;
22 private Button publishBtn;
23
24
25
26
27
28
29
30
31
32 private Composite parent;
33 private Composite display;
34 private Object layoutData;
35
36 public FormEditorHeader(Composite parent, int style, Node context,
37 CmsEditable cmsEditable) {
38 this.cmsEditable = cmsEditable;
39 this.parent = parent;
40
41
42 if (this.cmsEditable instanceof Observable)
43 ((Observable) this.cmsEditable).addObserver(this);
44 refresh();
45 }
46
47 public void setLayoutData(Object layoutData) {
48 this.layoutData = layoutData;
49 if (display != null && !display.isDisposed())
50 display.setLayoutData(layoutData);
51 }
52
53 protected void refresh() {
54 if (display != null && !display.isDisposed())
55 display.dispose();
56
57 display = new Composite(parent, SWT.NONE);
58 display.setLayoutData(layoutData);
59
60 CmsUiUtils.style(display, FormStyle.header.style());
61 display.setBackgroundMode(SWT.INHERIT_FORCE);
62
63 display.setLayout(CmsUiUtils.noSpaceGridLayout());
64
65 publishBtn = createSimpleBtn(display, getPublishButtonLabel());
66 display.moveAbove(null);
67 parent.layout();
68 }
69
70 private Button createSimpleBtn(Composite parent, String label) {
71 Button button = new Button(parent, SWT.FLAT | SWT.PUSH);
72 button.setText(label);
73 CmsUiUtils.style(button, FormStyle.header.style());
74 button.addSelectionListener(this);
75 return button;
76 }
77
78 private String getPublishButtonLabel() {
79
80
81
82
83 if (cmsEditable.isEditing())
84 return " Publish ";
85 else
86 return " Edit ";
87 }
88
89 @Override
90 public void widgetSelected(SelectionEvent e) {
91 if (e.getSource() == publishBtn) {
92
93
94 if (cmsEditable.isEditing()) {
95
96 cmsEditable.stopEditing();
97 cmsEditable.startEditing();
98 } else {
99 cmsEditable.startEditing();
100 }
101 }
102 }
103
104 @Override
105 public void widgetDefaultSelected(SelectionEvent e) {
106 }
107
108 @Override
109 public void update(Observable o, Object arg) {
110 if (o == cmsEditable) {
111 refresh();
112 }
113 }
114 }