]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/input_manager.cpp
Missing item to translate.
[vlc] / modules / gui / qt4 / input_manager.cpp
index a5140a96580b399f4a236659640aee39e6ca599b..880f8ce8057dbf79d0cd03f714823f54c1094ad9 100644 (file)
 
 static int ChangeSPU( vlc_object_t *p_this, const char *var, vlc_value_t o,
                       vlc_value_t n, void *param );
+
+static int ChangeTeletext( vlc_object_t *p_this, const char *var, vlc_value_t o,
+                           vlc_value_t n, void *param );
+
 static int ItemChanged( vlc_object_t *, const char *,
                         vlc_value_t, vlc_value_t, void * );
 static int PLItemChanged( vlc_object_t *, const char *,
@@ -63,6 +67,7 @@ InputManager::InputManager( QObject *parent, intf_thread_t *_p_intf) :
     p_input      = NULL;
     i_rate       = 0;
     i_input_id   = 0;
+    b_transparentTelextext = false;
 }
 
 InputManager::~InputManager()
@@ -77,14 +82,15 @@ void InputManager::setInput( input_thread_t *_p_input )
 {
     delInput();
     p_input = _p_input;
-    if( p_input && !( p_input->b_dead || p_input->b_die ) )
+    if( p_input && !( p_input->b_dead || !vlc_object_alive (p_input) ) )
     {
         vlc_object_yield( p_input );
         emit statusChanged( PLAYING_S );
         UpdateMeta();
-        UpdateNavigation();
         UpdateArt();
         UpdateSPU();
+        UpdateTeletext();
+        UpdateNavigation();
         addCallbacks();
         i_input_id = input_GetItem( p_input )->i_id;
     }
@@ -93,7 +99,6 @@ void InputManager::setInput( input_thread_t *_p_input )
         p_input = NULL;
         i_input_id = 0;
         emit rateChanged( INPUT_RATE_DEFAULT );
-        emit inputUnset();
     }
 }
 
@@ -117,6 +122,7 @@ void InputManager::delInput()
         vlc_object_release( p_input );
         p_input = NULL;
         UpdateSPU();
+        UpdateTeletext();
     }
 }
 
@@ -135,6 +141,8 @@ void InputManager::addCallbacks()
     var_AddCallback( p_input, "state", ItemStateChanged, this );
     /* src/input/es-out.c:552 */
     var_AddCallback( p_input, "spu-es", ChangeSPU, this );
+    /* src/input/es-out.c: */
+    var_AddCallback( p_input, "teletext-es", ChangeTeletext, this );
     /* src/input/input.c:1765 */
     var_AddCallback( p_input, "rate-change", ItemRateChanged, this );
     /* src/input/input.c:2003 */
@@ -147,6 +155,7 @@ void InputManager::addCallbacks()
 void InputManager::delCallbacks()
 {
     var_DelCallback( p_input, "spu-es", ChangeSPU, this );
+    var_DelCallback( p_input, "teletext-es", ChangeTeletext, this );
     var_DelCallback( p_input, "state", ItemStateChanged, this );
     var_DelCallback( p_input, "rate-change", ItemRateChanged, this );
     var_DelCallback( p_input, "title", ItemTitleChanged, this );
@@ -164,6 +173,7 @@ void InputManager::customEvent( QEvent *event )
          type != ItemRateChanged_Type &&
          type != ItemTitleChanged_Type &&
          type != ItemSpuChanged_Type &&
+         type != ItemTeletextChanged_Type &&
          type != ItemStateChanged_Type )
         return;
 
@@ -172,6 +182,7 @@ void InputManager::customEvent( QEvent *event )
     if( ( type != PositionUpdate_Type  &&
           type != ItemRateChanged_Type &&
           type != ItemSpuChanged_Type &&
+          type != ItemTeletextChanged_Type &&
           type != ItemStateChanged_Type
         )
         && ( i_input_id != ple->i_id ) )
@@ -188,22 +199,27 @@ void InputManager::customEvent( QEvent *event )
         break;
     case ItemChanged_Type:
         UpdateMeta();
-        UpdateNavigation();
         UpdateStatus();
         UpdateArt();
         break;
-    case ItemRateChanged_Type:
-        UpdateRate();
+    case ItemStateChanged_Type:
+        UpdateStatus();
+        UpdateNavigation();
+        UpdateMeta();
         break;
     case ItemTitleChanged_Type:
         UpdateNavigation();
         UpdateMeta();
         break;
-    case ItemStateChanged_Type:
-        UpdateStatus();
+    case ItemRateChanged_Type:
+        UpdateRate();
+        break;
     case ItemSpuChanged_Type:
         UpdateSPU();
         break;
+    case ItemTeletextChanged_Type:
+        UpdateTeletext();
+        break;
     }
 }
 
@@ -324,19 +340,20 @@ bool InputManager::hasVideo()
 }
 
 void InputManager::UpdateSPU()
+{
+    UpdateTeletext();
+}
+
+void InputManager::UpdateTeletext()
 {
     if( hasInput() )
-    {
-        vlc_value_t val;
-        var_Change( p_input, "spu-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
-        telexToggle( val.i_int > 0 );
-    }
+        telexToggle( var_GetInteger( p_input, "teletext-es" ) >= 0 );
     else
-    {
         telexToggle( false );
-    }
 }
 
+
+
 void InputManager::UpdateArt()
 {
     /* Update Art meta */
@@ -406,41 +423,71 @@ void InputManager::telexGotoPage( int page )
 {
     if( hasInput() )
     {
-        vlc_object_t *p_vbi;
-        p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
-                    "zvbi", FIND_ANYWHERE );
-        if( p_vbi )
+        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );
+        const int i_spu_es = var_GetInteger( p_input, "spu-es" );
+
+        if( i_teletext_es >= 0 && i_teletext_es == i_spu_es )
         {
-            var_SetInteger( p_vbi, "vbi-page", page );
-            vlc_object_release( p_vbi );
+            vlc_object_t *p_vbi;
+            p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
+                        "zvbi", FIND_ANYWHERE );
+            if( p_vbi )
+            {
+                var_SetInteger( p_vbi, "vbi-page", page );
+                vlc_object_release( p_vbi );
+            }
         }
     }
+    emit setNewTelexPage( page );
 }
 
 void InputManager::telexToggle( bool b_enabled )
 {
-    int i_page = 100;
+    if( hasInput() )
+    {
+        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );
+        const int i_spu_es = var_GetInteger( p_input, "spu-es" );
 
+        b_enabled = (i_teletext_es >= 0);
+        emit teletextEnabled( b_enabled );
+        if( b_enabled && (i_teletext_es == i_spu_es) )
+        {
+            vlc_object_t *p_vbi;
+            int i_page = 100;
+            p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
+                        "zvbi", FIND_ANYWHERE );
+            if( p_vbi )
+            {
+                i_page = var_GetInteger( p_vbi, "vbi-page" );
+                vlc_object_release( p_vbi );
+                i_page = b_enabled ? i_page : 0;
+                telexGotoPage( i_page );
+            }
+        }
+    }
+    else emit teletextEnabled( b_enabled );
+}
+
+void InputManager::telexToggleButtons()
+{
     if( hasInput() )
     {
-        vlc_value_t val;
-        vlc_object_t *p_vbi;
-        p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
-                    "zvbi", FIND_ANYWHERE );
-        if( p_vbi )
+        const int i_teletext_es = var_GetInteger( p_input, "teletext-es" );
+        if( i_teletext_es >= 0 )
         {
-            i_page = var_GetInteger( p_vbi, "vbi-page" );
-            vlc_object_release( p_vbi );
+            const int i_spu_es = var_GetInteger( p_input, "spu-es" );
+
+            if( i_teletext_es == i_spu_es )
+                var_SetInteger( p_input, "spu-es", -1 );
+            else
+                var_SetInteger( p_input, "spu-es", i_teletext_es );
+
+            emit toggleTelexButtons();
         }
-        var_Change( p_input, "spu-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
-        b_enabled = (val.i_int > 0);
     }
-    emit teletextEnabled( b_enabled );
-    i_page = b_enabled ? i_page : 0;
-    telexGotoPage( i_page );
 }
 
-void InputManager::telexSetTransparency( bool b_transp )
+void InputManager::telexSetTransparency()
 {
     if( hasInput() )
     {
@@ -449,10 +496,12 @@ void InputManager::telexSetTransparency( bool b_transp )
                     "zvbi", FIND_ANYWHERE );
         if( p_vbi )
         {
-            var_SetBool( p_input->p_libvlc, "vbi-opaque", b_transp );
+            var_SetBool( p_vbi, "vbi-opaque", b_transparentTelextext );
+            b_transparentTelextext = !b_transparentTelextext;
             vlc_object_release( p_vbi );
         }
     }
+    emit toggleTelexTransparency();
 }
 
 void InputManager::slower()
@@ -549,7 +598,7 @@ void MainInputManager::customEvent( QEvent *event )
     if( VLC_OBJECT_INTF == p_intf->i_object_type ) /* FIXME: don't use object type */
     {
         vlc_mutex_lock( &p_intf->change_lock );
-        if( p_input && ( p_input->b_dead || p_input->b_die ) )
+        if( p_input && ( p_input->b_dead || !vlc_object_alive (p_input) ) )
         {
             var_DelCallback( p_input, "state", PLItemChanged, this );
             vlc_object_release( p_input );
@@ -563,7 +612,7 @@ void MainInputManager::customEvent( QEvent *event )
         {
             QPL_LOCK;
             p_input = THEPL->p_input;
-            if( p_input && !( p_input->b_die || p_input->b_dead) )
+            if( p_input && !( !vlc_object_alive (p_input) || p_input->b_dead) )
             {
                 vlc_object_yield( p_input );
                 var_AddCallback( p_input, "state", PLItemChanged, this );
@@ -579,8 +628,10 @@ void MainInputManager::customEvent( QEvent *event )
     {
         /* we are working as a dialogs provider */
         playlist_t *p_playlist = pl_Yield( p_intf );
-        p_input = p_playlist->p_input;
+        p_input = playlist_CurrentInput( p_playlist );
         emit inputChanged( p_input );
+        vlc_object_release( p_input );
+        pl_Release( p_intf );
     }
 }
 
@@ -610,6 +661,19 @@ void MainInputManager::togglePlayPause()
     getIM()->togglePlayPause();
 }
 
+bool MainInputManager::teletextState()
+{
+    im = getIM();
+    if( im->hasInput() )
+    {
+        const int i_teletext_es = var_GetInteger( getInput(), "teletext-es" );
+        const int i_spu_es = var_GetInteger( getInput(), "spu-es" );
+
+        return i_teletext_es >= 0 && i_teletext_es == i_spu_es;
+    }
+    return false;
+}
+
 /* Static callbacks */
 
 /* IM */
@@ -674,7 +738,16 @@ static int ChangeSPU( vlc_object_t *p_this, const char *var, vlc_value_t o,
     IMEvent *event = new IMEvent( ItemSpuChanged_Type, 0 );
     QApplication::postEvent( im, static_cast<QEvent*>(event) );
     return VLC_SUCCESS;
+}
+
+static int ChangeTeletext( vlc_object_t *p_this, const char *var, vlc_value_t o,
+                           vlc_value_t n, void *param )
+{
 
+    InputManager *im = (InputManager*)param;
+    IMEvent *event = new IMEvent( ItemTeletextChanged_Type, 0 );
+    QApplication::postEvent( im, static_cast<QEvent*>(event) );
+    return VLC_SUCCESS;
 }
 
 /* MIM */