diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java
index b4917c4ca..949550612 100644
--- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java
@@ -12,7 +12,7 @@ import com.google.gwt.event.shared.*;
public class EditorApp implements EntryPoint {
protected static final String pgfBaseURL = "/grammars";
- protected static final String contentBaseURL = "/content.fcgi";
+ protected static final String contentBaseURL = "/grammars.content";
protected ContentService contentService;
protected PGFWrapper pgf;
@@ -22,6 +22,7 @@ public class EditorApp implements EntryPoint {
protected BrowsePanel browsePanel;
protected QueryPanel queryPanel;
protected DocumentsPanel documentsPanel;
+ protected GrammarsPanel grammarsPanel;
protected StatusPopup statusPopup;
protected TextInputPanel textPanel;
protected FridgeBagPanel bagPanel;
@@ -205,6 +206,7 @@ public class EditorApp implements EntryPoint {
browsePanel = createBrowsePanel();
queryPanel = createQueryPanel();
documentsPanel = createDocumentsPanel();
+ grammarsPanel = createGrammarsPanel();
VerticalPanel vPanel = new VerticalPanel();
vPanel.setWidth("100%");
@@ -315,6 +317,10 @@ public class EditorApp implements EntryPoint {
return panel;
}
+ protected GrammarsPanel createGrammarsPanel() {
+ return new GrammarsPanel(pgf, contentService, statusPopup);
+ }
+
protected TabBar createLinksPanel(final Panel parent) {
tabBar = new TabBar();
tabBar.setStylePrimaryName("my-LinksPanel");
@@ -322,6 +328,7 @@ public class EditorApp implements EntryPoint {
tabBar.addTab("Editor");
tabBar.addTab("Query");
tabBar.addTab("Browse");
+ tabBar.addTab("Grammars");
NavigationHandler handler = new NavigationHandler(tabBar, parent);
tabBar.addSelectionHandler(handler);
@@ -349,6 +356,7 @@ public class EditorApp implements EntryPoint {
parent.remove(editorPanel);
parent.remove(queryPanel);
parent.remove(browsePanel);
+ parent.remove(grammarsPanel);
switch (event.getSelectedItem().intValue()) {
case 0: parent.add(documentsPanel);
@@ -363,6 +371,9 @@ public class EditorApp implements EntryPoint {
case 3: parent.add(browsePanel);
if (level == 0) History.newItem("browse", false);
break;
+ case 4: parent.add(grammarsPanel);
+ if (level == 0) History.newItem("grammars", false);
+ break;
}
}
@@ -382,6 +393,8 @@ public class EditorApp implements EntryPoint {
} else if (token.startsWith("browse:")) {
linksPanel.selectTab(3);
browsePanel.browse(token.substring(7));
+ } else if (token.equals("grammars")) {
+ linksPanel.selectTab(4);
}
level--;
diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/GrammarsPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/GrammarsPanel.java
new file mode 100644
index 000000000..0e7a8195f
--- /dev/null
+++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/GrammarsPanel.java
@@ -0,0 +1,92 @@
+package org.grammaticalframework.ui.gwt.client;
+
+import java.util.*;
+import com.google.gwt.user.client.*;
+import com.google.gwt.user.client.ui.*;
+import com.google.gwt.http.client.*;
+import com.google.gwt.xml.client.*;
+import com.google.gwt.event.logical.shared.*;
+import com.google.gwt.event.dom.client.*;
+import com.google.gwt.event.shared.*;
+
+public class GrammarsPanel extends Composite {
+
+ private PGFWrapper pgf;
+ private ContentService contentService;
+ private StatusPopup statusPopup;
+ private FlexTable table;
+ private ArrayList documentIds = new ArrayList();
+
+ public GrammarsPanel(PGFWrapper pgf, ContentService contentService, StatusPopup statusPopup) {
+ this.pgf = pgf;
+ this.contentService = contentService;
+ this.statusPopup = statusPopup;
+
+ HorizontalPanel grammarsPanel = new HorizontalPanel();
+
+ UploadFormHandler uploadFormHandler = new UploadFormHandler();
+
+ final FormPanel form = new FormPanel();
+ form.setEncoding(FormPanel.ENCODING_MULTIPART);
+ form.setMethod(FormPanel.METHOD_POST);
+ form.setAction(contentService.getBaseURL());
+ form.addSubmitHandler(uploadFormHandler);
+ form.addSubmitCompleteHandler(uploadFormHandler);
+ grammarsPanel.add(form);
+
+ HorizontalPanel hPanel = new HorizontalPanel();
+ hPanel.setSpacing(8);
+ form.add(hPanel);
+
+ VerticalPanel vPanel = new VerticalPanel();
+ hPanel.add(vPanel);
+
+ vPanel.add(new HTML(""));
+
+ 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() {
+ public void onClick(Widget sender) {
+ form.submit();
+ }
+ }));
+ btnPanel.add(new Button("Cancel", new ClickListener() {
+ public void onClick(Widget sender) {
+ }
+ }));
+
+ initWidget(grammarsPanel);
+ setStylePrimaryName("my-GrammarsPanel");
+ }
+
+ private class UploadFormHandler implements FormPanel.SubmitHandler, FormPanel.SubmitCompleteHandler {
+ public void onSubmit(FormPanel.SubmitEvent event) {
+ }
+
+ public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
+ }
+ };
+}
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 7215b720a..45abd36b2 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
@@ -40,6 +40,11 @@
background-color: rgb(147, 194, 241);
}
+.my-GrammarsPanel {
+ padding: 1em;
+ width: 100%;
+}
+
.my-EditorPanel {
padding-top: 1em;
padding-bottom: 1em