/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.ui.views; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.*; import org.eclipse.ui.part.ViewPart; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIIcon; /** * Base Browser view. */ public class BaseBrowserView extends ViewPart { private static final Log log = Log.getLog(BaseBrowserView.class); public static final String MEMENTO_URL = "url"; //$NON-NLS-1$ private Browser browser; private String initialUrl; private Action backAction = new Action("Back", DBeaverIcons.getImageDescriptor(UIIcon.ARROW_LEFT)) { @Override public void run() { browser.back(); } }; private Action forwardAction = new Action("Forward", DBeaverIcons.getImageDescriptor(UIIcon.ARROW_RIGHT)) { @Override public void run() { browser.forward(); } }; private Action stopAction = new Action("Stop", DBeaverIcons.getImageDescriptor(UIIcon.REJECT)) { @Override public void run() { browser.stop(); } }; private Action refreshAction = new Action("Refresh", DBeaverIcons.getImageDescriptor(UIIcon.REFRESH)) { @Override public void run() { browser.refresh(); } }; /** * Constructs a new <code>BaseBrowserView</code>. */ public BaseBrowserView() { initialUrl = "about:blank"; } @Override public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site); if (memento != null) { String u = memento.getString(MEMENTO_URL); if (u != null) { initialUrl = u; } } } @Override public void saveState(IMemento memento) { memento.putString(MEMENTO_URL, browser.getUrl()); } @Override public void createPartControl(Composite parent) { browser = createBrowser(parent, getViewSite().getActionBars()); browser.setUrl(initialUrl); } @Override public void setFocus() { if (browser != null && !browser.isDisposed()) { browser.setFocus(); } } private Browser createBrowser(Composite parent, final IActionBars actionBars) { GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 1; parent.setLayout(gridLayout); browser = new Browser(parent, SWT.NONE); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.verticalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; browser.setLayoutData(data); browser.addProgressListener(new ProgressAdapter() { IProgressMonitor monitor = actionBars.getStatusLineManager().getProgressMonitor(); boolean working = false; int workedSoFar; @Override public void changed(ProgressEvent event) { if (event.total == 0) return; if (!working) { if (event.current == event.total) return; monitor.beginTask("", event.total); //$NON-NLS-1$ workedSoFar = 0; working = true; } monitor.worked(event.current - workedSoFar); workedSoFar = event.current; } @Override public void completed(ProgressEvent event) { monitor.done(); working = false; } }); browser.addStatusTextListener(new StatusTextListener() { IStatusLineManager status = actionBars.getStatusLineManager(); @Override public void changed(StatusTextEvent event) { status.setMessage(event.text); } }); browser.addLocationListener(new LocationAdapter() { @Override public void changed(LocationEvent event) { backAction.setEnabled(browser.isBackEnabled()); forwardAction.setEnabled(browser.isForwardEnabled()); // if (event.top) // location.setText(event.location); } }); browser.addTitleListener(new TitleListener() { @Override public void changed(TitleEvent event) { setPartName(event.title); } }); /* browser.addOpenWindowListener(new OpenWindowListener() { public void open(WindowEvent event) { BaseBrowserView.this.openWindow(event); } }); */ // TODO: should handle VisibilityWindowListener.show and .hide events browser.addCloseWindowListener(new CloseWindowListener() { @Override public void close(WindowEvent event) { BaseBrowserView.this.close(); } }); /* location.addSelectionListener(new SelectionAdapter() { public void widgetDefaultSelected(SelectionEvent e) { browser.setUrl(location.getText()); } }); */ // Hook the navigation actons as handlers for the retargetable actions // defined in BrowserActionBuilder. actionBars.setGlobalActionHandler("back", backAction); //$NON-NLS-1$ actionBars.setGlobalActionHandler("forward", forwardAction); //$NON-NLS-1$ actionBars.setGlobalActionHandler("stop", stopAction); //$NON-NLS-1$ actionBars.setGlobalActionHandler("refresh", refreshAction); //$NON-NLS-1$ IToolBarManager toolBarManager = actionBars.getToolBarManager(); toolBarManager.add(backAction); toolBarManager.add(forwardAction); toolBarManager.add(stopAction); toolBarManager.add(refreshAction); backAction.setEnabled(false); forwardAction.setEnabled(false); return browser; } /** * Closes this browser view. */ private void close() { IWorkbenchPage page = getSite().getPage(); IWorkbenchWindow window = page.getWorkbenchWindow(); page.hideView(this); } public Browser getBrowser() { return browser; } }