/**
      * Create a new media player event for a given native event.
      * 
      * @param event native event
      * @param eventMask bit mask of enabled events (i.e. events to send notifications for)
      * @return media player event, or <code>null</code> if the native event type is not enabled or otherwise could not be handled
      */
     public MediaListPlayerEvent newMediaListPlayerEvent(libvlc_event_t evt, int eventMask) {
         // Create an event suitable for the native event type...
         MediaListPlayerEvent result = null;
         switch(evt.type) {
 
         // === Events relating to the media list player =========================
 
             case libvlc_event_e.libvlc_MediaListPlayerNextItemSet:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_CHANGED)) {
                     IntPtr media = evt.u.item;
                     result = new MediaListPlayerNextItemSetEvent(mediaListPlayer, media, mediaListPlayer.Mrl(media));
 //                }
                 break;
 
             // === Events relating to the current media =============================
 
             case libvlc_event_e.libvlc_MediaMetaChanged:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_META_CHANGED)) {
                     result = new MediaListMediaMetaChangedEvent(mediaListPlayer, evt.u.meta_type);
 //                }
                 break;
 
             case libvlc_event_e.libvlc_MediaSubItemAdded:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_SUB_ITEM_ADDED)) {
                     result = new MediaListMediaSubItemAddedEvent(mediaListPlayer, evt.u.new_child);
 //                }
                 break;
 
             case libvlc_event_e.libvlc_MediaDurationChanged:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_DURATION_CHANGED)) {
                     result = new MediaListMediaDurationChangedEvent(mediaListPlayer, evt.u.new_duration);
 //                }
                 break;
 
             case libvlc_event_e.libvlc_MediaParsedChanged:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_PARSED_CHANGED)) {
                     result = new MediaListMediaParsedChangedEvent(mediaListPlayer, evt.u.new_status);
 //                }
                 break;
 
             case libvlc_event_e.libvlc_MediaFreed:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_FREED)) {
                     result = new MediaListMediaFreedEvent(mediaListPlayer);
 //                }
                 break;
 
             case libvlc_event_e.libvlc_MediaStateChanged:
 //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_STATE_CHANGED)) {
                     result = new MediaListMediaStateChangedEvent(mediaListPlayer, evt.u.new_state);
 //                }
                 break;
         }
         return result;
     }
     /**
      * Create an event.
      * 
      * @param event native event
      * @return media list event, or <code>null</code> if the native event type is not enabled or otherwise could not be handled
      */
     public MediaListEvent CreateEvent(libvlc_event_t evt) {
         // Create an event suitable for the native event type...
         MediaListEvent result = null;
         switch(evt.type) {
             case libvlc_event_e.libvlc_MediaListWillAddItem:
                 //result = new MediaListWillAddItemEvent(mediaList, evt.u.media_list_event.item, evt.u.media_list_event.index); // FIXME
                 break;
                 
             case libvlc_event_e.libvlc_MediaListItemAdded:
                 //result = new MediaListItemAddedEvent(mediaList, evt.u.media_list_event.item, evt.u.media_list_event.index);
                 break;
 
             case libvlc_event_e.libvlc_MediaListWillDeleteItem:
                 //result = new MediaListWillDeleteItemEvent(mediaList, evt.u.media_list_event.item, evt.u.media_list_event.index);
                 break;
                 
             case libvlc_event_e.libvlc_MediaListItemDeleted:
                 //result = new MediaListItemDeletedEvent(mediaList, evt.u.media_list_event.item, evt.u.media_list_event.index);
                 break;
         }
         return result;
     }
        /**
         * Create a new media player event for a given native event.
         * 
         * @param event native event
         * @param eventMask bit mask of enabled events (i.e. events to send notifications for)
         * @return media player event, or <code>null</code> if the native event type is not enabled or otherwise could not be handled
         */
        public MediaPlayerEvent CreateEvent(libvlc_event_t evt, int eventMask) {
            // Create an event suitable for the native event type...
            MediaPlayerEvent result = null;
            switch(evt.type) {
    
            // === Events relating to the media player ==============================
    
                case libvlc_event_e.libvlc_MediaPlayerMediaChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_CHANGED)) {
                        result = new MediaPlayerMediaChangedEvent(mediaPlayer, evt.u.md, mediaPlayer.Mrl(evt.u.md));
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerNothingSpecial:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_CHANGED)) {
                        result = new MediaPlayerNothingSpecialEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerOpening:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.OPENING)) {
                        result = new MediaPlayerOpeningEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerBuffering:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.BUFFERING)) {
                        result = new MediaPlayerBufferingEvent(mediaPlayer, evt.u.new_cache);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerPlaying:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.PLAYING)) {
                        result = new MediaPlayerPlayingEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerPaused:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.PAUSED)) {
                        result = new MediaPlayerPausedEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerStopped:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.STOPPED)) {
                        result = new MediaPlayerStoppedEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerForward:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.FORWARD)) {
                        result = new MediaPlayerForwardEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerBackward:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.BACKWARD)) {
                        result = new MediaPlayerBackwardEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerEndReached:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.FINISHED)) {
                        result = new MediaPlayerEndReachedEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerEncounteredError:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.ERROR)) {
                        result = new MediaPlayerEncounteredErrorEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerTimeChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.TIME_CHANGED)) {
                        result = new MediaPlayerTimeChangedEvent(mediaPlayer, evt.u.new_time);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerPositionChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.POSITION_CHANGED)) {
                        result = new MediaPlayerPositionChangedEvent(mediaPlayer, evt.u.new_position);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerSeekableChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.SEEKABLE_CHANGED)) {
                        result = new MediaPlayerSeekableChangedEvent(mediaPlayer, evt.u.new_seekable);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerPausableChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.PAUSABLE_CHANGED)) {
                        result = new MediaPlayerPausableChangedEvent(mediaPlayer, evt.u.new_pausable);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerTitleChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.TITLE_CHANGED)) {
                        result = new MediaPlayerTitleChangedEvent(mediaPlayer, evt.u.new_title);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerSnapshotTaken:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.SNAPSHOT_TAKEN)) {
                        result = new MediaPlayerSnapshotTakenEvent(mediaPlayer, NativeString.String(evt.u.psz_filename));
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerLengthChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.LENGTH_CHANGED)) {
                        result = new MediaPlayerLengthChangedEvent(mediaPlayer, evt.u.new_length);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaPlayerVout:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.VIDEO_OUTPUT)) {
                        result = new MediaPlayerVoutEvent(mediaPlayer, evt.u.new_count);
    //                }
                    break;
    
                // === Events relating to the current media =============================
    
                case libvlc_event_e.libvlc_MediaMetaChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_META_CHANGED)) {
                        result = new MediaMetaChangedEvent(mediaPlayer, evt.u.meta_type);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaSubItemAdded:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_SUB_ITEM_ADDED)) {
                        result = new MediaSubItemAddedEvent(mediaPlayer, evt.u.new_child);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaDurationChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_DURATION_CHANGED)) {
                        result = new MediaDurationChangedEvent(mediaPlayer, evt.u.new_duration);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaParsedChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_PARSED_CHANGED)) {
                        result = new MediaParsedChangedEvent(mediaPlayer, evt.u.new_status);
    //                }
                    break;

                case libvlc_event_e.libvlc_MediaFreed:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_FREED)) {
                        result = new MediaFreedEvent(mediaPlayer);
    //                }
                    break;
    
                case libvlc_event_e.libvlc_MediaStateChanged:
    //                if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_STATE_CHANGED)) {
                        result = new MediaStateChangedEvent(mediaPlayer, evt.u.new_state);
    //                }
                    break;
            }
            return result;
        }