/******************************************************************************* * 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(); } }