Debugger now steps through embedded PHP in HTML files.
[phpeclipse.git] / net.sourceforge.phpeclipse.ui / src / net / sourceforge / phpeclipse / ui / WebUI.java
1 /*
2  * Copyright (c) 2004 Christopher Lenz and others
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     Christopher Lenz - initial implementation
10  * 
11  * $Id: WebUI.java,v 1.4 2005-02-12 23:21:46 axelcl Exp $
12  */
13
14 package net.sourceforge.phpeclipse.ui;
15
16 import java.io.IOException;
17 import java.net.URL;
18
19 import net.sourceforge.phpeclipse.ui.templates.template.HTMLContextType;
20 import net.sourceforge.phpeclipse.ui.templates.template.JSContextType;
21 import net.sourceforge.phpeclipse.ui.templates.template.SmartyContextType;
22 import net.sourceforge.phpeclipse.ui.templates.template.XMLContextType;
23
24 import org.eclipse.core.resources.IWorkspace;
25 import org.eclipse.core.resources.ResourcesPlugin;
26 import org.eclipse.core.runtime.IStatus;
27 import org.eclipse.core.runtime.Status;
28 import org.eclipse.jface.preference.IPreferenceStore;
29 import org.eclipse.jface.resource.ImageDescriptor;
30 import org.eclipse.jface.resource.ImageRegistry;
31 import org.eclipse.jface.text.templates.ContextTypeRegistry;
32 import org.eclipse.jface.text.templates.persistence.TemplateStore;
33 import org.eclipse.swt.widgets.Shell;
34 import org.eclipse.ui.IWorkbenchPage;
35 import org.eclipse.ui.IWorkbenchWindow;
36 import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry;
37 import org.eclipse.ui.editors.text.templates.ContributionTemplateStore;
38 import org.eclipse.ui.plugin.AbstractUIPlugin;
39
40 /**
41  * The web development tools UI plugin.
42  */
43 public class WebUI extends AbstractUIPlugin implements IPreferenceConstants {
44   private static final String CUSTOM_TEMPLATES_KEY = "net.sourceforge.phpeclipse.ui.templates"; //$NON-NLS-1$
45
46   // Constants ---------------------------------------------------------------
47
48   public static final String ICON_OVERLAY_ERROR = "full/ovr16/error_co.gif"; //$NON-NLS-1$
49
50   public static final String ICON_OVERLAY_WARNING = "full/ovr16/warning_co.gif"; //$NON-NLS-1$
51
52   // Instance Variables ------------------------------------------------------
53
54   /** The shared instance. */
55   private static WebUI plugin;
56
57   public static IWorkbenchPage getActivePage() {
58     return getDefault().internalGetActivePage();
59   }
60
61   private IWorkbenchPage internalGetActivePage() {
62     return getWorkbench().getActiveWorkbenchWindow().getActivePage();
63   }
64
65   public static Shell getActiveWorkbenchShell() {
66     return getActiveWorkbenchWindow().getShell();
67   }
68  
69   public static IWorkbenchWindow getActiveWorkbenchWindow() {
70     return getDefault().getWorkbench().getActiveWorkbenchWindow();
71   }
72   // Public Methods ----------------------------------------------------------
73
74   /**
75    * Returns the shared instance.
76    */
77   public static WebUI getDefault() {
78     return plugin;
79   }
80
81   /**
82    * Returns the workspace instance.
83    */
84   public static IWorkspace getWorkspace() {
85     return ResourcesPlugin.getWorkspace();
86   }
87
88   /** The context type registry. */
89   private ContributionContextTypeRegistry fRegistry;
90
91   /** The template store. */
92   private TemplateStore fStore;
93
94   // Constructors ------------------------------------------------------------
95
96   /**
97    * The constructor.
98    */
99   public WebUI() {
100     plugin = this;
101   }
102
103   /**
104    * Returns this plug-in's context type registry.
105    * 
106    * @return the context type registry for this plug-in instance
107    */
108   public ContextTypeRegistry getContextTypeRegistry() {
109     if (fRegistry == null) {
110       // create an configure the contexts available in the editor
111       fRegistry = new ContributionContextTypeRegistry();
112       fRegistry.addContextType(XMLContextType.XML_CONTEXT_TYPE);
113       fRegistry.addContextType(HTMLContextType.HTML_CONTEXT_TYPE);
114       fRegistry.addContextType(SmartyContextType.SMARTY_CONTEXT_TYPE);
115       fRegistry.addContextType(JSContextType.JS_CONTEXT_TYPE);
116     }
117     return fRegistry;
118   }
119
120   // Private Methods ---------------------------------------------------------
121
122   /**
123    * Returns an image descriptor for the image corresponding to the specified key (which is the name of the image file).
124    * 
125    * @param key
126    *          The key of the image
127    * @return The descriptor for the requested image, or <code>null</code> if the image could not be found
128    */
129   private ImageDescriptor getImageDescriptor(String key) {
130     try {
131       URL url = getBundle().getEntry("/icons/" + key); //$NON-NLS-1$
132       return ImageDescriptor.createFromURL(url);
133     } catch (IllegalStateException e) {
134       return null;
135     }
136   }
137
138   /**
139    * Returns this plug-in's template store.
140    * 
141    * @return the template store of this plug-in instance
142    */
143   public TemplateStore getTemplateStore() {
144     if (fStore == null) {
145       fStore = new ContributionTemplateStore(getContextTypeRegistry(), getDefault().getPreferenceStore(), CUSTOM_TEMPLATES_KEY);
146       try {
147         fStore.load();
148       } catch (IOException e) {
149         WebUI.getDefault().getLog().log(new Status(IStatus.ERROR, "net.sourceforge.phpeclipse.ui", IStatus.OK, "", e)); //$NON-NLS-1$ //$NON-NLS-2$
150       }
151     }
152     return fStore;
153   }
154
155   protected void initializeDefaultPreferences(IPreferenceStore store) {
156     store.setDefault(PHP_LOCALHOST_PREF, "http://localhost");
157     store.setDefault(PHP_DOCUMENTROOT_PREF, getWorkspace().getRoot().getLocation().toString());
158     store.setDefault(PHP_BOOKMARK_DEFAULT, "");
159
160     store.setDefault(PHP_AUTO_PREVIEW_DEFAULT, "true");
161     store.setDefault(PHP_BRING_TO_TOP_PREVIEW_DEFAULT, "true");
162     store.setDefault(PHP_SHOW_HTML_FILES_LOCAL, "true");
163     store.setDefault(PHP_SHOW_XML_FILES_LOCAL, "false");
164   }
165
166   /*
167    * @see AbstractUIPlugin#initializeImageRegistry(ImageRegistry)
168    */
169   protected void initializeImageRegistry(ImageRegistry reg) {
170     reg.put(ICON_OVERLAY_ERROR, getImageDescriptor(ICON_OVERLAY_ERROR));
171     reg.put(ICON_OVERLAY_WARNING, getImageDescriptor(ICON_OVERLAY_WARNING));
172   }
173   //  private IWorkbenchPage internalGetActivePage() {
174   //    IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow();
175   //    if (window != null)
176   //      return window.getActivePage();
177   //    return null;
178   //  }
179 }