Styling
UIStyler / ClientBundle
Das Styling der Komponenten in jadice web toolkit erfolgt wie bei GWT
auch über die Klasse ClientBundle
. Für die einzelnen Komponenten (wie
z.B. Buttons) kommen einzelne CSSResource
s zum Einsatz, die allesamt
in der Klasse UIStyle enthalten sind. Der UIStyler hingegen ist die
allgemeine Schnittstelle, über die die Komponenten ihre CSS-Klassen und
anderweitige Styling bezogene Eigenschaften auslesen.
Möchte man das Styling anpassen oder ein komplett eigenes Design bauen, so erzeugt man eine eigene Instanz, die von UIStyle abgeleitet ist, und setzt diese zu Beginn der GWT-Application im UIStyler über den dortigen Setter:
UIStyler.set(GWT.create(MyUIStyle.class);
Die vorhandenen Styles können weiter verwendet werden, indem die neue Klasse von einer der ausgelieferten Implementierungen (wie DefaultUIStyle) erbt und diejenigen Aspekte überschreibt, die geändert werden sollen.
public interface MyUIStyle extends DefaultUIStyle
{
// Example: Override ViewerBasicStyle with own gss file;
@Override
@Source("com/.../myOwnStyle.gss")
ViewerBasicStyle viewerBasicStyle();
}
Im jadice web toolkit können folgenden Styles überschrieben werden:
Kategorie | Name |
---|---|
Allgemein | DialogStyle |
ViewerBasicStyle | |
BorderBasicStyle | |
VisibleBoundsStyle | |
GalleryNavigationButtonStyle | |
CalibrateResolutionStyle | |
MenuBarStyle | |
ContextMenuStyle | |
ListStyle | |
AnnotationStyle | |
OverlayInformationStyle | |
SelectorStyle | |
CursorStyle | |
Thumbnail | BorderThumbnailStyle |
LabelThumbnailStyle | |
ViewerThumbnailStyle | |
ThumbnailToolStyle | |
LabelThumbnailStyle | |
JadiceButton | JadiceButtonStyle |
JadiceButtonOnPageViewStyle | |
JadiceButtonThumbnailStyle | |
JadiceButtonTextStyle | |
Toolbar | ToolbarHorizontalStyle |
ToolbarStatusbar | |
ToolbarVerticalSubmenuStyle | |
ToolbarSubmenuPopupStyle | |
ToolbarcontentStyle | |
Scrollbar | ScrollbarHorizontalStyle |
ScrollbarVerticalStyle | |
ScrollbarTouchStyle | |
SnapIn | PageLayoutSnapInStyle |
PageSnapInStyle | |
ZoomSnapInStyle | |
Popup | SimplePopupStyle |
PopupWidgetStyle | |
Editor | LineWidthEditorStyle |
ColorEditorStyle | |
FontFaceEditorStyle | |
FontSizeEditorStyle | |
Search | RolloutSearchStyle |
ToolbarSearchStyle | |
AdvancedSearchStyle | |
Offset | DocumentOffsetStyle |
ThumbnailOffsetStyle | |
MessageBox | MessageBoxStyle |
Mehr zur Verwendung von ClientBundles und deren Möglichkeiten siehe Google Developer's Guide - Client Bundle .
Eigene Icons in Buttons
Mittels BasicPageView.setUseIconFont(boolean)
kann allgemein
konfiguriert werden, ob Icon Fonts verwendet werden sollen oder - wie
bisher - PNG Images.
Icon Fonts
In den ausgelieferten JWT-Demos wird ab Version 5.5.0.0 ein Icon Font verwendet. Die Dateien für den JWT Icon Font werden zwischenzeitlich vom jadice web toolkit ausgeliefert. Die folgenden Klassen werden zur Verwendung von Icon Fonts bereitgestellt.
-
Die Klasse ToggleIconFont bildet ein Äquivalent zum StateEffectIcon. Sie kann mit ein oder zwei Icons initialisiert werden. Wird sie mit einem Icon initialisiert, so wird in allen Zuständen dasselbe Icon verwendet. Wird sie mit zwei Icons initialisiert, so wird ein anderes Icon dargestellt, wenn der Button angeklickt wurde. Als Icons werden Implementierungen der Klasse IconFont erwartet.
-
Das Interface IconFont bildet die Grundlage der Einbindung von Icon Fonts. Da Icon Fonts ausschließlich über Styles dargestellt werden, müssen die implementierenden Klassen einzig die Methode
getStyleName()
überschreiben. Diese liefert den Style des Icon Fonts und sorgt dafür, dass das Icon angezeigt wird. Standardmäßig sind zwei Implementierungen der Klasse IconFont vorhanden.-
Das Enum JWTIconFont bildet die einfachste Möglichkeit, den Standardumfang von Icon Font Glyphen zu verwenden. Sie bietet einen Enumwert für alle Glyphen. Solange sich eigene Icon Font CSS-Dateien an die Namensgebung der
jwt-icon-font.css
halten, kann diese Klasse auch für eigene Icon Fonts verwendet werden. Sie liefert für jeden Enumwert eine CSS-Klasse, die dem Schemajad-<name>
folgt. Eine Übersicht der Standardglyphen befindet sich im Showcase. -
Die Klasse BasicIconFont bildet eine einfache Möglichkeit, Glyphen darzustellen, die im Standard Icon Font Glyphensatz nicht enthalten sind. Die Klasse erwartet beim Initialisieren die CSS-Klasse, die beim Aufruf von
getStyleName()
zurückgegeben wird. -
Die Zeichen einer Schriftart können an sich nur eine Farbe haben. Soll nun eine "Glyphe" des Icon Fonts mehrere Farben haben, wird diese bei der Generierung in mehrere Teilglyphen aufgeteilt. Um diese Teilglyphen als eine "Glyphe" darzustellen, gibt es den MulticolorIconFont. Die Methode
getStyleName()
liefert die Basis-CSS-Klasse der Glyphen zurück (z.B. "jwt-anno-pen"). Neben der Basisklasse gibt es noch die Klassen für die Teilpfade der Glyphe. Diese werden dem Konstruktor alspathNames
übergeben und sind über die MethodegetPathNames()
abfragbar. Im folgenden Beispiel wird das Ganze noch etwas veranschaulicht.Das Beispiel zeigt, wie man das Icon für die Freihand-Annotation mit einem dunkelgrauen Stift und einer roten Linie einbinden könnte (mit einem entsprechend generierten Font).
Die CSS Definition dieser Glyphe sähe wie folgt aus:
.jwt-anno-pen .path1:before {
content: "\e90a";
color: #800000;
}
.jwt-anno-pen .path2:before {
content: "\e9a5";
color: #575756;
margin-left: -1em;
}
.jwt-anno-pen .path3:before {
content: "\e9a6";
color: #575756;
margin-left: -1em;
}
Damit die Glyphe richtig angezeigt wird, müsste das generierte HTML wie folgt aussehen:
<span class="jwt-anno-pen">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</span>
Um dieses Zeichen nun darzustellen, müsste man folgenden Code aufrufen:
new ToggleIconFont(new MulticolorIconFont("jwt-anno-pen","path1", "path2","path3"));
Der ToggleIconFont erkennt, wenn die ihm übergebenen Icons vom Type MulticolorIconFont sind und erstellt dann die entsprechenden Kindelemente mit den übergebenen CSS-Klassen.
-
-
Für die Fälle, dass der Icon Font über einen String gefunden werden muss, kann der JWTIconFontMapper als Hilfsklasse verwendet werden. Hier werden standardmäßig einige Mappings von Strings auf Werte des JWTIconFont definiert. Diese können je nach Bedarf entfernt und erweitert werden. Zum Abfragen der Werte bietet die Klasse zwei Methoden. In der Methode
getMappingForName(String)
werden die definierten Mappings durchsucht und falls vorhanden das Richtige zurückgeliefert. Ist kein Mapping vorhanden, wird versucht, überJWTIconFont#valueOf(String)
ein passendes Mapping zu finden. Wird keines gefunden, wirdnull
zurückgegeben. Im Gegensatz dazu liefert die MethodegetMappingForNameWithFallback(String)
bei erfolglosem Mapping das Fallback-Icon zurück.
Integration des JWT Icon Fonts
Um den JWT Icon Font in eine Integration einzubinden, muss die
CSS-Datei, welche vom jadice web toolkit ausgeliefert wird, in der
index.html
eingebunden werden. Hierfür muss die folgende Zeile in den
header-Bereich der index.html
eingefügt werden:
<link rel="stylesheet" type="text/css" href="jwt/fontresources?file=jwt-icon-font/css/jwt-icon-font.css" />
.
Abschließend muss nur noch die ClientConfiguration umgestellt werden:
ClientConfigurationManager.getClientConfiguration().setIsIconFontUsed(true);
Integration eines eigenen Icon Fonts
Um einen eigenen Icon Font einzubinden, müssen die Font-Dateien und die
CSS-Datei unter src/main/webapp
abgelegt werden und die CSS-Datei in
der index.html referenziert werden.
-
Verwendung des Icon Fonts für im jadice web toolkit vordefinierte GUI-Elemente
Soll der Icon Font für die vordefinierten GUI-Elemente verwendet werden, so muss, wie oben beschrieben, die ClientConfiguration umgestellt werden. Zudem kann das Präfix des JWTIconFont-Enums über
JWTIconFont.setStyleclassPrefix(styleclassPrefix);
umgestellt werden. Auf diese Weise lässt sich eine vom Standard abweichende CSS-Definition erreichen. In der CSS-Datei könnte die Klasse für das Icon, das für die Rotation auf 0° verwendet wird, statt
jwt-rotate-0-deg
beispielsweisefa-rotate-0-deg
heißen. Der hintere Teil der Bezeichnung muss jedoch für die Standard-Icons übernommen werden, sofern sie über das Enum aufgerufen werden. Wenn das Setzen des Fonts in der CSS-Datei in einer eigenen CSS-Klasse erfolgt und nicht über CSS-Selektoren passiert, so muss die Klasse separiert im Präfix angegeben werden. Um im resultierenden Stylefa fa-rotate-0-deg
zu setzen muss als Präfixfa fa
gesetzt werden. -
Verwendung des Icon Fonts für nicht im jadice web toolkit vordefinierte GUI-Elemente
Wenn ein Icon Font ausschließlich für nicht vordefinierte GUI-Elemente eingesetzt werden soll, muss die ClientConfiguration nicht umgestellt werden. (Diese sorgt lediglich dafür, dass - abhängig von der Konfiguration - bei den vordefinierten Buttons wahlweise IconFont-Glyphen oder PNG-Icons angezogen werden.) Eigene Icons können nun ganz simpel über die Klasse
BasicIconFont
eingebunden werden. Um beispielsweise ein Herz einzubinden, dessen entsprechende CSS-Klassefa fa-heart
ist, muss lediglichnew ToggleIconFont(new BasicIconFont("fa fa-heart"));
aufgerufen werden. Dieser
ToggleIconFont
kann dann einem anderen Widget als Child-Element hinzugefügt werden. Ein Beispiel für die Einbindung vonFontAwesome
-Icons ist in der Enterprise Demo in den KlassenClassPathDocumentPanel
undEnterpriseDemoMain
zu finden.
PNGs
Ist die Verwendung von herkömmlichen Icons konfiguriert, so ziehen die Buttons und Kontextmenüinhalte die StateEffectIcons aus den verbundenen Actions an. Die DefaultActions nehmen die PNG-Icons vom UI-Styler. Falls der Style von DefaultButtonResources erbt (was in DefaultUIStyle der Fall ist), werden die Icons aus dem Bundle verwendet (und damit direkt mit dem JavaScript zusammen an den Client übertragen). Möchte man eigene Icons integrieren, kann man die Methoden dieses Interfaces in der eigenen Style-Klasse überschreiben.
External Style
Eine weitere Möglichkeit zur Styling des jadice web toolkit besteht
darin, auf die ClientBundle
s zu verzichten und den ExternalUIStyle
einzubinden. Dieser verwendet die serverseitigen Icons und mappt die
Stylenames auf einfache Klassennamen, die dann über eine extern
eingebundene CSS-Datei gestylet werden können.
Der im CSS verwendete Klassenname setzt sich als
$MethodName+”_”+$innername
zusammen, also beispielsweise
.defaultBorderStyle_currentPage
.