package edu.ualberta.med.biobank.gui.common.widgets; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; public class BgcBaseText extends BgcBaseWidget { private Text text; private boolean alreadyFocused; public BgcBaseText(Composite parent, int style) { this(parent, style, null); } public BgcBaseText(Composite parent, int style, FormToolkit toolkit) { super(parent, SWT.NONE); this.alreadyFocused = false; if (toolkit == null) { this.text = new Text(this, style | SWT.BORDER); } else { this.text = toolkit.createText(this, "", style | SWT.BORDER); //$NON-NLS-1$ } this.text.addFocusListener(getFocusListener()); this.text.addMouseListener(getMouseListener()); this.text.addModifyListener(getModifyListener()); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; this.setLayout(layout); text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); layout(); } private FocusListener getFocusListener() { return new FocusListener() { @Override public void focusGained(FocusEvent e) { text.selectAll(); } @Override public void focusLost(FocusEvent e) { alreadyFocused = false; } }; } private MouseListener getMouseListener() { return new MouseListener() { @Override public void mouseDoubleClick(MouseEvent e) { } @Override public void mouseDown(MouseEvent e) { } @Override public void mouseUp(MouseEvent e) { if (!alreadyFocused && text.getSelectionCount() == 0) { text.selectAll(); alreadyFocused = true; } else alreadyFocused = false; } }; } private ModifyListener getModifyListener() { return new ModifyListener() { @Override public void modifyText(ModifyEvent e) { alreadyFocused = false; } }; } @Override public void setBackground(Color color) { if (text == null) return; text.setBackground(color); } public void setText(String text) { this.text.setText(text); } public String getText() { return text.getText().trim(); } public Text getTextBox() { return text; } public void setSelection(int start, int end) { text.setSelection(start, end); } public void addSelectionListener(SelectionListener s) { text.addSelectionListener(s); } public void removeSelectionListener(SelectionListener s) { text.removeSelectionListener(s); } public void addVerifyListener(VerifyListener v) { text.addVerifyListener(v); } public void removeVerifyListener(VerifyListener v) { text.removeVerifyListener(v); } @Override public void addKeyListener(KeyListener listener) { text.addKeyListener(listener); } @Override public void removeKeyListener(KeyListener listener) { text.removeKeyListener(listener); } @Override public void addListener(int eventType, Listener listener) { if (text == null) return; text.addListener(eventType, listener); } @Override public void removeListener(int eventType, Listener listener) { if (text == null) return; text.removeListener(eventType, listener); } public void addModifyListener(ModifyListener modifyListener) { text.addModifyListener(modifyListener); } public void removeModifyListener(ModifyListener modifyListener) { text.addModifyListener(modifyListener); } public void selectAll() { text.selectAll(); } public String getLineDelimiter() { return text.getLineDelimiter(); } public void setEditable(boolean b) { text.setEditable(b); } public void setTextLimit(int limit){ text.setTextLimit(limit); } @Override public void setEnabled(boolean enabled) { text.setEnabled(enabled); super.setEnabled(enabled); } @Override public void setToolTipText(String string) { text.setToolTipText(string); } }