blob: 83d020d6e0d10018b37ea7d8ad433d46cb08372f [file] [log] [blame]
package org.eclipse.update.internal.ui.wizards;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.update.internal.ui.*;
import org.eclipse.update.internal.ui.model.*;
import org.eclipse.update.internal.ui.parts.DefaultContentProvider;
/**
* @author dejan
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
*/
public abstract class BaseNewWizardPage extends WizardPage {
private static final String KEY_NAME = "BaseNewWizardPage.name";
private static final String KEY_CREATE_IN = "BaseNewWizardPage.createIn";
private static final String KEY_EXISTING = "BaseNewWizardPage.existing";
private static final String KEY_INVALID = "BaseNewWizardPage.invalid";
private BookmarkFolder folder;
private String name;
private TreeViewer tree;
private Text nameText;
private Text containerText;
class ContainerContentProvider
extends DefaultContentProvider
implements ITreeContentProvider {
public Object[] getChildren(Object parent) {
if (parent instanceof UpdateModel) {
return ((UpdateModel) parent).getBookmarks();
}
if (parent instanceof BookmarkFolder) {
return ((BookmarkFolder) parent).getChildren(parent);
}
return new Object[0];
}
public Object getParent(Object child) {
if (child instanceof NamedModelObject)
return ((NamedModelObject) child).getParent(null);
return null;
}
public boolean hasChildren(Object parent) {
if (parent instanceof BookmarkFolder) {
return ((BookmarkFolder) parent).hasChildren();
}
return false;
}
public Object[] getElements(Object obj) {
return getChildren(obj);
}
}
class ContainerLabelProvider extends LabelProvider {
public Image getImage(Object obj) {
if (obj instanceof BookmarkFolder)
return UpdateUI.getDefault().getLabelProvider().get(UpdateUIImages.DESC_BFOLDER_OBJ);
return super.getImage(obj);
}
}
public BaseNewWizardPage(BookmarkFolder folder) {
super("");
this.folder = folder;
UpdateUI.getDefault().getLabelProvider().connect(this);
}
public void dispose() {
UpdateUI.getDefault().getLabelProvider().disconnect(this);
super.dispose();
}
/**
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
container.setLayout(layout);
Label label = new Label(container, SWT.NULL);
label.setText(UpdateUI.getString(KEY_NAME));
nameText = new Text(container, SWT.SINGLE | SWT.BORDER);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
nameText.setLayoutData(gd);
nameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validatePage();
}
});
createClientControl(container, layout.numColumns);
label = new Label(container, SWT.NULL);
label.setText(UpdateUI.getString(KEY_CREATE_IN));
containerText = new Text(container, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
containerText.setLayoutData(gd);
if (folder != null)
containerText.setText(folder.getPath().toString());
containerText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validatePage();
}
});
label = new Label(container, SWT.NULL);
label.setText(UpdateUI.getString(KEY_EXISTING));
gd = new GridData();
gd.horizontalSpan = 2;
label.setLayoutData(gd);
tree = new TreeViewer(container);
gd = new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 2;
gd.widthHint = 250;
gd.heightHint = 200;
tree.getControl().setLayoutData(gd);
tree.setContentProvider(new ContainerContentProvider());
tree.setLabelProvider(new ContainerLabelProvider());
tree.addFilter(new ViewerFilter() {
public boolean select(Viewer v, Object parent, Object child) {
return (child instanceof BookmarkFolder);
}
});
tree.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
handleSelectionChanged((IStructuredSelection) e.getSelection());
}
});
tree.setInput(UpdateUI.getDefault().getUpdateModel());
if (folder != null)
tree.setSelection(new StructuredSelection(folder), true);
validatePage();
setControl(container);
}
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible)
nameText.setFocus();
}
protected abstract void createClientControl(Composite parent, int span);
protected void validatePage() {
String message = null;
boolean complete = true;
if (containerText.getText().length() > 0) {
folder = getFolderFromPath(containerText.getText());
if (folder == null) {
message = UpdateUI.getString(KEY_INVALID);
}
} else
folder = null;
if (nameText.getText().length() == 0) {
complete = false;
}
setErrorMessage(message);
setPageComplete(message == null && complete);
}
private BookmarkFolder getFolderFromPath(String path) {
UpdateModel model = UpdateUI.getDefault().getUpdateModel();
return model.getFolder(new Path(path));
}
private void handleSelectionChanged(IStructuredSelection selection) {
folder = (BookmarkFolder) selection.getFirstElement();
if (folder != null)
containerText.setText(folder.getPath().toString());
else
containerText.setText("");
}
public BookmarkFolder getFolder() {
return folder;
}
public String getName() {
return nameText.getText();
}
public abstract boolean finish();
protected void addToModel(NamedModelObject object) {
UpdateModel model = UpdateUI.getDefault().getUpdateModel();
BookmarkFolder parentFolder = getFolder();
if (parentFolder != null)
parentFolder.addChild(object);
else {
model.addBookmark(object);
}
model.saveBookmarks();
}
}