Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-1.1
Commits
0d26b166
Commit
0d26b166
authored
Dec 04, 2005
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve ensureVisible
parent
a65b3524
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
81 additions
and
12 deletions
+81
-12
modules/gui/skins2/controls/ctrl_tree.cpp
modules/gui/skins2/controls/ctrl_tree.cpp
+25
-7
modules/gui/skins2/src/vlcproc.cpp
modules/gui/skins2/src/vlcproc.cpp
+6
-5
modules/gui/skins2/utils/var_tree.cpp
modules/gui/skins2/utils/var_tree.cpp
+32
-0
modules/gui/skins2/utils/var_tree.hpp
modules/gui/skins2/utils/var_tree.hpp
+7
-0
modules/gui/skins2/vars/playtree.cpp
modules/gui/skins2/vars/playtree.cpp
+8
-0
modules/gui/skins2/vars/playtree.hpp
modules/gui/skins2/vars/playtree.hpp
+3
-0
No files found.
modules/gui/skins2/controls/ctrl_tree.cpp
View file @
0d26b166
...
...
@@ -147,7 +147,10 @@ void CtrlTree::onUpdate( Subject<VarTree, tree_update*> &rTree,
/* TODO: Check if the item should be visible. If it is, makeImage
* Else, do nothing
*/
makeImage
();
if
(
arg
->
b_visible
==
true
)
{
makeImage
();
}
}
notifyLayout
();
m_pLastSelected
=
NULL
;
...
...
@@ -232,7 +235,7 @@ void CtrlTree::handleEvent( EvtGeneric &rEvent )
m_pLastSelected
=
&*
it
;
}
}
//
ensureVisible( it );
ensureVisible
(
it
);
}
else
if
(
key
==
KEY_DOWN
)
{
...
...
@@ -252,7 +255,7 @@ void CtrlTree::handleEvent( EvtGeneric &rEvent )
{
previousWasSelected
=
(
&*
it
==
m_pLastSelected
);
}
//
ensureVisible( it );
ensureVisible
(
it
);
}
else
if
(
key
==
KEY_RIGHT
)
{
...
...
@@ -466,13 +469,16 @@ bool CtrlTree::ensureVisible( VarTree::Iterator item )
// Find the item to focus
int
focusItemIndex
=
0
;
VarTree
::
Iterator
it
;
m_rTree
.
ensureExpanded
(
item
);
for
(
it
=
m_rTree
.
begin
();
it
!=
m_rTree
.
end
();
it
=
m_rTree
.
getNextVisibleItem
(
it
)
)
{
if
(
it
->
m_playing
)
break
;
if
(
it
==
item
)
break
;
focusItemIndex
++
;
}
return
ensureVisible
(
focusItemIndex
);
return
ensureVisible
(
focusItemIndex
);
}
bool
CtrlTree
::
ensureVisible
(
int
focusItemIndex
)
...
...
@@ -494,7 +500,7 @@ bool CtrlTree::ensureVisible( int focusItemIndex )
&&
(
focusItemIndex
<
firstPosIndex
||
focusItemIndex
>
firstPosIndex
+
maxItems
()
)
)
{
// Scroll to have the
playing
stream visible
// Scroll to have the
wanted
stream visible
VarPercent
&
rVarPos
=
m_rTree
.
getPositionVar
();
rVarPos
.
set
(
1.0
-
(
double
)
focusItemIndex
/
(
double
)
m_rTree
.
visibleItems
()
);
...
...
@@ -508,15 +514,27 @@ void CtrlTree::autoScroll()
// Find the current playing stream
int
playIndex
=
0
;
VarTree
::
Iterator
it
;
for
(
it
=
m_rTree
.
begin
();
it
!=
m_rTree
.
end
();
it
=
m_rTree
.
getNextItem
(
it
)
)
{
if
(
it
->
m_playing
)
{
m_rTree
.
ensureExpanded
(
it
);
break
;
}
}
for
(
it
=
m_rTree
.
begin
();
it
!=
m_rTree
.
end
();
it
=
m_rTree
.
getNextVisibleItem
(
it
)
)
{
if
(
it
->
m_playing
)
break
;
if
(
it
->
m_playing
)
break
;
playIndex
++
;
}
if
(
it
==
m_rTree
.
end
()
)
return
;
ensureVisible
(
playIndex
);
}
...
...
modules/gui/skins2/src/vlcproc.cpp
View file @
0d26b166
...
...
@@ -421,17 +421,18 @@ int VlcProc::onItemAppend( vlc_object_t *pObj, const char *pVariable,
memcpy
(
p_add
,
newVal
.
p_address
,
sizeof
(
playlist_add_t
)
)
;
CmdGenericPtr
ptrTree
;
CmdPlaytreeAppend
*
pCmdTree
=
new
CmdPlaytreeAppend
(
pThis
->
getIntf
(),
p_add
);
ptrTree
=
CmdGenericPtr
(
pCmdTree
);
// Create a playlist notify command (for old style playlist)
CmdNotifyPlaylist
*
pCmd
=
new
CmdNotifyPlaylist
(
pThis
->
getIntf
()
);
// Create a playtree notify command (for new style playtree)
CmdPlaytreeAppend
*
pCmdTree
=
new
CmdPlaytreeAppend
(
pThis
->
getIntf
(),
p_add
);
// Push the command in the asynchronous command queue
AsyncQueue
*
pQueue
=
AsyncQueue
::
instance
(
pThis
->
getIntf
()
);
pQueue
->
push
(
CmdGenericPtr
(
pCmd
)
);
pQueue
->
push
(
CmdGenericPtr
(
pCmdTree
)
,
false
);
pQueue
->
push
(
ptrTree
,
false
);
return
VLC_SUCCESS
;
}
...
...
modules/gui/skins2/utils/var_tree.cpp
View file @
0d26b166
...
...
@@ -202,6 +202,26 @@ VarTree::Iterator VarTree::getNextVisibleItem( Iterator it )
return
it
;
}
VarTree
::
Iterator
VarTree
::
getNextItem
(
Iterator
it
)
{
if
(
it
->
size
()
)
{
it
=
it
->
begin
();
}
else
{
VarTree
::
Iterator
it_old
=
it
;
it
++
;
// Was 'it' the last brother? If so, look for uncles
if
(
it_old
->
parent
()
&&
it_old
->
parent
()
->
end
()
==
it
)
{
it
=
it_old
->
uncle
();
}
}
return
it
;
}
VarTree
::
Iterator
VarTree
::
findById
(
int
id
)
{
for
(
Iterator
it
=
begin
();
it
!=
end
();
++
it
)
...
...
@@ -216,3 +236,15 @@ VarTree::Iterator VarTree::findById( int id )
return
end
();
}
void
VarTree
::
ensureExpanded
(
VarTree
::
Iterator
it
)
{
/// Don't expand ourselves, only our parents
VarTree
*
current
=
&
(
*
it
);
current
=
current
->
parent
();
while
(
current
->
parent
()
!=
NULL
)
{
current
->
m_expanded
=
true
;
current
=
current
->
parent
();
}
}
modules/gui/skins2/utils/var_tree.hpp
View file @
0d26b166
...
...
@@ -37,6 +37,7 @@ typedef struct tree_update
int
i_type
;
int
i_parent
;
int
i_id
;
bool
b_visible
;
}
tree_update
;
/// Tree variable
...
...
@@ -138,9 +139,15 @@ class VarTree: public Variable, public Subject<VarTree, tree_update*>
/// Given an iterator to a visible item, return the next visible item
Iterator
getNextVisibleItem
(
Iterator
it
);
/// Given an iterator to an item, return the next item
Iterator
getNextItem
(
Iterator
it
);
/// Find a children node with the given id
Iterator
findById
(
int
id
);
/// Ensure an item is expanded
void
ensureExpanded
(
VarTree
::
Iterator
);
private:
/// List of children
list
<
VarTree
>
m_children
;
...
...
modules/gui/skins2/vars/playtree.cpp
View file @
0d26b166
...
...
@@ -34,6 +34,8 @@ Playtree::Playtree( intf_thread_t *pIntf ): VarTree( pIntf )
// Get the VLC playlist object
m_pPlaylist
=
pIntf
->
p_sys
->
p_playlist
;
i_items_to_append
=
0
;
// Try to guess the current charset
char
*
pCharset
;
vlc_current_charset
(
&
pCharset
);
...
...
@@ -77,6 +79,7 @@ void Playtree::delSelected()
}
}
}
// TODO: Do this better
buildTree
();
tree_update
descr
;
descr
.
i_type
=
1
;
...
...
@@ -135,6 +138,8 @@ void Playtree::onUpdateItem( int id )
void
Playtree
::
onAppend
(
playlist_add_t
*
p_add
)
{
i_items_to_append
--
;
Iterator
node
=
findById
(
p_add
->
i_node
);
if
(
node
!=
end
()
)
{
...
...
@@ -152,6 +157,7 @@ void Playtree::onAppend( playlist_add_t *p_add )
tree_update
descr
;
descr
.
i_id
=
p_add
->
i_item
;
descr
.
i_parent
=
p_add
->
i_node
;
descr
.
b_visible
=
node
->
m_expanded
;
descr
.
i_type
=
2
;
notify
(
&
descr
);
}
...
...
@@ -178,6 +184,8 @@ void Playtree::buildTree()
clear
();
vlc_mutex_lock
(
&
m_pPlaylist
->
object_lock
);
i_items_to_append
=
0
;
playlist_view_t
*
p_view
;
p_view
=
playlist_ViewFind
(
m_pPlaylist
,
VIEW_CATEGORY
);
/* TODO : let the user chose the view type */
...
...
modules/gui/skins2/vars/playtree.hpp
View file @
0d26b166
...
...
@@ -48,6 +48,9 @@ class Playtree: public VarTree
/// Function called to notify playlist item append
void
onAppend
(
playlist_add_t
*
);
/// Items waiting to be appended
int
i_items_to_append
;
private:
/// VLC playlist object
playlist_t
*
m_pPlaylist
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment