Search in sources :

Example 1 with CellPainterBuilder

use of net.sourceforge.pmd.eclipse.ui.preferences.br.CellPainterBuilder in project pmd-eclipse-plugin by pmd.

the class Util method backgroundBuilderFor.

public static CellPainterBuilder backgroundBuilderFor(final int systemColourIndex) {
    return new CellPainterBuilder() {

        public void addPainterFor(final Tree tree, final int columnIndex, final RuleFieldAccessor getter, Map<Integer, List<Listener>> paintListeners) {
            final Display display = tree.getDisplay();
            tree.addListener(SWT.EraseItem, new Listener() {

                public void handleEvent(Event event) {
                    if (event.index != columnIndex) {
                        return;
                    }
                    event.detail &= ~SWT.HOT;
                    if ((event.detail & SWT.SELECTED) != 0) {
                        GC gc = event.gc;
                        Rectangle area = tree.getClientArea();
                        /*
                             * If you wish to paint the selection beyond the end of last column, you must change the
                             * clipping region.
                             */
                        int columnCount = tree.getColumnCount();
                        if (event.index == columnCount - 1 || columnCount == 0) {
                            int width = area.x + area.width - event.x;
                            if (width > 0) {
                                Region region = new Region();
                                gc.getClipping(region);
                                region.add(event.x, event.y, width, event.height);
                                gc.setClipping(region);
                                region.dispose();
                            }
                        }
                        gc.setAdvanced(true);
                        if (gc.getAdvanced()) {
                            gc.setAlpha(127);
                        }
                        Rectangle rect = event.getBounds();
                        Color foreground = gc.getForeground();
                        Color background = gc.getBackground();
                        gc.setForeground(display.getSystemColor(systemColourIndex));
                        gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
                        gc.fillGradientRectangle(event.x, rect.y, 500, rect.height, false);
                        gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
                        gc.drawLine(event.x, rect.y, event.x + 20, rect.y + 20);
                        // restore colors for subsequent drawing
                        gc.setForeground(foreground);
                        gc.setBackground(background);
                        event.detail &= ~SWT.SELECTED;
                    }
                }
            });
        }
    };
}
Also used : Listener(org.eclipse.swt.widgets.Listener) RuleFieldAccessor(net.sourceforge.pmd.eclipse.ui.preferences.br.RuleFieldAccessor) Color(org.eclipse.swt.graphics.Color) Rectangle(org.eclipse.swt.graphics.Rectangle) Tree(org.eclipse.swt.widgets.Tree) Event(org.eclipse.swt.widgets.Event) Region(org.eclipse.swt.graphics.Region) GC(org.eclipse.swt.graphics.GC) Map(java.util.Map) CellPainterBuilder(net.sourceforge.pmd.eclipse.ui.preferences.br.CellPainterBuilder) Display(org.eclipse.swt.widgets.Display)

Aggregations

Map (java.util.Map)1 CellPainterBuilder (net.sourceforge.pmd.eclipse.ui.preferences.br.CellPainterBuilder)1 RuleFieldAccessor (net.sourceforge.pmd.eclipse.ui.preferences.br.RuleFieldAccessor)1 Color (org.eclipse.swt.graphics.Color)1 GC (org.eclipse.swt.graphics.GC)1 Rectangle (org.eclipse.swt.graphics.Rectangle)1 Region (org.eclipse.swt.graphics.Region)1 Display (org.eclipse.swt.widgets.Display)1 Event (org.eclipse.swt.widgets.Event)1 Listener (org.eclipse.swt.widgets.Listener)1 Tree (org.eclipse.swt.widgets.Tree)1