/******************************************************************************* * Copyright (c) 2014 Zend Technologies 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 * * Contributors: * Zend Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.php.internal.debug.ui.preferences.phps; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.PixelConverter; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.*; import org.eclipse.php.internal.debug.core.preferences.PHPDebuggersRegistry; import org.eclipse.php.internal.debug.core.preferences.PHPexeItem; import org.eclipse.php.internal.debug.ui.PHPDebugUIImages; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.PlatformUI; /** * Dialog for managing PHP executable search results. * * @author Bartlomiej Laczkowski */ public class PHPsSearchResultDialog extends MessageDialog { private class LabelProvider extends BaseLabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { switch (columnIndex) { case 0: return PHPDebugUIImages.get(PHPDebugUIImages.IMG_OBJ_PHP_EXE); } return null; } @Override public String getColumnText(Object element, int columnIndex) { switch (columnIndex) { case 0: return ((PHPexeItem) element).getName(); case 1: { String debugger = PHPDebuggersRegistry.getDebuggerName(((PHPexeItem) element).getDebuggerID()); return debugger != null ? debugger : "<none>"; //$NON-NLS-1$ } case 2: return ((PHPexeItem) element).getVersion(); case 3: return ((PHPexeItem) element).getExecutable().getAbsolutePath(); default: break; } return null; } } private List<PHPexeItem> results; private CheckboxTableViewer resultTableViewer; private ArrayList<PHPexeItem> phpExecs = new ArrayList<PHPexeItem>(); protected PHPsSearchResultDialog(List<PHPexeItem> results, String message) { super(PlatformUI.getWorkbench().getDisplay().getActiveShell(), Messages.PHPsSearchResultDialog_PHP_executables_search, null, message, MessageDialog.INFORMATION, new String[] { Messages.PHPsSearchResultDialog_Add, Messages.PHPsSearchResultDialog_Cancel }, 0); this.results = results; } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.MessageDialog#createCustomArea(org.eclipse. * swt.widgets.Composite) */ @Override protected Control createCustomArea(Composite parent) { return createResultTable(parent); } private Control createResultTable(Composite composite) { // Parent composite layout GridLayout compositeLayout = new GridLayout(); compositeLayout.marginHeight = 0; compositeLayout.marginWidth = 0; compositeLayout.numColumns = 2; composite.setLayout(compositeLayout); // Result table composite Composite tableComposite = new Composite(composite, SWT.NONE); GridLayout tableCompositeLayout = new GridLayout(); tableCompositeLayout.marginHeight = 0; tableCompositeLayout.marginWidth = 0; tableComposite.setLayout(tableCompositeLayout); GridData tcGridData = new GridData(SWT.FILL, SWT.FILL, true, true); tcGridData.widthHint = 560; tableComposite.setLayoutData(tcGridData); // Buttons composite Composite buttonsComposite = new Composite(composite, SWT.NONE); GridLayout buttonsCompositeLayout = new GridLayout(); buttonsCompositeLayout.marginHeight = 0; buttonsCompositeLayout.marginWidth = 0; buttonsComposite.setLayout(buttonsCompositeLayout); buttonsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); GridData tableCompositeGridData = new GridData(SWT.FILL, SWT.FILL, true, true); Table resultTable = new Table(tableComposite, SWT.CHECK | SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); resultTable.setLayoutData(tableCompositeGridData); resultTable.setHeaderVisible(true); resultTable.setLinesVisible(true); resultTableViewer = new CheckboxTableViewer(resultTable); resultTableViewer.setLabelProvider(new LabelProvider()); resultTableViewer.setContentProvider(new ArrayContentProvider()); TableColumn nameColumn = new TableColumn(resultTable, SWT.LEFT); nameColumn.setText(Messages.PHPsSearchResultDialog_Name); TableColumn debuggerColumn = new TableColumn(resultTable, SWT.LEFT); debuggerColumn.setText(Messages.PHPsSearchResultDialog_Debugger_column); TableColumn versionColumn = new TableColumn(resultTable, SWT.LEFT); versionColumn.setText(Messages.PHPsSearchResultDialog_Version_column); TableColumn locationColumn = new TableColumn(resultTable, SWT.LEFT); locationColumn.setText(Messages.PHPsSearchResultDialog_Location); TableColumnLayout clayout = new TableColumnLayout(); PixelConverter pixelConverter = new PixelConverter(composite.getFont()); clayout.setColumnData(nameColumn, new ColumnWeightData(25, pixelConverter.convertWidthInCharsToPixels(25))); clayout.setColumnData(debuggerColumn, new ColumnWeightData(20, pixelConverter.convertWidthInCharsToPixels(12))); clayout.setColumnData(versionColumn, new ColumnWeightData(10, pixelConverter.convertWidthInCharsToPixels(8))); clayout.setColumnData(locationColumn, new ColumnWeightData(25, pixelConverter.convertWidthInCharsToPixels(35))); resultTable.getParent().setLayout(clayout); resultTableViewer.setInput(results); resultTableViewer.setAllChecked(true); Button selectAll = new Button(buttonsComposite, SWT.PUSH); selectAll.setText(Messages.PHPsSearchResultDialog_Select_all); selectAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); selectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { resultTableViewer.setAllChecked(true); } }); Button deselectAll = new Button(buttonsComposite, SWT.PUSH); deselectAll.setText(Messages.PHPsSearchResultDialog_Deselect_all); deselectAll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); deselectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { resultTableViewer.setAllChecked(false); } }); return composite; } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.MessageDialog#buttonPressed(int) */ @Override protected void buttonPressed(int buttonId) { // OK pressed if (buttonId == 0) { Object[] selected = resultTableViewer.getCheckedElements(); for (Object s : selected) { PHPexeItem phpExe = (PHPexeItem) s; // If no debugger installed, set ID for default one if (phpExe.getDebuggerID() == null) phpExe.setDebuggerID(PHPDebuggersRegistry.getDefaultDebuggerId()); phpExecs.add(phpExe); } } super.buttonPressed(buttonId); } /** * Returns chosen PHP executables. * * @return selected PHP executables */ public List<PHPexeItem> getPHPExecutables() { return phpExecs; } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#isResizable() */ @Override protected boolean isResizable() { return true; } }