package cideplus.ui.configuration.dialogs; import static org.eclipse.jface.dialogs.MessageDialog.openConfirm; import java.io.IOException; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import cideplus.model.Feature; import cideplus.ui.configuration.FeaturesConfigurationUtil; import cideplus.ui.configuration.IFeaturesManager; /** * Caixa de di�logo para configura��o das features do projeto. * @see ConfigureFeaturesDialog.configure * @author rogel * */ public class ConfigureFeaturesDialog extends Dialog { private IJavaProject javaProject; protected Set<Feature> features; private IFeaturesManager featuresManager; protected TableViewer tableViewer; protected Table table; public ConfigureFeaturesDialog(Shell parentShell, IJavaProject project) { super(parentShell); javaProject = project; featuresManager = FeaturesConfigurationUtil.getFeaturesManager(javaProject.getProject()); } public IFeaturesManager getFeaturesManager() { return featuresManager; } /** * Mostra a caixa de di�logo para configura��o das features do projeto * @throws CoreException * @throws IOException */ public void configure() throws CoreException, IOException { features = featuresManager.getFeatures(); if(features.size() == 0){ features.add(new Feature(1)); features.add(new Feature(2)); features.add(new Feature(3)); features.add(new Feature(4)); features.add(new Feature(5)); } setBlockOnOpen(true); if(open() == Window.OK){ featuresManager.saveFeatures(features); //MessageDialog.openInformation(getShell(), "Featurer", "Features configuration saved successfully."); } } @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); } @Override protected boolean isResizable() { return true; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Configure Features"); } @Override protected Control createDialogArea(Composite parent) { Composite comp = (Composite) super.createDialogArea(parent); createToolBar(comp); createTable(comp); return comp; } /* * C�DIGO DE CRIA��O DOS COMPONENTES DA VIEW */ protected void createToolBar(Composite comp) { ToolBarManager toolBarManager = new ToolBarManager(); toolBarManager.add(new ControlContribution("Custom") { protected Control createControl(Composite parent) { SashForm sf = new SashForm(parent, SWT.NONE); Button b1 = new Button(sf, SWT.PUSH); b1.setText("Add"); b1.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int i = 0; for (Feature f : features) { i = f.getId(); } features.add(new Feature(i + 1)); tableViewer.refresh(); } }); Button b2 = new Button(sf, SWT.PUSH); b2.setText("Remove"); b2.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(tableViewer.getSelection() instanceof IStructuredSelection){ Object firstElement = ((IStructuredSelection)tableViewer.getSelection()).getFirstElement(); if(firstElement instanceof Feature){ Feature feature = (Feature) firstElement; if(openConfirm(getShell(), "Remove Feature", "Do you really want to remove "+feature.getName()+"?")){ features.remove(feature); tableViewer.refresh(); } } } } }); return sf; } }); toolBarManager.createControl(comp); } protected void createTable(Composite comp) { int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; this.table = new Table(comp, style); this.tableViewer = new TableViewer(table); GridData gd = getGridData(); table.setLayoutData(gd); table.setLinesVisible(true); table.setHeaderVisible(true); configureColumns(); //createTableViewerColumn(tableViewer, "Id", 50, "id"); //createTableViewerColumn(tableViewer, "Feature", 200, "name"); //createTableViewerColumn(tableViewer, "Color", 120, "rgb"); configureTableViewer(); tableViewer.refresh(); } protected void configureColumns() { createColumn(table, "Id", 50); createColumn(table, "Feature", 200); createColumn(table, "Color", 120); } protected void configureTableViewer() { tableViewer.setContentProvider(new ConfigureFeaturesTableViewer()); tableViewer.setLabelProvider(getLabelProvider()); tableViewer.setCellModifier(getCellModifier()); tableViewer.setCellEditors(getCellEditors(table)); tableViewer.setColumnProperties(new String[]{"id", "name", "rgb"}); tableViewer.setInput(features); } protected IBaseLabelProvider getLabelProvider() { return new ConfigureFeaturesLabelProvider(getShell().getDisplay()); } protected ICellModifier getCellModifier() { return new ConfigureFeaturesCellModifier(tableViewer); } protected CellEditor[] getCellEditors(Table table) { return FeaturesDialogCellEditorProvider.getConfigurationCellEditors(table); } /* AUX */ private GridData getGridData() { GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 400; return gd; } protected TableColumn createColumn(Table table, String title, int width) { TableColumn column = new TableColumn(table, SWT.LEFT); column.setText(title); column.setWidth(width); return column; } /* private void createTableViewerColumn(TableViewer tableViewer, String title, int width, final String property) { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.LEFT); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Feature feature = (Feature) cell.getElement(); if(property.equals("id")){ cell.setText(feature.getId().toString()); } else if(property.equals("name")){ cell.setText(feature.getName()); } else if(property.equals("rgb")){ cell.setText("..."); } } }); tableViewerColumn.getColumn().setText(title); tableViewerColumn.getColumn().setWidth(width); } */ /* AUX */ }