]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/CmsMessageDialog.java
Prepare next development cycle
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / dialogs / CmsMessageDialog.java
1 package org.argeo.cms.swt.dialogs;
2
3 import org.argeo.cms.CmsMsg;
4 import org.argeo.cms.swt.CmsSwtUtils;
5 import org.argeo.cms.swt.Selected;
6 import org.argeo.eclipse.ui.EclipseUiUtils;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.TraverseEvent;
9 import org.eclipse.swt.events.TraverseListener;
10 import org.eclipse.swt.graphics.Point;
11 import org.eclipse.swt.layout.GridData;
12 import org.eclipse.swt.layout.GridLayout;
13 import org.eclipse.swt.widgets.Button;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.swt.widgets.Control;
16 import org.eclipse.swt.widgets.Display;
17 import org.eclipse.swt.widgets.Label;
18 import org.eclipse.swt.widgets.Shell;
19
20 /** Base class for dialogs displaying messages or small forms. */
21 public class CmsMessageDialog extends LightweightDialog {
22 public final static int NONE = 0;
23 public final static int ERROR = 1;
24 public final static int INFORMATION = 2;
25 public final static int QUESTION = 3;
26 public final static int WARNING = 4;
27 public final static int CONFIRM = 5;
28 public final static int QUESTION_WITH_CANCEL = 6;
29
30 private int kind;
31 private String message;
32
33 public CmsMessageDialog(Shell parentShell, String message, int kind) {
34 super(parentShell);
35 this.kind = kind;
36 this.message = message;
37 }
38
39 protected Control createDialogArea(Composite parent) {
40 parent.setLayout(new GridLayout());
41
42 TraverseListener traverseListener = new TraverseListener() {
43 private static final long serialVersionUID = -1158892811534971856L;
44
45 public void keyTraversed(TraverseEvent e) {
46 if (e.detail == SWT.TRAVERSE_RETURN)
47 okPressed();
48 else if (e.detail == SWT.TRAVERSE_ESCAPE)
49 cancelPressed();
50 }
51 };
52
53 // message
54 Composite body = new Composite(parent, SWT.NONE);
55 body.addTraverseListener(traverseListener);
56 GridLayout bodyGridLayout = new GridLayout();
57 bodyGridLayout.marginHeight = 20;
58 bodyGridLayout.marginWidth = 20;
59 body.setLayout(bodyGridLayout);
60 body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
61
62 if (message != null) {
63 Label messageLbl = new Label(body, SWT.WRAP);
64 CmsSwtUtils.markup(messageLbl);
65 messageLbl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
66 messageLbl.setFont(EclipseUiUtils.getBoldFont(parent));
67 messageLbl.setText(message);
68 }
69
70 // buttons
71 Composite buttons = new Composite(parent, SWT.NONE);
72 buttons.addTraverseListener(traverseListener);
73 buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
74 if (kind == INFORMATION || kind == WARNING || kind == ERROR || kind == ERROR) {
75 GridLayout layout = new GridLayout(1, true);
76 layout.marginWidth = 0;
77 layout.marginHeight = 0;
78 buttons.setLayout(layout);
79
80 Button close = new Button(buttons, SWT.FLAT);
81 close.setText(CmsMsg.close.lead());
82 close.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
83 close.addSelectionListener((Selected) (e) -> closeShell(OK));
84 close.setFocus();
85 close.addTraverseListener(traverseListener);
86
87 buttons.setTabList(new Control[] { close });
88 } else if (kind == CONFIRM || kind == QUESTION || kind == QUESTION_WITH_CANCEL) {
89 Control input = createInputArea(body);
90 if (input != null) {
91 input.addTraverseListener(traverseListener);
92 body.setTabList(new Control[] { input });
93 }
94 GridLayout layout = new GridLayout(2, true);
95 layout.marginWidth = 0;
96 layout.marginHeight = 0;
97 buttons.setLayout(layout);
98
99 Button cancel = new Button(buttons, SWT.FLAT);
100 cancel.setText(CmsMsg.cancel.lead());
101 cancel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
102 cancel.addSelectionListener((Selected) (e) -> cancelPressed());
103 cancel.addTraverseListener(traverseListener);
104
105 Button ok = new Button(buttons, SWT.FLAT);
106 ok.setText(CmsMsg.ok.lead());
107 ok.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
108 ok.addSelectionListener((Selected) (e) -> okPressed());
109 ok.addTraverseListener(traverseListener);
110 if (input == null)
111 ok.setFocus();
112 else
113 input.setFocus();
114
115 buttons.setTabList(new Control[] { ok, cancel });
116 }
117 // pack();
118 parent.setTabList(new Control[] { body, buttons });
119 return body;
120 }
121
122 protected Control createInputArea(Composite parent) {
123 return null;
124 }
125
126 protected void okPressed() {
127 closeShell(OK);
128 }
129
130 protected void cancelPressed() {
131 closeShell(CANCEL);
132 }
133
134 protected void cancel() {
135 closeShell(CANCEL);
136 }
137
138 protected Point getInitialSize() {
139 return new Point(400, 200);
140 }
141
142 public static boolean open(int kind, Shell parent, String message) {
143 CmsMessageDialog dialog = new CmsMessageDialog(parent, message, kind);
144 return dialog.open() == 0;
145 }
146
147 public static boolean openConfirm(String message) {
148 return open(CONFIRM, Display.getCurrent().getActiveShell(), message);
149 }
150
151 public static void openInformation(String message) {
152 open(INFORMATION, Display.getCurrent().getActiveShell(), message);
153 }
154
155 public static boolean openQuestion(String message) {
156 return open(QUESTION, Display.getCurrent().getActiveShell(), message);
157 }
158
159 public static void openWarning(String message) {
160 open(WARNING, Display.getCurrent().getActiveShell(), message);
161 }
162
163 public static void openError(String message) {
164 open(ERROR, Display.getCurrent().getActiveShell(), message);
165 }
166
167 }