@Override public IFigure doCreateFigure() { int style = SWT.NONE; if (model.isShowNativeBorder()) style |= SWT.BORDER; if (model.isMultilineInput()) { style |= SWT.MULTI; if (model.isShowHScroll()) style |= SWT.H_SCROLL; if (model.isShowVScroll()) style |= SWT.V_SCROLL; if (model.isWrapWords()) style |= SWT.WRAP; } else { style |= SWT.SINGLE; if (model.isPasswordInput()) style |= SWT.PASSWORD; } if (model.isReadOnly()) style |= SWT.READ_ONLY; switch (model.getHorizontalAlignment()) { case CENTER: style |= SWT.CENTER; break; case LEFT: style |= SWT.LEFT; break; case RIGHT: style |= SWT.RIGHT; default: break; } final NativeTextFigure figure = new NativeTextFigure(editpart, style); text = figure.getSWTWidget(); if (!model.isReadOnly()) { if (model.isMultilineInput()) { text.addKeyListener( new KeyAdapter() { @Override public void keyPressed(KeyEvent keyEvent) { if (keyEvent.character == '\r') { // Return key if (text != null && !text.isDisposed() && (text.getStyle() & SWT.MULTI) != 0) { if ((keyEvent.stateMask & SWT.CTRL) != 0) { outputText(text.getText()); keyEvent.doit = false; text.getShell().setFocus(); } } } } }); } else { text.addListener( SWT.DefaultSelection, new Listener() { public void handleEvent(Event e) { outputText(text.getText()); switch (model.getFocusTraverse()) { case LOSE: text.getShell().setFocus(); break; case NEXT: SingleSourceHelper.swtControlTraverse(text, SWT.TRAVERSE_TAB_PREVIOUS); break; case PREVIOUS: SingleSourceHelper.swtControlTraverse(text, SWT.TRAVERSE_TAB_NEXT); break; case KEEP: default: break; } } }); } // Recover text if editing aborted. text.addKeyListener( new KeyAdapter() { @Override public void keyPressed(KeyEvent keyEvent) { if (keyEvent.character == SWT.ESC) { text.setText(model.getText()); } } }); text.addFocusListener( new FocusAdapter() { @Override public void focusLost(FocusEvent e) { // On mobile, lost focus should output text since there is not enter hit or ctrl key. if (editpart.getPV() != null && !OPIBuilderPlugin.isMobile(text.getDisplay())) text.setText(model.getText()); else if (figure.isEnabled()) outputText(text.getText()); } }); } return figure; }