Project

General

Profile

Download (25.2 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.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
30
import org.eclipse.jface.viewers.DoubleClickEvent;
31
import org.eclipse.jface.viewers.IColorProvider;
32
import org.eclipse.jface.viewers.IDoubleClickListener;
33
import org.eclipse.jface.viewers.IFontProvider;
34
import org.eclipse.jface.viewers.ILabelProvider;
35
import org.eclipse.jface.viewers.ILabelProviderListener;
36
import org.eclipse.jface.viewers.ISelectionChangedListener;
37
import org.eclipse.jface.viewers.IStructuredContentProvider;
38
import org.eclipse.jface.viewers.LabelProvider;
39
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
40
import org.eclipse.jface.viewers.SelectionChangedEvent;
41
import org.eclipse.jface.viewers.StructuredSelection;
42
import org.eclipse.jface.viewers.StyledCellLabelProvider;
43
import org.eclipse.jface.viewers.StyledString;
44
import org.eclipse.jface.viewers.TableViewer;
45
import org.eclipse.jface.viewers.Viewer;
46
import org.eclipse.jface.viewers.ViewerCell;
47
import org.eclipse.swt.SWT;
48
import org.eclipse.swt.accessibility.AccessibleAdapter;
49
import org.eclipse.swt.accessibility.AccessibleEvent;
50
import org.eclipse.swt.events.KeyAdapter;
51
import org.eclipse.swt.events.KeyEvent;
52
import org.eclipse.swt.events.ModifyEvent;
53
import org.eclipse.swt.events.ModifyListener;
54
import org.eclipse.swt.events.TraverseEvent;
55
import org.eclipse.swt.events.TraverseListener;
56
import org.eclipse.swt.graphics.Color;
57
import org.eclipse.swt.graphics.Font;
58
import org.eclipse.swt.graphics.GC;
59
import org.eclipse.swt.graphics.Point;
60
import org.eclipse.swt.graphics.Rectangle;
61
import org.eclipse.swt.layout.GridData;
62
import org.eclipse.swt.layout.GridLayout;
63
import org.eclipse.swt.widgets.Button;
64
import org.eclipse.swt.widgets.Composite;
65
import org.eclipse.swt.widgets.Control;
66
import org.eclipse.swt.widgets.Display;
67
import org.eclipse.swt.widgets.Event;
68
import org.eclipse.swt.widgets.Label;
69
import org.eclipse.swt.widgets.Shell;
70
import org.eclipse.swt.widgets.Table;
71
import org.eclipse.swt.widgets.Text;
72
import org.eclipse.ui.IWorkbenchPreferenceConstants;
73
import org.eclipse.ui.PlatformUI;
74
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
75
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
76
import org.eclipse.ui.internal.WorkbenchImages;
77
import org.eclipse.ui.internal.WorkbenchMessages;
78
import org.eclipse.ui.internal.WorkbenchPlugin;
79

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

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

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

    
97

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

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

    
106
        protected final ContentProvider contentProvider;
107
        ItemsListLabelProvider itemsListLabelProvider;
108

    
109
        private final RefreshCacheJob refreshCacheJob;
110

    
111
        protected Object preferenceID;
112

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

    
119

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

    
124
        public SearchDialog(Shell parent, boolean multi) {
125
            super(parent);
126
            contentProvider = new ContentProvider();
127
            refreshCacheJob = new RefreshCacheJob();
128

    
129

    
130
        }
131

    
132

    
133
        @Override
134
        protected Control createDialogArea(Composite parent) {
135
            Composite container = (Composite) super.createDialogArea(parent);
136

    
137
            GridData gd = new GridData(GridData.FILL_BOTH);
138
            container.setLayoutData(gd);
139

    
140
            GridLayout layout = new GridLayout();
141
            layout.numColumns = 1;
142
            layout.marginWidth = 0;
143
            layout.marginHeight = 0;
144
            container.setLayout(layout);
145

    
146
            final Label headerLabel = createHeader(container);
147

    
148
            Composite searchAndFilter = new Composite(container, container.getStyle());
149

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

    
168
                }
169
            });
170
            gd_1 = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
171
            gd_1.horizontalIndent = 7;
172

    
173
            searchField.setLayoutData(gd_1);
174

    
175
            createFilterButton(searchAndFilter);
176

    
177
            addIdentifierCheckButton(searchAndFilter);
178
//            new Label(searchAndFilter, SWT.NONE);
179
            setList(new TableViewer(container,  SWT.SINGLE
180
                    | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL));
181

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

    
211
//            createExtendedContentArea(container);
212
            new Label(container, SWT.NONE);
213
            search();
214

    
215
            return container;
216
        }
217

    
218

    
219
        protected void addIdentifierCheckButton(Composite searchAndFilter) {
220
           //as default do nothing
221
        }
222

    
223

    
224
        abstract void createFilterButton(Composite searchAndFilter) ;
225

    
226
        protected abstract void search();
227

    
228

    
229
        /**
230
         * Sets the title for this dialog.
231
         *
232
         * @param title
233
         *            the title
234
         */
235
        public void setTitle(String title) {
236
            this.title = title;
237
        }
238

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

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

    
282
        protected String getMessage() {
283
            return message;
284
        }
285

    
286
        protected void setMessage(String message){
287
            this.message = message;
288
        }
289

    
290
        public Text getSearchField() {
291
            return searchField;
292
        }
293

    
294

    
295
        public void setSearchField(Text searchField) {
296
            this.searchField = searchField;
297
        }
298

    
299
        private ItemsListLabelProvider getItemsListLabelProvider() {
300
            if (itemsListLabelProvider == null) {
301
                itemsListLabelProvider = new ItemsListLabelProvider(
302
                        new LabelProvider());
303
            }
304
            return itemsListLabelProvider;
305
        }
306

    
307

    
308
        public TableViewer getList() {
309
            return list;
310
        }
311

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

    
321
        public Button getNewButton1() {
322
            return newButton1;
323
        }
324

    
325

    
326
        public void setNewButton1(Button newButton1) {
327
            this.newButton1 = newButton1;
328
        }
329

    
330

    
331
        public Button getNewButton2() {
332
            return newButton2;
333
        }
334

    
335

    
336
        public void setNewButton2(Button newButton2) {
337
            this.newButton2 = newButton2;
338
        }
339

    
340

    
341
        public Button getFilterButton() {
342
            return filterButton;
343
        }
344

    
345

    
346
        public void setFilterButton(Button filterButton) {
347
            this.filterButton = filterButton;
348
        }
349

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

    
383

    
384
        class ContentProvider implements
385
                IStructuredContentProvider {
386

    
387
            private List items;
388

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

    
396
            /**
397
             * Removes all content items and resets progress message.
398
             */
399
            public void reset() {
400
                this.items.clear();
401

    
402
            }
403

    
404
            public void add(Object item) {
405
                this.items.add(item);
406
            }
407

    
408
            /**
409
             * Refresh dialog.
410
             */
411
            public void refresh() {
412
                scheduleRefresh();
413
            }
414

    
415
            /**
416
             * Schedule refresh job.
417
             */
418
            public void scheduleRefresh() {
419
                refreshCacheJob.cancelAll();
420
                refreshCacheJob.schedule();
421
            }
422

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

    
433
            public int getNumberOfElements() {
434
               return items.size();
435
            }
436

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

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

    
456

    
457
        }
458

    
459

    
460
        public boolean isUseIdentifier() {
461
            return useIdentifier;
462
        }
463

    
464

    
465
        public StructuredSelection getCurrentSelection() {
466
            return currentSelection;
467
        }
468

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

    
479

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

    
486
                List lastRefreshSelection = ((StructuredSelection) getList()
487
                        .getSelection()).toList();
488
                getList().getTable().deselectAll();
489

    
490
                getList().setItemCount(contentProvider.getNumberOfElements());
491
                getList().refresh();
492

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

    
501
                        getList().getTable().setSelection(0);
502
                        getList().getTable().notifyListeners(SWT.Selection, new Event());
503
                    }
504
                } else {
505
                    getList().setSelection(StructuredSelection.EMPTY);
506
                }
507

    
508
            }
509
        }
510

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

    
520
            public RefreshCacheJob() {
521
                super(
522
                        WorkbenchMessages.FilteredItemsSelectionDialog_cacheRefreshJob);
523
                setSystem(true);
524
            }
525

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

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

    
545
                if (SearchDialog.this != null) {
546
                    SearchDialog.this.fillContentProvider(monitor);
547
                }
548

    
549
                return new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK,
550
                        EMPTY_STRING, null);
551

    
552
            }
553

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

    
564
        }
565

    
566
        private class ItemsListLabelProvider extends StyledCellLabelProvider
567
        implements ILabelProviderListener {
568
            private ILabelProvider provider;
569

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

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

    
597
        if (provider != null) {
598
            provider.addListener(this);
599
        }
600
    }
601

    
602

    
603

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

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

    
627
    private StyledString getStyledText(Object element,
628
            IStyledLabelProvider provider) {
629
        StyledString string = provider.getStyledText(element);
630

    
631
        return string;
632
    }
633

    
634
    @Override
635
    public void update(ViewerCell cell) {
636
        Object element = cell.getElement();
637

    
638
        if (!(element instanceof ItemsListSeparator)
639
                && provider instanceof IStyledLabelProvider) {
640
            IStyledLabelProvider styledLabelProvider = (IStyledLabelProvider) provider;
641
            StyledString styledString = getStyledText(element,
642
                    styledLabelProvider);
643

    
644
            cell.setText(styledString.getString());
645
            cell.setStyleRanges(styledString.getStyleRanges());
646
            cell.setImage(styledLabelProvider.getImage(element));
647
        } else {
648
            cell.setText(getText(element));
649

    
650
        }
651
        cell.setFont(getFont(element));
652
        cell.setForeground(getForeground(element));
653
        cell.setBackground(getBackground(element));
654

    
655
        super.update(cell);
656
    }
657

    
658
    private String getSeparatorLabel(String separatorLabel) {
659
        Rectangle rect = getList().getTable().getBounds();
660

    
661
        int borderWidth = getList().getTable().computeTrim(0, 0, 0, 0).width;
662

    
663
        int imageWidth = WorkbenchImages.getImage(
664
                IWorkbenchGraphicConstants.IMG_OBJ_SEPARATOR).getBounds().width;
665

    
666
        int width = rect.width - borderWidth - imageWidth;
667

    
668
        GC gc = new GC(getList().getTable());
669
        gc.setFont(getList().getTable().getFont());
670

    
671
        int fSeparatorWidth = gc.getAdvanceWidth('-');
672
        int fMessageLength = gc.textExtent(separatorLabel).x;
673

    
674
        gc.dispose();
675

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

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

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

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

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

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

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

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

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

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

    
780
    @Override
781
    protected Point getInitialSize() {
782
        return new Point(593, 399);
783
    }
784

    
785

    
786

    
787
}
788

    
789

    
(31-31/39)