package eu.jucy.gui; import helpers.PreferenceChangedAdapter; import java.util.concurrent.CopyOnWriteArrayList; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPartSite; public class UCWorkbenchPart { public static final String USER_ADDITIONS_ID= "useradditions"; public static final String POST_USER_ADDITIONS_ID= "postuseradditions"; private static Color background; private static Color fontColour; private static Font font; private static CopyOnWriteArrayList<UCWorkbenchPart> active = new CopyOnWriteArrayList<UCWorkbenchPart>(); static { setFontAndColour(); new PreferenceChangedAdapter(GUIPI.get(),GUIPI.windowColor,GUIPI.windowFontColor,GUIPI.editorFont) { @Override public void preferenceChanged(String preference,String oldValue, String newValue) { setFontAndColour(); for (UCWorkbenchPart ucme:active) { ucme.updateColourOrFont(); } } }; } private static void setFontAndColour() { background = GUIPI.getColor(GUIPI.windowColor); fontColour = GUIPI.getColor(GUIPI.windowFontColor); font = GUIPI.getFont(GUIPI.editorFont); } public void setControlsForFontAndColour(Control... receivingChange) { controls = receivingChange; updateColourOrFont(); } private Control[] controls = new Control[0]; public UCWorkbenchPart() { active.add(this); } /** * overwrite this method to get notified on changed colours or fonts.. * but call super as this changes the font and text on all set controls.. */ protected void updateColourOrFont() { for (Control c: controls) { c.setBackground(background); c.setForeground(fontColour); c.setFont(font); } } public void dispose() { active.remove(this); } public static void createContextPopups(IWorkbenchPartSite site,String id,ISelectionProvider sp,Control c) { MenuManager menuManager = new MenuManager(); menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); menuManager.add(new GroupMarker(USER_ADDITIONS_ID)); menuManager.add(new GroupMarker(POST_USER_ADDITIONS_ID)); site.registerContextMenu(id,menuManager, sp); Menu menu = menuManager.createContextMenu(c); c.setMenu(menu); } public static void createContextPopups(IWorkbenchPartSite site,String id,Viewer viewer) { createContextPopups(site,id,viewer,viewer.getControl()); } }