initial contribution
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / preferences / AlternateUserValidationDialog.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/preferences/AlternateUserValidationDialog.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/preferences/AlternateUserValidationDialog.java
new file mode 100644 (file)
index 0000000..b4cc992
--- /dev/null
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.wiki.preferences;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class AlternateUserValidationDialog extends Dialog {
+       String user;
+       String password = ""; //$NON-NLS-1$
+       List numXs = new ArrayList();
+       Label icon1;
+       Label icon2;
+       Label icon3;
+       Label icon4;
+       Text passwordText;
+       boolean inUpdate = false;
+       
+       Image[] images;
+       
+       public AlternateUserValidationDialog(Shell parentShell, String user) {
+               super(parentShell);
+               this.user = user;
+               initializeImages();
+       }
+       
+       protected void configureShell(Shell newShell) {
+               super.configureShell(newShell);
+               newShell.setText(Messages.bind("AlternateUserValidationDialog.Enter_Password_2")); //$NON-NLS-1$
+       }
+       
+       protected Control createContents(Composite parent) {
+               Composite main = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 3;
+               main.setLayout(layout);
+               main.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               Composite iconComposite = new Composite(main, SWT.NONE);
+               layout = new GridLayout();
+               layout.numColumns = 2;
+               iconComposite.setLayout(layout);
+               iconComposite.setLayoutData(new GridData());
+               
+               icon1 = createLabel(iconComposite);
+               icon2 = createLabel(iconComposite);
+               icon3 = createLabel(iconComposite);
+               icon4 = createLabel(iconComposite);
+               
+               Composite middleComposite = new Composite(main, SWT.NONE);
+               middleComposite.setLayout(new GridLayout());
+               middleComposite.setLayoutData(new GridData());
+               
+               Label l = new Label(middleComposite, SWT.NULL);
+               l.setText(Messages.bind("AlternateUserValidationDialog.message", user)); //$NON-NLS-1$
+               l.setLayoutData(new GridData());
+               l = new Label(middleComposite, SWT.NULL);
+               l.setText(""); //$NON-NLS-1$
+               l.setLayoutData(new GridData());
+               passwordText = new Text(middleComposite, SWT.SINGLE | SWT.BORDER);
+               GridData data = new GridData();
+               data.widthHint = 250;
+               passwordText.setLayoutData(data);
+               
+               passwordText.addVerifyListener(new VerifyListener() {
+                       public void verifyText(VerifyEvent e) {
+                               if (inUpdate) return;
+                               e.doit = false;
+                               inUpdate = true;
+                               switch ((int)e.character) {
+                                       case 8: {
+                                               // backspace pressed
+                                               if (password.length() > 0) {
+                                                       password = password.substring(0, password.length() - 1);
+                                               }
+                                               // get rid of bogus Xs
+                                               int numX = ((Integer)numXs.get(numXs.size() - 1)).intValue();
+                                               numXs.remove(numXs.size() - 1);
+                                               String oldText = passwordText.getText();
+                                               String newText = oldText.substring(0, oldText.length() - numX);
+                                               passwordText.setText(newText);
+                                               passwordText.setSelection(newText.length());
+                                               break;
+                                       }
+                                       default: {
+                                               String oldText = passwordText.getText();
+                                               String x = getXs();
+                                               numXs.add(numXs.size(), new Integer(x.length()));
+                                               String newText = oldText + x;
+                                               passwordText.setText(newText);
+                                               passwordText.setSelection(newText.length());
+                                               password += e.character;
+                                       }
+                               }
+                               inUpdate = false;
+                               updateImages();
+                       }
+               });
+               /*passwordText.addTraverseListener(new TraverseListener() {
+                       public void keyTraversed(TraverseEvent e) {
+                               switch (e.detail) {
+                                       case SWT.TRAVERSE_ARROW_NEXT:
+                                       case SWT.TRAVERSE_ARROW_PREVIOUS:
+                                               e.detail = SWT.TRAVERSE_NONE;
+                                               e.doit = false;
+                                               break;
+                               }
+                       }
+               });*/
+               Composite buttonComposite = new Composite(main, SWT.NONE);
+               buttonComposite.setLayout(new GridLayout());
+               buttonComposite.setLayoutData(new GridData());
+               Button b = new Button(buttonComposite, SWT.PUSH);
+               b.setText(Messages.bind("AlternateUserValidationDialog.OK_6")); //$NON-NLS-1$
+               data = new GridData();
+               data.widthHint = 70;
+               b.setLayoutData(data);
+               b.addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event event) {
+                               okPressed();
+                       }
+               });
+               buttonComposite.getShell().setDefaultButton(b);
+               b = new Button(buttonComposite, SWT.PUSH);
+               b.setText(Messages.bind("AlternateUserValidationDialog.Cancel_7")); //$NON-NLS-1$
+               data = new GridData();
+               data.widthHint = 70;
+               b.setLayoutData(data);
+               b.addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event event) {
+                               cancelPressed();
+                       }
+               });
+        Dialog.applyDialogFont(parent);
+               return main;
+       }
+
+       public boolean close() {
+               boolean result = super.close();
+               if (images != null) {
+                       for (int i = 0; i < images.length; i++) {
+                               images[i].dispose();
+                               images[i] = null;
+                       }
+                       images = null;
+               }
+               return result;
+       }
+       public String getPassword() {
+               return password;
+       }
+       
+       Label createLabel(Composite parent) {
+               Label result = new Label(parent, SWT.NULL);
+               GridData data = new GridData();
+               data.widthHint = 22;
+               data.heightHint = 22;
+               result.setLayoutData(data);
+               result.setImage(getImage());
+               return result;
+       }
+       Image getImage() {
+               double random = Math.random();
+               random *= 7; // Random number between 0.0 and 7.0
+               long num = Math.round(random);
+               return images[(int)num];
+       }
+       void initializeImages() {
+               images = new Image[8];
+               for (int i = 0; i < images.length; i++) {
+                       images[i] = WikiEditorPlugin.getDefault().getImageDescriptor("glyphs/glyph" + (i+1) + ".gif").createImage(); //$NON-NLS-1$ //$NON-NLS-2$
+               }
+               FontData fd = new FontData();
+               fd.setStyle(SWT.BOLD);
+               fd.setHeight(10);
+               // On Windows, set the font to Sans Serif for an authentic look
+               if (System.getProperty("os.name").indexOf("Windows") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
+                       fd.setName("Microsoft Sans Serif"); //$NON-NLS-1$
+               }
+       }
+       void updateImages() {
+               icon1.setImage(getImage());
+               icon2.setImage(getImage());
+               icon3.setImage(getImage());
+               icon4.setImage(getImage());
+       }
+       public void setUsername(String user) {
+               this.user = user;
+       }
+       String getXs() {
+               double random = Math.random();
+               random *= 2;
+               random += 2;
+               long num = Math.round(random);
+               // Random number between 2 and 4
+               switch ((int)num) {
+                       case 2:
+                               return "XX"; //$NON-NLS-1$
+                       case 3:
+                               return "XXX"; //$NON-NLS-1$
+                       case 4:
+                               return "XXXX"; //$NON-NLS-1$
+               }
+               return "X"; //$NON-NLS-1$
+       }
+       protected void cancelPressed() {
+               password = null;
+               super.cancelPressed();
+       }
+}