Project

General

Profile

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

    
11
import java.util.HashSet;
12
import java.util.Set;
13

    
14
import org.eclipse.swt.SWT;
15
import org.eclipse.swt.events.KeyAdapter;
16
import org.eclipse.swt.events.KeyEvent;
17
import org.eclipse.swt.events.ModifyEvent;
18
import org.eclipse.swt.events.ModifyListener;
19
import org.eclipse.swt.events.SelectionEvent;
20
import org.eclipse.swt.events.SelectionListener;
21
import org.eclipse.swt.graphics.Color;
22
import org.eclipse.swt.widgets.Button;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.swt.widgets.Label;
25
import org.eclipse.swt.widgets.Text;
26

    
27
import eu.etaxonomy.cdm.common.CdmUtils;
28
import eu.etaxonomy.taxeditor.l10n.Messages;
29
import eu.etaxonomy.taxeditor.model.AbstractUtility;
30
import eu.etaxonomy.taxeditor.model.ImageResources;
31
import eu.etaxonomy.taxeditor.preference.Resources;
32
import eu.etaxonomy.taxeditor.store.StoreUtil;
33

    
34
/**
35
 * When the button is pressed, this textfield may be edited.
36
 *
37
 * @author n.hoffmann
38
 * @created Nov 18, 2009
39
 */
40
public class ToggleableTextElement
41
        extends AbstractRelevanceFormElement
42
        implements SelectionListener, ModifyListener,
43
        IEnableableFormElement, ISelectable {
44

    
45
	private final Text text_cache;
46
	private final Button btnToggleProtectTitleCache;
47
	private boolean state;
48
	private final Set<SelectionListener> selectionListener = new HashSet<>();
49
	private final Label label;
50
	private final Composite container;
51
	private final CacheRelevance relevance;
52

    
53
	private boolean isEnabled = true;
54
	//TODO for RL
55
	public void setVisible(boolean b) {
56
		text_cache.setVisible(b);
57
		btnToggleProtectTitleCache.setVisible(b);
58
		label.setVisible(b);
59
		container.setVisible(b);
60
	}
61

    
62
	protected ToggleableTextElement(CdmFormFactory formFactory, ICdmFormElement parentElement,
63
			String labelString, String initialText, boolean initialState,
64
			CacheRelevance relevance, int style) {
65
		super(formFactory, parentElement);
66

    
67
		label = formFactory.createLabel(getLayoutComposite(), labelString, style);
68
		addControl(label);
69

    
70
		container = formFactory.createComposite(getLayoutComposite(), SWT.WRAP);
71
		container.setLayout(LayoutConstants.LAYOUT(2, false));
72
		container.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
73
		addControl(container);
74

    
75
		text_cache = formFactory.createText(container, initialText, SWT.WRAP | SWT.MULTI);
76
		addControl(text_cache);
77
		if (initialState){
78
		    text_cache.addModifyListener(this);
79
		}
80
		text_cache.setLayoutData(LayoutConstants.FILL());
81

    
82
		// Don't accept carriage returns as input
83
		text_cache.addKeyListener( new KeyAdapter(){
84
			@Override
85
			public void keyPressed(KeyEvent e) {
86
			    if (!state){
87
			        return;
88
			    }
89
    			if(e.character == SWT.CR) {
90
                    e.doit = false;
91
                }
92
			}
93
		});
94

    
95
		btnToggleProtectTitleCache = formFactory.createButton(container, "Edit", SWT.TOGGLE);
96
		btnToggleProtectTitleCache.setText("");
97
		btnToggleProtectTitleCache.setImage(ImageResources.getImage(ImageResources.LOCK_ICON));
98
		addControl(btnToggleProtectTitleCache);
99
		btnToggleProtectTitleCache.addSelectionListener(this);
100

    
101
		this.relevance = relevance;
102
		setState(initialState);
103
	}
104

    
105
	public void setText(String text){
106
		if(text != null){
107
			// store current caret position
108
			int caretPosition = text_cache.getCaretPosition();
109

    
110
			StoreUtil.setTextWithoutModifyListeners(text_cache, text != null? text.trim(): text);
111
//			text_cache.removeModifyListener(this);
112
//			text_cache.setText(text);
113
//			text_cache.addModifyListener(this);
114

    
115
			// restore caret position
116
			text_cache.setSelection(caretPosition);
117
		}
118
	}
119

    
120
	public String getText(){
121
		return text_cache.getText();
122
	}
123

    
124
	private void setState(boolean state) {
125
	    if(state){
126
	        btnToggleProtectTitleCache.setImage(ImageResources.getImage(ImageResources.LOCK_OPEN_ICON));
127
	        btnToggleProtectTitleCache.setToolTipText(Messages.ToggleableText_ToolTip_open);
128
	    }
129
	    else{
130
	        btnToggleProtectTitleCache.setImage(ImageResources.getImage(ImageResources.LOCK_ICON));
131
	        btnToggleProtectTitleCache.setToolTipText(Messages.ToggleableText_ToolTip_closed);
132
	    }
133
	    setCacheEnabled(state);
134
		this.state = state;
135
	}
136

    
137

    
138
    public void setCacheEnabled(boolean enabled) {
139
        text_cache.setEditable(enabled);
140
        if (enabled){
141
            text_cache.removeModifyListener(this);
142
            text_cache.addModifyListener(this);
143
        }else{
144
            text_cache.removeModifyListener(this);
145
        }
146
       	btnToggleProtectTitleCache.setGrayed(enabled);
147
		btnToggleProtectTitleCache.setSelection(enabled);
148
		Color color = enabled ? null : AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED);
149

    
150
		text_cache.setForeground(color);
151
	}
152

    
153
    @Override
154
    public void setEnabled(boolean isEnabled){
155
        this.isEnabled = isEnabled;
156
        if (state){
157
            text_cache.setEditable(isEnabled);
158
        }
159
        btnToggleProtectTitleCache.setEnabled(isEnabled);
160
    }
161

    
162
	@Override
163
	public boolean isEnabled() {
164
	    return isEnabled;
165
	}
166

    
167
	public boolean isCacheEnabled() {
168
        return btnToggleProtectTitleCache.getSelection();
169
    }
170

    
171
    public CacheRelevance getRelevance() {
172
        return this.relevance;
173
    }
174

    
175
	public boolean getState(){
176
		return state;
177
	}
178

    
179
    public Button getBtnToggleProtectTitleCache() {
180
        return btnToggleProtectTitleCache;
181
    }
182

    
183
	@Override
184
    public void widgetSelected(SelectionEvent e) {
185
	    setState(btnToggleProtectTitleCache.getSelection());
186
		for(SelectionListener listener : selectionListener){
187
			listener.widgetSelected(e);
188
		}
189
		firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
190
	}
191

    
192
	public void addSelectionListener(SelectionListener listener){
193
		selectionListener.add(listener);
194
	}
195

    
196
	public void removeSelectionListener(SelectionListener listener){
197
		selectionListener.remove(listener);
198
	}
199

    
200
	@Override
201
    public void widgetDefaultSelected(SelectionEvent e) {}
202

    
203
	@Override
204
    public void modifyText(ModifyEvent e) {
205
	    if (state){
206
	        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
207
	    }
208
	}
209

    
210
	@Override
211
    public void updateCacheRelevance() {
212
		Color color = cacheRelevance().getColor();
213
		text_cache.setBackground(color);
214
	}
215

    
216
    @Override
217
	public void setBackground(Color color) {
218
		label.setBackground(color);
219
		container.setBackground(color);
220
	}
221

    
222
	@Override
223
	public void setSelected(boolean selected) {
224
		setBackground(selected ? SELECTED : getPersistentBackground());
225
	}
226

    
227
    @Override
228
    public String toString() {
229
        if (label != null){
230
            return CdmUtils.concat("", "ToggleableTextElement[", label.getText(),"]");
231
        }else{
232
            return super.toString();
233
        }
234
    }
235

    
236
}
(54-54/57)