/*******************************************************************************
* Copyright (c) 2008-2010, G. Weirich and Elexis
* All rights reserved. This program and the accompanying materials
* are 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:
* G. Weirich - initial implementation
*
* $Id$
*******************************************************************************/
package ch.elexis.core.ui;
import java.util.HashMap;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.FormToolkit;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.preferences.SettingsPreferenceStore;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.StringTool;
public class UiDesk {
private static FormToolkit theToolkit = null;
private static Display theDisplay = null;
private static ImageRegistry theImageRegistry = null;
private static ColorRegistry theColorRegistry = null;
private static HashMap<String, Cursor> cursors = null;
public static final String COL_RED = "rot"; //$NON-NLS-1$
public static final String COL_GREEN = "gruen"; //$NON-NLS-1$
public static final String COL_DARKGREEN = "dunkelgruen"; //$NON-NLS-1$
public static final String COL_BLUE = "blau"; //$NON-NLS-1$
public static final String COL_SKYBLUE = "himmelblau"; //$NON-NLS-1$
public static final String COL_LIGHTBLUE = "hellblau"; //$NON-NLS-1$
public static final String COL_BLACK = "schwarz"; //$NON-NLS-1$
public static final String COL_GREY = "grau"; //$NON-NLS-1$
public static final String COL_WHITE = "weiss"; //$NON-NLS-1$
public static final String COL_DARKGREY = "dunkelgrau"; //$NON-NLS-1$
public static final String COL_LIGHTGREY = "hellgrau"; //$NON-NLS-1$
public static final String COL_GREY60 = "grau60"; //$NON-NLS-1$
public static final String COL_GREY20 = "grau20"; //$NON-NLS-1$
public static final String CUR_HYPERLINK = "cursor_hyperlink"; //$NON-NLS-1$
public static ImageRegistry getImageRegistry(){
if (theImageRegistry == null) {
theImageRegistry = new ImageRegistry(getDisplay());
synchronized (theImageRegistry) {}
}
return theImageRegistry;
}
/**
* Return an image with a specified name. This method is applicable for images only, that has
* been registered beforehand. The default images resp. icons are delivered by a separate plugin
* (in the core this is ch.elexis.core.ui.icons)
*
* @param name
* the name of the image to retrieve
* @return the Image or null if no such image was found
*
* @since 3.0.0 will only serve pre-registered icons, <b>default icons have been outsourced</b>
*/
public static Image getImage(String name){
Image ret = getImageRegistry().get(name);
if (ret == null) {
ImageDescriptor id = getImageRegistry().getDescriptor(name);
if (id != null) {
ret = id.createImage();
}
}
return ret;
}
/** shortcut for getColorRegistry().get(String col) */
public static Color getColor(String desc){
return getColorRegistry().get(desc);
}
public static ColorRegistry getColorRegistry(){
if (theColorRegistry == null) {
theColorRegistry = new ColorRegistry(getDisplay(), true);
}
return theColorRegistry;
}
public static FormToolkit getToolkit(){
if (theToolkit == null) {
theToolkit = new FormToolkit(getDisplay());
}
return theToolkit;
}
public static Display getDisplay(){
if (theDisplay == null) {
if (PlatformUI.isWorkbenchRunning()) {
theDisplay = PlatformUI.getWorkbench().getDisplay();
}
}
if (theDisplay == null) {
theDisplay = PlatformUI.createDisplay();
}
return theDisplay;
}
public static void updateFont(String cfgName){
FontRegistry fr = JFaceResources.getFontRegistry();
FontData[] fd =
PreferenceConverter.getFontDataArray(new SettingsPreferenceStore(CoreHub.userCfg),
cfgName);
fr.put(cfgName, fd);
}
public static Font getFont(String cfgName){
FontRegistry fr = JFaceResources.getFontRegistry();
if (!fr.hasValueFor(cfgName)) {
FontData[] fd =
PreferenceConverter.getFontDataArray(new SettingsPreferenceStore(CoreHub.userCfg),
cfgName);
fr.put(cfgName, fd);
}
return fr.get(cfgName);
}
public static Font getFont(String name, int height, int style){
String key = name + ":" + Integer.toString(height) + ":" + Integer.toString(style); //$NON-NLS-1$ //$NON-NLS-2$
FontRegistry fr = JFaceResources.getFontRegistry();
if (!fr.hasValueFor(key)) {
FontData[] fd = new FontData[] {
new FontData(name, height, style)
};
fr.put(key, fd);
}
return fr.get(key);
}
public static Cursor getCursor(String name){
if (cursors == null) {
cursors = new HashMap<String, Cursor>();
}
Cursor ret = cursors.get(name);
if (ret == null) {
if (name.equals(CUR_HYPERLINK)) {
ret = getDisplay().getSystemCursor(SWT.CURSOR_HAND);
cursors.put(name, ret);
}
}
return ret;
}
/**
* Eine Color aus einer RGB-Beschreibung als Hex-String herstellen
*
* @param coldesc
* Die Farbe als Beschreibung in Hex-Form
* @return die Farbe als Color, ist in Regisry gespeichert
*/
public static Color getColorFromRGB(final String coldesc){
String col = StringTool.pad(StringTool.LEFT, '0', coldesc, 6);
if (!getColorRegistry().hasValueFor(col)) {
RGB rgb;
try {
rgb =
new RGB(Integer.parseInt(col.substring(0, 2), 16), Integer.parseInt(
col.substring(2, 4), 16), Integer.parseInt(col.substring(4, 6), 16));
} catch (NumberFormatException nex) {
ExHandler.handle(nex);
rgb = new RGB(100, 100, 100);
}
getColorRegistry().put(col, rgb);
}
return getColorRegistry().get(col);
}
/**
* Eine Hex-String Beschreibung einer Farbe liefern
*
* @param rgb
* Die Farbe in RGB-Form
* @return
*/
public static String createColor(final RGB rgb){
try {
StringBuilder sb = new StringBuilder();
sb.append(StringTool.pad(StringTool.LEFT, '0', Integer.toHexString(rgb.red), 2))
.append(StringTool.pad(StringTool.LEFT, '0', Integer.toHexString(rgb.green), 2))
.append(StringTool.pad(StringTool.LEFT, '0', Integer.toHexString(rgb.blue), 2));
String srgb = sb.toString();
getColorRegistry().put(srgb, rgb);
return srgb;
} catch (NumberFormatException nex) {
getColorRegistry().put("A0A0A0", new RGB(0xa0, 0xa0, 0xa0));
return "A0A0A0";
}
}
public static Shell getTopShell(){
return getDisplay().getActiveShell();
}
/**
* Run a runnable asynchroneously in the UI Thread The method will immediately return (not wait
* for the runnable to exit)
*/
public static void asyncExec(Runnable runnable){
Display disp = getDisplay();
disp.asyncExec(runnable);
}
/**
* Run a runnable synchroneously in the UI Thread. The method will not return until the runnable
* exited
*
* @param runnable
*/
public static void syncExec(Runnable runnable){
getDisplay().syncExec(runnable);
// BusyIndicator.showWhile(getDisplay(), runnable);
}
}