Package com.aelitis.azureus.ui.swt.skin

Source Code of com.aelitis.azureus.ui.swt.skin.SWTSkinUtils$MouseEnterExitListener

/**
*
*/
package com.aelitis.azureus.ui.swt.skin;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.AERunnableBoolean;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;

/**
* @author TuxPaper
* @created Jun 8, 2006
*
*/
public class SWTSkinUtils
{

  public static final int TILE_NONE = 0;

  public static final int TILE_Y = 1;

  public static final int TILE_X = 2;

  public static final int TILE_CENTER_X = 4;

  public static final int TILE_CENTER_Y = 8;

  public static final int TILE_BOTH = TILE_X | TILE_Y;

  private static Listener imageDownListener;

  //private static Listener imageOverListener;

  static {
    //imageOverListener = new SWTSkinImageChanger("-over", SWT.MouseEnter,
    //    SWT.MouseExit);
    imageDownListener = new SWTSkinImageChanger("-down", SWT.MouseDown,
        SWT.MouseUp);
  }

  public static int getAlignment(String sAlign, int def) {
    int align;

    if (sAlign == null) {
      align = def;
    } else if (sAlign.equalsIgnoreCase("center")) {
      align = SWT.CENTER;
    } else if (sAlign.equalsIgnoreCase("bottom")) {
      align = SWT.BOTTOM;
    } else if (sAlign.equalsIgnoreCase("top")) {
      align = SWT.TOP;
    } else if (sAlign.equalsIgnoreCase("left")) {
      align = SWT.LEFT;
    } else if (sAlign.equalsIgnoreCase("right")) {
      align = SWT.RIGHT;
    } else {
      align = def;
    }

    return align;
  }

  /**
   * @param tileMode
   * @return
   */
  public static int getTileMode(String sTileMode) {
    int tileMode = TILE_NONE;
    if (sTileMode == null || sTileMode == "") {
      return tileMode;
    }

    sTileMode = sTileMode.toLowerCase();

    if (sTileMode.equals("tile")) {
      tileMode = TILE_X | TILE_Y;
    } else if (sTileMode.equals("tile-x")) {
      tileMode = TILE_X;
    } else if (sTileMode.equals("tile-y")) {
      tileMode = TILE_Y;
    } else if (sTileMode.equals("center-x")) {
      tileMode = TILE_CENTER_X;
    } else if (sTileMode.equals("center-y")) {
      tileMode = TILE_CENTER_Y;
    }

    return tileMode;
  }

  static void addMouseImageChangeListeners(Control widget) {
    if (widget.getData("hasMICL") != null) {
      return;
    }

    //widget.addListener(SWT.MouseEnter, imageOverListener);
    //widget.addListener(SWT.MouseExit, imageOverListener);
    //    new MouseEnterExitListener(widget);

    widget.addListener(SWT.MouseDown, imageDownListener);
    widget.addListener(SWT.MouseUp, imageDownListener);

    widget.setData("hasMICL", "1");
  }

  public static void setVisibility(SWTSkin skin, String configID,
      String viewID, boolean visible) {
    setVisibility(skin, configID, viewID, visible, true, false);
  }

  public static void setVisibility(SWTSkin skin, String configID,
      String viewID, final boolean visible, boolean save, boolean fast) {

    SWTSkinObject skinObject = skin.getSkinObject(viewID);
   
    if (skinObject == null) {
      Debug.out("setVisibility on non existing skin object: " + viewID);
      return;
    }
   
    if (skinObject.isVisible() == visible && skin.getShell().isVisible()) {
      return;
    }

    final Control control = skinObject.getControl();

    if (control != null && !control.isDisposed()) {
      Point size;
      if (visible) {
        final FormData fd = (FormData) control.getLayoutData();
        size = (Point) control.getData("v3.oldHeight");
        //System.out.println(control.getData("SkinID") + " oldHeight = " + size + ";v=" + control.getVisible() + ";s=" + control.getSize());
        if (size == null) {
          size = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
          if (fd.height > 0) {
            size.y = fd.height;
          }
          if (fd.width > 0) {
            size.x = fd.width;
          }
        }
      } else {
        size = new Point(0, 0);
      }
      setVisibility(skin, configID, skinObject, size, save, fast, null);
    }
  }

  public static void setVisibility(SWTSkin skin, String configID,
      final SWTSkinObject skinObject, final Point destSize, boolean save,
      boolean fast, Runnable runAfterSlide) {
    boolean visible = destSize.x != 0 || destSize.y != 0;
    try {
      if (skinObject == null) {
        return;
      }
      final Control control = skinObject.getControl();
      if (control != null && !control.isDisposed()) {
        if (visible) {
          FormData fd = (FormData) control.getLayoutData();
          fd.width = 0;
          fd.height = 0;
          control.setData("oldSize", new Point(0, 0));

          skinObject.setVisible(visible);

          // FormData should now be 0,0, but setVisible may have
          // explicitly changed it
          fd = (FormData) control.getLayoutData();
         
          if (fd.width != 0 || fd.height != 0) {
            return;
          }

          if (destSize != null) {
            if (fd != null
                && (fd.width != destSize.x || fd.height != destSize.y)) {
              if (fast) {
                fd.width = destSize.x;
                fd.height = destSize.y;
                control.setLayoutData(fd);
                Utils.relayout(control);
              } else {
                slide(skinObject, fd, destSize, runAfterSlide);
                runAfterSlide = null; // prevent calling again
              }
            }
          } else {
            if (fd.width == 0) {
              fd.width = SWT.DEFAULT;
            }
            if (fd.height == 0) {
              fd.height = SWT.DEFAULT;
            }
            control.setLayoutData(fd);
            Utils.relayout(control);
          }
          control.setData("v3.oldHeight", null);
        } else {
          final FormData fd = (FormData) control.getLayoutData();
          if (fd != null) {
            Point oldSize = new Point(fd.width, fd.height);
            if (oldSize.y <= 0) {
              oldSize = null;
            }
            control.setData("v3.oldHeight", oldSize);

            if (fast) {
              skinObject.setVisible(false);
            } else {
              slide(skinObject, fd, destSize, runAfterSlide);
              runAfterSlide = null; // prevent calling again
            }
          }
        }
      }

    } finally {
      if (save
          && COConfigurationManager.getBooleanParameter(configID) != visible) {
        COConfigurationManager.setParameter(configID, visible);
      }

      if (runAfterSlide != null) {
        runAfterSlide.run();
      }
    }
  }

  public static void slide(final SWTSkinObject skinObject, final FormData fd,
      final Point destSize, final Runnable runOnCompletion) {
    final Control control = skinObject.getControl();
    //System.out.println("slide to " + size + " via "+ Debug.getCompressedStackTrace());
    boolean exit = Utils.execSWTThreadWithBool("slide",
        new AERunnableBoolean() {
          public boolean runSupport() {
            boolean exit = control.getData("slide.active") != null;
            Runnable oldROC = (Runnable) control.getData("slide.runOnCompletion");
            if (oldROC != null) {
              oldROC.run();
            }
            control.setData("slide.destSize", destSize);
            control.setData("slide.runOnCompletion", runOnCompletion);
            if (destSize.y > 0) {
              skinObject.setVisible(true);
            }
            return exit;
          }
        }, 1000);

    if (exit) {
      return;
    }

    AERunnable runnable = new AERunnable() {
      boolean firstTime = true;

      float pct = 0.4f;

      public void runSupport() {
        if (control.isDisposed()) {
          return;
        }
        Point size = (Point) control.getData("slide.destSize");
        if (size == null) {
          return;
        }

        if (firstTime) {
          firstTime = false;
          control.setData("slide.active", "1");
        }

        int newWidth = (int) (fd.width + (size.x - fd.width) * pct);
        int h = fd.height >= 0 ? fd.height : control.getSize().y;
        int newHeight = (int) (h + (size.y - h) * pct);
        pct += 0.01;
        //System.out.println(control + "] newh=" + newHeight + "/" + newWidth + " to " + size.y);

        if (newWidth == fd.width && newHeight == h) {
          fd.width = size.x;
          fd.height = size.y;
          //System.out.println(control + "] side to " + size.y + " done" + size.x);
          control.setLayoutData(fd);
          Utils.relayout(control);
          control.getParent().layout();

          control.setData("slide.active", null);
          control.setData("slide.destSize", null);
         
          if (newHeight == 0) {
            skinObject.setVisible(false);
            Utils.relayout(control);
          }

          Runnable oldROC = (Runnable) control.getData("slide.runOnCompletion");
          if (oldROC != null) {
            control.setData("slide.runOnCompletion", null);
            oldROC.run();
          }
        } else {
          fd.width = newWidth;
          fd.height = newHeight;
          control.setLayoutData(fd);
          //Utils.relayout(control, false);
          control.getParent().layout();

          Utils.execSWTThreadLater(20, this);
        }
      }
    };
    control.getDisplay().asyncExec(runnable);
  }

  public static class MouseEnterExitListener
    implements Listener
  {

    boolean bOver = false;

    public MouseEnterExitListener(Widget widget) {

      widget.addListener(SWT.MouseMove, this);
      widget.addListener(SWT.MouseExit, this);
    }

    public void handleEvent(Event event) {
      Control control = (Control) event.widget;

      SWTSkinObject skinObject = (SWTSkinObject) control.getData("SkinObject");

      if (event.type == SWT.MouseMove) {
        if (bOver) {
          return;
        }
        System.out.println(System.currentTimeMillis() + ": " + skinObject
            + "-- OVER");
        bOver = true;
        skinObject.switchSuffix("-over", 2, true);

      } else {
        bOver = false;
        System.out.println(System.currentTimeMillis() + ": " + skinObject
            + "-- NOOVER");
        skinObject.switchSuffix("", 2, true);
      }

    }

  }


  public static SWTSkinObjectBrowser findBrowserSO(SWTSkinObject so) {
    if (so instanceof SWTSkinObjectBrowser) {
      return (SWTSkinObjectBrowser) so;
    }
    if (so instanceof SWTSkinObjectContainer) {
      SWTSkinObjectContainer soContainer = (SWTSkinObjectContainer) so;
      SWTSkinObject[] children = soContainer.getChildren();
      for (int i = 0; i < children.length; i++) {
        SWTSkinObject child = children[i];
        SWTSkinObjectBrowser found = findBrowserSO(child);
        if (found != null) {
          return found;
        }
      }
    }
    return null;
  }

}
TOP

Related Classes of com.aelitis.azureus.ui.swt.skin.SWTSkinUtils$MouseEnterExitListener

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.