]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/dialogs/DefaultLoginDialog.java
Improve user menu
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui / src / main / java / org / argeo / security / ui / dialogs / DefaultLoginDialog.java
index 19affc85431009fd36fedaf348c50da0fa3e3150..208eefea8b1b84a644552b4ad485cf0df7487a7e 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.security.ui.dialogs;
 
 import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.NameCallback;
 import javax.security.auth.callback.PasswordCallback;
 import javax.security.auth.callback.TextOutputCallback;
@@ -9,6 +10,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -18,6 +20,7 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
+/** Default authentication dialog, to be used as {@link CallbackHandler}. */
 public class DefaultLoginDialog extends AbstractLoginDialog {
 
        public DefaultLoginDialog() {
@@ -32,13 +35,26 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
                return new Point(300, 180);
        }
 
+       @Override
+       protected Control createContents(Composite parent) {
+               Control control = super.createContents(parent);
+               parent.pack();
+               // Move the dialog to the center of the top level shell.
+               Rectangle shellBounds = Display.getCurrent().getBounds();
+               Point dialogSize = parent.getSize();
+               int x = shellBounds.x + (shellBounds.width - dialogSize.x) / 2;
+               int y = shellBounds.y + (shellBounds.height - dialogSize.y) / 2;
+               parent.setLocation(x, y);
+               return control;
+       }
+
        protected Control createDialogArea(Composite parent) {
                Composite dialogarea = (Composite) super.createDialogArea(parent);
                Composite composite = new Composite(dialogarea, SWT.NONE);
                composite.setLayout(new GridLayout(2, false));
                composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                createCallbackHandlers(composite);
-               parent.pack();
+               // parent.pack();
                return composite;
        }
 
@@ -47,7 +63,7 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
                for (int i = 0; i < callbacks.length; i++) {
                        Callback callback = callbacks[i];
                        if (callback instanceof TextOutputCallback) {
-                               createTextoutputHandler(composite,
+                               createLabelTextoutputHandler(composite,
                                                (TextOutputCallback) callback);
                        } else if (callback instanceof NameCallback) {
                                createNameHandler(composite, (NameCallback) callback);
@@ -68,6 +84,7 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
                passwordText.addModifyListener(new ModifyListener() {
 
                        public void modifyText(ModifyEvent event) {
+                               // FIXME use getTextChars() in Eclipse 3.7
                                callback.setPassword(passwordText.getText().toCharArray());
                        }
                });
@@ -88,8 +105,13 @@ public class DefaultLoginDialog extends AbstractLoginDialog {
                });
        }
 
-       private void createTextoutputHandler(Composite composite,
-                       TextOutputCallback callback) {
+       private void createLabelTextoutputHandler(Composite composite,
+                       final TextOutputCallback callback) {
+               Label label = new Label(composite, SWT.NONE);
+               label.setText(callback.getMessage());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               data.horizontalSpan = 2;
+               label.setLayoutData(data);
                // TODO: find a way to pass this information
                // int messageType = callback.getMessageType();
                // int dialogMessageType = IMessageProvider.NONE;