/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.ui.ftp.dialogs; import java.text.MessageFormat; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import com.aptana.ide.core.io.ConnectionPointType; import com.aptana.ide.core.io.CoreIOPlugin; import com.aptana.ide.core.io.IBaseRemoteConnectionPoint; import com.aptana.filesystem.ftp.IBaseFTPConnectionPoint; import com.aptana.ui.IPropertyDialog; import com.aptana.ui.ftp.FTPUIPlugin; import com.aptana.ui.ftp.internal.FTPConnectionPropertyComposite; /** * @author Max Stepanov */ public class FTPConnectionPointPropertyDialog extends TitleAreaDialog implements IPropertyDialog, FTPConnectionPropertyComposite.IListener { private Image titleImage; private FTPConnectionPropertyComposite ftpComposite; private IBaseRemoteConnectionPoint ftpConnectionPoint; private boolean lockedUI; /** * @param parentShell */ public FTPConnectionPointPropertyDialog(Shell parentShell) { super(parentShell); setHelpAvailable(false); } @Override public boolean isResizable() { return true; } /* * (non-Javadoc) * @see com.aptana.ide.core.io.ui.IPropertyDialog#setPropertyElement(java.lang.Object) */ public void setPropertySource(Object element) { ftpConnectionPoint = null; if (element instanceof IBaseRemoteConnectionPoint) { ftpConnectionPoint = (IBaseRemoteConnectionPoint) element; } if (ftpComposite != null) { ftpComposite.setConnectionPoint(ftpConnectionPoint); } } /* * (non-Javadoc) * @see com.aptana.ide.ui.IPropertyDialog#getPropertySource() */ public Object getPropertySource() { return ftpConnectionPoint; } protected ConnectionPointType getConnectionPointType() { if (ftpConnectionPoint != null) { return CoreIOPlugin.getConnectionPointManager().getType(ftpConnectionPoint); } return CoreIOPlugin.getConnectionPointManager().getType(IBaseFTPConnectionPoint.TYPE_FTP); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite dialogArea = (Composite) super.createDialogArea(parent); titleImage = FTPUIPlugin.getImageDescriptor("/icons/full/wizban/ftp.png").createImage(); //$NON-NLS-1$ dialogArea.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { dispose(); } }); setTitleImage(titleImage); if (ftpConnectionPoint != null) { setTitle(MessageFormat.format(Messages.FTPConnectionPointPropertyDialog_MessageTitle_Edit, getConnectionPointType().getName())); getShell().setText(Messages.FTPConnectionPointPropertyDialog_Title_Edit); } else { setTitle(MessageFormat.format(Messages.FTPConnectionPointPropertyDialog_MessageTitle_New, getConnectionPointType().getName())); getShell().setText(Messages.FTPConnectionPointPropertyDialog_Title_New); } ftpComposite = createConnectionComposite(dialogArea, ftpConnectionPoint); ftpComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); return dialogArea; } protected FTPConnectionPropertyComposite createConnectionComposite(Composite parent, IBaseRemoteConnectionPoint connectionPoint) { return new FTPConnectionPropertyComposite(parent, SWT.NONE, connectionPoint, this); } protected FTPConnectionPropertyComposite getConnectionComposite() { return ftpComposite; } protected void dispose() { if (titleImage != null) { setTitleImage(null); titleImage.dispose(); titleImage = null; } } /* * (non-Javadoc) * @see org.eclipse.jface.window.Window#canHandleShellCloseEvent() */ @Override protected boolean canHandleShellCloseEvent() { return !lockedUI && super.canHandleShellCloseEvent(); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { if (!ftpComposite.isValid()) { return; } if (ftpComposite.completeConnection()) { ftpConnectionPoint = ftpComposite.getConnectionPoint(); super.okPressed(); } } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#cancelPressed() */ @Override protected void cancelPressed() { ftpComposite.setCanceled(true); if (!lockedUI) { super.cancelPressed(); } } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { try { return super.createContents(parent); } finally { if (ftpComposite != null) { ftpComposite.validate(); } } } public void setValid(boolean valid) { Button button = getButton(OK); if (button != null) { button.setEnabled(valid); } } public void error(String message) { if (message == null) { setErrorMessage(null); setMessage(null); } else { setErrorMessage(message); } } public void lockUI(boolean lock) { lockedUI = lock; getButton(OK).setEnabled(!lock); } public void layoutShell() { Point size = getInitialSize(); Rectangle bounds = getConstrainedShellBounds(new Rectangle(0, 0, size.x, size.y)); getShell().setSize(bounds.width, bounds.height); } }