summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-11-03 14:42:49 +0000
committerbjorn <bjorn@bringert.net>2008-11-03 14:42:49 +0000
commited05fc771cc53d2ef0da2e252e069b7460f43ebd (patch)
tree73944272921e9c4674dff7df74526804c1919b44 /src
parent770135af5f096ad5ede0ae3a96a221df7fa90fff (diff)
GWT: Refactor TranslateApp to make the suggestion panel and the settings panel separate classes. This makes it possible to reuse them in mosg and fridge.
Diffstat (limited to 'src')
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SettingsPanel.java149
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SuggestPanel.java119
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java137
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/public/Translate.css18
4 files changed, 311 insertions, 112 deletions
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SettingsPanel.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SettingsPanel.java
new file mode 100644
index 000000000..3f52b1fab
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SettingsPanel.java
@@ -0,0 +1,149 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+
+public class SettingsPanel extends Composite {
+
+ private PGF pgf;
+ private PGF.Grammar grammar;
+
+ private GrammarBox grammarBox;
+ private InputLanguageBox fromLangBox;
+ private OutputLanguageBox toLangBox;
+
+ private List<SettingsListener> listeners = new LinkedList<SettingsListener>();
+
+ public SettingsPanel (PGF pgf) {
+ this.pgf = pgf;
+
+ grammarBox = new GrammarBox();
+ grammarBox.addChangeListener(new ChangeListener() {
+ public void onChange(Widget sender) {
+ updateSelectedGrammar();
+ }
+ });
+
+ ChangeListener languageChangeListener = new ChangeListener() {
+ public void onChange(Widget sender) {
+ updateSelectedLanguages();
+ }
+ };
+
+ fromLangBox = new InputLanguageBox();
+ fromLangBox.addChangeListener(languageChangeListener);
+
+ toLangBox = new OutputLanguageBox();
+ toLangBox.addChangeListener(languageChangeListener);
+
+ HorizontalPanel settingsPanel = new HorizontalPanel();
+ settingsPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
+ settingsPanel.add(new Label("Grammar:"));
+ settingsPanel.add(grammarBox);
+ settingsPanel.add(new Label("From:"));
+ settingsPanel.add(fromLangBox);
+ settingsPanel.add(new Label("To:"));
+ settingsPanel.add(toLangBox);
+
+ initWidget(settingsPanel);
+ setStylePrimaryName("my-SettingsPanel");
+ }
+
+ public interface SettingsListener {
+ public void grammarChanged(String pgfName);
+ public void languagesChanged(List<String> inputLangs, List<String> outputLangs);
+ public void settingsError(String msg, Throwable e);
+ }
+
+ public void addSettingsListener(SettingsListener listener) {
+ listeners.add(listener);
+ }
+
+ void fireGrammarChanged() {
+ for (SettingsListener listener : listeners) {
+ listener.grammarChanged(getGrammarName());
+ }
+ }
+
+ void fireLanguagesChanged() {
+ for (SettingsListener listener : listeners) {
+ listener.languagesChanged(getInputLanguages(), getOutputLanguages());
+ }
+ }
+
+ void fireSettingsError(String msg, Throwable e) {
+ for (SettingsListener listener : listeners) {
+ listener.settingsError(msg, e);
+ }
+ }
+
+ //
+ // Grammars
+ //
+
+ public void updateAvailableGrammars() {
+ pgf.listGrammars(new PGF.GrammarNamesCallback() {
+ public void onResult(PGF.GrammarNames grammarNames) {
+ grammarBox.setGrammarNames(grammarNames);
+ // setGrammarNames() picks the first grammar automatically
+ updateSelectedGrammar();
+ }
+
+ public void onError (Throwable e) {
+ fireSettingsError("Error getting grammar list", e);
+ }
+ });
+ }
+
+ private void updateSelectedGrammar() {
+ fireGrammarChanged();
+ updateAvailableLanguages();
+ }
+
+ public PGF.Grammar getGrammar() {
+ return grammar;
+ }
+
+ public String getGrammarName() {
+ return grammarBox.getSelectedGrammar();
+ }
+
+
+ //
+ // Languages
+ //
+
+ public List<String> getInputLanguages() {
+ return fromLangBox.getSelectedValues();
+ }
+
+ public List<String> getOutputLanguages() {
+ return toLangBox.getSelectedValues();
+ }
+
+ private void updateAvailableLanguages() {
+ pgf.grammar(getGrammarName(), new PGF.GrammarCallback() {
+ public void onResult(PGF.Grammar grammar) {
+ SettingsPanel.this.grammar = grammar;
+ fromLangBox.setGrammar(grammar);
+ toLangBox.setGrammar(grammar);
+ updateSelectedLanguages();
+ }
+
+ public void onError (Throwable e) {
+ fireSettingsError("Error getting language information", e);
+ }
+ });
+ }
+
+ private void updateSelectedLanguages() {
+ fireLanguagesChanged();
+ }
+
+}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SuggestPanel.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SuggestPanel.java
new file mode 100644
index 000000000..cfaca58fc
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/SuggestPanel.java
@@ -0,0 +1,119 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.Widget;
+
+public class SuggestPanel extends Composite {
+
+ private CompletionOracle oracle;
+ private SuggestBox suggest;
+ private Button submitButton;
+
+ private List<SubmitListener> listeners = new LinkedList<SubmitListener>();
+
+ public SuggestPanel (PGF pgf) {
+
+ oracle = new CompletionOracle(pgf, new CompletionOracle.ErrorHandler() {
+ public void onError(Throwable e) {
+ GWT.log("Completion failed", e);
+ }
+ });
+
+ suggest = new SuggestBox(oracle);
+ suggest.setLimit(10);
+ suggest.addKeyboardListener(new KeyboardListenerAdapter() {
+ public void onKeyUp (Widget sender, char keyCode, int modifiers) {
+ if (keyCode == KEY_ENTER) {
+ submit();
+ }
+ }
+ });
+
+ submitButton = new Button("Submit");
+ submitButton.setEnabled(false);
+ submitButton.addClickListener(new ClickListener() {
+ public void onClick(Widget sender) {
+ submit();
+ }
+ });
+
+ DockPanel mainPanel = new DockPanel();
+ mainPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
+ mainPanel.add(suggest, DockPanel.CENTER);
+ mainPanel.add(submitButton, DockPanel.EAST);
+
+ initWidget(mainPanel);
+ setStylePrimaryName("my-SuggestPanel");
+
+ }
+
+ public int getLimit() {
+ return suggest.getLimit();
+ }
+
+ public String getText() {
+ return suggest.getText();
+ }
+
+ public String getTitle() {
+ return suggest.getTitle();
+ }
+
+ public void onLoad() {
+ suggest.setFocus(true);
+ }
+
+ public void setButtonText (String text) {
+ submitButton.setText(text);
+ }
+
+ public void setEnabled(boolean enabled) {
+ submitButton.setEnabled(enabled);
+ }
+
+ public void setGrammarName(String pgfName) {
+ oracle.setGrammarName(pgfName);
+ }
+
+ public void setInputLangs(List<String> inputLangs) {
+ oracle.setInputLangs(inputLangs);
+ }
+
+ public void setLimit(int limit) {
+ suggest.setLimit(limit);
+ }
+
+ public void setText (String text) {
+ suggest.setText(text);
+ }
+
+ public void setTitle(String title) {
+ suggest.setTitle(title);
+ }
+
+ public void addSubmitListener(SubmitListener listener) {
+ listeners.add(listener);
+ }
+
+ public void submit() {
+ String text = getText();
+ for (SubmitListener listener : listeners) {
+ listener.onSubmit(text);
+ }
+ }
+
+ public interface SubmitListener {
+ public void onSubmit(String text);
+ }
+
+}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
index 642216d31..a678d435d 100644
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
@@ -1,16 +1,11 @@
package se.chalmers.cs.gf.gwt.client;
+import java.util.List;
+
import com.google.gwt.core.client.EntryPoint;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
-import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
public class TranslateApp implements EntryPoint {
@@ -19,13 +14,8 @@ public class TranslateApp implements EntryPoint {
private PGF pgf;
- private CompletionOracle oracle;
- private SuggestBox suggest;
- private PGF.Grammar grammar;
- private GrammarBox grammarBox;
- private InputLanguageBox fromLangBox;
- private OutputLanguageBox toLangBox;
- private Button translateButton;
+ private SuggestPanel suggestPanel;
+ private SettingsPanel settingsPanel;
private VerticalPanel outputPanel;
private StatusPopup statusPopup;
@@ -36,13 +26,16 @@ public class TranslateApp implements EntryPoint {
private void translate() {
outputPanel.clear();
setStatus("Translating...");
- pgf.translate(getGrammarName(), suggest.getText(), fromLangBox.getSelectedValues(), null,
- toLangBox.getSelectedValues(), new PGF.TranslateCallback() {
+ pgf.translate(settingsPanel.getGrammarName(),
+ suggestPanel.getText(),
+ settingsPanel.getInputLanguages(), null,
+ settingsPanel.getOutputLanguages(),
+ new PGF.TranslateCallback() {
public void onResult (PGF.Translations translations) {
for (PGF.Translation t : translations.iterable()) {
Label l = new Label(t.getText());
l.addStyleName("my-translation");
- PGF.Language lang = grammar.getLanguage(t.getTo());
+ PGF.Language lang = settingsPanel.getGrammar().getLanguage(t.getTo());
if (lang != null) {
l.getElement().setLang(lang.getLanguageCode());
}
@@ -71,59 +64,19 @@ public class TranslateApp implements EntryPoint {
private void clearStatus() {
statusPopup.clearStatus();
}
-
+
//
- // Grammars
+ // Grammars and languages
//
- private String getGrammarName() {
- return grammarBox.getSelectedGrammar();
- }
-
- private void updateAvailableGrammars() {
- pgf.listGrammars(new PGF.GrammarNamesCallback() {
- public void onResult(PGF.GrammarNames grammarNames) {
- grammarBox.setGrammarNames(grammarNames);
- // setGrammarNames() picks the first grammar automatically
- updateSelectedGrammar();
- }
-
- public void onError (Throwable e) {
- showError("Error getting grammar list", e);
- }
- });
- }
-
private void updateSelectedGrammar() {
- oracle.setGrammarName(getGrammarName());
- updateAvailableLanguages();
- }
-
- //
- // Languages
- //
-
- private void updateAvailableLanguages() {
- pgf.grammar(getGrammarName(), new PGF.GrammarCallback() {
- public void onResult(PGF.Grammar grammar) {
- TranslateApp.this.grammar = grammar;
-
- fromLangBox.setGrammar(grammar);
- toLangBox.setGrammar(grammar);
-
- updateSelectedLanguages();
- clearStatus();
- translateButton.setEnabled(true);
- }
-
- public void onError (Throwable e) {
- showError("Error getting language information", e);
- }
- });
+ suggestPanel.setGrammarName(settingsPanel.getGrammarName());
}
private void updateSelectedLanguages() {
- oracle.setInputLangs(fromLangBox.getSelectedValues());
+ suggestPanel.setInputLangs(settingsPanel.getInputLanguages());
+ suggestPanel.setEnabled(true);
+ clearStatus();
translate();
}
@@ -136,66 +89,34 @@ public class TranslateApp implements EntryPoint {
statusPopup = new StatusPopup();
setStatus("Loading...");
- oracle = new CompletionOracle(pgf, new CompletionOracle.ErrorHandler() {
- public void onError(Throwable e) {
- showError("Completion failed", e);
- }
- });
-
- suggest = new SuggestBox(oracle);
- suggest.addKeyboardListener(new KeyboardListenerAdapter() {
- public void onKeyUp (Widget sender, char keyCode, int modifiers) {
- if (keyCode == KEY_ENTER) {
- translate();
- }
+ suggestPanel = new SuggestPanel(pgf);
+ suggestPanel.setButtonText("Translate");
+ suggestPanel.addSubmitListener(new SuggestPanel.SubmitListener() {
+ public void onSubmit(String text) {
+ translate();
}
});
- grammarBox = new GrammarBox();
- grammarBox.addChangeListener(new ChangeListener() {
- public void onChange(Widget sender) {
+ settingsPanel = new SettingsPanel(pgf);
+ settingsPanel.addSettingsListener(new SettingsPanel.SettingsListener() {
+ public void grammarChanged(String pgfName) {
updateSelectedGrammar();
}
- });
-
- ChangeListener languageChangeListener = new ChangeListener() {
- public void onChange(Widget sender) {
+ public void languagesChanged(List<String> inputLangs, List<String> outputLangs) {
updateSelectedLanguages();
}
- };
-
- fromLangBox = new InputLanguageBox();
- fromLangBox.addChangeListener(languageChangeListener);
-
- toLangBox = new OutputLanguageBox();
- toLangBox.addChangeListener(languageChangeListener);
-
- translateButton = new Button("Translate");
- translateButton.setEnabled(false);
- translateButton.addClickListener(new ClickListener() {
- public void onClick(Widget sender) {
- translate();
+ public void settingsError(String msg, Throwable e) {
+ showError(msg,e);
}
});
- HorizontalPanel settingsPanel = new HorizontalPanel();
- settingsPanel.addStyleName("my-settingsPanel");
- settingsPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
- settingsPanel.add(new Label("Grammar:"));
- settingsPanel.add(grammarBox);
- settingsPanel.add(new Label("From:"));
- settingsPanel.add(fromLangBox);
- settingsPanel.add(new Label("To:"));
- settingsPanel.add(toLangBox);
- settingsPanel.add(translateButton);
-
outputPanel = new VerticalPanel();
outputPanel.addStyleName("my-translations");
VerticalPanel vPanel = new VerticalPanel();
vPanel.setWidth("100%");
vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
- vPanel.add(suggest);
+ vPanel.add(suggestPanel);
vPanel.add(settingsPanel);
vPanel.add(outputPanel);
@@ -210,7 +131,7 @@ public class TranslateApp implements EntryPoint {
public void onModuleLoad() {
pgf = new PGF(pgfBaseURL);
createTranslationUI();
- updateAvailableGrammars();
+ settingsPanel.updateAvailableGrammars();
}
}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/public/Translate.css b/src/server/gwt/src/se/chalmers/cs/gf/gwt/public/Translate.css
index 5b5d22023..9a904c228 100644
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/public/Translate.css
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/public/Translate.css
@@ -1,12 +1,22 @@
/** Add css rules here for your application. */
-.gwt-SuggestBox {
- width: 70%;
- font-size: 150%;
+.my-SuggestPanel {
margin: 1em 0 0.5em 0;
}
-.my-settingsPanel * {
+.my-SuggestPanel .gwt-SuggestBox {
+ width: 400px;
+ font-size: 150%;
+ margin: 0;
+}
+
+.my-SuggestPanel .gwt-Button {
+ font-size: 150%;
+ margin: 0;
+ margin-left: 2px;
+}
+
+.my-SettingsPanel * {
margin: 0 0.4em;
}