Project

General

Profile

Download (25.6 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2017 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.taxeditor.ui.dialog.selection;
11

    
12

    
13

    
14
import java.text.Collator;
15
import java.util.ArrayList;
16
import java.util.Collections;
17
import java.util.Comparator;
18
import java.util.List;
19

    
20
import org.eclipse.core.runtime.Assert;
21
import org.eclipse.core.runtime.CoreException;
22
import org.eclipse.core.runtime.IProgressMonitor;
23
import org.eclipse.core.runtime.IStatus;
24
import org.eclipse.core.runtime.ListenerList;
25
import org.eclipse.core.runtime.Status;
26
import org.eclipse.core.runtime.jobs.Job;
27
import org.eclipse.jface.action.LegacyActionTools;
28
import org.eclipse.jface.dialogs.Dialog;
29
import org.eclipse.jface.dialogs.IDialogConstants;
30
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
31
import org.eclipse.jface.viewers.DoubleClickEvent;
32
import org.eclipse.jface.viewers.IColorProvider;
33
import org.eclipse.jface.viewers.IDoubleClickListener;
34
import org.eclipse.jface.viewers.IFontProvider;
35
import org.eclipse.jface.viewers.ILabelProvider;
36
import org.eclipse.jface.viewers.ILabelProviderListener;
37
import org.eclipse.jface.viewers.ISelectionChangedListener;
38
import org.eclipse.jface.viewers.IStructuredContentProvider;
39
import org.eclipse.jface.viewers.LabelProvider;
40
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
41
import org.eclipse.jface.viewers.SelectionChangedEvent;
42
import org.eclipse.jface.viewers.StructuredSelection;
43
import org.eclipse.jface.viewers.StyledCellLabelProvider;
44
import org.eclipse.jface.viewers.StyledString;
45
import org.eclipse.jface.viewers.TableViewer;
46
import org.eclipse.jface.viewers.Viewer;
47
import org.eclipse.jface.viewers.ViewerCell;
48
import org.eclipse.swt.SWT;
49
import org.eclipse.swt.accessibility.AccessibleAdapter;
50
import org.eclipse.swt.accessibility.AccessibleEvent;
51
import org.eclipse.swt.events.KeyAdapter;
52
import org.eclipse.swt.events.KeyEvent;
53
import org.eclipse.swt.events.ModifyEvent;
54
import org.eclipse.swt.events.ModifyListener;
55
import org.eclipse.swt.events.TraverseEvent;
56
import org.eclipse.swt.events.TraverseListener;
57
import org.eclipse.swt.graphics.Color;
58
import org.eclipse.swt.graphics.Font;
59
import org.eclipse.swt.graphics.GC;
60
import org.eclipse.swt.graphics.Point;
61
import org.eclipse.swt.graphics.Rectangle;
62
import org.eclipse.swt.layout.GridData;
63
import org.eclipse.swt.layout.GridLayout;
64
import org.eclipse.swt.widgets.Button;
65
import org.eclipse.swt.widgets.Composite;
66
import org.eclipse.swt.widgets.Control;
67
import org.eclipse.swt.widgets.Display;
68
import org.eclipse.swt.widgets.Event;
69
import org.eclipse.swt.widgets.Label;
70
import org.eclipse.swt.widgets.Shell;
71
import org.eclipse.swt.widgets.Table;
72
import org.eclipse.swt.widgets.Text;
73
import org.eclipse.ui.IWorkbenchPreferenceConstants;
74
import org.eclipse.ui.PlatformUI;
75
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
76
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
77
import org.eclipse.ui.internal.WorkbenchImages;
78
import org.eclipse.ui.internal.WorkbenchMessages;
79
import org.eclipse.ui.internal.WorkbenchPlugin;
80

    
81
import eu.etaxonomy.cdm.model.common.ICdmBase;
82
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
83
import eu.etaxonomy.taxeditor.l10n.Messages;
84
import eu.etaxonomy.taxeditor.ui.dialog.selection.CdmFilteredItemsSelectionDialog.ItemsListSeparator;
85

    
86
/**
87
 * @author k.luther
88
 * @date 15.11.2017
89
 *
90
 */
91
public abstract class SearchDialog<T extends ICdmBase> extends Dialog{// implements IConversationEnabled{
92

    
93
        private TableViewer list;
94
        private Text searchField;
95
        private String title;
96
        protected Button newButton1;
97

    
98

    
99
        protected Button newButton2;
100
        protected Button filterButton;
101
        protected Button btnCheckButton;
102
        private StructuredSelection currentSelection;
103

    
104
        // message to show user
105
        private String message = ""; //$NON-NLS-1$
106

    
107
        protected final ContentProvider contentProvider;
108
        ItemsListLabelProvider itemsListLabelProvider;
109

    
110
        private final RefreshCacheJob refreshCacheJob;
111

    
112
        protected Object preferenceID;
113

    
114
        protected final int new_id = 4;
115
        protected final int new_id2 = 5;
116
        protected final int space_id = 6;
117
        // Need to keep our own list of listeners
118
        private final ListenerList listeners = new ListenerList();
119

    
120

    
121
        private static final String EMPTY_STRING = ""; //$NON-NLS-1$
122
        private GridData gd_1;
123
        protected boolean useIdentifier;
124

    
125
        public SearchDialog(Shell parent, String title) {
126
            super(parent);
127
            this.title = title;
128
            contentProvider = new ContentProvider();
129
            refreshCacheJob = new RefreshCacheJob();
130

    
131
        }
132

    
133
        @Override
134
        public void create() {
135
            // TODO Auto-generated method stub
136
            super.create();
137
            refresh();
138
        }
139

    
140
        @Override
141
        protected void configureShell(Shell shell) {
142
            super.configureShell(shell);
143
            shell.setText(title);
144
         }
145

    
146
        @Override
147
        protected Control createDialogArea(Composite parent) {
148
            Composite container = (Composite) super.createDialogArea(parent);
149

    
150
            GridData gd = new GridData(GridData.FILL_BOTH);
151
            container.setLayoutData(gd);
152

    
153
            GridLayout layout = new GridLayout();
154
            layout.numColumns = 1;
155
            layout.marginWidth = 0;
156
            layout.marginHeight = 0;
157
            container.setLayout(layout);
158

    
159
            final Label headerLabel = createHeader(container);
160

    
161
            Composite searchAndFilter = new Composite(container, container.getStyle());
162

    
163
            searchAndFilter.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
164
            GridLayout searchAndFilterLayout = new GridLayout();
165
            searchAndFilterLayout.numColumns = 2;
166
            searchAndFilter.setLayout(searchAndFilterLayout);
167
            searchField = new Text(searchAndFilter, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL);
168
            searchField.getAccessible().addAccessibleListener(new AccessibleAdapter() {
169
                @Override
170
                public void getName(AccessibleEvent e) {
171
                    e.result = LegacyActionTools.removeMnemonics(headerLabel
172
                            .getText());
173
                }
174
            });
175
            searchField.addModifyListener(new ModifyListener() {
176
                @Override
177
                public void modifyText(ModifyEvent e) {
178
                    search();
179
//                    fillContentProvider(null);
180

    
181
                }
182
            });
183
            gd_1 = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
184
            gd_1.horizontalIndent = 7;
185

    
186
            searchField.setLayoutData(gd_1);
187

    
188
            createFilterButton(searchAndFilter);
189

    
190
            addIdentifierCheckButton(searchAndFilter);
191
//            new Label(searchAndFilter, SWT.NONE);
192
            setList(new TableViewer(container,  SWT.SINGLE
193
                    | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL));
194

    
195
            getList().setContentProvider(contentProvider);
196
            getList().setLabelProvider(getItemsListLabelProvider());
197
            getList().setInput(new Object[0]);
198
            getList().setItemCount(contentProvider.getNumberOfElements());
199
            getList().addSelectionChangedListener(new ISelectionChangedListener() {
200
                @Override
201
                public void selectionChanged(SelectionChangedEvent event) {
202
                    StructuredSelection selection = (StructuredSelection) event
203
                            .getSelection();
204
                    currentSelection = selection;
205
                }
206
            });
207
            getList().addDoubleClickListener(new IDoubleClickListener() {
208
                @Override
209
                public void doubleClick(DoubleClickEvent event) {
210
                    okPressed();
211
                }
212
            });
213
            searchField.addKeyListener(new KeyAdapter() {
214
                @Override
215
                public void keyPressed(KeyEvent e) {
216
                    if (e.keyCode == SWT.ARROW_DOWN) {
217
                        if (getList().getTable().getItemCount() > 0) {
218
                            getList().getTable().setFocus();
219
                        }
220
                    }
221
                }
222
            });
223

    
224
//            createExtendedContentArea(container);
225
            new Label(container, SWT.NONE);
226
            search();
227

    
228
            return container;
229
        }
230

    
231

    
232
        protected void addIdentifierCheckButton(Composite searchAndFilter) {
233
           //as default do nothing
234
        }
235

    
236

    
237
        abstract void createFilterButton(Composite searchAndFilter) ;
238

    
239
        protected abstract void search();
240

    
241

    
242
        /**
243
         * Create a new header which is labelled by headerLabel.
244
         *
245
         * @param parent
246
         * @return Label the label of the header
247
         */
248
        private Label createHeader(Composite parent) {
249
            Composite header = new Composite(parent, SWT.NONE);
250
            GridData gd_header = new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1);
251
            gd_header.horizontalIndent = 5;
252
            gd_header.widthHint = 575;
253
            header.setLayoutData(gd_header);
254

    
255
            GridLayout layout = new GridLayout();
256
            layout.marginLeft = 5;
257
            layout.horizontalSpacing = 0;
258
            layout.verticalSpacing = 1;
259
            layout.marginWidth = 0;
260
            layout.marginHeight = 0;
261
            header.setLayout(layout);
262
            new Label(header, SWT.NONE);
263
            Label headerLabel = new Label(header, SWT.NONE);
264
            headerLabel.setText((getMessage() != null && getMessage().trim()
265
                    .length() > 0) ? getMessage()
266
                    : Messages.SearchDialog_patternLabel);
267
            headerLabel.addTraverseListener(new TraverseListener() {
268
                @Override
269
                public void keyTraversed(TraverseEvent e) {
270
                    if (e.detail == SWT.TRAVERSE_MNEMONIC && e.doit) {
271
                        e.detail = SWT.TRAVERSE_NONE;
272
                        searchField.setFocus();
273
                    }
274
                }
275
            });
276
            GridData gd_headerLabel = new GridData(GridData.FILL_HORIZONTAL);
277
            gd_headerLabel.horizontalAlignment = SWT.LEFT;
278
            gd_headerLabel.grabExcessHorizontalSpace = false;
279
            gd_headerLabel.verticalAlignment = SWT.BOTTOM;
280
            gd_headerLabel.minimumHeight = 10;
281
            headerLabel.setLayoutData(gd_headerLabel);
282
            return headerLabel;
283
        }
284

    
285
        protected String getMessage() {
286
            return message;
287
        }
288

    
289
        protected void setMessage(String message){
290
            this.message = message;
291
        }
292

    
293
        public Text getSearchField() {
294
            return searchField;
295
        }
296

    
297

    
298
        public void setSearchField(Text searchField) {
299
            this.searchField = searchField;
300
        }
301

    
302
        private ItemsListLabelProvider getItemsListLabelProvider() {
303
            if (itemsListLabelProvider == null) {
304
                itemsListLabelProvider = new ItemsListLabelProvider(
305
                        new LabelProvider());
306
            }
307
            return itemsListLabelProvider;
308
        }
309

    
310

    
311
        public TableViewer getList() {
312
            return list;
313
        }
314

    
315
        public void setList(TableViewer list) {
316
            this.list = list;
317
            Table table = list.getTable();
318
            GridData gd_table = new GridData(SWT.CENTER, SWT.CENTER, true, true, 2, 1);
319
            gd_table.heightHint = 231;
320
            gd_table.widthHint = 543;
321
            table.setLayoutData(gd_table);
322
        }
323

    
324
        public Button getNewButton1() {
325
            return newButton1;
326
        }
327

    
328

    
329
        public void setNewButton1(Button newButton1) {
330
            this.newButton1 = newButton1;
331
        }
332

    
333

    
334
        public Button getNewButton2() {
335
            return newButton2;
336
        }
337

    
338

    
339
        public void setNewButton2(Button newButton2) {
340
            this.newButton2 = newButton2;
341
        }
342

    
343

    
344
        public Button getFilterButton() {
345
            return filterButton;
346
        }
347

    
348

    
349
        public void setFilterButton(Button filterButton) {
350
            this.filterButton = filterButton;
351
        }
352

    
353
        /**
354
         * Sets a new label provider for items in the list. If the label provider
355
         * also implements {@link
356
         * org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider
357
         * .IStyledLabelProvider}, the style text labels provided by it will be used
358
         * provided that the corresponding preference is set.
359
         *
360
         * @see IWorkbenchPreferenceConstants#USE_COLORED_LABELS
361
         *
362
         * @param listLabelProvider
363
         *      the label provider for items in the list
364
         */
365
        public void setListLabelProvider(ILabelProvider listLabelProvider) {
366
            getItemsListLabelProvider().setProvider(listLabelProvider);
367
        }
368
        protected Comparator getItemsComparator() {
369
            return new Comparator<UuidAndTitleCache>() {
370
                @Override
371
                public int compare(UuidAndTitleCache entity1,
372
                        UuidAndTitleCache entity2) {
373
                    Collator collator = Collator.getInstance();
374
                    if (entity1.getUuid().equals(entity2.getUuid())){
375
                        return 0;
376
                    }
377
                    int result = collator.compare(entity1.getTitleCache(), entity2.getTitleCache());
378
                    if (result == 0){
379
                        result = entity1.getUuid().compareTo(entity2.getUuid());
380
                    }
381
                    return result;
382
                }
383
            };
384
        }
385

    
386

    
387
        class ContentProvider implements
388
                IStructuredContentProvider {
389

    
390
            private List items;
391

    
392
            /**
393
             * Creates new instance of <code>ContentProvider</code>.
394
             */
395
            public ContentProvider() {
396
                this.items = Collections.synchronizedList(new ArrayList(2048));
397
            }
398

    
399
            /**
400
             * Removes all content items and resets progress message.
401
             */
402
            public void reset() {
403
                this.items.clear();
404

    
405
            }
406

    
407
            public void add(Object item) {
408
                this.items.add(item);
409
            }
410

    
411
            /**
412
             * Refresh dialog.
413
             */
414
            public void refresh() {
415
                scheduleRefresh();
416
            }
417

    
418
            /**
419
             * Schedule refresh job.
420
             */
421
            public void scheduleRefresh() {
422
                refreshCacheJob.cancelAll();
423
                refreshCacheJob.schedule();
424
            }
425

    
426
            /*
427
             * (non-Javadoc)
428
             *
429
             * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
430
             */
431
            @Override
432
            public Object[] getElements(Object inputElement) {
433
                return items.toArray();
434
            }
435

    
436
            public int getNumberOfElements() {
437
               return items.size();
438
            }
439

    
440
            /*
441
             * (non-Javadoc)
442
             *
443
             * @see org.eclipse.jface.viewers.IContentProvider#dispose()
444
             */
445
            @Override
446
            public void dispose() {
447
            }
448

    
449
            /*
450
             * (non-Javadoc)
451
             *
452
             * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
453
             *      java.lang.Object, java.lang.Object)
454
             */
455
            @Override
456
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
457
            }
458

    
459

    
460
        }
461

    
462

    
463
        public boolean isUseIdentifier() {
464
            return useIdentifier;
465
        }
466

    
467

    
468
        public StructuredSelection getCurrentSelection() {
469
            return currentSelection;
470
        }
471

    
472
        /**
473
         * Fills the content provider with matching items.
474
         *
475
         * @param progressMonitor
476
         *            must be used to report search progress. The state of this
477
         *            progress monitor reflects the state of the filtering process.
478
         * @throws CoreException
479
         */
480
        protected abstract void fillContentProvider(IProgressMonitor progressMonitor) ;
481

    
482

    
483
        /**
484
         * Refreshes the dialog - has to be called in UI thread.
485
         */
486
        public void refresh() {
487
            if (getList() != null && !getList().getTable().isDisposed()) {
488

    
489
                List lastRefreshSelection = ((StructuredSelection) getList()
490
                        .getSelection()).toList();
491
                getList().getTable().deselectAll();
492

    
493
                getList().setItemCount(contentProvider.getNumberOfElements());
494
                getList().refresh();
495

    
496
                if (getList().getTable().getItemCount() > 0) {
497
                    // preserve previous selection
498
                    if ( lastRefreshSelection != null
499
                            && lastRefreshSelection.size() > 0) {
500
                        getList().setSelection(new StructuredSelection(
501
                                lastRefreshSelection));
502
                    } else {
503

    
504
                        getList().getTable().setSelection(0);
505
                        getList().getTable().notifyListeners(SWT.Selection, new Event());
506
                    }
507
                    if ( super.getButton(IDialogConstants.OK_ID) != null){
508
                        super.getButton(IDialogConstants.OK_ID).setEnabled(true);
509
                    }
510
                } else {
511
                    getList().setSelection(StructuredSelection.EMPTY);
512
                }
513

    
514
            }
515
        }
516

    
517
        /**
518
         * A job responsible for computing filtered items list presented using
519
         * <code>RefreshJob</code>.
520
         *
521
         * @see FilteredItemsSelectionDialog.RefreshJob
522
         *
523
         */
524
        private class RefreshCacheJob extends Job {
525

    
526
            public RefreshCacheJob() {
527
                super(
528
                        WorkbenchMessages.FilteredItemsSelectionDialog_cacheRefreshJob);
529
                setSystem(true);
530
            }
531

    
532
            /**
533
             * Stops the job and all sub-jobs.
534
             */
535
            public void cancelAll() {
536
                cancel();
537
            }
538

    
539
            /*
540
             * (non-Javadoc)
541
             *
542
             * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
543
             */
544
            @Override
545
            protected IStatus run(IProgressMonitor monitor) {
546
                if (monitor.isCanceled()) {
547
                    return new Status(IStatus.CANCEL, WorkbenchPlugin.PI_WORKBENCH,
548
                            IStatus.CANCEL, EMPTY_STRING, null);
549
                }
550

    
551
                if (SearchDialog.this != null) {
552
                    SearchDialog.this.fillContentProvider(monitor);
553
                }
554

    
555
                return new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK,
556
                        EMPTY_STRING, null);
557

    
558
            }
559

    
560
            /*
561
             * (non-Javadoc)
562
             *
563
             * @see org.eclipse.core.runtime.jobs.Job#canceling()
564
             */
565
            @Override
566
            protected void canceling() {
567
                super.canceling();
568
            }
569

    
570
        }
571

    
572
        private class ItemsListLabelProvider extends StyledCellLabelProvider
573
        implements ILabelProviderListener {
574
            private ILabelProvider provider;
575

    
576
    /**
577
     * Creates a new instance of the class.
578
     *
579
     * @param provider
580
     *            the label provider for all items, not <code>null</code>
581
     * @param selectionDecorator
582
     *            the decorator for selected items, can be <code>null</code>
583
     */
584
    public ItemsListLabelProvider(ILabelProvider provider) {
585
        Assert.isNotNull(provider);
586
        this.provider = provider;
587
        this.provider.addListener(this);
588
    }
589

    
590
    /**
591
     * Sets new label provider.
592
     *
593
     * @param newProvider
594
     *            new label provider for items in the list, not
595
     *            <code>null</code>
596
     */
597
    public void setProvider(ILabelProvider newProvider) {
598
        Assert.isNotNull(newProvider);
599
        provider.removeListener(this);
600
        provider.dispose();
601
        provider = newProvider;
602

    
603
        if (provider != null) {
604
            provider.addListener(this);
605
        }
606
    }
607

    
608

    
609

    
610
    private boolean isSelected(Object element) {
611
        if (element != null && getCurrentSelection() != null) {
612
            if (element.equals(getCurrentSelection())) {
613
                return true;
614
            }
615
        }
616
        return false;
617
    }
618

    
619
    /*
620
     * (non-Javadoc)
621
     *
622
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
623
     */
624
    private String getText(Object element) {
625
        if (element instanceof ItemsListSeparator) {
626
            return getSeparatorLabel(((ItemsListSeparator) element)
627
                    .getName());
628
        }
629
        String str = provider.getText(element);
630
        return str;
631
    }
632

    
633
    private StyledString getStyledText(Object element,
634
            IStyledLabelProvider provider) {
635
        StyledString string = provider.getStyledText(element);
636

    
637
        return string;
638
    }
639

    
640
    @Override
641
    public void update(ViewerCell cell) {
642
        Object element = cell.getElement();
643

    
644
        if (!(element instanceof ItemsListSeparator)
645
                && provider instanceof IStyledLabelProvider) {
646
            IStyledLabelProvider styledLabelProvider = (IStyledLabelProvider) provider;
647
            StyledString styledString = getStyledText(element,
648
                    styledLabelProvider);
649

    
650
            cell.setText(styledString.getString());
651
            cell.setStyleRanges(styledString.getStyleRanges());
652
            cell.setImage(styledLabelProvider.getImage(element));
653
        } else {
654
            cell.setText(getText(element));
655

    
656
        }
657
        cell.setFont(getFont(element));
658
        cell.setForeground(getForeground(element));
659
        cell.setBackground(getBackground(element));
660

    
661
        super.update(cell);
662
    }
663

    
664
    private String getSeparatorLabel(String separatorLabel) {
665
        Rectangle rect = getList().getTable().getBounds();
666

    
667
        int borderWidth = getList().getTable().computeTrim(0, 0, 0, 0).width;
668

    
669
        int imageWidth = WorkbenchImages.getImage(
670
                IWorkbenchGraphicConstants.IMG_OBJ_SEPARATOR).getBounds().width;
671

    
672
        int width = rect.width - borderWidth - imageWidth;
673

    
674
        GC gc = new GC(getList().getTable());
675
        gc.setFont(getList().getTable().getFont());
676

    
677
        int fSeparatorWidth = gc.getAdvanceWidth('-');
678
        int fMessageLength = gc.textExtent(separatorLabel).x;
679

    
680
        gc.dispose();
681

    
682
        StringBuffer dashes = new StringBuffer();
683
        int chars = (((width - fMessageLength) / fSeparatorWidth) / 2) - 2;
684
        for (int i = 0; i < chars; i++) {
685
            dashes.append('-');
686
        }
687

    
688
        StringBuffer result = new StringBuffer();
689
        result.append(dashes);
690
        result.append(" " + separatorLabel + " "); //$NON-NLS-1$//$NON-NLS-2$
691
        result.append(dashes);
692
        return result.toString().trim();
693
    }
694

    
695
    /*
696
     * (non-Javadoc)
697
     *
698
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
699
     */
700
    @Override
701
    public void addListener(ILabelProviderListener listener) {
702
        listeners.add(listener);
703
    }
704

    
705
    /*
706
     * (non-Javadoc)
707
     *
708
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
709
     */
710
    @Override
711
    public void dispose() {
712
        provider.removeListener(this);
713
        provider.dispose();
714
        super.dispose();
715
    }
716

    
717
    /*
718
     * (non-Javadoc)
719
     *
720
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
721
     *      java.lang.String)
722
     */
723
    @Override
724
    public boolean isLabelProperty(Object element, String property) {
725
        if (provider.isLabelProperty(element, property)) {
726
            return true;
727
        }
728
        return false;
729
    }
730

    
731
    /*
732
     * (non-Javadoc)
733
     *
734
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
735
     */
736
    @Override
737
    public void removeListener(ILabelProviderListener listener) {
738
        listeners.remove(listener);
739
    }
740

    
741
    private Color getBackground(Object element) {
742
        if (element instanceof ItemsListSeparator) {
743
            return null;
744
        }
745
        if (provider instanceof IColorProvider) {
746
            return ((IColorProvider) provider).getBackground(element);
747
        }
748
        return null;
749
    }
750

    
751
    private Color getForeground(Object element) {
752
        if (element instanceof ItemsListSeparator) {
753
            return Display.getCurrent().getSystemColor(
754
                    SWT.COLOR_WIDGET_NORMAL_SHADOW);
755
        }
756
        if (provider instanceof IColorProvider) {
757
            return ((IColorProvider) provider).getForeground(element);
758
        }
759
        return null;
760
    }
761

    
762
    private Font getFont(Object element) {
763
        if (element instanceof ItemsListSeparator) {
764
            return null;
765
        }
766
        if (provider instanceof IFontProvider) {
767
            return ((IFontProvider) provider).getFont(element);
768
        }
769
        return null;
770
    }
771

    
772
    /*
773
     * (non-Javadoc)
774
     *
775
     * @see org.eclipse.jface.viewers.ILabelProviderListener#labelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent)
776
     */
777
    @Override
778
    public void labelProviderChanged(LabelProviderChangedEvent event) {
779
        Object[] l = listeners.getListeners();
780
        for (int i = 0; i < listeners.size(); i++) {
781
            ((ILabelProviderListener) l[i]).labelProviderChanged(event);
782
        }
783
    }
784
}
785

    
786
    @Override
787
    protected Point getInitialSize() {
788
        return new Point(593, 399);
789
    }
790

    
791

    
792

    
793
}
794

    
795

    
(34-34/45)