Package tk.eclipse.plugin.htmleditor.editors

Source Code of tk.eclipse.plugin.htmleditor.editors.WebBrowser

package tk.eclipse.plugin.htmleditor.editors;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.OpenWindowListener;
import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
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.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.EditorPart;

import tk.eclipse.plugin.htmleditor.HTMLPlugin;
import tk.eclipse.plugin.htmleditor.HTMLUtil;

/**
* A simple web browser which works as an Eclipse editor.
* It can be used to debug of web applications.
* <p>
*   This browser allows only IFileEditorInput and URLEditorInput as an editor input.
*   In the case of IFileEditorInput, it works as following:
* </p>
* <ul>
*   <li>*.url (URL shortcut) -
*       search an entry which starts with 'URL=', and open that URL in the web browser.</li>
*   <li>etc - open in the web browser as HTML file.</li>
* </ul>
*
* @author Naoki Takezoe
* @since 1.4.1
*/
public class WebBrowser extends EditorPart {
 
  private Text textUrl;
  private Browser browser;
 
  private ToolItem buttonRun;
  private ToolItem buttonForward;
  private ToolItem buttonBackword;
  private ToolItem buttonRefresh;
 
 
  public WebBrowser() {
    super();
  }

  public void doSave(IProgressMonitor monitor) {
    // nothing to do
  }

  public void doSaveAs() {
    // nothing to do
  }
 
  public void init(IEditorSite site, IEditorInput input) throws PartInitException {
    if(input instanceof IFileEditorInput || input instanceof URLEditorInput){
      setSite(site);
      setInput(input);
    } else {
      throw new PartInitException(
        "Web browser allows only IFileEditorInput or URLEditorInput.");
    }
  }

  public boolean isDirty() {
    return false;
  }

  public boolean isSaveAsAllowed() {
    return false;
  }
 
  protected void setInput(IEditorInput input) {
    super.setInput(input);
    if(input instanceof IFileEditorInput){
      if(browser!=null){
        IFile file = ((IFileEditorInput)input).getFile();
        // .url file (URL shortcut)
        if(file.getName().endsWith(".url")){
          try {
            String source = new String(HTMLUtil.readStream(file.getContents()));
            String[] dim = source.split("(\r\n|\r|\n)");
            for(int i=0;i<dim.length;i++){
              if(dim[i].startsWith("URL=")){
                String url = dim[i].substring(4,dim[i].length()).trim();
                textUrl.setText(url);
                browser.setUrl(url);
                break;
              }
            }
          } catch(Exception ex){
            HTMLPlugin.logException(ex);
          }
        // etc (process as a HTML file)
        } else {
          String url = "file://" + file.getLocation().makeAbsolute().toFile().getAbsolutePath().replaceAll("\\\\","/");
          textUrl.setText(url);
          browser.setUrl(url);
        }
      }
    } else if(input instanceof URLEditorInput){
      if(browser!=null){
        String url = ((URLEditorInput)input).getUrl();
        if(url!=null && !url.equals("")){
          textUrl.setText(url);
          browser.setUrl(url);
        }
      }
    }
  }
 
  public Browser getBrowser(){
    return this.browser;
  }
 
  public void createPartControl(Composite parent) {
    Composite composite = new Composite(parent,SWT.NULL);
    GridLayout layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth  = 0;
    composite.setLayout(layout);
   
    Composite northPane = new Composite(composite,SWT.NULL);
    GridLayout northPaneLayout = new GridLayout(2,false);
    northPaneLayout.marginHeight = 0;
    northPaneLayout.marginWidth  = 0;
    northPane.setLayout(northPaneLayout);
    northPane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   
    textUrl = new Text(northPane,SWT.BORDER);
    textUrl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    textUrl.addKeyListener(new KeyAdapter(){
      public void keyReleased(KeyEvent e){
        if(e.keyCode==SWT.CR || e.keyCode==SWT.LF){
          browser.setUrl(textUrl.getText());
        }
      }
    });
   
    ToolBar toolbar = new ToolBar(northPane,SWT.FLAT);
   
    buttonRun = new ToolItem (toolbar,SWT.PUSH);
    buttonRun.setImage(HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_RUN));
    buttonRun.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        browser.setUrl(textUrl.getText());
      }
    });
   
    buttonRefresh = new ToolItem (toolbar,SWT.PUSH);
    buttonRefresh.setImage(HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_REFRESH));
    buttonRefresh.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        browser.refresh();
      }
    });
   
    buttonBackword = new ToolItem (toolbar,SWT.PUSH);
    buttonBackword.setImage(HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_BACKWARD));
    buttonBackword.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        browser.back();
      }
    });
   
    buttonForward = new ToolItem (toolbar,SWT.PUSH);
    buttonForward.setImage(HTMLPlugin.getDefault().getImageRegistry().get(HTMLPlugin.ICON_FORWARD));
    buttonForward.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        browser.forward();
      }
    });
   
    browser = new Browser(composite,SWT.NULL);
    browser.setLayoutData(new GridData(GridData.FILL_BOTH));
    browser.addOpenWindowListener(new OpenWindowListener(){
      public void open(WindowEvent event){
        try {
          URLEditorInput input = new URLEditorInput(null);
          IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
          IWorkbenchPage page = window.getActivePage();
          IDE.openEditor(page, input, "tk.eclipse.plugin.htmleditor.editors.WebBrowser");
          IEditorPart editorPart = page.getActiveEditor();
          if(editorPart instanceof WebBrowser){
            event.browser = ((WebBrowser)editorPart).getBrowser();
          }
        } catch(PartInitException ex){
          HTMLPlugin.logException(ex);
        }
      }
    });
    browser.addTitleListener(new TitleListener(){
      public void changed(TitleEvent event) {
        setPartName(event.title);
        textUrl.setText(browser.getUrl());
        refreshActions();
      }
    });
   
    setInput(getEditorInput());
  }
 
  private void refreshActions(){
    buttonBackword.setEnabled(browser.isBackEnabled());
    buttonForward.setEnabled(browser.isForwardEnabled());
  }
 
  public void setFocus() {
    browser.setFocus();
  }

}
TOP

Related Classes of tk.eclipse.plugin.htmleditor.editors.WebBrowser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.