#include <vlc_playlist.h>
#include <vlc_services_discovery.h>
+void SelectorActionButton::paintEvent( QPaintEvent *event )
+{
+ QPainter p( this );
+ QColor color = palette().color( QPalette::HighlightedText );
+ color.setAlpha( 80 );
+ if( underMouse() )
+ p.fillRect( rect(), color );
+ p.setPen( color );
+ int frame = style()->pixelMetric( QStyle::PM_DefaultFrameWidth, 0, this );
+ p.drawLine( rect().topLeft() + QPoint( 0, frame ),
+ rect().bottomLeft() - QPoint( 0, frame ) );
+ QVLCFramelessButton::paintEvent( event );
+}
+
PLSelItem::PLSelItem ( QTreeWidgetItem *i, const QString& text )
: qitem(i), lblAction( NULL)
{
layout->setContentsMargins(0,0,0,0);
layout->addSpacing( 3 );
- lbl = new QLabel( text );
+ lbl = new QVLCElidingLabel( text );
layout->addWidget(lbl, 1);
setLayout( layout );
- setMinimumHeight( 22 ); //Action icon height plus 6
+ int height = qMax( 22, fontMetrics().height() + 8 );
+ setMinimumHeight( height );
}
void PLSelItem::addAction( ItemAction act, const QString& tooltip )
icon = QIcon( ":/buttons/playlist/playlist_remove" ); break;
}
- lblAction = new QVLCIconLabel( icon );
+ lblAction = new SelectorActionButton();
+ lblAction->setIcon( icon );
+ lblAction->setMinimumWidth( lblAction->sizeHint().width() + 6 );
if( !tooltip.isEmpty() ) lblAction->setToolTip( tooltip );
layout->addWidget( lblAction, 0 );
lblAction->hide();
- layout->addSpacing( 3 );
CONNECT( lblAction, clicked(), this, triggerAction() );
}
setFrameStyle( QFrame::NoFrame );
viewport()->setAutoFillBackground( false );
setIconSize( QSize( 24,24 ) );
- setIndentation( 14 );
+ setIndentation( 12 );
header()->hide();
setRootIsDecorated( true );
setAlternatingRowColors( false );
PLSelItem *PLSelector::addPodcastItem( playlist_item_t *p_item )
{
- vlc_gc_incref( p_item->p_input );
- char *psz_name = input_item_GetName( p_item->p_input );
- PLSelItem *item = addItem(
- PL_ITEM_TYPE, qfu( psz_name ), false, podcastsParent );
- item->addAction( RM_ACTION, qtr( "Remove this podcast subscription" ) );
- item->treeItem()->setData( 0, PL_ITEM_ROLE, QVariant::fromValue( p_item ) );
- item->treeItem()->setData( 0, PL_ITEM_ID_ROLE, QVariant(p_item->i_id) );
- item->treeItem()->setData( 0, IN_ITEM_ROLE, QVariant::fromValue( p_item->p_input ) );
- CONNECT( item, action( PLSelItem* ), this, podcastRemove( PLSelItem* ) );
- free( psz_name );
- return item;
+ vlc_gc_incref( p_item->p_input );
+ char *psz_name = input_item_GetName( p_item->p_input );
+ PLSelItem *item = addItem(
+ PL_ITEM_TYPE, qfu( psz_name ), false, podcastsParent );
+ item->addAction( RM_ACTION, qtr( "Remove this podcast subscription" ) );
+ item->treeItem()->setData( 0, PL_ITEM_ROLE, QVariant::fromValue( p_item ) );
+ item->treeItem()->setData( 0, PL_ITEM_ID_ROLE, QVariant(p_item->i_id) );
+ item->treeItem()->setData( 0, IN_ITEM_ROLE, QVariant::fromValue( p_item->p_input ) );
+ CONNECT( item, action( PLSelItem* ), this, podcastRemove( PLSelItem* ) );
+ free( psz_name );
+ return item;
}
void PLSelector::createItems()
THEPL->p_media_library );
ml->treeItem()->setData( 0, SPECIAL_ROLE, QVariant( IS_ML ) );
- QTreeWidgetItem *mfldrs = NULL;
-
- QTreeWidgetItem *shouts = NULL;
+ QTreeWidgetItem *mycomp = addItem( CATEGORY_TYPE, qtr( "My Computer" ),
+ false )->treeItem();
+ QTreeWidgetItem *devices = addItem( CATEGORY_TYPE, qtr( "Devices" ),
+ false )->treeItem();
+ QTreeWidgetItem *lan = addItem( CATEGORY_TYPE, qtr( "Local Network" ),
+ false )->treeItem();
+ QTreeWidgetItem *internet = addItem( CATEGORY_TYPE, qtr( "Internet" ),
+ false )->treeItem();;
char **ppsz_longnames;
- char **ppsz_names = vlc_sd_GetNames( THEPL, &ppsz_longnames );
+ int *p_categories;
+ char **ppsz_names = vlc_sd_GetNames( THEPL, &ppsz_longnames, &p_categories );
if( !ppsz_names )
return;
char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames;
- for( ; *ppsz_name; ppsz_name++, ppsz_longname++ )
+ int *p_category = p_categories;
+ for( ; *ppsz_name; ppsz_name++, ppsz_longname++, p_category++ )
{
//msg_Dbg( p_intf, "Adding a SD item: %s", *ppsz_longname );
-#define SD_IS( name ) ( !strcmp( *ppsz_name, name ) )
- if( SD_IS("shoutcast") || SD_IS("shoutcasttv") ||
- SD_IS("frenchtv") || SD_IS("freebox") )
+ if( *p_category == SD_CAT_INTERNET )
{
- if( !shouts ) shouts = addItem( CATEGORY_TYPE, qtr( "Shoutcast" ),
- false )->treeItem();
- putSDData( addItem( SD_TYPE, *ppsz_longname, false, shouts ),
+ PLSelItem *selItem = addItem( SD_TYPE, *ppsz_longname, false, internet );
+ putSDData( selItem, *ppsz_name, *ppsz_longname );
+ if( !strncmp( *ppsz_name, "podcast", 7 ) )
+ {
+ selItem->treeItem()->setData( 0, SPECIAL_ROLE, QVariant( IS_PODCAST ) );
+ selItem->addAction( ADD_ACTION, qtr( "Subscribe to a podcast" ) );
+ CONNECT( selItem, action( PLSelItem* ), this, podcastAdd( PLSelItem* ) );
+ podcastsParent = selItem->treeItem();
+ }
+ }
+ else if( *p_category == SD_CAT_DEVICES )
+ {
+ putSDData( addItem( SD_TYPE, *ppsz_longname, false, devices ),
*ppsz_name, *ppsz_longname );
}
- else if( SD_IS("video_dir") || SD_IS("audio_dir") || SD_IS("picture_dir") )
+ else if( *p_category == SD_CAT_LAN )
{
- if( !mfldrs ) mfldrs = addItem( CATEGORY_TYPE, qtr( "Media Folders" ),
- false )->treeItem();
- putSDData( addItem( SD_TYPE, *ppsz_longname, false, mfldrs ),
+ putSDData( addItem( SD_TYPE, *ppsz_longname, false, lan ),
*ppsz_name, *ppsz_longname );
}
- else if( SD_IS("podcast") )
+ else if( *p_category == SD_CAT_MYCOMPUTER )
{
-
- PLSelItem *podItem = addItem( SD_TYPE, qtr( "Podcasts" ), false );
- putSDData( podItem, *ppsz_name, *ppsz_longname );
- podItem->treeItem()->setData( 0, SPECIAL_ROLE, QVariant( IS_PODCAST ) );
- podItem->addAction( ADD_ACTION, qtr( "Subscribe to a podcast" ) );
- CONNECT( podItem, action( PLSelItem* ), this, podcastAdd( PLSelItem* ) );
-
- podcastsParent = podItem->treeItem();
+ putSDData( addItem( SD_TYPE, *ppsz_longname, false, mycomp ),
+ *ppsz_name, *ppsz_longname );
}
else
{
*ppsz_name, *ppsz_longname );
}
-#undef SD_IS
-
free( *ppsz_name );
free( *ppsz_longname );
}
free( ppsz_names );
free( ppsz_longnames );
+ free( p_categories );
+
+ if( mycomp->childCount() == 0 ) delete mycomp;
+ if( devices->childCount() == 0 ) delete devices;
+ if( lan->childCount() == 0 ) delete lan;
+ if( internet->childCount() == 0 ) delete internet;
}
QStringList PLSelector::mimeTypes() const
void PLSelector::podcastRemove( PLSelItem* item )
{
- //FIXME will translators know to leave that %1 somewhere inside?
QString question ( qtr( "Do you really want to unsubscribe from %1?" ) );
question = question.arg( item->text() );
QMessageBox::StandardButton res =
if( !model()->hasChildren( index ) ) return;
QStyleOption option;
option.initFrom( this );
- option.rect = rect;
- /*option.state = QStyle::State_Children;
- if( isExpanded( index ) ) option.state |= QStyle::State_Open;*/
+ option.rect = rect.adjusted( rect.width() - indentation(), 0, 0, 0 );
style()->drawPrimitive( isExpanded( index ) ?
QStyle::PE_IndicatorArrowDown :
QStyle::PE_IndicatorArrowRight, &option, painter );