Commit bfc41c35 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Qt: stick to playlist item IDs, do not use input item IDs

parent 3e6f6869
...@@ -267,7 +267,7 @@ void LocationBar::setIndex( const QModelIndex &index ) ...@@ -267,7 +267,7 @@ void LocationBar::setIndex( const QModelIndex &index )
actions.append( action ); actions.append( action );
CONNECT( btn, clicked(), action, trigger() ); CONNECT( btn, clicked(), action, trigger() );
mapper->setMapping( action, model->itemId( i, PLAYLIST_ID ) ); mapper->setMapping( action, model->itemId( i ) );
CONNECT( action, triggered(), mapper, map() ); CONNECT( action, triggered(), mapper, map() );
first = false; first = false;
......
...@@ -85,18 +85,9 @@ PLItem::~PLItem() ...@@ -85,18 +85,9 @@ PLItem::~PLItem()
children.clear(); children.clear();
} }
int PLItem::id( int type ) const int PLItem::id() const
{ {
switch( type ) return i_playlist_id;
{
case INPUTITEM_ID:
return p_input->i_id;
case PLAYLIST_ID:
return i_playlist_id;
default:
vlc_assert_unreachable();
return -1;
}
} }
void PLItem::takeChildAt( int index ) void PLItem::takeChildAt( int index )
......
...@@ -34,12 +34,6 @@ ...@@ -34,12 +34,6 @@
#include <QString> #include <QString>
#include <QUrl> #include <QUrl>
enum
{
INPUTITEM_ID = 1,
PLAYLIST_ID,
};
class AbstractPLItem class AbstractPLItem
{ {
friend class PLItem; /* super ugly glue stuff */ friend class PLItem; /* super ugly glue stuff */
...@@ -52,7 +46,7 @@ public: ...@@ -52,7 +46,7 @@ public:
virtual ~AbstractPLItem() {} virtual ~AbstractPLItem() {}
protected: protected:
virtual int id( int type ) const = 0; virtual int id( ) const = 0;
int childCount() const { return children.count(); } int childCount() const { return children.count(); }
int indexOf( AbstractPLItem *item ) const { return children.indexOf( item ); }; int indexOf( AbstractPLItem *item ) const { return children.indexOf( item ); };
int lastIndexOf( AbstractPLItem *item ) const { return children.lastIndexOf( item ); }; int lastIndexOf( AbstractPLItem *item ) const { return children.lastIndexOf( item ); };
...@@ -82,7 +76,7 @@ public: ...@@ -82,7 +76,7 @@ public:
private: private:
/* AbstractPLItem */ /* AbstractPLItem */
int id( int type ) const Q_DECL_OVERRIDE; int id() const Q_DECL_OVERRIDE;
input_item_t *inputItem() Q_DECL_OVERRIDE { return p_input; } input_item_t *inputItem() Q_DECL_OVERRIDE { return p_input; }
AbstractPLItem *child( int id ) const Q_DECL_OVERRIDE { return children.value( id ); }; AbstractPLItem *child( int id ) const Q_DECL_OVERRIDE { return children.value( id ); };
virtual QUrl getURI() const Q_DECL_OVERRIDE; virtual QUrl getURI() const Q_DECL_OVERRIDE;
......
...@@ -220,7 +220,7 @@ void PLModel::dropMove( const PlMimeData * plMimeData, PLItem *target, int row ) ...@@ -220,7 +220,7 @@ void PLModel::dropMove( const PlMimeData * plMimeData, PLItem *target, int row )
playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input ); playlist_item_t *p_item = playlist_ItemGetByInput( p_playlist, p_input );
if( !p_item ) continue; if( !p_item ) continue;
PLItem *item = findByInputId( rootItem, p_input->i_id ); PLItem *item = findByInput( rootItem, p_input );
if( !item ) continue; if( !item ) continue;
/* Better not try to move a node into itself. /* Better not try to move a node into itself.
...@@ -282,7 +282,7 @@ void PLModel::activateItem( playlist_item_t *p_item ) ...@@ -282,7 +282,7 @@ void PLModel::activateItem( playlist_item_t *p_item )
playlist_item_t *p_parent = p_item; playlist_item_t *p_parent = p_item;
while( p_parent ) while( p_parent )
{ {
if( p_parent->i_id == rootItem->id( PLAYLIST_ID ) ) break; if( p_parent->i_id == rootItem->id() ) break;
p_parent = p_parent->p_parent; p_parent = p_parent->p_parent;
} }
if( p_parent ) if( p_parent )
...@@ -414,7 +414,7 @@ bool PLModel::isLeaf( const QModelIndex &index ) const ...@@ -414,7 +414,7 @@ bool PLModel::isLeaf( const QModelIndex &index ) const
vlc_playlist_locker pl_lock ( THEPL ); vlc_playlist_locker pl_lock ( THEPL );
playlist_item_t *plItem = playlist_item_t *plItem =
playlist_ItemGetById( p_playlist, itemId( index, PLAYLIST_ID ) ); playlist_ItemGetById( p_playlist, itemId( index ) );
if( plItem ) if( plItem )
b_isLeaf = plItem->i_children == -1; b_isLeaf = plItem->i_children == -1;
...@@ -446,19 +446,19 @@ QModelIndex PLModel::indexByPLID( const int i_plid, const int c ) const ...@@ -446,19 +446,19 @@ QModelIndex PLModel::indexByPLID( const int i_plid, const int c ) const
return index( findByPLId( rootItem, i_plid ), c ); return index( findByPLId( rootItem, i_plid ), c );
} }
QModelIndex PLModel::indexByInputItemID( const int i_inputitem_id, const int c ) const QModelIndex PLModel::indexByInputItem( const input_item_t *item, const int c ) const
{ {
return index( findByInputId( rootItem, i_inputitem_id ), c ); return index( findByInput( rootItem, item ), c );
} }
QModelIndex PLModel::rootIndex() const QModelIndex PLModel::rootIndex() const
{ {
return index( findByPLId( rootItem, rootItem->id( PLAYLIST_ID ) ), 0 ); return index( findByPLId( rootItem, rootItem->id() ), 0 );
} }
bool PLModel::isTree() const bool PLModel::isTree() const
{ {
return ( ( rootItem && rootItem->id( PLAYLIST_ID ) != p_playlist->p_playing->i_id ) return ( ( rootItem && rootItem->id() != p_playlist->p_playing->i_id )
|| var_InheritBool( p_intf, "playlist-tree" ) ); || var_InheritBool( p_intf, "playlist-tree" ) );
} }
...@@ -477,7 +477,7 @@ QModelIndex PLModel::currentIndex() const ...@@ -477,7 +477,7 @@ QModelIndex PLModel::currentIndex() const
{ {
input_thread_t *p_input_thread = THEMIM->getInput(); input_thread_t *p_input_thread = THEMIM->getInput();
if( !p_input_thread ) return QModelIndex(); if( !p_input_thread ) return QModelIndex();
PLItem *item = findByInputId( rootItem, input_GetItem( p_input_thread )->i_id ); PLItem *item = findByInput( rootItem, input_GetItem( p_input_thread ) );
return index( item, 0 ); return index( item, 0 );
} }
...@@ -509,40 +509,23 @@ int PLModel::rowCount( const QModelIndex &parent ) const ...@@ -509,40 +509,23 @@ int PLModel::rowCount( const QModelIndex &parent ) const
} }
/************************* Lookups *****************************/ /************************* Lookups *****************************/
PLItem *PLModel::findByPLId( PLItem *root, int i_plitemid ) const PLItem *PLModel::findByPLId( PLItem *root, int i_id ) const
{
return findInner( root, i_plitemid, false );
}
PLItem *PLModel::findByInputId( PLItem *root, int i_input_itemid ) const
{
PLItem *result = findInner( root, i_input_itemid, true );
return result;
}
PLItem * PLModel::findInner( PLItem *root, int i_id, bool b_isinputid ) const
{ {
if( !root ) return NULL; if( !root ) return NULL;
if( !b_isinputid && root->id( PLAYLIST_ID ) == i_id ) if( root->id() == i_id )
return root;
else if( b_isinputid && root->id( INPUTITEM_ID ) == i_id )
return root; return root;
QList<AbstractPLItem *>::iterator it = root->children.begin(); QList<AbstractPLItem *>::iterator it = root->children.begin();
while ( it != root->children.end() ) while ( it != root->children.end() )
{ {
PLItem *item = static_cast<PLItem *>(*it); PLItem *item = static_cast<PLItem *>(*it);
if( !b_isinputid && item->id( PLAYLIST_ID ) == i_id ) if( item->id() == i_id )
return item;
else if( b_isinputid && item->id( INPUTITEM_ID ) == i_id )
return item; return item;
if( item->childCount() ) if( item->childCount() )
{ {
PLItem *childFound = findInner( item, i_id, b_isinputid ); PLItem *childFound = findByPLId( item, i_id );
if( childFound ) if( childFound )
return childFound; return childFound;
} }
...@@ -551,6 +534,21 @@ PLItem * PLModel::findInner( PLItem *root, int i_id, bool b_isinputid ) const ...@@ -551,6 +534,21 @@ PLItem * PLModel::findInner( PLItem *root, int i_id, bool b_isinputid ) const
return NULL; return NULL;
} }
PLItem *PLModel::findByInput( PLItem *root, const input_item_t *input ) const
{
int i_id;
{
playlist_item_t *item;
vlc_playlist_locker pl_lock ( THEPL );
item = playlist_ItemGetByInput( THEPL, input );
if( item == NULL )
return NULL;
i_id = item->i_id;
}
return findByPLId( root, i_id );
}
PLModel::pl_nodetype PLModel::getPLRootType() const PLModel::pl_nodetype PLModel::getPLRootType() const
{ {
vlc_playlist_locker pl_lock ( THEPL ); vlc_playlist_locker pl_lock ( THEPL );
...@@ -559,11 +557,11 @@ PLModel::pl_nodetype PLModel::getPLRootType() const ...@@ -559,11 +557,11 @@ PLModel::pl_nodetype PLModel::getPLRootType() const
AbstractPLItem *plitem = rootItem; AbstractPLItem *plitem = rootItem;
while( plitem->parent() )plitem = plitem->parent(); while( plitem->parent() )plitem = plitem->parent();
if( plitem->id( PLAYLIST_ID ) == p_playlist->p_playing->i_id ) if( plitem->id() == p_playlist->p_playing->i_id )
return ROOTTYPE_CURRENT_PLAYING; return ROOTTYPE_CURRENT_PLAYING;
if( p_playlist->p_media_library && if( p_playlist->p_media_library &&
plitem->id( PLAYLIST_ID ) == p_playlist->p_media_library->i_id ) plitem->id() == p_playlist->p_media_library->i_id )
return ROOTTYPE_MEDIA_LIBRARY; return ROOTTYPE_MEDIA_LIBRARY;
return ROOTTYPE_OTHER; return ROOTTYPE_OTHER;
...@@ -582,7 +580,7 @@ void PLModel::processInputItemUpdate( ) ...@@ -582,7 +580,7 @@ void PLModel::processInputItemUpdate( )
input_thread_t *p_input = THEMIM->getInput(); input_thread_t *p_input = THEMIM->getInput();
if( !p_input ) return; if( !p_input ) return;
PLItem *item = findByInputId( rootItem, input_GetItem( p_input )->i_id ); PLItem *item = findByInput( rootItem, input_GetItem( p_input ) );
if( item ) emit currentIndexChanged( index( item, 0 ) ); if( item ) emit currentIndexChanged( index( item, 0 ) );
processInputItemUpdate( input_GetItem( p_input ) ); processInputItemUpdate( input_GetItem( p_input ) );
...@@ -591,7 +589,7 @@ void PLModel::processInputItemUpdate( ) ...@@ -591,7 +589,7 @@ void PLModel::processInputItemUpdate( )
void PLModel::processInputItemUpdate( input_item_t *p_item ) void PLModel::processInputItemUpdate( input_item_t *p_item )
{ {
if( !p_item ) return; if( !p_item ) return;
PLItem *item = findByInputId( rootItem, p_item->i_id ); PLItem *item = findByInput( rootItem, p_item );
if( item ) if( item )
updateTreeItem( item ); updateTreeItem( item );
} }
...@@ -614,7 +612,7 @@ void PLModel::processItemAppend( int i_pl_itemid, int i_pl_itemidparent ) ...@@ -614,7 +612,7 @@ void PLModel::processItemAppend( int i_pl_itemid, int i_pl_itemidparent )
/* Search for an already matching children */ /* Search for an already matching children */
foreach( AbstractPLItem *existing, nodeParentItem->children ) foreach( AbstractPLItem *existing, nodeParentItem->children )
if( existing->id( PLAYLIST_ID ) == i_pl_itemid ) return; if( existing->id() == i_pl_itemid ) return;
/* Find the child */ /* Find the child */
{ {
...@@ -713,7 +711,7 @@ void PLModel::removeItem( PLItem *item ) ...@@ -713,7 +711,7 @@ void PLModel::removeItem( PLItem *item )
/* This function must be entered WITH the playlist lock */ /* This function must be entered WITH the playlist lock */
void PLModel::updateChildren( PLItem *root ) void PLModel::updateChildren( PLItem *root )
{ {
playlist_item_t *p_node = playlist_ItemGetById( p_playlist, root->id( PLAYLIST_ID ) ); playlist_item_t *p_node = playlist_ItemGetById( p_playlist, root->id() );
updateChildren( p_node, root ); updateChildren( p_node, root );
} }
...@@ -781,7 +779,7 @@ void PLModel::recurseDelete( QList<AbstractPLItem*> children, QModelIndexList *f ...@@ -781,7 +779,7 @@ void PLModel::recurseDelete( QList<AbstractPLItem*> children, QModelIndexList *f
/******* Volume III: Sorting and searching ********/ /******* Volume III: Sorting and searching ********/
void PLModel::sort( const int column, Qt::SortOrder order ) void PLModel::sort( const int column, Qt::SortOrder order )
{ {
sort( QModelIndex(), indexByPLID( rootItem->id( PLAYLIST_ID ), 0 ) , column, order ); sort( QModelIndex(), indexByPLID( rootItem->id(), 0 ) , column, order );
} }
void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column, Qt::SortOrder order ) void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column, Qt::SortOrder order )
...@@ -799,7 +797,7 @@ void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column, ...@@ -799,7 +797,7 @@ void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column,
? static_cast<AbstractPLItem*>( caller.internalPointer() )->inputItem() ? static_cast<AbstractPLItem*>( caller.internalPointer() )->inputItem()
: NULL; : NULL;
int i_root_id = item->id( PLAYLIST_ID ); int i_root_id = item->id();
QModelIndex qIndex = index( item, 0 ); QModelIndex qIndex = index( item, 0 );
int count = item->childCount(); int count = item->childCount();
...@@ -834,7 +832,7 @@ void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column, ...@@ -834,7 +832,7 @@ void PLModel::sort( QModelIndex caller, QModelIndex rootIndex, const int column,
/* if we have popup item, try to make sure that you keep that item visible */ /* if we have popup item, try to make sure that you keep that item visible */
if( p_caller_item ) if( p_caller_item )
{ {
QModelIndex idx = indexByInputItemID( p_caller_item->i_id, 0 ); QModelIndex idx = indexByInputItem( p_caller_item, 0 );
emit currentIndexChanged( idx ); emit currentIndexChanged( idx );
} }
...@@ -851,7 +849,7 @@ void PLModel::filter( const QString& search_text, const QModelIndex & idx, bool ...@@ -851,7 +849,7 @@ void PLModel::filter( const QString& search_text, const QModelIndex & idx, bool
vlc_playlist_locker pl_lock ( THEPL ); vlc_playlist_locker pl_lock ( THEPL );
playlist_item_t *p_root = playlist_ItemGetById( p_playlist, playlist_item_t *p_root = playlist_ItemGetById( p_playlist,
itemId( idx, PLAYLIST_ID ) ); itemId( idx ) );
assert( p_root ); assert( p_root );
playlist_LiveSearchUpdate( p_playlist, p_root, qtu( search_text ), playlist_LiveSearchUpdate( p_playlist, p_root, qtu( search_text ),
b_recursive ); b_recursive );
...@@ -896,7 +894,7 @@ void PLModel::createNode( QModelIndex index, QString name ) ...@@ -896,7 +894,7 @@ void PLModel::createNode( QModelIndex index, QString name )
index = index.parent(); index = index.parent();
if ( !index.isValid() ) index = rootIndex(); if ( !index.isValid() ) index = rootIndex();
playlist_item_t *p_item = playlist_ItemGetById( p_playlist, itemId( index, PLAYLIST_ID ) ); playlist_item_t *p_item = playlist_ItemGetById( p_playlist, itemId( index ) );
if( p_item ) if( p_item )
playlist_NodeCreate( p_playlist, qtu( name ), p_item, PLAYLIST_END, 0, NULL ); playlist_NodeCreate( p_playlist, qtu( name ), p_item, PLAYLIST_END, 0, NULL );
} }
...@@ -947,7 +945,7 @@ bool PLModel::action( QAction *action, const QModelIndexList &indexes ) ...@@ -947,7 +945,7 @@ bool PLModel::action( QAction *action, const QModelIndexList &indexes )
foreach( const QModelIndex &currentIndex, indexes ) foreach( const QModelIndex &currentIndex, indexes )
{ {
playlist_item_t *p_item = playlist_ItemGetById( THEPL, itemId( currentIndex, PLAYLIST_ID ) ); playlist_item_t *p_item = playlist_ItemGetById( THEPL, itemId( currentIndex ) );
if( !p_item ) continue; if( !p_item ) continue;
playlist_NodeAddCopy( THEPL, p_item, playlist_NodeAddCopy( THEPL, p_item,
......
...@@ -101,7 +101,7 @@ public: ...@@ -101,7 +101,7 @@ public:
virtual void filter( const QString& search_text, const QModelIndex & root, bool b_recursive ) Q_DECL_OVERRIDE; virtual void filter( const QString& search_text, const QModelIndex & root, bool b_recursive ) Q_DECL_OVERRIDE;
virtual QModelIndex currentIndex() const Q_DECL_OVERRIDE; virtual QModelIndex currentIndex() const Q_DECL_OVERRIDE;
virtual QModelIndex indexByPLID( const int i_plid, const int c ) const Q_DECL_OVERRIDE; virtual QModelIndex indexByPLID( const int i_plid, const int c ) const Q_DECL_OVERRIDE;
virtual QModelIndex indexByInputItemID( const int i_inputitem_id, const int c ) const Q_DECL_OVERRIDE; virtual QModelIndex indexByInputItem( const input_item_t *, const int c ) const Q_DECL_OVERRIDE;
virtual bool isTree() const Q_DECL_OVERRIDE; virtual bool isTree() const Q_DECL_OVERRIDE;
virtual bool canEdit() const Q_DECL_OVERRIDE; virtual bool canEdit() const Q_DECL_OVERRIDE;
virtual bool action( QAction *action, const QModelIndexList &indexes ) Q_DECL_OVERRIDE; virtual bool action( QAction *action, const QModelIndexList &indexes ) Q_DECL_OVERRIDE;
...@@ -142,8 +142,7 @@ private: ...@@ -142,8 +142,7 @@ private:
/* Lookups */ /* Lookups */
PLItem *findByPLId( PLItem *, int i_plitemid ) const; PLItem *findByPLId( PLItem *, int i_plitemid ) const;
PLItem *findByInputId( PLItem *, int i_input_itemid ) const; PLItem *findByInput( PLItem *, const input_item_t * ) const;
PLItem *findInner(PLItem *, int i_id, bool b_isinputid ) const;
enum pl_nodetype enum pl_nodetype
{ {
ROOTTYPE_CURRENT_PLAYING, ROOTTYPE_CURRENT_PLAYING,
......
...@@ -144,7 +144,7 @@ void StandardPLPanel::gotoPlayingItem() ...@@ -144,7 +144,7 @@ void StandardPLPanel::gotoPlayingItem()
void StandardPLPanel::handleExpansion( const QModelIndex& index ) void StandardPLPanel::handleExpansion( const QModelIndex& index )
{ {
assert( currentView ); assert( currentView );
if( currentRootIndexPLId != -1 && currentRootIndexPLId != model->itemId( index.parent(), PLAYLIST_ID ) ) if( currentRootIndexPLId != -1 && currentRootIndexPLId != model->itemId( index.parent() ) )
browseInto( index.parent() ); browseInto( index.parent() );
currentView->scrollTo( index ); currentView->scrollTo( index );
} }
...@@ -509,7 +509,7 @@ void StandardPLPanel::browseInto( const QModelIndex &index ) ...@@ -509,7 +509,7 @@ void StandardPLPanel::browseInto( const QModelIndex &index )
currentView->scrollTo( newIndex ); currentView->scrollTo( newIndex );
/* Store new rootindexid*/ /* Store new rootindexid*/
currentRootIndexPLId = model->itemId( index, PLAYLIST_ID ); currentRootIndexPLId = model->itemId( index );
model->ensureArtRequested( index ); model->ensureArtRequested( index );
} }
...@@ -802,7 +802,7 @@ void StandardPLPanel::activate( const QModelIndex &index ) ...@@ -802,7 +802,7 @@ void StandardPLPanel::activate( const QModelIndex &index )
else else
{ {
playlist_Lock( THEPL ); playlist_Lock( THEPL );
playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index, PLAYLIST_ID ) ); playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index ) );
if ( p_item ) if ( p_item )
{ {
p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG; p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG;
......
...@@ -145,11 +145,11 @@ int VLCModel::metaToColumn( int _meta ) ...@@ -145,11 +145,11 @@ int VLCModel::metaToColumn( int _meta )
return column; return column;
} }
int VLCModel::itemId( const QModelIndex &index, int type ) const int VLCModel::itemId( const QModelIndex &index ) const
{ {
AbstractPLItem *item = getItem( index ); AbstractPLItem *item = getItem( index );
if ( !item ) return -1; if ( !item ) return -1;
return item->id( type ); return item->id();
} }
AbstractPLItem *VLCModel::getItem( const QModelIndex &index ) const AbstractPLItem *VLCModel::getItem( const QModelIndex &index ) const
......
...@@ -71,8 +71,8 @@ public: ...@@ -71,8 +71,8 @@ public:
virtual void filter( const QString& search_text, const QModelIndex & root, bool b_recursive ) = 0; virtual void filter( const QString& search_text, const QModelIndex & root, bool b_recursive ) = 0;
virtual QModelIndex currentIndex() const = 0; virtual QModelIndex currentIndex() const = 0;
virtual QModelIndex indexByPLID( const int i_plid, const int c ) const = 0; virtual QModelIndex indexByPLID( const int i_plid, const int c ) const = 0;
virtual QModelIndex indexByInputItemID( const int i_inputitem_id, const int c ) const = 0; virtual QModelIndex indexByInputItem( const input_item_t *, const int c ) const = 0;
virtual int itemId( const QModelIndex &, int type ) const = 0; virtual int itemId( const QModelIndex & ) const = 0;
virtual bool isTree() const = 0; virtual bool isTree() const = 0;
virtual bool canEdit() const = 0; virtual bool canEdit() const = 0;
virtual QString getURI( const QModelIndex &index ) const = 0; virtual QString getURI( const QModelIndex &index ) const = 0;
...@@ -129,7 +129,7 @@ public: ...@@ -129,7 +129,7 @@ public:
QVariant headerData( int, Qt::Orientation, int ) const Q_DECL_OVERRIDE; QVariant headerData( int, Qt::Orientation, int ) const Q_DECL_OVERRIDE;
/*** VLCModelSubInterface subclassing ***/ /*** VLCModelSubInterface subclassing ***/
int itemId( const QModelIndex &, int type ) const Q_DECL_OVERRIDE; int itemId( const QModelIndex & ) const Q_DECL_OVERRIDE;
QString getURI( const QModelIndex &index ) const Q_DECL_OVERRIDE; QString getURI( const QModelIndex &index ) const Q_DECL_OVERRIDE;
input_item_t *getInputItem( const QModelIndex & ) const Q_DECL_OVERRIDE; input_item_t *getInputItem( const QModelIndex & ) const Q_DECL_OVERRIDE;
QString getTitle( const QModelIndex &index ) const Q_DECL_OVERRIDE; QString getTitle( const QModelIndex &index ) const Q_DECL_OVERRIDE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment