Commit cc5e6f6c authored by Clément Stenac's avatar Clément Stenac

Should fix playlist scrolling

playlist-current must not be handled by a full rebuild but by two item updates, on oldval (to remove its playing status) and newval (to give it playing status)
parent d03436e7
...@@ -132,9 +132,6 @@ int CtrlTree::maxItems() ...@@ -132,9 +132,6 @@ int CtrlTree::maxItems()
void CtrlTree::onUpdate( Subject<VarTree> &rTree ) void CtrlTree::onUpdate( Subject<VarTree> &rTree )
{ {
// Invalidate the position when the tree is updated
m_lastPos = m_rTree.begin();
autoScroll(); autoScroll();
m_pLastSelected = NULL; m_pLastSelected = NULL;
} }
...@@ -472,18 +469,15 @@ void CtrlTree::draw( OSGraphics &rImage, int xDest, int yDest ) ...@@ -472,18 +469,15 @@ void CtrlTree::draw( OSGraphics &rImage, int xDest, int yDest )
void CtrlTree::autoScroll() void CtrlTree::autoScroll()
{ {
fprintf( stderr, "Autoscroll start\n");
// Find the current playing stream // Find the current playing stream
int playIndex = 0; int playIndex = 0;
VarTree::Iterator it; VarTree::Iterator it;
for( it = m_rTree.begin(); it != m_rTree.end(); for( it = m_rTree.begin(); it != m_rTree.end();
it = m_rTree.getNextVisibleItem( it ) ) it = m_rTree.getNextVisibleItem( it ) )
{ {
fprintf (stderr, "Checking playindex is %i\n", playIndex);
if( it->m_playing ) break; if( it->m_playing ) break;
playIndex++; playIndex++;
} }
fprintf (stderr, "broke playIndex\n");
if( it == m_rTree.end() ) return; if( it == m_rTree.end() ) return;
...@@ -492,27 +486,23 @@ void CtrlTree::autoScroll() ...@@ -492,27 +486,23 @@ void CtrlTree::autoScroll()
for( it = m_rTree.begin(); it != m_rTree.end(); for( it = m_rTree.begin(); it != m_rTree.end();
it = m_rTree.getNextVisibleItem( it ) ) it = m_rTree.getNextVisibleItem( it ) )
{ {
fprintf (stderr, "Testing, lastPos is %i\n", lastPosIndex );
if( it == m_lastPos ) break; if( it == m_lastPos ) break;
lastPosIndex++; lastPosIndex++;
} }
if( it == m_rTree.end() ) return; if( it == m_rTree.end() ) return;
fprintf( stderr, "I have %i visible\n", maxItems() );
if( it != m_rTree.end() if( it != m_rTree.end()
&& ( playIndex < lastPosIndex && ( playIndex < lastPosIndex
|| playIndex > lastPosIndex + maxItems() ) ) || playIndex > lastPosIndex + maxItems() ) )
{ {
fprintf( stderr, "Need to scroll\n");
// Scroll to have the playing stream visible // Scroll to have the playing stream visible
VarPercent &rVarPos = m_rTree.getPositionVar(); VarPercent &rVarPos = m_rTree.getPositionVar();
rVarPos.set( 1.0 - (double)playIndex / (double)m_rTree.visibleItems() ); rVarPos.set( 1.0 - (double)playIndex / (double)m_rTree.visibleItems() );
} }
else else
{ {
fprintf( stderr, "No need to scroll\n");
makeImage(); makeImage();
notifyLayout(); notifyLayout();
} }
...@@ -584,7 +574,6 @@ void CtrlTree::makeImage() ...@@ -584,7 +574,6 @@ void CtrlTree::makeImage()
bgColor = ( bgColor == m_bgColor1 ? m_bgColor2 : m_bgColor1 ); bgColor = ( bgColor == m_bgColor1 ? m_bgColor2 : m_bgColor1 );
} }
} }
// fprintf( stderr, "done\n");
int bitmapWidth = itemImageWidth(); int bitmapWidth = itemImageWidth();
......
...@@ -351,9 +351,9 @@ int VlcProc::onIntfChange( vlc_object_t *pObj, const char *pVariable, ...@@ -351,9 +351,9 @@ int VlcProc::onIntfChange( vlc_object_t *pObj, const char *pVariable,
playlist_t *p_playlist = (playlist_t*)pObj; playlist_t *p_playlist = (playlist_t*)pObj;
pThis->updateStreamName(p_playlist); pThis->updateStreamName(p_playlist);
// Create a playlist notify command // Create a playlist notify command (for old style playlist)
CmdNotifyPlaylist *pCmd = new CmdNotifyPlaylist( pThis->getIntf() ); CmdNotifyPlaylist *pCmd = new CmdNotifyPlaylist( pThis->getIntf() );
// Create a playtree notify command // Create a playtree notify command (for new style playtree)
CmdPlaytreeChanged *pCmdTree = new CmdPlaytreeChanged( pThis->getIntf() ); CmdPlaytreeChanged *pCmdTree = new CmdPlaytreeChanged( pThis->getIntf() );
// Push the command in the asynchronous command queue // Push the command in the asynchronous command queue
...@@ -424,15 +424,16 @@ int VlcProc::onPlaylistChange( vlc_object_t *pObj, const char *pVariable, ...@@ -424,15 +424,16 @@ int VlcProc::onPlaylistChange( vlc_object_t *pObj, const char *pVariable,
playlist_t *p_playlist = (playlist_t*)pObj; playlist_t *p_playlist = (playlist_t*)pObj;
pThis->updateStreamName(p_playlist); pThis->updateStreamName(p_playlist);
// Create a playlist notify command // Create a playlist notify command (old style playlist)
// TODO: selective update // TODO: selective update
CmdNotifyPlaylist *pCmd = new CmdNotifyPlaylist( pThis->getIntf() ); CmdNotifyPlaylist *pCmd = new CmdNotifyPlaylist( pThis->getIntf() );
// Create a playtree notify command
CmdPlaytreeChanged *pCmdTree = new CmdPlaytreeChanged( pThis->getIntf() );
// Push the command in the asynchronous command queue
pQueue->push( CmdGenericPtr( pCmd ) ); pQueue->push( CmdGenericPtr( pCmd ) );
pQueue->push( CmdGenericPtr( pCmdTree ) ); // Create two playtree notify commands: one for old item, one for new
CmdPlaytreeUpdate *pCmdTree = new CmdPlaytreeUpdate( pThis->getIntf(),
oldVal.i_int );
pQueue->push( CmdGenericPtr( pCmdTree ) , true );
pCmdTree = new CmdPlaytreeUpdate( pThis->getIntf(), newVal.i_int );
pQueue->push( CmdGenericPtr( pCmdTree ) , true );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
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