plugin.h
上传用户:hongyu5696
上传日期:2018-01-22
资源大小:391k
文件大小:11k
源码类别:

PlugIns编程

开发平台:

Unix_Linux

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Netscape Public License
  6.  * Version 1.1 (the "License"); you may not use this file except in
  7.  * compliance with the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/NPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is mozilla.org code.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1998
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the NPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the NPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37. #ifndef __PLUGIN_H__
  38. #define __PLUGIN_H__
  39. #ifdef BSD
  40. #include <cmath>
  41. #endif
  42. #define _XOPEN_SOURCE 500
  43. #ifndef BSD
  44. #ifndef _GNU_SOURCE
  45. #define _GNU_SOURCE
  46. #endif
  47. #endif
  48. #ifdef GECKOSDK_ENABLED
  49. #include "mozilla-config.h"
  50. #endif
  51. #include "pluginbase.h"
  52. #include "nsScriptablePeer.h"
  53. #include "plugin-setup.h"
  54. #include <pthread.h>
  55. #include <sys/types.h>
  56. #include <signal.h>
  57. #include <string.h>
  58. #ifdef HAVE_GETTEXT
  59. # include <libintl.h>
  60. # define _(x) (gettext(x))
  61. #else
  62. # define _(x) (x)
  63. #endif
  64. class nsPluginInstance:public nsPluginInstanceBase {
  65.   public:
  66.     nsPluginInstance(NPP aInstance);
  67.     virtual ~ nsPluginInstance();
  68.     NPBool init(NPWindow * aWindow);
  69.     void shut();
  70.     void shutdown();
  71.     NPBool isInitialized();
  72.     NPError NewStream(NPMIMEType type, NPStream * stream, NPBool seekable,
  73.       uint16 * stype);
  74.     NPError SetWindow(NPWindow * aWindow);
  75.     NPError DestroyStream(NPStream * stream, NPError reason);
  76.     void URLNotify(const char *url, NPReason reason, void *notifyData);
  77.     int32 WriteReady(NPStream * stream);
  78.     int32 Write(NPStream * stream, int32 offset, int32 len, void *buffer);
  79.     // JS Methods
  80.     void Play();
  81.     void PlayAt(double counter);
  82.     void Pause();
  83.     void Stop();
  84.     void Quit();
  85.     void FastForward();
  86.     void FastReverse();
  87.     void Seek(double counter);
  88.     void GetPlayState(PRInt32 * playstate);
  89.     char *GetTime(void);
  90.     void GetDuration(double *_retval);
  91.     void GetPercent(double *_retval);
  92.     void GetFilename(char **filename);
  93.     void SetFilename(const char *filename);
  94.     void GetShowControls(PRBool * _retval);
  95.     void SetShowControls(PRBool value);
  96.     void GetFullscreen(PRBool * _retval);
  97.     void SetFullscreen(PRBool value);
  98.     void GetShowlogo(PRBool * _retval);
  99.     void SetShowlogo(PRBool value);
  100.     void GetAutoPlay(PRBool * _retval);
  101.     void SetAutoPlay(PRBool value);
  102.     void GetLoop(PRBool * _retval);
  103.     void SetLoop(PRBool value);
  104.     void GetMIMEType(char **_retval);
  105.     void GetData(char **_retval);
  106.     void WriteData(char **_retval);
  107.     void Detectplugin(const char*filename, char **_retval);
  108.     void Getplugin(const char *url, char **_retval);
  109.     void GetURL(char **_retval);
  110.     void GetPlaying(PRBool * _retval);
  111.     void PlaylistAppend(const char *item);
  112.     void PlaylistClear(PRBool *_retval);
  113.     // we need to provide implementation of this method as it will be
  114.     // used by Mozilla to retrive the scriptable peer
  115.     // and couple of other things on Unix
  116.     NPError GetValue(NPPVariable variable, void *value);
  117.     nsScriptablePeer *getScriptablePeer();
  118.     nsControlsScriptablePeer *getControlsScriptablePeer();
  119.   public:
  120.      NPP mInstance;
  121.     NPBool mInitialized;
  122.     nsScriptablePeer *mScriptablePeer;
  123.     nsControlsScriptablePeer *mControlsScriptablePeer;
  124.     // put member data here
  125.     char *mimetype;
  126.     int state;
  127.     char *url;
  128.     char *fname;
  129.     char *href;
  130.     char *lastmessage;
  131.     uint16 mode;
  132.     uint32 window_width;
  133.     uint32 window_height;
  134.     uint32 embed_width;
  135.     uint32 embed_height;
  136.     uint32 movie_width;
  137.     uint32 movie_height;
  138.     int setwindow;
  139.     char *baseurl;
  140.     char *hostname;
  141.     int control;
  142.     FILE *player;
  143.     pid_t pid;
  144.     int noredraw;
  145.     int hrefrequested;
  146.     int threadsetup; // has the child thread been setup but not signalled
  147.     int threadlaunched; // only allow 1 child thread per instance
  148.     int threadsignaled; // keep track if the thread has been told to start
  149.     int cancelled;
  150.     int autostart;
  151.     int controlwindow;
  152.     int showcontrols;
  153.     int showtracker;
  154.     int showbuttons;
  155.     int showfsbutton;
  156.     int redrawbuttons;
  157.     int mmsstream;
  158.     Node *list;
  159.     Node *currentnode;
  160.     ThreadData *td;
  161.     Window window;
  162.     Window player_window;
  163.     Display *display;
  164.     Widget widget;
  165.     uint32 nQtNext;
  166.     char *qtNext[256];
  167.     int panel_height;
  168.     int panel_drawn;
  169.     float percent;
  170.     char *mediaCompleteCallback;
  171.     char *mediaCompleteWithErrorCallback;
  172.     char *mouseClickCallback;
  173.     char *mouseDownCallback;
  174.     char *mouseUpCallback;
  175.     char *mouseEnterCallback;
  176.     char *mouseLeaveCallback;
  177.     char *onVisibleCallback;
  178.     char *onHiddenCallback;
  179.     char *onDestroyCallback;
  180.     float mediaLength; // length of media in seconds
  181.     int mediaPercent; // percentage of media played
  182.     float mediaTime; // time in seconds
  183.     float mediaPos; // seconds into the media
  184.     int nomediacache;
  185.     int controlsvisible;
  186.     int fullscreen;
  187.     int showlogo;
  188.     int showtime;
  189.     int DPMSEnabled;
  190.     int hidden;
  191.     int black_background;
  192.     int nomouseinput;
  193.     int noconsolecontrols;
  194.     int cookies;
  195.     long int starttime;
  196.     int nopauseonhide;
  197.     int targetplayer; // if we have this create a new window and play there
  198.     int hidestatus;
  199.     int enablecontextmenu;
  200.     
  201. #ifdef GTK_ENABLED
  202.     gulong delete_signal_id;
  203.     gulong visible_signal_id;
  204.     GtkWidget *gtkwidget;
  205.     GtkWidget *button_window;
  206.     GtkWidget *gtkplug;
  207.     GtkWidget *image;
  208.     GtkWidget *fixed_container;
  209.     GtkWidget *fixed_event_box;
  210.     GtkProgressBar *progress_bar;
  211.     GtkProgressBar *mediaprogress_bar;
  212.     GtkLabel *status;
  213.     GtkWidget *drawing_area;
  214.     GtkWidget *fs_window;
  215.     GtkWidget *play_event_box;
  216.     GtkWidget *pause_event_box;
  217.     GtkWidget *stop_event_box;
  218.     GtkWidget *ff_event_box;
  219.     GtkWidget *rew_event_box;
  220.     GtkWidget *fs_event_box;
  221.     GtkWidget *src_event_box;
  222.     GtkWidget *image_play;
  223.     GtkWidget *image_pause;
  224.     GtkWidget *image_stop;
  225.     GtkWidget *image_ff;
  226.     GtkWidget *image_rew;
  227.     GtkWidget *image_fs;
  228.     GtkWidget *image_src;
  229.     GtkMenu *popup_menu;
  230.     GtkMenuItem *menuitem_play;
  231.     GtkMenuItem *menuitem_pause;
  232.     GtkMenuItem *menuitem_stop;
  233.     GtkMenuItem *menuitem_sep1;
  234.     GtkMenuItem *menuitem_sep2;
  235.     GtkMenuItem *menuitem_sep3;
  236.     GtkMenuItem *menuitem_showcontrols;
  237.     GtkMenuItem *menuitem_fullscreen;
  238.     GtkMenuItem *menuitem_save;
  239.     GtkMenuItem *menuitem_copy;
  240.     GtkMenuItem *menuitem_config;
  241.     GtkWidget *conf_window;
  242.     GtkWidget *conf_vo;
  243.     GtkWidget *conf_ao;
  244.     GtkWidget *conf_dir;
  245.     GtkWidget *conf_cachesize;
  246.     GtkWidget *conf_cachepercent;
  247.     GtkWidget *conf_showtime;
  248.     GtkWidget *conf_enable_smil;
  249.     GtkWidget *conf_enable_helix;
  250.     GtkWidget *conf_nomediacache;
  251.     GtkWidget *conf_rtsptcp;
  252.     GtkWidget *conf_rtsphttp;
  253.     GtkWidget *conf_enable_wmp;
  254.     GtkWidget *conf_enable_qt;
  255.     GtkWidget *conf_enable_rm;
  256.     GtkWidget *conf_enable_gmp;
  257.     GtkWidget *conf_enable_ogg;
  258.     GtkWidget *conf_enable_mpeg;
  259.     GtkWidget *conf_enable_mp3;
  260.     GtkWidget *conf_enable_midi;
  261.     GtkWidget *conf_enable_pls;
  262.     GtkWidget *conf_enable_dvx;
  263.     GtkWidget *conf_pauseonhide;
  264.     GtkWidget *file_selector;   
  265. #endif
  266.     pthread_t player_thread;
  267.     pthread_attr_t thread_attr;
  268.     pthread_cond_t playlist_complete_cond;
  269.     pthread_mutex_t playlist_mutex;
  270.     pthread_mutex_t playlist_cond_mutex;
  271.     pthread_mutex_t control_mutex;
  272.     pthread_mutex_t read_mutex;
  273. #ifdef GTK2_ENABLED
  274.     // Pixbufs - GTK1 does not use Pixbufs
  275.     GdkPixbuf *logo;
  276.     GdkPixbuf *pb_sm_play_up;
  277.     GdkPixbuf *pb_sm_play_down;
  278.     GdkPixbuf *pb_sm_pause_up;
  279.     GdkPixbuf *pb_sm_pause_down;
  280.     GdkPixbuf *pb_sm_stop_up;
  281.     GdkPixbuf *pb_sm_stop_down;
  282.     GdkPixbuf *pb_sm_ff_up;
  283.     GdkPixbuf *pb_sm_ff_down;
  284.     GdkPixbuf *pb_sm_rew_up;
  285.     GdkPixbuf *pb_sm_rew_down;
  286.     GdkPixbuf *pb_sm_fs_up;
  287.     GdkPixbuf *pb_sm_fs_down;
  288.     GdkPixbuf *pb_src;
  289.     int paused_wheninvisible;
  290. #endif
  291. #ifdef GTK1_ENABLED
  292.     GdkPixmap *logo;
  293.     GdkPixmap *pb_sm_play_up;
  294.     GdkPixmap *pb_sm_play_down;
  295.     GdkPixmap *pb_sm_pause_up;
  296.     GdkPixmap *pb_sm_pause_down;
  297.     GdkPixmap *pb_sm_stop_up;
  298.     GdkPixmap *pb_sm_stop_down;
  299.     GdkPixmap *pb_sm_ff_up;
  300.     GdkPixmap *pb_sm_ff_down;
  301.     GdkPixmap *pb_sm_rew_up;
  302.     GdkPixmap *pb_sm_rew_down;
  303.     GdkPixmap *pb_sm_fs_up;
  304.     GdkPixmap *pb_sm_fs_down;
  305.     GtkRcStyle *style;
  306.     GdkColor color;
  307.     Window moz_window;
  308.     int moz_x;
  309.     int moz_y;
  310.     XWindowAttributes window_attr;
  311. #endif
  312. #ifdef X_ENABLED
  313.     XFontSet font;
  314.     Pixmap logo;
  315.     Pixmap logomask;
  316.     Pixmap progress_left;
  317.     Pixmap progress_leftmask;
  318.     Pixmap progress_middle;
  319.     Pixmap progress_middlemask;
  320.     Pixmap progress_right;
  321.     Pixmap progress_rightmask;
  322.     Pixmap progress_fill;
  323.     Pixmap progress_fillmask;
  324.     int lastpercent;
  325. #endif
  326.     // options
  327.     char *vo;
  328.     char *vop;
  329.     int novop;
  330.     int noembed;
  331.     char *ao;
  332.     char *af;
  333.     int loop;
  334.     int rtsp_use_tcp;
  335.     int rtsp_use_http;
  336.     int keep_download;
  337.     int maintain_aspect;
  338.     int qt_speed;
  339.     char *download_dir;
  340.     int cachesize;
  341.     char *output_display;
  342.     int osdlevel;
  343.     int cache_percent;
  344.     int toolkitok;
  345.     int moz_toolkit;
  346.     int plug_toolkit;
  347.     int framedrop;
  348.     int autosync;
  349.     int mc;
  350.     char *useragent;
  351.     int enable_smil;
  352.     int enable_helix;
  353.     int enable_wmp;
  354.     int enable_qt;
  355.     int enable_rm;
  356.     int enable_gmp;
  357.     int enable_dvx;
  358.     int enable_mpeg;
  359.     int enable_mp3;
  360.     int enable_ogg;
  361.     int enable_midi;
  362.     int enable_pls;
  363.     // JavaScript State
  364.     int paused;
  365.     int js_state;
  366. };
  367. #endif // __PLUGIN_H__