content: /*******************************************************************************
   * Copyright (c) 2000, 2008 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
   package org.eclipse.wst.jsdt.internal.ui.dialogs;
  
  import org.eclipse.jface.dialogs.DialogSettings;
  import org.eclipse.jface.dialogs.IDialogSettings;
  import org.eclipse.jface.operation.IRunnableContext;
  import org.eclipse.swt.graphics.Point;
  import org.eclipse.swt.graphics.Rectangle;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Control;
  import org.eclipse.swt.widgets.Shell;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.wst.jsdt.core.search.IJavaScriptSearchScope;
  import org.eclipse.wst.jsdt.internal.ui.IJavaHelpContextIds;
  import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
  import org.eclipse.wst.jsdt.ui.dialogs.TypeSelectionExtension;
  
  /**
   * @deprecated use {@link OpenTypeSelectionDialog}
   */
  public class OpenTypeSelectionDialog2 extends TypeSelectionDialog2 {
  
  	private IDialogSettings fSettings;
  	private Point fLocation;
  	private Point fSize;
  
  	private static final String DIALOG_SETTINGS= "org.eclipse.wst.jsdt.internal.ui.dialogs.OpenTypeSelectionDialog2"; //$NON-NLS-1$
  	private static final String WIDTH= "width"; //$NON-NLS-1$
  	private static final String HEIGHT= "height"; //$NON-NLS-1$
  	
  	public OpenTypeSelectionDialog2(Shell parent, boolean multi, IRunnableContext context, IJavaScriptSearchScope scope, int elementKinds) {
  		this(parent, multi, context, scope, elementKinds, null);
  	}
  	
  	public OpenTypeSelectionDialog2(Shell parent, boolean multi, IRunnableContext context, 
  			IJavaScriptSearchScope scope, int elementKinds, TypeSelectionExtension extension) {
  		super(parent, multi, context, scope, elementKinds, extension);
  		IDialogSettings settings= JavaScriptPlugin.getDefault().getDialogSettings();
  		fSettings= settings.getSection(DIALOG_SETTINGS);
  		if (fSettings == null) {
  			fSettings= new DialogSettings(DIALOG_SETTINGS);
  			settings.addSection(fSettings);
  			fSettings.put(WIDTH, 480);
  			fSettings.put(HEIGHT, 320);
  		}
  	}
  	
  	protected void configureShell(Shell newShell) {
  		super.configureShell(newShell);
  		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.OPEN_TYPE_DIALOG);
  	}
  
  	protected Point getInitialSize() {
  		Point result= super.getInitialSize();
  		if (fSize != null) {
  			result.x= Math.max(result.x, fSize.x);
  			result.y= Math.max(result.y, fSize.y);
  			Rectangle display= getShell().getDisplay().getClientArea();
  			result.x= Math.min(result.x, display.width);
  			result.y= Math.min(result.y, display.height);
  		}
  		return result;
  	}
  	
  	protected Point getInitialLocation(Point initialSize) {
  		Point result= super.getInitialLocation(initialSize);
  		if (fLocation != null) {
  			result.x= fLocation.x;
  			result.y= fLocation.y;
  			Rectangle display= getShell().getDisplay().getClientArea();
  			int xe= result.x + initialSize.x;
  			if (xe > display.width) {
  				result.x-= xe - display.width; 
  			}
  			int ye= result.y + initialSize.y;
  			if (ye > display.height) {
  				result.y-= ye - display.height; 
  			}
  		}
  		return result;
  	}
  	
  	protected Control createDialogArea(Composite parent) {
  		readSettings();
  		return super.createDialogArea(parent);
  	}
  	
  	public boolean close() {
  		writeSettings();
  		return super.close();
  	}
  	
  	/**
  	 * Initializes itself from the dialog settings with the same state
  	 * as at the previous invocation.
  	 */
  	private void readSettings() {
  		try {
  			int x= fSettings.getInt("x"); //$NON-NLS-1$
  			int y= fSettings.getInt("y"); //$NON-NLS-1$
  			fLocation= new Point(x, y);
  		} catch (NumberFormatException e) {
  			fLocation= null;
  		}
  		try {
  			int width= fSettings.getInt("width"); //$NON-NLS-1$
  			int height= fSettings.getInt("height"); //$NON-NLS-1$
  			fSize= new Point(width, height);
  
  		} catch (NumberFormatException e) {
  			fSize= null;
  		}
  	}
  
  	/**
  	 * Stores it current configuration in the dialog store.
  	 */
  	private void writeSettings() {
  		Point location= getShell().getLocation();
  		fSettings.put("x", location.x); //$NON-NLS-1$
  		fSettings.put("y", location.y); //$NON-NLS-1$
  
  		Point size= getShell().getSize();
  		fSettings.put("width", size.x); //$NON-NLS-1$
  		fSettings.put("height", size.y); //$NON-NLS-1$
  	}	
  }
  