1) Fixed issue #751: Pathmap 'Edit' button enable/disable handling.
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.css.ui / src / net / sourceforge / phpeclipse / css / ui / CssUI.java
1 /*
2  * Copyright (c) 2003-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 API and implementation
10  * 
11  * $Id: CssUI.java,v 1.1 2004-09-02 18:11:51 jsurfer Exp $
12  */
13
14 package net.sourceforge.phpeclipse.css.ui;
15
16 import java.net.URL;
17
18 import net.sourceforge.phpeclipse.css.ui.internal.CssUIPreferences;
19 import net.sourceforge.phpeclipse.css.ui.internal.properties.CssPropertiesAdapterFactory;
20 import net.sourceforge.phpeclipse.css.ui.text.CssTextTools;
21
22 import org.eclipse.core.runtime.IStatus;
23 import org.eclipse.core.runtime.Platform;
24 import org.eclipse.core.runtime.Status;
25 import org.eclipse.jface.preference.IPreferenceStore;
26 import org.eclipse.jface.resource.ImageDescriptor;
27 import org.eclipse.jface.resource.ImageRegistry;
28 import org.eclipse.ui.editors.text.TextEditorPreferenceConstants;
29 import org.eclipse.ui.plugin.AbstractUIPlugin;
30 import org.osgi.framework.BundleContext;
31
32 /**
33  * The main plugin class.
34  */
35 public final class CssUI extends AbstractUIPlugin  {
36
37         // Constants ---------------------------------------------------------------
38
39         public static final String ICON_STYLE_SHEET =
40                 "style_sheet_obj.gif"; //$NON-NLS-1$
41         public static final String ICON_AT_RULE =
42                 "at_rule_obj.gif"; //$NON-NLS-1$
43         public static final String ICON_STYLE_RULE =
44                 "style_rule_obj.gif"; //$NON-NLS-1$
45         public static final String ICON_PROPERTY =
46                 "property_obj.gif"; //$NON-NLS-1$
47         public static final String ICON_SHORTHAND =
48                 "shorthand_obj.gif"; //$NON-NLS-1$
49         public static final String ICON_PSEUDO_CLASS =
50                 "pseudo_class_obj.gif"; //$NON-NLS-1$
51         public static final String ICON_IMPORTANT =
52                 "important_obj.gif"; //$NON-NLS-1$
53         public static final String ICON_OVERLAY_ERROR =
54                 "full/ovr16/error_co.gif"; //$NON-NLS-1$
55         public static final String ICON_OVERLAY_WARNING =
56                 "full/ovr16/warning_co.gif"; //$NON-NLS-1$
57
58         // Class Variables ---------------------------------------------------------
59
60         /**
61          * Singleton instance of the plugin.
62          */
63         private static CssUI plugin;
64
65         // Instance Variables ------------------------------------------------------
66
67         /**
68          * The text tools collection.
69          */
70         private CssTextTools textTools;
71
72         // Constructors ------------------------------------------------------------
73
74         /**
75          * Constructor.
76          * 
77          * @param descriptor the plugin descriptor.
78          */
79         public CssUI() {
80                 plugin = this;
81         }
82
83         // Static Methods ----------------------------------------------------------
84
85         /**
86          * Returns the singleton instance of the plugin.
87          * 
88          * @return the plugin instance
89          */
90         public static CssUI getDefault() {
91                 return plugin;
92         }
93
94         /**
95          * Returns the plugin ID.
96          * 
97          * @return the plugin ID
98          */
99         public static String getPluginId() {
100                 return getDefault().getBundle().getSymbolicName();
101         }
102
103         // Public Methods ----------------------------------------------------------
104
105         /**
106          * Returns the CSS text tools that are used primarily for partitioning and
107          * syntax highlighting of CSS source.
108          * 
109          * @return the CSS text tools
110          */
111         public synchronized CssTextTools getTextTools() {
112                 if (textTools == null) {
113                         textTools = new CssTextTools(getPreferenceStore());
114                 }
115                 return textTools;
116         }
117
118         /**
119          * Returns an image descriptor for the image corresponding to the specified
120          * key (which is the name of the image file).
121          * 
122          * @param key The key of the image
123          * @return The descriptor for the requested image, or <code>null</code> if 
124          *         the image could not be found
125          */
126         public ImageDescriptor getImageDescriptor(String key) {
127                 try {
128                         URL url = getBundle().getEntry("/icons/" + key); //$NON-NLS-1$
129                         return ImageDescriptor.createFromURL(url);
130                 } catch (IllegalStateException e) {
131                         return null;
132                 }
133         }
134
135         /**
136          * Writes a status message and the associated exception stack trace (if
137          * provided) to the error log.
138          * 
139          * @param status the status to log
140          */
141         public static void log(IStatus status) {
142                 getDefault().getLog().log(status);
143                 if (status.getException() != null) {
144                         status.getException().printStackTrace(System.err);
145                 }
146         }
147
148         /**
149          * Writes the specified error message and exception stack trace to the error
150          * log.
151          * 
152          * @param message the error message
153          * @param e the exception that caused the error, or <tt>null</tt> to omit
154          *        the stack trace in the log
155          */
156         public static void log(String message, Throwable e) {
157                 IStatus status = new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR,
158                         message, e); 
159                 log(status);
160         }
161
162         /**
163          * Writes the specified error message to the error log.
164          * 
165          * @param message the error message
166          */
167         public static void log(String message) {
168                 IStatus status = new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR,
169                         message, null); 
170                 log(status);
171         }
172
173         /**
174          * Writes the stack trace of the given exception to the error log.
175          * 
176          * @param e the exception that caused the error
177          */
178         public static void log(Throwable e) {
179                 log(e.getMessage(), e);
180         }
181
182         // AbstractUIPlugin Implementation -----------------------------------------
183
184         /*
185          * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
186          */
187         public void start(BundleContext context) throws Exception {
188                 super.start(context);
189                 CssPropertiesAdapterFactory.register(Platform.getAdapterManager());
190         }
191
192         /*
193          * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
194          */
195         public void stop(BundleContext context) throws Exception {
196                 try {
197                         if (textTools != null) {
198                                 textTools.dispose();
199                                 textTools = null;
200                         }
201                 } finally {
202                         super.stop(context);
203                 }
204         }
205
206         /*
207          * @see AbstractUIPlugin#initializeDefaultPreferences(IPreferenceStore)
208          */
209         protected void initializeDefaultPreferences(IPreferenceStore store) {
210                 TextEditorPreferenceConstants.initializeDefaultValues(store);
211                 CssUIPreferences.initializeDefaultValues(store);
212         }
213
214         /*
215          * @see AbstractUIPlugin#initializeImageRegistry(ImageRegistry)
216          */
217         protected void initializeImageRegistry(ImageRegistry reg) {
218                 reg.put(ICON_AT_RULE, getImageDescriptor(ICON_AT_RULE));
219                 reg.put(ICON_STYLE_RULE, getImageDescriptor(ICON_STYLE_RULE));
220                 reg.put(ICON_STYLE_SHEET, getImageDescriptor(ICON_STYLE_SHEET));
221                 reg.put(ICON_PROPERTY, getImageDescriptor(ICON_PROPERTY));
222                 reg.put(ICON_SHORTHAND, getImageDescriptor(ICON_SHORTHAND));
223                 reg.put(ICON_PSEUDO_CLASS, getImageDescriptor(ICON_PSEUDO_CLASS));
224                 reg.put(ICON_IMPORTANT, getImageDescriptor(ICON_IMPORTANT));
225                 reg.put(ICON_OVERLAY_ERROR, getImageDescriptor(ICON_OVERLAY_ERROR));
226                 reg.put(ICON_OVERLAY_WARNING, getImageDescriptor(ICON_OVERLAY_WARNING));
227         }
228
229 }