diff --git a/src/server/ContentService.hs b/src/server/ContentService.hs
index ef92e8cf9..c0d0a713f 100644
--- a/src/server/ContentService.hs
+++ b/src/server/ContentService.hs
@@ -50,15 +50,21 @@ cgiMain' cache path =
do c <- liftIO $ readCache cache path
mb_command <- liftM (liftM (urlDecodeUnicode . UTF8.decodeString)) (getInput "command")
case mb_command of
+ Just "update_grammar"
+ -> do mb_pgf <- getFile
+ id <- getGrammarId
+ name <- getFileName
+ descr <- getDescription
+ doUpdateGrammar c mb_pgf id name descr
+ Just "delete_grammar"
+ -> do id <- getGrammarId
+ doDeleteGrammar c id
+ Just "grammars"
+ -> doGrammars c
Just "save" -> doSave c =<< getId
Just "load" -> doLoad c =<< getId
Just "search" -> doSearch c =<< getQuery
Just "delete" -> doDelete c =<< getIds
- Just "update_grammar"
- -> do mb_pgf <- getFile
- name <- getFileName
- descr <- getDescription
- doUpdateGrammar c mb_pgf name descr
Just cmd -> throwCGIError 400 "Unknown command" ["Unknown command: " ++ show cmd]
Nothing -> throwCGIError 400 "No command given" ["No command given"]
where
@@ -70,19 +76,71 @@ cgiMain' cache path =
getQuery :: CGI String
getQuery = fmap (fromMaybe "") (getInput "query")
-
+
+ getGrammarId :: CGI String
+ getGrammarId = do
+ mb_url <- getInput "url"
+ return (maybe "null" (reverse . drop 4 . reverse) mb_url)
+
getFile :: CGI (Maybe BS.ByteString)
- getFile = getInputFPS "file"
+ getFile = do
+ getInputFPS "file"
getFileName :: CGI String
getFileName = do
- mb_name <- getInput "name"
+ mb_name0 <- getInput "name"
+ let mb_name | mb_name0 == Just "" = Nothing
+ | otherwise = mb_name0
mb_file <- getInputFilename "file"
return (fromMaybe "" (mb_name `mplus` mb_file))
getDescription :: CGI String
getDescription = fmap (fromMaybe "") (getInput "description")
+doGrammars c = do
+ r <- liftIO $ handleSql (return . Left) $ do
+ s <- query c "call getGrammars()"
+ rows <- collectRows getGrammar s
+ return (Right rows)
+ case r of
+ Right rows -> outputJSONP rows
+ Left e -> throwCGIError 400 "Loading failed" (lines (show e))
+ where
+ getGrammar s = do
+ id <- getFieldValue s "id"
+ name <- getFieldValue s "name"
+ description <- getFieldValue s "description"
+ return $ toJSObject [ ("url", showJSON (addExtension (show (id :: Int)) "pgf"))
+ , ("name", showJSON (name :: String))
+ , ("description", showJSON (description :: String))
+ ]
+
+doUpdateGrammar c mb_pgf id name descr = do
+ r <- liftIO $ handleSql (return . Left) $ do
+ s <- query c ("call updateGrammar("++id++","++toSqlValue name++","++toSqlValue descr++")")
+ [id] <- collectRows (\s -> getFieldValue s "id") s
+ return (Right id)
+ nid <- case r of
+ Right id -> return (id :: Int)
+ Left e -> throwCGIError 400 "Saving failed" (lines (show e))
+ path <- pathTranslated
+ case mb_pgf of
+ Just pgf -> if pgf /= BS.empty
+ then liftIO (BS.writeFile (dropExtension path > addExtension (show nid) "pgf") pgf)
+ else if id == "null"
+ then throwCGIError 400 "Grammar update failed" []
+ else return ()
+ Nothing -> return ()
+ outputHTML ""
+
+doDeleteGrammar c id = do
+ r <- liftIO $ handleSql (return . Left) $ do
+ execute c ("call deleteGrammar("++id++")")
+ return (Right "")
+ case r of
+ Right x -> outputJSONP ([] :: [(String,String)])
+ Left e -> throwCGIError 400 "Saving failed" (lines (show e))
+
doSave c mb_id = do
body <- getBody
r <- liftIO $ handleSql (return . Left) $ do
@@ -151,20 +209,6 @@ doDelete c ids = do
mapM_ (\id -> execute c ("DELETE FROM Documents WHERE id = "++toSqlValue id)) ids
outputJSONP (toJSObject ([] :: [(String,String)]))
-doUpdateGrammar c mb_pgf name descr = do
- r <- liftIO $ handleSql (return . Left) $ do
- s <- query c ("call updateGrammar(null,"++toSqlValue name++","++toSqlValue descr++")")
- [id] <- collectRows (\s -> getFieldValue s "id") s
- return (Right id)
- id <- case r of
- Right id -> return (id :: Int)
- Left e -> throwCGIError 400 "Saving failed" (lines (show e))
- path <- pathTranslated
- case mb_pgf of
- Just pgf -> liftIO (BS.writeFile (path > ".." > "grammars" > addExtension (show id) "pgf") pgf)
- Nothing -> return ()
- outputHTML "
Done.
"
-
dbConnect fpath = do
[host,db,user,pwd] <- fmap words $ readFile fpath
connect host db user pwd
@@ -207,3 +251,13 @@ dbInit c =
" select id;\n"++
" END IF;\n"++
"END")
+ execute c "DROP PROCEDURE IF EXISTS deleteGrammar"
+ execute c ("CREATE PROCEDURE deleteGrammar(IN grammarId INTEGER)\n"++
+ "BEGIN\n"++
+ " DELETE FROM Grammars WHERE id = grammarId;\n"++
+ "END")
+ execute c "DROP PROCEDURE IF EXISTS getGrammars"
+ execute c ("CREATE PROCEDURE getGrammars()\n"++
+ "BEGIN\n"++
+ " SELECT id,name,description FROM Grammars ORDER BY name;\n"++
+ "END")
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java
index a512b0b03..ed5af3faf 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java
@@ -234,7 +234,7 @@ public class BrowsePanel extends Composite {
}
}
- protected class MySettingsListener implements PGFWrapper.SettingsListener {
+ protected class MySettingsListener implements SettingsListener {
private PGFWrapper pgf;
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java
index 504c13879..7ea5d2be6 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java
@@ -28,7 +28,7 @@ public class CompletionOracle extends SuggestOracle {
public CompletionOracle (PGFWrapper pgf, ErrorHandler errorHandler) {
this.pgf = pgf;
this.errorHandler = errorHandler;
- pgf.addSettingsListener(new PGFWrapper.SettingsListener() {
+ pgf.addSettingsListener(new SettingsListener() {
public void onAvailableGrammarsChanged() { clearState(); }
public void onSelectedGrammarChanged() { clearState(); }
public void onInputLanguageChanged() { clearState(); }
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/ContentService.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/ContentService.java
index 42ae897ba..e6f0b5509 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/ContentService.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/ContentService.java
@@ -8,6 +8,11 @@ import com.google.gwt.core.client.*;
public class ContentService {
String contentBaseURL;
+ // Event listeners
+ private List listeners = new LinkedList();
+ private List grammars = null;
+
+
public ContentService(String contentBaseURL) {
this.contentBaseURL = contentBaseURL;
}
@@ -15,6 +20,51 @@ public class ContentService {
public String getBaseURL() {
return contentBaseURL;
}
+
+ public void addSettingsListener(SettingsListener listener) {
+ listeners.add(listener);
+ }
+
+ public void updateAvailableGrammars() {
+ List args = new ArrayList();
+ args.add(new Arg("command", "grammars"));
+ JSONRequestBuilder.sendRequest(contentBaseURL, args, new GrammarsCallback() {
+ public void onResult(IterableJsArray grammars_) {
+ grammars = new ArrayList();
+ for (ContentService.GrammarInfo grammar : grammars_.iterable()) {
+ grammars.add(grammar);
+ }
+
+ for (SettingsListener listener : listeners) {
+ listener.onAvailableGrammarsChanged();
+ }
+ }
+
+ public void onError(Throwable e) {
+ }
+ });
+ }
+
+ public List getGrammars() {
+ return grammars;
+ }
+
+ public interface GrammarsCallback extends JSONCallback> {}
+
+ public static class GrammarInfo extends JavaScriptObject {
+ protected GrammarInfo() { }
+
+ public final native String getURL() /*-{ return this.url; }-*/;
+ public final native String getName() /*-{ return this.name; }-*/;
+ public final native String getDescription() /*-{ return this.description; }-*/;
+ }
+
+ public JSONRequest deleteGrammar(String grammarURL, DeleteCallback callback) {
+ List args = new ArrayList();
+ args.add(new Arg("url", grammarURL));
+ args.add(new Arg("command", "delete_grammar"));
+ return JSONRequestBuilder.sendRequest(contentBaseURL, args, callback);
+ }
public JSONRequest save(Object id, String content, SaveCallback callback) {
List args = new ArrayList();
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/DocumentsPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/DocumentsPanel.java
index c2f5b3844..09acce5f5 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/DocumentsPanel.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/DocumentsPanel.java
@@ -44,7 +44,7 @@ public class DocumentsPanel extends Composite implements HasSelectionHandlers"));
-
- FileUpload fileUpload = new FileUpload();
- fileUpload.setName("file");
- vPanel.add(fileUpload);
-
- vPanel.add(new HTML("
"));
-
- vPanel.add(new Label("Name:"));
- TextBox grammarName = new TextBox();
- grammarName.setName("name");
- grammarName.setWidth("100%");
- vPanel.add(grammarName);
-
- vPanel.add(new HTML("
"));
-
- vPanel.add(new Label("Description:"));
- TextArea grammarDescr = new TextArea();
- grammarDescr.setName("description");
- grammarDescr.setWidth("100%");
- grammarDescr.setHeight("150px");
- vPanel.add(grammarDescr);
-
- VerticalPanel btnPanel = new VerticalPanel();
- btnPanel.setSpacing(3);
- hPanel.add(btnPanel);
-
- btnPanel.add(new Button("Upload", new ClickListener() {
+ Button btnNew = new Button("New Grammar");
+ btnNew.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
- form.submit();
+ if (form == null) {
+ grammarsPanel.insert(new GrammarInfoPanel(null),0);
+ }
}
- }));
- btnPanel.add(new Button("Cancel", new ClickListener() {
- public void onClick(Widget sender) {
- }
- }));
+ });
+ vpanel.add(btnNew);
- initWidget(grammarsPanel);
+ grammarsPanel = new VerticalPanel();
+ grammarsPanel.setWidth("100%");
+ vpanel.add(grammarsPanel);
+
+ initWidget(vpanel);
setStylePrimaryName("my-GrammarsPanel");
+
+ contentService.addSettingsListener(new MySettingsListener());
}
- private class UploadFormHandler implements FormPanel.SubmitHandler, FormPanel.SubmitCompleteHandler {
- public void onSubmit(FormPanel.SubmitEvent event) {
+ private class GrammarInfoPanel extends Composite {
+ public GrammarInfoPanel(final ContentService.GrammarInfo grammar) {
+ final VerticalPanel vpanel = new VerticalPanel();
+
+ if (grammar != null) {
+ FlexTable header = new FlexTable();
+ header.setStylePrimaryName("my-TableHeader");
+ header.setText(0,0,grammar.getName());
+ vpanel.add(header);
+
+ final Image updateButton = new Image("org.grammaticalframework.ui.gwt.EditorApp/grammar-buttons.png",0,0,20,20);
+ updateButton.setTitle("Edit the grammar definition.");
+ updateButton.setStylePrimaryName("toolbar-button");
+ header.setWidget(0,1,updateButton);
+ header.getColumnFormatter().setWidth(1,"20px");
+
+ final Image deleteButton = new Image("org.grammaticalframework.ui.gwt.EditorApp/grammar-buttons.png",20,0,20,20);
+ deleteButton.setTitle("Delete this grammar.");
+ deleteButton.setStylePrimaryName("toolbar-button");
+ header.setWidget(0,2,deleteButton);
+ header.getColumnFormatter().setWidth(2,"20px");
+
+ final Label descr = new Label(grammar.getDescription());
+ descr.setStylePrimaryName("descr-label");
+ vpanel.add(descr);
+
+ updateButton.addClickListener(new ClickListener () {
+ public void onClick(Widget sender) {
+ if (form == null) {
+ vpanel.remove(descr);
+ vpanel.add(form = createUploadForm(grammar));
+ }
+ }
+ });
+
+ deleteButton.addClickListener(new ClickListener () {
+ public void onClick(Widget sender) {
+ contentService.deleteGrammar(grammar.getURL(), new ContentService.DeleteCallback() {
+ public void onResult(ContentService.DeleteResult result) {
+ contentService.updateAvailableGrammars();
+ }
+
+ public void onError(Throwable e) {
+ statusPopup.showError("Delete failed", e);
+ }
+ });
+ }
+ });
+ } else {
+ FlexTable header = new FlexTable();
+ header.setStylePrimaryName("my-TableHeader");
+ header.setText(0,0,"Add New Grammar");
+ vpanel.add(header);
+ vpanel.add(form = createUploadForm(grammar));
+ }
+
+ initWidget(vpanel);
+ setStylePrimaryName("my-GrammarInfoPanel");
}
+
+ public FormPanel createUploadForm(final ContentService.GrammarInfo grammar) {
+ UploadFormHandler uploadFormHandler = new UploadFormHandler();
+
+ final FormPanel form = new FormPanel();
+ form.setWidth("100%");
+ form.setEncoding(FormPanel.ENCODING_MULTIPART);
+ form.setMethod(FormPanel.METHOD_POST);
+ form.setAction(contentService.getBaseURL());
+ form.addSubmitHandler(uploadFormHandler);
+ form.addSubmitCompleteHandler(uploadFormHandler);
+
+ VerticalPanel vPanel = new VerticalPanel();
+ vPanel.setWidth("100%");
+ form.add(vPanel);
+
+ vPanel.add(new HTML(""));
- public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
+ HorizontalPanel hPanel = new HorizontalPanel();
+ hPanel.setSpacing(8);
+ hPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
+ vPanel.add(hPanel);
+
+ final FileUpload fileUpload = new FileUpload();
+ fileUpload.setName("file");
+ hPanel.add(fileUpload);
+
+ hPanel.add(new HTML(" "));
+
+ hPanel.add(new Label("Name:"));
+ final TextBox grammarName = new TextBox();
+ grammarName.setName("name");
+ grammarName.setWidth("300px");
+ hPanel.add(grammarName);
+
+ hPanel.add(new HTML(" "));
+
+ hPanel.add(new Button("Upload", new ClickListener() {
+ public void onClick(Widget sender) {
+ if (grammar == null &&
+ fileUpload.getFilename().equals(""))
+ statusPopup.showError("You must select a file to upload", null);
+ else
+ form.submit();
+ }
+ }));
+ hPanel.add(new Button("Cancel", new ClickListener() {
+ public void onClick(Widget sender) {
+ contentService.updateAvailableGrammars();
+ }
+ }));
+
+ vPanel.add(new Label("Description:"));
+ TextArea grammarDescr = new TextArea();
+ grammarDescr.setName("description");
+ grammarDescr.setWidth("100%");
+ grammarDescr.setHeight("50px");
+ vPanel.add(grammarDescr);
+
+ if (grammar != null) {
+ grammarName.setText(grammar.getName());
+ grammarDescr.setText(grammar.getDescription());
+
+ vPanel.add(new HTML(""));
+ }
+
+ return form;
}
- };
+
+ private class UploadFormHandler implements FormPanel.SubmitHandler, FormPanel.SubmitCompleteHandler {
+ public void onSubmit(FormPanel.SubmitEvent event) {
+ }
+
+ public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
+ contentService.updateAvailableGrammars();
+ }
+ }
+ }
+
+ private class MySettingsListener implements SettingsListener {
+ public void onAvailableGrammarsChanged() {
+ form = null;
+ grammarsPanel.clear();
+ for (ContentService.GrammarInfo grammar : contentService.getGrammars()) {
+ grammarsPanel.add(new GrammarInfoPanel(grammar));
+ }
+ }
+ public void onSelectedGrammarChanged() { }
+ public void onInputLanguageChanged() { }
+ public void onOutputLanguageChanged() { }
+ public void onStartCategoryChanged() { }
+ public void onSettingsError(String msg, Throwable e) { }
+ }
}
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java
index 2c85a4704..9c88da7f6 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java
@@ -100,6 +100,9 @@ public class PGFWrapper {
}
protected void updateSelectedGrammar () {
+ if (grammarURL == null)
+ return;
+
clearCachedInfo();
pgf.grammar(grammarURL, new PGF.GrammarCallback() {
public void onResult(PGF.Grammar grammar) {
@@ -176,7 +179,7 @@ public class PGFWrapper {
public void setPGFName(String pgfName) {
this.pgfName = pgfName;
- this.grammarURL = baseURL + "/" + pgfName;
+ this.grammarURL = (pgfName == null) ? null : baseURL + "/" + pgfName;
this.inputLanguage = null;
this.outputLanguage = null;
this.cat = null;
@@ -263,15 +266,6 @@ public class PGFWrapper {
// Listeners
//
- public interface SettingsListener {
- public void onAvailableGrammarsChanged();
- public void onSelectedGrammarChanged();
- public void onInputLanguageChanged();
- public void onOutputLanguageChanged();
- public void onStartCategoryChanged();
- public void onSettingsError(String msg, Throwable e);
- }
-
public static class SettingsAdapter implements SettingsListener {
public void onAvailableGrammarsChanged() {}
public void onSelectedGrammarChanged() {}
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java
index 25a278650..b364ed0b6 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java
@@ -124,7 +124,7 @@ public class QueryPanel extends Composite {
return queryPanel;
}
- protected class MySettingsListener implements PGFWrapper.SettingsListener {
+ protected class MySettingsListener implements SettingsListener {
public MySettingsListener() {
}
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsListener.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsListener.java
new file mode 100644
index 000000000..494c990f6
--- /dev/null
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsListener.java
@@ -0,0 +1,10 @@
+package org.grammaticalframework.ui.gwt.client;
+
+public interface SettingsListener {
+ public void onAvailableGrammarsChanged();
+ public void onSelectedGrammarChanged();
+ public void onInputLanguageChanged();
+ public void onOutputLanguageChanged();
+ public void onStartCategoryChanged();
+ public void onSettingsError(String msg, Throwable e);
+}
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsPanel.java
index 1ee3f71e1..a5c19bc64 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsPanel.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/SettingsPanel.java
@@ -5,31 +5,29 @@ import com.google.gwt.user.client.ui.*;
public class SettingsPanel extends Composite {
private PGFWrapper pgf;
+ private ContentService contentService;
+ private StatusPopup statusPopup;
private MyListBox grammarBox;
private MyListBox fromLangBox;
private MyListBox toLangBox;
- public SettingsPanel (PGFWrapper pgf) {
- this(pgf, true, true);
- }
-
- public SettingsPanel (PGFWrapper pgf, boolean showPGFName, boolean showOutputLanguage) {
+ public SettingsPanel (PGFWrapper pgf, ContentService contentService, StatusPopup statusPopup) {
this.pgf = pgf;
-
+ this.contentService = contentService;
+ this.statusPopup = statusPopup;
+
HorizontalPanel settingsPanel = new HorizontalPanel();
settingsPanel.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
settingsPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
- if (showPGFName) {
- grammarBox = new MyListBox();
- grammarBox.addChangeListener(new ChangeListener() {
- public void onChange(Widget sender) {
- SettingsPanel.this.pgf.setPGFName(grammarBox.getSelectedValue());
- }
- });
- settingsPanel.add(new FormWidget("Grammar:", grammarBox));
- }
+ grammarBox = new MyListBox();
+ grammarBox.addChangeListener(new ChangeListener() {
+ public void onChange(Widget sender) {
+ SettingsPanel.this.pgf.setPGFName(grammarBox.getSelectedValue());
+ }
+ });
+ settingsPanel.add(new FormWidget("Grammar:", grammarBox));
fromLangBox = new MyListBox();
fromLangBox.addChangeListener(new ChangeListener() {
@@ -39,20 +37,19 @@ public class SettingsPanel extends Composite {
});
settingsPanel.add(new FormWidget("From:", fromLangBox));
- if (showOutputLanguage) {
- toLangBox = new MyListBox();
- toLangBox.addChangeListener(new ChangeListener() {
- public void onChange(Widget sender) {
- SettingsPanel.this.pgf.setOutputLanguage(toLangBox.getSelectedValue());
- }
- });
- settingsPanel.add(new FormWidget("To:", toLangBox));
- }
+ toLangBox = new MyListBox();
+ toLangBox.addChangeListener(new ChangeListener() {
+ public void onChange(Widget sender) {
+ SettingsPanel.this.pgf.setOutputLanguage(toLangBox.getSelectedValue());
+ }
+ });
+ settingsPanel.add(new FormWidget("To:", toLangBox));
initWidget(settingsPanel);
setStylePrimaryName("my-SettingsPanel");
pgf.addSettingsListener(new MySettingsListener());
+ contentService.addSettingsListener(new MySettingsListener());
}
private static class FormWidget extends HorizontalPanel {
@@ -64,11 +61,15 @@ public class SettingsPanel extends Composite {
}
}
- private class MySettingsListener implements PGFWrapper.SettingsListener {
+ private class MySettingsListener implements SettingsListener {
public void onAvailableGrammarsChanged() {
if (grammarBox != null) {
grammarBox.clear();
- grammarBox.addItems(pgf.getGrammars());
+
+ for (ContentService.GrammarInfo grammar : contentService.getGrammars()) {
+ grammarBox.addItem(grammar.getName(), grammar.getURL());
+ }
+ pgf.setPGFName(grammarBox.getSelectedValue());
}
}
public void onSelectedGrammarChanged() {
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java
index ae7e73f4a..9a6b84a8a 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java
@@ -203,7 +203,7 @@ public class TranslateApp implements EntryPoint {
vPanel.setWidth("100%");
vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
vPanel.add(createSuggestPanel());
- vPanel.add(createSettingsPanel());
+ vPanel.add(createSettingsPanel());
vPanel.add(createTranslationsPanel());
return vPanel;
@@ -221,7 +221,7 @@ public class TranslateApp implements EntryPoint {
}
protected Widget createSettingsPanel () {
- return new SettingsPanel(pgf);
+ return new SettingsPanel(pgf, null, statusPopup);
}
protected Widget createTranslationsPanel () {
@@ -276,7 +276,7 @@ public class TranslateApp implements EntryPoint {
// Initialization
//
- protected class MySettingsListener implements PGFWrapper.SettingsListener {
+ protected class MySettingsListener implements SettingsListener {
// Will only happen on load
public void onAvailableGrammarsChanged() {
if (pgf.getPGFName() == null) {
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css
index 45abd36b2..0fd99f8a3 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css
@@ -15,16 +15,6 @@
margin: 0 0.4em;
}
-.my-DocumentsHeader {
- width: 100%;
- background-attachement: scroll;
- background-color: #E5E5E5;
- background-image: url("background.png");
- background-position: 0px -192px;
- background-repeat: repeat-x;
- font-size: 150%;
-}
-
.my-DocumentsTable {
width: 100%;
border: 1px solid #E5E5E5;
@@ -45,6 +35,29 @@
width: 100%;
}
+.my-GrammarInfoPanel {
+ width: 100%;
+ border: 1px solid #E5E5E5;
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.my-GrammarInfoPanel .descr-label {
+ width: 100%;
+ height: 50px;
+ padding: 3px;
+}
+
+.my-TableHeader {
+ width: 100%;
+ background-attachement: scroll;
+ background-color: #E5E5E5;
+ background-image: url("background.png");
+ background-position: 0px -192px;
+ background-repeat: repeat-x;
+ font-size: 150%;
+}
+
.my-EditorPanel {
padding-top: 1em;
padding-bottom: 1em
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/grammar-buttons.png b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/grammar-buttons.png
new file mode 100644
index 000000000..6cb89ca4b
Binary files /dev/null and b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/grammar-buttons.png differ