Einbinden eines Auswahldialogs für Stempelannotationen

Einbinden eines Auswahldialogs für Stempelannotationen

Es wird oft der Wunsch geäußert, beim Anlegen einer Stempelannotation einen Auswahldialog mit vordefinierten Stempeln zur Anzeige zu bringen. Diese Anforderung kann nicht über das Annotationsprofil bewerkstelligt werden, hierzu muss eine eigene Command- / Tool-Implementierung erstellt werden.

Erstellen der Command-Implementation

Die Commands für das Anlegen der Annotationen werden in der com.levigo.jadice.appbase.AnnotationProfileAwareToolBar-Klasse aus dem Annotationsprofil erstellt. Die AnnotationProfileAwareToolBar-Implementation muss angepasst werden, der Quellcode ist in der lib/appbase/jadice-appbase-x.x.x.x-sources.jar Datei unter com/levigo/jadice/appbase/AnnotationProfileAwareToolBar.java zu finden. Hier muss in der Methode populateComponent(...) die Zeile

final AnnotationModeCommand cmd = new AnnotationModeCommand();

durch

AnnotationModeCommand cmd;

// hier den Stempel-Annotyp erkennen, der für die Dialogauswahl vorgsehen ist
if (typeName.equals("Stamp")) {
  cmd = new AnnotationModeCommand() {

    private final boolean toolRegistered = false;

    @Override
    protected void execute() {

      if (!toolRegistered) {
		// Tool-Implementation registrieren / aktivieren
	    getPageView().getToolManager().register(com.levigo.jadice.appbase.StampAnnoTool.class, true);
        getPageView().getToolManager().activate(com.levigo.jadice.appbase.StampAnnoTool.class);
      }

	  // Tool auf aktiv setzen
      getPageView().getToolManager().getTool(com.levigo.jadice.appbase.StampAnnoTool.class).setToolToActivated();
      // Tool auf exklusiv Modus setzen, andere Tools sind nicht aktiv
	  getPageView().getToolManager().setExclusive(com.levigo.jadice.appbase.StampAnnoTool.class);
    }
  };
} else {
  cmd = new AnnotationModeCommand();
} 

Codebeispiel für die StampAnnoTool-Implementation

package com.levigo.jadice.appbase;

import java.awt.Cursor;

import javax.swing.UIManager;

import com.levigo.jadice.annotation.AnnotationPageSegment;
import com.levigo.jadice.annotation.Annotations;
import com.levigo.jadice.annotation.StampAnnotation;
import com.levigo.jadice.annotation.profiles.AnnotationFactory;
import com.levigo.jadice.annotation.profiles.AnnotationProfile;
import com.levigo.jadice.swing.tool.MouseEditEvent;
import com.levigo.jadice.swing.tool.Tool;

public class StampAnnoTool extends Tool {

  private boolean activated = false;

  public final void setToolToActivated() {
    // bei Aktivierung den Cursor setzen
    setCursor((Cursor) UIManager.get("Jadice.cursors.cursor.crosshair"));
    activated = true;
  }

  public final void setToolToDeactivated() {
    // bei Deaktivierung den Standard-Cursor setzen
    setCursor(Cursor.getDefaultCursor());
    activated = false;
  }

  @Override
  protected void handleMouseClicked(MouseEditEvent e, boolean isActive) {

    if (!activated) {
      super.handleMouseClicked(e, isActive);
      return;
    }

    try {
	  // Hier den Dialog für die Stempelauswahl öffnen
      System.err.println("---> Hier Dialog öffnen");

      final boolean cancelAnnoCreation = false;

      // Stempelannotation anlegen und konfigurieren, wenn im Dialog kein Abbruch des Anlegens vorgenommen wurde
      if (!cancelAnnoCreation) {
        final AnnotationFactory af = AnnotationProfile.getDefaultProfile().getTemplate("Stamp");

        final StampAnnotation sa = (StampAnnotation) af.createNewInstance();

        sa.setText("Erstellt via StampAnnoTool");

        // hier dann weitere Einstellungen (Farbe, Liniendicke, usw.) aus dem Dialog setzen
        ...

        // Position setzen
        sa.setUseCenterAsOrigin(true);
        sa.setLocation(e.getDocumentPoint().getX(), e.getDocumentPoint().getY());
        sa.setUseCenterAsOrigin(false);

        // AnnotationPageSegment holen
        final AnnotationPageSegment aps = Annotations.getAnnotationPageSegment(e.getPage(), true);

        // Erstellte Stempelanno der Seite hinzufügen
        aps.addAnnotation(sa);
       }
    } catch (final Exception ex) {
      ex.printStackTrace();
    } finally {
      // Tool deaktivieren
      setToolToDeactivated();
      // Exklusivmodus ausschalten
      getManager().setNonExclusive(StampAnnoTool.class);
    }
  }

}