* 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.
//---------------------------------------------------------------------------
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 )
p_intf->pf_run = Run;
-
// Suscribe to messages bank
p_intf->p_sys->p_sub = msg_Subscribe( p_intf );
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" );
#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
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" );
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;
}
}
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
}
//---------------------------------------------------------------------------
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();
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 )
{
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 );