/* * Copyright PMEase (c) 2005 - 2010, * Date: Jan 10, 2010 12:48:20 AM * * All rights reserved. * * Revision: $Id$ */ package com.pmease.quickbuild.monitor.gui; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.LocationAdapter; import org.eclipse.swt.browser.LocationEvent; import org.eclipse.swt.browser.OpenWindowListener; import org.eclipse.swt.browser.TitleEvent; import org.eclipse.swt.browser.TitleListener; import org.eclipse.swt.browser.VisibilityWindowAdapter; import org.eclipse.swt.browser.WindowEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Shell; import com.pmease.quickbuild.monitor.utils.SWTUtils; public class BrowserWindow extends AbstractDialog { private Browser browser; private Browser externalBrowser; public BrowserWindow(TrayMonitor trayMonitor) { super(trayMonitor); setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE); } @Override protected Control createContents(Composite parent) { browser = new Browser(parent.getShell(), SWT.NONE); browser.addOpenWindowListener(new OpenWindowListener() { public void open(WindowEvent event) { if (SWTUtils.isDisposed(externalBrowser)) { final Shell externalShell = new Shell(getShell(), SWT.NONE); externalBrowser = new Browser(externalShell, SWT.NONE); externalBrowser.addLocationListener(new LocationAdapter() { @Override public void changing(LocationEvent event) { event.doit = false; Program.launch(event.location); } }); externalShell.setVisible(false); } event.browser = externalBrowser; } }); browser.addTitleListener(new TitleListener() { public void changed(TitleEvent event) { browser.getShell().setText(event.title); } }); browser.addVisibilityWindowListener(new VisibilityWindowAdapter() { @Override public void hide(WindowEvent event) { Browser browser = (Browser) event.widget; Shell shell = browser.getShell(); shell.setVisible(false); } @Override public void show(WindowEvent event) { Browser browser = (Browser) event.widget; final Shell shell = browser.getShell(); if (event.location != null) shell.setLocation(event.location); Point size = new Point(880, 400); shell.setSize(shell.computeSize(size.x, size.y)); shell.open(); } }); browser.setUrl(monitor.settings.getQBLiteUrl(), null, monitor.settings.getAuthCode()); return parent; } @Override protected boolean canHandleShellCloseEvent() { return true; } @Override public boolean close() { if (browser != null && !browser.isDisposed()) { browser.dispose(); } if (externalBrowser != null && !externalBrowser.isDisposed()) { externalBrowser.dispose(); } return super.close(); } @Override protected Control createButtonBar(Composite parent) { return null; } @Override protected Layout getLayout() { return new FillLayout(); } @Override protected String getPreferenceName() { return "QuickView"; } @Override protected String getDefaultSize() { return "550,300"; } }