/******************************************************************************
* Copyright (C) 2006-2012 IFS Institute for Software 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
*
* Original authors:
* Dennis Hunziker
* Ueli Kistler
* Reto Schuettel
* Robin Stocker
* Contributors:
* Fabio Zadrozny <fabiofz@gmail.com> - initial implementation
******************************************************************************/
/*
* Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler
* Copyright (C) 2007 Reto Schuettel, Robin Stocker
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
*
*/
package org.python.pydev.refactoring.ui.pages;
import static org.python.pydev.refactoring.messages.Messages.generatePropertiesSelect;
import static org.python.pydev.refactoring.messages.Messages.offsetStrategyInsertionPointMethod;
import static org.python.pydev.refactoring.messages.Messages.offsetStrategyInsertionPointProperty;
import static org.python.pydev.refactoring.messages.Messages.wizardAccessModifier;
import static org.python.pydev.refactoring.messages.Messages.wizardAccessPseudo;
import static org.python.pydev.refactoring.messages.Messages.wizardAccessPublic;
import static org.python.pydev.refactoring.messages.Messages.wizardDeselectAll;
import static org.python.pydev.refactoring.messages.Messages.wizardSelectAll;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
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.Group;
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
import org.python.pydev.parser.jython.ast.factory.NodeHelper;
import org.python.pydev.refactoring.ast.adapters.offsetstrategy.IOffsetStrategy;
import org.python.pydev.refactoring.codegenerator.generateproperties.GeneratePropertiesRefactoring;
import org.python.pydev.refactoring.codegenerator.generateproperties.GeneratePropertiesRequestProcessor;
import org.python.pydev.refactoring.core.model.OffsetStrategyModel;
import org.python.pydev.refactoring.core.model.OffsetStrategyProvider;
import org.python.pydev.refactoring.core.model.generateproperties.PropertyTreeProvider;
import org.python.pydev.refactoring.ui.core.TreeLabelProvider;
public class GeneratePropertiesPage extends UserInputWizardPage {
private static final String PAGE_NAME = "GeneratePropertiesPage";
private final OffsetStrategyProvider strategyProvider;
private Composite mainComp = null;
private Group visibilityGroup = null;
private Composite buttonComp = null;
private Button selectAll = null;
private Button deselectAll = null;
private Button publicVis = null;
private Button pseudoprivateVis = null;
private CLabel cLabel = null;
private Composite treeComp = null;
private Composite comboComp = null;
private ComboViewer methodInsertionComb = null;
private ComboViewer propertyInsertionComb = null;
private CLabel methodInsertionLbl = null;
private CLabel propertyInsertionLbl = null;
private ContainerCheckedTreeViewer treeViewer = null;
private PropertyTreeProvider classProvider;
private ILabelProvider labelProvider;
public GeneratePropertiesPage(PropertyTreeProvider provider) {
super(PAGE_NAME);
this.classProvider = provider;
this.labelProvider = new TreeLabelProvider();
this.strategyProvider = new OffsetStrategyProvider(IOffsetStrategy.AFTERINIT | IOffsetStrategy.BEGIN
| IOffsetStrategy.END);
}
private Composite createMainComp(Composite parent) {
GridData gridData12 = new GridData();
gridData12.horizontalSpan = 2;
GridData gridData11 = new GridData();
gridData11.horizontalSpan = 2;
GridLayout gridLayout2 = new GridLayout();
gridLayout2.numColumns = 2;
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = GridData.FILL;
mainComp = new Composite(parent, SWT.NONE);
mainComp.setLayoutData(gridData);
cLabel = new CLabel(mainComp, SWT.NONE);
cLabel.setText(generatePropertiesSelect);
cLabel.setLayoutData(gridData11);
createTreeComp();
createButtonComp();
mainComp.setLayout(gridLayout2);
createComboComp();
createVisibilityGroup();
return mainComp;
}
private void createVisibilityGroup() {
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 4;
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalSpan = 2;
gridData.verticalAlignment = GridData.CENTER;
visibilityGroup = new Group(mainComp, SWT.NONE);
visibilityGroup.setLayoutData(gridData);
visibilityGroup.setLayout(gridLayout);
visibilityGroup.setText(wizardAccessModifier);
publicVis = new Button(visibilityGroup, SWT.RADIO);
publicVis.setSelection(true);
publicVis.setText(wizardAccessPublic);
publicVis.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
getRequestProcsseor().setAccessModifier(NodeHelper.ACCESS_PUBLIC);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
pseudoprivateVis = new Button(visibilityGroup, SWT.RADIO);
pseudoprivateVis.setText(wizardAccessPseudo);
pseudoprivateVis.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
getRequestProcsseor().setAccessModifier(NodeHelper.ACCESS_PSEUDO);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
}
private void createButtonComp() {
GridData gridData3 = new GridData();
gridData3.horizontalAlignment = GridData.CENTER;
gridData3.verticalAlignment = GridData.BEGINNING;
GridData gridData2 = new GridData();
gridData2.widthHint = 80;
GridData gridData1 = new GridData();
gridData1.widthHint = 80;
buttonComp = new Composite(mainComp, SWT.NONE);
buttonComp.setLayout(new GridLayout());
buttonComp.setLayoutData(gridData3);
selectAll = new Button(buttonComp, SWT.NONE);
selectAll.setText(wizardSelectAll);
selectAll.setLayoutData(gridData2);
selectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
treeViewer.setAllChecked(true);
getRequestProcsseor().setCheckedElements(treeViewer.getCheckedElements());
GeneratePropertiesPage.this.getWizard().getContainer().updateButtons();
}
});
deselectAll = new Button(buttonComp, SWT.NONE);
deselectAll.setText(wizardDeselectAll);
deselectAll.setLayoutData(gridData1);
deselectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
treeViewer.setAllChecked(false);
getRequestProcsseor().setCheckedElements(treeViewer.getCheckedElements());
GeneratePropertiesPage.this.getWizard().getContainer().updateButtons();
}
});
}
private void createTreeComp() {
GridData gridData5 = new GridData();
gridData5.horizontalAlignment = GridData.FILL;
gridData5.grabExcessHorizontalSpace = true;
gridData5.grabExcessVerticalSpace = true;
gridData5.verticalAlignment = GridData.FILL;
treeComp = new Composite(mainComp, SWT.NONE);
treeComp.setLayout(new FillLayout());
treeComp.setLayoutData(gridData5);
createTreeViewer(treeComp);
}
private void createComboComp() {
FillLayout fillLayout = new FillLayout();
fillLayout.type = org.eclipse.swt.SWT.VERTICAL;
GridData gridData7 = new GridData();
gridData7.horizontalSpan = 2;
gridData7.verticalAlignment = GridData.CENTER;
gridData7.grabExcessHorizontalSpace = true;
gridData7.horizontalAlignment = GridData.FILL;
comboComp = new Composite(mainComp, SWT.NONE);
comboComp.setLayoutData(gridData7);
comboComp.setLayout(fillLayout);
methodInsertionLbl = new CLabel(comboComp, SWT.NONE);
methodInsertionLbl.setText(offsetStrategyInsertionPointMethod);
methodInsertionComb = createComboViewer(comboComp);
methodInsertionComb.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
if (!sel.isEmpty()) {
OffsetStrategyModel elem = (OffsetStrategyModel) sel.getFirstElement();
getRequestProcsseor().setMethodDestination(elem.getStrategy());
}
}
});
getRequestProcsseor().setMethodDestination(strategyProvider.get(0).getStrategy());
methodInsertionComb.getCombo().select(0);
propertyInsertionLbl = new CLabel(comboComp, SWT.NONE);
propertyInsertionLbl.setText(offsetStrategyInsertionPointProperty);
propertyInsertionComb = createComboViewer(comboComp);
propertyInsertionComb.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
if (!sel.isEmpty()) {
OffsetStrategyModel elem = (OffsetStrategyModel) sel.getFirstElement();
getRequestProcsseor().setPropertyDestination(elem.getStrategy());
}
}
});
getRequestProcsseor().setPropertyDestination(strategyProvider.get(2).getStrategy());
propertyInsertionComb.getCombo().select(2);
}
private void createTreeViewer(Composite treeComp) {
treeViewer = new ContainerCheckedTreeViewer(treeComp);
treeViewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
getRequestProcsseor().setCheckedElements(treeViewer.getCheckedElements());
GeneratePropertiesPage.this.getWizard().getContainer().updateButtons();
}
});
treeViewer.setContentProvider(classProvider);
treeViewer.setLabelProvider(labelProvider);
treeViewer.setAutoExpandLevel(2);
treeViewer.setInput("");
treeViewer.setSelection(new StructuredSelection(treeViewer.getExpandedElements()[0]));
}
@Override
public void createControl(Composite composite) {
Composite main = createMainComp(composite);
main.pack();
this.setControl(main);
}
private ComboViewer createComboViewer(Composite comboComp) {
ComboViewer v = new ComboViewer(comboComp);
v.setContentProvider(this.strategyProvider);
v.setLabelProvider(new LabelProvider());
v.setInput("");
return v;
}
@Override
public boolean canFlipToNextPage() {
return (treeViewer.getCheckedElements().length > 0);
}
protected GeneratePropertiesRequestProcessor getRequestProcsseor() {
return getGeneratePropertiesRefactoring().getRequestProcessor();
}
private GeneratePropertiesRefactoring getGeneratePropertiesRefactoring() {
return (GeneratePropertiesRefactoring) getRefactoring();
}
}