Skip to content

Commit

Permalink
Merge branch 'master' of github.com:MythTV/mythtv
Browse files Browse the repository at this point in the history
  • Loading branch information
stuartm committed Dec 5, 2010
2 parents 1570ee7 + 13523e9 commit e8be487
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
46 changes: 37 additions & 9 deletions mythtv/programs/mythfrontend/proglist.cpp
Expand Up @@ -113,7 +113,7 @@ ProgLister::ProgLister(

m_allowEvents(true),
m_titleSort(false),
m_reverseSort(false),
m_reverseSort(true),
m_useGenres(false),

m_schedText(NULL),
Expand Down Expand Up @@ -1056,7 +1056,12 @@ void ProgLister::FillViewList(const QString &view)
m_curView = m_viewList.size() - 1;
}

typedef binary_function<const ProgramInfo*, const ProgramInfo*, bool> plCompare;
class plCompare : binary_function<const ProgramInfo*, const ProgramInfo*, bool>
{
public:
virtual bool operator()(const ProgramInfo *a, const ProgramInfo *b)
= 0;
};

class plTitleSort : public plCompare
{
Expand Down Expand Up @@ -1363,7 +1368,12 @@ void ProgLister::FillItemList(bool restorePosition, bool updateDisp)
ProgramInfo selected;
const ProgramInfo *selectedP = (restorePosition) ? GetCurrent() : NULL;
if (selectedP)
{
selected = *selectedP;
selectedP = &selected;
}
int selectedOffset =
m_progList->GetCurrentPos() - m_progList->GetTopItemPos();

m_progList->Reset();
m_itemList.clear();
Expand Down Expand Up @@ -1415,7 +1425,7 @@ void ProgLister::FillItemList(bool restorePosition, bool updateDisp)
SortList(GetSortBy(), m_reverseSort);

if (updateDisp)
UpdateDisplay(selected);
UpdateDisplay(selectedP, selectedOffset);
}

ProgLister::SortBy ProgLister::GetSortBy(void) const
Expand Down Expand Up @@ -1477,19 +1487,37 @@ void ProgLister::UpdateDisplay(void)
UpdateButtonList();
}

void ProgLister::UpdateDisplay(const ProgramInfo & selected)
void ProgLister::UpdateDisplay(const ProgramInfo *selected, int selectedOffset)
{
UpdateDisplay();

if (!selected)
return;

// Restore selection
for (uint i = 0; i < m_itemList.size(); i++)
plCompare *comp;
if (!m_titleSort)
comp = new plTimeSort();
else if (m_type == plPreviouslyRecorded)
comp = new plPrevTitleSort();
else
comp = new plTitleSort();

int i;
for (i = m_itemList.size() - 2; i >= 0; i--)
{
if (selected.IsSameProgramWeakCheck(*(m_itemList[i])))
{
m_progList->SetItemCurrent(i);
bool dobreak;
if (m_reverseSort)
dobreak = comp->operator()(selected, m_itemList[i]);
else
dobreak = comp->operator()(m_itemList[i], selected);
if (dobreak)
break;
}
}

delete comp;

m_progList->SetItemCurrent(i + 1, i + 1 - selectedOffset);
}

void ProgLister::UpdateButtonList(void)
Expand Down
2 changes: 1 addition & 1 deletion mythtv/programs/mythfrontend/proglist.h
Expand Up @@ -77,7 +77,7 @@ class ProgLister : public ScheduleCommon

void ClearCurrentProgramInfo(void);
void UpdateDisplay(void);
void UpdateDisplay(const ProgramInfo & selected);
void UpdateDisplay(const ProgramInfo *selected, int selectedOffset);
void UpdateButtonList(void);
void UpdateKeywordInDB(const QString &text, const QString &oldValue);

Expand Down

0 comments on commit e8be487

Please sign in to comment.