-
Notifications
You must be signed in to change notification settings - Fork 96
/
Win7RendererSupport.java
130 lines (118 loc) · 3.35 KB
/
Win7RendererSupport.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package org.eclipse.nebula.widgets.grid;
import org.eclipse.nebula.widgets.grid.internal.win7.Win7ColumnGroupHeaderRenderer;
import org.eclipse.nebula.widgets.grid.internal.win7.Win7EmptyColumnHeaderRenderer;
import org.eclipse.nebula.widgets.grid.internal.win7.Win7GridColumnHeaderRenderer;
import org.eclipse.nebula.widgets.grid.internal.win7.Win7PaletteProvider;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
/**
* Support class for adding Win7 column header rendering to a given grid.
*/
public class Win7RendererSupport {
private Win7PaletteProvider palette;
private Win7GridColumnHeaderRenderer headerRenderer;
private Win7EmptyColumnHeaderRenderer emptyHeaderRenderer;
private Win7ColumnGroupHeaderRenderer groupHeaderRenderer;
private Grid grid;
/**
* @param agrid
*
*/
private Win7RendererSupport(Grid agrid) {
this.grid = agrid;
this.palette = new Win7PaletteProvider();
grid.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
grid.removeDisposeListener(this);
if (palette != null) {
palette.dispose();
}
headerRenderer = null;
emptyHeaderRenderer = null;
groupHeaderRenderer = null;
}
});
}
/**
* @param grid
* @return {@link Win7RendererSupport}
*/
public static Win7RendererSupport create(Grid grid) {
return new Win7RendererSupport(grid);
}
/**
* Decorate a single column header
*
* @param col
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorateColumnHeader(GridColumn col) {
if (headerRenderer == null) {
headerRenderer = new Win7GridColumnHeaderRenderer(palette);
}
col.setHeaderRenderer(headerRenderer);
return this;
}
/**
* Decorate an array of column headers
*
* @param cols
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorateColumnHeaders(GridColumn[] cols) {
for (int i = 0; i < cols.length; i++) {
decorateColumnHeader(cols[i]);
}
return this;
}
/**
* Decorate a single grid column group header
*
* @param group
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorateColumnGroupHeader(GridColumnGroup group) {
if (groupHeaderRenderer == null) {
groupHeaderRenderer = new Win7ColumnGroupHeaderRenderer(palette);
}
group.setHeaderRenderer(groupHeaderRenderer);
decorateColumnHeaders(group.getColumns());
return this;
}
/**
* Decorate an array of grid column group headers
*
* @param groups
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorateColumnGroupHeaders(GridColumnGroup[] groups) {
for (int i = 0; i < groups.length; i++) {
decorateColumnGroupHeader(groups[i]);
}
return this;
}
/**
* Decorate the empty column header
*
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorateEmptyColumnHeader() {
if (emptyHeaderRenderer == null) {
emptyHeaderRenderer = new Win7EmptyColumnHeaderRenderer(palette);
}
grid.setEmptyColumnHeaderRenderer(emptyHeaderRenderer);
return this;
}
/**
* Decorate all column headers, all column header groups and the empty column
* header.
*
* @return {@link Win7RendererSupport}
*/
public Win7RendererSupport decorate() {
decorateEmptyColumnHeader();
decorateColumnGroupHeaders(grid.getColumnGroups());
decorateColumnHeaders(grid.getColumns());
return this;
}
}