/******************************************************************************
* Copyright (c) 2016 Oracle
* 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:
* Konstantin Komissarchik - initial implementation and ongoing maintenance
******************************************************************************/
package org.eclipse.sapphire.samples.contacts.ui.internal;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.Window;
import org.eclipse.sapphire.Value;
import org.eclipse.sapphire.ui.Presentation;
import org.eclipse.sapphire.ui.forms.BrowseActionHandler;
import org.eclipse.sapphire.ui.forms.swt.FormComponentPresentation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/
public final class WebSiteUrlBrowseHandler extends BrowseActionHandler
{
@Override
public String browse( final Presentation context )
{
String val = ( (Value<?>) property() ).text( true );
val = ( val == null ? "" : val );
final WebSiteUrlDialog dialog = new WebSiteUrlDialog( ( (FormComponentPresentation) context ).shell(), val );
if( dialog.open() == Window.OK )
{
return dialog.getUrl();
}
else
{
return null;
}
}
private static class WebSiteUrlDialog
extends Dialog
{
private String domain = "";
private String path = "";
public WebSiteUrlDialog( final Shell shell,
final String url )
{
super( shell );
int domainStart = url.indexOf( "//" );
if( domainStart == -1 )
{
domainStart = 0;
}
else
{
domainStart += 2;
}
if( domainStart < url.length() )
{
final int domainEnd = url.indexOf( '/', domainStart );
if( domainEnd == -1 )
{
this.domain = url.substring( domainStart );
}
else
{
this.domain = url.substring( domainStart, domainEnd );
final int pathStart = domainEnd + 1;
if( pathStart < url.length() )
{
this.path = url.substring( pathStart );
}
}
}
}
public String getUrl()
{
final StringBuilder buf = new StringBuilder();
buf.append( "http://" );
buf.append( this.domain );
if( this.path.length() > 0 )
{
buf.append( "/" );
buf.append( this.path );
}
return buf.toString();
}
@Override
protected Control createDialogArea( final Composite parent )
{
parent.getShell().setText( "URL Editor Dialog" );
final Composite composite = (Composite) super.createDialogArea( parent );
composite.setLayout( new GridLayout( 3, false ) );
Label label = new Label( composite, SWT.NONE );
label.setText( "" );
label.setLayoutData( new GridData() );
label = new Label( composite, SWT.NONE );
label.setText( "domain" );
label.setLayoutData( new GridData() );
label = new Label( composite, SWT.NONE );
label.setText( "path" );
label.setLayoutData( new GridData() );
label = new Label( composite, SWT.NONE );
label.setText( "http://" );
label.setLayoutData( new GridData() );
GridData gd;
final Text domainNameTextField = new Text( composite, SWT.BORDER );
gd = new GridData( GridData.FILL_HORIZONTAL );
gd.widthHint = 150;
domainNameTextField.setLayoutData( gd );
domainNameTextField.setText( this.domain );
domainNameTextField.addModifyListener
(
new ModifyListener()
{
public void modifyText( final ModifyEvent e )
{
WebSiteUrlDialog.this.domain = domainNameTextField.getText().trim();
}
}
);
final Text pathTextField = new Text( composite, SWT.BORDER );
gd = new GridData( GridData.FILL_HORIZONTAL );
gd.widthHint = 200;
pathTextField.setLayoutData( gd );
pathTextField.setText( this.path );
pathTextField.addModifyListener
(
new ModifyListener()
{
public void modifyText( final ModifyEvent e )
{
WebSiteUrlDialog.this.path = pathTextField.getText().trim();
}
}
);
return composite;
}
}
}