$(NULL)
EXTRA_DIST += \
+ wince_rc.rc \
bitmaps/vlc16x16.ico \
bitmaps/toolbar1.bmp \
bitmaps/toolbar2.bmp \
#include <vlc_common.h>
#include <vlc_aout.h>
#include <vlc_interface.h>
+#include <vlc_playlist.h>
#include "wince.h"
{
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH] = _T("\0");
- static TCHAR szFilter[] = _T("All (*.*)\0*.*\0");
+ static TCHAR szFilter[] = _T("wav (*.wav)\0*.wav\0mp3 (*.mp3 *.mpga)\0*.mp3;*.mpga\0All (*.*)\0*.*\0");
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
{
char *psz_filename = _TOMB(ofn.lpstrFile);
playlist_Add( p_playlist, psz_filename, psz_filename,
- PLAYLIST_APPEND | (i_arg?PLAYLIST_GO:0), PLAYLIST_END );
+ PLAYLIST_APPEND | (i_arg?PLAYLIST_GO:0), PLAYLIST_END,
+ TRUE, FALSE );
}
pl_Release( p_intf );
char *psz_filename = _TOMB(psz_result);
playlist_Add( p_playlist, psz_filename, psz_filename,
PLAYLIST_APPEND | (i_arg ? PLAYLIST_GO : 0),
- PLAYLIST_END );
+ PLAYLIST_END, TRUE, FALSE );
}
p_malloc->Free( pidl );
}
#include <vlc_common.h>
#include <vlc_interface.h>
+#include <vlc_input.h>
#include "wince.h"
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- // Set the text of the item.
- tvi.pszText = _FROMMB( p_input->input.p_item->psz_name );
+ // Set the text of the item. Not right, but I don't know yet how to handle this
+ //tvi.pszText = _FROMMB( p_input->input.p_item->psz_name ); <- old line
+ input_item_t * inp_item = input_item_GetById( p_input, 1 );
+ tvi.pszText = _FROMMB( input_item_GetName( inp_item ) );
tvi.cchTextMax = _tcslen( tvi.pszText );
// Save the heading level in the item's application-defined data area
hPrevRootItem = hPrev;
- vlc_mutex_lock( &p_input->input.p_item->lock );
- for( int i = 0; i < p_input->input.p_item->i_categories; i++ )
+ vlc_mutex_lock( &inp_item->lock );
+ for( int i = 0; i < inp_item->i_categories; i++ )
{
- info_category_t *p_cat = p_input->input.p_item->pp_categories[i];
+ info_category_t *p_cat = inp_item->pp_categories[i];
// Set the text of the item.
- tvi.pszText = _FROMMB( p_input->input.p_item->psz_name );
+ tvi.pszText = _FROMMB( inp_item->psz_name );
tvi.cchTextMax = _tcslen( tvi.pszText );
// Save the heading level in the item's application-defined data area
TreeView_Expand( hwndTV, hPrevLev2Item, TVE_EXPANDPARTIAL|TVE_EXPAND );
}
- vlc_mutex_unlock( &p_input->input.p_item->lock );
+ vlc_mutex_unlock( &inp_item->lock );
TreeView_Expand( hwndTV, hPrevRootItem, TVE_EXPANDPARTIAL|TVE_EXPAND );
#include <vlc_aout.h>
#include <vlc_vout.h>
#include <vlc_interface.h>
+#include <vlc_input.h>
+#include <vlc_playlist.h>
#include "wince.h"
+#define INT64_C(val) val##LL
#include <windowsx.h>
#include <commctrl.h>
{
string about = (string)"VLC media player " PACKAGE_VERSION +
_("\n(WinCE interface)\n\n") +
- _("(c) 1996-2006 - the VideoLAN Team\n\n") +
+ _("(c) 1996-2008 - the VideoLAN Team\n\n") +
_("Compiled by ") + VLC_CompileBy() + "@" +
VLC_CompileHost() + "." + VLC_CompileDomain() + ".\n" +
_("Compiler: ") + VLC_Compiler() + ".\n" +
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
- if( p_playlist->i_size )
+ if( !playlist_IsEmpty(p_playlist) )
{
vlc_value_t state;
#include <vlc_common.h>
#include <vlc_interface.h>
+#include <vlc_playlist.h>
#include "wince.h"
SHMENUBARINFO mbi;
INITCOMMONCONTROLSEX iccex;
RECT rcClient;
+ char *psz_uri;
switch( msg )
{
WS_CHILD | WS_VISIBLE | SS_RIGHT,
0, 10, 60, 15, hwnd, NULL, hInst, NULL);
- char *psz_uri = input_item_GetURI( &p_item->input );
+ psz_uri = input_item_GetURI( p_item->p_input );
uri_text = CreateWindow( _T("EDIT"), _FROMMB(psz_uri),
WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
70, 10 - 3, rcClient.right - 70 - 10, 15 + 6, hwnd, 0, hInst, 0 );
hwnd, NULL, hInst, NULL);
name_text = CreateWindow( _T("EDIT"),
- _FROMMB(p_item->input.psz_name),
+ _FROMMB(p_item->p_input->psz_name),
WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
70, 10 + 15 + 10 - 3, rcClient.right - 70 - 10, 15 + 6,
hwnd, NULL, hInst, NULL);
hwnd, NULL, hInst, NULL );
SendMessage( enabled_checkbox, BM_SETCHECK,
- p_item->b_enabled ? BST_CHECKED : BST_UNCHECKED, 0 );
+ (p_item->i_flags & PLAYLIST_DBL_FLAG) ?
+ BST_UNCHECKED : BST_CHECKED, 0 );
/* Treeview */
iccex.dwSize = sizeof( INITCOMMONCONTROLSEX );
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
// Set the text of the item.
- tvi.pszText = _FROMMB(p_item->input.psz_name);
+ tvi.pszText = _FROMMB(p_item->p_input->psz_name);
tvi.cchTextMax = _tcslen(tvi.pszText);
// Save the heading level in the item's application-defined data area
hPrevRootItem = hPrev;
/* Rebuild the tree */
- vlc_mutex_lock( &p_item->input.lock );
- for( int i = 0; i < p_item->input.i_categories; i++ )
+ vlc_mutex_lock( &p_item->p_input->lock );
+ for( int i = 0; i < p_item->p_input->i_categories; i++ )
{
- info_category_t *p_cat = p_item->input.pp_categories[i];
+ info_category_t *p_cat = p_item->p_input->pp_categories[i];
// Set the text of the item.
- tvi.pszText = _FROMMB( p_item->input.psz_name );
+ tvi.pszText = _FROMMB( p_item->p_input->psz_name );
tvi.cchTextMax = _tcslen( tvi.pszText );
// Save the heading level in the item's application-defined data area
TreeView_Expand( info_tree, hPrevLev2Item,
TVE_EXPANDPARTIAL |TVE_EXPAND );
}
- vlc_mutex_unlock( &p_item->input.lock );
+ vlc_mutex_unlock( &p_item->p_input->lock );
TreeView_Expand( info_tree, hPrevRootItem, TVE_EXPANDPARTIAL |TVE_EXPAND );
}
TCHAR psz_name[MAX_PATH];
Edit_GetText( name_text, psz_name, MAX_PATH );
- input_item_SetName( &p_item->input, _TOMB( psz_name ) );
+ input_item_SetName( p_item->p_input, _TOMB( psz_name ) );
TCHAR psz_uri[MAX_PATH];
Edit_GetText( uri_text, psz_uri, MAX_PATH );
- input_item_SetURI( &p_item->input, _TOMB(psz_uri) );
+ input_item_SetURI( p_item->p_input, _TOMB(psz_uri) );
- vlc_mutex_lock( &p_item->input.lock );
- bool b_old_enabled = p_item->b_enabled;
+ vlc_mutex_lock( &p_item->p_input->lock );
+ bool b_old_enabled = !(p_item->i_flags & PLAYLIST_DBL_FLAG);
playlist_t * p_playlist = pl_Yield( p_intf );
if( p_playlist != NULL )
pl_Release( p_intf );
}
- p_item->b_enabled = (b_state & BST_CHECKED) ? true : false ;
+ p_item->i_flags |= (b_state & BST_CHECKED) ? false : PLAYLIST_DBL_FLAG ;
- vlc_mutex_unlock( &p_item->input.lock );
+ vlc_mutex_unlock( &p_item->p_input->lock );
}
#include <vlc_common.h>
#include <vlc_interface.h>
+#include <vlc_playlist.h>
#include "wince.h"
else
{
playlist_t * p_playlist = pl_Yield( p_intf );
- if( p_playlist && p_playlist->i_size )
+ if( p_playlist && !playlist_IsEmpty( p_playlist ) )
{
AppendMenu( hmenu, MF_SEPARATOR, 0, _T("") );
AppendMenu( hmenu, MF_STRING, PlayStream_Event, _T("Play") );
for( i_start = p_sub->i_start; i_start != i_stop;
i_start = (i_start+1) % VLC_MSG_QSIZE )
{
+ vlc_value_t val;
+ var_Get( p_intf->p_libvlc, "verbose", &val );
+
switch( p_sub->p_msg[i_start].i_type )
{
case VLC_MSG_ERR:
case VLC_MSG_INFO:
- if( p_intf->p_libvlc_global->i_verbose < 0 ) continue;
+ if( val.i_int < 0 ) continue;
break;
case VLC_MSG_WARN:
- if( p_intf->p_libvlc_global->i_verbose < 1 ) continue;
+ if( val.i_int < 1 ) continue;
break;
case VLC_MSG_DBG:
- if( p_intf->p_libvlc_global->i_verbose < 2 ) continue;
+ if( val.i_int < 2 ) continue;
break;
}
#include <vlc_common.h>
#include <vlc_interface.h>
+#include <vlc_playlist.h>
#include "wince.h"
GetWindowText( mrl_combo, psz_text, 2048 );
int i_args;
- char **pp_args = vlc_parse_cmdline( _TOMB(psz_text), &i_args );
+ /*char **pp_args = vlc_parse_cmdline( _TOMB(psz_text), &i_args );
ComboBox_AddString( mrl_combo, psz_text );
if( ComboBox_GetCount( mrl_combo ) > 10 )
ComboBox_DeleteString( mrl_combo, 0 );
- ComboBox_SetCurSel( mrl_combo, ComboBox_GetCount( mrl_combo ) - 1 );
+ ComboBox_SetCurSel( mrl_combo, ComboBox_GetCount( mrl_combo ) - 1 );*/
/* Update the playlist */
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
- for( int i = 0; i < i_args; i++ )
+ /* for( int i = 0; i < i_args; i++ )
{
bool b_start = !i && i_open_arg;
playlist_item_t *p_item =
playlist_ItemNew( p_playlist, pp_args[i], pp_args[i] );
/* Insert options */
- while( i + 1 < i_args && pp_args[i + 1][0] == ':' )
+/* while( i + 1 < i_args && pp_args[i + 1][0] == ':' )
{
playlist_ItemAddOption( p_item, pp_args[i + 1] );
i++;
- }
+ }*/
/* Get the options from the subtitles dialog */
- if( (SendMessage( subsfile_checkbox, BM_GETCHECK, 0, 0 ) & BST_CHECKED)
+/* if( (SendMessage( subsfile_checkbox, BM_GETCHECK, 0, 0 ) & BST_CHECKED)
&& subsfile_mrl.size() )
{
for( int j = 0; j < (int)subsfile_mrl.size(); j++ )
{
free( pp_args[i_args] );
if( !i_args ) free( pp_args );
- }
+ }*/
pl_Release( p_intf );
}
#include <vlc_common.h>
#include <vlc_interface.h>
+#include <vlc_playlist.h>
#include "wince.h"
// The TBBUTTON structure contains information the toolbar buttons.
static TBBUTTON tbButton2[] =
{
- {0, ID_MANAGE_OPENPL, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {1, ID_MANAGE_SAVEPL, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
- {2, ID_MANAGE_ADDFILE, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {3, ID_MANAGE_ADDMRL, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {4, ID_SEL_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
- {5, Infos_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
- {6, Up_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {7, Down_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
- {8, Random_Event, TBSTATE_ENABLED, TBSTYLE_CHECK},
- {9, Loop_Event, TBSTATE_ENABLED, TBSTYLE_CHECK},
- {10, Repeat_Event, TBSTATE_ENABLED, TBSTYLE_CHECK}
+ {0, ID_MANAGE_OPENPL, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {1, ID_MANAGE_SAVEPL, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP },
+ {2, ID_MANAGE_ADDFILE, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {3, ID_MANAGE_ADDMRL, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {4, ID_SEL_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP },
+ {5, Infos_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP },
+ {6, Up_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {7, Down_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON },
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP },
+ {8, Random_Event, TBSTATE_ENABLED, TBSTYLE_CHECK },
+ {9, Loop_Event, TBSTATE_ENABLED, TBSTYLE_CHECK },
+ {10, Repeat_Event, TBSTATE_ENABLED, TBSTYLE_CHECK }
};
// Toolbar ToolTips
case CDDS_ITEMPREPAINT: //Before an item is drawn
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return CDRF_DODEFAULT;
- if( (int)lplvcd->nmcd.dwItemSpec == p_playlist->i_index )
+ if( (int)lplvcd->nmcd.dwItemSpec == p_playlist->i_current_index )
{
lplvcd->clrText = RGB(255,0,0);
pl_Release( p_intf );
return CDRF_NEWFONT;
}
- playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist,
- (int)lplvcd->nmcd.dwItemSpec );
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist,
+ (int)lplvcd->nmcd.dwItemSpec, FALSE );
if( !p_item )
{
pl_Release( p_intf );
return CDRF_DODEFAULT;
}
- if( p_item->b_enabled == false )
+ if( p_item->i_flags & PLAYLIST_DBL_FLAG )
{
lplvcd->clrText = RGB(192,192,192);
pl_Release( p_intf );
/* Update the colour of items */
vlc_object_lock( p_playlist );
- if( p_intf->p_sys->i_playing != p_playlist->i_index )
+ if( p_intf->p_sys->i_playing != playlist_CurrentSize( p_playlist ) )
{
// p_playlist->i_index in RED
Rebuild();
// if exists, p_intf->p_sys->i_playing in BLACK
- p_intf->p_sys->i_playing = p_playlist->i_index;
+ p_intf->p_sys->i_playing = p_playlist->i_current_index;
}
vlc_object_unlock( p_playlist );
/* ...and rebuild it */
vlc_object_lock( p_playlist );
- for( int i = 0; i < p_playlist->i_size; i++ )
+ playlist_item_t * p_root = p_playlist->p_local_onelevel;
+ playlist_item_t * p_child = NULL;
+
+ for( int i = 0; i < playlist_NodeChildrenCount( p_playlist, p_root ); i++ )
{
+ p_child = playlist_GetNextLeaf( p_playlist, p_root, p_child, FALSE, FALSE);
LVITEM lv;
lv.mask = LVIF_TEXT;
lv.pszText = _T("");
lv.iItem = i;
ListView_InsertItem( hListView, &lv );
ListView_SetItemText( hListView, lv.iItem, 0,
- _FROMMB(p_playlist->pp_items[i]->input.psz_name) );
- UpdateItem( i );
+ _FROMMB(p_child->p_input->psz_name) );
+
+ UpdateItem( p_child->i_id );
}
vlc_object_unlock( p_playlist );
if( p_playlist == NULL ) return;
- playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist, i );
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i, FALSE );
if( !p_item )
{
return;
}
- ListView_SetItemText( hListView, i, 0, _FROMMB(p_item->input.psz_name) );
+ ListView_SetItemText( hListView, i, 0, _FROMMB(p_item->p_input->psz_name) );
+
ListView_SetItemText( hListView, i, 1,
- _FROMMB( input_item_GetInfo( &p_item->input,
+ _FROMMB( input_item_GetInfo( p_item->p_input,
_("General") , _("Author") ) ) );
char psz_duration[MSTRTIME_MAX_SIZE];
- mtime_t dur = input_item_GetDuration( p_item );
+ mtime_t dur = input_item_GetDuration( p_item->p_input );
+
if( dur != -1 ) secstotimestr( psz_duration, dur/1000000 );
else memcpy( psz_duration , "-:--:--", sizeof("-:--:--") );
- ListView_SetItemText( hListView, i, 3, _FROMMB(psz_duration) );
+ ListView_SetItemText( hListView, i, 2, _FROMMB(psz_duration) );
pl_Release( p_intf );
}
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
- playlist_Delete( p_playlist, item );
+ playlist_DeleteFromInput( p_playlist, item, FALSE );
ListView_DeleteItem( hListView, item );
pl_Release( p_intf );
psz_export = "export-pls";
else psz_export = "export-m3u";
- playlist_Export( p_playlist, p_arg->psz_results[0], psz_export );
+ playlist_Export( p_playlist, p_arg->psz_results[0], p_playlist->p_local_onelevel, psz_export );
pl_Release( p_intf );
}
}
if( ListView_GetItemState( hListView, item, LVIS_SELECTED ) )
{
playlist_item_t *p_item =
- playlist_ItemGetByPos( p_playlist, item );
- playlist_Enable( p_playlist, p_item );
+ playlist_ItemGetById( p_playlist, item, FALSE );
+ p_item->i_flags ^= PLAYLIST_DBL_FLAG;
UpdateItem( item );
}
}
{
/*XXX*/
playlist_item_t *p_item =
- playlist_ItemGetByPos( p_playlist, item );
- playlist_Disable( p_playlist, p_item );
+ playlist_ItemGetById( p_playlist, item, FALSE );
+ p_item->i_flags |= PLAYLIST_DBL_FLAG;
UpdateItem( item );
}
}
playlist_t *p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
- playlist_Goto( p_playlist, i_item );
+ playlist_Skip( p_playlist, i_item - p_playlist->i_current_index );
pl_Release( p_intf );
}
if( p_playlist == NULL ) return;
vlc_object_lock( p_playlist);
- playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist, i_item );
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item, true );
vlc_object_unlock( p_playlist );
if( p_item )
long i_item =
ListView_GetNextItem( hListView, -1, LVIS_SELECTED | LVNI_ALL );
- if( i_item > 0 && i_item < p_playlist->i_size )
+ if( i_item > 0 && i_item < playlist_CurrentSize( p_playlist ) )
{
- playlist_Move( p_playlist , i_item, i_item - 1);
+ playlist_Prev( p_playlist );
if( i_item > 1 )
{
ListView_SetItemState( hListView, i_item - 1, LVIS_FOCUSED,
long i_item =
ListView_GetNextItem( hListView, -1, LVIS_SELECTED | LVNI_ALL );
- if( i_item >= 0 && i_item < p_playlist->i_size - 1 )
+ if( i_item >= 0 && i_item < playlist_CurrentSize( p_playlist ) - 1 )
{
- playlist_Move( p_playlist , i_item, i_item + 2 );
+ playlist_Next( p_playlist );
ListView_SetItemState( hListView, i_item + 1, LVIS_FOCUSED,
LVIS_STATEIMAGEMASK );
}
switch( event )
{
case ID_SORT_TITLE:
- playlist_SortTitle( p_playlist , ORDER_NORMAL );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_TITLE, ORDER_NORMAL);
break;
case ID_SORT_RTITLE:
- playlist_SortTitle( p_playlist , ORDER_REVERSE );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_TITLE, ORDER_REVERSE );
break;
case ID_SORT_AUTHOR:
- playlist_SortAuthor(p_playlist , ORDER_NORMAL );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_ARTIST, ORDER_NORMAL);
break;
case ID_SORT_RAUTHOR:
- playlist_SortAuthor( p_playlist , ORDER_REVERSE );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_ARTIST, ORDER_REVERSE);
break;
case ID_SORT_SHUFFLE:
- playlist_Sort( p_playlist , SORT_RANDOM, ORDER_NORMAL );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_RANDOM, ORDER_NORMAL);
break;
}
case 0:
if( i_title_sorted != 1 )
{
- playlist_SortTitle( p_playlist, ORDER_NORMAL );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_TITLE, ORDER_NORMAL);
i_title_sorted = 1;
}
else
{
- playlist_SortTitle( p_playlist, ORDER_REVERSE );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_TITLE, ORDER_REVERSE );
i_title_sorted = -1;
}
break;
case 1:
if( i_author_sorted != 1 )
{
- playlist_SortAuthor( p_playlist, ORDER_NORMAL );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_ARTIST, ORDER_NORMAL);
i_author_sorted = 1;
}
else
{
- playlist_SortAuthor( p_playlist, ORDER_REVERSE );
+ playlist_RecursiveNodeSort(p_playlist , p_playlist->p_root_onelevel,
+ SORT_ARTIST, ORDER_REVERSE);
i_author_sorted = -1;
}
break;
if( i_popup_item != -1 )
{
- playlist_Goto( p_playlist, i_popup_item );
+ playlist_Skip( p_playlist, i_popup_item - p_playlist->i_current_index );
}
pl_Release( p_intf );
if( p_playlist == NULL ) return;
playlist_item_t *p_item =
- playlist_ItemGetByPos( p_playlist, i_popup_item );
+ playlist_ItemGetById( p_playlist, i_popup_item, FALSE );
- if( p_playlist->pp_items[i_popup_item]->b_enabled )
+ if( !(p_playlist->items.p_elems[i_popup_item]->i_flags & PLAYLIST_DBL_FLAG) )
//playlist_IsEnabled( p_playlist, i_popup_item ) )
{
- playlist_Disable( p_playlist, p_item );
+ p_item->i_flags |= PLAYLIST_DBL_FLAG;
}
else
{
- playlist_Enable( p_playlist, p_item );
+ p_item->i_flags ^= PLAYLIST_DBL_FLAG;
}
pl_Release( p_intf );
#include "preferences_widgets.h"
-#define GENERAL_ID 1242
-#define PLUGIN_ID 1243
-#define CAPABILITY_ID 1244
+#define TYPE_CATEGORY 0
+#define TYPE_CATSUBCAT 1 /* Category with embedded subcategory */
+#define TYPE_SUBCATEGORY 2
+#define TYPE_MODULE 3
/*****************************************************************************
* Event Table.
PrefsPanel() { }
PrefsPanel( HWND parent, HINSTANCE hInst, intf_thread_t *_p_intf,
- PrefsDialog *, int i_object_id, char *, char * );
+ PrefsDialog *, module_t *p_module, char *, char *, ConfigTreeData * );
virtual ~PrefsPanel() {}
void Hide();
{
public:
- ConfigTreeData() { b_submodule = 0; panel = NULL; psz_section = NULL;
+ ConfigTreeData() { b_submodule = 0; panel = NULL; psz_name = NULL;
psz_help = NULL; }
virtual ~ConfigTreeData() { delete panel;
- free( psz_section );
+ free( psz_name );
free( psz_help ); }
bool b_submodule;
PrefsPanel *panel;
+ module_t *p_module;
int i_object_id;
- char *psz_section;
+ int i_subcat_id;
+ int i_type;
+ char *psz_name;
char *psz_help;
};
HINSTANCE hInst )
{
vlc_list_t *p_list;
- module_t *p_module;
+ module_t *p_module = NULL;
module_config_t *p_item;
int i_index;
size_t i_capability_count = 0;
size_t i_child_index;
- HTREEITEM capability_item;
+ HTREEITEM category_item, subcategory_item;
/* Initializations */
p_intf = _p_intf;
* Build a tree of the main options
*/
ConfigTreeData *config_data = new ConfigTreeData;
- config_data->i_object_id = GENERAL_ID;
- config_data->psz_help = strdup("nothing");//strdup( GENERAL_HELP );
- config_data->psz_section = strdup( GENERAL_TITLE );
+ config_data->i_object_id = TYPE_CATEGORY;
+ config_data->psz_help = strdup(MAIN_HELP);
+ config_data->psz_name = strdup( GENERAL_TITLE );
tvi.pszText = _T("General settings");
tvi.cchTextMax = lstrlen(_T("General settings"));
tvi.lParam = (long)config_data;
hPrev = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins);
general_item = hPrev;
+ /* Build the categories list */
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
p_module = (module_t *)p_list->p_values[i_index].p_object;
- if( !strcmp( p_module->psz_object_name, "main" ) )
+ if( strcmp( module_GetObjName( p_module ), "main" ) == 0 )
break;
}
+ /* TODO replace by
+ * p_module = module_GetMainModule( p_intf );
+ */
if( i_index < p_list->i_count )
{
+ unsigned int confsize;
+ const char *psz_help;
+ module_config_t * p_config;
+
/* We found the main module */
/* Enumerate config categories and store a reference so we can
* generate their config panel them when it is asked by the user. */
- p_item = p_module->p_config;
+ p_config = module_GetConfig (p_module, &confsize);
- if( p_item ) do
+ for( size_t i = 0; i < confsize; i++ )
{
- switch( p_item->i_type )
- {
- case CONFIG_HINT_CATEGORY:
- ConfigTreeData *config_data = new ConfigTreeData;
- config_data->psz_section = strdup( p_item->psz_text );
- if( p_item->psz_longtext )
- {
- config_data->psz_help =
- strdup( p_item->psz_longtext );
- }
- else
- {
- config_data->psz_help = NULL;
- }
- config_data->i_object_id = p_module->i_object_id;
-
- /* Add the category to the tree */
- // Set the text of the item.
- tvi.pszText = _FROMMB(p_item->psz_text);
- tvi.cchTextMax = _tcslen(tvi.pszText);
- tvi.lParam = (long)config_data;
- tvins.item = tvi;
- tvins.hInsertAfter = hPrev;
- tvins.hParent = general_item; //level 3
-
- // Add the item to the tree-view control.
- hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
+ /* Work on a new item */
+ module_config_t *p_item = p_config + i;
- break;
- }
- }
- while( p_item->i_type != CONFIG_HINT_END && p_item++ );
+ switch( p_item->i_type )
+ {
+ case CONFIG_CATEGORY:
+ if( p_item->value.i == -1 ) break; // Don't display it
+ config_data = new ConfigTreeData;
+ config_data->psz_name = strdup( config_CategoryNameGet(p_item->value.i ) );
+ psz_help = config_CategoryHelpGet( p_item->value.i );
+ if( psz_help )
+ {
+ config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ }
+ else
+ {
+ config_data->psz_help = NULL;
+ }
+
+ config_data->i_type = TYPE_CATEGORY;
+ config_data->i_object_id = p_item->value.i;
+ config_data->p_module = p_module;
+ tvi.pszText = _FROMMB(config_data->psz_name);
+ tvi.cchTextMax = _tcslen(tvi.pszText);
+
+ /* Add the category to the tree */
+ tvi.lParam = (long)config_data;
+ tvins.item = tvi;
+ tvins.hInsertAfter = hPrev;
+ tvins.hParent = general_item; //level 3
+
+ // Add the item to the tree-view control.
+ hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
+ break;
+
+ case CONFIG_SUBCATEGORY:
+ if( p_item->value.i == -1 ) break; // Don't display it
+ /* Special case: move the "general" subcategories to their parent category */
+ if(config_data && p_item->value.i == SUBCAT_VIDEO_GENERAL ||
+ p_item->value.i == SUBCAT_ADVANCED_MISC ||
+ p_item->value.i == SUBCAT_INPUT_GENERAL ||
+ p_item->value.i == SUBCAT_INTERFACE_GENERAL ||
+ p_item->value.i == SUBCAT_SOUT_GENERAL||
+ p_item->value.i == SUBCAT_PLAYLIST_GENERAL||
+ p_item->value.i == SUBCAT_AUDIO_GENERAL )
+ {
+
+ config_data->i_type = TYPE_CATSUBCAT;
+ config_data->i_subcat_id = p_item->value.i;
+ free( config_data->psz_name );
+ config_data->psz_name = strdup( config_CategoryNameGet( p_item->value.i ) );
+
+ free( config_data->psz_help );
+ const char *psz_help = config_CategoryHelpGet( p_item->value.i );
+ if( psz_help )
+ {
+ config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ }
+ else
+ {
+ config_data->psz_help = NULL;
+ }
+ continue;
+ }
+
+ config_data = new ConfigTreeData;
+
+ config_data->psz_name = strdup( config_CategoryNameGet( p_item->value.i ) );
+ psz_help = config_CategoryHelpGet( p_item->value.i );
+ if( psz_help )
+ {
+ config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ }
+ else
+ {
+ config_data->psz_help = NULL;
+ }
+ config_data->i_type = TYPE_SUBCATEGORY;
+ config_data->i_object_id = p_item->value.i;
+
+ tvi.pszText = _FROMMB(config_data->psz_name);
+ tvi.cchTextMax = _tcslen(tvi.pszText);
+
+ tvi.lParam = (long)config_data;
+ tvins.item = tvi;
+ tvins.hInsertAfter = hPrev;
+ tvins.hParent = hPrev;
+
+ // Add the item to the tree-view control.
+ TreeView_InsertItem( hwndTV, &tvins );
+ break;
+ }
+ }
TreeView_SortChildren( hwndTV, general_item, 0 );
+ module_PutConfig( p_config );
}
-
- /*
- * Build a tree of all the plugins
- */
- config_data = new ConfigTreeData;
- config_data->i_object_id = PLUGIN_ID;
- config_data->psz_help = strdup("nothing");//strdup( PLUGIN_HELP );
- config_data->psz_section = strdup("nothing");//strdup( PLUGIN_TITLE );
- tvi.pszText = _T("Modules");
- tvi.cchTextMax = lstrlen(_T("Modules"));
- tvi.lParam = (long)config_data;
- tvins.item = tvi;
- tvins.hInsertAfter = TVI_LAST;
- tvins.hParent = TVI_ROOT;
- // Add the item to the tree-view control.
- hPrev = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins);
- plugins_item = hPrev;
- i_capability_count = 0;
+ module_config_t *p_config;
+ /*
+ * Build a tree of all the plugins
+ */
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
- i_child_index = 0;
-
+ /* Take every module */
p_module = (module_t *)p_list->p_values[i_index].p_object;
/* Exclude the main module */
- if( !strcmp( p_module->psz_object_name, "main" ) )
+ if( !strcmp( module_GetObjName( p_module ), "main" ) )
continue;
/* Exclude empty plugins (submodules don't have config options, they
* are stored in the parent module) */
- if( p_module->b_submodule )
- p_item = ((module_t *)p_module->p_parent)->p_config;
- else
- p_item = p_module->p_config;
- if( !p_item ) continue;
- do
+ unsigned int confsize;
+ i_child_index = 0;
+ int i_category = 0, i_subcategory = 0, i_options = 0;
+ bool b_options = false;
+
+ p_config = module_GetConfig( (module_t *) p_module,&confsize);
+
+ /* Loop through the configurations items */
+ for( size_t i = 0; i < confsize; i++ )
{
+ module_config_t *p_item = p_config + i;
+ if( p_item->i_type == CONFIG_CATEGORY )
+ i_category = p_item->value.i;
+ else if( p_item->i_type == CONFIG_SUBCATEGORY )
+ i_subcategory = p_item->value.i;
+
if( p_item->i_type & CONFIG_ITEM )
+ b_options = true;
+
+ if( b_options && i_category && i_subcategory )
break;
}
- while( p_item->i_type != CONFIG_HINT_END && p_item++ );
- if( p_item->i_type == CONFIG_HINT_END ) continue;
+ module_PutConfig (p_config);
- /* Find the capability child item */
- /*long cookie; size_t i_child_index;*/
- capability_item = TreeView_GetChild( hwndTV, plugins_item );
- while( capability_item != 0 )
- {
- TVITEM capability_tvi = {0};
- TCHAR psz_text[256];
- i_child_index++;
-
- capability_tvi.mask = TVIF_TEXT;
- capability_tvi.pszText = psz_text;
- capability_tvi.cchTextMax = 256;
- capability_tvi.hItem = capability_item;
- TreeView_GetItem( hwndTV, &capability_tvi );
- if( !strcmp( _TOMB(capability_tvi.pszText),
- p_module->psz_capability ) ) break;
-
- capability_item =
- TreeView_GetNextSibling( hwndTV, capability_item );
- }
+ //if( !i_options ) continue;
+ /* Dummy item, please proceed */
+ if( !b_options || i_category == 0 || i_subcategory == 0 ) continue;
- if( i_child_index == i_capability_count &&
- p_module->psz_capability && *p_module->psz_capability )
+ category_item = TreeView_GetChild( hwndTV, general_item );
+ while(category_item != 0)
{
- /* We didn't find it, add it */
- ConfigTreeData *config_data = new ConfigTreeData;
- config_data->psz_section =
- strdup( GetCapabilityHelp( p_module->psz_capability , 1 ) );
- config_data->psz_help =
- strdup( GetCapabilityHelp( p_module->psz_capability , 2 ) );
- config_data->i_object_id = CAPABILITY_ID;
- tvi.pszText = _FROMMB(p_module->psz_capability);
- tvi.cchTextMax = _tcslen(tvi.pszText);
- tvi.lParam = (long)config_data;
- tvins.item = tvi;
- tvins.hInsertAfter = plugins_item;
- tvins.hParent = plugins_item;// level 3
-
- // Add the item to the tree-view control.
- capability_item = (HTREEITEM) TreeView_InsertItem( hwndTV, &tvins);
-
- i_capability_count++;
+ TVITEM category_tvi = {0};
+
+ category_tvi.mask = TVIF_PARAM;
+ category_tvi.lParam = NULL;
+ category_tvi.hItem = category_item;
+ TreeView_GetItem( hwndTV, &category_tvi );
+
+ ConfigTreeData * data = (ConfigTreeData *)category_tvi.lParam;
+
+ if( data->i_object_id == i_category )
+ {
+ subcategory_item = TreeView_GetChild( hwndTV, category_item );
+
+ while(subcategory_item != 0)
+ {
+ TVITEM subcategory_tvi = {0};
+
+ subcategory_tvi.mask = TVIF_PARAM;
+ subcategory_tvi.lParam = NULL;
+ subcategory_tvi.hItem = subcategory_item;
+ TreeView_GetItem( hwndTV, &subcategory_tvi );
+
+ ConfigTreeData * subdata = (ConfigTreeData *)subcategory_tvi.lParam;
+
+ if( subdata->i_object_id == i_subcategory )
+ {
+ config_data = new ConfigTreeData;
+
+ config_data->psz_name = strdup( module_GetObjName( p_module ) );
+ config_data->psz_help = NULL;
+ config_data->i_type = TYPE_MODULE;
+ config_data->i_object_id = p_item->value.i;
+ config_data->p_module = p_module;
+
+ tvi.pszText = _FROMMB(module_GetName( p_module, false ));
+ tvi.cchTextMax = _tcslen(tvi.pszText);
+
+ tvi.lParam = (long)config_data;
+ tvins.item = tvi;
+ tvins.hInsertAfter = subcategory_item;
+ tvins.hParent = subcategory_item;
+
+ // Add the item to the tree-view control.
+ hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
+ break;
+ }
+ subcategory_item = TreeView_GetNextSibling( hwndTV, subcategory_item );
+ }
+
+ break;
+ }
+
+ category_item = TreeView_GetNextSibling( hwndTV, category_item );
}
- /* Add the plugin to the tree */
- ConfigTreeData *config_data = new ConfigTreeData;
- config_data->b_submodule = p_module->b_submodule;
- config_data->i_object_id = p_module->b_submodule ?
- ((module_t *)p_module->p_parent)->i_object_id :
- p_module->i_object_id;
- config_data->psz_help = NULL;
- tvi.pszText = _FROMMB(p_module->psz_object_name);
- tvi.cchTextMax = _tcslen(tvi.pszText);
- tvi.lParam = (long)config_data;
- tvins.item = tvi;
- tvins.hInsertAfter = capability_item;
- tvins.hParent = capability_item;// level 4
-
- // Add the item to the tree-view control.
- TreeView_InsertItem( hwndTV, &tvins );
}
/* Sort all this mess */
- /*long cookie; size_t i_child_index;*/
- TreeView_SortChildren( hwndTV, plugins_item, 0 );
- capability_item = TreeView_GetChild( hwndTV, plugins_item );
- while( capability_item != 0 )
+ TreeView_SortChildren( hwndTV, general_item, 0 );
+ category_item = TreeView_GetChild( hwndTV, general_item );
+ while( category_item != 0 )
{
- TreeView_SortChildren( hwndTV, capability_item, 0 );
- capability_item = TreeView_GetNextSibling( hwndTV, capability_item );
+ TreeView_SortChildren( hwndTV, category_item, 0 );
+ category_item = TreeView_GetNextSibling( hwndTV, category_item );
}
/* Clean-up everything */
void PrefsTreeCtrl::ApplyChanges()
{
- /*long cookie, cookie2;*/
ConfigTreeData *config_data;
/* Apply changes to the main module */
}
/* Apply changes to the plugins */
- item = TreeView_GetChild( hwndTV, plugins_item );
+ item = TreeView_GetChild( hwndTV, general_item );
while( item != 0 )
{
HTREEITEM item2 = TreeView_GetChild( hwndTV, item );
while( item2 != 0 )
{
- TVITEM tvi = {0};
- tvi.mask = TVIF_PARAM;
- tvi.hItem = item2;
- TreeView_GetItem( hwndTV, &tvi );
- config_data = (ConfigTreeData *)tvi.lParam;
- if( config_data && config_data->panel )
+ HTREEITEM item3 = TreeView_GetChild( hwndTV, item2 );
+ while(item3 !=0)
{
- config_data->panel->ApplyChanges();
+ TVITEM tvi = {0};
+ tvi.mask = TVIF_PARAM;
+ tvi.hItem = item3;
+ TreeView_GetItem( hwndTV, &tvi );
+ config_data = (ConfigTreeData *)tvi.lParam;
+ if( config_data && config_data->panel )
+ {
+ config_data->panel->ApplyChanges();
+ }
+ item3 = TreeView_GetNextSibling( hwndTV, item3 );
}
item2 = TreeView_GetNextSibling( hwndTV, item2 );
}
ConfigTreeData *PrefsTreeCtrl::FindModuleConfig( ConfigTreeData *config_data )
{
- /* We need this complexity because submodules don't have their own config
- * options. They use the parent module ones. */
-
- if( !config_data || !config_data->b_submodule )
+ if( !config_data || !config_data->p_module )
{
return config_data;
}
- /*long cookie, cookie2;*/
ConfigTreeData *config_new;
- HTREEITEM item = TreeView_GetChild( hwndTV, plugins_item );
+ HTREEITEM item = TreeView_GetChild( hwndTV, general_item );
while( item != 0 )
{
HTREEITEM item2 = TreeView_GetChild( hwndTV, item );
while( item2 != 0 )
{
- TVITEM tvi = {0};
- tvi.mask = TVIF_PARAM;
- tvi.hItem = item2;
- TreeView_GetItem( hwndTV, &tvi );
- config_new = (ConfigTreeData *)tvi.lParam;
- if( config_new && !config_new->b_submodule &&
- config_new->i_object_id == config_data->i_object_id )
+ HTREEITEM item3 = TreeView_GetChild( hwndTV, item2 );
+ while( item3 != 0 )
{
- return config_new;
+ TVITEM tvi = {0};
+ tvi.mask = TVIF_PARAM;
+ tvi.hItem = item3;
+ TreeView_GetItem( hwndTV, &tvi );
+ config_new = (ConfigTreeData *)tvi.lParam;
+ if( config_new && config_new->p_module == config_data->p_module )
+ {
+ return config_new;
+ }
+ item3 = TreeView_GetNextSibling( hwndTV, item3 );
}
item2 = TreeView_GetNextSibling( hwndTV, item2 );
}
/* The panel hasn't been created yet. Let's do it. */
config_data->panel =
new PrefsPanel( parent, hInst, p_intf, p_prefs_dialog,
- config_data->i_object_id,
- config_data->psz_section,
- config_data->psz_help );
+ config_data->p_module,
+ config_data->psz_name,
+ config_data->psz_help, config_data );
}
else
{
*****************************************************************************/
PrefsPanel::PrefsPanel( HWND parent, HINSTANCE hInst, intf_thread_t *_p_intf,
PrefsDialog *_p_prefs_dialog,
- int i_object_id, char *psz_section, char *psz_help )
+ module_t *p_module, char *psz_name, char *psz_help, ConfigTreeData * config_data )
{
- module_config_t *p_item;
- module_t *p_module = NULL;
+ module_config_t *p_item, *p_config, *p_end;
/* Initializations */
p_intf = _p_intf;
p_prefs_dialog = _p_prefs_dialog;
+ vlc_list_t *p_list = NULL;
b_advanced = true;
- if( i_object_id == PLUGIN_ID || i_object_id == GENERAL_ID ||
- i_object_id == CAPABILITY_ID )
+ if( config_data->i_type == TYPE_CATEGORY )
{
- label = CreateWindow( _T("STATIC"), _FROMMB(psz_section),
+ label = CreateWindow( _T("STATIC"), _FROMMB(psz_name),
WS_CHILD | WS_VISIBLE | SS_LEFT,
5, 10 + (15 + 10), 200, 15,
parent, NULL, hInst, NULL );
else
{
/* Get a pointer to the module */
- p_module = (module_t *)vlc_object_get( i_object_id );
+ if( config_data->i_type == TYPE_MODULE )
+ {
+ p_module = config_data->p_module;
+ }
+ else
+ {
+ /* List the plugins */
+ int i_index;
+ bool b_found = false;
+ p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+ if( !p_list ) return;
+
+ for( i_index = 0; i_index < p_list->i_count; i_index++ )
+ {
+ p_module = (module_t *)p_list->p_values[i_index].p_object;
+ if( !strcmp( module_GetObjName(p_module), "main" ) )
+ {
+ b_found = true;
+ break;
+ }
+ }
+ if( !p_module && !b_found )
+ {
+ msg_Warn( p_intf, "unable to create preferences "
+ "(main module not found)" );
+ return;
+ }
+ }
/* Enumerate config options and add corresponding config boxes
* (submodules don't have config options, they are stored in the
* parent module) */
- if( p_module->b_submodule )
- p_item = ((module_t *)p_module->p_parent)->p_config;
- else
- p_item = p_module->p_config;
+ unsigned confsize;
+ p_config = module_GetConfig( (module_t *) p_module,&confsize);
+
+ p_item = p_config;
+ p_end = p_config + confsize;
/* Find the category if it has been specified */
- if( psz_section && p_item->i_type == CONFIG_HINT_CATEGORY )
+ if( config_data->i_type == TYPE_SUBCATEGORY ||
+ config_data->i_type == TYPE_CATSUBCAT )
{
- while( !(p_item->i_type == CONFIG_HINT_CATEGORY) ||
- strcmp( psz_section, p_item->psz_text ) )
+ for( ; p_item && p_item < p_end ; p_item++ )
{
- if( p_item->i_type == CONFIG_HINT_END ) break;
- p_item++;
+ if( p_item->i_type == CONFIG_SUBCATEGORY &&
+ ( config_data->i_type == TYPE_SUBCATEGORY &&
+ p_item->value.i == config_data->i_object_id ) ||
+ ( config_data->i_type == TYPE_CATSUBCAT &&
+ p_item->value.i == config_data->i_subcat_id ) )
+ {
+ break;
+ }
}
}
/* Add a head title to the panel */
- label = CreateWindow( _T("STATIC"), _FROMMB(psz_section ?
- p_item->psz_text : p_module->psz_longname),
+ const char *psz_head;
+ if( config_data->i_type == TYPE_SUBCATEGORY ||
+ config_data->i_type == TYPE_CATSUBCAT )
+ {
+ psz_head = config_data->psz_name;
+ p_item++;
+ }
+ else
+ {
+ psz_head = module_GetLongName(p_module);
+ }
+
+ label = CreateWindow( _T("STATIC"), _FROMMB(psz_head ?
+ psz_head : _("Unknown")),
WS_CHILD | WS_VISIBLE | SS_LEFT,
5, 10 + (15 + 10), 250, 15,
- parent, NULL, hInst, NULL );
+ parent, NULL, hInst, NULL );
WNDCLASS wc;
memset( &wc, 0, sizeof(wc) );
parent, NULL, hInst, (void *) _p_prefs_dialog );
int y_pos = 5;
- if( p_item ) do
+ for( ; p_item && p_item < p_end ; p_item++ )
{
/* If a category has been specified, check we finished the job */
- if( psz_section && p_item->i_type == CONFIG_HINT_CATEGORY &&
- strcmp( psz_section, p_item->psz_text ) )
+ if( ( ( config_data->i_type == TYPE_SUBCATEGORY &&
+ p_item->value.i != config_data->i_object_id ) ||
+ ( config_data->i_type == TYPE_CATSUBCAT &&
+ p_item->value.i != config_data->i_subcat_id ) ) &&
+ (p_item->i_type == CONFIG_CATEGORY ||
+ p_item->i_type == CONFIG_SUBCATEGORY ) )
break;
- ConfigControl *control =
- CreateConfigControl( VLC_OBJECT(p_intf),
+ ConfigControl *control = NULL;
+
+ control = CreateConfigControl( VLC_OBJECT(p_intf),
p_item, config_window,
hInst, &y_pos );
/* Add the config data to our array so we can keep a trace of it */
config_array.push_back( control );
}
- while( p_item->i_type != CONFIG_HINT_END && p_item++ );
-
GetWindowRect( config_window, &rc);
maxvalue = y_pos - (rc.bottom - rc.top) + 5;
oldvalue = 0;
void PrefsPanel::ApplyChanges()
{
vlc_value_t val;
-
for( size_t i = 0; i < config_array.size(); i++ )
{
ConfigControl *control = config_array[i];
alt = CreateWindow( _T("BUTTON"), _T("Alt"),
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
20, *py_pos, 15, 15, parent, NULL, hInst, NULL );
- Button_SetCheck( alt, p_item->i_value & KEY_MODIFIER_ALT ? BST_CHECKED :
+ Button_SetCheck( alt, p_item->i_type & KEY_MODIFIER_ALT ? BST_CHECKED :
BST_UNCHECKED );
alt_label = CreateWindow( _T("STATIC"), _T("Alt"),
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
20 + 15 + 5 + 30 + 5, *py_pos, 15, 15,
parent, NULL, hInst, NULL );
- Button_SetCheck( ctrl, p_item->i_value & KEY_MODIFIER_CTRL ? BST_CHECKED :
+ Button_SetCheck( ctrl, p_item->i_type & KEY_MODIFIER_CTRL ? BST_CHECKED :
BST_UNCHECKED );
ctrl_label = CreateWindow( _T("STATIC"), _T("Ctrl"),
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
20 + 15 + 5 + 2*(30 + 5) + 15 + 5, *py_pos, 15, 15,
parent, NULL, hInst, NULL );
- Button_SetCheck( shift, p_item->i_value & KEY_MODIFIER_SHIFT ?
+ Button_SetCheck( shift, p_item->i_type & KEY_MODIFIER_SHIFT ?
BST_CHECKED : BST_UNCHECKED );
shift_label = CreateWindow( _T("STATIC"), _T("Shift"),
ComboBox_AddString( combo, _FROMMB(m_keysList[i].c_str()) );
ComboBox_SetItemData( combo, i, (void*)vlc_keys[i].i_key_code );
if( (unsigned int)vlc_keys[i].i_key_code ==
- ( ((unsigned int)p_item->i_value) & ~KEY_MODIFIER ) )
+ ( ((unsigned int)p_item->i_type) & ~KEY_MODIFIER ) )
{
ComboBox_SetCurSel( combo, i );
ComboBox_SetText( combo, _FROMMB(m_keysList[i].c_str()) );
{
p_parser = (module_t *)p_list->p_values[i_index].p_object ;
- if( !strcmp( p_parser->psz_capability, p_item->psz_type ) )
+ if( module_IsCapable( p_parser, p_item->psz_type ) )
{
- ComboBox_AddString( combo, _FROMMB(p_parser->psz_longname) );
+ ComboBox_AddString( combo, _FROMMB(module_GetLongName( p_parser ) ));
ComboBox_SetItemData( combo, i_index,
- (void*)p_parser->psz_object_name );
- if( p_item->psz_value && !strcmp(p_item->psz_value,
- p_parser->psz_object_name) )
+ (void *) module_GetObjName( p_parser ) );
+ if( p_item->value.psz && !strcmp( p_item->value.psz,
+ module_GetObjName( p_parser )) )
{
ComboBox_SetCurSel( combo, i_index );
//ComboBox_SetText( combo, _FROMMB(p_parser->psz_longname) );
*py_pos += 15 + 10;
- textctrl = CreateWindow( _T("EDIT"), p_item->psz_value ?
- _FROMMB(p_item->psz_value) : _T(""),
+ textctrl = CreateWindow( _T("EDIT"), p_item->psz_type ?
+ _FROMMB(p_item->psz_type) : _T(""),
WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT |
ES_AUTOHSCROLL, 20, *py_pos - 3, 180, 15 + 3,
parent, NULL, hInst, NULL );
*py_pos += 15 + 10;
TCHAR psz_string[100];
- _stprintf( psz_string, _T("%f"), p_item->f_value );
+ _stprintf( psz_string, _T("%d"), p_item->i_type );
textctrl = CreateWindow( _T("EDIT"), psz_string,
WS_CHILD | WS_VISIBLE | WS_BORDER | SS_RIGHT | ES_AUTOHSCROLL,
20, *py_pos - 3, 70, 15 + 3, parent, NULL, hInst, NULL );
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
5, *py_pos, 15, 15,
parent, NULL, hInst, NULL );
- Button_SetCheck( checkbox, p_item->i_value ? BST_CHECKED : BST_UNCHECKED );
+ Button_SetCheck( checkbox, config_GetInt(p_this, p_item->psz_name) ? BST_CHECKED : BST_UNCHECKED );
checkbox_label = CreateWindow( _T("STATIC"), _FROMMB(p_item->psz_text),
WS_CHILD | WS_VISIBLE | SS_LEFT,
hwnd, NULL, hInst, NULL );
encoding_combo = CreateWindow( _T("COMBOBOX"),
- _FROMMB(p_item->psz_value),
+ _FROMMB(p_item->value.psz),
WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST |
LBS_SORT | WS_VSCROLL,
rcClient.right - 150 - 10, 10 + 5*(15 + 10) - 3, 150, 5*15 + 6,
ComboBox_AddString( encoding_combo,
_FROMMB(p_item->ppsz_list[i_index]) );
- if( p_item->psz_value &&
- !strcmp( p_item->psz_value, p_item->ppsz_list[i_index] ) )
+ if( p_item->value.psz &&
+ !strcmp( p_item->value.psz, p_item->ppsz_list[i_index] ) )
ComboBox_SetCurSel( encoding_combo, i_index );
}
- if( p_item->psz_value )
+ if( p_item->value.psz )
{
ComboBox_SelectString( encoding_combo, 0,
- _FROMMB(p_item->psz_value) );
+ _FROMMB(p_item->value.psz) );
}
}
#include <vlc_common.h>
#include <vlc_aout.h>
#include <vlc_interface.h>
+#include <vlc_input.h>
+#include <vlc_playlist.h>
#include "wince.h"
ShowWindow( p_main_interface->hwndVol, SW_SHOW );
// only for local file, check if works well with net url
- shortname = strrchr( p_intf->p_sys->p_input->input.p_item->psz_name, '\\' );
+ input_item_t *p_item =input_GetItem(p_intf->p_sys->p_input);
+ shortname = strrchr( input_item_GetURL(p_item), '\\' );
if (! shortname)
- shortname = p_intf->p_sys->p_input->input.p_item->psz_name;
+ shortname = input_item_GetURL(p_item);
else shortname++;
SendMessage( p_main_interface->hwndSB, SB_SETTEXT,
p_vout = NULL;
- p_intf->pf_request_window = ::GetWindow;
- p_intf->pf_release_window = ::ReleaseWindow;
- p_intf->pf_control_window = ::ControlWindow;
+ // Changeset 138da19...
+ //p_intf->pf_request_window = ::GetWindow;
+ //p_intf->pf_release_window = ::ReleaseWindow;
+ //p_intf->pf_control_window = ::ControlWindow;
p_intf->p_sys->p_video_window = this;
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_interface.h>
+#include <vlc_input.h>
#if defined( UNDER_CE ) && defined(__MINGW32__)
/* This is a gross hack for the wince gcc cross-compiler */
static int OpenDialogs( vlc_object_t * );
-static void* MainLoop ( intf_thread_t * );
+static void* MainLoop ( vlc_object_t * );
static void ShowDialog( intf_thread_t *, int, int, intf_dialog_args_t * );
/*****************************************************************************
"of having it in a separate window.")
vlc_module_begin();
+ set_shortname( "WinCE" );
set_description( (char *) _("WinCE interface module") );
set_capability( "interface", 100 );
set_callbacks( Open, Close );
add_shortcut( "wince" );
+ set_category( CAT_INTERFACE );
+ set_subcategory( SUBCAT_INTERFACE_MAIN );
add_bool( "wince-embed", 1, NULL,
EMBED_TEXT, EMBED_LONGTEXT, false );
static void Close( vlc_object_t *p_this )
{
intf_thread_t *p_intf = (intf_thread_t *)p_this;
+ intf_sys_t *p_sys = p_intf->p_sys;
- if( p_intf->p_sys->p_input )
+ if( p_sys->p_input )
{
- vlc_object_release( p_intf->p_sys->p_input );
+ vlc_object_release( p_sys->p_input );
}
MenuItemExt::ClearList( p_intf->p_sys->p_video_menu );
/* The module is used in dialog provider mode */
/* Create a new thread for the dialogs provider */
- if( vlc_thread_create( p_intf, "Skins Dialogs Thread",
+ if( vlc_thread_create( p_intf, "WinCE Dialogs Thread",
MainLoop, 0, true ) )
{
- msg_Err( p_intf, "cannot create Skins Dialogs Thread" );
+ msg_Err( p_intf, "cannot create WinCE Dialogs Thread" );
p_intf->pf_show_dialog = NULL;
}
}
{
int canc = vlc_savecancel();
/* The module is used in interface mode */
- MainLoop( p_intf );
+ MainLoop( VLC_OBJECT(p_intf) );
vlc_restorecancel( canc );
}
}
\r
// Icon with lowest ID value placed first to ensure application icon\r
// remains consistent on all systems.\r
-#ifdef __MINGW32__\r
+#ifdef UNDER_CE
IDI_ICON1 ICON DISCARDABLE "bitmaps/vlc16x16.ico"\r
#else\r
IDI_ICON1 ICON DISCARDABLE "bitmaps\\vlc16x16.ico"\r
/////////////////////////////////////////////////////////////////////////////\r
//\r
// Bitmap\r
-//\r
-\r
-#ifdef __MINGW32__\r
+//
+
+#ifdef UNDER_CE
IDB_BITMAP1 BITMAP DISCARDABLE "bitmaps/toolbar1.bmp"\r
IDB_BITMAP2 BITMAP DISCARDABLE "bitmaps/toolbar2.bmp"\r
IDB_BITMAP3 BITMAP DISCARDABLE "bitmaps/toolbar3.bmp"\r