package net.jeeeyul.eclipse.themes;
import javax.inject.Inject;
import net.jeeeyul.eclipse.themes.css.internal.dynamicresource.JTDynamicResourceLocator;
import net.jeeeyul.eclipse.themes.internal.Debug;
import net.jeeeyul.eclipse.themes.internal.ENVHelper;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.contexts.RunAndTrack;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.services.contributions.IContributionFactory;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
import org.eclipse.e4.ui.css.swt.dom.WidgetElement;
import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
import org.eclipse.e4.ui.services.IStylingEngine;
import org.eclipse.swt.widgets.Display;
/**
*
*/
@SuppressWarnings("restriction")
public class DynamicResourceProcessor {
@Inject
IEclipseContext ctx;
@Execute
public void trackThemeInstance() {
Debug.println("DynamicResourceProcessor Started.");
ctx.runAndTrack(new RunAndTrack() {
@Override
public boolean changed(IEclipseContext context) {
boolean tryNext = tryToInstall(context) == false;
return tryNext;
}
});
}
private boolean tryToInstall(IEclipseContext context) {
context.get(IContributionFactory.class.getName());
IStylingEngine stylingEngine = context.get(IStylingEngine.class);
IThemeEngine themeEngine = context.get(IThemeEngine.class);
if (themeEngine != null) {
themeEngine.registerResourceLocator(new JTDynamicResourceLocator());
Debug.println("Dynamic Resource Locator is installed on Theme Engine");
if (!ENVHelper.INSTANCE.isLinux()) {
CSSEngine cssEngine = WidgetElement.getEngine(Display.getDefault());
if (cssEngine != null) {
cssEngine.getResourcesLocatorManager().registerResourceLocator(new JTDynamicResourceLocator());
Debug.println("Dynamic Resource Locator is installed on CSS Engine");
return true;
}
}
return true;
}
if (stylingEngine != null) {
CSSEngine cssEngine = WidgetElement.getEngine(Display.getDefault());
if (cssEngine != null) {
cssEngine.getResourcesLocatorManager().registerResourceLocator(new JTDynamicResourceLocator());
Debug.println("Dynamic Resource Locator is installed on CSS Engine");
return true;
}
}
return false;
}
}