[vlc-devel] [RFC 24/82] qt: remove legacy input_manager and action_manager
Pierre Lamot
pierre at videolabs.io
Fri Feb 1 14:01:28 CET 2019
they were designed to use the legacy playlist/input_manager
---
modules/gui/qt/Makefile.am | 4 -
modules/gui/qt/actions_manager.cpp | 207 -----
modules/gui/qt/actions_manager.hpp | 95 --
modules/gui/qt/input_manager.cpp | 1284 ----------------------------
modules/gui/qt/input_manager.hpp | 344 --------
5 files changed, 1934 deletions(-)
delete mode 100644 modules/gui/qt/actions_manager.cpp
delete mode 100644 modules/gui/qt/actions_manager.hpp
delete mode 100644 modules/gui/qt/input_manager.cpp
delete mode 100644 modules/gui/qt/input_manager.hpp
diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index 7d6c517459..f7966db939 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -47,8 +47,6 @@ libqt_plugin_la_SOURCES = \
gui/qt/menus.cpp gui/qt/menus.hpp \
gui/qt/main_interface.cpp gui/qt/main_interface.hpp \
gui/qt/dialogs_provider.cpp gui/qt/dialogs_provider.hpp \
- gui/qt/input_manager.cpp gui/qt/input_manager.hpp \
- gui/qt/actions_manager.cpp gui/qt/actions_manager.hpp \
gui/qt/extensions_manager.cpp gui/qt/extensions_manager.hpp \
gui/qt/managers/addons_manager.cpp gui/qt/managers/addons_manager.hpp \
gui/qt/managers/renderer_manager.cpp gui/qt/managers/renderer_manager.hpp \
@@ -176,8 +174,6 @@ nodist_libqt_plugin_la_SOURCES = \
gui/qt/main_interface.moc.cpp \
gui/qt/menus.moc.cpp \
gui/qt/dialogs_provider.moc.cpp \
- gui/qt/input_manager.moc.cpp \
- gui/qt/actions_manager.moc.cpp \
gui/qt/extensions_manager.moc.cpp \
gui/qt/managers/addons_manager.moc.cpp \
gui/qt/managers/renderer_manager.moc.cpp \
diff --git a/modules/gui/qt/actions_manager.cpp b/modules/gui/qt/actions_manager.cpp
deleted file mode 100644
index 31e583e06c..0000000000
--- a/modules/gui/qt/actions_manager.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*****************************************************************************
- * actions_manager.cpp : Controller for the main interface
- ****************************************************************************
- * Copyright © 2009-2014 VideoLAN and VLC authors
- *
- * Authors: Jean-Baptiste Kempf <jb at videolan.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * ( at your option ) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_actions.h>
-
-#include "actions_manager.hpp"
-
-#include "dialogs_provider.hpp" /* Opening Dialogs */
-#include "input_manager.hpp" /* THEMIM */
-#include "main_interface.hpp" /* Show playlist */
-#include "components/controller.hpp" /* Toggle FSC controller width */
-#include "components/extended_panels.hpp"
-#include "menus.hpp"
-
-ActionsManager::ActionsManager( intf_thread_t * _p_i )
- : p_intf( _p_i )
-{
-}
-
-ActionsManager::~ActionsManager()
-{
-}
-
-void ActionsManager::doAction( int id_action )
-{
- switch( id_action )
- {
- case PLAY_ACTION:
- play(); break;
- case STOP_ACTION:
- THEMIM->stop(); break;
- case OPEN_ACTION:
- THEDP->openDialog(); break;
- case PREVIOUS_ACTION:
- THEMIM->prev(); break;
- case NEXT_ACTION:
- THEMIM->next(); break;
- case SLOWER_ACTION:
- THEMIM->getIM()->slower(); break;
- case FASTER_ACTION:
- THEMIM->getIM()->faster(); break;
- case FULLSCREEN_ACTION:
- fullscreen(); break;
- case EXTENDED_ACTION:
- THEDP->extendedDialog(); break;
- case PLAYLIST_ACTION:
- playlist(); break;
- case SNAPSHOT_ACTION:
- snapshot(); break;
- case RECORD_ACTION:
- record(); break;
- case FRAME_ACTION:
- frame(); break;
- case ATOB_ACTION:
- THEMIM->getIM()->setAtoB(); break;
- case REVERSE_ACTION:
- THEMIM->getIM()->reverse(); break;
- case SKIP_BACK_ACTION:
- skipBackward();
- break;
- case SKIP_FW_ACTION:
- skipForward();
- break;
- case QUIT_ACTION:
- THEDP->quit(); break;
- case RANDOM_ACTION:
- THEMIM->toggleRandom(); break;
- case INFO_ACTION:
- THEDP->mediaInfoDialog(); break;
- case OPEN_SUB_ACTION:
- THEDP->loadSubtitlesFile(); break;
- case FULLWIDTH_ACTION:
- if( p_intf->p_sys->p_mi )
- p_intf->p_sys->p_mi->getFullscreenControllerWidget()->toggleFullwidth();
- break;
- default:
- msg_Warn( p_intf, "Action not supported: %i", id_action );
- break;
- }
-}
-
-void ActionsManager::play()
-{
- if( THEPL->current.i_size == 0 && THEPL->items.i_size == 0 )
- {
- /* The playlist is empty, open a file requester */
- THEDP->openFileDialog();
- return;
- }
- THEMIM->togglePlayPause();
-}
-
-/**
- * TODO
- * This functions toggle the fullscreen mode
- * If there is no video, it should first activate Visualisations...
- * This has also to be fixed in enableVideo()
- */
-void ActionsManager::fullscreen()
-{
- bool fs = var_ToggleBool( THEPL, "fullscreen" );
- vout_thread_t *p_vout = THEMIM->getVout();
- if( p_vout)
- {
- var_SetBool( p_vout, "fullscreen", fs );
- vlc_object_release( p_vout );
- }
-}
-
-void ActionsManager::snapshot()
-{
- vout_thread_t *p_vout = THEMIM->getVout();
- if( p_vout )
- {
- var_TriggerCallback( p_vout, "video-snapshot" );
- vlc_object_release( p_vout );
- }
-}
-
-void ActionsManager::playlist()
-{
- if( p_intf->p_sys->p_mi )
- p_intf->p_sys->p_mi->togglePlaylist();
-}
-
-void ActionsManager::record()
-{
- input_thread_t *p_input = THEMIM->getInput();
- if( p_input )
- {
- /* This method won't work fine if the stream can't be cut anywhere */
- var_ToggleBool( p_input, "record" );
-#if 0
- else
- {
- /* 'record' access-filter is not loaded, we open Save dialog */
- input_item_t *p_item = input_GetItem( p_input );
- if( !p_item )
- return;
-
- char *psz = input_item_GetURI( p_item );
- if( psz )
- THEDP->streamingDialog( NULL, qfu(psz), true );
- }
-#endif
- }
-}
-
-void ActionsManager::frame()
-{
- input_thread_t *p_input = THEMIM->getInput();
- if( p_input )
- var_TriggerCallback( p_input, "frame-next" );
-}
-
-void ActionsManager::toggleMuteAudio()
-{
- playlist_MuteToggle( THEPL );
-}
-
-void ActionsManager::AudioUp()
-{
- playlist_VolumeUp( THEPL, 1, NULL );
-}
-
-void ActionsManager::AudioDown()
-{
- playlist_VolumeDown( THEPL, 1, NULL );
-}
-
-void ActionsManager::skipForward()
-{
- input_thread_t *p_input = THEMIM->getInput();
- if( p_input )
- THEMIM->getIM()->jumpFwd();
-}
-
-void ActionsManager::skipBackward()
-{
- input_thread_t *p_input = THEMIM->getInput();
- if( p_input )
- THEMIM->getIM()->jumpBwd();
-}
diff --git a/modules/gui/qt/actions_manager.hpp b/modules/gui/qt/actions_manager.hpp
deleted file mode 100644
index 1c25352f82..0000000000
--- a/modules/gui/qt/actions_manager.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************
- * actions_manager.hpp : Controller for the main interface
- ****************************************************************************
- * Copyright (C) 2006-2008 the VideoLAN team
- *
- * Authors: Jean-Baptiste Kempf <jb at videolan.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef QVLC_ACTIONS_MANAGER_H_
-#define QVLC_ACTIONS_MANAGER_H_ 1
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "qt.hpp"
-#include "util/singleton.hpp"
-
-#include <QObject>
-
-typedef enum actionType_e
-{
- PLAY_ACTION,
- STOP_ACTION,
- OPEN_ACTION,
- PREVIOUS_ACTION,
- NEXT_ACTION,
- SLOWER_ACTION,
- FASTER_ACTION,
- FULLSCREEN_ACTION,
- FULLWIDTH_ACTION,
- EXTENDED_ACTION,
- PLAYLIST_ACTION,
- SNAPSHOT_ACTION,
- RECORD_ACTION,
- FRAME_ACTION,
- ATOB_ACTION,
- REVERSE_ACTION,
- SKIP_BACK_ACTION,
- SKIP_FW_ACTION,
- QUIT_ACTION,
- RANDOM_ACTION,
- LOOP_ACTION,
- INFO_ACTION,
- OPEN_SUB_ACTION,
-} actionType_e;
-
-class ActionsManager : public QObject, public Singleton<ActionsManager>
-{
-
- Q_OBJECT
- friend class Singleton<ActionsManager>;
-
-public:
-
-private:
- ActionsManager( intf_thread_t *_p_i );
- virtual ~ActionsManager();
-
- intf_thread_t* const p_intf;
-
-public slots:
- void toggleMuteAudio();
- void AudioUp();
- void AudioDown();
- void play();
- void record();
- void skipForward();
- void skipBackward();
-
-protected slots:
- void fullscreen();
- void snapshot();
- void playlist();
- void frame();
-
- virtual void doAction( int );
-};
-
-#endif
-
diff --git a/modules/gui/qt/input_manager.cpp b/modules/gui/qt/input_manager.cpp
deleted file mode 100644
index 10ba109dba..0000000000
--- a/modules/gui/qt/input_manager.cpp
+++ /dev/null
@@ -1,1284 +0,0 @@
-/*****************************************************************************
- * input_manager.cpp : Manage an input and interact with its GUI elements
- ****************************************************************************
- * Copyright (C) 2006-2008 the VideoLAN team
- *
- * Authors: Clément Stenac <zorglub at videolan.org>
- * Ilkka Ollakka <ileoo at videolan.org>
- * Jean-Baptiste <jb at videolan.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "input_manager.hpp"
-#include "recents.hpp"
-
-#include <vlc_actions.h> /* ACTION_ID */
-#include <vlc_url.h> /* vlc_uri_decode */
-#include <vlc_strings.h> /* vlc_strfinput */
-#include <vlc_aout.h> /* audio_output_t */
-
-#include <QApplication>
-#include <QFile>
-#include <QDir>
-#include <QSignalMapper>
-#include <QMessageBox>
-
-#include <assert.h>
-
-static int InputEvent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int VbiEvent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-
-/* Ensure arbitratry (not dynamically allocated) event IDs are not in use */
-static inline void registerAndCheckEventIds( int start, int end )
-{
- for ( int i=start ; i<=end ; i++ )
- Q_ASSERT( QEvent::registerEventType( i ) == i ); /* event ID collision ! */
-}
-
-/**********************************************************************
- * InputManager implementation
- **********************************************************************
- * The Input Manager can be the main one around the playlist
- * But can also be used for VLM dialog or similar
- **********************************************************************/
-
-InputManager::InputManager( MainInputManager *mim, intf_thread_t *_p_intf) :
- QObject( mim ), p_intf( _p_intf )
-{
- p_mim = mim;
- i_old_playing_status = END_S;
- oldName = "";
- artUrl = "";
- p_input = NULL;
- p_input_vbi = NULL;
- f_rate = 0.;
- p_item = NULL;
- b_video = false;
- timeA = VLC_TICK_INVALID;
- timeB = VLC_TICK_INVALID;
- f_cache = -1.; /* impossible initial value, different from all */
- registerAndCheckEventIds( IMEvent::PositionUpdate, IMEvent::FullscreenControlPlanHide );
- registerAndCheckEventIds( PLEvent::PLItemAppended, PLEvent::PLEmpty );
-}
-
-InputManager::~InputManager()
-{
- delInput();
-}
-
-void InputManager::inputChangedHandler()
-{
- setInput( p_mim->getInput() );
-}
-
-/* Define the Input used.
- Add the callbacks on input
- p_input is held once here */
-void InputManager::setInput( input_thread_t *_p_input )
-{
- delInput();
- p_input = _p_input;
- if( p_input != NULL )
- {
- msg_Dbg( p_intf, "IM: Setting an input" );
- vlc_object_hold( p_input );
- addCallbacks();
-
- UpdateStatus();
- UpdateName();
- UpdateArt();
- UpdateTeletext();
- UpdateNavigation();
- UpdateVout();
-
- p_item = input_GetItem( p_input );
- emit rateChanged( var_GetFloat( p_input, "rate" ) );
-
- /* Get Saved Time */
- if( p_item->i_type == ITEM_TYPE_FILE )
- {
- char *uri = input_item_GetURI( p_item );
-
- vlc_tick_t i_time = RecentsMRL::getInstance( p_intf )->time( qfu(uri) );
- if( i_time > 0 && qfu( uri ) != lastURI &&
- !var_GetFloat( p_input, "run-time" ) &&
- !var_GetFloat( p_input, "start-time" ) &&
- !var_GetFloat( p_input, "stop-time" ) )
- {
- emit resumePlayback( i_time );
- }
- playlist_Lock( THEPL );
- // Add root items only
- playlist_item_t* p_node = playlist_CurrentPlayingItem( THEPL );
- if ( p_node != NULL && p_node->p_parent != NULL && p_node->p_parent->i_id == THEPL->p_playing->i_id )
- {
- // Save the latest URI to avoid asking to restore the
- // position on the same input file.
- lastURI = qfu( uri );
- RecentsMRL::getInstance( p_intf )->addRecent( lastURI );
- }
- playlist_Unlock( THEPL );
- free( uri );
- }
- }
- else
- {
- p_item = NULL;
- lastURI.clear();
- assert( !p_input_vbi );
- emit rateChanged( var_InheritFloat( p_intf, "rate" ) );
- }
-}
-
-/* delete Input if it ever existed.
- Delete the callbacls on input
- p_input is released once here */
-void InputManager::delInput()
-{
- if( !p_input ) return;
- msg_Dbg( p_intf, "IM: Deleting the input" );
-
- /* Save time / position */
- char *uri = input_item_GetURI( p_item );
- if( uri != NULL ) {
- float f_pos = var_GetFloat( p_input , "position" );
- vlc_tick_t i_time = -1;
-
- if( f_pos >= 0.05f && f_pos <= 0.95f
- && var_GetInteger( p_input, "length" ) >= VLC_TICK_FROM_SEC(60))
- i_time = var_GetInteger( p_input, "time");
-
- RecentsMRL::getInstance( p_intf )->setTime( qfu(uri), i_time );
- free(uri);
- }
-
- delCallbacks();
- i_old_playing_status = END_S;
- p_item = NULL;
- oldName = "";
- artUrl = "";
- b_video = false;
- timeA = VLC_TICK_INVALID;
- timeB = VLC_TICK_INVALID;
- f_rate = 0. ;
-
- if( p_input_vbi )
- {
- vlc_object_release( p_input_vbi );
- p_input_vbi = NULL;
- }
-
- vlc_object_release( p_input );
- p_input = NULL;
-
- emit positionUpdated( -1.0, 0 ,0 );
- emit rateChanged( var_InheritFloat( p_intf, "rate" ) );
- emit nameChanged( "" );
- emit chapterChanged( 0 );
- emit titleChanged( 0 );
- emit playingStatusChanged( END_S );
-
- emit teletextPossible( false );
- emit AtoBchanged( false, false );
- emit voutChanged( false );
- emit voutListChanged( NULL, 0 );
-
- /* Reset all InfoPanels but stats */
- emit artChanged( NULL );
- emit artChanged( "" );
- emit infoChanged( NULL );
- emit currentMetaChanged( (input_item_t *)NULL );
-
- emit encryptionChanged( false );
- emit recordingStateChanged( false );
-
- emit cachingChanged( 0.0 );
-}
-
-/* Convert the event from the callbacks in actions */
-void InputManager::customEvent( QEvent *event )
-{
- int i_type = event->type();
- IMEvent *ple = static_cast<IMEvent *>(event);
-
- if( i_type == IMEvent::ItemChanged )
- UpdateMeta( ple->item() );
-
- if( !hasInput() )
- return;
-
- /* Actions */
- switch( i_type )
- {
- case IMEvent::CapabilitiesChanged:
- UpdateCapabilities();
- break;
- case IMEvent::PositionUpdate:
- UpdatePosition();
- break;
- case IMEvent::StatisticsUpdate:
- UpdateStats();
- break;
- case IMEvent::ItemChanged:
- /* Ignore ItemChanged_Type event that does not apply to our input */
- if( p_item == ple->item() )
- {
- UpdateStatus();
- UpdateName();
- UpdateArt();
- UpdateMeta();
- /* Update duration of file */
- }
- break;
- case IMEvent::ItemStateChanged:
- UpdateStatus();
- break;
- case IMEvent::MetaChanged:
- UpdateMeta();
- UpdateName(); /* Needed for NowPlaying */
- UpdateArt(); /* Art is part of meta in the core */
- break;
- case IMEvent::InfoChanged:
- UpdateInfo();
- break;
- case IMEvent::ItemTitleChanged:
- UpdateNavigation();
- UpdateName(); /* Display the name of the Chapter, if exists */
- break;
- case IMEvent::ItemRateChanged:
- UpdateRate();
- break;
- case IMEvent::ItemEsChanged:
- UpdateTeletext();
- break;
- case IMEvent::InterfaceVoutUpdate:
- UpdateVout();
- break;
- case IMEvent::SynchroChanged:
- emit synchroChanged();
- break;
- case IMEvent::CachingEvent:
- UpdateCaching();
- break;
- case IMEvent::BookmarksChanged:
- emit bookmarksChanged();
- break;
- case IMEvent::RecordingEvent:
- UpdateRecord();
- break;
- case IMEvent::ProgramChanged:
- UpdateProgramEvent();
- break;
- case IMEvent::EPGEvent:
- UpdateEPG();
- break;
- default:
- msg_Warn( p_intf, "This shouldn't happen: %i", i_type );
- vlc_assert_unreachable();
- }
-}
-
-/* Add the callbacks on Input. Self explanatory */
-inline void InputManager::addCallbacks()
-{
- var_AddCallback( p_input, "intf-event", InputEvent, this );
-}
-
-/* Delete the callbacks on Input. Self explanatory */
-inline void InputManager::delCallbacks()
-{
- var_DelCallback( p_input, "intf-event", InputEvent, this );
-}
-
-/* Static callbacks for IM */
-int MainInputManager::ItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t val, void *param )
-{
- InputManager *im = (InputManager*)param;
- input_item_t *p_item = static_cast<input_item_t *>(val.p_address);
-
- IMEvent *event = new IMEvent( IMEvent::ItemChanged, p_item );
- QApplication::postEvent( im, event );
- return VLC_SUCCESS;
-}
-
-static int InputEvent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t newval, void *param )
-{
- InputManager *im = (InputManager*)param;
- IMEvent *event;
-
- switch( newval.i_int )
- {
- case INPUT_EVENT_STATE:
- event = new IMEvent( IMEvent::ItemStateChanged );
- break;
- case INPUT_EVENT_RATE:
- event = new IMEvent( IMEvent::ItemRateChanged );
- break;
- case INPUT_EVENT_CAPABILITIES:
- event = new IMEvent( IMEvent::CapabilitiesChanged );
- break;
- case INPUT_EVENT_POSITION:
- //case INPUT_EVENT_LENGTH:
- event = new IMEvent( IMEvent::PositionUpdate );
- break;
-
- case INPUT_EVENT_TITLE:
- case INPUT_EVENT_CHAPTER:
- event = new IMEvent( IMEvent::ItemTitleChanged );
- break;
-
- case INPUT_EVENT_ES:
- event = new IMEvent( IMEvent::ItemEsChanged );
- break;
-
- case INPUT_EVENT_STATISTICS:
- event = new IMEvent( IMEvent::StatisticsUpdate );
- break;
-
- case INPUT_EVENT_VOUT:
- event = new IMEvent( IMEvent::InterfaceVoutUpdate );
- break;
-
- case INPUT_EVENT_ITEM_META: /* Codec MetaData + Art */
- event = new IMEvent( IMEvent::MetaChanged );
- break;
- case INPUT_EVENT_ITEM_INFO: /* Codec Info */
- event = new IMEvent( IMEvent::InfoChanged );
- break;
-
- case INPUT_EVENT_AUDIO_DELAY:
- case INPUT_EVENT_SUBTITLE_DELAY:
- event = new IMEvent( IMEvent::SynchroChanged );
- break;
-
- case INPUT_EVENT_CACHE:
- event = new IMEvent( IMEvent::CachingEvent );
- break;
-
- case INPUT_EVENT_BOOKMARK:
- event = new IMEvent( IMEvent::BookmarksChanged );
- break;
-
- case INPUT_EVENT_RECORD:
- event = new IMEvent( IMEvent::RecordingEvent );
- break;
-
- case INPUT_EVENT_PROGRAM:
- /* This is for PID changes */
- event = new IMEvent( IMEvent::ProgramChanged );
- break;
-
- case INPUT_EVENT_ITEM_EPG:
- /* EPG data changed */
- event = new IMEvent( IMEvent::EPGEvent );
- break;
-
- case INPUT_EVENT_SIGNAL:
- /* This is for capture-card signals */
- /* event = new IMEvent( SignalChanged_Type );
- break; */
- default:
- event = NULL;
- break;
- }
-
- if( event )
- QApplication::postEvent( im, event );
- return VLC_SUCCESS;
-}
-
-static int VbiEvent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void *param )
-{
- InputManager *im = (InputManager*)param;
- IMEvent *event = new IMEvent( IMEvent::ItemEsChanged );
-
- QApplication::postEvent( im, event );
- return VLC_SUCCESS;
-}
-
-void InputManager::UpdatePosition()
-{
- /* Update position */
- vlc_tick_t i_length = var_GetInteger( p_input , "length" );
- vlc_tick_t i_time = var_GetInteger( p_input , "time");
- float f_pos = var_GetFloat( p_input , "position" );
- emit positionUpdated( f_pos, i_time, SEC_FROM_VLC_TICK(i_length) );
-}
-
-void InputManager::UpdateNavigation()
-{
- /* Update navigation status */
- size_t ntitles, nchapters;
-
- var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &ntitles );
-
- if( ntitles > 0 )
- {
- bool b_menu = false;
- if( ntitles > 1 )
- {
- input_title_t **pp_title = NULL;
- int i_title = 0;
- if( input_Control( p_input, INPUT_GET_FULL_TITLE_INFO, &pp_title, &i_title ) == VLC_SUCCESS )
- {
- for( int i = 0; i < i_title; i++ )
- {
- if( pp_title[i]->i_flags & INPUT_TITLE_MENU )
- b_menu = true;
- vlc_input_title_Delete(pp_title[i]);
- }
- free( pp_title );
- }
- }
-
- /* p_input != NULL since val.i_int != 0 */
- var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &nchapters );
-
- emit titleChanged( b_menu );
- emit chapterChanged( nchapters > 1 );
- }
- else
- emit chapterChanged( false );
-
- if( hasInput() )
- emit inputCanSeek( var_GetBool( p_input, "can-seek" ) );
- else
- emit inputCanSeek( false );
-}
-
-void InputManager::UpdateCapabilities()
-{
- emit inputCanSeek( var_GetBool( p_input, "can-seek" ) );
-}
-
-void InputManager::UpdateStatus()
-{
- /* Update playing status */
- int state = var_GetInteger( p_input, "state" );
- if( i_old_playing_status != state )
- {
- i_old_playing_status = state;
- emit playingStatusChanged( state );
- }
-}
-
-void InputManager::UpdateRate()
-{
- /* Update Rate */
- float f_new_rate = var_GetFloat( p_input, "rate" );
- if( f_new_rate != f_rate )
- {
- f_rate = f_new_rate;
- /* Update rate */
- emit rateChanged( f_rate );
- }
-}
-
-void InputManager::UpdateName()
-{
- /* Update text, name and nowplaying */
- QString name;
-
- /* Try to get the nowplaying */
- char *format = var_InheritString( p_intf, "input-title-format" );
- char *formatted = NULL;
- if (format != NULL)
- {
- formatted = vlc_strfinput( p_input, NULL, format );
- free( format );
- if( formatted != NULL )
- {
- name = qfu(formatted);
- free( formatted );
- }
- }
-
- /* If we have Nothing */
- if( name.simplified().isEmpty() )
- {
- char *uri = input_item_GetURI( input_GetItem( p_input ) );
- char *file = uri ? strrchr( uri, '/' ) : NULL;
- if( file != NULL )
- {
- vlc_uri_decode( ++file );
- name = qfu(file);
- }
- else
- name = qfu(uri);
- free( uri );
- }
-
- name = name.trimmed();
-
- if( oldName != name )
- {
- emit nameChanged( name );
- oldName = name;
- }
-}
-
-int InputManager::playingStatus() const
-{
- return i_old_playing_status;
-}
-
-bool InputManager::hasAudio()
-{
- if( hasInput() )
- {
- size_t val;
- var_Change( p_input, "audio-es", VLC_VAR_CHOICESCOUNT, &val );
- return val > 0;
- }
- return false;
-}
-
-bool InputManager::hasVisualisation()
-{
- if( !p_input )
- return false;
-
- audio_output_t *aout = input_GetAout( p_input );
- if( !aout )
- return false;
-
- char *visual = var_InheritString( aout, "visual" );
- vlc_object_release( aout );
-
- if( !visual )
- return false;
-
- free( visual );
- return true;
-}
-
-void InputManager::UpdateTeletext()
-{
- const bool b_enabled = var_CountChoices( p_input, "teletext-es" ) > 0;
- const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );
-
- /* Teletext is possible. Show the buttons */
- emit teletextPossible( b_enabled );
-
- /* If Teletext is selected */
- if( b_enabled && i_teletext_es >= 0 )
- {
- /* Then, find the current page */
- int i_page = 100;
- bool b_transparent = false;
-
- if( p_input_vbi )
- {
- var_DelCallback( p_input_vbi, "vbi-page", VbiEvent, this );
- vlc_object_release( p_input_vbi );
- }
-
- if( input_GetEsObjects( p_input, i_teletext_es, &p_input_vbi, NULL, NULL ) )
- p_input_vbi = NULL;
-
- if( p_input_vbi )
- {
- /* This callback is not remove explicitly, but interfaces
- * are guaranted to outlive input */
- var_AddCallback( p_input_vbi, "vbi-page", VbiEvent, this );
-
- i_page = var_GetInteger( p_input_vbi, "vbi-page" );
- b_transparent = !var_GetBool( p_input_vbi, "vbi-opaque" );
- }
- emit newTelexPageSet( i_page );
- emit teletextTransparencyActivated( b_transparent );
-
- }
- emit teletextActivated( b_enabled && i_teletext_es >= 0 );
-}
-
-void InputManager::UpdateEPG()
-{
- emit epgChanged();
-}
-
-void InputManager::UpdateVout()
-{
- size_t i_vout;
- vout_thread_t **pp_vout;
-
- if( !p_input )
- return;
-
- /* Get current vout lists from input */
- if( input_Control( p_input, INPUT_GET_VOUTS, &pp_vout, &i_vout ) )
- {
- i_vout = 0;
- pp_vout = NULL;
- }
-
- /* */
- emit voutListChanged( pp_vout, i_vout );
-
- /* */
- bool b_old_video = b_video;
- b_video = i_vout > 0;
- if( !!b_old_video != !!b_video )
- emit voutChanged( b_video );
-
- /* Release the vout list */
- for( size_t i = 0; i < i_vout; i++ )
- vlc_object_release( (vlc_object_t*)pp_vout[i] );
- free( pp_vout );
-}
-
-void InputManager::UpdateCaching()
-{
- float f_newCache = var_GetFloat ( p_input, "cache" );
- if( f_newCache != f_cache )
- {
- f_cache = f_newCache;
- /* Update cache */
- emit cachingChanged( f_cache );
- }
-}
-
-void InputManager::requestArtUpdate( input_item_t *p_item, bool b_forced )
-{
- bool b_current_item = false;
- if ( !p_item && hasInput() )
- { /* default to current item */
- p_item = input_GetItem( p_input );
- b_current_item = true;
- }
-
- if ( p_item )
- {
- /* check if it has already been enqueued */
- if ( p_item->p_meta && !b_forced )
- {
- int status = vlc_meta_GetStatus( p_item->p_meta );
- if ( status & ( ITEM_ART_NOTFOUND|ITEM_ART_FETCHED ) )
- return;
- }
- libvlc_ArtRequest( p_intf->obj.libvlc, p_item,
- (b_forced) ? META_REQUEST_OPTION_SCOPE_ANY
- : META_REQUEST_OPTION_NONE,
- NULL, NULL );
- /* No input will signal the cover art to update,
- * let's do it ourself */
- if ( b_current_item )
- UpdateArt();
- else
- emit artChanged( p_item );
- }
-}
-
-const QString InputManager::decodeArtURL( input_item_t *p_item )
-{
- assert( p_item );
-
- char *psz_art = input_item_GetArtURL( p_item );
- if( psz_art )
- {
- char *psz = vlc_uri2path( psz_art );
- free( psz_art );
- psz_art = psz;
- }
-
-#if 0
- /* Taglib seems to define a attachment://, It won't work yet */
- url = url.replace( "attachment://", "" );
-#endif
-
- QString path = qfu( psz_art ? psz_art : "" );
- free( psz_art );
- return path;
-}
-
-void InputManager::UpdateArt()
-{
- QString url = decodeArtURL( input_GetItem( p_input ) );
-
- /* the art hasn't changed, no need to update */
- if(artUrl == url)
- return;
-
- /* Update Art meta */
- artUrl = url;
- emit artChanged( artUrl );
-}
-
-void InputManager::setArt( input_item_t *p_item, QString fileUrl )
-{
- if( hasInput() )
- {
- char *psz_cachedir = config_GetUserDir( VLC_CACHE_DIR );
- QString old_url = p_mim->getIM()->decodeArtURL( p_item );
- old_url = QDir( old_url ).canonicalPath();
-
- if( old_url.startsWith( QString::fromUtf8( psz_cachedir ) ) )
- QFile( old_url ).remove(); /* Purge cached artwork */
-
- free( psz_cachedir );
-
- input_item_SetArtURL( p_item , fileUrl.toUtf8().constData() );
- UpdateArt();
- }
-}
-
-inline void InputManager::UpdateStats()
-{
- emit statisticsUpdated( input_GetItem( p_input ) );
-}
-
-inline void InputManager::UpdateMeta( input_item_t *p_item_ )
-{
- emit metaChanged( p_item_ );
- emit artChanged( p_item_ );
-}
-
-inline void InputManager::UpdateMeta()
-{
- emit currentMetaChanged( input_GetItem( p_input ) );
-}
-
-inline void InputManager::UpdateInfo()
-{
- assert( p_input );
- emit infoChanged( input_GetItem( p_input ) );
-}
-
-void InputManager::UpdateRecord()
-{
- emit recordingStateChanged( var_GetBool( p_input, "record" ) );
-}
-
-void InputManager::UpdateProgramEvent()
-{
- bool b_scrambled = var_GetBool( p_input, "program-scrambled" );
- emit encryptionChanged( b_scrambled );
-}
-
-/* User update of the slider */
-void InputManager::sliderUpdate( float new_pos )
-{
- if( hasInput() )
- var_SetFloat( p_input, "position", new_pos );
- emit seekRequested( new_pos );
-}
-
-void InputManager::sectionPrev()
-{
- if( hasInput() )
- {
- int i_type = var_Type( p_input, "next-chapter" );
- var_TriggerCallback( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
- "prev-chapter":"prev-title" );
- }
-}
-
-void InputManager::sectionNext()
-{
- if( hasInput() )
- {
- int i_type = var_Type( p_input, "next-chapter" );
- var_TriggerCallback( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
- "next-chapter":"next-title" );
- }
-}
-
-void InputManager::sectionMenu()
-{
- if( hasInput() )
- {
- var_TriggerCallback( p_input, "menu-title" );
- }
-}
-
-/*
- * Teletext Functions
- */
-
-void InputManager::changeProgram( int program )
-{
- if( hasInput() )
- {
- var_SetInteger( p_input, "program", program );
- }
-}
-
-/* Set a new Teletext Page */
-void InputManager::telexSetPage( int page )
-{
- if( hasInput() && p_input_vbi )
- {
- const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );
-
- if( i_teletext_es >= 0 )
- {
- var_SetInteger( p_input_vbi, "vbi-page", page );
- emit newTelexPageSet( page );
- }
- }
-}
-
-/* Set the transparency on teletext */
-void InputManager::telexSetTransparency( bool b_transparentTelextext )
-{
- if( hasInput() && p_input_vbi )
- {
- var_SetBool( p_input_vbi, "vbi-opaque", !b_transparentTelextext );
- emit teletextTransparencyActivated( b_transparentTelextext );
- }
-}
-
-void InputManager::activateTeletext( bool b_enable )
-{
- vlc_value_t *list;
- char **text;
- size_t count;
-
- if( hasInput() && !var_Change( p_input, "teletext-es", VLC_VAR_GETCHOICES,
- &count, &list, &text ) )
- {
- if( count > 0 )
- { /* Prefer the page 100 if it is present */
- int id = list[0].i_int;
- for( size_t i = 0; i < count; i++ )
- { /* The description is the page number as a string */
- if( text[i] != NULL && !strcmp( text[i], "100" ) )
- id = list[i].i_int;
- free(text[i]);
- }
- var_SetInteger( p_input, "spu-es", b_enable ? id : -1 );
- }
- free(text);
- free(list);
- }
-}
-
-void InputManager::reverse()
-{
- if( hasInput() )
- {
- float f_rate_ = var_GetFloat( p_input, "rate" );
- var_SetFloat( p_input, "rate", -f_rate_ );
- }
-}
-
-void InputManager::slower()
-{
- var_TriggerCallback( THEPL, "rate-slower" );
-}
-
-void InputManager::faster()
-{
- var_TriggerCallback( THEPL, "rate-faster" );
-}
-
-void InputManager::littlefaster()
-{
- var_SetInteger( p_intf->obj.libvlc, "key-action", ACTIONID_RATE_FASTER_FINE );
-}
-
-void InputManager::littleslower()
-{
- var_SetInteger( p_intf->obj.libvlc, "key-action", ACTIONID_RATE_SLOWER_FINE );
-}
-
-void InputManager::normalRate()
-{
- var_SetFloat( THEPL, "rate", 1. );
-}
-
-void InputManager::setRate( int new_rate )
-{
- var_SetFloat( THEPL, "rate",
- (float)INPUT_RATE_DEFAULT / (float)new_rate );
-}
-
-void InputManager::jumpFwd()
-{
- int i_interval = var_InheritInteger( p_input, "short-jump-size" );
- if( i_interval > 0 && hasInput() )
- {
- vlc_tick_t val = vlc_tick_from_sec( i_interval );
- var_SetInteger( p_input, "time-offset", val );
- }
-}
-
-void InputManager::jumpBwd()
-{
- int i_interval = var_InheritInteger( p_input, "short-jump-size" );
- if( i_interval > 0 && hasInput() )
- {
- vlc_tick_t val = vlc_tick_from_sec( -i_interval );
- var_SetInteger( p_input, "time-offset", val );
- }
-}
-
-void InputManager::setAtoB()
-{
- if( timeA != VLC_TICK_INVALID )
- {
- timeA = var_GetInteger( p_mim->getInput(), "time" );
- }
- else if( timeB != VLC_TICK_INVALID )
- {
- timeB = var_GetInteger( p_mim->getInput(), "time" );
- var_SetInteger( p_mim->getInput(), "time" , timeA );
- CONNECT( this, positionUpdated( float, vlc_tick_t, int ),
- this, AtoBLoop( float, vlc_tick_t, int ) );
- }
- else
- {
- timeA = VLC_TICK_INVALID;
- timeB = VLC_TICK_INVALID;
- disconnect( this, SIGNAL( positionUpdated( float, vlc_tick_t, int ) ),
- this, SLOT( AtoBLoop( float, vlc_tick_t, int ) ) );
- }
- emit AtoBchanged( (timeA != VLC_TICK_INVALID ), (timeB != VLC_TICK_INVALID ) );
-}
-
-/* Function called regularly when in an AtoB loop */
-void InputManager::AtoBLoop( float, vlc_tick_t i_time, int )
-{
- if( timeB != VLC_TICK_INVALID && i_time >= timeB )
- var_SetInteger( p_mim->getInput(), "time" , timeA );
-}
-
-/**********************************************************************
- * MainInputManager implementation. Wrap an input manager and
- * take care of updating the main playlist input.
- * Used in the main playlist Dialog
- **********************************************************************/
-
-MainInputManager::MainInputManager( intf_thread_t *_p_intf )
- : QObject(NULL), p_input( NULL), p_intf( _p_intf ),
- random( VLC_OBJECT(THEPL), "random" ),
- repeat( VLC_OBJECT(THEPL), "repeat" ), loop( VLC_OBJECT(THEPL), "loop" ),
- volume( VLC_OBJECT(THEPL), "volume" ), mute( VLC_OBJECT(THEPL), "mute" )
-{
- im = new InputManager( this, p_intf );
-
- /* Audio Menu */
- menusAudioMapper = new QSignalMapper();
- CONNECT( menusAudioMapper, mapped(QString), this, menusUpdateAudio( QString ) );
-
- /* Core Callbacks */
- var_AddCallback( THEPL, "item-change", MainInputManager::ItemChanged, im );
- var_AddCallback( THEPL, "input-current", MainInputManager::PLItemChanged, this );
- var_AddCallback( THEPL, "leaf-to-parent", MainInputManager::LeafToParent, this );
- var_AddCallback( THEPL, "playlist-item-append", MainInputManager::PLItemAppended, this );
- var_AddCallback( THEPL, "playlist-item-deleted", MainInputManager::PLItemRemoved, this );
-
- /* Core Callbacks to widget */
- random.addCallback( this, SLOT(notifyRandom(bool)) );
- repeat.addCallback( this, SLOT(notifyRepeatLoop(bool)) );
- loop.addCallback( this, SLOT(notifyRepeatLoop(bool)) );
- volume.addCallback( this, SLOT(notifyVolume(float)) );
- mute.addCallback( this, SLOT(notifyMute(bool)) );
-
- /* Warn our embedded IM about input changes */
- DCONNECT( this, inputChanged( bool ),
- im, inputChangedHandler() );
-}
-
-MainInputManager::~MainInputManager()
-{
- if( p_input )
- {
- vlc_object_release( p_input );
- p_input = NULL;
- emit inputChanged( false );
- }
-
- var_DelCallback( THEPL, "input-current", MainInputManager::PLItemChanged, this );
- var_DelCallback( THEPL, "item-change", MainInputManager::ItemChanged, im );
- var_DelCallback( THEPL, "leaf-to-parent", MainInputManager::LeafToParent, this );
-
- var_DelCallback( THEPL, "playlist-item-append", MainInputManager::PLItemAppended, this );
- var_DelCallback( THEPL, "playlist-item-deleted", MainInputManager::PLItemRemoved, this );
-
- delete menusAudioMapper;
-}
-
-vout_thread_t* MainInputManager::getVout()
-{
- return p_input ? input_GetVout( p_input ) : NULL;
-}
-
-QVector<vout_thread_t*> MainInputManager::getVouts() const
-{
- vout_thread_t **pp_vout;
- size_t i_vout;
-
- if( p_input == NULL
- || input_Control( p_input, INPUT_GET_VOUTS, &pp_vout, &i_vout ) != VLC_SUCCESS
- || i_vout == 0 )
- return QVector<vout_thread_t*>();
-
- QVector<vout_thread_t*> vector = QVector<vout_thread_t*>();
- vector.reserve( i_vout );
- for( size_t i = 0; i < i_vout; i++ )
- {
- assert( pp_vout[i] );
- vector.append( pp_vout[i] );
- }
- free( pp_vout );
-
- return vector;
-}
-
-audio_output_t * MainInputManager::getAout()
-{
- return playlist_GetAout( THEPL );
-}
-
-void MainInputManager::customEvent( QEvent *event )
-{
- int type = event->type();
-
- PLEvent *plEv;
-
- // msg_Dbg( p_intf, "New MainIM Event of type: %i", type );
- switch( type )
- {
- case PLEvent::PLItemAppended:
- plEv = static_cast<PLEvent*>( event );
- emit playlistItemAppended( plEv->getItemId(), plEv->getParentId() );
- return;
- case PLEvent::PLItemRemoved:
- plEv = static_cast<PLEvent*>( event );
- emit playlistItemRemoved( plEv->getItemId() );
- return;
- case PLEvent::PLEmpty:
- plEv = static_cast<PLEvent*>( event );
- emit playlistNotEmpty( plEv->getItemId() >= 0 );
- return;
- case PLEvent::LeafToParent:
- plEv = static_cast<PLEvent*>( event );
- emit leafBecameParent( plEv->getItemId() );
- return;
- default:
- if( type != IMEvent::ItemChanged ) return;
- }
- probeCurrentInput();
-}
-
-void MainInputManager::probeCurrentInput()
-{
- if( p_input != NULL )
- vlc_object_release( p_input );
- p_input = playlist_CurrentInput( THEPL );
- emit inputChanged( p_input != NULL );
-}
-
-/* Playlist Control functions */
-void MainInputManager::stop()
-{
- playlist_Stop( THEPL );
-}
-
-void MainInputManager::next()
-{
- playlist_Next( THEPL );
-}
-
-void MainInputManager::prev()
-{
- playlist_Prev( THEPL );
-}
-
-void MainInputManager::prevOrReset()
-{
- if( !p_input || var_GetInteger( p_input, "time") < VLC_TICK_FROM_MS(10) )
- playlist_Prev( THEPL );
- else
- getIM()->sliderUpdate( 0.0 );
-}
-
-void MainInputManager::togglePlayPause()
-{
- playlist_TogglePause( THEPL );
-}
-
-void MainInputManager::play()
-{
- playlist_Play( THEPL );
-}
-
-void MainInputManager::pause()
-{
- playlist_Pause( THEPL );
-}
-
-void MainInputManager::toggleRandom()
-{
- config_PutInt( "random", var_ToggleBool( THEPL, "random" ) );
-}
-
-void MainInputManager::notifyRandom(bool value)
-{
- emit randomChanged(value);
-}
-
-void MainInputManager::notifyRepeatLoop(bool)
-{
- int i_state = NORMAL;
-
- if( var_GetBool( THEPL, "loop" ) ) i_state = REPEAT_ALL;
- if( var_GetBool( THEPL, "repeat" ) ) i_state = REPEAT_ONE;
-
- emit repeatLoopChanged( i_state );
-}
-
-void MainInputManager::loopRepeatLoopStatus()
-{
- /* Toggle Normal -> Loop -> Repeat -> Normal ... */
- bool loop = var_GetBool( THEPL, "loop" );
- bool repeat = var_GetBool( THEPL, "repeat" );
-
- if( repeat )
- {
- loop = false;
- repeat = false;
- }
- else if( loop )
- {
- loop = false;
- repeat = true;
- }
- else
- {
- loop = true;
- //repeat = false;
- }
-
- var_SetBool( THEPL, "loop", loop );
- var_SetBool( THEPL, "repeat", repeat );
- config_PutInt( "loop", loop );
- config_PutInt( "repeat", repeat );
-}
-
-void MainInputManager::activatePlayQuit( bool b_exit )
-{
- var_SetBool( THEPL, "play-and-exit", b_exit );
- config_PutInt( "play-and-exit", b_exit );
-}
-
-bool MainInputManager::getPlayExitState()
-{
- return var_InheritBool( THEPL, "play-and-exit" );
-}
-
-bool MainInputManager::hasEmptyPlaylist()
-{
- playlist_Lock( THEPL );
- bool b_empty = playlist_IsEmpty( THEPL );
- playlist_Unlock( THEPL );
- return b_empty;
-}
-
-/****************************
- * Static callbacks for MIM *
- ****************************/
-int MainInputManager::PLItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void *param )
-{
- MainInputManager *mim = (MainInputManager*)param;
-
- IMEvent *event = new IMEvent( IMEvent::ItemChanged );
- QApplication::postEvent( mim, event );
- return VLC_SUCCESS;
-}
-
-int MainInputManager::LeafToParent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t val, void *param )
-{
- MainInputManager *mim = (MainInputManager*)param;
-
- PLEvent *event = new PLEvent( PLEvent::LeafToParent, val.i_int );
-
- QApplication::postEvent( mim, event );
- return VLC_SUCCESS;
-}
-
-void MainInputManager::notifyVolume( float volume )
-{
- emit volumeChanged( volume );
-}
-
-void MainInputManager::notifyMute( bool mute )
-{
- emit soundMuteChanged(mute);
-}
-
-
-void MainInputManager::menusUpdateAudio( const QString& data )
-{
- audio_output_t *aout = getAout();
- if( aout != NULL )
- {
- aout_DeviceSet( aout, qtu(data) );
- vlc_object_release( aout );
- }
-}
-
-int MainInputManager::PLItemAppended( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t cur,
- void *data )
-{
- MainInputManager *mim = static_cast<MainInputManager*>(data);
- playlist_item_t *item = static_cast<playlist_item_t *>( cur.p_address );
-
- PLEvent *event = new PLEvent( PLEvent::PLItemAppended, item->i_id,
- (item->p_parent != NULL) ? item->p_parent->i_id : -1 );
- QApplication::postEvent( mim, event );
-
- event = new PLEvent( PLEvent::PLEmpty, item->i_id, 0 );
- QApplication::postEvent( mim, event );
- return VLC_SUCCESS;
-}
-
-int MainInputManager::PLItemRemoved( vlc_object_t *obj, const char *,
- vlc_value_t, vlc_value_t cur, void *data )
-{
- playlist_t *pl = (playlist_t *) obj;
- MainInputManager *mim = static_cast<MainInputManager*>(data);
- playlist_item_t *item = static_cast<playlist_item_t *>( cur.p_address );
-
- PLEvent *event = new PLEvent( PLEvent::PLItemRemoved, item->i_id, 0 );
- QApplication::postEvent( mim, event );
- // can't use playlist_IsEmpty( ) as it isn't true yet
- if ( pl->items.i_size == 1 ) // lock is held
- {
- event = new PLEvent( PLEvent::PLEmpty, -1, 0 );
- QApplication::postEvent( mim, event );
- }
- return VLC_SUCCESS;
-}
-
-void MainInputManager::changeFullscreen( bool new_val )
-{
- if ( var_GetBool( THEPL, "fullscreen" ) != new_val)
- var_SetBool( THEPL, "fullscreen", new_val );
-}
diff --git a/modules/gui/qt/input_manager.hpp b/modules/gui/qt/input_manager.hpp
deleted file mode 100644
index 119f5e54c3..0000000000
--- a/modules/gui/qt/input_manager.hpp
+++ /dev/null
@@ -1,344 +0,0 @@
-/*****************************************************************************
- * input_manager.hpp : Manage an input and interact with its GUI elements
- ****************************************************************************
- * Copyright (C) 2006-2008 the VideoLAN team
- *
- * Authors: Clément Stenac <zorglub at videolan.org>
- * Jean-Baptiste <jb at videolan.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef QVLC_INPUT_MANAGER_H_
-#define QVLC_INPUT_MANAGER_H_
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_input.h>
-
-#include "qt.hpp"
-#include "util/singleton.hpp"
-#include "adapters/variables.hpp"
-
-#include <QObject>
-#include <QEvent>
-class QSignalMapper;
-
-enum { NORMAL, /* loop: 0, repeat: 0 */
- REPEAT_ONE,/* loop: 0, repeat: 1 */
- REPEAT_ALL,/* loop: 1, repeat: 0 */
-};
-
-class IMEvent : public QEvent
-{
-public:
- enum event_types {
- PositionUpdate = QEvent::User + IMEventTypeOffset + 1,
- ItemChanged,
- ItemStateChanged,
- ItemTitleChanged,
- ItemRateChanged,
- ItemEsChanged,
- ItemTeletextChanged,
- InterfaceVoutUpdate,
- StatisticsUpdate,
- MetaChanged, /* 10 */
- InfoChanged,
- SynchroChanged,
- CachingEvent,
- BookmarksChanged,
- RecordingEvent,
- ProgramChanged,
- RandomChanged,
- LoopOrRepeatChanged,
- EPGEvent,
- CapabilitiesChanged, /* 20 */
- /* SignalChanged, */
-
- FullscreenControlToggle = QEvent::User + IMEventTypeOffset + 50,
- FullscreenControlShow,
- FullscreenControlHide,
- FullscreenControlPlanHide,
- };
-
- IMEvent( event_types type, input_item_t *p_input = NULL )
- : QEvent( (QEvent::Type)(type) )
- {
- if( (p_item = p_input) != NULL )
- input_item_Hold( p_item );
- }
-
- virtual ~IMEvent()
- {
- if( p_item )
- input_item_Release( p_item );
- }
-
- input_item_t *item() const { return p_item; };
-
-private:
- input_item_t *p_item;
-};
-
-class PLEvent : public QEvent
-{
-public:
- enum PLEventTypes
- {
- PLItemAppended = QEvent::User + PLEventTypeOffset + 1,
- PLItemRemoved,
- LeafToParent,
- PLEmpty
- };
-
- PLEvent( PLEventTypes t, int i, int p = 0 )
- : QEvent( (QEvent::Type)(t) ), i_item(i), i_parent(p) {}
- int getItemId() const { return i_item; };
- int getParentId() const { return i_parent; };
-
-private:
- /* Needed for "playlist-item*" and "leaf-to-parent" callbacks
- * !! Can be a input_item_t->i_id or a playlist_item_t->i_id */
- int i_item;
- // Needed for "playlist-item-append" callback, notably
- int i_parent;
-};
-
-class MainInputManager;
-
-class InputManager : public QObject
-{
- Q_OBJECT
- friend class MainInputManager;
-
-public:
- InputManager( MainInputManager *, intf_thread_t * );
- virtual ~InputManager();
-
- void delInput();
- bool hasInput() const { return p_input != NULL; }
-
- int playingStatus() const;
- bool hasAudio();
- bool hasVideo() { return hasInput() && b_video; }
- bool hasVisualisation();
- void requestArtUpdate( input_item_t *p_item, bool b_forced );
- void setArt( input_item_t *p_item, QString fileUrl );
-
- QString getName() { return oldName; }
- static const QString decodeArtURL( input_item_t *p_item );
-
-private:
- intf_thread_t *p_intf;
- MainInputManager* p_mim;
- input_thread_t *p_input;
- vlc_object_t *p_input_vbi;
- input_item_t *p_item;
- int i_old_playing_status;
- QString oldName;
- QString lastURI;
- QString artUrl;
- float f_rate;
- float f_cache;
- bool b_video;
- vlc_tick_t timeA, timeB;
-
- void customEvent( QEvent * );
-
- void addCallbacks();
- void delCallbacks();
-
- void UpdateRate();
- void UpdateName();
- void UpdateStatus();
- void UpdateNavigation();
- void UpdateCapabilities();
- void UpdatePosition();
- void UpdateTeletext();
- void UpdateArt();
- void UpdateInfo();
- void UpdateMeta();
- void UpdateMeta(input_item_t *);
- void UpdateVout();
- void UpdateStats();
- void UpdateCaching();
- void UpdateRecord();
- void UpdateProgramEvent();
- void UpdateEPG();
-
- void setInput( input_thread_t * );
-
-public slots:
- void inputChangedHandler(); ///< Our controlled input changed
- void sliderUpdate( float ); ///< User dragged the slider. We get new pos
- /* SpeedRate Rate Management */
- void reverse();
- void slower();
- void faster();
- void littlefaster();
- void littleslower();
- void normalRate();
- void setRate( int );
- /* Jumping */
- void jumpFwd();
- void jumpBwd();
- /* Menus */
- void sectionNext();
- void sectionPrev();
- void sectionMenu();
- /* Program */
- void changeProgram( int );
- /* Teletext */
- void telexSetPage( int ); ///< Goto teletext page
- void telexSetTransparency( bool ); ///< Transparency on teletext background
- void activateTeletext( bool ); ///< Toggle buttons after click
- /* A to B Loop */
- void setAtoB();
-
-private slots:
- void AtoBLoop( float, vlc_tick_t, int );
-
-signals:
- /// Send new position, new time and new length
- void positionUpdated( float , vlc_tick_t, int );
- void remainingTimeChanged( bool );
- void seekRequested( float pos );
- void rateChanged( float );
- void nameChanged( const QString& );
- /// Used to signal whether we should show navigation buttons
- void titleChanged( bool );
- void chapterChanged( bool );
- void inputCanSeek( bool );
- /// You can resume playback
- void resumePlayback( vlc_tick_t );
- /// Statistics are updated
- void statisticsUpdated( input_item_t* );
- void infoChanged( input_item_t* );
- void currentMetaChanged( input_item_t* );
- void metaChanged( input_item_t *);
- void artChanged( QString ); /* current item art ( same as item == NULL ) */
- void artChanged( input_item_t * );
- /// Play/pause status
- void playingStatusChanged( int );
- void recordingStateChanged( bool );
- /// Teletext
- void teletextPossible( bool );
- void teletextActivated( bool );
- void teletextTransparencyActivated( bool );
- void newTelexPageSet( int );
- /// Advanced buttons
- void AtoBchanged( bool, bool );
- /// Vout
- void voutChanged( bool );
- void voutListChanged( vout_thread_t **pp_vout, int i_vout );
- /// Other
- void synchroChanged();
- void bookmarksChanged();
- void cachingChanged( float );
- /// Program Event changes
- void encryptionChanged( bool );
- void epgChanged();
-};
-
-class MainInputManager : public QObject, public Singleton<MainInputManager>
-{
- Q_OBJECT
- friend class Singleton<MainInputManager>;
- friend class VLCMenuBar;
-
-public:
- input_thread_t *getInput() { return p_input; }
- InputManager *getIM() { return im; }
- inline input_item_t *currentInputItem()
- {
- return ( p_input ? input_GetItem( p_input ) : NULL );
- }
-
- vout_thread_t* getVout();
- QVector<vout_thread_t*> getVouts() const;
- audio_output_t *getAout();
-
- bool getPlayExitState();
- bool hasEmptyPlaylist();
-
- void requestVoutUpdate() { return im->UpdateVout(); }
- // Probe for initial input. Doing this from the constructor would cause
- // the getInstance to call itself recursively from the inputChangedHandler
- void probeCurrentInput();
-
-protected:
- QSignalMapper *menusAudioMapper;
-
-private:
- MainInputManager( intf_thread_t * );
- virtual ~MainInputManager();
-
- void customEvent( QEvent * );
-
- InputManager *im;
- input_thread_t *p_input;
- intf_thread_t *p_intf;
- QVLCBool random, repeat, loop;
- QVLCFloat volume;
- QVLCBool mute;
-
-private:
- static int ItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
- static int LeafToParent( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
- static int PLItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
- static int PLItemAppended( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
- static int PLItemRemoved( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-
-public slots:
- void togglePlayPause();
- void play();
- void pause();
- void toggleRandom();
- void stop();
- void next();
- void prev();
- void prevOrReset();
- void activatePlayQuit( bool );
-
- void loopRepeatLoopStatus();
- void changeFullscreen( bool );
-
-private slots:
- void notifyRandom( bool );
- void notifyRepeatLoop( bool );
- void notifyVolume( float );
- void notifyMute( bool );
- void menusUpdateAudio( const QString& );
-
-signals:
- void inputChanged( bool );
- void volumeChanged( float );
- void soundMuteChanged( bool );
- void playlistItemAppended( int itemId, int parentId );
- void playlistItemRemoved( int itemId );
- void playlistNotEmpty( bool );
- void randomChanged( bool );
- void repeatLoopChanged( int );
- void leafBecameParent( int );
-};
-
-#endif
--
2.19.1
More information about the vlc-devel
mailing list