
/**
 * Plugin - DESCRIPTION
 * <p/>
 * An extension to the Processing project - http://Proce55ing.net
 * <p/>
 * Copyright (c) 2004 Simon Greenwold
 * Created: Apr 5, 2004
 * <p/>
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * <p/>
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * <p/>
 * You should have received a copy of the GNU Lesser General
 * Public License along with the Processing project; if not,
 * write to the Free Software Foundation, Inc., 59 Temple Place,
 * Suite 330, Boston, MA  02111-1307  USA
 */

interface Plugin {

  public static final int NUM_HOOKS           = 8;

  public static final int PRE_LOOP_HOOK       = 0;
  public static final int POST_LOOP_HOOK      = 1;
  public static final int MOUSE_PRESSED_HOOK  = 2;
  public static final int MOUSE_RELEASED_HOOK = 3;
  public static final int MOUSE_MOVED_HOOK    = 4;
  public static final int MOUSE_DRAGGED_HOOK  = 5;
  public static final int KEY_PRESSED_HOOK    = 6;
  public static final int KEY_RELEASED_HOOK   = 7;

  /**
   *
   * @return the version of the release.
   */
  String getVersion();

  /**
   * The lowest version of Processing that this plugin works with. (<= 0 for all)
   * @return
   */
  int getMinCompatibleProcessingVersion();

  /**
   * What this plugin does.
   * @return
   */
  String getDescription();

  /**
   * Initialize the plugin. Store bApplet if you'll need it.
   * @param bApplet
   */
  void initialize(BApplet bApplet);

}
