Added
Link Here
|
1 |
/** |
2 |
* |
3 |
*/ |
4 |
package org.eclipse.pde.internal.ui.nls; |
5 |
|
6 |
import java.util.*; |
7 |
import java.util.List; |
8 |
import org.eclipse.core.runtime.*; |
9 |
import org.eclipse.jface.dialogs.Dialog; |
10 |
import org.eclipse.jface.dialogs.IDialogSettings; |
11 |
import org.eclipse.jface.viewers.*; |
12 |
import org.eclipse.jface.wizard.IWizardContainer; |
13 |
import org.eclipse.osgi.util.NLS; |
14 |
import org.eclipse.pde.core.IModelProviderEvent; |
15 |
import org.eclipse.pde.core.IModelProviderListener; |
16 |
import org.eclipse.pde.core.plugin.*; |
17 |
import org.eclipse.pde.internal.core.ClasspathUtilCore; |
18 |
import org.eclipse.pde.internal.core.PDECore; |
19 |
import org.eclipse.pde.internal.ui.*; |
20 |
import org.eclipse.pde.internal.ui.elements.DefaultContentProvider; |
21 |
import org.eclipse.pde.internal.ui.util.SWTUtil; |
22 |
import org.eclipse.pde.internal.ui.wizards.ListUtil; |
23 |
import org.eclipse.swt.SWT; |
24 |
import org.eclipse.swt.custom.ScrolledComposite; |
25 |
import org.eclipse.swt.events.*; |
26 |
import org.eclipse.swt.layout.GridData; |
27 |
import org.eclipse.swt.layout.GridLayout; |
28 |
import org.eclipse.swt.widgets.*; |
29 |
import org.eclipse.ui.PlatformUI; |
30 |
import org.eclipse.ui.progress.WorkbenchJob; |
31 |
|
32 |
/** |
33 |
* The first page of the InternationalizeWizard. This page allows the user to |
34 |
* select the desired plug-ins for internationalization. These could be plug-ins |
35 |
* in the user's workspace or external ones. |
36 |
* |
37 |
* @author Team Azure |
38 |
* |
39 |
*/ |
40 |
public class InternationalizeWizardPluginPage extends InternationalizationWizardPage implements IModelProviderListener { |
41 |
|
42 |
public static final String PAGE_NAME = "InternationalizeWizardPluginPage"; //$NON-NLS-1$ |
43 |
|
44 |
protected IPluginModelBase[] fModels = new IPluginModelBase[0]; |
45 |
|
46 |
private boolean fRefreshNeeded = true; |
47 |
|
48 |
private Label fCountLabel; //Displays "x out of y selected" |
49 |
|
50 |
private TableViewer fAvailableViewer; //All available plug-ins |
51 |
protected TableViewer fSelectedViewer; //Selected plug-ins |
52 |
|
53 |
private WorkbenchJob fFilterJob; |
54 |
private Text fFilterText; |
55 |
private Text fTemplateText; |
56 |
private AvailableFilter fFilter; |
57 |
|
58 |
// Used to track the selection in a HashMap so as to filter |
59 |
// selected items out of the available item list |
60 |
private final Map fSelected = new HashMap(); |
61 |
|
62 |
// Used to block the selection listeners from updating button enablement |
63 |
// when programatically removing items |
64 |
private boolean fBlockSelectionListeners; |
65 |
private Button fAddButton; |
66 |
private Button fAddAllButton; |
67 |
private Button fRemoveButton; |
68 |
private Button fRemoveAllButton; |
69 |
|
70 |
// Used to store the plug-ins |
71 |
private InternationalizeModelTable fInternationalizeModelTable; |
72 |
|
73 |
private Button overwriteOption; |
74 |
|
75 |
private class ContentProvider extends DefaultContentProvider implements IStructuredContentProvider { |
76 |
/** |
77 |
* @return the list of available non-selected plug-ins |
78 |
*/ |
79 |
public Object[] getElements(Object parent) { |
80 |
return fInternationalizeModelTable.getModels(); |
81 |
} |
82 |
} |
83 |
|
84 |
private class SelectedContentProvider extends DefaultContentProvider implements IStructuredContentProvider { |
85 |
/** |
86 |
* @return the list of selected plug-ins |
87 |
*/ |
88 |
public Object[] getElements(Object parent) { |
89 |
return fInternationalizeModelTable.getPreSelected(); |
90 |
} |
91 |
} |
92 |
|
93 |
public InternationalizeWizardPluginPage(InternationalizeModelTable modelTable, String pageName) { |
94 |
|
95 |
super(pageName); |
96 |
setTitle(PDEUIMessages.InternationalizeWizard_PluginPage_pageTitle); |
97 |
setDescription(PDEUIMessages.InternationalizeWizard_PluginPage_pageDescription); |
98 |
|
99 |
PDEPlugin.getDefault().getLabelProvider().connect(this); |
100 |
PDECore.getDefault().getModelManager().getExternalModelManager().addModelProviderListener(this); |
101 |
|
102 |
fInternationalizeModelTable = modelTable; |
103 |
|
104 |
IWizardContainer container = getContainer(); |
105 |
if (container != null) |
106 |
container.updateButtons(); |
107 |
} |
108 |
|
109 |
/** |
110 |
* Adds a filter to the list of available plug-ins |
111 |
*/ |
112 |
private void addFilter() { |
113 |
fFilter = new AvailableFilter(fSelected, PDEPlugin.getDefault().getLabelProvider()); |
114 |
fAvailableViewer.addFilter(fFilter); |
115 |
fFilterJob = new WorkbenchJob("FilterJob") { //$NON-NLS-1$ |
116 |
public IStatus runInUIThread(IProgressMonitor monitor) { |
117 |
handleFilter(); |
118 |
return Status.OK_STATUS; |
119 |
} |
120 |
}; |
121 |
fFilterJob.setSystem(true); |
122 |
} |
123 |
|
124 |
/** |
125 |
* Handles changes to the list based on changes to the text field. |
126 |
*/ |
127 |
private void handleFilter() { |
128 |
boolean changed = false; |
129 |
String newFilter; |
130 |
if (fFilterText == null || (newFilter = fFilterText.getText().trim()).length() == 0) |
131 |
newFilter = AvailableFilter.WILDCARD; |
132 |
changed = fFilter.setPattern(newFilter); |
133 |
if (changed) { |
134 |
fAvailableViewer.getTable().setRedraw(false); |
135 |
fAvailableViewer.refresh(); |
136 |
fAvailableViewer.getTable().setRedraw(true); |
137 |
updateButtonEnablement(false, false); |
138 |
} |
139 |
} |
140 |
|
141 |
/* (non-Javadoc) |
142 |
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) |
143 |
*/ |
144 |
public void createControl(Composite parent) { |
145 |
Composite container = new Composite(parent, SWT.NONE); |
146 |
GridLayout layout = new GridLayout(); |
147 |
layout.numColumns = 3; |
148 |
layout.makeColumnsEqualWidth = false; |
149 |
layout.horizontalSpacing = 5; |
150 |
layout.verticalSpacing = 20; |
151 |
container.setLayout(layout); |
152 |
|
153 |
createScrollArea(container); |
154 |
createAvailableList(container).setLayoutData(new GridData(GridData.FILL_BOTH)); |
155 |
createButtonArea(container); |
156 |
createInternationalizeList(container).setLayoutData(new GridData(GridData.FILL_BOTH)); |
157 |
updateCount(); |
158 |
|
159 |
createTemplateField(container); |
160 |
overwriteOption = new Button(container, SWT.CHECK); |
161 |
overwriteOption.setText(PDEUIMessages.InternationalizeWizard_PluginPage_overwriteWithoutAsking); |
162 |
|
163 |
addViewerListeners(); |
164 |
addFilter(); |
165 |
|
166 |
initialize(); |
167 |
setControl(container); |
168 |
Dialog.applyDialogFont(container); |
169 |
PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.PLUGIN_IMPORT_SECOND_PAGE); |
170 |
} |
171 |
|
172 |
/** |
173 |
* @param parent |
174 |
* @return the container holding the available plug-ins list |
175 |
*/ |
176 |
private Composite createAvailableList(Composite parent) { |
177 |
Composite container = createViewerContainer(parent, PDEUIMessages.InternationalizeWizard_PluginPage_availableList); |
178 |
fAvailableViewer = createTableViewer(container, new ContentProvider(), PDECore.getDefault().getModelManager()); |
179 |
return container; |
180 |
} |
181 |
|
182 |
protected Composite createInternationalizeList(Composite parent) { |
183 |
Composite container = createViewerContainer(parent, PDEUIMessages.InternationalizeWizard_PluginPage_internationalizeList); |
184 |
fSelectedViewer = createTableViewer(container, new SelectedContentProvider(), PDECore.getDefault().getModelManager().getExternalModelManager()); |
185 |
return container; |
186 |
} |
187 |
|
188 |
private Composite createViewerContainer(Composite parent, String message) { |
189 |
Composite container = new Composite(parent, SWT.NONE); |
190 |
GridLayout layout = new GridLayout(); |
191 |
layout.marginWidth = 0; |
192 |
layout.marginHeight = 0; |
193 |
container.setLayout(layout); |
194 |
container.setLayoutData(new GridData(GridData.FILL_BOTH)); |
195 |
|
196 |
Label label = new Label(container, SWT.NONE); |
197 |
label.setText(message); |
198 |
return container; |
199 |
} |
200 |
|
201 |
private static TableViewer createTableViewer(Composite container, IContentProvider provider, Object manager) { |
202 |
Table table = new Table(container, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); |
203 |
GridData gd = new GridData(GridData.FILL_BOTH); |
204 |
gd.heightHint = 200; |
205 |
gd.widthHint = 225; |
206 |
table.setLayoutData(gd); |
207 |
|
208 |
TableViewer viewer = new TableViewer(table); |
209 |
viewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider()); |
210 |
viewer.setContentProvider(provider); |
211 |
viewer.setInput(manager); |
212 |
viewer.setComparator(ListUtil.PLUGIN_COMPARATOR); |
213 |
return viewer; |
214 |
} |
215 |
|
216 |
protected boolean isRefreshNeeded() { |
217 |
if (fRefreshNeeded) { |
218 |
fRefreshNeeded = false; |
219 |
return true; |
220 |
} |
221 |
|
222 |
return false; |
223 |
} |
224 |
|
225 |
private IPluginModelBase findModel(String id) { |
226 |
for (int i = 0; i < fModels.length; i++) { |
227 |
String modelId = fModels[i].getPluginBase().getId(); |
228 |
if (modelId != null && modelId.equals(id)) |
229 |
return fModels[i]; |
230 |
} |
231 |
return null; |
232 |
} |
233 |
|
234 |
private IFragmentModel[] findFragments(IPlugin plugin) { |
235 |
ArrayList result = new ArrayList(); |
236 |
for (int i = 0; i < fModels.length; i++) { |
237 |
if (fModels[i] instanceof IFragmentModel) { |
238 |
IFragment fragment = ((IFragmentModel) fModels[i]).getFragment(); |
239 |
if (plugin.getId().equalsIgnoreCase(fragment.getPluginId())) { |
240 |
result.add(fModels[i]); |
241 |
} |
242 |
} |
243 |
} |
244 |
return (IFragmentModel[]) result.toArray(new IFragmentModel[result.size()]); |
245 |
} |
246 |
|
247 |
protected void addPluginAndDependencies(IPluginModelBase model, ArrayList selected, boolean addFragments) { |
248 |
|
249 |
boolean containsVariable = false; |
250 |
if (!selected.contains(model)) { |
251 |
selected.add(model); |
252 |
boolean hasextensibleAPI = ClasspathUtilCore.hasExtensibleAPI(model); |
253 |
if (!addFragments && !hasextensibleAPI && model instanceof IPluginModel) { |
254 |
IPluginLibrary[] libraries = model.getPluginBase().getLibraries(); |
255 |
for (int i = 0; i < libraries.length; i++) { |
256 |
if (ClasspathUtilCore.containsVariables(libraries[i].getName())) { |
257 |
containsVariable = true; |
258 |
break; |
259 |
} |
260 |
} |
261 |
} |
262 |
addDependencies(model, selected, addFragments || containsVariable || hasextensibleAPI); |
263 |
} |
264 |
} |
265 |
|
266 |
protected void addDependencies(IPluginModelBase model, ArrayList selected, boolean addFragments) { |
267 |
|
268 |
IPluginImport[] required = model.getPluginBase().getImports(); |
269 |
if (required.length > 0) { |
270 |
for (int i = 0; i < required.length; i++) { |
271 |
IPluginModelBase found = findModel(required[i].getId()); |
272 |
if (found != null) { |
273 |
addPluginAndDependencies(found, selected, addFragments); |
274 |
} |
275 |
} |
276 |
} |
277 |
|
278 |
if (addFragments) { |
279 |
if (model instanceof IPluginModel) { |
280 |
IFragmentModel[] fragments = findFragments(((IPluginModel) model).getPlugin()); |
281 |
for (int i = 0; i < fragments.length; i++) { |
282 |
addPluginAndDependencies(fragments[i], selected, addFragments); |
283 |
} |
284 |
} else { |
285 |
IFragment fragment = ((IFragmentModel) model).getFragment(); |
286 |
IPluginModelBase found = findModel(fragment.getPluginId()); |
287 |
if (found != null) { |
288 |
addPluginAndDependencies(found, selected, addFragments); |
289 |
} |
290 |
} |
291 |
} |
292 |
} |
293 |
|
294 |
public List getModelsToInternationalize() { |
295 |
TableItem[] items = fSelectedViewer.getTable().getItems(); |
296 |
List result = new ArrayList(); |
297 |
for (int i = 0; i < items.length; i++) { |
298 |
result.add(items[i].getData()); |
299 |
} |
300 |
return result; |
301 |
} |
302 |
|
303 |
public void storeSettings() { |
304 |
IDialogSettings settings = getDialogSettings(); |
305 |
} |
306 |
|
307 |
/* (non-Javadoc) |
308 |
* @see org.eclipse.pde.core.IModelProviderListener#modelsChanged(org.eclipse.pde.core.IModelProviderEvent) |
309 |
*/ |
310 |
public void modelsChanged(IModelProviderEvent event) { |
311 |
fRefreshNeeded = true; |
312 |
} |
313 |
|
314 |
private void initialize() { |
315 |
updateButtonEnablement(true, true); |
316 |
setPageComplete(false); |
317 |
} |
318 |
|
319 |
private void addViewerListeners() { |
320 |
fAvailableViewer.addDoubleClickListener(new IDoubleClickListener() { |
321 |
public void doubleClick(DoubleClickEvent event) { |
322 |
handleAdd(); |
323 |
} |
324 |
}); |
325 |
|
326 |
fSelectedViewer.addDoubleClickListener(new IDoubleClickListener() { |
327 |
public void doubleClick(DoubleClickEvent event) { |
328 |
handleRemove(); |
329 |
} |
330 |
}); |
331 |
|
332 |
fAvailableViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
333 |
public void selectionChanged(SelectionChangedEvent event) { |
334 |
if (!fBlockSelectionListeners) |
335 |
updateSelectionBasedEnablement(event.getSelection(), true); |
336 |
} |
337 |
}); |
338 |
|
339 |
fSelectedViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
340 |
public void selectionChanged(SelectionChangedEvent event) { |
341 |
if (!fBlockSelectionListeners) |
342 |
updateSelectionBasedEnablement(event.getSelection(), false); |
343 |
} |
344 |
}); |
345 |
|
346 |
fFilterText.addModifyListener(new ModifyListener() { |
347 |
public void modifyText(ModifyEvent e) { |
348 |
fFilterJob.cancel(); |
349 |
fFilterJob.schedule(200); |
350 |
} |
351 |
}); |
352 |
|
353 |
} |
354 |
|
355 |
private Composite createButtonArea(Composite parent) { |
356 |
ScrolledComposite comp = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); |
357 |
GridLayout layout = new GridLayout(); |
358 |
layout.marginWidth = layout.marginHeight = 0; |
359 |
comp.setLayoutData(new GridData(GridData.FILL_VERTICAL)); |
360 |
Composite container = new Composite(comp, SWT.NONE); |
361 |
layout = new GridLayout(); |
362 |
layout.marginWidth = 0; |
363 |
layout.marginTop = 50; |
364 |
container.setLayout(layout); |
365 |
GridData gd = new GridData(GridData.FILL_VERTICAL); |
366 |
gd.verticalIndent = 15; |
367 |
container.setLayoutData(gd); |
368 |
|
369 |
fAddButton = new Button(container, SWT.PUSH); |
370 |
fAddButton.setText(PDEUIMessages.ImportWizard_DetailedPage_add); |
371 |
fAddButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
372 |
fAddButton.addSelectionListener(new SelectionAdapter() { |
373 |
public void widgetSelected(SelectionEvent e) { |
374 |
handleAdd(); |
375 |
} |
376 |
}); |
377 |
SWTUtil.setButtonDimensionHint(fAddButton); |
378 |
|
379 |
fAddAllButton = new Button(container, SWT.PUSH); |
380 |
fAddAllButton.setText(PDEUIMessages.ImportWizard_DetailedPage_addAll); |
381 |
fAddAllButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
382 |
fAddAllButton.addSelectionListener(new SelectionAdapter() { |
383 |
public void widgetSelected(SelectionEvent e) { |
384 |
handleAddAll(); |
385 |
} |
386 |
}); |
387 |
SWTUtil.setButtonDimensionHint(fAddAllButton); |
388 |
|
389 |
fRemoveButton = new Button(container, SWT.PUSH); |
390 |
fRemoveButton.setText(PDEUIMessages.ImportWizard_DetailedPage_remove); |
391 |
fRemoveButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
392 |
fRemoveButton.addSelectionListener(new SelectionAdapter() { |
393 |
public void widgetSelected(SelectionEvent e) { |
394 |
handleRemove(); |
395 |
} |
396 |
}); |
397 |
SWTUtil.setButtonDimensionHint(fRemoveButton); |
398 |
|
399 |
fRemoveAllButton = new Button(container, SWT.PUSH); |
400 |
fRemoveAllButton.setText(PDEUIMessages.ImportWizard_DetailedPage_removeAll); |
401 |
fRemoveAllButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
402 |
fRemoveAllButton.addSelectionListener(new SelectionAdapter() { |
403 |
public void widgetSelected(SelectionEvent e) { |
404 |
handleRemoveAll(); |
405 |
} |
406 |
}); |
407 |
SWTUtil.setButtonDimensionHint(fRemoveAllButton); |
408 |
|
409 |
fCountLabel = new Label(container, SWT.NONE); |
410 |
fCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); |
411 |
comp.setContent(container); |
412 |
comp.setMinHeight(250); |
413 |
comp.setExpandHorizontal(true); |
414 |
comp.setExpandVertical(true); |
415 |
return container; |
416 |
} |
417 |
|
418 |
private Composite createTemplateField(Composite parent) { |
419 |
Group container = createFilterContainer(parent, PDEUIMessages.InternationalizeWizard_PluginPage_template, PDEUIMessages.InternationalizeWizard_PluginPage_templateLabel); |
420 |
fTemplateText = createFilterText(container, NLSFragmentGenerator.PLUGIN_NAME_MACRO + ".nl1"); |
421 |
fTemplateText.addModifyListener(new ModifyListener() { |
422 |
public void modifyText(ModifyEvent e) { |
423 |
pageChanged(); |
424 |
} |
425 |
}); |
426 |
return container; |
427 |
} |
428 |
|
429 |
private Composite createScrollArea(Composite parent) { |
430 |
Group container = createFilterContainer(parent, PDEUIMessages.InternationalizeWizard_PluginPage_filter, PDEUIMessages.ImportWizard_DetailedPage_search); |
431 |
fFilterText = createFilterText(container, ""); //$NON-NLS-1$ |
432 |
return container; |
433 |
} |
434 |
|
435 |
protected void refreshPage() { |
436 |
fSelectedViewer.getTable().removeAll(); |
437 |
fSelected.clear(); |
438 |
fAvailableViewer.refresh(); |
439 |
pageChanged(); |
440 |
} |
441 |
|
442 |
protected void pageChanged() { |
443 |
pageChanged(false, false); |
444 |
} |
445 |
|
446 |
protected void pageChanged(boolean doAddEnablement, boolean doRemoveEnablement) { |
447 |
if (fTemplateText.getText().length() == 0) { |
448 |
setErrorMessage(PDEUIMessages.InternationalizeWizard_PluginPage_templateError); |
449 |
} else if (fSelectedViewer.getTable().getItemCount() == 0) { |
450 |
setErrorMessage(PDEUIMessages.InternationalizeWizard_PluginPage_selectionError); |
451 |
} else { |
452 |
setErrorMessage(null); |
453 |
} |
454 |
|
455 |
updateCount(); |
456 |
updateButtonEnablement(doAddEnablement, doRemoveEnablement); |
457 |
setPageComplete(fSelectedViewer.getTable().getItemCount() > 0); |
458 |
} |
459 |
|
460 |
private void updateCount() { |
461 |
fCountLabel.setText(NLS.bind(PDEUIMessages.ImportWizard_DetailedPage_count, (new String[] {new Integer(fSelectedViewer.getTable().getItemCount()).toString(), new Integer(fAvailableViewer.getTable().getItemCount() + fSelectedViewer.getTable().getItemCount()).toString()}))); |
462 |
fCountLabel.getParent().layout(); |
463 |
} |
464 |
|
465 |
private void updateButtonEnablement(boolean doAddEnablement, boolean doRemoveEnablement) { |
466 |
int availableCount = fAvailableViewer.getTable().getItemCount(); |
467 |
int importCount = fSelectedViewer.getTable().getItemCount(); |
468 |
|
469 |
if (doAddEnablement) |
470 |
updateSelectionBasedEnablement(fAvailableViewer.getSelection(), true); |
471 |
if (doRemoveEnablement) |
472 |
updateSelectionBasedEnablement(fSelectedViewer.getSelection(), false); |
473 |
|
474 |
fAddAllButton.setEnabled(availableCount > 0); |
475 |
fRemoveAllButton.setEnabled(importCount > 0); |
476 |
} |
477 |
|
478 |
private void updateSelectionBasedEnablement(ISelection theSelection, boolean available) { |
479 |
if (available) |
480 |
fAddButton.setEnabled(!theSelection.isEmpty()); |
481 |
else |
482 |
fRemoveButton.setEnabled(!theSelection.isEmpty()); |
483 |
} |
484 |
|
485 |
private void handleAdd() { |
486 |
IStructuredSelection ssel = (IStructuredSelection) fAvailableViewer.getSelection(); |
487 |
if (ssel.size() > 0) { |
488 |
Table table = fAvailableViewer.getTable(); |
489 |
int index = table.getSelectionIndices()[0]; |
490 |
Object[] selection = ssel.toArray(); |
491 |
setBlockSelectionListeners(true); |
492 |
setRedraw(false); |
493 |
for (int i = 0; i < selection.length; i++) { |
494 |
doAdd(selection[i]); |
495 |
} |
496 |
setRedraw(true); |
497 |
setBlockSelectionListeners(false); |
498 |
table.setSelection(index < table.getItemCount() ? index : table.getItemCount() - 1); |
499 |
pageChanged(true, false); |
500 |
} |
501 |
} |
502 |
|
503 |
private void handleAddAll() { |
504 |
TableItem[] items = fAvailableViewer.getTable().getItems(); |
505 |
|
506 |
ArrayList data = new ArrayList(); |
507 |
for (int i = 0; i < items.length; i++) { |
508 |
data.add(items[i].getData()); |
509 |
} |
510 |
if (data.size() > 0) { |
511 |
Object[] datas = data.toArray(); |
512 |
setBlockSelectionListeners(true); |
513 |
setRedraw(false); |
514 |
for (int i = 0; i < datas.length; i++) { |
515 |
doAdd(datas[i]); |
516 |
} |
517 |
setRedraw(true); |
518 |
setBlockSelectionListeners(false); |
519 |
pageChanged(true, false); |
520 |
} |
521 |
} |
522 |
|
523 |
private void handleRemove() { |
524 |
IStructuredSelection ssel = (IStructuredSelection) fSelectedViewer.getSelection(); |
525 |
if (ssel.size() > 0) { |
526 |
Table table = fSelectedViewer.getTable(); |
527 |
int index = table.getSelectionIndices()[0]; |
528 |
Object[] selection = ssel.toArray(); |
529 |
setBlockSelectionListeners(true); |
530 |
setRedraw(false); |
531 |
for (int i = 0; i < selection.length; i++) { |
532 |
doRemove(selection[i]); |
533 |
} |
534 |
setRedraw(true); |
535 |
setBlockSelectionListeners(false); |
536 |
table.setSelection(index < table.getItemCount() ? index : table.getItemCount() - 1); |
537 |
pageChanged(false, true); |
538 |
} |
539 |
} |
540 |
|
541 |
private void doAdd(Object o) { |
542 |
fInternationalizeModelTable.removeModel(o); |
543 |
fSelectedViewer.add(o); |
544 |
fAvailableViewer.remove(o); |
545 |
fSelected.put(o, null); |
546 |
} |
547 |
|
548 |
private void doRemove(Object o) { |
549 |
fInternationalizeModelTable.addModel(o); |
550 |
fSelected.remove(o); |
551 |
fSelectedViewer.remove(o); |
552 |
fAvailableViewer.add(o); |
553 |
} |
554 |
|
555 |
// used to prevent flicker during operations that move items between lists |
556 |
private void setRedraw(boolean redraw) { |
557 |
fAvailableViewer.getTable().setRedraw(redraw); |
558 |
fSelectedViewer.getTable().setRedraw(redraw); |
559 |
} |
560 |
|
561 |
private void handleRemoveAll() { |
562 |
TableItem[] items = fSelectedViewer.getTable().getItems(); |
563 |
|
564 |
ArrayList data = new ArrayList(); |
565 |
for (int i = 0; i < items.length; i++) { |
566 |
data.add(items[i].getData()); |
567 |
} |
568 |
if (data.size() > 0) { |
569 |
Object[] datas = data.toArray(); |
570 |
setBlockSelectionListeners(true); |
571 |
setRedraw(false); |
572 |
for (int i = 0; i < datas.length; i++) { |
573 |
doRemove(datas[i]); |
574 |
} |
575 |
setRedraw(true); |
576 |
setBlockSelectionListeners(false); |
577 |
pageChanged(false, true); |
578 |
} |
579 |
} |
580 |
|
581 |
public void dispose() { |
582 |
PDEPlugin.getDefault().getLabelProvider().disconnect(this); |
583 |
PDECore.getDefault().getModelManager().getExternalModelManager().removeModelProviderListener(this); |
584 |
} |
585 |
|
586 |
private void setBlockSelectionListeners(boolean blockSelectionListeners) { |
587 |
fBlockSelectionListeners = blockSelectionListeners; |
588 |
} |
589 |
|
590 |
public boolean isCurrentPage() { |
591 |
return super.isCurrentPage(); |
592 |
} |
593 |
|
594 |
public boolean canFlipToNextPage() { |
595 |
if (fSelectedViewer.getTable().getItems().length > 0 && getTemplate().length() > 0) { |
596 |
return true; |
597 |
} |
598 |
return false; |
599 |
} |
600 |
|
601 |
public String getTemplate() { |
602 |
return fTemplateText.getText(); |
603 |
} |
604 |
|
605 |
public boolean overwriteWithoutAsking() { |
606 |
return overwriteOption.getSelection(); |
607 |
} |
608 |
} |