Project

General

Profile

Download (25.3 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
        protected void configureShell(Shell shell) {
135
            super.configureShell(shell);
136
            shell.setText(title);
137
         }
138

    
139
        @Override
140
        protected Control createDialogArea(Composite parent) {
141
            Composite container = (Composite) super.createDialogArea(parent);
142

    
143
            GridData gd = new GridData(GridData.FILL_BOTH);
144
            container.setLayoutData(gd);
145

    
146
            GridLayout layout = new GridLayout();
147
            layout.numColumns = 1;
148
            layout.marginWidth = 0;
149
            layout.marginHeight = 0;
150
            container.setLayout(layout);
151

    
152
            final Label headerLabel = createHeader(container);
153

    
154
            Composite searchAndFilter = new Composite(container, container.getStyle());
155

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

    
174
                }
175
            });
176
            gd_1 = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
177
            gd_1.horizontalIndent = 7;
178

    
179
            searchField.setLayoutData(gd_1);
180

    
181
            createFilterButton(searchAndFilter);
182

    
183
            addIdentifierCheckButton(searchAndFilter);
184
//            new Label(searchAndFilter, SWT.NONE);
185
            setList(new TableViewer(container,  SWT.SINGLE
186
                    | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL));
187

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

    
217
//            createExtendedContentArea(container);
218
            new Label(container, SWT.NONE);
219
            search();
220

    
221
            return container;
222
        }
223

    
224

    
225
        protected void addIdentifierCheckButton(Composite searchAndFilter) {
226
           //as default do nothing
227
        }
228

    
229

    
230
        abstract void createFilterButton(Composite searchAndFilter) ;
231

    
232
        protected abstract void search();
233

    
234

    
235
        /**
236
         * Create a new header which is labelled by headerLabel.
237
         *
238
         * @param parent
239
         * @return Label the label of the header
240
         */
241
        private Label createHeader(Composite parent) {
242
            Composite header = new Composite(parent, SWT.NONE);
243
            GridData gd_header = new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1);
244
            gd_header.horizontalIndent = 5;
245
            gd_header.widthHint = 575;
246
            header.setLayoutData(gd_header);
247

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

    
278
        protected String getMessage() {
279
            return message;
280
        }
281

    
282
        protected void setMessage(String message){
283
            this.message = message;
284
        }
285

    
286
        public Text getSearchField() {
287
            return searchField;
288
        }
289

    
290

    
291
        public void setSearchField(Text searchField) {
292
            this.searchField = searchField;
293
        }
294

    
295
        private ItemsListLabelProvider getItemsListLabelProvider() {
296
            if (itemsListLabelProvider == null) {
297
                itemsListLabelProvider = new ItemsListLabelProvider(
298
                        new LabelProvider());
299
            }
300
            return itemsListLabelProvider;
301
        }
302

    
303

    
304
        public TableViewer getList() {
305
            return list;
306
        }
307

    
308
        public void setList(TableViewer list) {
309
            this.list = list;
310
            Table table = list.getTable();
311
            GridData gd_table = new GridData(SWT.CENTER, SWT.CENTER, true, true, 2, 1);
312
            gd_table.heightHint = 231;
313
            gd_table.widthHint = 543;
314
            table.setLayoutData(gd_table);
315
        }
316

    
317
        public Button getNewButton1() {
318
            return newButton1;
319
        }
320

    
321

    
322
        public void setNewButton1(Button newButton1) {
323
            this.newButton1 = newButton1;
324
        }
325

    
326

    
327
        public Button getNewButton2() {
328
            return newButton2;
329
        }
330

    
331

    
332
        public void setNewButton2(Button newButton2) {
333
            this.newButton2 = newButton2;
334
        }
335

    
336

    
337
        public Button getFilterButton() {
338
            return filterButton;
339
        }
340

    
341

    
342
        public void setFilterButton(Button filterButton) {
343
            this.filterButton = filterButton;
344
        }
345

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

    
379

    
380
        class ContentProvider implements
381
                IStructuredContentProvider {
382

    
383
            private List items;
384

    
385
            /**
386
             * Creates new instance of <code>ContentProvider</code>.
387
             */
388
            public ContentProvider() {
389
                this.items = Collections.synchronizedList(new ArrayList(2048));
390
            }
391

    
392
            /**
393
             * Removes all content items and resets progress message.
394
             */
395
            public void reset() {
396
                this.items.clear();
397

    
398
            }
399

    
400
            public void add(Object item) {
401
                this.items.add(item);
402
            }
403

    
404
            /**
405
             * Refresh dialog.
406
             */
407
            public void refresh() {
408
                scheduleRefresh();
409
            }
410

    
411
            /**
412
             * Schedule refresh job.
413
             */
414
            public void scheduleRefresh() {
415
                refreshCacheJob.cancelAll();
416
                refreshCacheJob.schedule();
417
            }
418

    
419
            /*
420
             * (non-Javadoc)
421
             *
422
             * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
423
             */
424
            @Override
425
            public Object[] getElements(Object inputElement) {
426
                return items.toArray();
427
            }
428

    
429
            public int getNumberOfElements() {
430
               return items.size();
431
            }
432

    
433
            /*
434
             * (non-Javadoc)
435
             *
436
             * @see org.eclipse.jface.viewers.IContentProvider#dispose()
437
             */
438
            @Override
439
            public void dispose() {
440
            }
441

    
442
            /*
443
             * (non-Javadoc)
444
             *
445
             * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
446
             *      java.lang.Object, java.lang.Object)
447
             */
448
            @Override
449
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
450
            }
451

    
452

    
453
        }
454

    
455

    
456
        public boolean isUseIdentifier() {
457
            return useIdentifier;
458
        }
459

    
460

    
461
        public StructuredSelection getCurrentSelection() {
462
            return currentSelection;
463
        }
464

    
465
        /**
466
         * Fills the content provider with matching items.
467
         *
468
         * @param progressMonitor
469
         *            must be used to report search progress. The state of this
470
         *            progress monitor reflects the state of the filtering process.
471
         * @throws CoreException
472
         */
473
        protected abstract void fillContentProvider(IProgressMonitor progressMonitor) ;
474

    
475

    
476
        /**
477
         * Refreshes the dialog - has to be called in UI thread.
478
         */
479
        public void refresh() {
480
            if (getList() != null && !getList().getTable().isDisposed()) {
481

    
482
                List lastRefreshSelection = ((StructuredSelection) getList()
483
                        .getSelection()).toList();
484
                getList().getTable().deselectAll();
485

    
486
                getList().setItemCount(contentProvider.getNumberOfElements());
487
                getList().refresh();
488

    
489
                if (getList().getTable().getItemCount() > 0) {
490
                    // preserve previous selection
491
                    if ( lastRefreshSelection != null
492
                            && lastRefreshSelection.size() > 0) {
493
                        getList().setSelection(new StructuredSelection(
494
                                lastRefreshSelection));
495
                    } else {
496

    
497
                        getList().getTable().setSelection(0);
498
                        getList().getTable().notifyListeners(SWT.Selection, new Event());
499
                    }
500
                    super.getButton(IDialogConstants.OK_ID).setEnabled(true);
501
                } else {
502
                    getList().setSelection(StructuredSelection.EMPTY);
503
                }
504

    
505
            }
506
        }
507

    
508
        /**
509
         * A job responsible for computing filtered items list presented using
510
         * <code>RefreshJob</code>.
511
         *
512
         * @see FilteredItemsSelectionDialog.RefreshJob
513
         *
514
         */
515
        private class RefreshCacheJob extends Job {
516

    
517
            public RefreshCacheJob() {
518
                super(
519
                        WorkbenchMessages.FilteredItemsSelectionDialog_cacheRefreshJob);
520
                setSystem(true);
521
            }
522

    
523
            /**
524
             * Stops the job and all sub-jobs.
525
             */
526
            public void cancelAll() {
527
                cancel();
528
            }
529

    
530
            /*
531
             * (non-Javadoc)
532
             *
533
             * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
534
             */
535
            @Override
536
            protected IStatus run(IProgressMonitor monitor) {
537
                if (monitor.isCanceled()) {
538
                    return new Status(IStatus.CANCEL, WorkbenchPlugin.PI_WORKBENCH,
539
                            IStatus.CANCEL, EMPTY_STRING, null);
540
                }
541

    
542
                if (SearchDialog.this != null) {
543
                    SearchDialog.this.fillContentProvider(monitor);
544
                }
545

    
546
                return new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK,
547
                        EMPTY_STRING, null);
548

    
549
            }
550

    
551
            /*
552
             * (non-Javadoc)
553
             *
554
             * @see org.eclipse.core.runtime.jobs.Job#canceling()
555
             */
556
            @Override
557
            protected void canceling() {
558
                super.canceling();
559
            }
560

    
561
        }
562

    
563
        private class ItemsListLabelProvider extends StyledCellLabelProvider
564
        implements ILabelProviderListener {
565
            private ILabelProvider provider;
566

    
567
    /**
568
     * Creates a new instance of the class.
569
     *
570
     * @param provider
571
     *            the label provider for all items, not <code>null</code>
572
     * @param selectionDecorator
573
     *            the decorator for selected items, can be <code>null</code>
574
     */
575
    public ItemsListLabelProvider(ILabelProvider provider) {
576
        Assert.isNotNull(provider);
577
        this.provider = provider;
578
        this.provider.addListener(this);
579
    }
580

    
581
    /**
582
     * Sets new label provider.
583
     *
584
     * @param newProvider
585
     *            new label provider for items in the list, not
586
     *            <code>null</code>
587
     */
588
    public void setProvider(ILabelProvider newProvider) {
589
        Assert.isNotNull(newProvider);
590
        provider.removeListener(this);
591
        provider.dispose();
592
        provider = newProvider;
593

    
594
        if (provider != null) {
595
            provider.addListener(this);
596
        }
597
    }
598

    
599

    
600

    
601
    private boolean isSelected(Object element) {
602
        if (element != null && getCurrentSelection() != null) {
603
            if (element.equals(getCurrentSelection())) {
604
                return true;
605
            }
606
        }
607
        return false;
608
    }
609

    
610
    /*
611
     * (non-Javadoc)
612
     *
613
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
614
     */
615
    private String getText(Object element) {
616
        if (element instanceof ItemsListSeparator) {
617
            return getSeparatorLabel(((ItemsListSeparator) element)
618
                    .getName());
619
        }
620
        String str = provider.getText(element);
621
        return str;
622
    }
623

    
624
    private StyledString getStyledText(Object element,
625
            IStyledLabelProvider provider) {
626
        StyledString string = provider.getStyledText(element);
627

    
628
        return string;
629
    }
630

    
631
    @Override
632
    public void update(ViewerCell cell) {
633
        Object element = cell.getElement();
634

    
635
        if (!(element instanceof ItemsListSeparator)
636
                && provider instanceof IStyledLabelProvider) {
637
            IStyledLabelProvider styledLabelProvider = (IStyledLabelProvider) provider;
638
            StyledString styledString = getStyledText(element,
639
                    styledLabelProvider);
640

    
641
            cell.setText(styledString.getString());
642
            cell.setStyleRanges(styledString.getStyleRanges());
643
            cell.setImage(styledLabelProvider.getImage(element));
644
        } else {
645
            cell.setText(getText(element));
646

    
647
        }
648
        cell.setFont(getFont(element));
649
        cell.setForeground(getForeground(element));
650
        cell.setBackground(getBackground(element));
651

    
652
        super.update(cell);
653
    }
654

    
655
    private String getSeparatorLabel(String separatorLabel) {
656
        Rectangle rect = getList().getTable().getBounds();
657

    
658
        int borderWidth = getList().getTable().computeTrim(0, 0, 0, 0).width;
659

    
660
        int imageWidth = WorkbenchImages.getImage(
661
                IWorkbenchGraphicConstants.IMG_OBJ_SEPARATOR).getBounds().width;
662

    
663
        int width = rect.width - borderWidth - imageWidth;
664

    
665
        GC gc = new GC(getList().getTable());
666
        gc.setFont(getList().getTable().getFont());
667

    
668
        int fSeparatorWidth = gc.getAdvanceWidth('-');
669
        int fMessageLength = gc.textExtent(separatorLabel).x;
670

    
671
        gc.dispose();
672

    
673
        StringBuffer dashes = new StringBuffer();
674
        int chars = (((width - fMessageLength) / fSeparatorWidth) / 2) - 2;
675
        for (int i = 0; i < chars; i++) {
676
            dashes.append('-');
677
        }
678

    
679
        StringBuffer result = new StringBuffer();
680
        result.append(dashes);
681
        result.append(" " + separatorLabel + " "); //$NON-NLS-1$//$NON-NLS-2$
682
        result.append(dashes);
683
        return result.toString().trim();
684
    }
685

    
686
    /*
687
     * (non-Javadoc)
688
     *
689
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
690
     */
691
    @Override
692
    public void addListener(ILabelProviderListener listener) {
693
        listeners.add(listener);
694
    }
695

    
696
    /*
697
     * (non-Javadoc)
698
     *
699
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
700
     */
701
    @Override
702
    public void dispose() {
703
        provider.removeListener(this);
704
        provider.dispose();
705
        super.dispose();
706
    }
707

    
708
    /*
709
     * (non-Javadoc)
710
     *
711
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
712
     *      java.lang.String)
713
     */
714
    @Override
715
    public boolean isLabelProperty(Object element, String property) {
716
        if (provider.isLabelProperty(element, property)) {
717
            return true;
718
        }
719
        return false;
720
    }
721

    
722
    /*
723
     * (non-Javadoc)
724
     *
725
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
726
     */
727
    @Override
728
    public void removeListener(ILabelProviderListener listener) {
729
        listeners.remove(listener);
730
    }
731

    
732
    private Color getBackground(Object element) {
733
        if (element instanceof ItemsListSeparator) {
734
            return null;
735
        }
736
        if (provider instanceof IColorProvider) {
737
            return ((IColorProvider) provider).getBackground(element);
738
        }
739
        return null;
740
    }
741

    
742
    private Color getForeground(Object element) {
743
        if (element instanceof ItemsListSeparator) {
744
            return Display.getCurrent().getSystemColor(
745
                    SWT.COLOR_WIDGET_NORMAL_SHADOW);
746
        }
747
        if (provider instanceof IColorProvider) {
748
            return ((IColorProvider) provider).getForeground(element);
749
        }
750
        return null;
751
    }
752

    
753
    private Font getFont(Object element) {
754
        if (element instanceof ItemsListSeparator) {
755
            return null;
756
        }
757
        if (provider instanceof IFontProvider) {
758
            return ((IFontProvider) provider).getFont(element);
759
        }
760
        return null;
761
    }
762

    
763
    /*
764
     * (non-Javadoc)
765
     *
766
     * @see org.eclipse.jface.viewers.ILabelProviderListener#labelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent)
767
     */
768
    @Override
769
    public void labelProviderChanged(LabelProviderChangedEvent event) {
770
        Object[] l = listeners.getListeners();
771
        for (int i = 0; i < listeners.size(); i++) {
772
            ((ILabelProviderListener) l[i]).labelProviderChanged(event);
773
        }
774
    }
775
}
776

    
777
    @Override
778
    protected Point getInitialSize() {
779
        return new Point(593, 399);
780
    }
781

    
782

    
783

    
784
}
785

    
786

    
(31-31/41)