Package com.scriptographer.adm

Source Code of com.scriptographer.adm.NotificationHandler

/*
* Scriptographer
*
* This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator
* http://scriptographer.org/
*
* Copyright (c) 2002-2010, Juerg Lehni
* http://scratchdisk.com/
*
* All rights reserved. See LICENSE file for details.
*
* File created on 16.03.2005.
*/

package com.scriptographer.adm;

import java.util.HashMap;
import java.util.Map;

import com.scratchdisk.script.Callable;
import com.scriptographer.ai.Timer;
import com.scriptographer.script.RunnableCallable;
import com.scriptographer.ui.NativeObject;

/**
* The NotificationListener just receives notifications from native code.
* It can be a Dialog, Item or ListEntry
*
* @author lehni
*/
abstract class NotificationHandler extends NativeObject {
  @SuppressWarnings("unused")
  private Tracker tracker = new Tracker();
   @SuppressWarnings("unused")
  private Drawer drawer = new Drawer();
  private Map data;

  protected abstract void onNotify(Notifier notifier);
  protected abstract boolean onTrack(Tracker tracker);
  protected abstract boolean onDraw(Drawer drawer);

  public abstract boolean defaultTrack(Tracker tracker);
  public abstract void defaultDraw(Drawer drawer);

  protected final void onNotify(String name) {
    Notifier notifier = Notifier.get(name);
    // Use invokeLater to call onInitialize, so it is called after the
    // native onInit callback.
    if (notifier == Notifier.INITIALIZE) {
      invokeLater(new Runnable() {
        public void run() {
          onNotify(Notifier.INITIALIZE);
        }
      });
    } else {
      onNotify(notifier);
    }
  }

  /**
   * Allow UI items to store data along with them.
   */
  public Map getData() {
    if (data == null)
      data = new HashMap();
    return data;
  }

  public void setData(Map data) {
    this.data = data;
  }

  private class RunnableTimer extends Timer {
    Runnable runnable;

    RunnableTimer(Runnable runnable) {
      super(0, false);
      this.runnable = runnable;
    }

    protected boolean onExecute() {
      runnable.run();
      // Do not redraw document
      return false;
    }
  }

  /**
   * @jshide
   */
  public boolean invokeLater(Runnable runnable) {
    try {
      new RunnableTimer(runnable);
      return true;
    } catch (Throwable e) {
      return false;
    }
  }

  /**
   * @jshide
   */
  public boolean invokeLater(Callable function) {
    return invokeLater(new RunnableCallable(function, this));
  }
}
TOP

Related Classes of com.scriptographer.adm.NotificationHandler

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.