From c64efc1b95349c40fe1db7fd817df882ca7ec0b0 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 20 Jun 2011 20:39:34 +0100 Subject: [PATCH] Allow a buttonlist item position to be specified This allows a new button list item to be inserted at any position in the list so that a full list rebuild can be avoided. --- mythtv/libs/libmythbase/mythversion.h | 2 +- mythtv/libs/libmythui/mythuibuttonlist.cpp | 23 ++++++++++++++++------ mythtv/libs/libmythui/mythuibuttonlist.h | 7 ++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/mythtv/libs/libmythbase/mythversion.h b/mythtv/libs/libmythbase/mythversion.h index 925cbe74580..1ec87482262 100644 --- a/mythtv/libs/libmythbase/mythversion.h +++ b/mythtv/libs/libmythbase/mythversion.h @@ -12,7 +12,7 @@ /// Update this whenever the plug-in API changes. /// Including changes in the libmythbase, libmyth, libmythtv, libmythav* and /// libmythui class methods used by plug-ins. -#define MYTH_BINARY_VERSION "0.25.20110616-1" +#define MYTH_BINARY_VERSION "0.25.20110620-1" /** \brief Increment this whenever the MythTV network protocol changes. * diff --git a/mythtv/libs/libmythui/mythuibuttonlist.cpp b/mythtv/libs/libmythui/mythuibuttonlist.cpp index 0d766d12064..8a4bb36c8bd 100644 --- a/mythtv/libs/libmythui/mythuibuttonlist.cpp +++ b/mythtv/libs/libmythui/mythuibuttonlist.cpp @@ -1344,10 +1344,21 @@ void MythUIButtonList::ItemVisible(MythUIButtonListItem* item) emit itemVisible(item); } -void MythUIButtonList::InsertItem(MythUIButtonListItem *item) +void MythUIButtonList::InsertItem(MythUIButtonListItem *item, int listPosition) { bool wasEmpty = m_itemList.isEmpty(); - m_itemList.append(item); + if (listPosition >= 0 && listPosition <= m_itemList.count()) + { + m_itemList.insert(listPosition, item); + + if (listPosition <= m_selPosition) + m_selPosition++; + + if (listPosition <= m_topPosition) + m_topPosition++; + } + else + m_itemList.append(item); m_itemCount++; @@ -2643,7 +2654,7 @@ bool MythUIButtonList::DoFind(bool doMove, bool searchForward) MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList* lbtype, const QString& text, const QString& image, bool checkable, CheckState state, - bool showArrow) + bool showArrow, int listPosition) { if (!lbtype) VERBOSE(VB_IMPORTANT, "Cannot add a button to a non-existent list!"); @@ -2661,12 +2672,12 @@ MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList* lbtype, m_checkable = true; if (m_parent) - m_parent->InsertItem(this); + m_parent->InsertItem(this, listPosition); } MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList* lbtype, const QString& text, - QVariant data) + QVariant data, int listPosition) { if (!lbtype) VERBOSE(VB_IMPORTANT, "Cannot add a button to a non-existent list!"); @@ -2682,7 +2693,7 @@ MythUIButtonListItem::MythUIButtonListItem(MythUIButtonList* lbtype, m_showArrow = false; if (m_parent) - m_parent->InsertItem(this); + m_parent->InsertItem(this, listPosition); } MythUIButtonListItem::~MythUIButtonListItem() diff --git a/mythtv/libs/libmythui/mythuibuttonlist.h b/mythtv/libs/libmythui/mythuibuttonlist.h index 99901fcae74..34649cb2aa8 100644 --- a/mythtv/libs/libmythui/mythuibuttonlist.h +++ b/mythtv/libs/libmythui/mythuibuttonlist.h @@ -32,9 +32,10 @@ class MUI_PUBLIC MythUIButtonListItem MythUIButtonListItem(MythUIButtonList *lbtype, const QString& text, const QString& image = "", bool checkable = false, - CheckState state = CantCheck, bool showArrow = false); + CheckState state = CantCheck, bool showArrow = false, + int listPosition = -1); MythUIButtonListItem(MythUIButtonList *lbtype, const QString& text, - QVariant data); + QVariant data, int listPosition = -1); virtual ~MythUIButtonListItem(); MythUIButtonList *parent() const; @@ -197,7 +198,7 @@ class MUI_PUBLIC MythUIButtonList : public MythUIType void Const(); virtual void Init(); - void InsertItem(MythUIButtonListItem *item); + void InsertItem(MythUIButtonListItem *item, int listPosition = -1); int minButtonWidth(const MythRect & area); int minButtonHeight(const MythRect & area);