blob: 8d87f3bba558802bdf0ff2a28ab98333173f2941 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2013 RĂ¼diger Herrmann 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:
* RĂ¼diger Herrmann - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.tools.launch.rwt.internal.tab;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.rap.tools.launch.rwt.internal.config.BrowserMode;
import org.eclipse.rap.tools.launch.rwt.internal.config.RWTLaunchConfig;
import org.eclipse.rap.tools.launch.rwt.internal.util.URLBuilder;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.dialogs.PreferencesUtil;
public class BrowserSection extends RWTLaunchTab {
private static final String BROWSER_PREFERENCE_PAGE
= "org.eclipse.ui.browser.preferencePage"; //$NON-NLS-1$
private final GridDataFactory fillHorizontal;
private Button cbOpenBrowser;
private Button rbInternalBrowser;
private Button rbExternalBrowser;
private Label lblServletPath;
private Text txtServletPath;
private Text txtApplicationUrl;
public BrowserSection() {
GridData gridData = new GridData( SWT.FILL, SWT.CENTER, true, false );
fillHorizontal = GridDataFactory.createFrom( gridData );
}
public String getName() {
return "Browser";
}
public void createControl( Composite parent ) {
Group group = new Group( parent, SWT.NONE );
group.setLayoutData( fillHorizontal.create() );
group.setText( "Open in Browser" );
group.setLayout( new GridLayout() );
createBrowserActivationPart( group );
createServletPathPart( group );
setControl( group );
HelpContextIds.assign( getControl(), HelpContextIds.MAIN_TAB );
updateEnablement();
}
private void createBrowserActivationPart( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayoutData( fillHorizontal.span( 2, 1 ).create() );
GridLayout layout = new GridLayout( 2, false );
layout.horizontalSpacing = 10;
layout.verticalSpacing = 0;
composite.setLayout( layout );
cbOpenBrowser = new Button( composite, SWT.CHECK );
cbOpenBrowser.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
cbOpenBrowser.setText( "&Open application in" );
cbOpenBrowser.addSelectionListener( new OpenBrowserSelectionListener() );
Link browserPrefsLink = createBrowserPrefsLink( composite );
browserPrefsLink.setLayoutData( new GridData( SWT.END, SWT.CENTER, false, false ) );
Composite modePart = createBrowserModePart( composite );
modePart.setLayoutData( GridDataFactory.fillDefaults().span( 2, 1 ).indent( 17, 0 ).create() );
}
private Link createBrowserPrefsLink( Composite composite ) {
Link link = new Link( composite, SWT.NONE );
link.setText( "<a>Configure Browsers...</a>" );
link.addSelectionListener( new BrowserPrefsSelectionListener() );
return link;
}
private Composite createBrowserModePart( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new RowLayout( SWT.HORIZONTAL ) );
rbInternalBrowser = new Button( composite, SWT.RADIO );
rbInternalBrowser.setText( "Interna&l web browser" );
rbInternalBrowser.addSelectionListener( new BrowserSelectionListener() );
rbExternalBrowser = new Button( composite, SWT.RADIO );
rbExternalBrowser.setText( "E&xternal web browser" );
rbExternalBrowser.addSelectionListener( new BrowserSelectionListener() );
return composite;
}
private void createServletPathPart( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayoutData( fillHorizontal.create() );
composite.setLayout( new GridLayout( 2, false ) );
lblServletPath = new Label( composite, SWT.NONE );
lblServletPath.setText( "&Servlet path:" );
txtServletPath = new Text( composite, SWT.BORDER );
txtServletPath.addModifyListener( new TextModifyListener() );
GridDataFactory.fillDefaults().grab( true, false ).applyTo( txtServletPath );
Label lblApplicationUrl = new Label( composite, SWT.NONE );
lblApplicationUrl.setText( "Application URL:" );
txtApplicationUrl = new Text( composite, SWT.SINGLE | SWT.READ_ONLY );
txtApplicationUrl.setBackground( txtApplicationUrl.getParent().getBackground() );
GridDataFactory.fillDefaults().grab( true, false ).applyTo( txtApplicationUrl );
}
public void initializeFrom( RWTLaunchConfig config ) {
BrowserMode browserMode = config.getBrowserMode();
cbOpenBrowser.setSelection( config.getOpenBrowser() );
rbInternalBrowser.setSelection( browserMode == BrowserMode.INTERNAL );
rbExternalBrowser.setSelection( browserMode == BrowserMode.EXTERNAL );
txtServletPath.setText( config.getServletPath() );
updateEnablement();
}
public void performApply( RWTLaunchConfig config ) {
config.setOpenBrowser( cbOpenBrowser.getSelection() );
if( rbExternalBrowser.getSelection() ) {
config.setBrowserMode( BrowserMode.EXTERNAL );
} else {
config.setBrowserMode( BrowserMode.INTERNAL );
}
config.setServletPath( txtServletPath.getText().trim() );
}
private void updateEnablement() {
boolean openBrowser = cbOpenBrowser.getSelection();
rbInternalBrowser.setEnabled( openBrowser );
rbExternalBrowser.setEnabled( openBrowser );
lblServletPath.setEnabled( openBrowser );
txtServletPath.setEnabled( openBrowser );
}
private void handleBrowserPrefsLink() {
PreferenceDialog dialog
= PreferencesUtil.createPreferenceDialogOn( getShell(), BROWSER_PREFERENCE_PAGE, null, null );
dialog.open();
dialog.close();
}
public void updateApplicationUrl( RWTLaunchConfig config ) {
updateApplicationUrl( URLBuilder.fromLaunchConfig( config ) );
}
private void updateApplicationUrl( final String applicationUrl ) {
if( txtApplicationUrl != null && !txtApplicationUrl.isDisposed() ) {
// could be called from a non UI thread
txtApplicationUrl.getDisplay().syncExec( new Runnable() {
public void run() {
if( !applicationUrl.equals( txtApplicationUrl.getText() ) ) {
txtApplicationUrl.setText( applicationUrl );
}
}
} );
}
}
private class OpenBrowserSelectionListener extends SelectionAdapter {
public void widgetSelected( SelectionEvent event ) {
updateLaunchConfigurationDialog();
updateEnablement();
}
}
private class BrowserSelectionListener extends SelectionAdapter {
public void widgetSelected( SelectionEvent event ) {
updateLaunchConfigurationDialog();
}
}
private class BrowserPrefsSelectionListener extends SelectionAdapter {
public void widgetSelected( SelectionEvent event ) {
handleBrowserPrefsLink();
}
}
private class TextModifyListener implements ModifyListener {
public void modifyText( ModifyEvent event ) {
updateLaunchConfigurationDialog();
}
}
}