eclipse plugin: Tweak the addons view to let the user...

...select the wesnoth install when creating a new project
for the downloaded addons
This commit is contained in:
Timotei Dolean 2011-07-30 07:58:20 +00:00
parent 3859a85900
commit 6494f1a6e8
3 changed files with 124 additions and 13 deletions

View file

@ -0,0 +1,71 @@
/*******************************************************************************
* Copyright (c) 2011 by Timotei Dolean <timotei21@gmail.com>
*
* 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
*******************************************************************************/
package org.wesnoth.installs;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class SelectWesnothInstallDialog extends Dialog
{
private Combo cmbInstall_;
public SelectWesnothInstallDialog( Shell parentShell )
{
super( parentShell );
}
@Override
protected void configureShell( Shell newShell )
{
super.configureShell( newShell );
newShell.setText( "Select the Wesnoth Install" );
}
@Override
protected Control createDialogArea( Composite parent )
{
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout(new GridLayout(2, false));
Label lblWesnothInstall = new Label(composite, SWT.NONE);
lblWesnothInstall.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblWesnothInstall.setText("Wesnoth Install:");
cmbInstall_ = new Combo(composite, SWT.NONE);
GridData gd_cmbInstall_ = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
gd_cmbInstall_.widthHint = 163;
cmbInstall_.setLayoutData(gd_cmbInstall_);
WesnothInstallsUtils.fillComboWithInstalls( cmbInstall_ );
return super.createDialogArea( parent );
}
@Override
protected Point getInitialSize() {
return new Point(291, 123);
}
/**
* Gets the install selected by the user
* @return A string with the name of the install selected
*/
public String getSelectedInstallName( ){
return cmbInstall_.getText( );
}
}

View file

@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.wesnoth.Constants;
import org.wesnoth.Logger;
import org.wesnoth.Messages;
@ -108,6 +109,32 @@ public class WesnothInstallsUtils
ProjectUtils.getCacheForProject( resource.getProject( ) ).setInstallName( newInstallName );
}
/**
* Fills the specified combo box with all the current installs
* and selects the default or the first ( if no default exists )
* @param comboBox The combobox to fill
*/
public static void fillComboWithInstalls( Combo comboBox )
{
comboBox.removeAll( );
comboBox.clearSelection( );
// fill the installs
String defaultInstallName = Preferences.getDefaultInstallName( );
for ( WesnothInstall install : WesnothInstallsUtils.getInstalls( ) ) {
comboBox.add( install.getName( ) );
// select the default
if ( install.getName( ).equals( defaultInstallName ) )
comboBox.select( comboBox.getItemCount( ) - 1 );
}
// select the first if there is no other selected
if ( comboBox.getSelectionIndex( ) == -1 &&
comboBox.getItemCount( ) > 0 )
comboBox.select( 0 );
}
/**
* Checks whether the Wesnoth Installation is properly setup
* for the specified resource. If it is not, it will guide the user

View file

@ -41,12 +41,14 @@ import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.part.ViewPart;
import org.wesnoth.installs.SelectWesnothInstallDialog;
import org.wesnoth.preferences.AddonUploadPreferencePage;
import org.wesnoth.preferences.Preferences;
import org.wesnoth.preferences.Preferences.Paths;
import org.wesnoth.projects.ProjectUtils;
import org.wesnoth.utils.ExternalToolInvoker;
import org.wesnoth.utils.GUIUtils;
import org.wesnoth.utils.RunnableWithResult;
import org.wesnoth.utils.StringUtils;
import org.wesnoth.utils.WMLTools;
@ -196,7 +198,27 @@ public class AddonsView extends ViewPart
{
monitor.beginTask( "Downloading addon " + addonName, 100 );
String installName = "";
String installName = Preferences.getDefaultInstallName( );
RunnableWithResult<String> runnable =
new RunnableWithResult<String>() {
@Override
public void run()
{
// ask the user to select the install for the project
SelectWesnothInstallDialog dialog =
new SelectWesnothInstallDialog( null );
if ( dialog.open( ) == SWT.OK ) {
setResult( dialog.getSelectedInstallName( ) );
}
}
};
Display.getDefault( ).syncExec( runnable );
if ( ! StringUtils.isNullOrEmpty( runnable.getResult( ) ) ) {
installName = runnable.getResult( );
}
final Paths paths = Preferences.getPaths( installName );
OutputStream console = GUIUtils
@ -214,22 +236,13 @@ public class AddonsView extends ViewPart
monitor.worked( 50 );
// ask user if he wants to create a project
if ( GUIUtils.showMessageBox(
"Do you want to create a new project for the downloaded addon?",
SWT.YES | SWT.NO ) == SWT.YES ) {
Display.getDefault( ).syncExec( new Runnable( ) {
@Override
public void run()
{
ProjectUtils.createWesnothProject( addonName,
paths.getAddonsDir( ) + addonName, false, monitor );
}
});
ProjectUtils.createWesnothProject( addonName,
paths.getAddonsDir( ) + addonName, installName, monitor );
}
monitor.done( );
return Status.OK_STATUS;
@ -268,7 +281,7 @@ public class AddonsView extends ViewPart
monitor.beginTask( "Retrieving list...", 100 );
monitor.worked( 10 );
String installName = "";
String installName = Preferences.getDefaultInstallName( );
OutputStream stderr = GUIUtils
.createConsole( "Wesnoth Addon Manager", null, false )