Package org.objectstyle.wolips.baseforuiplugins.utils

Source Code of org.objectstyle.wolips.baseforuiplugins.utils.WOTextCellEditor

package org.objectstyle.wolips.baseforuiplugins.utils;

import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

public class WOTextCellEditor extends TextCellEditor {
  public WOTextCellEditor() {
    // DO NOTHING
  }

  public WOTextCellEditor(Composite parent) {
    super(parent, ("carbon".equals(SWT.getPlatform()) || "cocoa".equals(SWT.getPlatform())) ? SWT.BORDER | SWT.SINGLE : SWT.SINGLE);
  }

  public WOTextCellEditor(Composite parent, int style) {
    super(parent, ("carbon".equals(SWT.getPlatform()) || "cocoa".equals(SWT.getPlatform())) ? SWT.BORDER | SWT.SINGLE : style);
  }

  @Override
  protected Control createControl(Composite parent) {
    Text textControl = (Text) super.createControl(parent);
    if ("carbon".equals(SWT.getPlatform()) || "cocoa".equals(SWT.getPlatform())) {
      textControl.addControlListener(new ControlListener() {
        private boolean _moving;

        private boolean _resizing;

        public void controlMoved(ControlEvent e) {
          if (!_moving) {
            _moving = true;
            try {
              Text resizedText = (Text) e.widget;
              Point location = resizedText.getLocation();
              Composite controlParent = resizedText.getParent();
              if (controlParent instanceof Tree) {
                TreeColumn firstColumn = ((Tree) controlParent).getColumn(0);
                // The first column of a tree lines up differently for some reason -- maybe
                // the open/close triangle causes it to move.  I don't see any API to
                // determine what column this editor is editing, so this lame hack is
                // checking to see if our initial x position is less than the width of the
                // first column.
                if (resizedText.getBounds().x < firstColumn.getWidth()) {
                  if (((Tree)controlParent).getColumnCount() == 1) {
                    resizedText.setLocation(location.x - 3, location.y - 2);
                  }
                  else {
                    resizedText.setLocation(location.x - 5, location.y - 2);
                  }
                }
                else {
                  resizedText.setLocation(location.x - 5, location.y - 2);
                }
              } else {
                resizedText.setLocation(location.x - 5, location.y - 2);
              }
            } finally {
              _moving = false;
            }
          }
        }

        public void controlResized(ControlEvent e) {
          if (!_resizing) {
            _resizing = true;
            try {
              Text resizedText = (Text) e.widget;
              Point size = resizedText.getSize();
              Composite controlParent = resizedText.getParent();
              if (controlParent instanceof Tree) {
                TreeColumn firstColumn = ((Tree) controlParent).getColumn(0);
                // The first column of a tree lines up differently for some reason -- maybe
                // the open/close triangle causes it to move.  I don't see any API to
                // determine what column this editor is editing, so this lame hack is
                // checking to see if our initial x position is less than the width of the
                // first column.
                if (resizedText.getBounds().x < firstColumn.getWidth()) {
                  if (((Tree)controlParent).getColumnCount() == 1) {
                    resizedText.setSize(size.x + 5, size.y + 4);
                  }
                  else {
                    resizedText.setSize(size.x + 5, size.y + 6);
                  }
                }
                else {
                  resizedText.setSize(size.x + 5, size.y + 6);
                }
              } else {
                resizedText.setSize(size.x + 5, size.y + 6);
              }
            } finally {
              _resizing = false;
            }
          }
        }
      });
    }
    return textControl;
  }

  public Text getText() {
    return text;
  }
}
TOP

Related Classes of org.objectstyle.wolips.baseforuiplugins.utils.WOTextCellEditor

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.