1 11 package org.eclipse.ui.internal.browser; 12 13 import java.io.File ; 14 import java.lang.reflect.InvocationTargetException ; 15 import java.util.ArrayList ; 16 import java.util.Iterator ; 17 import java.util.List ; 18 19 import org.eclipse.core.runtime.IProgressMonitor; 20 import org.eclipse.jface.dialogs.Dialog; 21 import org.eclipse.jface.dialogs.ProgressMonitorDialog; 22 import org.eclipse.jface.operation.IRunnableWithProgress; 23 import org.eclipse.jface.preference.PreferencePage; 24 import org.eclipse.jface.viewers.CheckStateChangedEvent; 25 import org.eclipse.jface.viewers.CheckboxTableViewer; 26 import org.eclipse.jface.viewers.ColumnWeightData; 27 import org.eclipse.jface.viewers.DoubleClickEvent; 28 import org.eclipse.jface.viewers.ICheckStateListener; 29 import org.eclipse.jface.viewers.IDoubleClickListener; 30 import org.eclipse.jface.viewers.ILabelProviderListener; 31 import org.eclipse.jface.viewers.ISelection; 32 import org.eclipse.jface.viewers.ISelectionChangedListener; 33 import org.eclipse.jface.viewers.IStructuredContentProvider; 34 import org.eclipse.jface.viewers.IStructuredSelection; 35 import org.eclipse.jface.viewers.ITableLabelProvider; 36 import org.eclipse.jface.viewers.SelectionChangedEvent; 37 import org.eclipse.jface.viewers.TableLayout; 38 import org.eclipse.jface.viewers.Viewer; 39 import org.eclipse.jface.window.Window; 40 import org.eclipse.osgi.util.NLS; 41 import org.eclipse.swt.SWT; 42 import org.eclipse.swt.events.KeyEvent; 43 import org.eclipse.swt.events.KeyListener; 44 import org.eclipse.swt.events.SelectionAdapter; 45 import org.eclipse.swt.events.SelectionEvent; 46 import org.eclipse.swt.graphics.Image; 47 import org.eclipse.swt.layout.GridData; 48 import org.eclipse.swt.layout.GridLayout; 49 import org.eclipse.swt.widgets.Button; 50 import org.eclipse.swt.widgets.Composite; 51 import org.eclipse.swt.widgets.Control; 52 import org.eclipse.swt.widgets.DirectoryDialog; 53 import org.eclipse.swt.widgets.Label; 54 import org.eclipse.swt.widgets.Table; 55 import org.eclipse.swt.widgets.TableColumn; 56 import org.eclipse.swt.widgets.TableItem; 57 import org.eclipse.ui.IWorkbench; 58 import org.eclipse.ui.IWorkbenchPreferencePage; 59 import org.eclipse.ui.PlatformUI; 60 61 64 public class WebBrowserPreferencePage extends PreferencePage implements 65 IWorkbenchPreferencePage { 66 protected Button internal; 67 68 protected Button external; 69 70 protected Table table; 71 72 protected CheckboxTableViewer tableViewer; 73 74 protected Button edit; 75 76 protected Button remove; 77 78 protected Button search; 79 80 protected Label location; 81 82 protected Label parameters; 83 84 protected IBrowserDescriptor checkedBrowser; 85 86 class BrowserContentProvider implements IStructuredContentProvider { 87 public Object [] getElements(Object inputElement) { 88 List list = new ArrayList (); 89 Iterator iterator = BrowserManager.getInstance().getWebBrowsers() 90 .iterator(); 91 while (iterator.hasNext()) { 92 IBrowserDescriptor browser = (IBrowserDescriptor) iterator 93 .next(); 94 list.add(browser); 95 } 96 return list.toArray(); 97 } 98 99 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 100 } 102 103 public void dispose() { 104 } 106 } 107 108 class BrowserTableLabelProvider implements ITableLabelProvider { 109 public Image getColumnImage(Object element, int columnIndex) { 110 return null; 111 } 112 113 public String getColumnText(Object element, int columnIndex) { 114 IBrowserDescriptor browser = (IBrowserDescriptor) element; 115 return notNull(browser.getName()); 116 } 117 118 protected String notNull(String s) { 119 if (s == null) 120 return ""; return s; 122 } 123 124 public boolean isLabelProperty(Object element, String property) { 125 return false; 126 } 127 128 public void addListener(ILabelProviderListener listener) { 129 } 131 132 public void removeListener(ILabelProviderListener listener) { 133 } 135 136 public void dispose() { 137 } 139 } 140 141 144 public WebBrowserPreferencePage() { 145 super(); 146 } 147 148 155 protected Control createContents(Composite parent) { 156 initializeDialogUnits(parent); 157 PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, 158 ContextIds.PREF_BROWSER); 159 160 Composite composite = new Composite(parent, SWT.NONE); 161 GridLayout layout = new GridLayout(); 162 layout.numColumns = 2; 163 layout.horizontalSpacing = convertHorizontalDLUsToPixels(4); 164 layout.verticalSpacing = convertVerticalDLUsToPixels(3); 165 layout.marginWidth = 0; 166 layout.marginHeight = 0; 167 composite.setLayout(layout); 168 GridData data = new GridData(GridData.FILL_HORIZONTAL 169 | GridData.VERTICAL_ALIGN_FILL); 170 composite.setLayoutData(data); 171 172 Label label = new Label(composite, SWT.WRAP); 173 label.setText(Messages.preferenceWebBrowserDescription); 174 data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); 175 data.horizontalSpan = 2; 176 label.setLayoutData(data); 177 178 label = new Label(composite, SWT.WRAP); 179 data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); 180 data.horizontalSpan = 2; 181 label.setLayoutData(data); 182 183 internal = new Button(composite, SWT.RADIO); 184 internal.setText(Messages.prefInternalBrowser); 185 data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); 186 data.horizontalSpan = 2; 187 internal.setLayoutData(data); 188 189 if (!WebBrowserUtil.canUseInternalWebBrowser()) 190 internal.setEnabled(false); 191 192 external = new Button(composite, SWT.RADIO); 193 external.setText(Messages.prefExternalBrowser); 194 data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); 195 data.horizontalSpan = 2; 196 external.setLayoutData(data); 197 198 label = new Label(composite, SWT.NONE); 199 label.setText(Messages.browserList); 200 data = new GridData(GridData.FILL_HORIZONTAL 201 | GridData.VERTICAL_ALIGN_CENTER); 202 data.horizontalSpan = 2; 203 label.setLayoutData(data); 204 205 table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL 206 | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); 207 data = new GridData(GridData.FILL_BOTH); 208 table.setLayoutData(data); 209 table.setHeaderVisible(false); 210 table.setLinesVisible(false); 211 212 TableLayout tableLayout = new TableLayout(); 213 new TableColumn(table, SWT.NONE); 214 tableLayout.addColumnData(new ColumnWeightData(100)); 215 table.setLayout(tableLayout); 216 217 tableViewer = new CheckboxTableViewer(table); 218 tableViewer.setContentProvider(new BrowserContentProvider()); 219 tableViewer.setLabelProvider(new BrowserTableLabelProvider()); 220 tableViewer.setInput("root"); 222 tableViewer.addCheckStateListener(new ICheckStateListener() { 226 public void checkStateChanged(CheckStateChangedEvent e) { 227 checkNewDefaultBrowser(e.getElement()); 228 checkedBrowser = (IBrowserDescriptor) e.getElement(); 229 230 Object [] obj = tableViewer.getCheckedElements(); 235 if (obj.length == 0) 236 tableViewer.setChecked(e.getElement(), true); 237 } 238 }); 239 240 checkedBrowser = BrowserManager.getInstance().getCurrentWebBrowser(); 245 if (checkedBrowser != null) 246 tableViewer.setChecked(checkedBrowser, true); 247 else { 248 Object obj = tableViewer.getElementAt(0); 249 if (obj != null) 250 tableViewer.setChecked(obj, true); 251 } 252 253 tableViewer 254 .addSelectionChangedListener(new ISelectionChangedListener() { 255 public void selectionChanged(SelectionChangedEvent event) { 256 IStructuredSelection sele = ((IStructuredSelection) tableViewer 257 .getSelection()); 258 boolean sel = sele.getFirstElement() != null && 259 !(sele.getFirstElement() instanceof SystemBrowserDescriptor); 260 remove.setEnabled(sel); 261 edit.setEnabled(sel); 262 } 263 }); 264 265 tableViewer.addDoubleClickListener(new IDoubleClickListener() { 266 public void doubleClick(DoubleClickEvent event) { 267 IStructuredSelection sel = ((IStructuredSelection) tableViewer 268 .getSelection()); 269 Object firstElem = sel.getFirstElement(); 270 if (firstElem != null && !(firstElem instanceof SystemBrowserDescriptor)) { 271 IBrowserDescriptor browser2 = (IBrowserDescriptor) sel 272 .getFirstElement(); 273 IBrowserDescriptorWorkingCopy wc = browser2 274 .getWorkingCopy(); 275 BrowserDescriptorDialog dialog = new BrowserDescriptorDialog( 276 getShell(), wc); 277 if (dialog.open() != Window.CANCEL) { 278 try { 279 tableViewer.refresh(wc.save()); 280 } catch (Exception ex) { 281 } 283 } 284 } 285 } 286 }); 287 288 table.addKeyListener(new KeyListener() { 289 public void keyPressed(KeyEvent e) { 290 if (e.character == SWT.DEL) { 291 IStructuredSelection sel = ((IStructuredSelection) tableViewer 292 .getSelection()); 293 if (sel.getFirstElement() != null) { 294 IBrowserDescriptor browser2 = (IBrowserDescriptor) sel 295 .getFirstElement(); 296 try { 297 browser2.delete(); 298 tableViewer.remove(browser2); 299 300 BrowserManager manager = BrowserManager.getInstance(); 308 if (browser2 == checkedBrowser) { 309 if (manager.browsers.size() > 0) { 310 checkedBrowser = (IBrowserDescriptor) manager.browsers.get(0); 311 tableViewer.setChecked(checkedBrowser, true); 312 } 313 } 314 } catch (Exception ex) { 315 } 317 } 318 } 319 } 320 321 public void keyReleased(KeyEvent e) { 322 } 324 }); 325 326 Composite buttonComp = new Composite(composite, SWT.NONE); 327 layout = new GridLayout(); 328 layout.horizontalSpacing = 0; 329 layout.verticalSpacing = convertVerticalDLUsToPixels(3); 330 layout.marginWidth = 0; 331 layout.marginHeight = 0; 332 layout.numColumns = 1; 333 buttonComp.setLayout(layout); 334 data = new GridData(GridData.HORIZONTAL_ALIGN_FILL 335 | GridData.VERTICAL_ALIGN_FILL); 336 buttonComp.setLayoutData(data); 337 338 final Button add = SWTUtil.createButton(buttonComp, Messages.add); 339 add.addSelectionListener(new SelectionAdapter() { 340 public void widgetSelected(SelectionEvent e) { 341 BrowserDescriptorDialog dialog = new BrowserDescriptorDialog( 342 getShell()); 343 if (dialog.open() == Window.CANCEL) 344 return; 345 tableViewer.refresh(); 346 if (checkedBrowser != null) 347 tableViewer.setChecked(checkedBrowser, true); 348 } 349 }); 350 351 edit = SWTUtil.createButton(buttonComp, Messages.edit); 352 edit.addSelectionListener(new SelectionAdapter() { 353 public void widgetSelected(SelectionEvent e) { 354 IStructuredSelection sel = ((IStructuredSelection) tableViewer 355 .getSelection()); 356 IBrowserDescriptor browser2 = (IBrowserDescriptor) sel 357 .getFirstElement(); 358 IBrowserDescriptorWorkingCopy wc = browser2.getWorkingCopy(); 359 BrowserDescriptorDialog dialog = new BrowserDescriptorDialog( 360 getShell(), wc); 361 if (dialog.open() != Window.CANCEL) { 362 try { 363 tableViewer.refresh(wc.save()); 364 } catch (Exception ex) { 365 } 367 } 368 } 369 }); 370 371 remove = SWTUtil.createButton(buttonComp, Messages.remove); 372 remove.addSelectionListener(new SelectionAdapter() { 373 public void widgetSelected(SelectionEvent e) { 374 IStructuredSelection sel = ((IStructuredSelection) tableViewer 375 .getSelection()); 376 IBrowserDescriptor browser2 = (IBrowserDescriptor) sel 377 .getFirstElement(); 378 try { 379 browser2.delete(); 380 tableViewer.remove(browser2); 381 382 BrowserManager manager = BrowserManager.getInstance(); 389 if (browser2 == checkedBrowser) { 390 if (manager.browsers.size() > 0) { 391 checkedBrowser = (IBrowserDescriptor) manager.browsers.get(0); 392 tableViewer.setChecked(checkedBrowser, true); 393 } 394 } 395 } catch (Exception ex) { 396 } 398 } 399 }); 400 401 search = SWTUtil.createButton(buttonComp, Messages.search); 402 data = (GridData) search.getLayoutData(); 403 data.verticalIndent = 9; 404 search.addSelectionListener(new SelectionAdapter() { 405 public void widgetSelected(SelectionEvent e) { 406 final List foundBrowsers = new ArrayList (); 407 final List existingPaths = WebBrowserUtil 408 .getExternalBrowserPaths(); 409 410 DirectoryDialog dialog = new DirectoryDialog(getShell()); 412 dialog.setMessage(Messages.selectDirectory); 413 dialog.setText(Messages.directoryDialogTitle); 414 415 String path = dialog.open(); 416 if (path == null) 417 return; 418 419 final File rootDir = new File (path); 420 ProgressMonitorDialog pm = new ProgressMonitorDialog(getShell()); 421 422 IRunnableWithProgress r = new IRunnableWithProgress() { 423 public void run(IProgressMonitor monitor) { 424 monitor.beginTask(Messages.searchingTaskName, 425 IProgressMonitor.UNKNOWN); 426 search(rootDir, existingPaths, foundBrowsers, monitor); 427 monitor.done(); 428 } 429 }; 430 431 try { 432 pm.run(true, true, r); 433 } catch (InvocationTargetException ex) { 434 Trace.trace(Trace.SEVERE, 435 "Invocation Exception occured running monitor: " + ex); 437 } catch (InterruptedException ex) { 438 Trace.trace(Trace.SEVERE, 439 "Interrupted exception occured running monitor: " + ex); 441 return; 442 } 443 444 if (pm.getProgressMonitor().isCanceled()) 445 return; 446 447 List browsersToCreate = foundBrowsers; 448 449 if (browsersToCreate == null) return; 451 452 if (browsersToCreate.isEmpty()) { WebBrowserUtil.openMessage(Messages.searchingNoneFound); 454 return; 455 } 456 457 Iterator iterator = browsersToCreate.iterator(); 458 while (iterator.hasNext()) { 459 IBrowserDescriptorWorkingCopy browser2 = (IBrowserDescriptorWorkingCopy) iterator 460 .next(); 461 browser2.save(); 462 } 463 tableViewer.refresh(); 464 465 if (checkedBrowser != null) 466 tableViewer.setChecked(checkedBrowser, true); 467 } 468 }); 469 470 tableViewer.addCheckStateListener(new ICheckStateListener() { 471 public void checkStateChanged(CheckStateChangedEvent e) { 472 checkNewDefaultBrowser(e.getElement()); 473 checkedBrowser = (IBrowserDescriptor) e 474 .getElement(); 475 } 476 }); 477 478 489 internal.setSelection(WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.INTERNAL); 490 external.setSelection(WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.EXTERNAL); 491 492 IStructuredSelection sele = ((IStructuredSelection) tableViewer 494 .getSelection()); 495 boolean sel = sele.getFirstElement() != null && 496 !(sele.getFirstElement() instanceof SystemBrowserDescriptor); 497 edit.setEnabled(sel); 498 remove.setEnabled(sel); 499 500 Dialog.applyDialogFont(composite); 501 502 return composite; 503 } 504 505 511 public void init(IWorkbench workbench) { 512 } 514 515 518 public void setVisible(boolean visible) { 519 super.setVisible(visible); 520 if (visible) 521 setTitle(Messages.preferenceWebBrowserTitle); 522 } 523 524 protected Object getSelection(ISelection sel2) { 525 IStructuredSelection sel = (IStructuredSelection) sel2; 526 return sel.getFirstElement(); 527 } 528 529 protected void checkNewDefaultBrowser(Object browser) { 531 TableItem[] children = tableViewer.getTable().getItems(); 532 for (int i = 0; i < children.length; i++) { 533 TableItem item = children[i]; 534 535 if (!(item.getData().equals(browser))) 536 item.setChecked(false); 537 } 538 } 539 540 protected static void search(File directory, List existingPaths, 541 List foundBrowsers, IProgressMonitor monitor) { 542 if (monitor.isCanceled()) 543 return; 544 545 monitor.subTask(NLS.bind(Messages.searching, 546 new String [] { Integer.toString(foundBrowsers.size()), directory.getAbsolutePath()})); 547 548 String [] names = directory.list(); 549 List subDirs = new ArrayList (); 550 551 for (int i = 0; i < names.length; i++) { 552 if (monitor.isCanceled()) 553 return; 554 555 File file = new File (directory, names[i]); 556 557 if (existingPaths.contains(file.getAbsolutePath().toLowerCase())) 558 continue; 559 560 IBrowserDescriptorWorkingCopy wc = WebBrowserUtil 561 .createExternalBrowser(file); 562 if (wc != null) 563 foundBrowsers.add(wc); 564 565 if (file.isDirectory()) { 566 if (monitor.isCanceled()) 567 return; 568 subDirs.add(file); 569 } 570 } 571 while (!subDirs.isEmpty()) { 572 File subDir = (File ) subDirs.remove(0); 573 search(subDir, existingPaths, foundBrowsers, monitor); 574 if (monitor.isCanceled()) { 575 return; 576 } 577 } 578 } 579 580 584 protected void performDefaults() { 585 internal.setSelection(WebBrowserPreference 586 .isDefaultUseInternalBrowser()); 587 external.setSelection(!WebBrowserPreference. 588 isDefaultUseInternalBrowser()); 589 590 BrowserManager.getInstance().currentBrowser = null; 591 BrowserManager.getInstance().setupDefaultBrowsers(); 592 tableViewer.refresh(); 593 594 checkedBrowser = BrowserManager.getInstance().getCurrentWebBrowser(); 595 if (checkedBrowser != null) 596 tableViewer.setChecked(checkedBrowser, true); 597 598 super.performDefaults(); 599 } 600 601 604 public boolean performOk() { 605 int choice; 606 if (internal.getSelection()) 607 choice = WebBrowserPreference.INTERNAL; 608 else 609 choice = WebBrowserPreference.EXTERNAL; 610 WebBrowserPreference.setBrowserChoice(choice); 611 if (checkedBrowser != null) 612 BrowserManager.getInstance().setCurrentWebBrowser(checkedBrowser); 613 614 return true; 615 } 616 } 617 | Popular Tags |