Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
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