Package org.activiti.designer.util.editor

Source Code of org.activiti.designer.util.editor.ModifiableListEditor

package org.activiti.designer.util.editor;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;


/**
* @author Tijs Rademakers
*/
public abstract class ModifiableListEditor extends ListEditor {
 
  public ModifiableListEditor(String name, String labelText, Composite parent) {
    super(name, labelText, parent);
  }

  /**
   * The subclasses must override this to return the modified entry.
   *
   * @param original the new entry
   * @return the modified entry. Return null to prevent modification.
   */
  protected abstract String getModifiedEntry(String original);

  private Button editButton;
  private List commandListControl;

  @Override
  public Composite getButtonBoxControl(Composite parent) {
      Composite buttonBoxControl = super.getButtonBoxControl(parent);
      if (editButton == null) {
          editButton = createPushButton(buttonBoxControl, "Edit...");
          editButton.setEnabled(false);
          editButton.addSelectionListener(new SelectionAdapter() {
              @Override
              public void widgetSelected(SelectionEvent e) {
                  if (commandListControl.getSelectionCount() == 1) {
                      String modified = getModifiedEntry(commandListControl.getSelection()[0]);
                      if (modified != null) {
                          int selectedIndex = commandListControl.getSelectionIndex();
                          commandListControl.remove(selectedIndex);
                          commandListControl.add(modified, selectedIndex);
                      }
                  }
              }
          });
          buttonBoxControl.addDisposeListener(new DisposeListener() {
              public void widgetDisposed(DisposeEvent event) {
                  editButton = null;
              }
          });
      }
      return buttonBoxControl;
  }

  /**
   * Helper method to create a push button.
   *
   * @param parent the parent control
   * @param key the resource name used to supply the button's label text
   * @return Button
   */
  private Button createPushButton(Composite parent, String key) {
      Button button = new Button(parent, SWT.PUSH);
      button.setText(key);
      button.setFont(parent.getFont());
      GridData data = new GridData(GridData.FILL_HORIZONTAL);
      int widthHint = convertHorizontalDLUsToPixels(button,
              IDialogConstants.BUTTON_WIDTH);
      data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT,
              SWT.DEFAULT, true).x);
      button.setLayoutData(data);
      return button;
  }

  @Override
  public org.eclipse.swt.widgets.List getListControl(Composite parent) {
      List listControl = super.getListControl(parent);
      if (commandListControl == null) {
          commandListControl = listControl;
          commandListControl.addSelectionListener(new SelectionAdapter() {
              @Override
              public void widgetSelected(SelectionEvent e) {
                  editButton.setEnabled(commandListControl.getSelectionCount() == 1);
              }
          });
      }
      return listControl;
  }
}
TOP

Related Classes of org.activiti.designer.util.editor.ModifiableListEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.