/*******************************************************************************
* Copyright (c) 2010, 2013 Siemens AG and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Kai Tödter - initial implementation
* Lars Vogel <lars.vogel@gmail.com> - Bug 413431, 416166
******************************************************************************/
package org.eclipse.e4.demo.contacts.processors;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.demo.contacts.util.ThemeHelper;
import org.eclipse.e4.ui.css.swt.theme.ITheme;
import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
import org.eclipse.e4.ui.css.swt.theme.IThemeManager;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.commands.MCommand;
import org.eclipse.e4.ui.model.application.commands.MParameter;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.swt.widgets.Display;
public class ToolbarThemeProcessor {
@Inject
@Named("toolbar:org.eclipse.ui.main.toolbar")
private MToolBar toolbar;
private final static String PROCESSOR_ID = "org.eclipse.e4.demo.contacts.processor.toolbar";
@SuppressWarnings("restriction")
@Execute
public void execute(MApplication app, EModelService service,
IExtensionRegistry registery, IThemeManager mgr) {
if (toolbar == null) {
return;
}
List<String> tags = app.getTags();
for (String tag : tags) {
if (PROCESSOR_ID.equals(tag)) {
return; // already processed
}
}
tags.add(PROCESSOR_ID);
IThemeEngine engine = mgr.getEngineForDisplay(Display.getCurrent());
List<ITheme> themes = engine.getThemes();
MCommand switchThemeCommand = ThemeHelper.findCommand(app);
// no themes or command, stop processing
if (themes.size() <= 0 || switchThemeCommand == null) {
return;
}
if (switchThemeCommand != null) {
toolbar.getChildren().add(
service.createModelElement(MToolBarSeparator.class));
for (ITheme theme : themes) {
// only include themes from org.eclipse.e4.demo.contacts.*
if (!theme.getId().startsWith("org.eclipse.e4.demo.contacts.")) {
return;
}
MParameter parameter = service
.createModelElement(MParameter.class);
parameter.setName("contacts.commands.switchtheme.themeid"); //$NON-NLS-1$
parameter.setValue(theme.getId());
String iconURI = ThemeHelper
.getCSSUri(theme.getId(), registery);
if (iconURI != null) {
iconURI = iconURI.replace(".css", ".png");
}
processTheme(theme.getLabel(), switchThemeCommand, parameter,
iconURI, service);
}
}
}
protected void processTheme(String name, MCommand switchCommand,
MParameter themeId, String iconURI, EModelService service) {
MHandledToolItem toolItem = service
.createModelElement(MHandledToolItem.class);
toolItem.setTooltip(name);
toolItem.setCommand(switchCommand);
toolItem.getParameters().add(themeId);
if (iconURI != null) {
toolItem.setIconURI(iconURI);
}
toolbar.getChildren().add(toolItem);
}
}