blob: 0ea7206f31fb8cdb85a1307b7c66829f4ed07ef9 [file] [log] [blame]
/****************************************************************
* 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
*/
@SuppressWarnings("deprecation")
public class FontPicker extends PopupPanel implements ClickHandler, HasValueChangeHandlers<FontPicker> {
private class FontCell extends HTML {
String cellFont;
public FontCell(String font) {
super(font);
this.cellFont = 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 cellFont;
}
}
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) {
});
}
}