package com.hilotec.elexis.kgview; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; abstract public class SimpleTextFView extends ViewPart { private boolean canEdit = true; private Text textfield; private String origPName; protected Composite area; private boolean modifiable = false; @Override public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); area = new Composite(parent, 0); area.setLayout(new GridLayout()); textfield = new Text(area, (SWT.MULTI | SWT.WRAP | SWT.V_SCROLL)); modifiable = false; textfield.setEditable(modifiable); textfield.addFocusListener(new FocusListener() { public void focusLost(FocusEvent e) { fieldChanged(); } public void focusGained(FocusEvent e) {} }); // TraverseListener um das Standard-Tab-Verhalten zu ueberschreiben. // Wir wollen mit Tab Fokus weiterbewegen. textfield.addTraverseListener(new TraverseListener() { public void keyTraversed(TraverseEvent e) { if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) e.doit = true; } }); GridData gd = new GridData(); gd.horizontalAlignment = gd.verticalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = gd.grabExcessVerticalSpace = true; textfield.setLayoutData(gd); origPName = getPartName(); initialize(); } protected void initialize() {} @Override public void setFocus() {} protected void setEnabled(boolean en) { modifiable = en && canEdit; textfield.setEditable(modifiable); if (!en) { setText(""); } } protected boolean isEnabled() { return modifiable; } protected void setText(String text) { textfield.setText(text); setEmpty(); } protected String getText() { return textfield.getText(); } /** * Wenn */ protected void setEmpty() { setPartName((isEmpty() ? "" : "* ") + origPName); } // Helper-Funktionen die in Subklassen ueberschrieben werden koennen, // muessen hier aber noch aufgerufen werden protected void fieldChanged() { setEmpty(); } protected boolean isEmpty() { String text = textfield.getText(); return text == null || text.isEmpty(); } protected void setCanEdit(boolean edit) { canEdit = edit; } protected boolean getCanEdit() { return canEdit; } }