/*****************************************************************************
* playlist_item.cpp : Manage playlist item
****************************************************************************
- * Copyright (C) 2006-2007 the VideoLAN team
+ * Copyright © 2006-2008 the VideoLAN team
* $Id$
*
* Authors: Clément Stenac <zorglub@videolan.org>
+ * Jean-Baptiste Kempf <jb@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
#include "qt4.hpp"
#include "components/playlist/playlist_model.hpp"
-#include "dialogs/mediainfo.hpp"
#include <vlc_intf_strings.h>
-#include "pixmaps/type_unknown.xpm"
+#include <QSettings>
+
+#include "sorting.h"
/*************************************************************************
* Playlist item implementation
*/
-void PLItem::init( int _i_id, int _i_input_id, PLItem *parent, PLModel *m )
+void PLItem::init( int _i_id, int _i_input_id, PLItem *parent, PLModel *m, QSettings *settings )
{
parentItem = parent; /* Can be NULL, but only for the rootItem */
i_id = _i_id; /* Playlist item specific id */
assert( model ); /* We need a model */
- /* No parent, should be the main one */
+ /* No parent, should be the 2 main ones */
if( parentItem == NULL )
{
- i_showflags = config_GetInt( model->p_intf, "qt-pl-showflags" );
- updateColumnHeaders();
+ if( model->i_depth == DEPTH_SEL ) /* Selector Panel */
+ {
+ item_col_strings.append( "" );
+ }
+ else
+ {
+ i_showflags = settings->value( "qt-pl-showflags", 39 ).toInt();
+ if( i_showflags < 1)
+ i_showflags = 39; /* reasonable default to show something; */
+ else if ( i_showflags >= COLUMN_END )
+ i_showflags = COLUMN_END - 1; /* show everything */
+
+ updateColumnHeaders();
+ }
}
else
{
//Add empty string and update() handles data appending
item_col_strings.append( "" );
}
- msg_Dbg( model->p_intf, "PLItem created of type: %i", model->i_depth );
}
/*
*/
PLItem::PLItem( int _i_id, int _i_input_id, PLItem *parent, PLModel *m )
{
- init( _i_id, _i_input_id, parent, m );
+ init( _i_id, _i_input_id, parent, m, NULL );
}
PLItem::PLItem( playlist_item_t * p_item, PLItem *parent, PLModel *m )
{
- init( p_item->i_id, p_item->p_input->i_id, parent, m );
+ init( p_item->i_id, p_item->p_input->i_id, parent, m, NULL );
+}
+
+PLItem::PLItem( playlist_item_t * p_item, QSettings *settings, PLModel *m )
+{
+ init( p_item->i_id, p_item->p_input->i_id, NULL, m, settings );
}
PLItem::~PLItem()
{
item_col_strings.clear();
- if( model->i_depth == 1 ) /* Selector Panel */
- {
- item_col_strings.append( "" );
- return;
- }
+ assert( i_showflags < COLUMN_END );
- for( int i_index=1; i_index <= VLC_META_ENGINE_ART_URL; i_index *= 2 )
+ for( uint32_t i_index=1; i_index < COLUMN_END; i_index <<= 1 )
{
if( i_showflags & i_index )
- {
- switch( i_index )
- {
- case VLC_META_ENGINE_ARTIST:
- item_col_strings.append( qtr( VLC_META_ARTIST ) );
- break;
- case VLC_META_ENGINE_TITLE:
- item_col_strings.append( qtr( VLC_META_TITLE ) );
- break;
- case VLC_META_ENGINE_DESCRIPTION:
- item_col_strings.append( qtr( VLC_META_DESCRIPTION ) );
- break;
- case VLC_META_ENGINE_DURATION:
- item_col_strings.append( qtr( "Duration" ) );
- break;
- case VLC_META_ENGINE_GENRE:
- item_col_strings.append( qtr( VLC_META_GENRE ) );
- break;
- case VLC_META_ENGINE_COLLECTION:
- item_col_strings.append( qtr( VLC_META_COLLECTION ) );
- break;
- case VLC_META_ENGINE_SEQ_NUM:
- item_col_strings.append( qtr( VLC_META_SEQ_NUM ) );
- break;
- case VLC_META_ENGINE_RATING:
- item_col_strings.append( qtr( VLC_META_RATING ) );
- break;
- default:
- break;
- }
- }
+ item_col_strings.append( qfu( psz_column_title( i_index ) ) );
}
}
}
/* update the PL Item, get the good names and so on */
+/* This function may not be the best way to do it
+ It destroys everything and gets everything again instead of just
+ building the necessary columns.
+ This does extra work if you re-display the same column. Slower...
+ On the other hand, this way saves memory.
+ There must be a more clever way.
+ */
void PLItem::update( playlist_item_t *p_item, bool iscurrent )
{
char psz_duration[MSTRTIME_MAX_SIZE];
assert( p_item->p_input->i_id == i_input_id );
+ /* Useful for the model */
i_type = p_item->p_input->i_type;
b_current = iscurrent;
return;
}
-#define ADD_META( item, meta ) \
- psz_meta = input_item_Get ## meta ( item->p_input ); \
- item_col_strings.append( qfu( psz_meta ) ); \
- free( psz_meta );
+ assert( parentItem->i_showflags < COLUMN_END );
- for( int i_index=1; i_index <= VLC_META_ENGINE_ART_URL; i_index *= 2 )
+ for( uint32_t i_index=1; i_index < COLUMN_END; i_index <<= 1 )
{
if( parentItem->i_showflags & i_index )
{
- switch( i_index )
- {
- case VLC_META_ENGINE_ARTIST:
- ADD_META( p_item, Artist );
- break;
- case VLC_META_ENGINE_TITLE:
- char *psz_title;
- psz_title = input_item_GetTitle( p_item->p_input );
- if( psz_title )
- {
- ADD_META( p_item, Title );
- free( psz_title );
- }
- else
- {
- psz_title = input_item_GetName( p_item->p_input );
- if( psz_title )
- {
- item_col_strings.append( qfu( psz_title ) );
- }
- free( psz_title );
- }
- break;
- case VLC_META_ENGINE_DESCRIPTION:
- ADD_META( p_item, Description );
- break;
- case VLC_META_ENGINE_DURATION:
- secstotimestr( psz_duration,
- input_item_GetDuration( p_item->p_input ) / 1000000 );
- item_col_strings.append( QString( psz_duration ) );
- break;
- case VLC_META_ENGINE_GENRE:
- ADD_META( p_item, Genre );
- break;
- case VLC_META_ENGINE_COLLECTION:
- ADD_META( p_item, Album );
- break;
- case VLC_META_ENGINE_SEQ_NUM:
- ADD_META( p_item, TrackNum );
- break;
- case VLC_META_ENGINE_RATING:
- ADD_META( p_item, Rating );
- default:
- break;
- }
+ char *psz = psz_column_meta( p_item->p_input, i_index );
+ item_col_strings.append( qfu( psz ) );
+ free( psz );
}
-
}
-#undef ADD_META
}
-