/*
* Copyright 2009 Rodrigo Reyes reyes.rr at gmail dot com
*
* Licensed 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.
*
*/
package net.kornr.swit.site.widget;
import java.awt.Color;
import java.awt.Font;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import net.kornr.swit.button.ButtonResource;
import net.kornr.swit.button.ButtonTemplate;
import net.kornr.swit.button.NothingButTextButton;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
public class FontSelectorPanel extends FormComponentPanel<Font>
{
private IModel<Font> m_model;
private static String[] s_fonts = new String[] {
"Arial", "Verdana", "Courier"
};
private static List<String> s_fontsList = Arrays.asList(s_fonts);
static private HashMap<String, ButtonTemplate> s_templates = new HashMap<String, ButtonTemplate>();
private String m_fontName = s_fonts[0];
private int m_fontStyle = Font.PLAIN;
private int m_fontSize = 14;
private boolean m_bold = true;
private boolean m_italic = false;
public FontSelectorPanel(String id, IModel<Font> model) {
super(id, model);
m_model = model;
Font f = model.getObject();
if (f != null)
{
m_fontName = f.getFontName();
m_fontSize = f.getSize();
m_fontStyle = f.getStyle();
m_bold = (f.getStyle()&Font.BOLD)!=0;
m_italic = (f.getStyle()&Font.ITALIC)!=0;
}
init();
}
private void init()
{
RadioGroup fontgroup = new RadioGroup("fontgroup", new PropertyModel<String>(this, "fontName"));
this.add(fontgroup);
fontgroup.add(new ListView<String>("fontitem", s_fontsList) {
@Override
protected void populateItem(ListItem<String> item)
{
String font = item.getModelObject();
item.add(new Radio("radio", new Model<String>(font)));
ButtonTemplate tmpl = s_templates.get(font);
if (tmpl == null)
{
tmpl = new NothingButTextButton();
tmpl.setFont(new Font(font, Font.PLAIN, 24));
tmpl.setFontColor(Color.black);
tmpl.setHeight(1);
tmpl.setWidth(1);
s_templates.put(font, tmpl);
}
item.add(new Image("sample", ButtonResource.getReference(), ButtonResource.getValueMap(tmpl, font)));
}
});
// this.add(new TextField("size", new PropertyModel<Integer>(this, "fontSize")));
this.add(new IntegerField("size", new IntegerField.IntegerAdaptor(new PropertyModel<Integer>(this, "fontSize")),1, false, 6d, 144d));
this.add(new CheckBox("bold", new PropertyModel<Boolean>(this, "bold")));
this.add(new CheckBox("italic", new PropertyModel<Boolean>(this, "italic")));
}
@Override
protected void convertInput()
{
try {
m_fontStyle = 0;
if (m_bold || m_italic)
{
m_fontStyle = 0;
m_fontStyle |= m_bold?Font.BOLD:0;
m_fontStyle |= m_italic?Font.ITALIC:0;
}
else
{
m_fontStyle = Font.PLAIN;
}
Font font = new Font(m_fontName, m_fontStyle, m_fontSize);
this.setConvertedInput(font);
} catch (Exception exc)
{
exc.printStackTrace();
}
}
@Override
public void updateModel() {
convertInput();
Font f = this.getConvertedInput();
this.setModelObject(f);
}
public String getFontName() {
return m_fontName;
}
public void setFontName(String fontName) {
m_fontName = fontName;
}
public int getFontStyle() {
return m_fontStyle;
}
public void setFontStyle(int fontStyle) {
m_fontStyle = fontStyle;
}
public int getFontSize() {
return m_fontSize;
}
public void setFontSize(int fontSize) {
m_fontSize = fontSize;
}
public boolean isBold() {
return m_bold;
}
public void setBold(boolean bold) {
m_bold = bold;
}
public boolean isItalic() {
return m_italic;
}
public void setItalic(boolean italic) {
m_italic = italic;
}
}