Improve CMS UI
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / dialogs / CmsMessageDialog.java
index 521c4b010f92ba91ced8095a871becef21e4babe..fa85dff462c3dcac791c2f947faa4cf3a9431cee 100644 (file)
@@ -1,10 +1,13 @@
 package org.argeo.cms.ui.dialogs;
 
 import org.argeo.cms.CmsMsg;
+import org.argeo.cms.util.CmsUtils;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.Selected;
 import org.argeo.eclipse.ui.dialogs.LightweightDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -33,8 +36,20 @@ public class CmsMessageDialog extends LightweightDialog {
        protected Control createDialogArea(Composite parent) {
                parent.setLayout(new GridLayout());
 
+               TraverseListener traverseListener = new TraverseListener() {
+                       private static final long serialVersionUID = -1158892811534971856L;
+
+                       public void keyTraversed(TraverseEvent e) {
+                               if (e.detail == SWT.TRAVERSE_RETURN)
+                                       okPressed();
+                               else if (e.detail == SWT.TRAVERSE_ESCAPE)
+                                       cancelPressed();
+                       }
+               };
+
                // message
                Composite body = new Composite(parent, SWT.NONE);
+               body.addTraverseListener(traverseListener);
                GridLayout bodyGridLayout = new GridLayout();
                bodyGridLayout.marginHeight = 20;
                bodyGridLayout.marginWidth = 20;
@@ -42,13 +57,15 @@ public class CmsMessageDialog extends LightweightDialog {
                body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
                Label messageLbl = new Label(body, SWT.WRAP);
+               CmsUtils.markup(messageLbl);
+               messageLbl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                messageLbl.setFont(EclipseUiUtils.getBoldFont(parent));
                if (message != null)
                        messageLbl.setText(message);
-               createInputArea(body);
 
                // buttons
                Composite buttons = new Composite(parent, SWT.NONE);
+               buttons.addTraverseListener(traverseListener);
                buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
                if (kind == INFORMATION || kind == WARNING) {
                        GridLayout layout = new GridLayout(1, true);
@@ -60,7 +77,16 @@ public class CmsMessageDialog extends LightweightDialog {
                        close.setText(CmsMsg.close.lead());
                        close.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
                        close.addSelectionListener((Selected) (e) -> closeShell(OK));
+                       close.setFocus();
+                       close.addTraverseListener(traverseListener);
+
+                       buttons.setTabList(new Control[] { close });
                } else if (kind == CONFIRM || kind == QUESTION) {
+                       Control input = createInputArea(body);
+                       if (input != null) {
+                               input.addTraverseListener(traverseListener);
+                               body.setTabList(new Control[] { input });
+                       }
                        GridLayout layout = new GridLayout(2, true);
                        layout.marginWidth = 0;
                        layout.marginHeight = 0;
@@ -70,13 +96,22 @@ public class CmsMessageDialog extends LightweightDialog {
                        cancel.setText(CmsMsg.cancel.lead());
                        cancel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
                        cancel.addSelectionListener((Selected) (e) -> cancelPressed());
+                       cancel.addTraverseListener(traverseListener);
 
                        Button ok = new Button(buttons, SWT.FLAT);
                        ok.setText(CmsMsg.ok.lead());
                        ok.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
                        ok.addSelectionListener((Selected) (e) -> okPressed());
+                       ok.addTraverseListener(traverseListener);
+                       if (input == null)
+                               ok.setFocus();
+                       else
+                               input.setFocus();
+
+                       buttons.setTabList(new Control[] { ok, cancel });
                }
                // pack();
+               parent.setTabList(new Control[] { body, buttons });
                return body;
        }