Einhängen von Tools in die Toolbar und Menüs

Gültig ab JWT 5.5.5.0

Dieser Artikel beschreibt, wie Toolbars und Kontextmenüs 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.

GoogleSearchTool
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.