forked from GitHub/gf-core
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.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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,58 +89,26 @@ 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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
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);
|
||||
|
||||
translateButton = new Button("Translate");
|
||||
translateButton.setEnabled(false);
|
||||
translateButton.addClickListener(new ClickListener() {
|
||||
public void onClick(Widget sender) {
|
||||
suggestPanel = new SuggestPanel(pgf);
|
||||
suggestPanel.setButtonText("Translate");
|
||||
suggestPanel.addSubmitListener(new SuggestPanel.SubmitListener() {
|
||||
public void onSubmit(String text) {
|
||||
translate();
|
||||
}
|
||||
});
|
||||
|
||||
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);
|
||||
settingsPanel = new SettingsPanel(pgf);
|
||||
settingsPanel.addSettingsListener(new SettingsPanel.SettingsListener() {
|
||||
public void grammarChanged(String pgfName) {
|
||||
updateSelectedGrammar();
|
||||
}
|
||||
public void languagesChanged(List<String> inputLangs, List<String> outputLangs) {
|
||||
updateSelectedLanguages();
|
||||
}
|
||||
public void settingsError(String msg, Throwable e) {
|
||||
showError(msg,e);
|
||||
}
|
||||
});
|
||||
|
||||
outputPanel = new VerticalPanel();
|
||||
outputPanel.addStyleName("my-translations");
|
||||
@@ -195,7 +116,7 @@ public class TranslateApp implements EntryPoint {
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user