Skip to main content

Action und Command Framework

ActionRegistry & ActionManager sind deprecated und werden mit der nächsten Major Version entfernt.

Toolbars, Actions und Commands sind via GWT grundsätzlich via API konfigurierbar. Dies hat den Vorteil, dass der zugehörige Code in JavaScript übersetzt und sehr schnell geladen wird. Sowohl Buttons wie auch Kontextmenüeinträge setzen eine Action voraus. Für jedes Kommando sollte pro Kontext (ein Kontext wäre z.B. eine PageView) nur eine Action existieren. Um dies zu gewährleisten, müssen alle Actions über den ActionManager registriert werden. Weiterhin dient der ActionManager dem zentralen Reagieren auf Tastaturbefehle (KeyStrokes), sobald er mit einem Widget initialisiert wird.

Eventhandling

Die Events nehmen den vom Browser vorgesehenen Weg. GWT-Komponenten in diesem Pfad können Actions verarbeiten. Standardmäßig verarbeiten Buttons und Menüeinträge die KeyDownEvents und verarbeiten dadurch die Shortcuts. Da Buttons meist nicht direkt im Hirarchiepfad der JS-Key Events liegen gibt es die Hilfsklasse KeyDownEventDispatchingUtil. Damit werden die Events weitergereicht, wie beispielsweise an die darin enthaltene Toolbar. Wird die JWT-Toolbar verwendet, reicht auch diese die Events an alle enthaltenen Buttons weiter (gleiches gilt nun auch für Submenüs). Der Integrator ist für alles weitere selbst verantwortlich, und hat hier volle Freiheiten.

Der Viewer kann nun fokusiert werden. Verarbeitet kein Tool das ClickEvent auf den Viewer, so erhält der Viewer den Fokus. Die AnnotationToolbar hat ebenfalls einen Focus (für z.B. "Delete Anno"- Shortcut oder weitere folgende für "Fett" o.ä. wurde aber vorerst nicht eingebaut)

Ein Context ist nun zwingend. Existiert kein vom Intergrator erstellter Context in der Hirarchie, wird automatisch mit einer Warnung ein leerer Context im RootPanel angelegt und dieser verwendet.

Menüs & Toolbars

Menüs und Toolbars sollten grundsätzlich über den BasicMenuBuilder erstellt werden. Vordefinierte Actions, die zur Befüllung verwendet werden können, werden über die Klasse DefaultActions bereitgestellt.

Buttons

Buttons sollten nur in Ausnahmefällen unabhängig vom MenuBuilder erstellt werden; wenn, dann am besten über die Klassen JadiceDefaultButton und JadiceSubmenuButton:

mypanel.add(new JadiceDefaultButton(DefaultActions.pageNextAction(keyStroke, registry, context));

Nur in Ausnahmefällen sollte hierzu der JadiceButtonBuilder verwendet werden, da dieser die Actions nicht registriert und somit keine unmittelbare Tastaturbedienung der damit verbundenen Commands ermöglicht wird.

Actions

Actions stellen das Bindeglied zwischen der Benutzeroberfläche und den Commands dar. Sie enthalten die zur Anzeige wesentlichen Elemente wie Icon, Label, Beschreibung sowie die Keyboard-Shortcuts. Actions sind über die JadiceMessages lokalisierbar. Eine Vielzahl vorkonfigurierter Actions wird über die Klasse DefaultActions zur Verfügung gestellt.

Commands

Die Ausführung der meisten Viewer-Aktionen ist über zugehörige Commands gekapselt. Dies ermöglicht insbesondere die einfache Auslösung derselben Aktion über unterschiedliche UI-Komponenten. Beispielsweise kann der Zoom des Dokuments über einen Button, das Kontextmenü oder kundenspezifische Widgets angestoßen werden. Im Hintergrund wird dabei immer dasselbe Command verwendet.

Die folgende Liste gibt einen Überblick über die vorhandenen Commands und beinhaltet Links auf die zugehörige Javadoc-Dokumentation.

CommandFunktion
AnnotationenAnnotationVisibilityCommandErlaubt das Ein- und Ausblenden von Annotationen (einzelne oder alle Annotationstypen).
CreateAnnotationCommandErlaubt es, Annotationen zu erzeugen.
CreateAnnotationViaApiCommandErzeugt Annotationen programmatisch via API.
DeleteSelectedAnnotationsCommandLöscht die aktuell selektierten Annotationen.
AuflösungShowResolutionCalibrationWidgetCommandBlendet ein Popup zum individuellen Einstellen der Displayauflösung ein.
BookmarkAddBookmarkCommandSetzt ein Bookmark auf der aktuellen Seite.
RemoveAllBookmarksCommandLöscht alle Bookmarks, die auf dem aktuellen Dokument angebracht wurden.
RemoveBookmarkCommandEntfernt das Bookmark auf der aktuellen Seite.
NextBookmarkCommandSpringt zum nächsten Bookmark innerhalb des Dokuments und zeigt die zugehörige Seite an.
PreviousBookmarkCommandSpringt zum vorherigen Bookmark innerhalb des Dokuments und zeigt die zugehörige Seite an.
GradationShowGradationCommandBlendet ein Popup zum Justieren der Gradationskurve ein.
GradationCurveCommandErlaubt das Manipulieren der Gradation anhand der graphischen Gradationskurve.
GradationActionCommandErlaubt das Manipulieren der Gradation anhand von verschiedenen Aktionen.
GridAttachGridCommandErleichtert das Positionieren von Annotationen durch Ausrichtung an einem Grid.
LayoutSelectPageLayoutCommandErlaubt das Auswählen des aktuellen Seitenlayouts: Gitteransicht, fortlaufende Ansicht oder ganze Seite.
LocaleLocaleCommandSchaltet die Sprache der Anwendung um.
RotationRotateCommandDreht die aktuelle Seite oder das Dokument auf einen vorgegebenen Winkel (Vielfache von 90 Grad).
SpinCommandDreht die aktuelle Seite oder das Dokument um 90 Grad nach links oder rechts.
SeitenavigationFirstPageCommandSpringt zur ersten Seite des Dokuments.
LastPageCommandSpringt zur letzten Seite des Dokuments.
NextPageCommandBlättert eine Seite weiter.
PreviousPageCommandBlättert eine Seite zurück.
SucheActivateRolloutSearchCommandÖffnet ein Popup zur Eingabe eines Suchbegriffs zur Textsuche im Dokument und in Annotationen.
ActivateToolbarSearchCommandErmöglicht die Eingabe eines Suchbegriffs eingebettet in der Toolbar.
ToolsActivateToolCommandAktiviert/deaktiviert ein gegebenes Tool.
EnableToolCommandEnabled/disabled ein gegebenes Tool.
AutoActivationCommandAktiviert/deaktiviert die DefaultToolActivationPolicy welche für ein automatisches Aktivieren von Tools, wie z.B. dem PanForceMouseTool und dem TextSelectionTool sorgt.
ThumbnailToolCommandAktiviert/deaktiviert und öffnet/schließt das ThumbnailTool.
ZoomFitPageCommandWechselt in einen Seiten-Einpass-Modus. Solange der Modus nicht beendet wird, werden alle Seiten eingepasst – entweder komplett oder auf Seitenhöhe oder Seitenbreite.
FitPageOnceCommandPasst die aktuelle Seite in den aktuellen Anzeigebereich ein – entweder komplett oder auf Seitenhöhe oder Seitenbreite skaliert.
ZoomCommandErmöglicht das relative Zoomen auf Dokument- und Seitenebenene. Details zur Integration und ein zugehöriges Codebeispiel finden sich in den Showcases unter "Commands / Buttons".
ZoomToCommandErmöglicht das absolute Zoomen auf Dokument- und Seitenebene.

Anwendungsbereiche von Commands

Commands welche von der Klasse AbstractDocumentCommand erben können auf bestimmte Anwendungsbereiche begrenzt werden. Hierbei wird zwischen drei Werten des Enums Scope unterschieden: PAGE, DOCUMENT.

  • PAGE

    Änderungen an den RenderControls die von einem Command mit Scope.PAGE ausgeführt werden, verändern nur die Darstellung der aktuellen Seite, nicht aber von anderen Dokumentbestandteilen.

  • DOCUMENT

    Änderungen an den RenderControls die von einem Command mit Scope.DOCUMENT ausgeführt werden, verändern nur die Darstellung des aktuellen Dokumentes. Wird ein neues Dokument geöffnet, so sind diese Änderungen nicht länger wirksam.

Standardmäßig wird der Anwendungsbereich Scope.DOCUMENT verwendet.

Keyboard Shortcuts

Das Action und Command Framework erlaubt die einfache Nutzung von Keyboard Shortcuts.

Event Handling im Browser

Bei der Eingabe einer Tastenkombination (z.B. Strg + P) wird vom Browser ein KeyDownEvent an das body-Element des DOMs geschickt, das in GWT durch die Klasse RootPanel repräsentiert wird.

Kommandos sind in jadice web toolkit mit den zugehörigen Actions in der Toolbar verknüpft. Um ein Kommando via Shortcut auszuführen, muss daher das KeyDownEvent an die den Button beinhaltende Toolbar weitergereicht werden. Diese Benachrichtigung kann über die Klasse KeyDownEventDispatchingUtil erfolgen (siehe Codebeispiel unten).

Der Shortcut "Strg + P" ist in diversen Browsern mit einem proprietären Druckdialog vorbelegt. Typischerweise soll bei der Verknüpfung eines Shortcuts mit einem jadice web toolkit spezifischen Kommando eine etwaige Vorbelegung ausgeschaltet werden. Die Nutzung des KeyDownEventDispatchingUtil stellt dies sicher.

Definition eines Shortcuts

Das folgende Codebeispiel demonstriert die Verknüpfung des Shortcuts "Strg + P" mit dem PrintStreamCommand aus der Demo Basicviewer.

Einrichten des Shortcuts "Strg + P" für das PrintStreamCommand:

    HorizontalToolbar toolbar = new HorizontalToolbar();
toolbar.add(
new RegisteredAction(description, new KeyStroke(Keys.P, Modifier.CTRL),
new StateEffectIcon(EffectIcons.getEffectIcon(buttonResources.iconDownloadTiff())),
new PrintStreamCommand(Type.TIFF), context);
);
KeyDownEventDispatchingUtil.dispatch(RootPanel.get(), toolbar);

Der Methode KeyDownEventDispatchingUtil.dispatch() werden als Parameter das Quellwidget sowie eine beliebige Anzahl von Zielwidgets übergeben. Alle KeyDownEvents, die dem Quellwidget vom Browser zugestellt werden, werden an die Zielwidgets weitergereicht und können dadurch von den verknüpften Kommandos verarbeitet werden.