/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorola.studio.android.wizards.elements;
import java.io.File;
import org.eclipse.core.resources.ResourcesPlugin;
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.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import com.motorola.studio.android.i18n.AndroidNLS;
import com.motorola.studio.android.model.AndroidProject;
import com.motorola.studio.android.model.IWizardModel;
import com.motorola.studio.android.wizards.widget.NewAndroidWidgetProjectMainPage;
/**
* Class that implements the Location group to be used in the New Widget Project Wizard
*/
public class WidgetLocationGroup extends Composite
{
final private AndroidProject project;
final private NewAndroidWidgetProjectMainPage page;
private String lastSourcePathValue = null;
/**
* Constructor
*
* @param parent
* @param project
* @param page
*/
public WidgetLocationGroup(Composite parent, AndroidProject project,
NewAndroidWidgetProjectMainPage page)
{
super(parent, SWT.SHADOW_ETCHED_IN);
this.project = project;
this.page = page;
setLayout(new GridLayout());
setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createControl(this);
}
/**
* Create Controls
*
* @param parent
*/
private void createControl(Composite parent)
{
final Button useDefaultLocation = new Button(this, SWT.CHECK);
useDefaultLocation.setText(AndroidNLS.UI_LocationGroup_UseDefaultLocationCheckLabel);
useDefaultLocation.setSelection(true);
Composite location_group = new Composite(this, SWT.NONE);
location_group.setLayout(new GridLayout(4, false));
location_group.setLayoutData(new GridData(GridData.FILL_BOTH));
location_group.setFont(parent.getFont());
Label locationLabel = new Label(location_group, SWT.NONE);
locationLabel.setText(AndroidNLS.UI_LocationGroup_LocationLabel);
final Text projectPath = new Text(location_group, SWT.BORDER);
GridData data = new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1);
projectPath.setLayoutData(data);
projectPath.setFont(parent.getFont());
projectPath.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString());
projectPath.setEnabled(false);
projectPath.addListener(SWT.Modify, new Listener()
{
public void handleEvent(Event event)
{
if (projectPath.isEnabled())
{
project.setLocation(projectPath.getText());
notifyListeners(IWizardModel.MODIFIED, new Event());
}
}
});
final Button browseButton = new Button(location_group, SWT.PUSH);
browseButton.setText(AndroidNLS.UI_General_BrowseButtonLabel);
browseButton.setEnabled(false);
page.setButtonLayoutData(browseButton);
browseButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
String existing_dir = project.getLocation();
// Disable the path if it doesn't exist
if (existing_dir != null
&& (existing_dir.length() == 0 || !new File(existing_dir).exists()))
{
existing_dir = null;
}
DirectoryDialog dd = new DirectoryDialog(projectPath.getShell());
dd.setMessage(AndroidNLS.UI_LocationGroup_BrowseDialogMessage);
dd.setFilterPath(existing_dir);
String customLocation = dd.open();
if (customLocation != null)
{
projectPath.setText(customLocation);
}
}
});
// Listen to the default location checkbox.
SelectionListener location_listener = new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
boolean useDefault = useDefaultLocation.getSelection();
String path;
if (useDefault)
{
path = project.getDefaultLocation();
}
else
{
path = project.getLocation();
}
boolean enablePath = !useDefault;
projectPath.setEnabled(enablePath);
browseButton.setEnabled(enablePath);
project.setUseDefaultLocation(useDefault);
if (enablePath && (path == null || path.length() == 0))
{
projectPath.setText(""); //$NON-NLS-1$
projectPath.setFocus();
}
else
{
projectPath.setText(path);
}
notifyListeners(IWizardModel.MODIFIED, new Event());
}
};
useDefaultLocation.addSelectionListener(location_listener);
}
/**
* Get last path value defined by the user for the
* "Create from existing source" case
*
* @return The last path value defined by the user.
*/
public String getLastSourcePath()
{
return this.lastSourcePathValue;
}
/**
* Set the last path value defined by the user for the
* "Create from existing source" case
*
* @param path
* - The last path defined by the user
*/
public void setLastSourcePath(String path)
{
this.lastSourcePathValue = path;
}
}