intial source from http://www.sf.net/projects/wdte
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / net / sourceforge / phpeclipse / webbrowser / internal / BrowserTableComposite.java
diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserTableComposite.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/internal/BrowserTableComposite.java
new file mode 100644 (file)
index 0000000..4bbd1a8
--- /dev/null
@@ -0,0 +1,273 @@
+/**********************************************************************
+ * 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 net.sourceforge.phpeclipse.webbrowser.internal;
+
+import java.util.Iterator;
+
+import net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowser;
+import net.sourceforge.phpeclipse.webbrowser.IExternalWebBrowserWorkingCopy;
+import net.sourceforge.phpeclipse.webbrowser.IInternalWebBrowser;
+import net.sourceforge.phpeclipse.webbrowser.IInternalWebBrowserWorkingCopy;
+import net.sourceforge.phpeclipse.webbrowser.IWebBrowser;
+
+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.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