TK-UI fournit des implémentations de moteurs CSS qui sont capables d'appliquer des styles CSS à des widgets SWT . Veuillez vous reporter à la section Téléchargement pour télécharger le distribuable du moteur CSS SWT et ses examples.
Cette section explique comment utiliser les moteurs CSS SWT à travers d'exemples simples. Vous pourrez trouvez des exemples plus complexes dans le répertoire test du distribuable org.akrogen.tkui.css.swt* . Il existe deux manières d'appliquer des styles CSS à des widgets SWT :
La section Selectors permet de décrire tous les types de selectors que l'on peut écrire avec des widgets SWT.
Les moteurs CSS SWT sont configurables, veuillez vous reporter à la section CSSEngine API pour plus d'informations.
Label { color:red; } Text { background-color:green; }
Display display = new Display(); // Create SWT CSS Engine CSSEngine engine = new CSSSWTEngineImpl(display); // Parse style sheet engine.parseStyleSheet(new StringReader( "Label {color:red;} Text {background-color:green;}")); /*--- Start UI SWT ---*/ Shell shell = new Shell(display, SWT.SHELL_TRIM); FillLayout layout = new FillLayout(); shell.setLayout(layout); Composite panel1 = new Composite(shell, SWT.NONE); panel1.setLayout(new FillLayout()); // Label Label label1 = new Label(panel1, SWT.NONE); label1.setText("Label 0"); // Text Text text1 = new Text(panel1, SWT.NONE); text1.setText("bla bla bla..."); /*--- End UI SWT ---*/ // Apply Styles engine.applyStyles(shell, true); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose();
label { color:red; } input { background-color:green; }
Display display = new Display(); // Create SWT CSS Engine CSSEngine engine = new CSSSWTHTMLEngineImpl(display); // Parse style sheet engine.parseStyleSheet(new StringReader( "label {color:red;} input {background-color:green;}")); /*--- Start UI SWT ---*/ Shell shell = new Shell(display, SWT.SHELL_TRIM); FillLayout layout = new FillLayout(); shell.setLayout(layout); Composite panel1 = new Composite(shell, SWT.NONE); panel1.setLayout(new FillLayout()); // Label Label label1 = new Label(panel1, SWT.NONE); label1.setText("Label 0"); // Text Text text1 = new Text(panel1, SWT.NONE); text1.setText("bla bla bla..."); /*--- End UI SWT ---*/ // Apply Styles engine.applyStyles(shell, true); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose();
Pour gérer les noms HTML en tant que selector, un mapping entre la widget SWT et le nom HTML est effectué dans la méthode getLocalName de l'instance CSSStylableElement qui wrappe la widget SWT. Voici un tableau du mapping nom HTML/widget SWT:
Nom HTML | Widget SWT |
---|---|
body | org.eclipse.swt.widgets.Shell |
textarea | org.eclipse.swt.widgets.Text : style=SWT.MULTI |
input[type=password] | org.eclipse.swt.widgets.Text : style=SWT.PASSWORD |
input[type=text] | org.eclipse.swt.widgets.Text |
input[type=radio] | org.eclipse.swt.widgets.Button : style=SWT.RADIO |
input[type=checkbox] | org.eclipse.swt.widgets.Button : style=SWT.CHECK |
input[type=button] | org.eclipse.swt.widgets.Button |
select | org.eclipse.swt.widgets.Combo, org.eclipse.swt.custom.CCombo |
label | org.eclipse.swt.widgets.Label |
canva | org.eclipse.swt.widgets.Canvas |
a | org.eclipse.swt.widgets.Link |
div | org.eclipse.swt.widgets.Composite, org.eclipse.swt.widgets.Scrollable |
tree | org.eclipse.swt.widgets.Tree |
listbox | org.eclipse.swt.widgets.Table |
<input type="text" id="MyId" style="color:red;background-color:yellow;" />
var input = document.getElementById('MyId'); input.style.color='red'; input.style.backgroundColor='yellow';
Text text = new Text(parent, SWT.NONE); text.setText("bla bla bla"); text.setData("style", "color:red;background-color:yellow;"); ... engine.applyStyles(shell, true);
Text text = new Text(parent, SWT.NONE); text.setText("bla bla bla"); CSSStylableElement stylableElement = (CSSStylableElement) engine.getElement(text); CSS2Properties style = stylableElement.getStyle(); style.setColor("red"); style.setBackgroundColor("yellow");
Cette section reprend les spécification w3c selector et l'adapte au moteur CSS SWT.
Pattern | Description | Décrit dans la section |
---|---|---|
* | s'applique à n'importe quelle widget SWT. | |
E | s'applique à n'importe quelle widget SWT E. E est défini par le nom de la classe SWT (CSSSWTEngineImpl) ou le nom HTML de la widget (CSSSWTHTMLEngineImpl). | |
E F | s'applique à n'importe quelle widget SWT F qui est descendant d'une widget E (ex : Label contenu dans un Composite). | Descendant selectors |
E:focus, E:hover | s'applique à n'importe quelle widget SWT durant certaines actions utilisateur. | The dynamic pseudo-classes |
E[foo="warning"] | s'applique à n'importe quelle widget SWT E dont l'attribut "foo" à exactement la valeur "warning"). | Attribute selectors |
E.className | s'applique à n'importe quelle widget SWT E qui ont class de nom className. | Class selectors |
E#myid | s'applique à n'importe quelle widget SWT qui ont un id égale à "myid". | ID selectors |
Il est possible d'utiliser des attributs dans les styles CSS avec SWT. Il existe plusieurs type d'attribut :
Button[style='SWT.CHECK'] { color:red; } Button[style='SWT.RADIO'] { color:green; }
Text[editable=true] { color:red; }
Text text = ... text.setData("foo", "warning");
Text[foo="warning"] { color:red; }
Par défaut l'information class est gérée avec la méthode setData de la widget SWT :
.redColor { color:red; } .greenColor { color:green; }
Label label = new Label(parent, SWT.NONE); label.setData("class", "redClass");
Label#MyId { color:red; } Label { color:green; }
Label label = new Label(parent, SWT.NONE); label.setData("id", "MyId");
Text:focus { color:red; } Text:hover { color:green; }