/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.datatools.ui.dialogs;
import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin;
import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants;
import org.eclipse.datatools.connectivity.ui.Messages;
import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage;
import org.eclipse.datatools.connectivity.ui.wizards.NewConnectionProfileWizard;
import org.eclipse.datatools.help.HelpUtil;
import org.eclipse.help.IContextProvider;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
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.teiid.designer.ui.common.widget.DefaultScrolledComposite;
/**
* Extending <code>ConnectionProfileDetailsPage</code> so we can wrap the page in a scrolled composite. This provides
* profile pages the ability to build a larger page for necessary content and still allow for editing on lower resolution
* displays
*
* @author blafond
*
*/
public abstract class ScrolledConnectionProfileDetailsPage extends ConnectionProfileDetailsPage implements IContextProvider {
private boolean defaultAutoConnectOnFinishFlag = true;
private Button autoConnectOnFinishButton = null;
private Button autoConnectOnStartupButton = null;
private boolean _showAutoConnect = true;
private boolean _showAutoConnectOnFinish = true;
private boolean _showPing = true;
/**
* @param name
*/
public ScrolledConnectionProfileDetailsPage(String name) {
super(name);
}
/**
* @param pageName
* @param title
* @param titleImage
*/
public ScrolledConnectionProfileDetailsPage(String pageName, String title,
ImageDescriptor titleImage) {
super(pageName, title, titleImage);
}
public void createControl(Composite parent) {
final Composite hostPanel = new Composite(parent, SWT.NONE);
hostPanel.setLayout(new GridLayout(1, false));
hostPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create page
DefaultScrolledComposite scrolledComposite = new DefaultScrolledComposite(hostPanel, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
GridLayoutFactory.fillDefaults().equalWidth(false).applyTo(scrolledComposite);
GridDataFactory.fillDefaults().grab(true, false);
final Composite mainPanel = scrolledComposite.getPanel(); //new Composite(scrolledComposite, SWT.NONE);
mainPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mainPanel.setLayout(new GridLayout(2, false));
((GridData)mainPanel.getLayoutData()).minimumWidth = 400;
// Client shouldn't call setControl again.
setControl(hostPanel);
// setting help now rather than at the end so that
// extenders can override with different context IDs in their
// custom UI
getShell().setData( HelpUtil.CONTEXT_PROVIDER_KEY, this);
HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.CONTEXT_ID_NEW_CONNECTION_PROFILE_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName()));
final Composite composite = new Composite(mainPanel, SWT.NONE);
FillLayout flayout = new FillLayout();
flayout.marginHeight = 0;
flayout.marginWidth = 0;
composite.setLayout(flayout);
GridData compositeGD = new GridData(GridData.FILL_BOTH);
compositeGD.horizontalSpan = 2;
composite.setLayoutData(compositeGD);
createCustomControl(composite);
if (_showAutoConnectOnFinish) {
autoConnectOnFinishButton = new Button(mainPanel, SWT.CHECK);
autoConnectOnFinishButton.setText(Messages.ConnectionProfileDetailsPage_Autoconnect_finish);
autoConnectOnFinishButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
autoConnectOnFinishButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
ScrolledConnectionProfileDetailsPage.this.setAutoConnectFinish(
ScrolledConnectionProfileDetailsPage.this.autoConnectOnFinishButton.getSelection());
}
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
});
autoConnectOnFinishButton.setSelection(defaultAutoConnectOnFinishFlag);
}
if (_showPing) {
btnPing = new Button(mainPanel, SWT.NONE);
btnPing.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
testConnection();
}
});
GridData pingGD = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_HORIZONTAL);
if (!_showAutoConnectOnFinish)
pingGD.horizontalSpan = 2;
btnPing.setLayoutData(pingGD);
btnPing.setText(ConnectivityUIPlugin.getDefault().getResourceString(
"ConnectionProfileDetailsPage.Button.TestConnection")); //$NON-NLS-1$
}
if (_showAutoConnect) {
autoConnectOnStartupButton = new Button(mainPanel, SWT.CHECK);
autoConnectOnStartupButton.setText(Messages.ConnectionProfileDetailsPage_Autoconnect_startup);
GridData acStartupGD = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
if (!_showPing)
acStartupGD.horizontalSpan = 2;
autoConnectOnStartupButton.setLayoutData(acStartupGD);
autoConnectOnStartupButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
ScrolledConnectionProfileDetailsPage.this.setAutoConnect(
ScrolledConnectionProfileDetailsPage.this.autoConnectOnStartupButton.getSelection());
}
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
});
}
if (this.getWizard() instanceof NewConnectionProfileWizard) {
NewConnectionProfileWizard wiz =
(NewConnectionProfileWizard) this.getWizard();
wiz.getProfilePage().setAutoConnectOnFinish(defaultAutoConnectOnFinishFlag);
}
scrolledComposite.sizeScrolledPanel();
setControl(hostPanel);
}
protected void setPingButtonEnabled(boolean enabled)
{
if (btnPing != null && !btnPing.isDisposed())
{
btnPing.setEnabled(enabled);
}
}
protected void setPingButtonVisible(boolean visible)
{
if (btnPing != null && !btnPing.isDisposed())
{
btnPing.setVisible(visible);
}
}
private void setAutoConnectFinish ( boolean flag ) {
if (this.getWizard() instanceof NewConnectionProfileWizard) {
NewConnectionProfileWizard wiz =
(NewConnectionProfileWizard) this.getWizard();
wiz.getProfilePage().setAutoConnectOnFinish(flag);
}
}
private void setAutoConnect ( boolean flag ) {
if (this.getWizard() instanceof NewConnectionProfileWizard) {
NewConnectionProfileWizard wiz =
(NewConnectionProfileWizard) this.getWizard();
wiz.getProfilePage().setAutoConnect(flag);
}
}
protected void setAutoConnectOnFinishDefault( boolean flag ){
this.defaultAutoConnectOnFinishFlag = flag;
}
protected boolean getAutoConnectOnFinishDefault() {
return this.defaultAutoConnectOnFinishFlag;
}
protected void setShowAutoConnectOnFinish ( boolean flag ) {
this._showAutoConnectOnFinish = flag;
}
protected void setShowAutoConnect ( boolean flag ) {
this._showAutoConnect = flag;
}
/**
* Specifies whether to create the controls for the auto connect options on this page.
* @param flag true to create related controls; false otherwise
* @since DTP 1.7.2
*/
public void setCreateAutoConnectControls( boolean flag )
{
setAutoConnectOnFinishDefault( flag );
setShowAutoConnectOnFinish( flag );
setShowAutoConnect( flag );
}
protected void setShowPing ( boolean flag ) {
this._showPing = flag;
}
}