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/14 18:12:15 UTC

svn commit: r899307 - in /james/hupa/trunk: client/src/main/java/org/apache/hupa/client/ client/src/main/java/org/apache/hupa/client/mvp/ widgets/src/main/java/org/apache/hupa/widgets/editor/ widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/

Author: manolo
Date: Thu Jan 14 17:12:14 2010
New Revision: 899307

URL: http://svn.apache.org/viewvc?rev=899307&view=rev
Log:
Changed 'ugly' pop-up selectors in message editor in favor of color-picker and font-picker

Added:
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ColorPicker.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/FontPicker.java
Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants_es.properties
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendView.java
    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/editor/Toolbar.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ToolbarConstants.java
    james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/ToolbarImages.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties?rev=899307&r1=899306&r2=899307&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties Thu Jan 14 17:12:14 2010
@@ -42,23 +42,10 @@
 #editor_superscript = Toggle Superscript
 #editor_ul = Insert Unordered List
 #editor_underline = Toggle Underline
-#editor_color = Color
-#editor_black = Black
-#editor_white = White
-#editor_red = Red
-#editor_green = Green
-#editor_yellow = Yellow
-#editor_blue = Blue
-#editor_font = Font
-#editor_normal = Normal
-#editor_size = Size
-#editor_xxsmall = XX-Small
-#editor_xsmall = X-Small
-#editor_small = Small
-#editor_medium = Medium
-#editor_large = Large
-#editor_xlarge = X-Large
-#editor_xxlarge = XX-Large
+#editor_background = Background color
+#editor_foreground = Foreground color
+#editor_font = Font name
+#editor_size = Font size
 
 usernameLabel=Username:
 passwordLabel=Password:

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants_es.properties
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants_es.properties?rev=899307&r1=899306&r2=899307&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants_es.properties (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants_es.properties Thu Jan 14 17:12:14 2010
@@ -39,23 +39,10 @@
 editor_superscript = Superíndice
 editor_ul = Lista no ordenada
 editor_underline = Subrayado
-editor_color = Color
-editor_black = Negro
-editor_white = Blanco
-editor_red = Rojo
-editor_green = Verde
-editor_yellow = Amarillo
-editor_blue = Azul
-editor_font = Fuente
-editor_normal = Normal
-editor_size = Tamaño
-editor_xxsmall = Enana
-editor_xsmall = Muy pequeña
-editor_small = Pequeña
-editor_medium = Mediana
-editor_large = Grande
-editor_xlarge = Muy grande
-editor_xxlarge = Enorme
+editor_background = Color de fondo
+editor_foreground = Color de la ruente
+editor_font = Tipo de fuente
+editor_size = Tamaño de la fuente
 
 usernameLabel=Nombre de Usuario:
 passwordLabel=Contraseña:

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=899307&r1=899306&r2=899307&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 Thu Jan 14 17:12:14 2010
@@ -58,7 +58,7 @@
     
     private MessageHeaders headers;
     
-    private Editor editor = new Editor();
+    private Editor editor;
     private CommandsBar buttonsBar = new CommandsBar();
     
     private Label from = new Label();
@@ -80,6 +80,7 @@
         backButton = new EnableHyperlink(constants.backButton(),"");
         headers = new MessageHeaders(constants);
         loading = new Loading(constants.loading());
+        editor = new Editor(constants);
         
         BaseUploadStatus uploadStatus = new BaseUploadStatus();
         uploadStatus.setCancelConfiguration(IUploadStatus.GMAIL_CANCEL_CFG);

Added: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ColorPicker.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ColorPicker.java?rev=899307&view=auto
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ColorPicker.java (added)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ColorPicker.java Thu Jan 14 17:12:14 2010
@@ -0,0 +1,146 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+/**
+ * Much of this code has been taken from the GWT Showcase example
+ * which is licensed under Apache License v2.0
+ * 
+ * This class is necessary while GWT library doesn't provide any 
+ * toolbar to be used with its RichTextArea widget.
+ */
+package org.apache.hupa.widgets.editor;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.dom.client.MouseOverHandler;
+import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.PopupPanel;
+
+/**
+ * Color picker for rich editor
+ */
+public class ColorPicker extends PopupPanel implements ClickHandler, HasValueChangeHandlers<ColorPicker>  {
+    
+    private class ColorCell extends Label {
+        String rgbColor; 
+        public ColorCell(long color) {
+            this(Long.toHexString(color));
+        }
+        
+        public ColorCell(String color) {
+            super();
+            setColor(color);
+            setTitle(rgbColor);
+            setSize("14px", "12px");
+            DOM.setStyleAttribute(getElement(), "backgroundColor", rgbColor);
+            setBorderColor("#cccccc");
+            addMouseOverHandler(new MouseOverHandler() {
+                public void onMouseOver(MouseOverEvent event) {
+                  setBorderColor("#ffffff");
+                }
+            });
+            addMouseOutHandler(new MouseOutHandler() {
+                public void onMouseOut(MouseOutEvent event) {
+                    setBorderColor("#cccccc");
+                }
+            });
+        }
+        
+        public String getColor() {
+            return rgbColor;
+        }
+
+        public void setBorderColor(String color) {
+            DOM.setStyleAttribute(getElement(), "border", "1px solid " + color);
+        }
+        
+        void setColor(String s){
+            while(s.length()<6) s= "0" + s;
+            rgbColor="#" + s;
+        }
+    }
+    
+    ValueChangeHandler<ColorPicker> changeHandler = null;
+
+    private String color = "";
+    
+    long[] colors = new long[] {
+        0xffffff, 0xcccccc, 0xc0c0c0, 0x999999, 0x666666, 0x333333, 0x000000,
+        0xffcccc, 0xff6666, 0xff0000, 0xcc0000, 0x990000, 0x660000, 0x330000,
+        0xffcc99, 0xff9966, 0xff9900, 0xfd6500, 0xcb6500, 0x983200, 0x653200,
+        0xffff99, 0xffff66, 0xffcc66, 0xfdcb32, 0xcb9832, 0x986532, 0x653232,
+        0xffffcc, 0xffff33, 0xffff00, 0xfdcb00, 0x989800, 0x656500, 0x323200,
+        0x99ff99, 0x66ff99, 0x33ff33, 0x32cb00, 0x009800, 0x006500, 0x003200,
+        0x99ffff, 0x33ffff, 0x66cccc, 0x00cbcb, 0x329898, 0x326565, 0x003232,
+        0xccffff, 0x66ffff, 0x33ccff, 0x3265fd, 0x3232fd, 0x000098, 0x000065,
+        0xccccff, 0x9999ff, 0x6666cc, 0x6532fd, 0x6500cb, 0x323298, 0x320098,
+        0xffccff, 0xff99ff, 0xcc66cc, 0xcb32cb, 0x983298, 0x653265, 0x320032,
+    };
+    
+    public ColorPicker() {
+        super(true);
+        FlexTable t = new FlexTable();
+        t.setCellPadding(0);
+        t.setCellSpacing(0);
+        DOM.setStyleAttribute(t.getElement(), "border", "1px solid #cccccc");
+
+        int i=0;
+        for (int r=0; i<colors.length; r++) {
+            for (int c=0; c<7 && i<colors.length; c++, i++) {
+                ColorCell cell = new ColorCell(colors[i]);
+                cell.addClickHandler(this);
+                t.setWidget(r, c, cell);
+            }
+        }
+        
+        add(t);
+        setAnimationEnabled(true);
+        setStyleName("hupa-color-picker");
+    }
+
+    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<ColorPicker> handler) {
+        assert changeHandler == null : "Change handler is already defined";
+        changeHandler = handler;
+        return new HandlerRegistration() {
+            public void removeHandler() {
+                changeHandler = null;
+            }
+        };
+    }
+
+    public String getColor() {
+        return color;
+    }
+    
+    public void onClick(ClickEvent event) {
+        ColorCell cell = (ColorCell)event.getSource(); 
+        this.color = cell.getColor();
+        if (changeHandler != null)
+            changeHandler.onValueChange(new ValueChangeEvent<ColorPicker>(this){});
+    }
+
+}

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=899307&r1=899306&r2=899307&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 Thu Jan 14 17:12:14 2010
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.hupa.widgets.editor;
 
+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.FocusEvent;
@@ -45,10 +46,14 @@
     boolean isNewMessage = true;
     
     public Editor() {
+        this((ToolbarConstants)GWT.create(ToolbarConstants.class));
+    }
+    
+    public Editor(ToolbarConstants constants) {
         area.ensureDebugId("hupa-editor-area");
         area.setSize("100%", "234px");
         
-        Toolbar toolbar = new Toolbar(area);
+        Toolbar toolbar = new Toolbar(area, constants);
         toolbar.ensureDebugId("hupa-editor-toolbar");
         
         super.setStyleName("hupa-editor");

Added: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/FontPicker.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/FontPicker.java?rev=899307&view=auto
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/FontPicker.java (added)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/FontPicker.java Thu Jan 14 17:12:14 2010
@@ -0,0 +1,156 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+/**
+ * Much of this code has been taken from the GWT Showcase example
+ * which is licensed under Apache License v2.0
+ * 
+ * This class is necessary while GWT library doesn't provide any 
+ * toolbar to be used with its RichTextArea widget.
+ */
+package org.apache.hupa.widgets.editor;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.dom.client.MouseOverHandler;
+import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.RichTextArea.FontSize;
+
+/**
+ * Font picker for rich editor
+ */
+public class FontPicker extends PopupPanel implements ClickHandler, HasValueChangeHandlers<FontPicker> {
+
+    private class FontCell extends HTML {
+        String font;
+
+        public FontCell(String font) {
+            super(font);
+            this.font = font;
+            DOM.setStyleAttribute(getElement(), "backgroundColor", "#D8ECFD");
+            DOM.setStyleAttribute(getElement(), "padding", "2px 4px 2px 8px");
+            addMouseOverHandler(new MouseOverHandler() {
+                public void onMouseOver(MouseOverEvent event) {
+                    DOM.setStyleAttribute(getElement(), "backgroundColor", "#7FAAFF");
+                }
+            });
+            addMouseOutHandler(new MouseOutHandler() {
+                public void onMouseOut(MouseOutEvent event) {
+                    DOM.setStyleAttribute(getElement(), "backgroundColor", "#D8ECFD");
+                }
+            });
+        }
+
+        public String getFont() {
+            return font;
+        }
+
+    }
+
+    public enum FontPickerType {
+        FONT_FAMILY, FONT_SIZE
+    }
+
+    private static final String[] fontFamilies = new String[] { "Times New Roman", "Arial", "Courier New", "Georgia", "Trebuchet", "Verdana", "Comic Sans MS" };
+
+    private static final String[] fontSizes = new String[] { "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large" };
+
+    private String font = "";
+
+    ValueChangeHandler<FontPicker> changeHandler = null;
+
+    public FontPicker(FontPickerType type) {
+        super(true);
+        VerticalPanel container = new VerticalPanel();
+        DOM.setStyleAttribute(container.getElement(), "border", "1px solid  #7FAAFF");
+        DOM.setStyleAttribute(container.getElement(), "backgroundColor", "#D8ECFD");
+        DOM.setStyleAttribute(container.getElement(), "cursor", "pointer");
+
+        String[] fonts = type == FontPickerType.FONT_SIZE ? fontSizes : fontFamilies;
+
+        for (int i = 0; i < fonts.length; i++) {
+            FontCell cell;
+            if (type == FontPickerType.FONT_SIZE) {
+                cell = new FontCell("" + (i + 1));
+                DOM.setStyleAttribute(cell.getElement(), "fontSize", fonts[i]);
+            } else {
+                cell = new FontCell(fonts[i]);
+                DOM.setStyleAttribute(cell.getElement(), "fontFamily", fonts[i]);
+            }
+            cell.addClickHandler(this);
+            container.add(cell);
+        }
+
+        add(container);
+        setAnimationEnabled(true);
+        setStyleName("hupa-color-picker");
+    }
+
+    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<FontPicker> handler) {
+        assert changeHandler == null : "Change handler is already defined";
+        changeHandler = handler;
+        return new HandlerRegistration() {
+            public void removeHandler() {
+                changeHandler = null;
+            }
+        };
+    }
+
+    public String getFontName() {
+        return font;
+    }
+
+    public FontSize getFontSize() {
+        switch (Integer.valueOf(font).intValue()) {
+        case 1:
+            return FontSize.XX_SMALL;
+        case 2:
+            return FontSize.X_SMALL;
+        case 4:
+            return FontSize.MEDIUM;
+        case 5:
+            return FontSize.LARGE;
+        case 6:
+            return FontSize.X_LARGE;
+        case 7:
+            return FontSize.XX_LARGE;
+        case 3:
+        default:
+            return FontSize.SMALL;
+        }
+    }
+
+    public void onClick(ClickEvent event) {
+        FontCell cell = (FontCell) event.getSource();
+        this.font = cell.getFont();
+        if (changeHandler != null)
+            changeHandler.onValueChange(new ValueChangeEvent<FontPicker>(this) {
+            });
+    }
+
+}

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Toolbar.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Toolbar.java?rev=899307&r1=899306&r2=899307&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Toolbar.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/Toolbar.java Thu Jan 14 17:12:14 2010
@@ -25,55 +25,37 @@
  */
 package org.apache.hupa.widgets.editor;
 
+import org.apache.hupa.widgets.editor.FontPicker.FontPickerType;
 import org.apache.hupa.widgets.editor.bundles.ToolbarImages;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ChangeEvent;
-import com.google.gwt.event.dom.client.ChangeHandler;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.KeyDownEvent;
 import com.google.gwt.event.dom.client.KeyDownHandler;
 import com.google.gwt.event.dom.client.KeyUpEvent;
 import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.user.client.Window;
 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.HorizontalPanel;
-import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.PushButton;
 import com.google.gwt.user.client.ui.RichTextArea;
 import com.google.gwt.user.client.ui.ToggleButton;
-import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.RichTextArea.FontSize;
 
 /**
  * Toolbar for use with {@link RichTextArea}. It provides a simple UI for all
  * rich text formatting, dynamically displayed only for the available
  * functionality.
  */
+@SuppressWarnings("deprecation")
 public class Toolbar extends Composite {
 
-    private class EventHandler implements ClickHandler, ChangeHandler, KeyUpHandler, KeyDownHandler {
-        public void onChange(ChangeEvent event) {
-            Widget sender = (Widget) event.getSource();
-
-            if (sender == backColors) {
-                basic.setBackColor(backColors.getValue(backColors.getSelectedIndex()));
-                backColors.setSelectedIndex(0);
-            } else if (sender == foreColors) {
-                basic.setForeColor(foreColors.getValue(foreColors.getSelectedIndex()));
-                foreColors.setSelectedIndex(0);
-            } else if (sender == fonts) {
-                basic.setFontName(fonts.getValue(fonts.getSelectedIndex()));
-                fonts.setSelectedIndex(0);
-            } else if (sender == fontSizes) {
-                basic.setFontSize(fontSizesConstants[fontSizes.getSelectedIndex() - 1]);
-                fontSizes.setSelectedIndex(0);
-            }
-        }
+    private class EventHandler implements ClickHandler, KeyUpHandler, KeyDownHandler {
 
         public void onClick(ClickEvent event) {
             Widget sender = (Widget) event.getSource();
@@ -122,6 +104,18 @@
                 extended.removeFormat();
             } else if (sender == richText) {
                 updateStatus();
+            } else if (sender == backColors) {
+                backColorsPicker.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop()+20);
+                backColorsPicker.show();
+            } else if (sender == foreColors) {
+                foreColorsPicker.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop()+20);
+                foreColorsPicker.show();
+            } else if (sender == fontFamily) {
+                fontFamilyPicker.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop()+20);
+                fontFamilyPicker.show();
+            } else if (sender == fontSize) {
+                fontSizePicker.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop()+20);
+                fontSizePicker.show();
             }
         }
 
@@ -134,22 +128,41 @@
                 updateStatus();
             }
         }
-    }
-
-    private static final RichTextArea.FontSize[] fontSizesConstants = new RichTextArea.FontSize[] { RichTextArea.FontSize.XX_SMALL, RichTextArea.FontSize.X_SMALL, RichTextArea.FontSize.SMALL,
-            RichTextArea.FontSize.MEDIUM, RichTextArea.FontSize.LARGE, RichTextArea.FontSize.X_LARGE, RichTextArea.FontSize.XX_LARGE };
 
-    private ToolbarImages images = (ToolbarImages) GWT.create(ToolbarImages.class);
-    private ToolbarConstants strings = (ToolbarConstants) GWT.create(ToolbarConstants.class);
+    }
+    
+    private ValueChangeHandler<ColorPicker> colorHandler = new ValueChangeHandler<ColorPicker>() {
+        public void onValueChange(ValueChangeEvent<ColorPicker> event) {
+            ColorPicker sender = event.getValue();
+            if (sender == backColorsPicker) {
+                basic.setBackColor(sender.getColor());
+            } else if (sender == foreColorsPicker) {
+                basic.setForeColor(sender.getColor());
+            }
+            sender.hide();
+        }
+    };
+    private ValueChangeHandler<FontPicker> fontHandler = new ValueChangeHandler<FontPicker>() {
+        public void onValueChange(ValueChangeEvent<FontPicker> event) {
+            FontPicker sender = event.getValue();
+            if (sender == fontFamilyPicker) {
+               basic.setFontName(sender.getFontName());
+            } else if (sender == fontSizePicker) {
+               basic.setFontSize(sender.getFontSize());
+            }
+            sender.hide();
+        }
+    };
+    
+    private static final ToolbarImages images = (ToolbarImages) GWT.create(ToolbarImages.class);
     private EventHandler handler = new EventHandler();
+    
 
     private RichTextArea richText;
     private RichTextArea.BasicFormatter basic;
     private RichTextArea.ExtendedFormatter extended;
 
-    private VerticalPanel outer = new VerticalPanel();
     private HorizontalPanel topPanel = new HorizontalPanel();
-    private HorizontalPanel bottomPanel = new HorizontalPanel();
     private ToggleButton bold;
     private ToggleButton italic;
     private ToggleButton underline;
@@ -169,10 +182,15 @@
     private PushButton removeLink;
     private PushButton removeFormat;
 
-    private ListBox backColors;
-    private ListBox foreColors;
-    private ListBox fonts;
-    private ListBox fontSizes;
+    private PushButton fontFamily;
+    private FontPicker fontFamilyPicker = new FontPicker(FontPickerType.FONT_FAMILY);
+    private PushButton fontSize;
+    private FontPicker fontSizePicker = new FontPicker(FontPickerType.FONT_SIZE);
+    
+    private PushButton backColors;
+    private PushButton foreColors;
+    private ColorPicker backColorsPicker = new ColorPicker();
+    private ColorPicker foreColorsPicker = new ColorPicker();
 
     /**
      * Creates a new toolbar that drives the given rich text area.
@@ -180,17 +198,14 @@
      * @param richText
      *            the rich text area to be controlled
      */
-    public Toolbar(RichTextArea richText) {
+    public Toolbar(RichTextArea richText, ToolbarConstants strings) {
         this.richText = richText;
         this.basic = richText.getBasicFormatter();
         this.extended = richText.getExtendedFormatter();
 
-        outer.add(topPanel);
-        outer.add(bottomPanel);
         topPanel.setWidth("100%");
-        bottomPanel.setWidth("100%");
 
-        initWidget(outer);
+        initWidget(topPanel);
         setStyleName("gwt-RichTextToolbar");
         richText.addStyleName("hasRichTextToolbar");
 
@@ -198,6 +213,10 @@
             topPanel.add(bold = createToggleButton(images.bold(), strings.editor_bold()));
             topPanel.add(italic = createToggleButton(images.italic(), strings.editor_italic()));
             topPanel.add(underline = createToggleButton(images.underline(), strings.editor_underline()));
+            topPanel.add(backColors = createPushButton(images.backColors(), strings.editor_background()));
+            topPanel.add(foreColors = createPushButton(images.foreColors(), strings.editor_foreground()));
+            topPanel.add(fontFamily = createPushButton(images.fonts(), strings.editor_font()));
+            topPanel.add(fontSize = createPushButton(images.fontSizes(), strings.editor_size()));
             topPanel.add(subscript = createToggleButton(images.subscript(), strings.editor_subscript()));
             topPanel.add(superscript = createToggleButton(images.superscript(), strings.editor_superscript()));
             topPanel.add(justifyLeft = createPushButton(images.justifyLeft(), strings.editor_justifyLeft()));
@@ -218,73 +237,18 @@
             topPanel.add(removeFormat = createPushButton(images.removeFormat(), strings.editor_removeFormat()));
         }
 
-        if (basic != null) {
-            bottomPanel.add(backColors = createColorList("Background"));
-            bottomPanel.add(foreColors = createColorList("Foreground"));
-            bottomPanel.add(fonts = createFontList());
-            bottomPanel.add(fontSizes = createFontSizes());
-
-            richText.addKeyDownHandler(handler);
-            richText.addKeyUpHandler(handler);
-            richText.addClickHandler(handler);
-        }
-        
-        outer.setWidth("100%");
         
         HTML topEmtyCell = new HTML("");
         topPanel.add(topEmtyCell);
         topPanel.setCellWidth(topEmtyCell, "100%");
 
-        HTML bottomEmtyCell = new HTML("");
-        bottomPanel.add(bottomEmtyCell);
-        bottomPanel.setCellWidth(bottomEmtyCell, "100%");
-    }
-
-    private ListBox createColorList(String caption) {
-        ListBox lb = new ListBox();
-        lb.addChangeHandler(handler);
-        lb.setVisibleItemCount(1);
-
-        lb.addItem(caption);
-        lb.addItem(strings.editor_white(), "white");
-        lb.addItem(strings.editor_black(), "black");
-        lb.addItem(strings.editor_red(), "red");
-        lb.addItem(strings.editor_green(), "green");
-        lb.addItem(strings.editor_yellow(), "yellow");
-        lb.addItem(strings.editor_blue(), "blue");
-        return lb;
-    }
-
-    private ListBox createFontList() {
-        ListBox lb = new ListBox();
-        lb.addChangeHandler(handler);
-        lb.setVisibleItemCount(1);
-
-        lb.addItem(strings.editor_font(), "");
-        lb.addItem(strings.editor_normal(), "");
-        lb.addItem("Times New Roman", "Times New Roman");
-        lb.addItem("Arial", "Arial");
-        lb.addItem("Courier New", "Courier New");
-        lb.addItem("Georgia", "Georgia");
-        lb.addItem("Trebuchet", "Trebuchet");
-        lb.addItem("Verdana", "Verdana");
-        return lb;
-    }
-
-    private ListBox createFontSizes() {
-        ListBox lb = new ListBox();
-        lb.addChangeHandler(handler);
-        lb.setVisibleItemCount(1);
-
-        lb.addItem(strings.editor_size());
-        lb.addItem(strings.editor_xxsmall());
-        lb.addItem(strings.editor_xsmall());
-        lb.addItem(strings.editor_small());
-        lb.addItem(strings.editor_medium());
-        lb.addItem(strings.editor_large());
-        lb.addItem(strings.editor_xlarge());
-        lb.addItem(strings.editor_xxlarge());
-        return lb;
+        richText.addKeyDownHandler(handler);
+        richText.addKeyUpHandler(handler);
+        richText.addClickHandler(handler);
+        backColorsPicker.addValueChangeHandler(colorHandler);
+        foreColorsPicker.addValueChangeHandler(colorHandler);
+        fontFamilyPicker.addValueChangeHandler(fontHandler);
+        fontSizePicker.addValueChangeHandler(fontHandler);
     }
 
     private PushButton createPushButton(AbstractImagePrototype img, String tip) {
@@ -311,6 +275,10 @@
             underline.setDown(basic.isUnderlined());
             subscript.setDown(basic.isSubscript());
             superscript.setDown(basic.isSuperscript());
+            foreColorsPicker.hide();
+            backColorsPicker.hide();
+            fontFamilyPicker.hide();
+            fontSizePicker.hide();
         }
 
         if (extended != null) {

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ToolbarConstants.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ToolbarConstants.java?rev=899307&r1=899306&r2=899307&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ToolbarConstants.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/ToolbarConstants.java Thu Jan 14 17:12:14 2010
@@ -7,6 +7,7 @@
  * internationalizable.
  */
 public interface ToolbarConstants extends Constants {
+    
     @DefaultStringValue("Toggle Bold")
     public String editor_bold();
 
@@ -61,55 +62,17 @@
     @DefaultStringValue("Toggle Underline")
     public String editor_underline();
 
-    @DefaultStringValue("Color")
-    public String editor_color();
-
-    @DefaultStringValue("Black")
-    public String editor_black();
-
-    @DefaultStringValue("White")
-    public String editor_white();
-
-    @DefaultStringValue("Red")
-    public String editor_red();
-
-    @DefaultStringValue("Green")
-    public String editor_green();
-
-    @DefaultStringValue("Yellow")
-    public String editor_yellow();
-
-    @DefaultStringValue("Blue")
-    public String editor_blue();
-
-    @DefaultStringValue("Font")
+    @DefaultStringValue("Background color")
+    public String editor_background();
+    
+    @DefaultStringValue("Foreground color")
+    public String editor_foreground();
+    
+    @DefaultStringValue("Font name")
     public String editor_font();
-
-    @DefaultStringValue("Normal")
-    public String editor_normal();
-
-    @DefaultStringValue("Size")
+    
+    @DefaultStringValue("Font size")
     public String editor_size();
-
-    @DefaultStringValue("XX-Small")
-    public String editor_xxsmall();
-
-    @DefaultStringValue("X-Small")
-    public String editor_xsmall();
-
-    @DefaultStringValue("Small")
-    public String editor_small();
-
-    @DefaultStringValue("Medium")
-    public String editor_medium();
-
-    @DefaultStringValue("Large")
-    public String editor_large();
-
-    @DefaultStringValue("X-Large")
-    public String editor_xlarge();
-
-    @DefaultStringValue("XX-Large")
-    public String editor_xxlarge();
+    
 
 }

Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/ToolbarImages.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/ToolbarImages.java?rev=899307&r1=899306&r2=899307&view=diff
==============================================================================
--- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/ToolbarImages.java (original)
+++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/editor/bundles/ToolbarImages.java Thu Jan 14 17:12:14 2010
@@ -47,5 +47,13 @@
         AbstractImagePrototype ul();
 
         AbstractImagePrototype underline();
+        
+        AbstractImagePrototype backColors();
+        
+        AbstractImagePrototype foreColors();
+        
+        AbstractImagePrototype fonts();
+        
+        AbstractImagePrototype fontSizes();
     }
 



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