Skip to content

Instantly share code, notes, and snippets.

@milanaleksic
Last active October 4, 2015 22:27
Show Gist options
  • Save milanaleksic/2708850 to your computer and use it in GitHub Desktop.
Save milanaleksic/2708850 to your computer and use it in GitHub Desktop.
Source of example snippets used in SWT Gui Transformer page: http://milanaleksic.github.com/swt-gui-transformer/
<dependency>
<groupId>net.milanaleksic</groupId>
<artifactId>baobab-core</artifactId>
<version>0.4.1</version>
</dependency>
<dependency>
<groupId>net.milanaleksic</groupId>
<artifactId>baobab-editor</artifactId>
<version>0.4.1</version>
</dependency>
http://maven.milanaleksic.net/release/net/milanaleksic/baobab-core/0.4.1/baobab-core-0.4.1-all.jar
username=User name:
password=Password:
title=Simple username/password form
buttonTitle=Try to login
{
"_type" : "shell",
"_style" : "{dialog_trim}",
"_name" : "myFormShell",
"text" : "[title]",
"size" : "300,120",
"layout" : {
"_type" : "gridLayout",
"numColumns" : 2
},
"_children" : {
"label(_1)" : {
"text" : "[username]",
"layoutData" : "[gridData](end,center,true,false)"
},
"text(usernameBox, {border})" : {
"layoutData" : "[gridData](fill,center,true,false)"
},
"label(_2)" : {
"text" : "[password]",
"layoutData" : "[gridData](end,center,true,false)"
},
"text(passwordBox, {border}|{password})" : {
"layoutData" : "[gridData](fill,center,true,false)"
},
"button(btnLogin, {push})" : {
"text" : "[buttonTitle]",
"layoutData" : {
"_type" : "[gridData](center,center,true,false,2,1)",
"widthHint" : 150
}
}
}
}
package com.foobar;
import com.google.inject.Guice;
import net.milanaleksic.baobab.*;
import net.milanaleksic.baobab.integration.CoreModule;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import javax.inject.Inject;
public class MyForm {
@Inject private Transformer transformer;
@EmbeddedComponent private Text usernameBox;
@EmbeddedComponent private Text passwordBox;
@EmbeddedComponent private Shell myFormShell;
@EmbeddedEventListener(component = "btnLogin", event = SWT.Selection)
private void login() {
MessageBox box = new MessageBox(myFormShell, SWT.ICON_ERROR);
box.setMessage("You entered: username=" + usernameBox.getText() + ", password=" + passwordBox.getText());
box.setText("Information");
box.open();
}
@EmbeddedEventListeners({
@EmbeddedEventListener(component = "usernameBox", event = SWT.Traverse),
@EmbeddedEventListener(component = "passwordBox", event = SWT.Traverse)
})
private void loginOnEnterPressed(Event event) {
if (event.detail == SWT.TRAVERSE_RETURN)
login();
}
public static void main(String[] args) {
MyForm myForm = Guice.createInjector(new CoreModule()).getInstance(MyForm.class);
myForm.transformer.fillManagedForm(myForm).showAndAwaitClosed();
}
}
{
"_type" : "shell",
"_style" : "{dialog_trim}",
"text" : "Text reverser",
"size" : "600,150",
"layout" : {
"_type" : "gridLayout",
"numColumns" : 1
},
"_children" : {
"label(_1)" : {
"text" : "Type some text here:",
"layoutData" : "[gridData](center,center,true,false)"
},
"text(text1, {border})" : {
"layoutData" : "[gridData](fill,center,true,false)"
},
"label(_spacer)" : {},
"label(_2)" : {
"text" : "And the reverse will be shown here:",
"layoutData" : "[gridData](center,center,true,false)"
},
"text(text2, {border}|{read_only})" : {
"layoutData" : "[gridData](fill,center,true,false)"
}
}
}
package com.foobar;
import com.google.inject.Guice;
import net.milanaleksic.baobab.*;
import net.milanaleksic.baobab.integration.CoreModule;
import net.milanaleksic.baobab.model.TransformerModel;
import org.eclipse.swt.SWT;
import javax.inject.Inject;
public class ObservedForm {
@Inject private Transformer transformer;
@TransformerModel(observe = true)
private ObservedFormModel model;
// this method will be executed every time SWT Text component
// we named "text1" in GUI file fires Modify event
@EmbeddedEventListener(component = "text1", event = SWT.Modify)
private void textModified() {
model.setText2(reverse(model.getSourceTextField()));
}
private String reverse(String text) {
if (text.isEmpty())
return "";
char[] chars = text.toCharArray();
StringBuilder builder = new StringBuilder(chars.length);
builder.setLength(chars.length);
for (int i = 0; i < text.length(); i++)
builder.setCharAt(text.length() - i - 1, chars[i]);
return builder.toString();
}
public static void main(String[] args) {
ObservedForm observedForm = Guice.createInjector(new CoreModule()).getInstance(ObservedForm.class);
observedForm.transformer.fillManagedForm(observedForm).showAndAwaitClosed();
}
}
package com.foobar;
import net.milanaleksic.baobab.model.TransformerProperty;
public class ObservedFormModel {
// the following annoation is not needed for a simple binding,
// but shows that that customization is available
@TransformerProperty(component = "text1", value = "text")
private String sourceTextField;
private String text2;
public String getSourceTextField() {
return sourceTextField;
}
// will fire update of SWT component "text2" because it is a
// properly named setter for a field without @TransformerIgnoredProperty
public void setText2(String text2) {
this.text2 = text2;
}
}
<repository>
<id>mavenrepo-maven.milanaleksic.net</id>
<name>MilanAleksic.Net repository for Maven</name>
<url>http://maven.milanaleksic.net/release/</url>
<layout>default</layout>
</repository>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment