]> git.sesse.net Git - vlc/blobdiff - modules/gui/skins/src/skin_main.cpp
* all: don't use input_OffsetToTime anymore.
[vlc] / modules / gui / skins / src / skin_main.cpp
index c18235c8f6d6660a6a958418109e35fa3f69d01a..1c9868357032a84cc06776d398d6d3bd5438336e 100644 (file)
@@ -2,7 +2,7 @@
  * skin-main.cpp: skins plugin for VLC
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: skin_main.cpp,v 1.41 2003/06/22 17:52:12 gbazin Exp $
+ * $Id$
  *
  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
  *          Emmanuel Puig    <karibu@via.ecp.fr>
 #include <vlc/intf.h>
 #include <vlc/aout.h>
 
-//--- GENERAL ---------------------------------------------------------------
-#if !defined(MODULE_NAME_IS_basic_skins)
-#ifdef WIN32                                               /* mingw32 hack */
-#   undef Yield
-#   undef CreateDialog
-#endif
-/* Let vlc take care of the i18n stuff */
-#define WXINTL_NO_GETTEXT_MACRO
-#include <wx/wx.h>
-#endif
-
 //--- SKIN ------------------------------------------------------------------
 #include "../os_api.h"
 #include "event.h"
 #include "skin_common.h"
 #include "dialogs.h"
 
-#if !defined(MODULE_NAME_IS_basic_skins)
-#include "../../wxwindows/wxwindows.h"
-#endif
-
 #ifdef X11_SKINS
 #include <X11/Xlib.h>
 #include <Imlib2.h>
 //---------------------------------------------------------------------------
 intf_thread_t *g_pIntf;
 
-//---------------------------------------------------------------------------
-// Exported interface functions.
-//---------------------------------------------------------------------------
-#ifdef WIN32
-extern "C" __declspec( dllexport )
-    int __VLC_SYMBOL( vlc_entry ) ( module_t *p_module );
-#endif
-
 //---------------------------------------------------------------------------
 // Local prototypes.
 //---------------------------------------------------------------------------
@@ -93,6 +70,12 @@ static int Open ( vlc_object_t *p_this )
     intf_thread_t *p_intf = (intf_thread_t *)p_this;
     g_pIntf = p_intf;
 
+#if defined X11_SKINS
+    // Open/Test for an X11 display
+    Display *display = XOpenDisplay( NULL );
+    if( !display ) return VLC_EGENERIC;
+#endif
+
     // Allocate instance and initialize some members
     p_intf->p_sys = (intf_sys_t *) malloc( sizeof( intf_sys_t ) );
     if( p_intf->p_sys == NULL )
@@ -103,7 +86,6 @@ static int Open ( vlc_object_t *p_this )
 
     p_intf->pf_run = Run;
 
-
     // Suscribe to messages bank
     p_intf->p_sys->p_sub = msg_Subscribe( p_intf );
 
@@ -114,28 +96,21 @@ static int Open ( vlc_object_t *p_this )
     p_intf->p_sys->i_index        = -1;
     p_intf->p_sys->i_size         = 0;
 
+    p_intf->p_sys->b_on_top = false;
+
     p_intf->p_sys->i_close_status = VLC_NOTHING;
 
     p_intf->p_sys->p_input = NULL;
     p_intf->p_sys->p_playlist = (playlist_t *)vlc_object_find( p_intf,
         VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
 
-#ifdef GTK2_SKINS
-    // Initialize GDK
-    int    i_args   = 3;
-    char  *p_args[] = { "", "", "--sync", NULL };
-    char **pp_args  = p_args;
-
-    gdk_init( &i_args, &pp_args );
-
-#elif defined X11_SKINS
+#if defined X11_SKINS
     // Initialize X11
-    Display *display = XOpenDisplay( NULL );
     p_intf->p_sys->display = display;
     vlc_mutex_init( p_intf, &p_intf->p_sys->xlock );
     // Fake window to receive broadcast events
     Window root = DefaultRootWindow( display );
-    p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0, 
+    p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0,
                                                   1, 1, 0, 0, 0 );
     XStoreName( display, p_intf->p_sys->mainWin, "VLC Media Player" );
 
@@ -228,7 +203,10 @@ static void Close ( vlc_object_t *p_this )
 
 #if defined X11_SKINS
     XDestroyWindow( p_intf->p_sys->display, p_intf->p_sys->mainWin );
-    XCloseDisplay( p_intf->p_sys->display );
+
+    // There is a bug in imlib2 which prevents us from closing the display
+    // (__imlib_RenderImage() can free old GC with already closed display)
+    //XCloseDisplay( p_intf->p_sys->display );
 #endif
 
     // Unsuscribe to messages bank
@@ -257,12 +235,9 @@ static void Run( intf_thread_t *p_intf )
 
     int a = OSAPI_GetTime();
 
-#if !defined(MODULE_NAME_IS_basic_skins)
     // Initialize the dialog boxes
     p_intf->p_sys->p_dialogs = new Dialogs( p_intf );
-    if( !p_intf->p_sys->p_dialogs ||
-        !p_intf->p_sys->p_dialogs->OpenDlg ) return;
-#endif
+    if( !p_intf->p_sys->p_dialogs ) return;
 
     // Load a theme
     char *skin_last = config_GetPsz( p_intf, "skin_last" );
@@ -294,32 +269,16 @@ static void Run( intf_thread_t *p_intf )
         if( !Loader->Load( user_skin ) && !Loader->Load( default_skin ) )
         {
 #endif
-#if !defined(MODULE_NAME_IS_basic_skins)
-            wxMutexGuiEnter();
-            wxFileDialog dialog( NULL,
-                wxU(_("Open a skin file")), wxT(""), wxT(""),
-                wxT("Skin files (*.vlt)|*.vlt|Skin files (*.xml)|*.xml|"
-                    "All files|*.*"), wxOPEN );
-
-            if( dialog.ShowModal() == wxID_OK )
-            {
-                // try to load selected file
-                if( ! Loader->Load( (string)dialog.GetPath().mb_str() ) )
-                {
-                    // He, he, what the hell is he doing ?
-                    delete Loader;
-                    wxMutexGuiLeave();
-                    return;
-                }
-                wxMutexGuiLeave();
-            }
-            else
-#endif
+            p_intf->p_sys->p_dialogs->ShowOpenSkin( 1 /* block */ );
+
+            // try to load selected file
+            if( !p_intf->p_sys->p_new_theme_file ||
+                !Loader->Load( (string)p_intf->p_sys->p_new_theme_file ) )
             {
+                // He, he, what the hell is he doing ?
                 delete Loader;
-#if !defined(MODULE_NAME_IS_basic_skins)
-                wxMutexGuiLeave();
-#endif
+                delete p_intf->p_sys->p_dialogs;
+                if( skin_last ) free( skin_last );
                 return;
             }
         }
@@ -329,19 +288,17 @@ static void Run( intf_thread_t *p_intf )
     p_intf->p_sys->p_theme->InitTheme();
     p_intf->p_sys->p_theme->ShowTheme();
 
+    if( skin_last ) free( skin_last );
     delete Loader;
 
     msg_Dbg( p_intf, "Load theme time : %i ms", OSAPI_GetTime() - a );
 
-    // Refresh the whole interface
     OSAPI_PostMessage( NULL, VLC_INTF_REFRESH, 0, (int)true );
 
     OSRun( p_intf );
 
-#if !defined(MODULE_NAME_IS_basic_skins)
     // clean up the dialog boxes
     delete p_intf->p_sys->p_dialogs;
-#endif
 }
 
 //---------------------------------------------------------------------------
@@ -365,9 +322,10 @@ vlc_module_begin();
               VLC_FALSE );
     add_bool( "show_in_taskbar", VLC_TRUE, NULL, SKIN_TASKBAR,
               SKIN_TASKBAR_LONG, VLC_FALSE );
-    set_description( _("Skinnable Interface") );
+    set_description( _("Skinnable interface") );
     set_capability( "interface", 30 );
     set_callbacks( Open, Close );
+    set_program( "svlc" );
 vlc_module_end();
 
 
@@ -390,16 +348,6 @@ int SkinManage( intf_thread_t *p_intf )
         p_intf->p_sys->p_input = NULL;
     }
 
-    OSAPI_PostMessage( NULL, VLC_INTF_REFRESH, 0, (long)false );
-
-#if !defined(MODULE_NAME_IS_basic_skins) //FIXME
-    // Update the log window
-    p_intf->p_sys->p_dialogs->MessagesDlg->UpdateLog();
-
-    // Update the file info window
-    p_intf->p_sys->p_dialogs->FileInfoDlg->UpdateFileInfo();
-#endif
-
     //-------------------------------------------------------------------------
     if( p_intf->p_sys->p_input != NULL && !p_intf->p_sys->p_input->b_die )
     {
@@ -417,41 +365,44 @@ int SkinManage( intf_thread_t *p_intf )
         OSAPI_PostMessage( NULL, CTRL_SET_SLIDER,
             (unsigned int)
             p_intf->p_sys->p_theme->EvtBank->Get( "volume_refresh" ),
-            (long)( volume * SLIDER_RANGE / AOUT_VOLUME_MAX ) );
-
+            (long)( volume * SLIDER_RANGE / (AOUT_VOLUME_DEFAULT * 2) ) );
 
         // Refresh slider
         // if( p_input->stream.b_seekable && p_intf->p_sys->b_playing )
-        if( p_input->stream.b_seekable )
-        {
 #define p_area p_input->stream.p_selected_area
+        if( p_input->stream.b_seekable && p_area->i_size )
+        {
 
             // Set value of sliders
-            long Value = SLIDER_RANGE *
-                p_input->stream.p_selected_area->i_tell /
-                p_input->stream.p_selected_area->i_size;
+            long Value = SLIDER_RANGE * p_area->i_tell / p_area->i_size;
 
             // Update sliders
             OSAPI_PostMessage( NULL, CTRL_SET_SLIDER, (unsigned int)
                 p_intf->p_sys->p_theme->EvtBank->Get( "time" ), (long)Value );
 
             // Text char * for updating text controls
-            char *text = new char[OFFSETTOTIME_MAX_SIZE];
+            char *text = new char[MSTRTIME_MAX_SIZE];
+
+            int64_t i_seconds, i_length;
+
+            i_seconds = var_GetTime( p_intf->p_sys->p_input, "time" ) / I64C(1000000 );
+            i_length = var_GetTime( p_intf->p_sys->p_input, "length" ) / I64C(1000000 );
+
+            secstotimestr( psz_time, i_seconds );
 
             // Create end time text
-            input_OffsetToTime( p_intf->p_sys->p_input, &text[1],
-                                p_area->i_size - p_area->i_tell );
+            secstotimestr( &text[1], i_length - i_seconds );
             text[0] = '-';
             p_intf->p_sys->p_theme->EvtBank->Get( "left_time" )
                 ->PostTextMessage( text );
 
             // Create time text and update
-            input_OffsetToTime( p_intf->p_sys->p_input, text, p_area->i_tell );
+            secstotimestr( text, i_seconds );
             p_intf->p_sys->p_theme->EvtBank->Get( "time" )
                 ->PostTextMessage( text );
 
             // Create total time text
-            input_OffsetToTime( p_intf->p_sys->p_input, text, p_area->i_size );
+            secstotimestr( text, i_length );
             p_intf->p_sys->p_theme->EvtBank->Get( "total_time" )
                 ->PostTextMessage( text );