You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2010/01/05 17:21:26 UTC

svn commit: r896114 - in /james/hupa/trunk: ./ client/src/main/java/org/apache/hupa/client/ client/src/main/java/org/apache/hupa/client/mvp/ client/src/main/java/org/apache/hupa/client/widgets/ client/war/ client/war/WEB-INF/classes/com/ client/war/WEB...

Author: manolo
Date: Tue Jan  5 16:21:24 2010
New Revision: 896114

URL: http://svn.apache.org/viewvc?rev=896114&view=rev
Log:
Finished the re-factoring of views moving almost everything related with styling to css style-sheet.
Fixed a bug in creating folders, caused by I mistake I did last commit.
Created new widgets to share code in message headers and commands bar.
Modified pom to use gwt-2.0.0 and gwtupload-0.5.6.
Other changes related to the use of deprecated methods

Added:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/CommandsBar.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MessageHeaders.java
    james/hupa/trunk/client/war/WEB-INF/classes/com/
    james/hupa/trunk/client/war/WEB-INF/classes/com/google/
    james/hupa/trunk/client/war/WEB-INF/classes/com/google/gwt/
    james/hupa/trunk/client/war/WEB-INF/classes/com/google/gwt/inject/
    james/hupa/trunk/client/war/favicon.ico   (with props)
    james/hupa/trunk/war   (with props)
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java
Removed:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/HasURL.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/Iframe.java
Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCSS.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MyDialogBox.java
    james/hupa/trunk/client/war/Hupa.css
    james/hupa/trunk/client/war/Hupa.html
    james/hupa/trunk/pom.xml
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Editor.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/EnableHyperlink.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/Loading.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/impl/RndPanelGeneratorImpl.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCSS.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCSS.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCSS.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCSS.java Tue Jan  5 16:21:24 2010
@@ -19,11 +19,13 @@
 
 package org.apache.hupa.client;
 
+import org.apache.hupa.widgets.WidgetsCSS;
+
 
 /**
  * CSS class names used in Hupa
  */
-public class HupaCSS {
+public class HupaCSS extends WidgetsCSS {
     
     public static final String C_app_container ="Hupa";
 
@@ -58,8 +60,18 @@
     public static final String C_msg_search = "hupa-search-box";
 
     public static final String C_msg_top_bar = "hupa-msg-top-bar";
-    public static final String C_msg_bottom_bar = "hupa-msg-bottom-bar";
+    
+    public static final String C_commands_bar = "hupa-commands-bar";
+    
+    public static final String C_msgview_container = "hupa-msgview";
+    public static final String C_msgview_content = "hupa-msgview-content";
+
+    public static final String C_msgsend_container = "hupa-msgsend";
     
     public static final String C_buttons = "hupa-buttons";
+
+    public static final String C_msg_headers = "hupa-msg-headers";
+
+    public static final String C_dialog = "hupa-dialog-box";
     
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java Tue Jan  5 16:21:24 2010
@@ -29,6 +29,7 @@
 import org.apache.hupa.client.bundles.HupaImageBundle;
 import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
 import org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display;
+import org.apache.hupa.client.widgets.CommandsBar;
 import org.apache.hupa.client.widgets.ConfirmDialogBox;
 import org.apache.hupa.client.widgets.DragRefetchPagingScrollTable;
 import org.apache.hupa.client.widgets.EnableButton;
@@ -115,7 +116,7 @@
     private MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(" ,@");
     private SuggestBox searchBox = new SuggestBox(oracle);
     private Button searchButton;
-    private Loading expandLoading;
+    private Loading loading;
     
     @Inject
     public IMAPMessageListView(final PagingScrollTableRowDragController controller, final MessageTableModel mTableModel, final HupaConstants constants, final HupaMessages messages, final HupaImageBundle imageBundle) {
@@ -131,7 +132,7 @@
         noneLink = new Hyperlink(constants.none(),"");
         refreshLink = new Hyperlink(constants.refresh(),"");
         searchButton = new Button(constants.searchButton());
-        expandLoading = new Loading(constants.loading());
+        loading = new Loading(constants.loading());
         this.cTableModel = new CachedTableModel<Message>(mTableModel);
         cTableModel.setRowCount(MutableTableModel.UNKNOWN_ROW_COUNT);
         mTableModel.addRowCountChangeHandler(new RowCountChangeHandler() {
@@ -172,7 +173,7 @@
 
         mailTable.fillWidth();
         
-        pagingBar = new PagingOptions(mailTable, constants, expandLoading);
+        pagingBar = new PagingOptions(mailTable, constants, loading);
         
         HorizontalPanel buttonBar = new HorizontalPanel();
         buttonBar.addStyleName(HupaCSS.C_buttons);
@@ -229,24 +230,14 @@
 
         msgListContainer.add(hPanel);
         
-        HorizontalPanel barPanel = new HorizontalPanel();
-        barPanel.addStyleName(HupaCSS.C_msg_bottom_bar);
+        CommandsBar commandsBar = new CommandsBar();
+        commandsBar.addLeft(new HTML(constants.select() +":"));
+        commandsBar.addLeft(allLink);
+        commandsBar.addLeft(noneLink);
+        commandsBar.add(loading);
+        commandsBar.addRight(pagingBar);
         
-        HorizontalPanel selectionBar = new HorizontalPanel();
-        selectionBar.setSpacing(3);
-        selectionBar.add(new HTML(constants.select() +":"));
-        selectionBar.add(allLink);
-        selectionBar.add(noneLink);
-        barPanel.add(selectionBar);
-        barPanel.setCellHorizontalAlignment(selectionBar, HorizontalPanel.ALIGN_LEFT);
-        
-        barPanel.add(expandLoading);
-        barPanel.setCellHorizontalAlignment(expandLoading, HorizontalPanel.ALIGN_CENTER);
-        
-        barPanel.add(pagingBar);
-        barPanel.setCellHorizontalAlignment(pagingBar, HorizontalPanel.ALIGN_RIGHT);
-        
-        msgListContainer.add(barPanel);
+        msgListContainer.add(commandsBar);
         msgListContainer.add(mailTable);
         
         confirmBox.setText(messages.confirmDeleteMessages());
@@ -801,9 +792,9 @@
 
     public void setExpandLoading(boolean expanding) {
         if (expanding) {
-            expandLoading.show();
+            loading.show();
         } else {
-            expandLoading.hide();
+            loading.hide();
         }
     }
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java Tue Jan  5 16:21:24 2010
@@ -28,10 +28,7 @@
 
 import org.apache.hupa.client.CachingDispatchAsync;
 import org.apache.hupa.client.HupaCallback;
-import org.apache.hupa.client.widgets.HasDialog;
-import org.apache.hupa.client.widgets.HasURL;
 import org.apache.hupa.shared.SConsts;
-import org.apache.hupa.shared.Util;
 import org.apache.hupa.shared.data.IMAPFolder;
 import org.apache.hupa.shared.data.Message;
 import org.apache.hupa.shared.data.MessageAttachment;
@@ -48,30 +45,23 @@
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.user.client.ui.HasHTML;
-import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.Window;
 import com.google.inject.Inject;
 
 public class IMAPMessagePresenter extends WidgetPresenter<IMAPMessagePresenter.Display>{
 
     public interface Display extends WidgetDisplay{
-        public HasText getFrom();
-
-        public HasText getTo();
-
-        public HasText getCc();
-
-        public HasText getSubject();
-        public HasURL getRawMessageURL();
-        public HasDialog getRawMessageDialog();
-        public HasHTML getContent();
+        
+        public void setHeaders(Message msg);
+        public void setAttachments(List<MessageAttachment> attachements, String folder,  long uid);
+        public void setContent(String content);
+        
         public HasClickHandlers getShowRawMessageClick();
         public HasClickHandlers getDeleteButtonClick();
         public HasClickHandlers getReplyButtonClick();
         public HasClickHandlers getReplyAllButtonClick();
         public HasClickHandlers getForwardButtonClick();
         public HasClickHandlers getBackButtonClick();
-        public void setAttachments(List<MessageAttachment> attachements, String folder,  long uid);
     }
 
     private MessageDetails messageDetails;
@@ -98,12 +88,9 @@
     }
 
     private void updateDisplay() {
-        display.getFrom().setText(message.getFrom());
-        display.getCc().setText(Util.listToString(message.getCc()));
-        display.getTo().setText(Util.listToString(message.getTo()));
-        display.getSubject().setText(message.getSubject());
-        display.getContent().setHTML(messageDetails.getText());
         display.setAttachments(messageDetails.getMessageAttachments(), folder.getFullName(),message.getUid());
+        display.setHeaders(message);
+        display.setContent(messageDetails.getText());
     }
 
     @Override
@@ -158,9 +145,7 @@
                 String message_url = GWT.getModuleBaseURL() + SConsts.SERVLET_SOURCE + 
                 "?" + SConsts.PARAM_UID + "=" + message.getUid() + 
                 "&" + SConsts.PARAM_FOLDER + "=" + folder.getFullName();
-                
-                display.getRawMessageURL().setUrl(message_url);
-                display.getRawMessageDialog().center();
+                Window.open(message_url, "_blank", "");
             }
             
         }));

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java Tue Jan  5 16:21:24 2010
@@ -21,49 +21,56 @@
 
 import java.util.List;
 
+import org.apache.hupa.client.HupaCSS;
 import org.apache.hupa.client.HupaConstants;
 import org.apache.hupa.client.bundles.HupaImageBundle;
 import org.apache.hupa.client.mvp.IMAPMessagePresenter.Display;
-import org.apache.hupa.client.widgets.HasDialog;
-import org.apache.hupa.client.widgets.HasURL;
-import org.apache.hupa.client.widgets.Iframe;
-import org.apache.hupa.client.widgets.MyDialogBox;
+import org.apache.hupa.client.widgets.CommandsBar;
+import org.apache.hupa.client.widgets.MessageHeaders;
 import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.Util;
+import org.apache.hupa.shared.data.Message;
 import org.apache.hupa.shared.data.MessageAttachment;
 import org.apache.hupa.widgets.ui.Loading;
 import org.cobogw.gwt.user.client.ui.Button;
-import org.cobogw.gwt.user.client.ui.ButtonBar;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
 import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHTML;
-import com.google.gwt.user.client.ui.HasText;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Hyperlink;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.ScrollPanel;
-import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.inject.Inject;
 
 public class IMAPMessageView extends Composite implements Display{
+
+    public final static int DELETE_BUTTON = 0;
+    public final static int REPLY_BUTTON = 1;
+    public final static int REPLY_ALL_BUTTON = 2;
     
     private HupaImageBundle imageBundle;
-    private Grid detailGrid = new Grid(5, 2);
+
+    private VerticalPanel messageContainer = new VerticalPanel();
+    private MessageHeaders headers;
+    private CommandsBar buttonsBar = new CommandsBar();
+    private HTML msgArea = new HTML();
+    
     private Label from = new Label();
     private Label cc = new Label();
     private Label to = new Label();
     private Label subject = new Label();
-    private HTML msgArea = new HTML();
+    
     private Button deleteMsgButton = new Button();
     private Button replyMsgButton = new Button();
     private Button replyAllMsgButton = new Button();
@@ -71,120 +78,44 @@
     private Hyperlink showRawButton;
     private Hyperlink backButton;
     private FlowPanel attachments = new FlowPanel();
-    private MyDialogBox rawDialogBox = new MyDialogBox();
-    private Iframe rawFrame = new Iframe();
-    public final static int DELETE_BUTTON = 0;
-    public final static int REPLY_BUTTON = 1;
-    public final static int REPLY_ALL_BUTTON = 2;
-    private Loading loading  = new Loading();
-    private SimplePanel container = new SimplePanel();
     
+    private Loading loading;
+
     @Inject
     public IMAPMessageView(HupaConstants constants, HupaImageBundle imageBundle) {
         this.imageBundle = imageBundle;
+        
+        loading = new Loading(constants.loading());
         showRawButton = new Hyperlink(constants.rawButton(),"");
         backButton = new Hyperlink(constants.backButton(),"");
-        final VerticalPanel mPanel = new VerticalPanel();
-        mPanel.setWidth("100%");
-        mPanel.setSpacing(5);
-
-        detailGrid.setWidth("100%");
-        detailGrid.setStyleName("hupa-IMAPMessageWidget-Header");
-        detailGrid.setText(0, 0, constants.headerFrom() + ":");
-        detailGrid.setText(1, 0, constants.headerTo() + ":");
-        detailGrid.setText(2, 0, constants.headerCc() + ":");
-        detailGrid.setText(3, 0, constants.headerSubject() + ":");
-        detailGrid.setText(4, 0, constants.attachments() + ":");
-        detailGrid.setWidget(0, 1, from);
-        detailGrid.setWidget(1, 1, to);
-        detailGrid.setWidget(2, 1, cc);
-        detailGrid.setWidget(3, 1, subject);
-        detailGrid.setWidget(4, 1, attachments);
-        
-        detailGrid.getCellFormatter().setStyleName(0,0,"label");
-        detailGrid.getCellFormatter().setStyleName(0,1,"value");
-        detailGrid.getCellFormatter().setStyleName(1,0,"label");
-        detailGrid.getCellFormatter().setStyleName(1,1,"value");
-        detailGrid.getCellFormatter().setStyleName(2,0,"label");
-        detailGrid.getCellFormatter().setStyleName(2,1,"value");
-        detailGrid.getCellFormatter().setStyleName(3,0,"label");
-        detailGrid.getCellFormatter().setStyleName(3,1,"value");
-        detailGrid.getCellFormatter().setStyleName(4,0,"label");
-        detailGrid.getCellFormatter().setStyleName(4,1,"value");
-
-        detailGrid.getCellFormatter().setVerticalAlignment(0, 0, VerticalPanel.ALIGN_MIDDLE);
-        detailGrid.getCellFormatter().setVerticalAlignment(1, 0, VerticalPanel.ALIGN_MIDDLE);
-        detailGrid.getCellFormatter().setVerticalAlignment(2, 0, VerticalPanel.ALIGN_MIDDLE);
-        detailGrid.getCellFormatter().setVerticalAlignment(3, 0, VerticalPanel.ALIGN_MIDDLE);
-        detailGrid.getCellFormatter().setVerticalAlignment(4, 0, VerticalPanel.ALIGN_TOP);
-        detailGrid.getCellFormatter().setWidth(0, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(1, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(2, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(3, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(4, 0, "100px");
-        
-        mPanel.add(detailGrid);
-
+        headers = new MessageHeaders(constants);
         deleteMsgButton.setText(constants.deleteMailButton());
         replyMsgButton.setText(constants.replyMailButton());
         replyAllMsgButton.setText(constants.replyAllMailButton());
         forwardMsgButton.setText(constants.forwardMailButton());    
         
-        HorizontalPanel buttonPanel = new HorizontalPanel();
-        buttonPanel.setWidth("100%");
-        buttonPanel.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
-        buttonPanel.addStyleName("hupa-IMAPMessageWidget-ButtonBar");
-
-        container.setWidget(showRawButton);
+        messageContainer.addStyleName(HupaCSS.C_msgview_container);
         
-        ButtonBar buttonBar = new ButtonBar();
-        buttonBar.add(replyMsgButton);
-        buttonBar.add(replyAllMsgButton);
-        buttonBar.add(deleteMsgButton);
-        buttonBar.add(forwardMsgButton);
-        buttonBar.setWidth("100%");
-        buttonPanel.add(buttonBar);
+        buttonsBar.add(replyMsgButton);
+        buttonsBar.add(replyAllMsgButton);
+        buttonsBar.add(deleteMsgButton);
+        buttonsBar.add(forwardMsgButton);
+        buttonsBar.add(loading);
+        buttonsBar.add(showRawButton);
+        buttonsBar.add(backButton);
         
-        buttonPanel.add(container);
-        buttonPanel.setCellHorizontalAlignment(container, HorizontalPanel.ALIGN_RIGHT);
-        buttonPanel.add(backButton);
-        buttonPanel.setCellHorizontalAlignment(backButton, HorizontalPanel.ALIGN_RIGHT);
-        mPanel.add(buttonPanel);
-        msgArea.setWidth("100%");
-        ScrollPanel sPanel = new ScrollPanel();
-        sPanel.setAlwaysShowScrollBars(false);
-
-        sPanel.add(msgArea);
-        mPanel.add(sPanel);
-
-        // TODO: put this in css
-        rawFrame.setHeight("600px");
-        rawFrame.setWidth("600px");
-        rawDialogBox.setText(constants.rawTitle());
-        rawDialogBox.add(rawFrame);
-        rawDialogBox.setAnimationEnabled(true);
-        rawDialogBox.setAutoHideEnabled(true);
-        initWidget(mPanel);
-    }
-
-    public HasText getCc() {
-        return cc;
-    }
-
-    public HasHTML getContent() {
-        return msgArea;
-    }
-
-    public HasText getFrom() {
-        return from;
-    }
-
-    public HasText getSubject() {
-        return subject;
-    }
-
-    public HasText getTo() {
-        return to;
+        ScrollPanel scrollPanel = new ScrollPanel();
+        scrollPanel.addStyleName(HupaCSS.C_msgview_content);
+        scrollPanel.setAlwaysShowScrollBars(false);
+        scrollPanel.add(msgArea);
+        
+        messageContainer.add(headers);
+        messageContainer.add(buttonsBar);
+        messageContainer.add(scrollPanel);
+        
+        loading.hide();
+        
+        initWidget(messageContainer);
     }
 
     public Widget asWidget() {
@@ -192,13 +123,11 @@
     }
 
     public void startProcessing() {
-        container.setWidget(loading);
         loading.show();
     }
 
     public void stopProcessing() {
-        container.setWidget(showRawButton);
-        loading.hide();
+        loading.show();
     }
 
     public HasClickHandlers getDeleteButtonClick() {
@@ -208,23 +137,25 @@
     public void setAttachments(List<MessageAttachment> attachements,
             final String folder,
             final long uid) {
+        
         attachments.clear();
+        final Element downloadIframe = RootPanel.get("__download").getElement();
         if (attachements != null) {
             for (int i = 0; i < attachements.size(); i++) {
                 final MessageAttachment a = attachements.get(i);
-                Hyperlink link = new Hyperlink(a.getName() + " (" + a.getSize() / 1024
-                        + "kB)", true, "");
+                Label link = new Label(a.getName() + " (" + a.getSize() / 1024 + "kB)");
+                link.setStyleName(HupaCSS.C_hyperlink);
                 link.addClickHandler(new ClickHandler() {
-
                     public void onClick(ClickEvent event) {
-                         DOM.setElementAttribute(RootPanel.get("__download")
-                                 .getElement(), "src", 
-                                 GWT.getModuleBaseURL() + SConsts.SERVLET_DOWNLOAD 
-                                 + "?" + SConsts.PARAM_NAME + "=" + a.getName() 
-                                 + "&" + SConsts.PARAM_FOLDER + "=" + folder
-                                 + "&" + SConsts.PARAM_UID + "=" + uid);
+                        String url = GWT.getModuleBaseURL() + SConsts.SERVLET_DOWNLOAD 
+                                    + "?" + SConsts.PARAM_NAME + "=" + a.getName() 
+                                    + "&" + SConsts.PARAM_FOLDER + "=" + folder
+                                    + "&" + SConsts.PARAM_UID + "=" + uid;
+                        if (downloadIframe == null)
+                            Window.open(url,"_blank", "");
+                        else
+                            DOM.setElementAttribute(downloadIframe, "src", url);
                     }
-
                 });
                 HorizontalPanel aPanel = new HorizontalPanel();
                 aPanel.add(imageBundle.attachmentIcon().createImage());
@@ -254,12 +185,16 @@
         return showRawButton;
     }
 
-    public HasDialog getRawMessageDialog() {
-        return rawDialogBox;
+    public void setHeaders(Message message) {
+        from.setText(message.getFrom());
+        cc.setText(Util.listToString(message.getCc()));
+        to.setText(Util.listToString(message.getTo()));
+        subject.setText(message.getSubject());
+        headers.setValues(from, to, cc, null, subject, attachments);
     }
-
-    public HasURL getRawMessageURL() {
-        return rawFrame;
+    
+    public void setContent(String content) {
+        msgArea.setHTML(content);
     }
     
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainView.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainView.java Tue Jan  5 16:21:24 2010
@@ -454,14 +454,14 @@
                 if (event.getEventType().equals(EditEvent.EventType.Cancel)) {
                     // remove the folder
                     newItem.remove();
+                    folderTree.setSelectedItem(selected, false);
                 } else if (event.getEventType().equals(EditEvent.EventType.Stop)) {
                     // add the new item to dnd controller 
                     bindDropController(newItem);
+                    // Select the parent folder to avoid an issue in gmail, because
+                    // the new folder takes a while until it is available
+                    folderTree.setSelectedItem(selected, false);
                 }
-                // In both cases, select the parent folder. 
-                // This avoid an issue in creating folder in gmail where the new 
-                // folder takes a while until it is available
-                folderTree.setSelectedItem(selected, false);
             }
 
         });

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java Tue Jan  5 16:21:24 2010
@@ -69,9 +69,9 @@
 
 /**
  * Presenter which handles the sending, reply, replay-all, forward of mails
- *
+ * 
  */
-public class MessageSendPresenter extends WidgetPresenter<MessageSendPresenter.Display>{
+public class MessageSendPresenter extends WidgetPresenter<MessageSendPresenter.Display> {
 
     private DispatchAsync dispatcher;
     private ArrayList<MessageAttachment> attachments = new ArrayList<MessageAttachment>();
@@ -86,7 +86,7 @@
     private OnFinishUploaderHandler onFinishUploadHandler = new OnFinishUploaderHandler() {
         public void onFinish(IUploader uploader) {
             if (uploader.getStatus() == Status.SUCCESS) {
-                String name =  uploader.getInputName();
+                String name = uploader.getInputName();
                 MessageAttachment attachment = new MessageAttachment();
                 attachment.setName(name);
                 attachments.add(attachment);
@@ -94,7 +94,7 @@
             }
         }
     };
-    
+
     private OnStatusChangedHandler onStatusChangedHandler = new OnStatusChangedHandler() {
         public void onStatusChanged(IUploader uploader) {
             Status stat = display.getUploader().getStatus();
@@ -107,39 +107,28 @@
 
     private OnCancelUploaderHandler onCancelUploadHandler = new OnCancelUploaderHandler() {
         public void onCancel(IUploader uploader) {
-            for (MessageAttachment attachment: attachments) {
+            for (MessageAttachment attachment : attachments) {
                 if (attachment.getName().equals(uploader.getInputName()))
                     attachments.remove(attachment);
             }
         }
     };
-    
+
     @Inject
     public MessageSendPresenter(Display display, EventBus eventBus, DispatchAsync dispatcher) {
         super(display, eventBus);
-        this.dispatcher = dispatcher;        
-        
+        this.dispatcher = dispatcher;
+
         FocusAction fAction = new FocusAction();
-        validator.addValidators("cc", new EmailListValidator(display.getCcText())
-                .addActionForFailure(
-                        new StyleAction("hupa-validationErrorBorder"))
-                .addActionForFailure(fAction));
-        validator.addValidators("bcc", new EmailListValidator(display.getBccText())
-                .addActionForFailure(
-                        new StyleAction("hupa-validationErrorBorder"))
-                .addActionForFailure(fAction));
-        validator.addValidators("to", new EmailListValidator(display.getToText())
-                .addActionForFailure(
-                        new StyleAction("hupa-validationErrorBorder"))
-                .addActionForFailure(fAction), new NotEmptyValidator(display.getToText())
-                .addActionForFailure(
-                        new StyleAction("hupa-validationErrorBorder"))
-                .addActionForFailure(fAction));
+        validator.addValidators("cc", new EmailListValidator(display.getCcText()).addActionForFailure(new StyleAction("hupa-validationErrorBorder")).addActionForFailure(fAction));
+        validator.addValidators("bcc", new EmailListValidator(display.getBccText()).addActionForFailure(new StyleAction("hupa-validationErrorBorder")).addActionForFailure(fAction));
+        validator.addValidators("to", new EmailListValidator(display.getToText()).addActionForFailure(new StyleAction("hupa-validationErrorBorder")).addActionForFailure(fAction),
+                new NotEmptyValidator(display.getToText()).addActionForFailure(new StyleAction("hupa-validationErrorBorder")).addActionForFailure(fAction));
     }
 
     /**
      * The Type for which the SendPresenter will get used
-     *
+     * 
      */
     public enum Type {
         /**
@@ -159,22 +148,33 @@
          */
         FORWARD
     }
-    
+
     public interface Display extends WidgetDisplay {
         public HasText getFromText();
+
         public HasText getToText();
+
         public HasText getCcText();
+
         public HasText getBccText();
+
         public HasText getSubjectText();
+
         public HasHTML getMessageHTML();
+
         public HasClickHandlers getSendClick();
+
         public HasEnable getSendEnable();
+
         public IUploader getUploader();
-        public void resetUploader();
+
         public HasClickHandlers getBackButtonClick();
+        
+        public void refresh();
+
         public void setLoading(boolean loading);
     }
-    
+
     @Override
     protected void onBind() {
         registerHandler(eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() {
@@ -182,114 +182,119 @@
             public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) {
                 reset();
             }
-            
+
         }));
         registerHandler(eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
 
             public void onFolderSelectionEvent(FolderSelectionEvent event) {
                 reset();
             }
-            
+
         }));
 
         registerHandler(display.getSendClick().addClickHandler(new ClickHandler() {
 
             public void onClick(ClickEvent event) {
-                
-                    if (validator.validate() == false) {
-                        return;
-                    }
-                    SMTPMessage message = new SMTPMessage();
-                                
-                    message.setFrom(display.getFromText().getText());
-                    
-                    ArrayList<String> to = new ArrayList<String>();
-                    String[] toRaw = display.getToText().getText().split("[,;]+");
-                    if (toRaw != null) {
-                        for (int i = 0; i < toRaw.length;i++) {
-                            String toRecip = toRaw[i].trim();
-                            if (toRecip.length() > 0) {
-                                to.add(toRaw[i].trim());
-                            }
+
+                if (validator.validate() == false) {
+                    return;
+                }
+                SMTPMessage message = new SMTPMessage();
+
+                message.setFrom(display.getFromText().getText());
+
+                ArrayList<String> to = new ArrayList<String>();
+                String[] toRaw = display.getToText().getText().split("[,;]+");
+                if (toRaw != null) {
+                    for (int i = 0; i < toRaw.length; i++) {
+                        String toRecip = toRaw[i].trim();
+                        if (toRecip.length() > 0) {
+                            to.add(toRaw[i].trim());
                         }
                     }
-                    message.setTo(to);
-                    
-                    ArrayList<String> cc = new ArrayList<String>();
-                    String[] ccRaw = display.getCcText().getText().split("[,;]+");
-                    if (ccRaw != null) {
-                        for (int i = 0; i < ccRaw.length;i++) {
-                            String ccRecip = ccRaw[i].trim();
-                            if (ccRecip.length() > 0) {
-                                cc.add(ccRaw[i].trim());
-                            }
+                }
+                message.setTo(to);
+
+                ArrayList<String> cc = new ArrayList<String>();
+                String[] ccRaw = display.getCcText().getText().split("[,;]+");
+                if (ccRaw != null) {
+                    for (int i = 0; i < ccRaw.length; i++) {
+                        String ccRecip = ccRaw[i].trim();
+                        if (ccRecip.length() > 0) {
+                            cc.add(ccRaw[i].trim());
                         }
                     }
-                    message.setCc(cc);
-                    
-                    message.setSubject(display.getSubjectText().getText());
-                    message.setText(display.getMessageHTML().getHTML());
-
-                    message.setMessageAttachments(attachments);
-
-                    // TODO: good handling of error messages, and use an error widget instead of Window.alert
-                    
-                    if (type.equals(Type.NEW)) {
-                        display.setLoading(true);
-
-                        dispatcher.execute(new SendMessage(message), new HupaCallback<GenericResult>(dispatcher, eventBus) {
-                            public void callback(GenericResult result) {
-                                if (result.isSuccess()) {
-                                    eventBus.fireEvent(new SentMessageEvent());
-                                    reset();
-                                } else {
-                                    Window.alert(result.getMessage());
-                                }    
-                                display.setLoading(false);
+                }
+                message.setCc(cc);
+
+                message.setSubject(display.getSubjectText().getText());
+                message.setText(display.getMessageHTML().getHTML());
+
+                message.setMessageAttachments(attachments);
 
+                // TODO: good handling of error messages, and use an error
+                // widget instead of Window.alert
+
+                if (type.equals(Type.NEW)) {
+                    display.setLoading(true);
+
+                    dispatcher.execute(new SendMessage(message), new HupaCallback<GenericResult>(dispatcher, eventBus) {
+                        public void callback(GenericResult result) {
+                            if (result.isSuccess()) {
+                                eventBus.fireEvent(new SentMessageEvent());
+                                reset();
+                            } else {
+                                Window.alert(result.getMessage());
                             }
-                        });
-                    } else if(type.equals(Type.FORWARD)) {
-                        display.setLoading(true);
-
-                        dispatcher.execute(new ForwardMessage(message, folder, oldmessage.getUid()), new HupaCallback<GenericResult>(dispatcher, eventBus) {
-                            public void callback(GenericResult result) {
-                                if (result.isSuccess()) {
-                                    eventBus.fireEvent(new SentMessageEvent());
-                                    reset();
-                                } else {
-                                    Window.alert(result.getMessage());
-                                }    
-                                display.setLoading(false);
+                            display.setLoading(false);
 
+                        }
+                    });
+                } else if (type.equals(Type.FORWARD)) {
+                    display.setLoading(true);
+
+                    dispatcher.execute(new ForwardMessage(message, folder, oldmessage.getUid()), new HupaCallback<GenericResult>(dispatcher, eventBus) {
+                        public void callback(GenericResult result) {
+                            if (result.isSuccess()) {
+                                eventBus.fireEvent(new SentMessageEvent());
+                                reset();
+                            } else {
+                                Window.alert(result.getMessage());
                             }
-                        });
-                    } else if(type.equals(Type.REPLY) || type.equals(Type.REPLY_ALL)) {
-                        display.setLoading(true);
-
-                        dispatcher.execute(new ReplyMessage(message, folder, oldmessage.getUid()), new HupaCallback<GenericResult>(dispatcher, eventBus) {
-                            public void callback(GenericResult result) {
-                                if (result.isSuccess()) {
-                                    eventBus.fireEvent(new SentMessageEvent());
-                                    reset();
-                                } else {
-                                    Window.alert(result.getMessage());
-                                }    
-                                display.setLoading(false);
+                            display.setLoading(false);
+
+                        }
+                    });
+                } else if (type.equals(Type.REPLY) || type.equals(Type.REPLY_ALL)) {
+                    display.setLoading(true);
+
+                    dispatcher.execute(new ReplyMessage(message, folder, oldmessage.getUid()), new HupaCallback<GenericResult>(dispatcher, eventBus) {
+                        public void callback(GenericResult result) {
+                            if (result.isSuccess()) {
+                                eventBus.fireEvent(new SentMessageEvent());
+                                reset();
+                            } else {
+                                Window.alert(result.getMessage());
                             }
-                        });
-                    }
+                            display.setLoading(false);
+                        }
+                    });
                 }
+            }
         }));
-        
+
         registerHandler(display.getBackButtonClick().addClickHandler(new ClickHandler() {
 
             public void onClick(ClickEvent event) {
                 eventBus.fireEvent(new BackEvent());
             }
-            
+
         }));
-        
+
+        display.getUploader().addOnStatusChangedHandler(onStatusChangedHandler);
+        display.getUploader().addOnFinishUploadHandler(onFinishUploadHandler);
+        display.getUploader().addOnCancelUploadHandler(onCancelUploadHandler);
+
         reset();
     }
 
@@ -297,11 +302,7 @@
      * Reset everything
      */
     private void reset() {
-        display.resetUploader();
-        display.getUploader().addOnStatusChangedHandler(onStatusChangedHandler);
-        display.getUploader().addOnFinishUploadHandler(onFinishUploadHandler);
-        display.getUploader().addOnCancelUploadHandler(onCancelUploadHandler);
-        
+        display.getUploader().reset();
         display.getBccText().setText("");
         display.getCcText().setText("");
         display.getToText().setText("");
@@ -312,43 +313,43 @@
         type = Type.NEW;
     }
 
-   
-
     @Override
     protected void onUnbind() {
         // cancel the current upload when unbinding
         display.getUploader().cancel();
     }
-    
+
     /**
      * Bind the given values to this presenter
      * 
-     * @param user the user
-     * @param folder the currently selected folder
-     * @param oldmessage the oldmessage ( if there is any)
-     * @param oldDetails the olddetails ( if there are any)
-     * @param type the type 
+     * @param user
+     *            the user
+     * @param folder
+     *            the currently selected folder
+     * @param oldmessage
+     *            the oldmessage ( if there is any)
+     * @param oldDetails
+     *            the olddetails ( if there are any)
+     * @param type
+     *            the type
      */
     public void revealDisplay(User user, IMAPFolder folder, Message oldmessage, MessageDetails oldDetails, String mailto, Type type) {
+
+        this.reset();
         this.oldmessage = oldmessage;
         this.oldDetails = oldDetails;
         this.folder = folder;
         this.type = type;
-       
+        
         display.getFromText().setText(user.getName());
-        display.getToText().setText("");
-        display.getCcText().setText("");
-        display.getBccText().setText("");
-        display.getSubjectText().setText("");
-        display.getMessageHTML().setHTML("");
 
         if (type.equals(Type.FORWARD)) {
-            if (! oldmessage.getSubject().toLowerCase().startsWith("fwd:"))
+            if (!oldmessage.getSubject().toLowerCase().startsWith("fwd:"))
                 display.getSubjectText().setText("Fwd: " + oldmessage.getSubject());
         } else if (type.equals(Type.REPLY) || type.equals(Type.REPLY_ALL)) {
-            if (! oldmessage.getSubject().toLowerCase().startsWith("re:"))
+            if (!oldmessage.getSubject().toLowerCase().startsWith("re:"))
                 display.getSubjectText().setText("Re: " + oldmessage.getSubject());
-            
+
             if (oldmessage.getReplyto() != null) {
                 display.getToText().setText(oldmessage.getReplyto());
             } else if (type.equals(Type.REPLY)) {
@@ -360,12 +361,16 @@
                 display.getToText().setText(Util.listToString(oldmessage.getTo()));
             }
         }
-        
+
         display.getMessageHTML().setHTML(wrapMessage(oldmessage, oldDetails, type));
-        
+
         if (mailto != null)
             display.getToText().setText(mailto);
+        
+        display.refresh();
+        
         firePresenterChangedEvent();
+        
         revealDisplay();
     }
 
@@ -376,26 +381,26 @@
     public void revealDisplay(User user, String mailto) {
         revealDisplay(user, null, null, null, mailto, Type.NEW);
     }
-    
+
     /**
      * Bind the given user to the presenter
      * 
      * @param user
      */
     public void revealDisplay(User user) {
-        revealDisplay(user,null,null,null, null,Type.NEW);
+        revealDisplay(user, null, null, null, null, Type.NEW);
     }
 
     @Override
     protected void onRevealDisplay() {
         // DO Nothing
     }
-    
+
     private String generateHeader(Message message, Type type) {
         String ret = "<br><br>";
         if (type.equals(Type.FORWARD)) {
             ret += "--------- Forwarded message --------- <br>";
-            ret += "From: " + message.getFrom().replaceAll("<", "&lt;").replaceAll(">", "&gt;") + "<br>"; 
+            ret += "From: " + message.getFrom().replaceAll("<", "&lt;").replaceAll(">", "&gt;") + "<br>";
             ret += "Date: " + message.getReceivedDate() + "<br>";
             ret += "Subject: " + message.getSubject() + "<br>";
             ArrayList<String> to = new ArrayList<String>();
@@ -404,11 +409,12 @@
             ret += "To: " + Util.listToString(to).replaceAll("<", "&lt;").replaceAll(">", "&gt;") + "<br>";
         } else if (type.equals(Type.REPLY) || type.equals(Type.REPLY_ALL)) {
             ret += "On " + message.getReceivedDate();
-            ret += ", " + message.getFrom().replaceAll("<", "&lt;").replaceAll(">", "&gt;"); 
+            ret += ", " + message.getFrom().replaceAll("<", "&lt;").replaceAll(">", "&gt;");
             ret += ". wrote:<br>";
         }
         return ret + "<br>";
     }
+
     private String wrapMessage(Message message, MessageDetails details, Type type) {
         String ret;
         ret = "<font size=2 style='font-family: arial'>";
@@ -420,5 +426,4 @@
         return ret;
     }
 
-    
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java Tue Jan  5 16:21:24 2010
@@ -24,8 +24,11 @@
 import gwtupload.client.IUploader;
 import gwtupload.client.MultiUploader;
 
+import org.apache.hupa.client.HupaCSS;
 import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.client.widgets.CommandsBar;
 import org.apache.hupa.client.widgets.EnableButton;
+import org.apache.hupa.client.widgets.MessageHeaders;
 import org.apache.hupa.shared.SConsts;
 import org.apache.hupa.widgets.editor.Editor;
 import org.apache.hupa.widgets.ui.EnableHyperlink;
@@ -35,10 +38,8 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.HasClickHandlers;
 import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.HasHTML;
 import com.google.gwt.user.client.ui.HasText;
-import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
@@ -50,93 +51,56 @@
  * 
  *
  */
-public class MessageSendView extends Composite implements
-        MessageSendPresenter.Display {
-    private Grid detailGrid = new Grid(6, 3);
+public class MessageSendView extends Composite implements MessageSendPresenter.Display {
+
+    final VerticalPanel sendContainer = new VerticalPanel();
+    
+    private MessageHeaders headers;
+    
+    private Editor editor = new Editor();
+    private CommandsBar buttonsBar = new CommandsBar();
+    
     private Label from = new Label();
     private TextBox to = new TextBox();
     private TextBox cc = new TextBox();
     private TextBox bcc = new TextBox();
     private TextBox subject = new TextBox();
     private MultiUploader uploader = null;
-    private Editor editor = new Editor();
+    
     private EnableButton sendButton;
     private EnableHyperlink backButton;
-    private Loading sendProgress = new Loading();
-    private HupaConstants constants;
-   
+    private Loading loading;
+    
 
     @Inject
     public MessageSendView(HupaConstants constants) {
-        this.constants = constants;
+        
         sendButton = new EnableButton(constants.sendButton());
         backButton = new EnableHyperlink(constants.backButton(),"");
-        final VerticalPanel mPanel = new VerticalPanel();
-        mPanel.setWidth("100%");
-        mPanel.setSpacing(5);
-
-        detailGrid.setWidth("100%");
-        detailGrid.setStyleName("hupa-IMAPMessageWidget-Header");
-        detailGrid.setText(0, 0, constants.headerFrom() + ":");
-        detailGrid.setText(1, 0, constants.headerTo() + ":");
-        detailGrid.setText(2, 0, constants.headerCc() + ":");
-        detailGrid.setText(3, 0, constants.headerBcc() + ":");
-        detailGrid.setText(4, 0, constants.headerSubject() + ":");
-        detailGrid.setText(5, 0, constants.attachments() + ":");
-        detailGrid.setWidget(0, 1, from);
-        detailGrid.setWidget(1, 1, to);
-        detailGrid.setWidget(2, 1, cc);
-        detailGrid.setWidget(3, 1, bcc);
-        detailGrid.setWidget(4, 1, subject);
+        headers = new MessageHeaders(constants);
+        loading = new Loading(constants.loading());
         
-        detailGrid.getCellFormatter().setStyleName(0,0,"label");
-        detailGrid.getCellFormatter().setStyleName(0,1,"value");
-        detailGrid.getCellFormatter().setStyleName(1,0,"label");
-        detailGrid.getCellFormatter().setStyleName(1,1,"value");
-        detailGrid.getCellFormatter().setStyleName(2,0,"label");
-        detailGrid.getCellFormatter().setStyleName(2,1,"value");
-        detailGrid.getCellFormatter().setStyleName(3,0,"label");
-        detailGrid.getCellFormatter().setStyleName(3,1,"value");
-        detailGrid.getCellFormatter().setStyleName(4,0,"label");
-        detailGrid.getCellFormatter().setStyleName(4,1,"value");
-        detailGrid.getCellFormatter().setStyleName(5,0,"label");
-        detailGrid.getCellFormatter().setStyleName(5,1,"value");
-
-        detailGrid.getCellFormatter().setWidth(0, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(1, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(2, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(3, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(4, 0, "100px");
-        detailGrid.getCellFormatter().setWidth(5, 0, "100px");
-
-        from.setWidth("100%");
-        cc.setWidth("100%");
-        bcc.setWidth("100%");
-        to.setWidth("100%");
-
-        subject.setWidth("100%");
-
-        editor.setWidth("100%");
-        editor.setHeight("400px");
-
-        mPanel.add(detailGrid);
-
-        HorizontalPanel buttonBar = new HorizontalPanel();
-        buttonBar.addStyleName("hupa-IMAPMessageWidget-ButtonBar");
-        buttonBar.setWidth("100%");
-        buttonBar.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
-        buttonBar.add(sendButton);
-        buttonBar.add(sendProgress);
-        buttonBar.add(backButton);
-        buttonBar.setCellHorizontalAlignment(backButton, HorizontalPanel.ALIGN_RIGHT);
-
-        mPanel.add(buttonBar);
-
-        mPanel.add(editor);
-        initWidget(mPanel);
+        BaseUploadStatus uploadStatus = new BaseUploadStatus();
+        uploadStatus.setCancelConfiguration(IUploadStatus.GMAIL_CANCEL_CFG);
+        uploader = new MultiUploader(uploadStatus);
+        uploader.setServletPath(GWT.getModuleBaseURL() + SConsts.SERVLET_UPLOAD);
+        uploader.avoidRepeatFiles(true);
+        uploader.setI18Constants(constants);        
         
+        sendContainer.addStyleName(HupaCSS.C_msgsend_container);
+        
+        buttonsBar.add(sendButton);
+        buttonsBar.add(loading);
+        buttonsBar.add(backButton);
+        
+        sendContainer.add(headers);
+        sendContainer.add(buttonsBar);
 
+        sendContainer.add(editor);
 
+        loading.hide();
+
+        initWidget(sendContainer);
     }
 
     /*
@@ -154,11 +118,11 @@
      */ 
     public void setLoading(boolean load) {
         if (load) {
-            sendProgress.show();
+            loading.show();
             sendButton.setEnabled(false);
             backButton.setEnabled(false);
         } else {
-            sendProgress.hide();
+            loading.hide();
             sendButton.setEnabled(true);
             backButton.setEnabled(true);
         }
@@ -229,22 +193,6 @@
         return uploader;
     }
 
-    /* (non-Javadoc)
-     * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#resetUploader()
-     */
-    public void resetUploader() {
-        if (uploader != null && uploader.isAttached())
-            uploader.removeFromParent();
-        
-        BaseUploadStatus uploadStatus = new BaseUploadStatus();
-        uploadStatus.setCancelConfiguration(IUploadStatus.GMAIL_CANCEL_CFG);
-        uploader = new MultiUploader(uploadStatus);
-        uploader.setServletPath(GWT.getModuleBaseURL() + SConsts.SERVLET_UPLOAD);
-        uploader.avoidRepeatFiles(true);
-        uploader.setI18Constants(constants);        
-        
-        detailGrid.setWidget(5, 1, uploader);        
-    }
 
     /*
      * (non-Javadoc)
@@ -262,7 +210,18 @@
         return backButton;
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#getMessageHTML()
+     */
     public HasHTML getMessageHTML() {
         return editor;
     }
+    
+    /* (non-Javadoc)
+     * @see org.apache.hupa.client.mvp.MessageSendPresenter.Display#refresh()
+     */
+    public void refresh() {
+        headers.setValues(from, to, cc, bcc, subject, uploader);
+    }
+
 }

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/CommandsBar.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/CommandsBar.java?rev=896114&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/CommandsBar.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/CommandsBar.java Tue Jan  5 16:21:24 2010
@@ -0,0 +1,71 @@
+package org.apache.hupa.client.widgets;
+
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.widgets.ui.Loading;
+import org.cobogw.gwt.user.client.ui.Button;
+import org.cobogw.gwt.user.client.ui.ButtonBar;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * A panel with three parts, 
+ * left has a button bar
+ * right has a bunch of links 
+ * center has a loading widget
+ */
+public class CommandsBar extends Composite {
+    
+    Grid buttonPanel = new Grid(1, 3);
+    ButtonBar buttonBarLeft = new ButtonBar();
+    ButtonBar buttonBarRight = new ButtonBar();
+    
+    public CommandsBar() {
+        
+        buttonPanel.addStyleName(HupaCSS.C_commands_bar);
+        buttonBarLeft.addStyleName(HupaCSS.C_buttons);
+        buttonBarRight.addStyleName(HupaCSS.C_buttons);
+
+        buttonPanel.setWidget(0, 0, buttonBarLeft);
+        buttonPanel.setWidget(0, 2, buttonBarRight);
+        
+        buttonPanel.getCellFormatter().setWidth(0, 1, "100%"); 
+        buttonPanel.getCellFormatter().setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_CENTER); 
+        buttonPanel.getCellFormatter().setHorizontalAlignment(0, 2, HasHorizontalAlignment.ALIGN_LEFT); 
+
+        initWidget(buttonPanel);
+    }
+    
+    public void add(Widget w) {
+        if (w instanceof Button) {
+            addLeft(w);
+        } else if ( w instanceof Loading) {
+            buttonPanel.setWidget(0, 1, w);
+        } else {
+            addRight(w);
+        }
+    }
+    
+    public void addLeft(Widget w) {
+        buttonBarLeft.add(w);
+    }
+
+    public void addRight(Widget w) {
+        buttonBarRight.add(w);
+    }
+
+    public void clear() {
+        buttonBarLeft.clear();
+        buttonBarRight.clear();
+        buttonPanel.setText(0, 1, "");
+    }
+
+    public boolean remove(Widget w) {
+        return false;
+    }
+    
+    
+    
+}

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MessageHeaders.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MessageHeaders.java?rev=896114&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MessageHeaders.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MessageHeaders.java Tue Jan  5 16:21:24 2010
@@ -0,0 +1,67 @@
+package org.apache.hupa.client.widgets;
+
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.client.HupaConstants;
+
+import com.google.gwt.gen2.table.override.client.FlexTable;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * A panel which displays the headers of a message.
+ */
+public class MessageHeaders extends Composite {
+    
+    private FlexTable detailGrid = new FlexTable();
+    private String headerNames[];
+    private int rowCounter = 0;
+    
+    public MessageHeaders (HupaConstants constants) {
+       headerNames = new String[] {
+                constants.headerFrom(),
+                constants.headerTo(),
+                constants.headerCc(),
+                constants.headerBcc(),
+                constants.headerSubject(),
+                constants.attachments(),
+                "nothing"
+        };
+        detailGrid.setWidth("100%");
+        detailGrid.addStyleName(HupaCSS.C_msg_headers);
+        initWidget(detailGrid);
+    }
+    
+    public void setValues(Widget from, Widget to, Widget cc, Widget bcc, Widget subject, Widget attachments) {
+       addValues(from, to, cc, bcc, subject, attachments);    
+    }
+    
+    private void addValues(Widget...widgets) {
+        detailGrid.clearAll();
+        rowCounter = 0;
+        for (int i=0; i<widgets.length; i++)
+            addRow(headerNames[i], widgets[i]);
+    }
+    
+    private void addRow(String name, Widget widget) {
+        if (widget == null)
+            return;
+        
+        if (widget instanceof TextBox){
+            widget.setWidth("100%");
+        } else if (widget instanceof HasText) {
+            if (((HasText)widget).getText().isEmpty())
+                return;
+        } else if (widget instanceof Panel) {
+            if (((Panel)widget).iterator().hasNext() == false)
+                return;
+        }
+        detailGrid.setText(rowCounter, 0, name + ":");
+        detailGrid.setWidget(rowCounter, 1, widget);
+        detailGrid.getCellFormatter().setStyleName(rowCounter, 0, "label");
+        detailGrid.getCellFormatter().setStyleName(rowCounter, 1, "value");
+        rowCounter ++;
+    }
+}

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MyDialogBox.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MyDialogBox.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MyDialogBox.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/widgets/MyDialogBox.java Tue Jan  5 16:21:24 2010
@@ -1,12 +1,13 @@
 package org.apache.hupa.client.widgets;
 
+import org.apache.hupa.client.HupaCSS;
+
 import com.google.gwt.user.client.ui.DialogBox;
 
 public class MyDialogBox extends DialogBox implements HasDialog{
-    public static final String C_dialog = "hupa-dialog-box";
     public MyDialogBox () {
         super();
-        super.addStyleName(C_dialog);
+        super.addStyleName(HupaCSS.C_dialog);
     }
     
 }

Modified: james/hupa/trunk/client/war/Hupa.css
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/war/Hupa.css?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/war/Hupa.css (original)
+++ james/hupa/trunk/client/war/Hupa.css Tue Jan  5 16:21:24 2010
@@ -29,6 +29,7 @@
 	background: url(images/ajax-loader.gif) no-repeat;
 	padding-left: 25px;
 	width: 100px;
+	height: 14px;
     white-space: nowrap;
     margin-top: 5px;
     margin-left: auto;
@@ -38,9 +39,15 @@
 }
 
 /************[ widget: EnableHyperLink ]*********/
-.hupa-hyperlink {
+.gwt-Hyperlink {
+	color: #0d0eb0;
+	text-decoration: underline;
+	cursor: pointer;
 }
-div.gwt-Hyperlink {
+.hupa-hyperlink .gwt-Hyperlink-disabled {
+	color: #8d8d8d;
+}
+div.gwt-Hyperlink, div.gwt-Anchor {
 	padding-left: 4px;
 }
 
@@ -93,9 +100,7 @@
 	font-weight: bold;
 }
 .hupa-menu-button {
-	margin-right: 20px;
-	text-decoration: underline;
-	cursor: pointer;
+	margin-right: 15px;
 }
 div.hupa-header {
     color: #C5D9FF;
@@ -162,24 +167,27 @@
 	margin-left: 5px;
 }
 
+/************[ widget: CommandsBar ]*********/
+.hupa-commands-bar {
+	width: 100%;
+    padding: 5px 4px 5px 4px;
+    background-color: #deeeff;  
+}
+
 /************[ view: IMAPMessageListView ]*******************/
-.hupa-msglist, .hupa-msg-top-bar, .hupa-msg-bottom-bar, .hupa-msgtable {
+.hupa-msglist, .hupa-msg-top-bar, .hupa-msgtable {
 	width: 100%;
 }
 .hupa-msg-top-bar {
 	padding: 10px 4px 10px 4px;
     background-color: #C3D9FF;	
 }
-.hupa-msg-bottom-bar {
-    padding: 5px 4px 5px 4px;
-    background-color: #deeeff;  
-}
 
 .hupa-msgtable-row {
-    text-align: 				  	left;
-	vertical-align:  				top;
-	padding: 					  	0px 10px 0px 10px;
-	cursor:	        		   		pointer;
+    text-align: left;
+	vertical-align: top;
+	padding: 0px 10px 0px 10px;
+	cursor: pointer;
 }
 .hupa-msgtable-unseen {
     font-weight: bold;
@@ -194,13 +202,13 @@
 	width: 150px;
 }
 
-.hupa-buttons td {
-	padding: 2px;
-}
 .hupa-buttons div {
 	white-space: nowrap;
 	vertical-align: middle;
 }
+.hupa-buttons .gwt-Hyperlink {
+	padding-left: 6px;
+}
 
 .gwt-ListBox, .gwt-SuggestBox {
     background-color:  #d8ecfd;
@@ -211,17 +219,31 @@
     font-size: 10px;
 }
 
-
-
-/************[ view: MessageSendView IMAPMessageView ]*******************/
-/* re-factor unfinished */
-.hupa-IMAPMessageWidget-Header td.label {
+/************[ widget: MessageHeaders ]*******************/
+table.hupa-msg-headers {
+    background-color: #C3D9FF;
+}
+.hupa-msg-headers td.label {
 	width: 175px;
 	text-align: right;
 	font-weight: bold;
 	padding-right: 5px;
 }
 
+/************[ view: IMAPMessageView ]*******************/
+table.hupa-msgview {
+	width: 100%;
+}
+div.hupa-msgview-content {
+	padding: 20px;
+}
+
+/************[ view: MessageSendView ]*******************/
+table.hupa-msgsend {
+	width: 100%;
+}
+
+
 /************************************************************************/
 /*** Non re-factored stuff ***/
 .cbg-ButtonContent {
@@ -236,18 +258,7 @@
 	border:							1pt solid red;
 }
 
-.hupa-IMAPMessageWidget-Header {
-    border:							1pt solid silver;
-    text-align:						left;
-    background-color:				#C3D9FF;
-}
-
 
-.hupa-IMAPMessageWidget-ButtonBar {
-    border-bottom:					1pt solid silver;
-    padding-left:					5px;
-    padding-bottom:					5px;
-}
 
 
 .gwt-ScrollTable .dataTable td {

Modified: james/hupa/trunk/client/war/Hupa.html
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/war/Hupa.html?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/client/war/Hupa.html (original)
+++ james/hupa/trunk/client/war/Hupa.html Tue Jan  5 16:21:24 2010
@@ -9,6 +9,7 @@
 <html>
   <head>
     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    
     <title>Hupa webmail</title>
     
     <!-- define loading style early -->

Added: james/hupa/trunk/client/war/favicon.ico
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/war/favicon.ico?rev=896114&view=auto
==============================================================================
Binary file - no diff available.

Propchange: james/hupa/trunk/client/war/favicon.ico
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: james/hupa/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/hupa/trunk/pom.xml?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/pom.xml (original)
+++ james/hupa/trunk/pom.xml Tue Jan  5 16:21:24 2010
@@ -133,7 +133,7 @@
 	</pluginRepositories>
 
 	<properties>
-		<gwtVersion>1.7.0</gwtVersion>
+		<gwtVersion>2.0.0</gwtVersion>
 	</properties>
 
 	<build>
@@ -324,7 +324,7 @@
 			<dependency>
 				<groupId>gwtupload</groupId>
 				<artifactId>gwtupload</artifactId>
-				<version>0.5.3</version>
+				<version>0.5.6</version>
 			</dependency>
 			<dependency>
 				<groupId>commons-fileupload</groupId>
@@ -366,4 +366,4 @@
 			</dependency>
 		</dependencies>
 	</dependencyManagement>
-</project>
\ No newline at end of file
+</project>

Added: james/hupa/trunk/war
URL: http://svn.apache.org/viewvc/james/hupa/trunk/war?rev=896114&view=auto
==============================================================================
--- james/hupa/trunk/war (added)
+++ james/hupa/trunk/war Tue Jan  5 16:21:24 2010
@@ -0,0 +1 @@
+link client/war
\ No newline at end of file

Propchange: james/hupa/trunk/war
------------------------------------------------------------------------------
    svn:special = *

Added: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java?rev=896114&view=auto
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java (added)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java Tue Jan  5 16:21:24 2010
@@ -0,0 +1,9 @@
+package org.apache.hupa.widgets;
+
+public class WidgetsCSS {
+    
+    public static final String C_hyperlink = "hupa-hyperlink";
+    public static final String C_loading = "hupa-loading";
+    public static String C_hupa_rnd_container = "hupa-rounded";
+
+}

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Editor.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Editor.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Editor.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Editor.java Tue Jan  5 16:21:24 2010
@@ -35,7 +35,7 @@
         area.ensureDebugId("hupa-editor-area");
         // Note: rich-area is created in an iframe, so Hupa's style sheets 
         // are not available, unless we inject them to the generated iframe
-        area.setSize("100%", "20em");
+        area.setSize("100%", "200em");
         
         Toolbar toolbar = new Toolbar(area);
         toolbar.ensureDebugId("hupa-editor-toolbar");

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/EnableHyperlink.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/EnableHyperlink.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/EnableHyperlink.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/EnableHyperlink.java Tue Jan  5 16:21:24 2010
@@ -20,6 +20,8 @@
 package org.apache.hupa.widgets.ui;
 
 
+import org.apache.hupa.widgets.WidgetsCSS;
+
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
 import com.google.gwt.event.shared.HandlerRegistration;
@@ -32,15 +34,24 @@
 
 /**
  * Hyperlink which can get enabled/disabled.
- *
+ * 
+ * CSS rules:
+ * <pre>
+    .hupa-hyperlink .gwt-Hyperlink {
+        color: #0d0eb0;
+        text-decoration: underline;
+        cursor: default; 
+    }
+    .hupa-hyperlink .gwt-Hyperlink-disabled {
+        color: #8d8d8d;
+    }
+ * </pre>
  */
 public class EnableHyperlink extends Composite implements HasClickHandlers,HasHTML,HasText, HasEnable{
     
-    public static final String C_hyperlink = "hupa-hyperlink";
     private SimplePanel panel = new SimplePanel();
     private Hyperlink link;
     private HTML html;
-    
     public EnableHyperlink(String text, String historyToken) {
         this(text,false,historyToken);
     }
@@ -50,8 +61,9 @@
         link = new Hyperlink(text,asHTML,historyToken);
         html = new HTML();
         
-        panel.setStyleName(C_hyperlink);
+        panel.setStyleName(WidgetsCSS.C_hyperlink);
         html.setStyleName(link.getStyleName());
+        html.addStyleDependentName("disabled");
         
         if (asHTML) {
             html.setHTML(text);
@@ -59,11 +71,6 @@
             html.setText(text);
         }
         
-        // mimic hyperlink 
-        html.getElement().getStyle().setProperty("textDecoration", "underline");
-        
-        // use color code to workaround for https://issues.apache.org/jira/browse/HUPA-27
-        html.getElement().getStyle().setProperty("color", "#8d8d8d");
         panel.setWidget(link);
         initWidget(panel);
     }

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/Loading.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/Loading.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/Loading.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/Loading.java Tue Jan  5 16:21:24 2010
@@ -19,6 +19,8 @@
 
 package org.apache.hupa.widgets.ui;
 
+import org.apache.hupa.widgets.WidgetsCSS;
+
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTML;
 
@@ -28,11 +30,9 @@
  */
 public class Loading extends Composite {
     
-    public static final String C_loading = "hupa-loading";
-
     public Loading(String loadingMsg) {
         initWidget(new HTML(loadingMsg));
-        addStyleName(C_loading);
+        addStyleName(WidgetsCSS.C_loading);
     }
     
     public Loading() {

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/impl/RndPanelGeneratorImpl.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/impl/RndPanelGeneratorImpl.java?rev=896114&r1=896113&r2=896114&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/impl/RndPanelGeneratorImpl.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/ui/impl/RndPanelGeneratorImpl.java Tue Jan  5 16:21:24 2010
@@ -19,6 +19,8 @@
 
 package org.apache.hupa.widgets.ui.impl;
 
+import org.apache.hupa.widgets.WidgetsCSS;
+
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Panel;
 
@@ -38,10 +40,8 @@
  */
 public class RndPanelGeneratorImpl implements RndPanelGenerator {
 
-    public static String C_hupa_rnd_container = "hupa-rounded";
-
     public Panel roundPanel(Panel panel) {
-        panel.addStyleName(C_hupa_rnd_container);
+        panel.addStyleName(WidgetsCSS.C_hupa_rnd_container);
         return panel;
     }
 
@@ -50,7 +50,7 @@
             @Override
             public void setStyleName(String style) {
                 super.setStyleName(style);
-                super.addStyleName(C_hupa_rnd_container);
+                super.addStyleName(WidgetsCSS.C_hupa_rnd_container);
             }
         };
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org