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

Source Code of com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility

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

import java.util.ArrayList;
import java.util.Iterator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.Utils;

/**
* Simple encapsulation of SWTSkinObjectContainer that provides typical button
* funtionality
*
*/
public class SWTSkinButtonUtility
{
  ArrayList listeners = new ArrayList();

  private final SWTSkinObject skinObject;

  private final String imageViewID;

  public static class ButtonListenerAdapter
  {
    public void pressed(SWTSkinButtonUtility buttonUtility,
        SWTSkinObject skinObject, int stateMask) {
    }

    /**
     *
     * @param buttonUtility
     *
     * @deprecated
     */
    public void pressed(SWTSkinButtonUtility buttonUtility) {
    }
   
    public boolean held(SWTSkinButtonUtility buttonUtility) {
      return false;
    }

    public void disabledStateChanged(SWTSkinButtonUtility buttonUtility,
        boolean disabled) {
    }
  }

  public SWTSkinButtonUtility(SWTSkinObject skinObject) {
    this(skinObject, null);
  }

  public SWTSkinButtonUtility(SWTSkinObject skinObject, String imageViewID) {
    this.skinObject = skinObject;
    this.imageViewID = imageViewID;
   
    if (skinObject instanceof SWTSkinObjectButton) {
      return;
    }
   
    Listener l = new Listener() {
      boolean bDownPressed;
      private TimerEvent timerEvent;

      public void handleEvent(Event event) {
        if (event.type == SWT.MouseDown) {
          if (timerEvent == null) {
            timerEvent = SimpleTimer.addEvent("MouseHold",
                SystemTime.getOffsetTime(1000), new TimerEventPerformer() {
                  public void perform(TimerEvent event) {
                    timerEvent = null;

                    if (!bDownPressed) {
                      return;
                    }
                    bDownPressed = false;

                    boolean stillPressed = true;
                    for (Iterator iter = listeners.iterator(); iter.hasNext();) {
                      ButtonListenerAdapter l = (ButtonListenerAdapter) iter.next();
                      stillPressed &= !l.held(SWTSkinButtonUtility.this);
                    }
                    bDownPressed = stillPressed;
                  }
                });
          }
          bDownPressed = true;
          return;
        } else {
          if (timerEvent != null) {
            timerEvent.cancel();
            timerEvent = null;
          }
          if (!bDownPressed) {
            return;
          }
        }

        bDownPressed = false;

        if (isDisabled()) {
          return;
        }

        for (Iterator iter = listeners.iterator(); iter.hasNext();) {
          ButtonListenerAdapter l = (ButtonListenerAdapter) iter.next();
          l.pressed(SWTSkinButtonUtility.this);
          l.pressed(SWTSkinButtonUtility.this,
              SWTSkinButtonUtility.this.skinObject, event.stateMask);
        }
      }
    };
    if (skinObject instanceof SWTSkinObjectContainer) {
      Utils.addListenerAndChildren((Composite) skinObject.getControl(),
          SWT.MouseUp, l);
      Utils.addListenerAndChildren((Composite) skinObject.getControl(),
          SWT.MouseDown, l);
    } else {
      skinObject.getControl().addListener(SWT.MouseUp, l);
      skinObject.getControl().addListener(SWT.MouseDown, l);
    }
  }

  public boolean isDisabled() {
    return skinObject.getSuffix().indexOf("-disabled") >= 0;
  }

  private boolean inSetDisabled = false;
  private boolean lastDisabledState = false;
  public void setDisabled(final boolean disabled) {
    if (inSetDisabled) {
      return;
    }
    inSetDisabled = true;
    try {
      if (disabled == isDisabled()) {
        return;
      }
      if (skinObject instanceof SWTSkinObjectButton) {
        lastDisabledState = disabled;
        Utils.execSWTThreadLater(100, new AERunnable() {
          public void runSupport() {
            if (lastDisabledState == isDisabled()) {
              return;
            }
            ((SWTSkinObjectButton) skinObject).getControl().setEnabled(!lastDisabledState);
          }
        });
      }
      String suffix = disabled ? "-disabled" : "";
      skinObject.switchSuffix(suffix, 1, false);
 
      for (Iterator iter = listeners.iterator(); iter.hasNext();) {
        ButtonListenerAdapter l = (ButtonListenerAdapter) iter.next();
        l.disabledStateChanged(SWTSkinButtonUtility.this, disabled);
      }
    } finally {
      inSetDisabled = false;
    }
  }

  public void addSelectionListener(ButtonListenerAdapter listener) {
    if (skinObject instanceof SWTSkinObjectButton) {
      ((SWTSkinObjectButton)skinObject).addSelectionListener(listener);
      return;
    }

    if (listeners.contains(listener)) {
      return;
    }
    listeners.add(listener);
  }

  public SWTSkinObject getSkinObject() {
    return skinObject;
  }

  public void setTextID(final String id) {
    if (skinObject instanceof SWTSkinObjectButton) {
      ((SWTSkinObjectButton)skinObject).setText(MessageText.getString(id));
      return;
    }
    Utils.execSWTThreadLater(0, new AERunnable() {
      public void runSupport() {
        if (skinObject instanceof SWTSkinObjectText) {
          SWTSkinObjectText skinTextObject = (SWTSkinObjectText) skinObject;
          skinTextObject.setTextID(id);
        } else if (skinObject instanceof SWTSkinObjectContainer) {
          SWTSkinObject[] children = ((SWTSkinObjectContainer) skinObject).getChildren();
          if (children.length > 0 && children[0] instanceof SWTSkinObjectText) {
            SWTSkinObjectText skinTextObject = (SWTSkinObjectText) children[0];
            skinTextObject.setTextID(id);
          }
        }
        Utils.relayout(skinObject.getControl());
      }
    });
  }

  public void setImage(final String id) {
    if (skinObject instanceof SWTSkinObjectButton) {
      // TODO implement
      return;
    }
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if (imageViewID != null) {
          SWTSkinObject skinImageObject = skinObject.getSkin().getSkinObject(imageViewID, skinObject);
          if (skinImageObject instanceof SWTSkinObjectImage) {
            ((SWTSkinObjectImage) skinImageObject).setImageByID(id, null);
            return;
          }
        }
        if (skinObject instanceof SWTSkinObjectImage) {
          SWTSkinObjectImage skinImageObject = (SWTSkinObjectImage) skinObject;
          skinImageObject.setImageByID(id, null);
        } else if (skinObject instanceof SWTSkinObjectContainer) {
          SWTSkinObject[] children = ((SWTSkinObjectContainer) skinObject).getChildren();
          if (children.length > 0 && children[0] instanceof SWTSkinObjectImage) {
            SWTSkinObjectImage skinImageObject = (SWTSkinObjectImage) children[0];
            skinImageObject.setImageByID(id, null);
          }
        }
      }
    });
  }

  public void setTooltipID(final String id) {
    if (skinObject instanceof SWTSkinObjectButton) {
      // TODO implement
      return;
    }
    if (skinObject instanceof SWTSkinObjectImage) {
      SWTSkinObjectImage skinImageObject = (SWTSkinObjectImage) skinObject;
      skinImageObject.setTooltipID(id);
    } else if (skinObject instanceof SWTSkinObjectContainer) {
      SWTSkinObject[] children = ((SWTSkinObjectContainer) skinObject).getChildren();
      if (children.length > 0 && children[0] instanceof SWTSkinObjectImage) {
        SWTSkinObjectImage skinImageObject = (SWTSkinObjectImage) children[0];
        skinImageObject.setTooltipID(id);
      }
    }
  }
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility

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.