Package org.objectstyle.wolips.eomodeler.editors.qualifier

Source Code of org.objectstyle.wolips.eomodeler.editors.qualifier.EOQualifierEditor$TypeSelectionHandler

package org.objectstyle.wolips.eomodeler.editors.qualifier;

import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOAggregateQualifier;
import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOQualifier;

public class EOQualifierEditor extends Composite implements IQualifierTypeEditorListener {
  private ComboViewer _typeCombo;

  private Composite _typeEditorContainer;

  private Button _removeButton;

  private Button _addButton;

  private IQualifierType _qualifierType;

  private AbstractQualifierTypeEditor _typeEditor;

  private boolean _settingQualifier;

  private IQualifierType[] _qualifierTypes = new IQualifierType[] { new ExpressionQualifierType(), new SelectKeyQualifierType(), new KeyValueQualifierType(), new AndQualifierType(), new OrQualifierType(), new NotQualifierType() };

  private IQualifierEditorListener _listener;

  public EOQualifierEditor(Composite parent, int style) {
    super(parent, style);

    GridLayout layout = new GridLayout(4, false);
    layout.marginLeft = 0;
    layout.marginRight = 0;
    layout.marginWidth = 0;
    layout.marginTop = 0;
    layout.marginBottom = 0;
    layout.marginHeight = 0;
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    setLayout(layout);

    _typeCombo = new ComboViewer(this, SWT.READ_ONLY);
    _typeCombo.add(_qualifierTypes);
    _typeCombo.addSelectionChangedListener(new TypeSelectionHandler());
    _typeCombo.getCombo().setLayoutData(new GridData());

    _typeEditorContainer = new Composite(this, SWT.NONE);
    _typeEditorContainer.setLayout(new FillLayout(SWT.HORIZONTAL));
    _typeEditorContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  }

  public void setQualifierEditorListener(IQualifierEditorListener listener) {
    _listener = listener;
  }

  public IQualifierEditorListener getQualifierEditorListener() {
    return _listener;
  }

  protected void createButtons() {
    _removeButton = new Button(this, SWT.PUSH);
    _removeButton.setText("-");
    _removeButton.setLayoutData(new GridData());
    _removeButton.addSelectionListener(new SelectionListener() {
      public void widgetDefaultSelected(SelectionEvent e) {
        widgetSelected(e);
      }

      public void widgetSelected(SelectionEvent e) {
        IQualifierEditorListener listener = getQualifierEditorListener();
        if (listener != null) {
          listener.qualifierRemoved(EOQualifierEditor.this);
        }
      }
    });

    _addButton = new Button(this, SWT.PUSH);
    _addButton.setText("+");
    _addButton.setLayoutData(new GridData());
    _addButton.addSelectionListener(new SelectionListener() {
      public void widgetDefaultSelected(SelectionEvent e) {
        widgetSelected(e);
      }

      public void widgetSelected(SelectionEvent e) {
        IQualifierEditorListener listener = getQualifierEditorListener();
        if (listener != null) {
          listener.qualifierAddedBelow(EOQualifierEditor.this);
        }
      }
    });
  }

  public EOQualifier getQualifier() {
    return (_typeEditor == null) ? null : _typeEditor.getQualifier();
  }

  public void setQualifier(EOQualifier qualifier) {
    IQualifierType matchingQualifierType = null;
    for (IQualifierType qualifierType : _qualifierTypes) {
      if (!(qualifierType instanceof ExpressionQualifierType) && qualifierType.isTypeFor(qualifier)) {
        matchingQualifierType = qualifierType;
      }
    }
    if (matchingQualifierType == null) {
      for (IQualifierType qualifierType : _qualifierTypes) {
        if (qualifierType instanceof ExpressionQualifierType) {
          matchingQualifierType = qualifierType;
        }
      }
    }

    _settingQualifier = true;
    try {
      _typeCombo.setSelection(new StructuredSelection(matchingQualifierType));
      _typeEditor.setQualifier(qualifier);
      refreshQualifierTypes();
    } finally {
      _settingQualifier = false;
    }
  }

  protected void typeChanged() {
    IStructuredSelection selection = (IStructuredSelection) _typeCombo.getSelection();
    IQualifierType selectedQualifierType = (IQualifierType) selection.getFirstElement();

    if (selectedQualifierType != null && _qualifierType != selectedQualifierType) {
      EOQualifier previousQualifier = getQualifier();
      if (_typeEditor != null) {
        _typeEditor.dispose();
        _typeEditor = null;
      }
      _qualifierType = selectedQualifierType;
      if (_qualifierType != null) {
        _typeEditor = _qualifierType.createEditor(_typeEditorContainer);
        _typeEditor.setQualifierTypeEditorListener(this);
        // _typeEditor.setLayoutData(new
        // GridData(GridData.FILL_HORIZONTAL));
      }
      if (!_settingQualifier) {
        _typeEditor.setQualifier(previousQualifier);
        refreshQualifierTypes();
      }
    }
    // layout(true, true);
    getParent().layout(true, true);
  }

  protected void refreshQualifierTypes() {
    // IStructuredSelection selection = (IStructuredSelection)
    // _typeCombo.getSelection();
    // IQualifierType selectedQualifierType = (IQualifierType)
    // selection.getFirstElement();
    EOQualifier qualifier = _typeEditor.getQualifier();
    for (IQualifierType qualifierType : _qualifierTypes) {
      qualifierType.setQualifier(qualifier);
      _typeCombo.refresh(qualifierType);
    }

    boolean buttonsVisible = !(qualifier instanceof EOAggregateQualifier);
    if (!buttonsVisible) {
      if (_addButton != null) {
        _addButton.dispose();
        _addButton = null;
      }
      if (_removeButton != null) {
        _removeButton.dispose();
        _removeButton = null;
      }
      ((GridLayout) getLayout()).numColumns = 2;
    } else {
      ((GridLayout) getLayout()).numColumns = 4;
      createButtons();
    }
    layout();
  }

  public void qualifierTypeChanged(AbstractQualifierTypeEditor editor) {
    setQualifier(getQualifier());
  }

  protected class TypeSelectionHandler implements ISelectionChangedListener {
    public void selectionChanged(SelectionChangedEvent event) {
      EOQualifierEditor.this.typeChanged();
    }
  }
}
TOP

Related Classes of org.objectstyle.wolips.eomodeler.editors.qualifier.EOQualifierEditor$TypeSelectionHandler

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.