X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/031f1fe05c1a37b94bc0eabd1ef04bbc80cb7140..11c9e6f55ba9759087fcd1e9a0254fe84606c500:/src/gr/grnet/pithos/web/client/TopPanel.java diff --git a/src/gr/grnet/pithos/web/client/TopPanel.java b/src/gr/grnet/pithos/web/client/TopPanel.java index 8e9c05a..24968cf 100644 --- a/src/gr/grnet/pithos/web/client/TopPanel.java +++ b/src/gr/grnet/pithos/web/client/TopPanel.java @@ -34,17 +34,26 @@ */ package gr.grnet.pithos.web.client; +import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.rest.GetRequest; +import gr.grnet.pithos.web.client.rest.RestException; + import com.google.gwt.core.client.GWT; -import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.http.client.Response; import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; @@ -58,117 +67,112 @@ public class TopPanel extends Composite { */ public static final boolean DONE = false; + Pithos app; + /** * An image bundle for this widgets images. */ - public interface Images extends ClientBundle, FileMenu.Images, EditMenu.Images, - SettingsMenu.Images, FilePropertiesDialog.Images, - HelpMenu.Images, LoadingIndicator.Images { - - @Source("gr/grnet/pithos/resources/exit.png") - ImageResource exit(); - - @Source("gr/grnet/pithos/resources/folder_blue.png") - ImageResource folder(); - - @Source("gr/grnet/pithos/resources/edit.png") - ImageResource edit(); - - @Source("gr/grnet/pithos/resources/edit_group.png") - ImageResource group(); - - @Source("gr/grnet/pithos/resources/configure.png") - ImageResource configure(); - - @Source("gr/grnet/pithos/resources/help.png") - ImageResource help(); - - @Source("gr/grnet/pithos/resources/pithos-logo.png") - ImageResource gssLogo(); + public interface Images extends FilePropertiesDialog.Images { - @Source("gr/grnet/pithos/resources/grnet-logo.png") - ImageResource grnetLogo(); + @Source("gr/grnet/pithos/resources/pithos2-logo.png") + ImageResource pithosLogo(); + + @Source("gr/grnet/pithos/resources/desc.png") + ImageResource downArrow(); } /** - * A widget that displays a message indicating that communication with the - * server is underway. - */ - private LoadingIndicator loading; - - /** * The constructor for the top panel. * * @param images the supplied images */ - public TopPanel(final Images images) { - loading = new LoadingIndicator(images); - loading.hide(); + public TopPanel(Pithos _app, final Images images) { + this.app = _app; HorizontalPanel outer = new HorizontalPanel(); - outer.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - MenuBar menu = new MenuBar(); - menu.setWidth("100%"); - menu.setAutoOpen(false); - menu.setAnimationEnabled(true); - menu.setStyleName("toolbarmenu"); - - Command quitCommand = new Command(){ + outer.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + outer.setStyleName("pithos-topPanel"); + + HorizontalPanel inner = new HorizontalPanel(); + inner.setWidth("75%"); + inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM); + + HTML logos = new HTML("
" + AbstractImagePrototype.create(images.pithosLogo()).getHTML() + "
"); + logos.addStyleName("pithos-logo"); + inner.add(logos); + + MenuBar username = new MenuBar(); + username.setStyleName("pithos-usernameMenu"); + + MenuBar userItemMenu = new MenuBar(true); + userItemMenu.addStyleName("pithos-userItemMenu"); + userItemMenu.addItem(new MenuItem("invite friends...", new Command() { + @Override public void execute() { - QuitDialog dlg = new QuitDialog(); - dlg.center(); + GetRequest getInvitations = new GetRequest (Invitations.class, "/im/", "", "invite?format=json") { + + @Override + public void onSuccess(Invitations _result) { + new InvitationsDialog(app, _result).center(); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + if (t instanceof RestException) + app.displayError("Error getting invitations: " + ((RestException) t).getHttpStatusText()); + else + app.displayError("System error getting invitations: " + t.getMessage()); + } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } + }; + getInvitations.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(getInvitations); } - }; - MenuItem quitItem = new MenuItem("
" + - AbstractImagePrototype.create(images.exit()).getHTML() + "Quit
", true, quitCommand); - - MenuItem fileItem = new MenuItem("
" + - AbstractImagePrototype.create(images.folder()).getHTML() + "File
", true, new MenuBar(true)){ + })); + userItemMenu.addItem(new MenuItem("send feedback...", new Command() { + @Override - public MenuBar getSubMenu() { - return new FileMenu(GSS.get(), images); + public void execute() { + new FeedbackDialog(app).center(); } - }; - - MenuItem editItem = new MenuItem("
" + - AbstractImagePrototype.create(images.edit()).getHTML() + "Edit
", true, new MenuBar(true)){ + })); + userItemMenu.addItem(new MenuItem("API access", new Command() { + @Override - public MenuBar getSubMenu() { - return new EditMenu(GSS.get(), images); + public void execute() { + new CredentialsDialog(app, images).center(); } - }; - - menu.addItem(quitItem); - menu.addItem(fileItem); - menu.addItem(editItem); - - outer.setSpacing(2); - outer.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - outer.setCellVerticalAlignment(menu, HasVerticalAlignment.ALIGN_MIDDLE); - outer.add(menu); - outer.setStyleName("toolbar"); - - outer.add(loading); - - HTML logos = new HTML("
" + AbstractImagePrototype.create(images.gssLogo()).getHTML() + - "" + - AbstractImagePrototype.create(images.grnetLogo()).getHTML()+"
"); - outer.add(logos); - - outer.setCellHorizontalAlignment(logos, HasHorizontalAlignment.ALIGN_RIGHT); - + })); + userItemMenu.addItem(new MenuItem("logout", new Command() { + + @Override + public void execute() { + app.logoff(); + } + })); + + MenuItem userItem = new MenuItem(_app.getUsername(), userItemMenu); + userItem.addStyleName("pithos-usernameMenuItem"); + username.addItem(userItem); + username.addSeparator(); + + MenuItem langItem = new MenuItem("en", (Command) null); + langItem.addStyleName("pithos-langMenuItem"); + username.addItem(langItem); + + inner.add(username); + inner.setCellHorizontalAlignment(username, HasHorizontalAlignment.ALIGN_RIGHT); + + outer.add(inner); + outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); + outer.setCellVerticalAlignment(inner, HasVerticalAlignment.ALIGN_BOTTOM); initWidget(outer); } - - - /** - * Retrieve the loading. - * - * @return the loading - */ - public LoadingIndicator getLoading() { - return loading; - } }