@Override
 public void updatePropSheet() {
   boolean isMulti = model.isMultilineInput();
   model.setPropertyVisible(TextInputModel.PROP_SHOW_H_SCROLL, isMulti);
   model.setPropertyVisible(TextInputModel.PROP_SHOW_V_SCROLL, isMulti);
   model.setPropertyVisible(TextInputModel.PROP_WRAP_WORDS, isMulti);
   model.setPropertyVisible(TextInputModel.PROP_PASSWORD_INPUT, !isMulti);
 }
  @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;
  }