1
1
/*******************************************************************************
2
- * Copyright (c) 2000, 2015 IBM Corporation and others.
2
+ * Copyright (c) 2000, 2025 IBM Corporation and others.
3
3
*
4
4
* This program and the accompanying materials
5
5
* are made available under the terms of the Eclipse Public License 2.0
14
14
package org .eclipse .pde .internal .ui .parts ;
15
15
16
16
import org .eclipse .jface .viewers .CheckboxTableViewer ;
17
+ import org .eclipse .jface .viewers .IStructuredContentProvider ;
17
18
import org .eclipse .jface .viewers .StructuredViewer ;
18
19
import org .eclipse .osgi .util .NLS ;
19
20
import org .eclipse .pde .internal .ui .PDEUIMessages ;
21
+ import org .eclipse .pde .internal .ui .shared .CachedCheckboxTableViewer ;
20
22
import org .eclipse .pde .internal .ui .util .SWTUtil ;
21
23
import org .eclipse .pde .internal .ui .wizards .ListUtil ;
22
24
import org .eclipse .swt .SWT ;
@@ -33,7 +35,6 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
33
35
private int selectIndex = -1 ;
34
36
private int deselectIndex = -1 ;
35
37
private final String tableName ;
36
- private int counter ;
37
38
private Label counterLabel ;
38
39
39
40
/**
@@ -92,7 +93,7 @@ public Object[] getSelection() {
92
93
public void setSelection (Object [] selected ) {
93
94
CheckboxTableViewer viewer = getTableViewer ();
94
95
viewer .setCheckedElements (selected );
95
- updateCounter ( viewer . getCheckedElements (). length );
96
+ updateCounterLabel ( );
96
97
}
97
98
98
99
public void createControl (Composite parent ) {
@@ -105,7 +106,7 @@ public void createControl(Composite parent, int span) {
105
106
GridData gd = new GridData (GridData .VERTICAL_ALIGN_BEGINNING | GridData .HORIZONTAL_ALIGN_FILL );
106
107
gd .horizontalSpan = span ;
107
108
counterLabel .setLayoutData (gd );
108
- updateCounter ( 0 );
109
+ updateCounterLabel ( );
109
110
}
110
111
111
112
public void createControl (Composite parent , int span , boolean multiselect ) {
@@ -118,7 +119,7 @@ public void createControl(Composite parent, int span, boolean multiselect) {
118
119
GridData gd = new GridData (GridData .VERTICAL_ALIGN_BEGINNING | GridData .HORIZONTAL_ALIGN_FILL );
119
120
gd .horizontalSpan = span ;
120
121
counterLabel .setLayoutData (gd );
121
- updateCounter ( 0 );
122
+ updateCounterLabel ( );
122
123
}
123
124
124
125
@ Override
@@ -146,24 +147,19 @@ protected void createMainLabel(Composite parent, int span, FormToolkit toolkit)
146
147
label .setLayoutData (gd );
147
148
}
148
149
149
- protected void updateCounter (int amount ) {
150
- counter = amount ;
151
- updateCounterLabel ();
152
- }
153
-
154
- public void updateCount (int amount ) {
155
- updateCounter (amount );
156
- }
157
-
158
- protected void updateCounterLabel () {
150
+ public void updateCounterLabel () {
159
151
String number = "" + getSelectionCount (); //$NON-NLS-1$
160
152
String totalNumber = "" + getTotalCount (); //$NON-NLS-1$
161
153
String message = NLS .bind (PDEUIMessages .WizardCheckboxTablePart_counter , (new String [] {number , totalNumber }));
162
154
counterLabel .setText (message );
163
155
}
164
156
165
157
public int getSelectionCount () {
166
- return counter ;
158
+ CachedCheckboxTableViewer viewer = getTableViewer ();
159
+ if (viewer == null ) {
160
+ return 0 ;
161
+ }
162
+ return viewer .getAllCheckedCount ();
167
163
}
168
164
169
165
public void selectAll (boolean select ) {
@@ -172,19 +168,21 @@ public void selectAll(boolean select) {
172
168
173
169
private int getTotalCount () {
174
170
CheckboxTableViewer viewer = getTableViewer ();
175
- return viewer .getTable ().getItemCount ();
171
+ if (viewer == null ) {
172
+ return 0 ;
173
+ }
174
+
175
+ IStructuredContentProvider contentProvider = (IStructuredContentProvider ) viewer .getContentProvider ();
176
+ if (contentProvider == null ) {
177
+ return 0 ;
178
+ }
179
+ return contentProvider .getElements (viewer .getInput ()).length ;
176
180
}
177
181
178
182
protected void handleSelectAll (boolean select ) {
179
183
CheckboxTableViewer viewer = getTableViewer ();
180
184
viewer .setAllChecked (select );
181
- int selected ;
182
- if (!select ) {
183
- selected = 0 ;
184
- } else {
185
- selected = getTotalCount ();
186
- }
187
- updateCounter (selected );
185
+ updateCounterLabel ();
188
186
}
189
187
190
188
protected void handleSelect (boolean select ) {
@@ -194,14 +192,13 @@ protected void handleSelect(boolean select) {
194
192
for (TableItem selectedItem : selected ) {
195
193
selectedItem .setChecked (select );
196
194
}
197
- updateCounter ( viewer . getCheckedElements (). length );
195
+ updateCounterLabel ( );
198
196
}
199
197
}
200
198
201
199
@ Override
202
200
protected void elementChecked (Object element , boolean checked ) {
203
- int count = getSelectionCount ();
204
- updateCounter (checked ? count + 1 : count - 1 );
201
+ updateCounterLabel ();
205
202
}
206
203
207
204
public Label getCounterLabel () {
0 commit comments