/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.widgets;
import java.util.HashMap;
import org.eclipse.jface.resource.JFaceColors;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.jboss.tools.common.model.ui.Insets;
import org.jboss.tools.common.model.ui.widgets.border.Border;
import org.jboss.tools.common.model.ui.widgets.border.FormControlBorder;
public class DefaultSettings implements IWidgetSettings {
// settings
private HashMap<String,Object> settings = new HashMap<String,Object>();
// static access
private static IWidgetSettings defaultSettings;
// colors
protected Color redBackground;
protected Color whiteBackground;
protected Color defaultBackground;
protected Color defaultForeground;
protected Color hyperlinkColor;
protected Color activeHyperlinkColor;
// fonts
protected Font defaultFont;
protected Font headerFont;
protected Font titleFont;
// cursors
protected Cursor defaultCursor;
protected Cursor handCursor;
// borders
protected Border defaultBorder;
public static IWidgetSettings getDefault() {
if (defaultSettings==null) defaultSettings = new DefaultSettings();
return defaultSettings;
}
protected void initColors() {
defaultBackground = Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
defaultForeground = Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
whiteBackground = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
redBackground = Display.getCurrent().getSystemColor(SWT.COLOR_RED);
hyperlinkColor = JFaceColors.getHyperlinkText(Display.getCurrent());
activeHyperlinkColor = JFaceColors.getActiveHyperlinkText(Display.getCurrent());
}
protected void initFonts() {
defaultFont = JFaceResources.getDefaultFont();
headerFont = JFaceResources.getBannerFont();
titleFont = JFaceResources.getHeaderFont();
}
protected void initCursors() {
Display display = Display.getCurrent() != null ? Display.getCurrent() : Display.getDefault();
defaultCursor = display.getSystemCursor(SWT.CURSOR_ARROW);
handCursor = display.getSystemCursor(SWT.CURSOR_HAND);
}
protected void initBorders() {
defaultBorder = new FormControlBorder(new Insets(0,0,0,0));
}
protected void initSettings() {
// Unknow control
put("Control.Style", SWT.NONE); //$NON-NLS-1$
put("Control.Background", defaultBackground); //$NON-NLS-1$
put("Control.Foreground", defaultForeground); //$NON-NLS-1$
put("Control.Font", defaultFont); //$NON-NLS-1$
// Composite
put("Composite.Style", SWT.NONE); //$NON-NLS-1$
put("Composite.Background", defaultBackground); //$NON-NLS-1$
put("Composite.Foreground", defaultForeground); //$NON-NLS-1$
put("Composite.Font", defaultFont); //$NON-NLS-1$
// Label
put("Label.Style", SWT.NONE); //$NON-NLS-1$
// Please, do not put whiteBackground here, it spoils all wizards
put("Label.Background", defaultBackground); //$NON-NLS-1$
put("Label.Foreground", defaultForeground); //$NON-NLS-1$
put("Label.Font", defaultFont); //$NON-NLS-1$
put("Label.Font.Title", titleFont); //$NON-NLS-1$
put("Label.Font.Header", headerFont); //$NON-NLS-1$
// Hyperlink
put("Hyperlink.Style", SWT.NONE); //$NON-NLS-1$
put("Hyperlink.Background", defaultBackground); //$NON-NLS-1$
put("Hyperlink.Foreground", hyperlinkColor); //$NON-NLS-1$
put("Hyperlink.ActiveColor", activeHyperlinkColor); //$NON-NLS-1$
put("Hyperlink.Font", defaultFont); //$NON-NLS-1$
put("Hyperlink.ActiveCursor", handCursor); //$NON-NLS-1$
put("Hyperlink.Disabled", defaultForeground); //$NON-NLS-1$
// Text
put("Text.Style", SWT.BORDER); //$NON-NLS-1$
put("Text.Background", whiteBackground); //$NON-NLS-1$
put("Text.Foreground", defaultForeground); //$NON-NLS-1$
put("Text.Font", defaultFont); //$NON-NLS-1$
// Note
put("Note.Style", SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); //$NON-NLS-1$
put("Note.Background", whiteBackground); //$NON-NLS-1$
put("Note.Foreground", defaultForeground); //$NON-NLS-1$
put("Note.Font", defaultFont); //$NON-NLS-1$
put("Note.ValidateStrategy", 0); //$NON-NLS-1$
// Combo
put("Combo.Style", SWT.BORDER); //$NON-NLS-1$
put("Combo.Background", whiteBackground); //$NON-NLS-1$
put("Combo.Background.Disabled", defaultBackground); //$NON-NLS-1$
put("Combo.Foreground", defaultForeground); //$NON-NLS-1$
put("Combo.Font", defaultFont); //$NON-NLS-1$
// Button
put("Button.Style", SWT.PUSH); //$NON-NLS-1$
put("Button.Background", defaultBackground); //$NON-NLS-1$
put("Button.Foreground", defaultForeground); //$NON-NLS-1$
put("Button.Font", defaultFont); //$NON-NLS-1$
// CheckBox
put("CheckBox.Style", SWT.CHECK); //$NON-NLS-1$
put("CheckBox.Background", defaultBackground); //$NON-NLS-1$
put("CheckBox.Foreground", defaultForeground); //$NON-NLS-1$
put("CheckBox.Font", defaultFont); //$NON-NLS-1$
// List
put("List.Style", SWT.BORDER); //$NON-NLS-1$
put("List.Background", whiteBackground); //$NON-NLS-1$
put("List.Foreground", defaultForeground); //$NON-NLS-1$
put("List.Font", defaultFont); //$NON-NLS-1$
// Tree
put("Tree.Style", SWT.BORDER); //$NON-NLS-1$
put("Tree.Background", whiteBackground); //$NON-NLS-1$
put("Tree.Foreground", defaultForeground); //$NON-NLS-1$
put("Tree.Font", defaultFont); //$NON-NLS-1$
// Table
put("Table.Style", SWT.BORDER); //$NON-NLS-1$
put("Table.Background", whiteBackground); //$NON-NLS-1$
put("Table.Foreground", defaultForeground); //$NON-NLS-1$
put("Table.Font", defaultFont); //$NON-NLS-1$
}
protected DefaultSettings() {
initColors();
initFonts();
initCursors();
initBorders();
initSettings();
}
public Object getObject(String key) {
return settings.get(key);
}
public int getInt(String key) {
Integer integer = (Integer)settings.get(key);
if (integer!=null) return integer.intValue();
return SWT.DEFAULT;
}
public int getStyle(String key) {
Integer integer = (Integer)settings.get(key);
if (integer!=null) return integer.intValue();
return SWT.NONE;
}
public Color getColor(String key) {
Color color = (Color)settings.get(key);
if (color==null) color = redBackground;
return color;
}
public Font getFont(String key) {
Font font = (Font)settings.get(key);
if (font==null) font = defaultFont;
return font;
}
public Border getBorder(String key) {
Border border = (Border)settings.get(key);
if (border == null) border = defaultBorder;
return border;
}
public Cursor getCursor(String key) {
Cursor cursor = (Cursor)settings.get(key);
if (cursor == null) cursor = defaultCursor;
return cursor;
}
protected void put(String key, Object object) {
settings.put(key, object);
}
protected void put(String key, int i) {
settings.put(key, Integer.valueOf(i));
}
protected void put(String key, Color color) {
settings.put(key, color);
}
protected void put(String key, Font font) {
settings.put(key, font);
}
protected void put(String key, Border border) {
settings.put(key, border);
}
protected void put(String key, Cursor cursor) {
settings.put(key, cursor);
}
/* (non-Javadoc)
* @see org.jboss.tools.common.model.ui.widgets.IWidgetSettings#setupControl(org.eclipse.swt.widgets.Control)
*/
public void setupControl(Control control) {
FormToolkit toolkit = getToolkit(control.getDisplay());
if(control instanceof Composite) {
toolkit.adapt((Composite)control);
}
if (control instanceof CCombo || control instanceof Combo) {
control.setBackground(getColor("Combo.Background")); //$NON-NLS-1$
control.setForeground(getColor("Combo.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Combo.Font")); //$NON-NLS-1$
} else if (control instanceof Label) {
control.setBackground(getColor("Label.Background")); //$NON-NLS-1$
control.setForeground(getColor("Label.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Label.Font")); //$NON-NLS-1$
} else if (control instanceof Text) {
control.setBackground(getColor("Text.Background")); //$NON-NLS-1$
control.setForeground(getColor("Text.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Text.Font")); //$NON-NLS-1$
} else if (control instanceof Button) {
control.setBackground(getColor("Button.Background")); //$NON-NLS-1$
control.setForeground(getColor("Button.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Button.Font")); //$NON-NLS-1$
} else if (control instanceof List) {
control.setBackground(getColor("List.Background")); //$NON-NLS-1$
control.setForeground(getColor("List.Foreground")); //$NON-NLS-1$
control.setFont(getFont("List.Font")); //$NON-NLS-1$
} else if (control instanceof Tree) {
control.setBackground(getColor("Tree.Background")); //$NON-NLS-1$
control.setForeground(getColor("Tree.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Tree.Font")); //$NON-NLS-1$
} else if (control instanceof Table) {
control.setBackground(getColor("Table.Background")); //$NON-NLS-1$
control.setForeground(getColor("Table.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Table.Font")); //$NON-NLS-1$
} else if (control instanceof Composite) {
control.setBackground(getColor("Composite.Background")); //$NON-NLS-1$
control.setForeground(getColor("Composite.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Composite.Font")); //$NON-NLS-1$
} else { // unknow control
control.setBackground(getColor("Control.Background")); //$NON-NLS-1$
control.setForeground(getColor("Control.Foreground")); //$NON-NLS-1$
control.setFont(getFont("Control.Font")); //$NON-NLS-1$
}
}
public FormToolkit getToolkit(Display display) {
return null;
}
public void dispose() {}
}