Project

General

Profile

Download (6.25 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.taxeditor.propertysheet;
5

    
6
import java.util.HashSet;
7
import java.util.Iterator;
8
import java.util.Set;
9

    
10
import org.eclipse.jface.dialogs.IDialogConstants;
11
import org.eclipse.jface.dialogs.InputDialog;
12
import org.eclipse.jface.viewers.DoubleClickEvent;
13
import org.eclipse.jface.viewers.IDoubleClickListener;
14
import org.eclipse.jface.viewers.ISelectionChangedListener;
15
import org.eclipse.jface.viewers.IStructuredContentProvider;
16
import org.eclipse.jface.viewers.IStructuredSelection;
17
import org.eclipse.jface.viewers.LabelProvider;
18
import org.eclipse.jface.viewers.ListViewer;
19
import org.eclipse.jface.viewers.SelectionChangedEvent;
20
import org.eclipse.jface.viewers.Viewer;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.events.MouseAdapter;
23
import org.eclipse.swt.events.MouseEvent;
24
import org.eclipse.swt.layout.GridData;
25
import org.eclipse.swt.layout.GridLayout;
26
import org.eclipse.swt.widgets.Button;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Control;
29
import org.eclipse.swt.widgets.Label;
30
import org.eclipse.swt.widgets.Shell;
31

    
32
import eu.etaxonomy.cdm.model.common.MarkerType;
33

    
34
/**
35
 * @author p.ciardelli
36
 *
37
 */
38
public class SelectMarkerTypeDialog extends InputDialog {
39

    
40
	private Set<MarkerType> markerTypes;
41
	private ListViewer textViewer;
42
	String message = "Choose a type for the new marker";
43
	private Button okButton;
44
	private Set<MarkerType> selectedMarkerTypes;
45

    
46
	/**
47
	 * @param parentShell
48
	 * @param markerTypes 
49
	 */
50
	protected SelectMarkerTypeDialog(Shell shell, Set<MarkerType> markerTypes) {
51
		super(shell, "Create a new marker", 
52
				"Choose a type for the new marker", null, null);
53
		
54
		this.markerTypes = markerTypes;
55
	}
56
	
57
    protected Control createDialogArea(Composite parent) {
58
        // create composite
59
		Composite composite = new Composite(parent, SWT.NONE);
60
		GridLayout layout = new GridLayout();
61
		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
62
		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
63
		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
64
		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
65
		composite.setLayout(layout);
66
		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
67
		applyDialogFont(composite);
68
        // create message
69
        if (message != null) {
70
            Label label = new Label(composite, SWT.WRAP);
71
            label.setText(message);
72
            GridData data = new GridData(GridData.GRAB_HORIZONTAL
73
                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
74
                    | GridData.VERTICAL_ALIGN_CENTER);
75
            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
76
            label.setLayoutData(data);
77
            label.setFont(parent.getFont());
78
        }
79
        textViewer = new ListViewer(composite);
80
        textViewer.getList().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
81
                | GridData.HORIZONTAL_ALIGN_FILL));
82
        textViewer.setContentProvider(new ContentProvider());
83
        textViewer.setLabelProvider(new LabelProvider() {
84
        	/* (non-Javadoc)
85
        	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
86
        	 */
87
        	@Override
88
        	public String getText(Object element) {
89
        		return ((MarkerType) element).getLabel();
90
        	}
91
        });
92
        textViewer.setInput(markerTypes);
93
        
94
        textViewer.addSelectionChangedListener(new ISelectionChangedListener () {
95
			public void selectionChanged(SelectionChangedEvent event) {
96
				setOkEnabled(true);
97
			}
98
		});
99
        textViewer.addDoubleClickListener(new IDoubleClickListener() {
100
			public void doubleClick(DoubleClickEvent event) {
101
				setSelectedMarkerTypes();
102
				close();
103
			}
104
        });
105

    
106
        applyDialogFont(composite);
107
        return composite;
108
    }
109
    
110

    
111
	/* (non-Javadoc)
112
	 * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
113
	 */
114
	protected void createButtonsForButtonBar(Composite parent) {
115
        // create OK and Cancel buttons by default
116
        okButton = createButton(parent, IDialogConstants.OK_ID,
117
                IDialogConstants.OK_LABEL, true);
118
        okButton.addMouseListener(new MouseAdapter() {
119
        	/* (non-Javadoc)
120
        	 * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)
121
        	 */
122
        	@Override
123
        	public void mouseUp(MouseEvent e) {
124
        		close();
125
        	}
126
        });
127
        createButton(parent, IDialogConstants.CANCEL_ID,
128
                IDialogConstants.CANCEL_LABEL, false);
129
        setOkEnabled(false);
130
    }
131
    
132
	/**
133
	 * @param enabled
134
	 */
135
	protected void setOkEnabled(boolean enabled) {
136
		okButton.setEnabled(enabled);
137
	}
138
	    
139
    /* (non-Javadoc)
140
     * @see org.eclipse.jface.dialogs.Dialog#close()
141
     */
142
    @Override
143
    public boolean close() {
144
    	setSelectedMarkerTypes();
145
    	return super.close();
146
    }
147
    
148
	/**
149
	 * @return 
150
	 * 
151
	 */
152
	private void setSelectedMarkerTypes() {
153
		selectedMarkerTypes = new HashSet<MarkerType>();
154
		
155
		IStructuredSelection selection = (IStructuredSelection) textViewer.getSelection();
156
		Iterator iterator = selection.iterator();
157
		while (iterator.hasNext()) {
158
			selectedMarkerTypes.add((MarkerType) iterator.next());
159
		}
160
	}
161
    
162
    class ContentProvider implements IStructuredContentProvider {
163

    
164
		/* (non-Javadoc)
165
		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
166
		 */
167
		public Object[] getElements(Object inputElement) {
168
			return markerTypes.toArray();
169
		}
170

    
171
		/* (non-Javadoc)
172
		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
173
		 */
174
		public void dispose() {}
175

    
176
		/* (non-Javadoc)
177
		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
178
		 */
179
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
180
    	
181
    }
182

    
183
	/**
184
	 * @return 
185
	 * 
186
	 */
187
	public Set<MarkerType> getMarkerTypes() {
188
		return selectedMarkerTypes;
189
	}
190
}
(21-21/24)