/** {@inheritDoc} */
  @Override
  public void registerPropertyChangeHandlers() {

    // text
    IWidgetPropertyChangeHandler textHandler =
        new IWidgetPropertyChangeHandler() {
          @Override
          public boolean handleChange(
              final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            button.setText(newValue.toString());
            button.setSize(button.getSize());
            return true;
          }
        };
    editpart.setPropertyChangeHandler(ActionButtonModel.PROP_TEXT, textHandler);

    // image
    IWidgetPropertyChangeHandler imageHandler =
        new IWidgetPropertyChangeHandler() {
          @Override
          public boolean handleChange(
              final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            NativeButtonFigure figure = (NativeButtonFigure) refreshableFigure;
            IPath absolutePath = (IPath) newValue;
            if (absolutePath != null && !absolutePath.isEmpty() && !absolutePath.isAbsolute())
              absolutePath =
                  ResourceUtil.buildAbsolutePath(editpart.getWidgetModel(), absolutePath);
            figure.setImagePath(absolutePath);
            return true;
          }
        };
    editpart.setPropertyChangeHandler(ActionButtonModel.PROP_IMAGE, imageHandler);

    // button style
    final IWidgetPropertyChangeHandler buttonStyleHandler =
        new IWidgetPropertyChangeHandler() {
          @Override
          public boolean handleChange(
              final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
            editpart.updatePropSheet();
            return true;
          }
        };
    editpart
        .getWidgetModel()
        .getProperty(ActionButtonModel.PROP_TOGGLE_BUTTON)
        .addPropertyChangeListener(
            new PropertyChangeListener() {
              @Override
              public void propertyChange(PropertyChangeEvent evt) {
                buttonStyleHandler.handleChange(
                    evt.getOldValue(), evt.getNewValue(), editpart.getFigure());
              }
            });
  }
 @Override
 public IFigure doCreateFigure() {
   ActionButtonModel model = editpart.getWidgetModel();
   int style = SWT.None;
   style |= model.isToggleButton() ? SWT.TOGGLE : SWT.PUSH;
   style |= SWT.WRAP;
   final NativeButtonFigure buttonFigure = new NativeButtonFigure(editpart, style);
   button = buttonFigure.getSWTWidget();
   button.setText(model.getText());
   button.addTraverseListener(
       e -> {
         if (skipTraverse) return;
         e.doit = false;
         skipTraverse = true;
         if (e.stateMask == 0) {
           SingleSourceHelper.swtControlTraverse(button, SWT.TRAVERSE_TAB_PREVIOUS);
         } else {
           SingleSourceHelper.swtControlTraverse(button, SWT.TRAVERSE_TAB_NEXT);
         }
         skipTraverse = false;
       });
   buttonFigure.setImagePath(model.getImagePath());
   return buttonFigure;
 }