X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java new file mode 100644 index 0000000..32e38e5 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java @@ -0,0 +1,272 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import java.util.Iterator; + +import org.eclipse.jface.viewers.*; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.*; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IInternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IWebBrowser; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.ICheckStateListener; +/** + * + */ +public class BrowserTableComposite extends Composite { + protected Table table; + protected CheckboxTableViewer tableViewer; + protected Button edit; + protected Button remove; + protected Button search; + protected IWebBrowser selection; + + protected Label location; + protected Label parameters; + + public BrowserTableComposite(Composite parent, int style) { + super(parent, style); + createWidgets(); + } + + protected void createWidgets() { + GridLayout layout = new GridLayout(); + layout.horizontalSpacing = 5; + layout.verticalSpacing = 5; + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 2; + setLayout(layout); + + GridData data = new GridData(GridData.FILL_BOTH); + setLayoutData(data); + + Label label = new Label(this, SWT.NONE); + label.setText(WebBrowserUIPlugin.getResource("%browserList")); + data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER); + data.horizontalSpan = 2; + label.setLayoutData(data); + + table = new Table(this, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); + data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); + data.widthHint = 300; + table.setLayoutData(data); + table.setHeaderVisible(false); + table.setLinesVisible(false); + + TableLayout tableLayout = new TableLayout(); + new TableColumn(table, SWT.NONE); + + tableLayout.addColumnData(new ColumnWeightData(100)); + + table.setLayout(tableLayout); + + tableViewer = new CheckboxTableViewer(table); + + tableViewer.setContentProvider(new BrowserContentProvider()); + tableViewer.setLabelProvider(new BrowserTableLabelProvider()); + + tableViewer.setInput("root"); + + // uncheck any other elements that might be checked and leave only the element checked to + // remain checked since one can only chose one brower at a time to be current. + tableViewer.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent e) { + checkNewDefaultBrowser(e.getElement()); + IWebBrowser browser = (IWebBrowser) e.getElement(); + BrowserManager.getInstance().setCurrentWebBrowser(browser); + + // if no other browsers are checked, don't allow the single one currently + // checked to become unchecked, and lose a current browser. That is, don't + // permit unchecking if no other item is checked which is supposed to be the case. + Object[] obj = tableViewer.getCheckedElements(); + if (obj.length == 0) + tableViewer.setChecked(e.getElement(), true); + } + }); + + // set a default, checked browser based on the current browser. If there is not a + // current browser, but the first item exists, use that instead. + // This will work currently until workbench shutdown, because current browser is not yet persisted. + IWebBrowser browser = BrowserManager.getInstance().getCurrentWebBrowser(); + if (browser != null) + tableViewer.setChecked(browser, true); + else { + Object obj = tableViewer.getElementAt(0); + if (obj != null) + tableViewer.setChecked(obj, true); + } + + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + Object obj = getSelection(event.getSelection()); + + if (obj instanceof IInternalWebBrowser) { + selection = (IInternalWebBrowser) obj; + remove.setEnabled(false); + edit.setEnabled(true); + } else if (obj instanceof IExternalWebBrowser) { + selection = (IExternalWebBrowser) obj; + remove.setEnabled(true); + edit.setEnabled(true); + } else + selection = null; + + if (selection == null) { + edit.setEnabled(false); + remove.setEnabled(false); + } + } + }); + + Composite buttonComp = new Composite(this, SWT.NONE); + layout = new GridLayout(); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 5; + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + buttonComp.setLayout(layout); + data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL); + buttonComp.setLayoutData(data); + + Button add = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%add")); + add.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + ExternalBrowserDialog dialog = new ExternalBrowserDialog(getShell()); + if (dialog.open() == Window.CANCEL) + return; + tableViewer.refresh(); + } + }); + + edit = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%edit")); + edit.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + IWebBrowser browser2 = getSelectedWebBrowser(); + + if (browser2 instanceof IInternalWebBrowser) { + IInternalWebBrowserWorkingCopy wc = ((IInternalWebBrowser) browser2).getWorkingCopy(); + InternalBrowserDialog dialog = new InternalBrowserDialog(getShell(), wc); + if (dialog.open() != Window.CANCEL) { + try { + tableViewer.refresh(wc.save()); + } catch (Exception ex) { } + } + } + else if(browser2 instanceof IExternalWebBrowser) { + IExternalWebBrowserWorkingCopy wc = ((IExternalWebBrowser) browser2).getWorkingCopy(); + ExternalBrowserDialog dialog = new ExternalBrowserDialog(getShell(), wc); + if (dialog.open() != Window.CANCEL) { + try { + tableViewer.refresh(wc.save()); + } catch (Exception ex) { } + } + } + } + }); + edit.setEnabled(false); + + remove = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%remove")); + remove.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + IWebBrowser browser2 = getSelectedWebBrowser(); + try { + if (browser2 instanceof IInternalWebBrowser){ + remove.setEnabled(false); + return; // nothing else possible to do + } + else if(browser2 instanceof IExternalWebBrowser) { + remove.setEnabled(true); + ((IExternalWebBrowser) browser2).delete(); + + tableViewer.remove(browser2); + + // need here to ensure that if the item deleted was checked, ie, was + // the current browser, that the new current browser will be the first in the + // list, typically, the internal browser, which cannot be deleted, and be current. + if(((IExternalWebBrowser) browser2) == BrowserManager.getInstance().getCurrentWebBrowser()){ + Object obj = tableViewer.getElementAt(0); + if(obj != null){ + BrowserManager.getInstance().setCurrentWebBrowser((InternalWebBrowser)obj); + tableViewer.setChecked(obj, true); + } + } + } + } catch (Exception ex) { } + } + }); + remove.setEnabled(false); + + search = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%search")); + search.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + java.util.List browsersToCreate = BrowserSearcher.search(getShell()); + + if (browsersToCreate == null) // cancelled + return; + + if (browsersToCreate.isEmpty()) { // no browsers found + WebBrowserUtil.openMessage(WebBrowserUIPlugin.getResource("%searchingNoneFound")); + return; + } + + Iterator iterator = browsersToCreate.iterator(); + while (iterator.hasNext()) { + IExternalWebBrowserWorkingCopy browser2 = (IExternalWebBrowserWorkingCopy) iterator.next(); + browser2.save(); + } + tableViewer.refresh(); + } + }); + WorkbenchHelp.setHelp(search, ContextIds.PREF_BROWSER_EXTERNAL_SEARCH); + + tableViewer.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent e) { + checkNewDefaultBrowser(e.getElement()); + IWebBrowser browser2 = (IWebBrowser) e.getElement(); + BrowserManager.getInstance().setCurrentWebBrowser(browser2); + } + }); + search.setEnabled(true); + } + + public IWebBrowser getSelectedWebBrowser() { + return selection; + } + + protected Object getSelection(ISelection sel2) { + IStructuredSelection sel = (IStructuredSelection) sel2; + return sel.getFirstElement(); + } + + // Uncheck all the items except the current one that was just checked + protected void checkNewDefaultBrowser(Object browser) { + TableItem[] children = tableViewer.getTable().getItems(); + for (int i = 0; i < children.length; i++) { + TableItem item = children[i]; + + if (!(item.getData().equals(browser))) + item.setChecked(false); + } + } +} \ No newline at end of file