All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bndtools.utils.swt.SashHighlightForm Maven / Gradle / Ivy

There is a newer version: 7.0.0
Show newest version
package org.bndtools.utils.swt;

import java.lang.reflect.Field;

import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Sash;

/**
 * 

* SWT's {@link SashForm} is moronic. There is no way to set the colour of just the sashes... calling * {@link #setBackground(Color)} results in setting the background colour of the entire form area. *

*

* This class has to use nasty hacks to give us access to the superclass fields that we need to modify. It's a toss up * between this and completely reimplementing {@link SashForm}. *

* * @author Neil Bartlett */ public class SashHighlightForm extends SashForm { public SashHighlightForm(Composite parent, int style) { super(parent, style); } public void setSashBackground(Color color) { try { Field bgfield = SashForm.class.getDeclaredField("background"); bgfield.setAccessible(true); bgfield.set(this, color); Field sashesField = SashForm.class.getDeclaredField("sashes"); sashesField.setAccessible(true); Sash[] sashes = (Sash[]) sashesField.get(this); for (Sash sash : sashes) { sash.setBackground(color); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public void setSashForeground(Color color) { try { Field fgfield = SashForm.class.getDeclaredField("foreground"); fgfield.setAccessible(true); fgfield.set(this, color); Field sashesField = SashForm.class.getDeclaredField("sashes"); sashesField.setAccessible(true); Sash[] sashes = (Sash[]) sashesField.get(this); for (Sash sash : sashes) { sash.setForeground(color); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy