summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorworo <woro@e10066b5-e1e2-0310-b819-94efdf66514b>2008-02-07 18:20:37 +0000
committerworo <woro@e10066b5-e1e2-0310-b819-94efdf66514b>2008-02-07 18:20:37 +0000
commit86fa797a40e5d5b95d821dc5009d91700fe1d30b (patch)
tree09d5abc886fe2eb232abfe5e488c088c994d9912
parent79490eb023956e9ea04d1be02f0e0e3555126fac (diff)
downloadvdr-plugin-muggle-86fa797a40e5d5b95d821dc5009d91700fe1d30b.tar.gz
vdr-plugin-muggle-86fa797a40e5d5b95d821dc5009d91700fe1d30b.tar.bz2
playing just one track with non existing file: player started although
nothing there to be played Solution: selection.listitems.size() no longer refreshes listitems git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk/muggle-plugin@1000 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--mg_selection.c24
-rw-r--r--mg_selection.h1
-rw-r--r--vdr_menu.c4
3 files changed, 22 insertions, 7 deletions
diff --git a/mg_selection.c b/mg_selection.c
index d00537f..b9a860f 100644
--- a/mg_selection.c
+++ b/mg_selection.c
@@ -129,7 +129,7 @@ mgSelection::mgListItems::sort(bool bycount,mgSortBy SortBy)
void
mgSelection::mgListItems::clear()
{
- for (unsigned int i=0;i<m_items.size();i++)
+ for (unsigned int i=0;i<size();i++)
delete m_items[i];
m_items.clear();
}
@@ -137,19 +137,26 @@ mgSelection::mgListItems::clear()
bool
mgSelection::mgListItems::operator==(const mgListItems&x) const
{
- bool result = m_items.size()==x.m_items.size();
+ bool result = size()==x.size();
if (result)
for (unsigned int i=0;i<size();i++)
result &= *(m_items[i])==*(x.m_items[i]);
return result;
}
+void
+mgSelection::mgListItems::refresh()
+{
+ if (!m_sel)
+ mgError("mgListItems: m_sel is 0");
+ m_sel->refreshValues();
+}
+
size_t
mgSelection::mgListItems::size() const
{
if (!m_sel)
mgError("mgListItems: m_sel is 0");
- m_sel->refreshValues();
return m_items.size();
}
@@ -159,7 +166,7 @@ mgSelection::mgListItems::operator[](unsigned int idx)
if (!m_sel)
mgError("mgListItems: m_sel is 0");
m_sel->refreshValues();
- assert(idx<m_items.size());
+ assert(idx<size());
return m_items[idx];
}
@@ -174,7 +181,7 @@ mgSelection::mgListItems::search (const string v) const
{
if (!m_sel)
mgError("mgListItems::index(%s): m_sel is 0",v.c_str());
- unsigned int itemsize = m_items.size();
+ unsigned int itemsize = size();
const char *cstr = v.c_str();
unsigned int clen = strlen(cstr);
int result = -1;
@@ -272,6 +279,7 @@ mgSelection::getCurrentValue()
string
mgSelection::getValue(unsigned int idx) const
{
+ listitems.refresh();
if (idx>=listitems.size())
return "";
else
@@ -457,6 +465,7 @@ string mgSelection::exportM3U ()
bool
mgSelection::empty()
{
+ listitems.refresh();
return ( listitems.size () == 0);
}
@@ -500,6 +509,7 @@ unsigned int
mgSelection::gotoPosition ()
{
assert(m_level<ordersize());
+ listitems.refresh();
unsigned int itemsize = listitems.size();
if (itemsize==0)
m_position = 0;
@@ -960,6 +970,7 @@ bool mgSelection::enter (unsigned int position)
return true;
}
mgListItems prev;
+ listitems.refresh();
if (m_level<ordersize()-2 && m_fall_through && listitems.size()<100)
prev=listitems;
while (1)
@@ -983,6 +994,7 @@ bool mgSelection::enter (unsigned int position)
break;
if (m_level>=ordersize()-2)
break;
+ listitems.refresh();
if (listitems.size () > 1 && !(prev==listitems))
break;
}
@@ -998,6 +1010,7 @@ mgSelection::leave ()
unsigned int position=m_position;
assert(!Keys.empty());
mgListItems prev;
+ listitems.refresh();
if (m_level>1 && m_fall_through && listitems.size()<100)
prev=listitems;
while (1)
@@ -1014,6 +1027,7 @@ mgSelection::leave ()
break;
if (m_level==0)
break;
+ listitems.refresh();
if (listitems.size () > 1 && !(prev==listitems))
break;
}
diff --git a/mg_selection.h b/mg_selection.h
index ec4307b..d56d0e6 100644
--- a/mg_selection.h
+++ b/mg_selection.h
@@ -64,6 +64,7 @@ class mgSelection
string& id(unsigned int);
unsigned int count(unsigned int);
bool operator==(const mgListItems&x) const;
+ void refresh();
size_t size() const;
int search (const string v) const;
unsigned int valindex (const string v) const;
diff --git a/vdr_menu.c b/vdr_menu.c
index ada4fd1..58508d7 100644
--- a/vdr_menu.c
+++ b/vdr_menu.c
@@ -55,8 +55,7 @@ void Play(mgSelection *sel, bool enter)
s->InitDefaultOrder(1);
if (enter)
s->enter();
- s->skipItems(0); // make sure we start with a valid item
- if (s->empty()) // no valid item exists
+ if (!s->skipItems(0)) // no valid item exists
{
delete s;
return;
@@ -517,6 +516,7 @@ void
mgMenu::AddSelectionItems (mgSelection *sel,mgActions act)
{
sel->Activate();
+ sel->listitems.refresh();
for (unsigned int i = 0; i < sel->listitems.size (); i++)
{
mgAction *a = GenerateAction(act, actEntry);