Project

General

Profile

Download (7.64 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.ModifyEvent;
23
import org.eclipse.swt.events.ModifyListener;
24
import org.eclipse.swt.events.MouseAdapter;
25
import org.eclipse.swt.events.MouseEvent;
26
import org.eclipse.swt.layout.GridData;
27
import org.eclipse.swt.layout.GridLayout;
28
import org.eclipse.swt.widgets.Button;
29
import org.eclipse.swt.widgets.Composite;
30
import org.eclipse.swt.widgets.Control;
31
import org.eclipse.swt.widgets.Label;
32
import org.eclipse.swt.widgets.List;
33
import org.eclipse.swt.widgets.Shell;
34
import org.eclipse.swt.widgets.Text;
35

    
36
import eu.etaxonomy.cdm.model.common.Extension;
37
import eu.etaxonomy.cdm.model.common.ExtensionType;
38
import eu.etaxonomy.taxeditor.store.VocabularyStore;
39

    
40
/**
41
 * @author p.ciardelli
42
 *
43
 */
44
public class CreateExtensionDialog extends InputDialog {
45

    
46
	private Set<ExtensionType> extensionTypes;
47
	private ListViewer textViewer;
48
	String typeMessage = "Choose a type for the new extension";
49
	private String valueMessage = "Enter a value for the new extension";
50
	private Button okButton;
51
	private Set<ExtensionType> selectedExtensionTypes;
52
	private Text text;
53
	
54
	protected boolean hasSelection = false;
55
	private Extension newExtension;
56

    
57
	/**
58
	 * @param parentShell
59
	 * @param extensionTypes 
60
	 */
61
	protected CreateExtensionDialog(Shell shell) {
62
		super(shell, "Create a new extension", 
63
				"Choose a type and value for the new extension", null, null);
64
		
65
		extensionTypes = VocabularyStore.getExtensionTypes();
66
	}
67
	
68
    protected Control createDialogArea(Composite parent) {
69
        // create composite
70
		Composite composite = new Composite(parent, SWT.NONE);
71
		GridLayout layout = new GridLayout();
72
		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
73
		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
74
		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
75
		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
76
		composite.setLayout(layout);
77
		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
78
		applyDialogFont(composite);
79
        // create message
80
        if (typeMessage != null) {
81
            Label typeLabel = new Label(composite, SWT.WRAP);
82
            typeLabel.setText(typeMessage);
83
            GridData data = new GridData(GridData.GRAB_HORIZONTAL
84
                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
85
                    | GridData.VERTICAL_ALIGN_CENTER);
86
            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
87
            typeLabel.setLayoutData(data);
88
            typeLabel.setFont(parent.getFont());
89
        }
90
        textViewer = new ListViewer(new List(composite, SWT.SINGLE | SWT.BORDER));
91
        textViewer.getList().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
92
                | GridData.HORIZONTAL_ALIGN_FILL));
93
        textViewer.setContentProvider(new ContentProvider());
94
        textViewer.setLabelProvider(new LabelProvider() {
95
        	/* (non-Javadoc)
96
        	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
97
        	 */
98
        	@Override
99
        	public String getText(Object element) {
100
        		return ((ExtensionType) element).getLabel();
101
        	}
102
        });
103
        textViewer.setInput(extensionTypes);
104
        textViewer.addSelectionChangedListener(new ISelectionChangedListener () {
105
			public void selectionChanged(SelectionChangedEvent event) {
106
				hasSelection = true;
107
				setOkEnabled(true);
108
			}
109
		});
110
        // create message
111
        if (valueMessage != null) {
112
            Label valueLabel = new Label(composite, SWT.WRAP);
113
            valueLabel.setText(valueMessage);
114
            GridData data = new GridData(GridData.GRAB_HORIZONTAL
115
                    | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
116
                    | GridData.VERTICAL_ALIGN_CENTER);
117
            data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
118
            valueLabel.setLayoutData(data);
119
            valueLabel.setFont(parent.getFont());
120
        }
121
        text = new Text(composite, getInputTextStyle());
122
        text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
123
                | GridData.HORIZONTAL_ALIGN_FILL));
124
        text.addModifyListener(new ModifyListener() {
125
            public void modifyText(ModifyEvent e) {
126
				setOkEnabled(true);
127
            }
128
        });
129
        
130
        applyDialogFont(composite);
131
        return composite;
132
    }
133
    
134

    
135
	/* (non-Javadoc)
136
	 * @see org.eclipse.jface.dialogs.InputDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
137
	 */
138
	protected void createButtonsForButtonBar(Composite parent) {
139
        // create OK and Cancel buttons by default
140
        okButton = createButton(parent, IDialogConstants.OK_ID,
141
                IDialogConstants.OK_LABEL, true);
142
        okButton.addMouseListener(new MouseAdapter() {
143
        	/* (non-Javadoc)
144
        	 * @see org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent)
145
        	 */
146
        	@Override
147
        	public void mouseUp(MouseEvent e) {
148
        		close();
149
        	}
150
        });
151
        createButton(parent, IDialogConstants.CANCEL_ID,
152
                IDialogConstants.CANCEL_LABEL, false);
153
        setOkEnabled(false);
154
    }
155
    
156
	/**
157
	 * @param enabled
158
	 */
159
	protected void setOkEnabled(boolean enabled) {
160
		if (text.getText().length() > 0 && hasSelection) {
161
            okButton.setEnabled(enabled);			
162
		} else {
163
            okButton.setEnabled(false);
164
		}
165
	}
166
	    
167
    /* (non-Javadoc)
168
     * @see org.eclipse.jface.dialogs.Dialog#close()
169
     */
170
    @Override
171
    public boolean close() {
172
    	setNewExtension();
173
    	return super.close();
174
    }
175
    
176
	/**
177
	 * @return 
178
	 * 
179
	 */
180
	private void setNewExtension() {
181
		selectedExtensionTypes = new HashSet<ExtensionType>();
182
		
183
		ExtensionType type = (ExtensionType) ((IStructuredSelection) textViewer.getSelection()).getFirstElement();
184
		String value = text.getText();
185
		
186
		newExtension = Extension.NewInstance();
187
		newExtension.setValue(value);
188
		newExtension.setType(type);
189
	}
190
    
191
    class ContentProvider implements IStructuredContentProvider {
192

    
193
		/* (non-Javadoc)
194
		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
195
		 */
196
		public Object[] getElements(Object inputElement) {
197
			return extensionTypes.toArray();
198
		}
199

    
200
		/* (non-Javadoc)
201
		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
202
		 */
203
		public void dispose() {}
204

    
205
		/* (non-Javadoc)
206
		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
207
		 */
208
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
209
    	
210
    }
211

    
212
	/**
213
	 * @return
214
	 */
215
	public Extension getNewExtension() {
216
		return newExtension;
217
	}
218
}
(9-9/24)