diff --git a/.gitignore b/.gitignore index 3dd7ed1..ac03cff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.bak *~ target +#GFMV generated +.*.html diff --git a/README.md b/README.md index da20b2e..a5b2419 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,15 @@ -# EditBox Eclipse plugin + +# ![](pm.eclipse.editbox/icons/editbox.png) EditBox Eclipse plugin [![Build Status](https://secure.travis-ci.org/Nodeclipse/EditBox.png)](http://travis-ci.org/Nodeclipse/EditBox) -or use `http://www.nodeclipse.org/updates/` +Use + +direct update site `http://nodeclipse.github.io/dev.updates/editbox-1.0.0/` EditBox is using background colors theme to highlight code blocks. @@ -25,12 +31,23 @@ UPDATE: In one day 2014-03-26 converted to git and mavenized; added RainbowDrops For example [add Blue Light theme](https://github.com/Nodeclipse/EditBox/commit/b7ceed8f1c391b691f39ee7f45b5613651ab91ca) -Latest released version is 0.60.0. +Hint: bump to next version with + + mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=1.1.0-SNAPSHOT - mvn -Dtycho.mode=maven org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=0.60.0-SNAPSHOT +### History + +- 0.50 +- 0.55 +- 0.60 +- 0.65 (2014-08) change icon; + Checkbox "Plugin enabled"; + combo to apply one of bundled themes to all categories + (this is done for case when switching to black themes and back) +- 0.70 (2015-8) refresh release; known issues: [#14](https://github.com/Nodeclipse/EditBox/issues/14) +- 1.0.0 (2018-04-02) fix for Oxygen by Jiří Engelthaler; + update tycho build to [1.1.0](https://wiki.eclipse.org/Tycho/Release_Notes/1.1) -While it is nice to play with colors, there are Nodeclipse core projects to do. -If there are updates here, they will be released together with [Nodeclipse train](http://www.nodeclipse.org/history). ## Themes @@ -58,13 +75,9 @@ in `BoxProviderRegistry.java` "Default", "Whitebox", "RainbowDrops", "OnClick", ![](pm.eclipse.editbox/docs/BlueLight.PNG) - [RainDropsLine][9] ![](pm.eclipse.editbox/docs/RainDropsLineOnSublimeEclipseColorTheme.png) -- [Java_PaleBlue](10) by Robin Martin +- [PaleBlue][10] by Robin Martin ![](pm.eclipse.editbox/docs/PaleBlueTheme.jpg) -Not yet released: - - `` - [2]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/Whitebox.eb [3]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/OnClick.eb [4]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/RainbowDrops.eb @@ -73,7 +86,9 @@ Not yet released: [7]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/BlueGradient22WithDarkBoldLeftBorder.eb [8]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/BlueLight.eb [9]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/RainbowDropsLine.eb - [10]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/Java_PaleBlue.eb + [10]: https://raw.githubusercontent.com/Nodeclipse/EditBox/master/pm.eclipse.editbox/src/PaleBlue.eb + +[Youtube video where EditBox is used, but not mentioned](https://www.youtube.com/watch?v=KX_tHp_KQkE) Hints: - Before modifying or importing a theme change name @@ -94,9 +109,23 @@ see `pm.eclipse.editbox\docs` for an example. ### Terms -Provider `BoxProviderImpl` is Category . -Catalog is list of Themes. -Theme `BoxSettingsImpl` is set of colors . +Looking at code and .prefs file + +``` +pm.eclipse.editbox.provider.java_Default=\#COMMENT\r\n\#Mon Jun 30 17\:24\:47 CST 2014\r\nHighlightOne\=false\r\nFillGradient\=false\r\nFillSelected\=true\r\nRoundBox\=true\r\nBorderColorType\=1\r\nName\=Default\r\nExpandBox\=false\r\nBorderDrawLine\=false\r\nFillOnMove\=true\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=acb3b7\r\nBorderColor\=c0c0c0\r\nFillKeyModifier\=Alt\r\nHighlightColorType\=3\r\nFillGradientColor\=dadcc2\r\nBuilder\=Java\r\nHighlightDrawLine\=false\r\nFillSelectedColor\=ffffff\r\nBorderLineStyle\=2\r\nColors\=ffffff-c5d0ac-d9e3b7-e8ecd9\r\nHighlightLineStyle\=0\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n +pm.eclipse.editbox.provider.java_RainbowDrops=\#COMMENT\r\n\#Wed Jul 09 17\:06\:50 CST 2014\r\nHighlightOne\=true\r\nFillGradient\=false\r\nFillSelected\=false\r\nRoundBox\=false\r\nBorderColorType\=0\r\nName\=RainbowDrops\r\nExpandBox\=false\r\nBorderDrawLine\=true\r\nFillOnMove\=false\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=00ff00\r\nBorderColor\=00bbbb\r\nFillKeyModifier\=Alt\r\nHighlightColorType\=0\r\nFillGradientColor\=null\r\nBuilder\=Java\r\nHighlightDrawLine\=true\r\nFillSelectedColor\=202020\r\nBorderLineStyle\=1\r\nColors\=202020-null\r\nHighlightLineStyle\=0\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n +pm.eclipse.editbox.provider.java_catalog=Default,Whitebox,OnClick,GreyGradient,Java_v_20,RainbowDropsLine,RainbowDropsLineFill,BlueToDeepBlue,OrangeToRed,BlueGradient22WithDarkBoldLeftBorder,BlueLight,Java_PaleBlue,RainbowDrops +pm.eclipse.editbox.provider.java_default=RainbowDrops +pm.eclipse.editbox.provider.java_enabled=true +pm.eclipse.editbox.provider.java_fileNames=*.java,*.class,*.gradle,*.groovy,*.scala +``` + + +Theme `BoxSettingsImpl` is set of colors . +Provider is theme applied to some category. Provider is holding current theme (Settings object). +Provider `BoxProviderImpl` is associated with category String (aka Provider name). +Catalog is list of Themes, that provider has. + ### Build @@ -109,16 +138,17 @@ Converted with `git svn clone -s http://svn.code.sf.net/p/editbox/code/ editbox3 https://sourceforge.net/p/editbox/code/HEAD/tree/plugin/ - +``` svn checkout svn://svn.code.sf.net/p/editbox/code/ editbox-code git svn clone -s svn://svn.code.sf.net/p/editbox/code/ - +``` https://sourceforge.net/p/editbox/code/HEAD/tree/ - +``` svn checkout http://svn.code.sf.net/p/editbox/code/ editbox-code git svn clone -s http://svn.code.sf.net/p/editbox/code/ git svn clone -s http://svn.code.sf.net/p/editbox/code/ editbox3 --trunk=plugin +``` OK diff --git a/pm.eclipse.editbox.feature/feature.xml b/pm.eclipse.editbox.feature/feature.xml index ee771b7..bd8c71e 100644 --- a/pm.eclipse.editbox.feature/feature.xml +++ b/pm.eclipse.editbox.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/pm.eclipse.editbox.feature/pom.xml b/pm.eclipse.editbox.feature/pom.xml index e7d4599..35dc2e1 100644 --- a/pm.eclipse.editbox.feature/pom.xml +++ b/pm.eclipse.editbox.feature/pom.xml @@ -7,7 +7,7 @@ pm.eclipse.editbox pm.eclipse.editbox.parent - 0.60.0-SNAPSHOT + 1.0.0-SNAPSHOT pm.eclipse.editbox.feature diff --git a/pm.eclipse.editbox.site/pom.xml b/pm.eclipse.editbox.site/pom.xml index c982c3f..1024d27 100644 --- a/pm.eclipse.editbox.site/pom.xml +++ b/pm.eclipse.editbox.site/pom.xml @@ -7,7 +7,7 @@ pm.eclipse.editbox pm.eclipse.editbox.parent - 0.60.0-SNAPSHOT + 1.0.0-SNAPSHOT pm.eclipse.editbox.site diff --git a/pm.eclipse.editbox/META-INF/MANIFEST.MF b/pm.eclipse.editbox/META-INF/MANIFEST.MF index 69a909e..1dd2a90 100644 --- a/pm.eclipse.editbox/META-INF/MANIFEST.MF +++ b/pm.eclipse.editbox/META-INF/MANIFEST.MF @@ -2,12 +2,9 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Editbox Plug-in Bundle-SymbolicName: pm.eclipse.editbox;singleton:=true -Bundle-Version: 0.60.0.qualifier +Bundle-Version: 1.0.0.qualifier Bundle-Activator: pm.eclipse.editbox.EditBox Bundle-Vendor: Nodeclipse Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.ui.editors, - org.eclipse.jface.text, - org.eclipse.jdt.ui + org.eclipse.core.runtime Eclipse-LazyStart: true diff --git a/pm.eclipse.editbox/docs/ModelClasses.png b/pm.eclipse.editbox/docs/ModelClasses.png new file mode 100644 index 0000000..20d658e Binary files /dev/null and b/pm.eclipse.editbox/docs/ModelClasses.png differ diff --git a/pm.eclipse.editbox/docs/ModelClasses.ucls b/pm.eclipse.editbox/docs/ModelClasses.ucls new file mode 100644 index 0000000..59d72f1 --- /dev/null +++ b/pm.eclipse.editbox/docs/ModelClasses.ucls @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm.eclipse.editbox/docs/Preferences.png b/pm.eclipse.editbox/docs/Preferences.png new file mode 100644 index 0000000..898a6f9 Binary files /dev/null and b/pm.eclipse.editbox/docs/Preferences.png differ diff --git a/pm.eclipse.editbox/docs/Preferences.ucls b/pm.eclipse.editbox/docs/Preferences.ucls new file mode 100644 index 0000000..87233d9 --- /dev/null +++ b/pm.eclipse.editbox/docs/Preferences.ucls @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pm.eclipse.editbox/iconbank/editbox-yellow.gif b/pm.eclipse.editbox/iconbank/editbox-yellow.gif new file mode 100644 index 0000000..a008633 Binary files /dev/null and b/pm.eclipse.editbox/iconbank/editbox-yellow.gif differ diff --git a/pm.eclipse.editbox/iconbank/editbox.gif b/pm.eclipse.editbox/iconbank/editbox.gif new file mode 100644 index 0000000..a008633 Binary files /dev/null and b/pm.eclipse.editbox/iconbank/editbox.gif differ diff --git a/pm.eclipse.editbox/iconbank/editbox_cyan.png b/pm.eclipse.editbox/iconbank/editbox_cyan.png new file mode 100644 index 0000000..8e0189b Binary files /dev/null and b/pm.eclipse.editbox/iconbank/editbox_cyan.png differ diff --git a/pm.eclipse.editbox/icons/editbox.gif b/pm.eclipse.editbox/icons/editbox.gif deleted file mode 100644 index 3b79d76..0000000 Binary files a/pm.eclipse.editbox/icons/editbox.gif and /dev/null differ diff --git a/pm.eclipse.editbox/icons/editbox.png b/pm.eclipse.editbox/icons/editbox.png new file mode 100644 index 0000000..8e0189b Binary files /dev/null and b/pm.eclipse.editbox/icons/editbox.png differ diff --git a/pm.eclipse.editbox/plugin.xml b/pm.eclipse.editbox/plugin.xml index 1b73b03..a641c61 100644 --- a/pm.eclipse.editbox/plugin.xml +++ b/pm.eclipse.editbox/plugin.xml @@ -41,7 +41,7 @@ label="EditBox" toolbarPath="EditBox" style="toggle" - icon="icons/editbox.gif" + icon="icons/editbox.png" tooltip="Editbox on/off" class="pm.eclipse.editbox.actions.EnableEditBox" definitionId="pm.eclipse.editbox.actions.EnableEditBoxCmd" > diff --git a/pm.eclipse.editbox/pom.xml b/pm.eclipse.editbox/pom.xml index c0404ed..8cd2e9c 100644 --- a/pm.eclipse.editbox/pom.xml +++ b/pm.eclipse.editbox/pom.xml @@ -7,7 +7,7 @@ pm.eclipse.editbox pm.eclipse.editbox.parent - 0.60.0-SNAPSHOT + 1.0.0-SNAPSHOT pm.eclipse.editbox diff --git a/pm.eclipse.editbox/src/Java_PaleBlue.eb b/pm.eclipse.editbox/src/PaleBlue.eb similarity index 97% rename from pm.eclipse.editbox/src/Java_PaleBlue.eb rename to pm.eclipse.editbox/src/PaleBlue.eb index 0c9a432..c4aba15 100644 --- a/pm.eclipse.editbox/src/Java_PaleBlue.eb +++ b/pm.eclipse.editbox/src/PaleBlue.eb @@ -5,7 +5,7 @@ FillGradient=true FillSelected=true RoundBox=false BorderColorType=0 -Name=VeryLightBlue +Name=PaleBlue ExpandBox=false BorderDrawLine=false FillOnMove=false diff --git a/pm.eclipse.editbox/src/RainbowDropsLine.eb b/pm.eclipse.editbox/src/RainbowDropsLine.eb index 3d5f810..9abb34d 100644 --- a/pm.eclipse.editbox/src/RainbowDropsLine.eb +++ b/pm.eclipse.editbox/src/RainbowDropsLine.eb @@ -5,7 +5,7 @@ FillGradient=false FillSelected=false RoundBox=false BorderColorType=0 -Name=RainbowDrops +Name=RainbowDropsLine ExpandBox=false BorderDrawLine=true FillOnMove=false diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/EditBox.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/EditBox.java index c48c670..8c26240 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/EditBox.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/EditBox.java @@ -2,7 +2,15 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.CoolBarManager; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.ToolBarContributionItem; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.window.ApplicationWindow; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -10,9 +18,9 @@ public class EditBox extends AbstractUIPlugin { - private static final String ENABLED = "ENABLED"; - public static final String PLUGIN_ID = "pm.eclipse.editbox"; + public static final String PREF_ENABLED = "enabled"; + public static final String PREF_DEFAULT_THEME = "default_theme"; private static EditBox plugin; @@ -43,15 +51,49 @@ public BoxProviderRegistry getProviderRegistry(){ return registry == null ? (registry = new BoxProviderRegistry()) : registry; } + /** check if enabled from PreferenceStore */ public boolean isEnabled() { - if (getPreferenceStore().contains(ENABLED)) - return getPreferenceStore().getBoolean(ENABLED); - return false; + //if (getPreferenceStore().contains(ENABLED)) + return getPreferenceStore().getBoolean(PREF_ENABLED); + //return false; } public void setEnabled(boolean flag){ - getPreferenceStore().setValue(ENABLED, flag); + getPreferenceStore().setValue(PREF_ENABLED, flag); + } + + //+ { + //TODO move to utils class? + /** called from EditboxPreferencePage + * TODO still can't toggle on main window from Preferences + * */ + public static void toggleToolBarItemInAllWindows(boolean enabled) { + IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); + for (IWorkbenchWindow window: windows){ + toggleToolBarItem(window, enabled); + } } + /** called from EditBoxStartup */ + public static void toggleToolBarItem(IWorkbenchWindow window, boolean enabled) { + // any better way to toggle toolbar button in 3.2? + if (window instanceof ApplicationWindow) { + CoolBarManager coolBarManager = ((ApplicationWindow) window).getCoolBarManager(); + if (coolBarManager != null) { + IContributionItem item = coolBarManager.find("pm.eclipse.editbox.ActionSetId"); + if (item instanceof ToolBarContributionItem) { + IToolBarManager tbMgr2 = ((ToolBarContributionItem) item).getToolBarManager(); + if (tbMgr2 != null) { + IContributionItem item2 = tbMgr2.find("pm.eclipse.editbox.EnableEditboxActionId"); + if (item2 instanceof ActionContributionItem) { + ((ActionContributionItem) item2).getAction().setChecked(enabled); + } + } + } + } + } + } + //} + public static void logError(Object source, String msg, Throwable error) { String src = ""; diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettings.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettings.java index 60b811d..9a7b6b3 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettings.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettings.java @@ -10,11 +10,14 @@ +/** + * Theme settings + */ public interface IBoxSettings { enum PropertiesKeys { ALL,Enabled, Name, BorderColor, HighlightColor, BorderWidth, HighlightWidth, RoundBox, HighlightOne, FillSelected, FillSelectedColor, Builder, Colors, Color, HighlightDrawLine, BorderDrawLine, FillGradient, FillGradientColor, FillOnMove, CirculateLevelColors, FillKeyModifier, FileNames, HighlightColorType, BorderColorType, - HighlightLineStyle,BorderLineStyle,NoBackground,ExpandBox,Alpha, + HighlightLineStyle, BorderLineStyle, NoBackground, ExpandBox, Alpha, }; void addPropertyChangeListener(IPropertyChangeListener listener); diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettingsStore.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettingsStore.java index 14c83fc..00e97fe 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettingsStore.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/IBoxSettingsStore.java @@ -3,6 +3,10 @@ import java.util.Set; +/** + * How this provider is saved into several lines of Eclipse preferences + * see BoxSettingsStoreImpl + */ public interface IBoxSettingsStore { void setProviderId(String id); diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EditBoxStartup.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EditBoxStartup.java index 9a90a89..e346963 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EditBoxStartup.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EditBoxStartup.java @@ -19,6 +19,7 @@ public class EditBoxStartup implements IStartup { + @Override public void earlyStartup() { if (!EditBox.getDefault().isEnabled()) return; @@ -37,7 +38,8 @@ public void run() { if (handlerService != null) try { handlerService.executeCommand(new ParameterizedCommand(command, null), null); - toggle(window); + EditBox.toggleToolBarItem(window, true); + //EditBox.toggleToolBarItemInAllWindows(enabled); //no need as there is to be only one window } catch (Exception e) { EditBox.logError(this, "Failed to enable EditBox at startup", e); } @@ -47,23 +49,4 @@ public void run() { }); } - protected void toggle(IWorkbenchWindow window) { - // any better way to toggle toolbar button in 3.2? - if (window instanceof ApplicationWindow) { - CoolBarManager coolBarManager = ((ApplicationWindow) window).getCoolBarManager(); - if (coolBarManager != null) { - IContributionItem item = coolBarManager.find("pm.eclipse.editbox.ActionSetId"); - if (item instanceof ToolBarContributionItem) { - IToolBarManager tbMgr2 = ((ToolBarContributionItem) item).getToolBarManager(); - if (tbMgr2 != null) { - IContributionItem item2 = tbMgr2.find("pm.eclipse.editbox.EnableEditboxActionId"); - if (item2 instanceof ActionContributionItem) { - ((ActionContributionItem) item2).getAction().setChecked(true); - } - } - } - } - } - } - } diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EnableEditBox.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EnableEditBox.java index 33a6944..0b7c0e0 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EnableEditBox.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/actions/EnableEditBox.java @@ -18,6 +18,7 @@ import pm.eclipse.editbox.impl.BoxProviderRegistry; //keep it stateless since called from commands +/** this is actually state toggler as both execute() and run() apply opposite state */ public class EnableEditBox extends AbstractHandler implements IWorkbenchWindowActionDelegate { public static final String COMMAND_ID = "pm.eclipse.editbox.actions.EnableEditBoxCmd"; diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderImpl.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderImpl.java index 12b75fc..bf8d8e2 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderImpl.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderImpl.java @@ -17,29 +17,32 @@ import pm.eclipse.editbox.IBoxProvider; import pm.eclipse.editbox.IBoxSettings; +/** + * Provider + */ public class BoxProviderImpl implements IBoxProvider { protected String id; protected String name; - protected IBoxSettings editorsSettings; - protected BoxSettingsStoreImpl settingsStore; + protected IBoxSettings theme; + protected BoxSettingsStoreImpl providerStore; protected Map builders; protected Collection defaultSettingsCatalog; private ArrayList matchers; public BoxSettingsStoreImpl getSettingsStore() { - if (settingsStore == null) { - settingsStore = createSettingsStore(); - settingsStore.setProviderId(id); + if (providerStore == null) { + providerStore = createSettingsStore(); + providerStore.setProviderId(id); } - return settingsStore; + return providerStore; } public IBoxSettings getEditorsBoxSettings() { - if (editorsSettings == null) { - editorsSettings = createSettings0(); - getSettingsStore().loadDefaults(editorsSettings); - editorsSettings.addPropertyChangeListener(new IPropertyChangeListener() { + if (theme == null) { + theme = createEmptySettings(); + getSettingsStore().loadDefaults(theme); + theme.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { String p = event.getProperty(); if (p!=null && (p.equals(IBoxSettings.PropertiesKeys.FileNames.name()) || @@ -47,7 +50,7 @@ public void propertyChange(PropertyChangeEvent event) { matchers = null; }}); } - return editorsSettings; + return theme; } public IBoxDecorator decorate(IWorkbenchPart editorPart) { @@ -122,9 +125,9 @@ public void setName(String newName) { protected BoxSettingsStoreImpl createSettingsStore() { - BoxSettingsStoreImpl result = new BoxSettingsStoreImpl(); - result.setDefaultSettingsCatalog(defaultSettingsCatalog); - return result; + BoxSettingsStoreImpl pstore = new BoxSettingsStoreImpl(); + pstore.setDefaultSettingsCatalog(defaultSettingsCatalog); + return pstore; } public void setDefaultSettingsCatalog(Collection cat){ @@ -132,19 +135,19 @@ public void setDefaultSettingsCatalog(Collection cat){ } public IBoxSettings createSettings() { - BoxSettingsImpl result = createSettings0(); - result.copyFrom(getEditorsBoxSettings()); - return result; + BoxSettingsImpl theme = createEmptySettings(); + theme.copyFrom(getEditorsBoxSettings()); + return theme; } - protected BoxSettingsImpl createSettings0() { + protected BoxSettingsImpl createEmptySettings() { return new BoxSettingsImpl(); } public IBoxDecorator createDecorator() { - BoxDecoratorImpl result = new BoxDecoratorImpl(); - result.setProvider(this); - return result; + BoxDecoratorImpl decorator = new BoxDecoratorImpl(); + decorator.setProvider(this); + return decorator; } public Collection getBuilders() { diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderRegistry.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderRegistry.java index b359034..d49d092 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderRegistry.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxProviderRegistry.java @@ -16,25 +16,46 @@ import pm.eclipse.editbox.EditBox; import pm.eclipse.editbox.IBoxDecorator; import pm.eclipse.editbox.IBoxProvider; +import pm.eclipse.editbox.IBoxSettings; /** - * Default settings + * Registry keeps Providers list and initialize them or restores from preferences * @author Piotr Metel * @author Paul Verest : added "RainbowDrops" and ALL_THEMES_LIST to be used in every category */ public class BoxProviderRegistry { - //used to get Preferences, if changed, user preferences are gone after update + //used to get Preferences, if this misspelled value is changed, user preferences are gone after update private static final String PROVIDERS = "proivders"; // always added. Is it useless? private static final String PROVIDER_ID_ = "pm.eclipse.editbox.provider."; - //+ - private static final List ALL_THEMES_LIST = Arrays.asList( - "Default", "Whitebox", "OnClick", "GreyGradient", "Java_v_20", - "RainbowDrops", "RainbowDropsLine", "RainbowDropsLineFill", - "BlueToDeepBlue", "OrangeToRed", "BlueGradient22WithDarkBoldLeftBorder", "BlueLight", "Java_PaleBlue" - ); - + //+ { + public static final String[] ALL_THEMES_ARRAY = {"Default", "Whitebox", "OnClick", "GreyGradient", "Java_v_20", + "RainbowDrops", "RainbowDropsLine", "RainbowDropsLineFill", + "BlueToDeepBlue", "OrangeToRed", "BlueGradient22WithDarkBoldLeftBorder", "BlueLight", "PaleBlue"}; + private static final List ALL_THEMES_LIST = Arrays.asList(ALL_THEMES_ARRAY); + public static final String DEFAULT_THEME = "PaleBlue"; + + /** return index within ALL_THEMES_ARRAY or -1 if not found */ + public static int getThemeIndex(String preferedThemeName) { + for (int i = 0; i providers; protected Map decorators; protected Map partListeners; @@ -46,31 +67,16 @@ public Collection getBoxProviders() { } if (providers == null){ providers = defaultProviders(); - }else{ - // comparing providers from Preferences with defaultProviders - // can be here - // proivders=java,python,markup,text,js - // createProvider(String name) - // } return providers; } - //{ like in BoxSettingsStoreImpl - protected IPreferenceStore store; - protected IPreferenceStore getStore(){ - if (store == null) - store = EditBox.getDefault().getPreferenceStore(); - return store; - } - //} - // Preferences have string like // proivders=java,python,markup,text,js // calls createProvider(name) protected Collection loadProvidersFromPreferences() { List result = null; - String pSetting = getStore().getString(PROVIDERS); + String pSetting = store.getString(PROVIDERS); if (pSetting != null && pSetting.length() > 0) { String[] split = pSetting.split(","); if (split.length > 0) @@ -95,7 +101,7 @@ public void storeProviders(){ if (sb.length()!=0) sb.append(","); sb.append(p.getName()); } - getStore().setValue(PROVIDERS,sb.toString()); + store.setValue(PROVIDERS,sb.toString()); } } @@ -104,7 +110,7 @@ protected Collection defaultProviders() { List result = new ArrayList(); // order important (see BoxProviderImpl.supports()) // refactored to use this more generic method - result.add(createProviderForNameAndExtentions("c++", Arrays.asList("*.c", "*.cpp", "*.h", "*.hpp") ) ); + result.add(createProviderForNameAndExtentions("c++", Arrays.asList("*.c", "*.cpp", "*.h", "*.hpp", "*.go") ) ); result.add(createProviderForNameAndExtentions("java", Arrays.asList("*.java", "*.class", "*.gradle", "*.groovy", "*.scala") ) ); result.add(createProviderForNameAndExtentions("js", Arrays.asList("*.js", "*.jjs", "*.jshintrc", "*.mjs", "*.njs", "*.pjs", "*.vjs", "*.ts", "*.coffee", "*.dart") ) ); result.add(createProviderForNameAndExtentions("lua", Arrays.asList("*.lua") ) ); @@ -114,7 +120,7 @@ protected Collection defaultProviders() { result.add(createProviderForNameAndExtentions("ruby", Arrays.asList("*.rb", "*.ruby") ) ); result.add(createProviderForNameAndExtentions("text", Arrays.asList("*.txt", "*.") ) ); result.add(createProviderForNameAndExtentions("xml", Arrays.asList("*.xml", "*.launch", "*.project", "*.classpath") ) ); - result.add(createProviderForNameAndExtentions("exclude", Arrays.asList("*.ascii") ) ); + result.add(createProviderForNameAndExtentionsDisabled("exclude", Arrays.asList("*.ascii") ) ); result.add(createProviderForNameAndExtentions("others", Arrays.asList("*.*") ) ); // "*.*" makes default to every file return result; } @@ -140,6 +146,13 @@ protected BoxProviderImpl createProviderForNameAndExtentions(String name, List extentions) { + BoxProviderImpl provider = createProviderForNameAndExtentions(name, extentions); + // no effect :-( + // IBoxSettings theme = provider.getEditorsBoxSettings(); + // theme.setEnabled(false); //this fires PropertyChangeListener + return provider; + } protected Map defaultBuilders() { Map result = new HashMap(); @@ -220,4 +233,5 @@ public void removePartListener(IPartService partService) { if (oldListener != null) partService.removePartListener(oldListener); } + } diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsImpl.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsImpl.java index e198ef6..5250e41 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsImpl.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsImpl.java @@ -18,6 +18,10 @@ import pm.eclipse.editbox.EditBox; import pm.eclipse.editbox.IBoxSettings; +/** + * Utils to handle theme, including serialization + * + */ public class BoxSettingsImpl implements IBoxSettings { private static final BoxSettingsImpl DEFAULT = new BoxSettingsImpl(){{ @@ -35,9 +39,10 @@ public class BoxSettingsImpl implements IBoxSettings { fillKeyModifier = "Alt"; }}; + // this is actually domain model class Theme { //TODO extract into class ? protected boolean enabled; protected String name; - protected String text; + protected String text; //? protected Color borderColor; protected Color highlightColor; @@ -49,7 +54,6 @@ public class BoxSettingsImpl implements IBoxSettings { protected boolean roundBox; protected String builder; protected Color[] boxColors; - protected ArrayList listeners; protected boolean highlightDrawLine; protected Color fillGradientColor; protected boolean fillGradient; @@ -65,12 +69,13 @@ public class BoxSettingsImpl implements IBoxSettings { protected boolean noBackground; protected boolean expandBox; protected int alpha; + //} + protected ArrayList listeners; private transient Color[] borderColors; private transient Color[] highlightColors; - public void copyFrom(IBoxSettings other) { BoxSettingsImpl o = (BoxSettingsImpl) other; name = o.getName(); @@ -134,38 +139,6 @@ protected Color setColorCopy(Color old, Color newColor) { return newColor == null ? null : new Color(null, newColor.getRGB()); } - public String export() { - return new StringExternalization().export(this); - } - - public void load(String string) { - StringExternalization ext = new StringExternalization(); - boolean error = false; - if (string != null) - try { - ext.load(string, this); - } catch (Exception e) { - EditBox.logError(this, "Cannot load EditBox settings from string: "+string, e); - error = true; - } - if (error || string == null) { - this.copyFrom(DEFAULT); - } - notifyChange(PropertiesKeys.ALL.name(), null, null); - } - - public void export(OutputStream stream) throws Exception{ - new StringExternalization().export(stream,this); - } - - public void load(InputStream stream) throws Exception{ - if (stream==null) - load((String)null); - else - new StringExternalization().load(stream,this); - notifyChange(PropertiesKeys.ALL.name(), null, null); - } - public boolean getEnabled() { return enabled; } @@ -527,34 +500,86 @@ public int getFillKeyModifierSWTInt(){ return SWT.SHIFT; return 0; } + + //save/restore related { + private StringExternalization ext = new StringExternalization(); + + public String export() { + return ext.exportToString(this); + } + public void export(OutputStream stream) throws Exception{ + ext.export(stream,this); + } + public void load(String string) { + //StringExternalization ext = new StringExternalization(); + boolean error = false; + if (string != null){ + try { + ext.loadFromString(string, this); + } catch (Exception e) { + EditBox.logError(this, "Cannot load EditBox settings from string: "+string, e); + error = true; + } + } + if (error || string == null) { + this.copyFrom(DEFAULT); + } + notifyChange(PropertiesKeys.ALL.name(), null, null); + } + public void load(InputStream stream) throws Exception{ + if (stream==null) + load((String)null); + else + ext.loadFromStream(stream,this); + notifyChange(PropertiesKeys.ALL.name(), null, null); + } + + // could have all methods static, but it just has too many methods to change + /** + * using Properties store and load methods + */ class StringExternalization { private static final String COMMENT = "Editbox Eclipse Plugin Settings"; - public String export(BoxSettingsImpl b) { + public void export(OutputStream stream, BoxSettingsImpl b) throws Exception { Properties p = toProperies(b); - return propertiesToString(p); + p.store(stream, COMMENT); } - - public void load(InputStream stream, BoxSettingsImpl b) throws Exception { + public String exportToString(BoxSettingsImpl b) { + Properties p = toProperies(b); +// return exportPropertiesToString(p); +// } +// private String exportPropertiesToString(Properties p) { + try { + ByteArrayOutputStream bo = new ByteArrayOutputStream(); + p.store(bo, "COMMENT"); + return bo.toString(); + } catch (IOException e) { + EditBox.logError(this, "Cannot convert propeties to sring", e); + } + return ""; + } + // private Properties loadProperties(String s) throws IOException { + // Properties p = new Properties(); + // p.load(new StringBufferInputStream(s)); + // return p; + // } + public void loadFromString(String s, BoxSettingsImpl b) throws Exception { + //Properties p = loadProperties(s); Properties p = new Properties(); - p.load(stream); - load(p,b); + p.load(new StringBufferInputStream(s)); + fromProperties(p,b); } - - public void export(OutputStream stream, BoxSettingsImpl b) throws Exception { - Properties p = toProperies(b); - p.store(stream, COMMENT); - + public void loadFromStream(InputStream stream, BoxSettingsImpl b) throws Exception { + Properties p = new Properties(); + p.load(stream); + fromProperties(p,b); } - public void load(String s, BoxSettingsImpl b) throws Exception { - Properties p = loadProperties(s); - load(p,b); - } - private void load(Properties p, BoxSettingsImpl b) { + private void fromProperties(Properties p, BoxSettingsImpl b) { b.name = parseString(p.get(PropertiesKeys.Name.name())); b.borderColor = parseColor(p.get(PropertiesKeys.BorderColor.name())); b.highlightColor = parseColor(p.get(PropertiesKeys.HighlightColor.name())); @@ -612,23 +637,6 @@ private Properties toProperies(BoxSettingsImpl b) { return p; } - private Properties loadProperties(String s) throws IOException { - Properties p = new Properties(); - p.load(new StringBufferInputStream(s)); - return p; - } - - private String propertiesToString(Properties p) { - try { - ByteArrayOutputStream bo = new ByteArrayOutputStream(); - p.store(bo, "COMMENT"); - return bo.toString(); - } catch (IOException e) { - EditBox.logError(this, "Cannot convert propeties to sring", e); - } - return ""; - } - private Color[] parseColorsArray(Object o) { if (o == null || o.equals("null")) @@ -711,7 +719,9 @@ private String toS(String s) { return s == null ? "null" : s; } } - + //} + + //{ public void addPropertyChangeListener(IPropertyChangeListener listener) { if (listeners == null) listeners = new ArrayList(); @@ -729,6 +739,7 @@ protected void notifyChange(String propertyName, Object oldValue, Object newValu listener.propertyChange(e); } } + //} public void setBorderLineStyle(int selectionIndex) { this.borderLineStyle = selectionIndex; diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsStoreImpl.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsStoreImpl.java index aa0a8d7..2ee3967 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsStoreImpl.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/impl/BoxSettingsStoreImpl.java @@ -14,71 +14,97 @@ import pm.eclipse.editbox.IBoxSettingsStore; +/** ProviderStore + * Saving to pm.eclipse.editbox.prefs just ONE provider: + * gives mapping to serialize to Eclipse IPreferenceStore +
+pm.eclipse.editbox.provider.java_Default=\#COMMENT\r\n\#Mon Jun 30 17\:24\:47 CST 2014\r\nHighlightOne\=false\r\nFillGradient\=false\r\nFillSelected\=true\r\nRoundBox\=true\r\nBorderColorType\=1\r\nName\=Default\r\nExpandBox\=false\r\nBorderDrawLine\=false\r\nFillOnMove\=true\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=acb3b7\r\nBorderColor\=c0c0c0\r\nFillKeyModifier\=Alt\r\nHighlightColorType\=3\r\nFillGradientColor\=dadcc2\r\nBuilder\=Java\r\nHighlightDrawLine\=false\r\nFillSelectedColor\=ffffff\r\nBorderLineStyle\=2\r\nColors\=ffffff-c5d0ac-d9e3b7-e8ecd9\r\nHighlightLineStyle\=0\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n
+pm.eclipse.editbox.provider.java_RainbowDrops=\#COMMENT\r\n\#Wed Jul 09 17\:06\:50 CST 2014\r\nHighlightOne\=true\r\nFillGradient\=false\r\nFillSelected\=false\r\nRoundBox\=false\r\nBorderColorType\=0\r\nName\=RainbowDrops\r\nExpandBox\=false\r\nBorderDrawLine\=true\r\nFillOnMove\=false\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=00ff00\r\nBorderColor\=00bbbb\r\nFillKeyModifier\=Alt\r\nHighlightColorType\=0\r\nFillGradientColor\=null\r\nBuilder\=Java\r\nHighlightDrawLine\=true\r\nFillSelectedColor\=202020\r\nBorderLineStyle\=1\r\nColors\=202020-null\r\nHighlightLineStyle\=0\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n
+pm.eclipse.editbox.provider.java_catalog=Default,Whitebox,OnClick,GreyGradient,Java_v_20,RainbowDropsLine,RainbowDropsLineFill,BlueToDeepBlue,OrangeToRed,BlueGradient22WithDarkBoldLeftBorder,BlueLight,Java_PaleBlue,RainbowDrops
+pm.eclipse.editbox.provider.java_default=RainbowDrops
+pm.eclipse.editbox.provider.java_enabled=true
+pm.eclipse.editbox.provider.java_fileNames=*.java,*.class,*.gradle,*.groovy,*.scala
+pm.eclipse.editbox.provider.js_Default=\#COMMENT\r\n\#Fri Jul 04 11\:28\:13 CST 2014\r\nHighlightOne\=true\r\nFillGradient\=false\r\nFillSelected\=true\r\nRoundBox\=true\r\nBorderColorType\=0\r\nName\=Default\r\nExpandBox\=false\r\nBorderDrawLine\=false\r\nFillOnMove\=false\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=000000\r\nBorderColor\=00bbbb\r\nFillKeyModifier\=Alt\r\nHighlightColorType\=0\r\nFillGradientColor\=null\r\nBuilder\=Text\r\nHighlightDrawLine\=false\r\nFillSelectedColor\=ffffc4\r\nBorderLineStyle\=0\r\nColors\=null-d0dd9b-cdd8b9-e9f58b\r\nHighlightLineStyle\=0\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n
+pm.eclipse.editbox.provider.js_RainbowDropsLineFill=\#COMMENT\r\n\#Wed Jul 09 17\:06\:50 CST 2014\r\nHighlightOne\=true\r\nFillGradient\=false\r\nFillSelected\=true\r\nRoundBox\=false\r\nBorderColorType\=0\r\nName\=RainbowDropsLineFill\r\nExpandBox\=false\r\nBorderDrawLine\=true\r\nFillOnMove\=true\r\nAlpha\=0\r\nHighlightWidth\=1\r\nBorderWidth\=1\r\nHighlightColor\=00ff00\r\nBorderColor\=00bbbb\r\nFillKeyModifier\=\r\nHighlightColorType\=0\r\nFillGradientColor\=null\r\nBuilder\=Java\r\nHighlightDrawLine\=true\r\nFillSelectedColor\=000080\r\nBorderLineStyle\=1\r\nColors\=202020-null\r\nHighlightLineStyle\=1\r\nNoBackground\=false\r\nCirculateLevelColors\=false\r\n
+pm.eclipse.editbox.provider.js_default=RainbowDropsLineFill
+pm.eclipse.editbox.provider.js_enabled=true
+pm.eclipse.editbox.provider.js_fileNames=*.js,*.jjs,*.jshintrc,*.mjs,*.njs,*.pjs,*.vjs,*.ts,*.coffee,*.dart
+
+ * where java or js is providerId + * keys starting with Capital are actually themes names + */ public class BoxSettingsStoreImpl implements IBoxSettingsStore { private static final String FILE_NAMES = "fileNames"; private static final String TXT_POSTFIX = "$txt"; - private static final String DEFAULT = "default"; + private static final String DEFAULT = "default"; //what theme to use as default private static final String ENABLED = "enabled"; + private static final String CATALOG = "catalog"; protected String providerId; - protected IPreferenceStore store; + protected IPreferenceStore store = EditBox.getDefault().getPreferenceStore(); private Set catalog; private Collection defaultCatalog; - protected IPreferenceStore getStore(){ - if (store == null) - store = EditBox.getDefault().getPreferenceStore(); - return store; - } +// protected IPreferenceStore store{ +// if (store == null) +// store = EditBox.getDefault().getPreferenceStore(); +// return store; +// } - protected String key(String postfix){ + protected String providerKey(String postfix){ return providerId+"_"+postfix; } + @Override public void setProviderId(String id) { this.providerId = id; } + @Override public void loadDefaults(IBoxSettings editorsSettings) { - String defaultName = getStore().getString(key(DEFAULT)); - if (isEmpty(defaultName)) defaultName = providerId; - load(defaultName,editorsSettings); - } - - public void load(String name, IBoxSettings editorsSettings) { - String value = getStore().getString(key(name)); - if (!isEmpty(value)) - editorsSettings.load(value); + String defaultThemeName = store.getString(providerKey(DEFAULT)); + if (isEmpty(defaultThemeName)){ + defaultThemeName = providerId; + } + load(defaultThemeName, editorsSettings); + } + + @Override + public void load(String themeName, IBoxSettings editorsSettings) { + String themeInsideString = store.getString(providerKey(themeName)); + if (!isEmpty(themeInsideString)) + editorsSettings.load(themeInsideString); else try { - editorsSettings.load(getClass().getResourceAsStream("/"+name + ".eb")); + editorsSettings.load(getClass().getResourceAsStream("/"+themeName + ".eb")); } catch (Exception e) { - EditBox.logError(this, "Error loading settings: "+name, e); + EditBox.logError(this, "Error loading settings: "+themeName, e); } - editorsSettings.setEnabled(getIsEnabled()); + editorsSettings.setEnabled(getIsEnabled()); //XXX smell: is Enabled for Provider, not theme! editorsSettings.setFileNames(getFileNames()); } - protected boolean isEmpty(String s) { + protected static boolean isEmpty(String s) { return s == null || s.length() == 0; } protected boolean getIsEnabled() { - String key = key(ENABLED); - if (getStore().contains(key)) - return getStore().getBoolean(key); + String key = providerKey(ENABLED); + if (store.contains(key)) + return store.getBoolean(key); return true; } + @Override public void saveDefaults(IBoxSettings settings) { - getStore().setValue(key(ENABLED), settings.getEnabled()?"true":"false"); - getStore().setValue(key(DEFAULT),settings.getName()); + store.setValue(providerKey(ENABLED), settings.getEnabled()?"true":"false"); + store.setValue(providerKey(DEFAULT), settings.getName()); store(settings); } public void store(IBoxSettings settings) { String name = settings.getName(); - getStore().setValue(key(name),settings.export()); + store.setValue(providerKey(name),settings.export()); setFileNames(settings.getFileNames()); addToCatalog(name); EditBox.getDefault().savePluginPreferences(); @@ -98,13 +124,14 @@ private void storeCatalog(Set cat) { if (sb.length()>0) sb.append(","); sb.append(c); } - getStore().setValue(key("catalog"), sb.toString()); + store.setValue(providerKey(CATALOG), sb.toString()); } + @Override public Set getCatalog() { if (catalog == null){ catalog = new LinkedHashSet(); - String cstr = getStore().getString(key("catalog")); + String cstr = store.getString(providerKey(CATALOG)); if (!isEmpty(cstr)) for (String s : cstr.split(",")) catalog.add(s); @@ -119,11 +146,12 @@ public void setDefaultSettingsCatalog(Collection cat){ defaultCatalog = cat; } + @Override public void remove(String name) { if (getCatalog().remove(name)) storeCatalog(getCatalog()); - getStore().setValue(key(name), ""); - getStore().setValue(key(name+TXT_POSTFIX), ""); + store.setValue(providerKey(name), ""); + store.setValue(providerKey(name+TXT_POSTFIX), ""); EditBox.getDefault().savePluginPreferences(); } @@ -138,30 +166,26 @@ protected void setFileNames(Collection fileNames) { first = false; } } - getStore().setValue(key(FILE_NAMES), sb.toString()); + store.setValue(providerKey(FILE_NAMES), sb.toString()); } /* * @return null if settings never stored before */ protected Collection getFileNames() { - String key = key(FILE_NAMES); - - if (!getStore().contains(key)) + String fileNames = store.getString(providerKey(FILE_NAMES)); + if (fileNames == null || fileNames.equals("")) { return null; - - String value = getStore().getString(key); - List l = new ArrayList(); - if (value != null) { - StringTokenizer st = new StringTokenizer(value, ","); - while (st.hasMoreTokens()) { - String t = st.nextToken().trim(); - if (t.length() > 0) - l.add(t); - } + } + List list = new ArrayList(); + StringTokenizer st = new StringTokenizer(fileNames, ","); + while (st.hasMoreTokens()) { + String t = st.nextToken().trim(); + if (t.length() > 0) + list.add(t); } - return l; + return list; } } diff --git a/pm.eclipse.editbox/src/pm/eclipse/editbox/pref/BoxSettingsTab.java b/pm.eclipse.editbox/src/pm/eclipse/editbox/pref/BoxSettingsTab.java index 080044f..4670fdc 100644 --- a/pm.eclipse.editbox/src/pm/eclipse/editbox/pref/BoxSettingsTab.java +++ b/pm.eclipse.editbox/src/pm/eclipse/editbox/pref/BoxSettingsTab.java @@ -42,9 +42,9 @@ public class BoxSettingsTab { protected IWorkbench workbench; - protected IBoxProvider provider; - protected IBoxSettingsStore store; - protected IBoxSettings settings; + protected IBoxProvider provider; // stored theme settings ? + protected IBoxSettingsStore providerStore; + protected IBoxSettings theme; // current theme settings ? protected IBoxDecorator decorator; private Button enabled; @@ -83,33 +83,34 @@ public class BoxSettingsTab { public BoxSettingsTab() { } - + /** * Create Tab Control * */ - public Control createContro(Composite parent, IBoxProvider provider0) { + // called from EditboxPreferencePage.newTab(String categoryName) + public Control createControlsWithContent(Composite parent, IBoxProvider provider0) { provider = provider0; if (provider == null) { Label l = new Label(parent, SWT.NONE); l.setText("Error - cannot make configuration"); return l; } - store = provider.getSettingsStore(); - settings = provider.createSettings(); + providerStore = provider.getSettingsStore(); + theme = provider.createSettings(); decorator = provider.createDecorator(); - decorator.setSettings(settings); - Control result = createContents0(parent); - updateContents(); + decorator.setSettings(theme); + Control result = createControls(parent); + updateContentFromTheme(); decorator.setStyledText(st); decorator.decorate(true); decorator.enableUpdates(true); - settings.addPropertyChangeListener(new IPropertyChangeListener() { + theme.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { changed = true; if (event.getProperty().equals(IBoxSettings.PropertiesKeys.Color.name())) updateFromToColors(); - provider.getEditorsBoxSettings().copyFrom(settings); + provider.getEditorsBoxSettings().copyFrom(theme); } }); @@ -117,7 +118,7 @@ public void propertyChange(PropertyChangeEvent event) { } - protected Control createContents0(Composite parent) { + protected Control createControls(Composite parent) { int N = 6; Composite c = new Composite(parent, SWT.NONE); this.composite = c; @@ -134,9 +135,8 @@ protected Control createContents0(Composite parent) { enabled.setText("Enabled"); enabled.setAlignment(SWT.RIGHT); enabled.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - settings.setEnabled(enabled.getSelection()); + theme.setEnabled(enabled.getSelection()); } }); @@ -144,13 +144,13 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); - dialog.setFileName(settings.getName()); + dialog.setFileName(theme.getName()); dialog.setFilterExtensions(new String[]{"*.eb"}); dialog.setText("Editbox settings"); String file = dialog.open(); if(file != null) { try{ - settings.export(new FileOutputStream(file)); + theme.export(new FileOutputStream(file)); }catch(Exception ex){ EditBox.logError(this, "Failed to export EditBox setttings", ex); MessageBox mb = new MessageBox(getShell(),SWT.ICON_ERROR); @@ -168,7 +168,7 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); - dialog.setFileName(settings.getName()); + dialog.setFileName(theme.getName()); dialog.setFilterExtensions(new String[]{"*.eb"}); dialog.setText("Editbox settings"); String file = dialog.open(); @@ -176,9 +176,9 @@ public void widgetSelected(SelectionEvent e) { try{ IBoxSettings newSettings = provider.createSettings(); newSettings.load(new FileInputStream(file)); - newSettings.setEnabled(settings.getEnabled()); - settings.copyFrom(newSettings); - updateContents(); + newSettings.setEnabled(theme.getEnabled()); + theme.copyFrom(newSettings); + updateContentFromTheme(); }catch(Exception ex){ EditBox.logError(this, "Failed to import EditBox setttings", ex); MessageBox mb = new MessageBox(getShell(),SWT.ICON_ERROR); @@ -194,7 +194,7 @@ public void widgetSelected(SelectionEvent e) { gd.horizontalSpan = 4; importConfig.setLayoutData(gd); - newLabel(c, "Enter/select theme"); + newLabel(c, "Rename/select theme"); combo = new Combo(c, SWT.DROP_DOWN); gd = new GridData(GridData.BEGINNING); gd.widthHint = 150; @@ -206,10 +206,7 @@ public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) { String s = combo.getText(); if (s != null && s.length() > 0) { - decorator.enableUpdates(false); - store.load(s, settings); //: get themes list - updateContents(); - decorator.enableUpdates(true); + loadSettingsForName(s); } } }); @@ -224,7 +221,7 @@ public void widgetSelected(SelectionEvent e) { int si = combo.indexOf(t); if (si > -1) { combo.remove(si); - store.remove(t); + providerStore.remove(t); } else { combo.setText(""); } @@ -250,7 +247,7 @@ public void widgetSelected(SelectionEvent e) { borderLineStyle = newCombo(c1, new String[]{"Solid","Dot","Dash","DashDot", "DashDotDot"}, new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setBorderLineStyle(borderLineStyle.getSelectionIndex()); + theme.setBorderLineStyle(borderLineStyle.getSelectionIndex()); } }); borderLineStyle.select(0); @@ -267,7 +264,7 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { int idx = borderColorType.getSelectionIndex(); - settings.setBorderColorType(idx); + theme.setBorderColorType(idx); borderColorSelector.getButton().setEnabled(idx == 0); } }); @@ -276,7 +273,7 @@ public void widgetSelected(SelectionEvent e) { borderColorSelector = new ColorSelector(c); borderColorSelector.addListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { - settings.setBorderRGB(borderColorSelector.getColorValue()); + theme.setBorderRGB(borderColorSelector.getColorValue()); } }); @@ -286,7 +283,7 @@ public void propertyChange(PropertyChangeEvent event) { @Override public void widgetSelected(SelectionEvent e) { - settings.setBorderWidth(borderWidth.getSelectionIndex()); + theme.setBorderWidth(borderWidth.getSelectionIndex()); } }); @@ -295,7 +292,7 @@ public void widgetSelected(SelectionEvent e) { bordertDrawLine.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setBorderDrawLine(bordertDrawLine.getSelection()); + theme.setBorderDrawLine(bordertDrawLine.getSelection()); } }); @@ -318,7 +315,7 @@ public void widgetSelected(SelectionEvent e) { highlightLineStyle = newCombo(c3, new String[]{"Solid","Dot","Dash","DashDot", "DashDotDot"}, new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setHighlightLineStyle(highlightLineStyle.getSelectionIndex()); + theme.setHighlightLineStyle(highlightLineStyle.getSelectionIndex()); } }); highlightLineStyle.select(0); @@ -336,7 +333,7 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { int idx = highlightColorType.getSelectionIndex(); - settings.setHighlightColorType(idx); + theme.setHighlightColorType(idx); highlightColorSelector.getButton().setEnabled(idx == 0); } }); @@ -345,7 +342,7 @@ public void widgetSelected(SelectionEvent e) { highlightColorSelector = new ColorSelector(c); highlightColorSelector.addListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { - settings.setHighlightRGB(highlightColorSelector.getColorValue()); + theme.setHighlightRGB(highlightColorSelector.getColorValue()); } }); @@ -355,7 +352,7 @@ public void propertyChange(PropertyChangeEvent event) { @Override public void widgetSelected(SelectionEvent e) { - settings.setHighlightWidth(highlightWidth.getSelectionIndex()); + theme.setHighlightWidth(highlightWidth.getSelectionIndex()); } }); @@ -364,7 +361,7 @@ public void widgetSelected(SelectionEvent e) { highlightDrawLine.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setHighlightDrawLine(highlightDrawLine.getSelection()); + theme.setHighlightDrawLine(highlightDrawLine.getSelection()); } }); @@ -374,10 +371,10 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { - settings.setRoundBox(roundBox.getSelection()); + theme.setRoundBox(roundBox.getSelection()); if (roundBox.getSelection()){ fillGradient.setSelection(false); - settings.setFillGradient(false); + theme.setFillGradient(false); } } }); @@ -387,7 +384,7 @@ public void widgetSelected(SelectionEvent e) { highlightOne.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setHighlightOne(highlightOne.getSelection()); + theme.setHighlightOne(highlightOne.getSelection()); } }); @@ -396,7 +393,7 @@ public void widgetSelected(SelectionEvent e) { eolBox.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setExpandBox(eolBox.getSelection()); + theme.setExpandBox(eolBox.getSelection()); } }); @@ -409,7 +406,7 @@ public void widgetSelected(SelectionEvent e) { noBackground.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setNoBackground(noBackground.getSelection()); + theme.setNoBackground(noBackground.getSelection()); } }); @@ -423,14 +420,14 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { - settings.setFillSelected(fillSelected.getSelection()); + theme.setFillSelected(fillSelected.getSelection()); } }); fillSelectedColor = new ColorSelector(c); fillSelectedColor.addListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { - settings.setFillSelectedRGB(fillSelectedColor.getColorValue()); + theme.setFillSelectedRGB(fillSelectedColor.getColorValue()); } }); fillSelectedColor.getButton().setLayoutData(new GridData(GridData.BEGINNING)); @@ -440,7 +437,7 @@ public void propertyChange(PropertyChangeEvent e) { fillOnMove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setFillOnMove(fillOnMove.getSelection()); + theme.setFillOnMove(fillOnMove.getSelection()); } }); @@ -451,7 +448,7 @@ public void widgetSelected(SelectionEvent e) { fillKey = newCombo(c, new String[]{"","Alt","Ctrl","Shift"}, new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - settings.setFillKeyModifier(fillKey.getText()); + theme.setFillKeyModifier(fillKey.getText()); } }); @@ -461,10 +458,10 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { - settings.setFillGradient(fillGradient.getSelection()); + theme.setFillGradient(fillGradient.getSelection()); if (fillGradient.getSelection()) { roundBox.setSelection(false); - settings.setRoundBox(false); + theme.setRoundBox(false); } } }); @@ -473,7 +470,7 @@ public void widgetSelected(SelectionEvent e) { fillGradientColor.addListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { - settings.setFillGradientColorRGB(fillGradientColor.getColorValue()); + theme.setFillGradientColorRGB(fillGradientColor.getColorValue()); } }); @@ -497,7 +494,7 @@ public void propertyChange(PropertyChangeEvent event) { public void widgetSelected(SelectionEvent e) { int alpha = scale.getSelection() * 255/100; spinner.setSelection(alpha); - settings.setAlpha(alpha); + theme.setAlpha(alpha); } }); @@ -509,7 +506,7 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { scale.setSelection(spinner.getSelection() * 100/255); - settings.setAlpha(spinner.getSelection()); + theme.setAlpha(spinner.getSelection()); } }); @@ -522,8 +519,8 @@ public void widgetSelected(SelectionEvent e) { new SelectionAdapter() { // EditBox helps to signal that there are too long strings @Override public void widgetSelected(SelectionEvent e) { - settings.setColorsSize(levels.getSelectionIndex()); - st.setText(generateIndentText(settings.getColorsSize() +1)); + theme.setColorsSize(levels.getSelectionIndex()); + st.setText(generateIndentText(theme.getColorsSize() +1)); } }); @@ -532,7 +529,7 @@ public void widgetSelected(SelectionEvent e) { circulateColors.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - settings.setCirculateLevelColors(circulateColors.getSelection()); + theme.setCirculateLevelColors(circulateColors.getSelection()); } }); @@ -550,7 +547,7 @@ public void widgetSelected(SelectionEvent e) { @Override public void widgetSelected(SelectionEvent e) { - settings.setBuilder(builderCombo.getText()); + theme.setBuilder(builderCombo.getText()); } }); @@ -586,10 +583,10 @@ public void propertyChange(PropertyChangeEvent event) { public void widgetSelected(SelectionEvent e) { if (fromColorLab.getColorValue() == null || toColorLab.getColorValue()==null) return; - Color[] colors = settings.getColors(); + Color[] colors = theme.getColors(); if (colors == null || colors.length < 2) return; - settings.setColorsRGB(rgbGradient(colors)); + theme.setColorsRGB(rgbGradient(colors)); } }); @@ -640,58 +637,67 @@ protected Label newLabel(Composite c, String msg) { l.setBackground(new Color(null, bc.getRGB())); return l; } + + // called from EditboxPreferencePage + public void loadSettingsForName(String name){ + decorator.enableUpdates(false); + providerStore.load(name, theme); + updateContentFromTheme(); + decorator.enableUpdates(true); + } - - protected void updateContents() { - enabled.setSelection(settings.getEnabled()); - combo.setItems(store.getCatalog().toArray(new String[0])); - if (settings.getName() != null) { - int idx = combo.indexOf(settings.getName()); + /** update content from settings */ + protected void updateContentFromTheme() { + enabled.setSelection(theme.getEnabled()); // enable is applied from provider! + + combo.setItems(providerStore.getCatalog().toArray(new String[0])); + if (theme.getName() != null) { + int idx = combo.indexOf(theme.getName()); if (idx > -1) combo.select(idx); - else combo.setText(settings.getName()); + else combo.setText(theme.getName()); } - if (settings.getBorderColor() != null) - borderColorSelector.setColorValue(settings.getBorderColor().getRGB()); - borderWidth.select(settings.getBorderWidth()); - roundBox.setSelection(settings.getRoundBox()); - if (settings.getHighlightColor() != null) - highlightColorSelector.setColorValue(settings.getHighlightColor().getRGB()); - highlightWidth.select(settings.getHighlightWidth()); - highlightOne.setSelection(settings.getHighlightOne()); - fillSelected.setSelection(settings.getFillSelected()); - if (settings.getFillSelectedColor() != null) - fillSelectedColor.setColorValue(settings.getFillSelectedColor().getRGB()); + if (theme.getBorderColor() != null) + borderColorSelector.setColorValue(theme.getBorderColor().getRGB()); + borderWidth.select(theme.getBorderWidth()); + roundBox.setSelection(theme.getRoundBox()); + if (theme.getHighlightColor() != null) + highlightColorSelector.setColorValue(theme.getHighlightColor().getRGB()); + highlightWidth.select(theme.getHighlightWidth()); + highlightOne.setSelection(theme.getHighlightOne()); + fillSelected.setSelection(theme.getFillSelected()); + if (theme.getFillSelectedColor() != null) + fillSelectedColor.setColorValue(theme.getFillSelectedColor().getRGB()); builderCombo.setItems(provider.getBuilders().toArray(new String[0])); int i = -1; - if (settings.getBuilder() != null) - i = builderCombo.indexOf(settings.getBuilder()); + if (theme.getBuilder() != null) + i = builderCombo.indexOf(theme.getBuilder()); builderCombo.select(i == -1 ? 0 : i); - st.setText(generateIndentText(settings.getColorsSize() +1)); + st.setText(generateIndentText(theme.getColorsSize() +1)); updateFromToColors(); - bordertDrawLine.setSelection(settings.getBorderDrawLine()); - highlightDrawLine.setSelection(settings.getHighlightDrawLine()); - fillGradient.setSelection(settings.getFillGradient()); - if (settings.getFillGradientColor() != null) - fillGradientColor.setColorValue(settings.getFillGradientColor().getRGB()); - fillOnMove.setSelection(settings.getFillOnMove()); - circulateColors.setSelection(settings.getCirculateLevelColors()); - levels.select(settings.getColorsSize()); - fillKey.setText(settings.getFillKeyModifier()==null?"":settings.getFillKeyModifier()); - borderColorType.select(settings.getBorderColorType()); - highlightColorType.select(settings.getHighlightColorType()); - highlightColorSelector.getButton().setEnabled(settings.getHighlightColorType() == 0); - borderColorSelector.getButton().setEnabled(settings.getBorderColorType() == 0); - borderLineStyle.select(settings.getBorderLineStyle()); - highlightLineStyle.select(settings.getHighlightLineStyle()); - noBackground.setSelection(settings.getNoBackground()); - eolBox.setSelection(settings.getExpandBox()); - spinner.setSelection(settings.getAlpha()); - scale.setSelection(settings.getAlpha() * 100/255); + bordertDrawLine.setSelection(theme.getBorderDrawLine()); + highlightDrawLine.setSelection(theme.getHighlightDrawLine()); + fillGradient.setSelection(theme.getFillGradient()); + if (theme.getFillGradientColor() != null) + fillGradientColor.setColorValue(theme.getFillGradientColor().getRGB()); + fillOnMove.setSelection(theme.getFillOnMove()); + circulateColors.setSelection(theme.getCirculateLevelColors()); + levels.select(theme.getColorsSize()); + fillKey.setText(theme.getFillKeyModifier()==null?"":theme.getFillKeyModifier()); + borderColorType.select(theme.getBorderColorType()); + highlightColorType.select(theme.getHighlightColorType()); + highlightColorSelector.getButton().setEnabled(theme.getHighlightColorType() == 0); + borderColorSelector.getButton().setEnabled(theme.getBorderColorType() == 0); + borderLineStyle.select(theme.getBorderLineStyle()); + highlightLineStyle.select(theme.getHighlightLineStyle()); + noBackground.setSelection(theme.getNoBackground()); + eolBox.setSelection(theme.getExpandBox()); + spinner.setSelection(theme.getAlpha()); + scale.setSelection(theme.getAlpha() * 100/255); } private void updateFromToColors() { - Color[] c = settings.getColors(); + Color[] c = theme.getColors(); if (c != null && c.length > 1) { updateBackground(fromColorLab, c[0]); updateBackground(toColorLab, c[c.length - 1]); @@ -712,8 +718,8 @@ protected void disposeColor(Color oldColor) { } public void dispose() { - if (settings != null) - settings.dispose(); + if (theme != null) + theme.dispose(); } private RGB[] rgbGradient(Color[] c) { @@ -733,7 +739,7 @@ private RGB[] rgbGradient(Color[] c) { return gradient; } - String generateIndentText(int n){ + private String generateIndentText(int n){ StringBuilder sb = new StringBuilder(); for (int i = 0;i> categoryFiles; private List namesList; private Button bAddFile; private boolean providersChanged; + private IPreferenceStore store = EditBox.getDefault().getPreferenceStore(); + private BoxProviderRegistry providerRegistry = EditBox.getDefault().getProviderRegistry(); + + public EditboxPreferencePage(){ + super("EditBox (Nodeclipse)", EditBox.getImageDescriptor("icons/editbox.png")); + } + + @Override + public void init(IWorkbench workbench) { + } @Override protected Control createContents(Composite parent) { @@ -52,6 +69,31 @@ protected Control createContents(Composite parent) { Composite c = new Composite(parent, SWT.NONE); c.setLayout(new GridLayout(1, false)); + + //+ { + pluginEnabled = new Button(c, SWT.CHECK); + GridData gd = new GridData(); + pluginEnabled.setLayoutData(gd); + pluginEnabled.setText("Plugin enabled"); + pluginEnabled.setAlignment(SWT.RIGHT); + pluginEnabled.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + Boolean isEnabled = pluginEnabled.getSelection(); + //store.setValue(EditBox.PREF_ENABLED, isEnabled ); // no need + // decorators are updated when state is toggled within Command Handler + EnableEditBox toggleHandler = new EnableEditBox(); + try { + toggleHandler.execute(null); + } catch (ExecutionException ex) { + EditBox.logError(this, ex.getLocalizedMessage(), ex); + } + // toolbar item + EditBox.toggleToolBarItemInAllWindows(isEnabled); + } + }); + pluginEnabled.setSelection(store.getBoolean(EditBox.PREF_ENABLED)); + //} + Link link = new Link(c, SWT.NONE); link.setText("Configure print margin and current line highlighting here."); FontData[] fontData = link.getFont().getFontData(); @@ -62,23 +104,47 @@ protected Control createContents(Composite parent) { link.setFont(new Font(getShell().getDisplay(), fontData)); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer)getContainer(); + IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer(); container.openPage("org.eclipse.ui.preferencePages.GeneralTextEditor", null); } }); - folder = new TabFolder(c, SWT.NONE); - folder.setLayoutData(new GridData(GridData.FILL_BOTH)); - TabItem ti = new TabItem(folder, SWT.NONE); + tabFolder = new TabFolder(c, SWT.NONE); + tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); + TabItem ti = new TabItem(tabFolder, SWT.NONE); ti.setText("Categories"); - ti.setControl(createCategoryControl(folder)); - folder.pack(); + ti.setControl(createCategoryControl(tabFolder)); + tabFolder.pack(); return c; } - + protected Control createCategoryControl(Composite parent) { Composite c = new Composite(parent, SWT.NONE); c.setLayout(new GridLayout(2, true)); + + //+ apply theme globally { + Label comboLabel = new Label(c, SWT.NONE); + comboLabel.setText("Select one of bundled themes to apply to all categories (you can refine on respective Tab)"); + + themeCombo = new Combo(c, SWT.DROP_DOWN | SWT.READ_ONLY ); + GridData gd = new GridData(GridData.BEGINNING); + gd.widthHint = 150; + gd.horizontalSpan = 2; + gd.horizontalAlignment = SWT.LEFT; + themeCombo.setLayoutData(gd); + themeCombo.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + String s = themeCombo.getText(); + if (s != null && s.length() > 0) { + store.setValue(EditBox.PREF_DEFAULT_THEME, s); + updateAllTabsWithSelectedTheme(s); + } + } + }); + themeCombo.setItems(BoxProviderRegistry.ALL_THEMES_ARRAY); + String preferedThemeName = store.getString(EditBox.PREF_DEFAULT_THEME); + themeCombo.select( BoxProviderRegistry.getThemeIndex(preferedThemeName) ); + //} Label categoryLabel = new Label(c, SWT.NONE); categoryLabel.setText("Categories"); @@ -117,45 +183,45 @@ protected Control createCategoryControl(Composite parent) { bRemoveFile.setLayoutData(new GridData(GridData.FILL_BOTH)); bRemoveFile.addSelectionListener(new RemoveFile()); - loadData(); + loadDataFromProviderRegistryAndCreateTabs(); return c; + } + + private void updateAllTabsWithSelectedTheme(String theme) { + //IBoxProvider provider = EditBox.getDefault().getProviderRegistry().providerForName(theme); + TabItem[] tabItemas = tabFolder.getItems(); + for (TabItem item: tabItemas){ + BoxSettingsTab bst = (BoxSettingsTab) item.getData(); + if (bst == null){ + continue; + } + //bst.setProvider(provider); + bst.loadSettingsForName(theme); + } } - protected void loadData() { - Collection boxProviders = EditBox.getDefault().getProviderRegistry().getBoxProviders(); - for (IBoxProvider provider : boxProviders) + protected void loadDataFromProviderRegistryAndCreateTabs() { + Collection boxProviders = providerRegistry.getBoxProviders(); + for (IBoxProvider provider : boxProviders){ newTab(provider.getName()); + } } - public void init(IWorkbench workbench) { - } - - protected boolean contains(String[] items, String newText) { - if (items == null || items.length == 0) - return false; - for (String s : items) - if (s.equalsIgnoreCase(newText)) - return true; - return false; - } - - protected void newTab(String value) { - categoryList.add(value); - TabItem item = new TabItem(folder, SWT.NONE); - item.setText(value); - BoxSettingsTab p = new BoxSettingsTab(); - IBoxProvider provider = EditBox.getDefault().getProviderRegistry().providerForName(value); - //: see BoxProviderRegistry - item.setControl(p.createContro(folder, provider)); - item.setData(p); + protected void newTab(String providerName) { + categoryList.add(providerName); + TabItem item = new TabItem(tabFolder, SWT.NONE); + item.setText(providerName); + BoxSettingsTab bst = new BoxSettingsTab(); + IBoxProvider provider = providerRegistry.providerForName(providerName); + item.setControl(bst.createControlsWithContent(tabFolder, provider)); + item.setData(bst); if (categoryFiles == null) categoryFiles = new LinkedHashMap>(); - Collection fileNames = p.getSettings().getFileNames(); + Collection fileNames = bst.getSettings().getFileNames(); //XXX should be from Provider if (fileNames == null) fileNames = Collections.emptyList(); - categoryFiles.put(value, new LinkedHashSet(fileNames)); - categoryList.setSelection(new String[] { value }); + categoryFiles.put(providerName, new LinkedHashSet(fileNames)); namesList.setItems(fileNames.toArray(new String[0])); bAddFile.setEnabled(true); } @@ -174,7 +240,7 @@ public void addFileName(String value) { LinkedHashSet fileNames = categoryFiles.get(categoryName); fileNames.add(value); namesList.add(value); - Object o = folder.getItem(i + 1).getData(); + Object o = tabFolder.getItem(i + 1).getData(); if (o instanceof BoxSettingsTab) ((BoxSettingsTab) o).getSettings().setFileNames(fileNames); } @@ -182,28 +248,30 @@ public void addFileName(String value) { @Override public boolean performOk() { - TabItem[] items = folder.getItems(); + + TabItem[] items = tabFolder.getItems(); for (int i=1;i fNames = categoryFiles.get(key); fNames.remove(value); namesList.remove(i); - Object o = folder.getItem(n+1).getData(); + Object o = tabFolder.getItem(n+1).getData(); if (o instanceof BoxSettingsTab) ((BoxSettingsTab) o).getSettings().setFileNames(new ArrayList(fNames)); } diff --git a/pom.xml b/pom.xml index 680bee8..349a34d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ pm.eclipse.editbox pm.eclipse.editbox.parent - 0.60.0-SNAPSHOT + 1.0.0-SNAPSHOT pom EditBox (parent) @@ -25,7 +25,7 @@ Paul Verest Nodeclipse organization - http://www.nodeclipse.org/ + https://nodeclipse.github.io/ +8 @@ -35,7 +35,7 @@ - 0.19.0 + 1.1.0 UTF-8