diff options
author | Bogdan Gheorghe | 2011-12-01 04:35:18 +0000 |
---|---|---|
committer | Bogdan Gheorghe | 2011-12-01 04:35:18 +0000 |
commit | 2a9dfa1c2abf51652efef1c4f7d5326296ce556c (patch) | |
tree | 25fe9fec4839c83c2148c10d290a1ab4a5d43b7b | |
parent | a775b299d44822cbe192270b4dc82db2bee2f730 (diff) | |
download | org.eclipse.e4.tools-2a9dfa1c2abf51652efef1c4f7d5326296ce556c.tar.gz org.eclipse.e4.tools-2a9dfa1c2abf51652efef1c4f7d5326296ce556c.tar.xz org.eclipse.e4.tools-2a9dfa1c2abf51652efef1c4f7d5326296ce556c.zip |
CSSEditorPreferences page
-rw-r--r-- | bundles/org.eclipse.e4.tools.css.editor.ui/META-INF/MANIFEST.MF | 59 | ||||
-rw-r--r-- | bundles/org.eclipse.e4.tools.css.editor.ui/src/org/eclipse/e4/ui/preferences/CSSEditorPreferences.java | 353 |
2 files changed, 240 insertions, 172 deletions
diff --git a/bundles/org.eclipse.e4.tools.css.editor.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.css.editor.ui/META-INF/MANIFEST.MF index 8bbf8710..ff21a2d3 100644 --- a/bundles/org.eclipse.e4.tools.css.editor.ui/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.tools.css.editor.ui/META-INF/MANIFEST.MF @@ -1,29 +1,30 @@ -Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: org.eclipse.e4.tools.css.editor.ui
-Bundle-Vendor: My Company
-Bundle-Version: 1.0.0
-Bundle-SymbolicName: org.eclipse.e4.tools.css.editor.ui; singleton:=true
-Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.e4.tools.css.editor;visibility:=reexport,
- org.eclipse.xtext.ui,
- org.eclipse.ui.editors;bundle-version="3.5.0",
- org.eclipse.ui.ide;bundle-version="3.5.0",
- org.eclipse.xtext.ui.shared,
- org.eclipse.ui,
- org.eclipse.xtext.builder,
- org.antlr.runtime,
- org.eclipse.xtext.common.types.ui,
- org.eclipse.xtext.ui.codetemplates.ui,
- org.eclipse.e4.ui.css.core;bundle-version="0.10.0",
- org.eclipse.e4.ui.css.swt;bundle-version="0.10.0",
- org.eclipse.e4.ui.css.swt.theme;bundle-version="0.9.1",
- org.eclipse.e4.ui.model.workbench;bundle-version="0.10.0",
- org.eclipse.e4.ui.workbench;bundle-version="0.10.1",
- org.eclipse.e4.core.contexts;bundle-version="1.0.0"
-Import-Package: org.apache.log4j,
- org.apache.commons.logging
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.e4.ui.contentassist.antlr,
- org.eclipse.e4.ui.internal
-Bundle-Activator: org.eclipse.e4.ui.internal.CSSActivator
+Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: org.eclipse.e4.tools.css.editor.ui +Bundle-Vendor: My Company +Bundle-Version: 1.0.0 +Bundle-SymbolicName: org.eclipse.e4.tools.css.editor.ui; singleton:=true +Bundle-ActivationPolicy: lazy +Require-Bundle: org.eclipse.e4.tools.css.editor;visibility:=reexport, + org.eclipse.xtext.ui, + org.eclipse.ui.editors;bundle-version="3.5.0", + org.eclipse.ui.ide;bundle-version="3.5.0", + org.eclipse.xtext.ui.shared, + org.eclipse.ui, + org.eclipse.xtext.builder, + org.antlr.runtime, + org.eclipse.xtext.common.types.ui, + org.eclipse.xtext.ui.codetemplates.ui, + org.eclipse.e4.ui.css.core;bundle-version="0.10.0", + org.eclipse.e4.ui.css.swt;bundle-version="0.10.0", + org.eclipse.e4.ui.css.swt.theme;bundle-version="0.9.1", + org.eclipse.e4.ui.model.workbench;bundle-version="0.10.0", + org.eclipse.e4.ui.workbench;bundle-version="0.10.1", + org.eclipse.e4.core.contexts;bundle-version="1.0.0", + org.eclipse.core.filesystem;bundle-version="1.3.200" +Import-Package: org.apache.log4j, + org.apache.commons.logging +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Export-Package: org.eclipse.e4.ui.contentassist.antlr, + org.eclipse.e4.ui.internal +Bundle-Activator: org.eclipse.e4.ui.internal.CSSActivator diff --git a/bundles/org.eclipse.e4.tools.css.editor.ui/src/org/eclipse/e4/ui/preferences/CSSEditorPreferences.java b/bundles/org.eclipse.e4.tools.css.editor.ui/src/org/eclipse/e4/ui/preferences/CSSEditorPreferences.java index e02d247b..3c5d5749 100644 --- a/bundles/org.eclipse.e4.tools.css.editor.ui/src/org/eclipse/e4/ui/preferences/CSSEditorPreferences.java +++ b/bundles/org.eclipse.e4.tools.css.editor.ui/src/org/eclipse/e4/ui/preferences/CSSEditorPreferences.java @@ -1,143 +1,210 @@ -package org.eclipse.e4.ui.preferences;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngine;
-import org.eclipse.e4.ui.css.swt.theme.ITheme;
-import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
-import org.eclipse.e4.ui.workbench.IPresentationEngine;
-import org.eclipse.e4.ui.workbench.modeling.EPartService;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.EditorReference;
-import org.eclipse.ui.internal.WorkbenchPage;
-import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor;
-import org.eclipse.ui.internal.tweaklets.PreferencePageEnhancer;
-import org.eclipse.ui.part.FileEditorInput;
-
-public class CSSEditorPreferences extends PreferencePageEnhancer {
-
- ITheme selection;
- IEditorPart cssEditor;
- IThemeEngine engine;
-
- @SuppressWarnings("restriction")
- @Override
- public void createContents(Composite parent) {
- IWorkbenchWindow wbw = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- MWindow hostWin = (MWindow) wbw.getService(MWindow.class);
- EPartService partService = hostWin.getContext().get(EPartService.class);
- MPart editor = partService.createPart(CompatibilityEditor.MODEL_ELEMENT_ID);
- engine = hostWin.getContext().get(IThemeEngine.class);
- // File newFolder = create .e4Css in user home
- // IFileStore prj = EFS
- // .getLocalFileSystem()
- // .getStore(
- // new Path(
- // System.getProperty("user.home") + System.getProperty("file.separator") + ".e4css")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
- IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(".e4css"); //$NON-NLS-1$
-
- URL styleSheetURL = null;
-
- if (engine instanceof ThemeEngine) {
- List<String> ss = ((ThemeEngine) engine).getStylesheets(selection);
- if (ss.size() > 0) {
- // For now just get the first element
- String path = ss.get(0);
- try {
- styleSheetURL = FileLocator.toFileURL(new URL(path));
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- IProjectDescription desc = newProject.getWorkspace().newProjectDescription(
- newProject.getName());
- IFile file = null;
- try {
- if (!newProject.exists())
- newProject.create(desc, null);
- if (!newProject.isOpen()) {
- newProject.open(null);
- }
- newProject.setHidden(true);
- // currentTheme.
- IPath location = new Path(styleSheetURL.getPath());
- // IPath location = new Path(styleSheetURL.getPath());
- file = newProject.getFile(location.lastSegment());
- if (!file.exists())
- file.createLink(location, IResource.NONE, null);
- } catch (CoreException e) {
- e.printStackTrace();
- }
-
- IEditorInput input = new FileEditorInput(file);
-
- IWorkbenchPage wbPage = wbw.getActivePage();
- EditorReference reference = ((WorkbenchPage) wbPage).createEditorReferenceForPart(editor,
- input,
- "org.eclipse.e4.CSS", null); //$NON-NLS-1$
- IEclipseContext localContext = hostWin.getContext().createChild();
- localContext.set(IEditorInput.class, input);
- localContext.set(EditorReference.class, reference);
- // This is subtle; unless the element is hooked into the model it won't
- // fire events
- hostWin.getSharedElements().add(editor);
-
- // Render it
- IPresentationEngine renderer = hostWin.getContext().get(IPresentationEngine.class);
- Composite composite3 = new Composite(parent, SWT.BORDER);
- composite3.setLayout(new FillLayout());
- GridData data = new GridData(SWT.CENTER, SWT.CENTER, true, true, 2, 2);
- data.widthHint = 500;
- data.heightHint = 500;
- composite3.setLayoutData(data);
- renderer.createGui(editor, composite3, localContext);
- partService.activate(editor);
- cssEditor = editor.getContext().get(IEditorPart.class);
- }
-
- @Override
- public void setSelection(Object sel) {
- if (sel instanceof ITheme) {
- selection = (ITheme) sel;
- }
-
- }
-
- @Override
- public void performOK() {
- if (cssEditor.isDirty()) {
- cssEditor.doSave(new NullProgressMonitor());
- }
- }
-
-
-}
+package org.eclipse.e4.ui.preferences; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.ByteBuffer; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.UnmappableCharacterException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.filebuffers.IFileBufferStatusCodes; +import org.eclipse.core.internal.filebuffers.FileBuffersPlugin; +import org.eclipse.core.internal.filebuffers.NLSUtility; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import org.eclipse.e4.core.contexts.IEclipseContext; +import org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngine; +import org.eclipse.e4.ui.css.swt.theme.ITheme; +import org.eclipse.e4.ui.css.swt.theme.IThemeEngine; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.e4.ui.model.application.ui.basic.MWindow; +import org.eclipse.e4.ui.workbench.IPresentationEngine; +import org.eclipse.e4.ui.workbench.modeling.EPartService; +import org.eclipse.jface.text.IDocument; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.EditorReference; +import org.eclipse.ui.internal.WorkbenchPage; +import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor; +import org.eclipse.ui.internal.tweaklets.PreferencePageEnhancer; +import org.eclipse.ui.part.FileEditorInput; +import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.xtext.ui.editor.XtextEditor; + +public class CSSEditorPreferences extends PreferencePageEnhancer { + + ITheme selection; + XtextEditor cssEditor; + IThemeEngine engine; + + @SuppressWarnings("restriction") + @Override + public void createContents(Composite parent) { + IWorkbenchWindow wbw = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + MWindow hostWin = (MWindow) wbw.getService(MWindow.class); + EPartService partService = hostWin.getContext().get(EPartService.class); + MPart editor = partService.createPart(CompatibilityEditor.MODEL_ELEMENT_ID); + engine = hostWin.getContext().get(IThemeEngine.class); + + IFile file = updateInput(); + + IEditorInput input = new FileEditorInput(file); + + IWorkbenchPage wbPage = wbw.getActivePage(); + EditorReference reference = ((WorkbenchPage) wbPage).createEditorReferenceForPart(editor, + input, + "org.eclipse.e4.CSS", null); //$NON-NLS-1$ + IEclipseContext localContext = hostWin.getContext().createChild(); + localContext.set(IEditorInput.class, input); + localContext.set(EditorReference.class, reference); + // This is subtle; unless the element is hooked into the model it won't + // fire events + hostWin.getSharedElements().add(editor); + + // Render it + IPresentationEngine renderer = hostWin.getContext().get(IPresentationEngine.class); + Composite composite3 = new Composite(parent, SWT.BORDER); + composite3.setLayout(new FillLayout()); + GridData data = new GridData(SWT.CENTER, SWT.CENTER, true, true, 2, 2); + data.widthHint = 500; + data.heightHint = 500; + composite3.setLayoutData(data); + Object createdElement = renderer.createGui(editor, composite3, localContext); + partService.activate(editor); + IEditorPart tmpEditor = editor.getContext().get(IEditorPart.class); + if (tmpEditor instanceof XtextEditor) { + cssEditor = (XtextEditor) tmpEditor; + } + } + + @Override + public void setSelection(Object sel) { + if (sel instanceof ITheme) { + ITheme newTheme = (ITheme) sel; + ITheme oldSelection = selection; + selection = newTheme; + if (oldSelection != null && !newTheme.getId().equals(oldSelection.getId())) { + IFile file = updateInput(); + IEditorInput input = new FileEditorInput(file); + cssEditor.setInput(input); + } + } + + } + + @Override + public void performOK() { + if (cssEditor.isDirty()) { + // make a copy of file + // cssEditor.doSave(new NullProgressMonitor()); + IDocumentProvider docProvider = cssEditor.getDocumentProvider(); + + IEditorInput editorInput = cssEditor.getEditorInput(); + IDocument doc = docProvider.getDocument(editorInput); + String more = doc.get(); + IPath path = new Path( + System.getProperty("user.home") + System.getProperty("file.separator") + ".e4css" + System.getProperty("file.separator") + editorInput.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + + byte[] bytes = more.getBytes(); + FileOutputStream outputStream = null; + try { + outputStream = new FileOutputStream(path.toOSString()); + outputStream.write(bytes, 0, bytes.length); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } finally { + if (outputStream != null) + try { + outputStream.close(); + } catch (IOException e) { + } + } + + if (engine instanceof ThemeEngine) { + ArrayList<String> styleSheets = new ArrayList<String>(); + styleSheets.add(path.toOSString()); + ((ThemeEngine) engine).themeModified(selection, styleSheets ); + } + cssEditor.doRevertToSaved(); + } + } + + + IFile updateInput() { + + IProject newProject = ResourcesPlugin.getWorkspace().getRoot() + .getProject(".e4css"); //$NON-NLS-1$ + URL styleSheetURL = null; + + if (engine instanceof ThemeEngine) { + List<String> ss = ((ThemeEngine) engine).getStylesheets(selection); + if (ss.size() > 0) { + // For now just get the first element + String path = ss.get(0); + ((ThemeEngine) engine).getCSSEngine().getResourcesLocatorManager(); + try { + styleSheetURL = FileLocator.toFileURL(new URL(path)); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + IProjectDescription desc = newProject.getWorkspace() + .newProjectDescription(newProject.getName()); + IFile file = null; + try { + if (!newProject.exists()) + newProject.create(desc, null); + if (!newProject.isOpen()) { + newProject.open(null); + } + newProject.setHidden(true); + // currentTheme. + IPath location = new Path(styleSheetURL.getPath()); + // IPath location = new Path(styleSheetURL.getPath()); + file = newProject.getFile(location.lastSegment()); + if (!file.exists()) + file.createLink(location, IResource.NONE, null); + } catch (CoreException e) { + e.printStackTrace(); + } + return file; + + } + + @Override + public void performCancel() { + if (cssEditor.isDirty()) cssEditor.doRevertToSaved(); + } + + @Override + public void performDefaults() { + //reset + } + +} |