package net.sourceforge.phpeclipse.ui.editor; import net.sourceforge.phpeclipse.ui.IPreferenceConstants; import net.sourceforge.phpeclipse.ui.WebUI; import net.sourceforge.phpeclipse.ui.overlaypages.ProjectPrefUtil; import net.sourceforge.phpeclipse.webbrowser.views.BrowserView; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.TextEditorAction; /** * ClassDeclaration that defines the action for parsing the current PHP file */ public class ShowExternalPreviewAction extends TextEditorAction { public final static int XML_TYPE = 1; public final static int HTML_TYPE = 2; public final static int SMARTY_TYPE = 3; public final static int PHP_TYPE = 4; private static ShowExternalPreviewAction instance = new ShowExternalPreviewAction(); /** * Constructs and updates the action. */ private ShowExternalPreviewAction() { super(EditorMessages.getResourceBundle(), "ParserAction.", null); //$NON-NLS-1$ update(); } public static ShowExternalPreviewAction getInstance() { return instance; } /** * Code called when the action is fired. */ public void run() { doRun(PHP_TYPE); } public void doRun(int type) { IFile previewFile = getFile(); BrowserUtil.showPreview(previewFile, false, ""); } public void refresh(int type) { IFile previewFile = getFile(); if (previewFile == null) { // should never happen return; } boolean autoPreview = ProjectPrefUtil.getPreviewBooleanValue( previewFile, IPreferenceConstants.PHP_AUTO_PREVIEW_DEFAULT); boolean bringToTopPreview = ProjectPrefUtil.getPreviewBooleanValue( previewFile, IPreferenceConstants.PHP_BRING_TO_TOP_PREVIEW_DEFAULT); if (autoPreview) { IWorkbenchPage page = WebUI.getActivePage(); try { IViewPart part = page.findView(BrowserView.ID_BROWSER); if (part == null) { part = page.showView(BrowserView.ID_BROWSER); } else { if (bringToTopPreview) { page.bringToTop(part); } } if (part != null) { // ((BrowserView) part).refresh(); String localhostURL = getLocalhostURL(null, previewFile); ((BrowserView) part).refresh(localhostURL); } } catch (Exception e) { // PHPeclipsePlugin.log(e); } } } /** * Finds the file that's currently opened in the PHP Text Editor */ protected IFile getFile() { ITextEditor editor = getTextEditor(); IEditorInput editorInput = null; if (editor != null) { editorInput = editor.getEditorInput(); } if (editorInput instanceof IFileEditorInput) return ((IFileEditorInput) editorInput).getFile(); // if nothing was found, which should never happen return null; } public static String getLocalhostURL(IPreferenceStore store, IFile file) { if (file != null) { if (store == null) { store = WebUI.getDefault().getPreferenceStore(); } // IPath path = file.getFullPath(); String localhostURL = file.getLocation().toString(); String lowerCaseFileName = localhostURL.toLowerCase(); // String documentRoot = // store.getString(PHPeclipsePlugin.DOCUMENTROOT_PREF); IPath documentRootPath = ProjectPrefUtil.getDocumentRoot(file .getProject()); String documentRoot = documentRootPath.toString().toLowerCase(); if (lowerCaseFileName.startsWith(documentRoot)) { localhostURL = localhostURL.substring(documentRoot.length()); } else { return null; } // return store.getString(PHPeclipsePlugin.LOCALHOST_PREF) + // localhostURL; return ProjectPrefUtil.getMiscProjectsPreferenceValue(file .getProject(), IPreferenceConstants.PHP_LOCALHOST_PREF) + localhostURL; } return "http://localhost"; } }