Dieser Artikel beschreibt, wie Toolbars aber auch dem Kontextmenü eigene Buttons über die Tool-Contribution-API hinzugefügt werden können.
Im jadice web toolkit können der Annotationstoolbar (Toolbar, welche erscheint, nachdem eine Annotation ausgewählt wurde), der Texttoolbar (Toolbar, welche erscheint, nachdem Text selektiert wurde) und dem Kontextmenü eigene Buttons über die Tool-Contribution-API hinzugefügt werden. Im folgenden wird anhand eines Google-Such-Tools beschrieben, wie ein solches Tool aussehen kann.
package com.levigo.jadice.web.demo.enterprise.client; import java.util.Collection; import com.google.gwt.user.client.Window; import com.jadice.web.util.icon.client.iconfont.BasicIconFont; import com.jadice.web.util.icon.client.iconfont.ToggleIconFont; import com.levigo.jadice.web.client.tool.Tool; import com.levigo.jadice.web.client.ui.menu.ContributionContext; import com.levigo.jadice.web.client.ui.menu.MenuBuilder; import com.levigo.jadice.web.client.util.action.ActionManager; import com.levigo.jadice.web.client.util.action.RegisteredAction; import com.levigo.jadice.web.client.util.command.Command; import com.levigo.jadice.web.client.util.internal.clipboard.Clipboard; /** * A Tool providing a google search button via tool contribution API. The button is added to a menu * when some text is selected. By pressing the button the text is concatenated to a google search * string and the URL is opened in a new tab. */ public class GoogleSearchTool extends Tool { public class GoogleSearchCommand implements Command { @Override public void execute(Collection<Object> args) { String searchtext = Clipboard.get().get("text/plain"); searchtext.replaceAll(" ", "+"); String googleUrl = "https://www.google.de/search?q=" + searchtext; Window.open(googleUrl, "_blank", ""); } @Override public boolean canExecute(Collection<Object> args) { return Clipboard.get().get("text/plain") != null && !Clipboard.get().get("text/plain").equals(""); } @Override public boolean isSelected(Collection<Object> args) { return false; } @Override public boolean isAvailable() { return true; } @Override public String getID() { return getClass().getName(); } } @Override public void contribute(ContributionContext context, MenuBuilder menuBuilder) { if (Clipboard.get().get("text/plain") != null && !Clipboard.get().get("text/plain").equals("")) { RegisteredAction action = ActionManager.getRegisteredAction(new GoogleSearchCommand(), context.getContext()); if (action == null) action = new RegisteredAction("Google", null, new ToggleIconFont(new BasicIconFont("fa fa-google")), new GoogleSearchCommand(), context.getContext()); menuBuilder.installAction("edit", action); } } }
Das Tool selbst überschreibt lediglich die contribute-Methode. In dieser wird überprüft, ob sich ein Text in der Klasse Clipboard befindet (wird ein Text über das TextSelectionTool markiert, so wird er in der Klasse Clipboard gespeichert und daraus entfernt sobald die Selektion entfernt wird). Wenn sich darin ein Text befindet, so wird dem MenuBuilder ein Google-Such-Button hinzugefügt. Das dahinter liegende Command ist im oberen Beispiel als interne Klassse enthalten. Wird der Button gedrückt und das Command ausgeführt, so wird der Text aus dem Clipboard genommen und ein Google-Such-String zusammengesetzt. Die erzeugte URL wird in einem neuen Fenster geöffnet.