Index: mythtv/libs/libmythui/mythuibuttonlist.cpp =================================================================== --- mythtv/libs/libmythui/mythuibuttonlist.cpp (revision 18231) +++ mythtv/libs/libmythui/mythuibuttonlist.cpp (working copy) @@ -63,8 +63,9 @@ m_clearing = false; m_itemHorizSpacing = 0; m_itemVertSpacing = 0; + m_balanceSpacing = false; m_itemHeight = 0; - m_itemWidth = 0; + m_itemWidth = 0; m_itemsVisible = 0; m_columns = 0; m_rows = 0; @@ -440,7 +441,8 @@ SetPositionArrowStates(); - emit itemSelected(m_selItem); + if (pos != m_selPosition) + emit itemSelected(m_selItem); } void MythUIButtonList::MoveDown(MovementUnit unit) @@ -512,7 +514,8 @@ SetPositionArrowStates(); - emit itemSelected(m_selItem); + if (pos != m_selPosition) + emit itemSelected(m_selItem); } bool MythUIButtonList::MoveToNamedPosition(const QString &position_name) @@ -722,9 +725,6 @@ m_itemWidth = itemArea.width(); } // End Hack - - - SetPositionArrowStates(); } bool MythUIButtonList::keyPressEvent(QKeyEvent *e) @@ -782,10 +782,7 @@ { MythUIButtonListItem *item = GetItemCurrent(); if (item) - { - emit itemSelected(item); emit itemClicked(item); - } } else handled = false; @@ -834,7 +831,7 @@ { emit itemClicked(GetItemCurrent()); } - else + else if (pos != m_selectedPosition) { SetItemCurrent(pos); emit itemSelected(GetItemCurrent()); @@ -849,10 +846,41 @@ QPoint MythUIButtonList::GetButtonPosition(int column, int row) const { + int horizontalSpacing = 0; + int verticalSpacing = 0; + if (m_balanceSpacing && m_itemCount < m_itemsVisible) + { + if ((m_layout == LayoutHorizontal) || (m_layout == LayoutGrid)) + { + int wholerows = (m_itemCount / m_columns) < row; + if ((m_itemCount / m_columns) < row) + { + int items = m_itemCount - (wholerows * m_columns); + horizontalSpacing = + (m_contentsRect.width() - + (items * (m_itemHorizSpacing + ItemWidth()))) / items; + } + } + + if (m_layout == LayoutVertical || (m_layout == LayoutGrid)) + { + verticalSpacing = + (m_contentsRect.height() - + (m_rows * (m_itemVertSpacing + m_itemHeight))) / m_rows; + } + + VERBOSE(VB_IMPORTANT, QString("Balance %1 %2").arg(horizontalSpacing).arg(verticalSpacing)); + } + + if (horizontalSpacing <= 0) + horizontalSpacing = m_itemHorizSpacing; + if (verticalSpacing <= 0) + verticalSpacing = m_itemVertSpacing; + int x = m_contentsRect.x() + - ((column - 1) * (ItemWidth() + m_itemHorizSpacing)); + ((column - 1) * (ItemWidth() + horizontalSpacing)); int y = m_contentsRect.y() + - ((row - 1) * (m_itemHeight + m_itemVertSpacing)); + ((row - 1) * (m_itemHeight + verticalSpacing)); return QPoint(x,y); } @@ -920,6 +948,8 @@ m_showArrow = parseBool(element); else if (element.tagName() == "spacing") { + //m_balanceSpacing = parseBool(element.attribute("distribute", "false")); + m_balanceSpacing = true; m_itemHorizSpacing = NormX(getFirstText(element).toInt()); m_itemVertSpacing = NormY(getFirstText(element).toInt()); } @@ -951,6 +981,7 @@ m_itemWidth = lb->m_itemWidth; m_itemHorizSpacing = lb->m_itemHorizSpacing; m_itemVertSpacing = lb->m_itemVertSpacing; + m_balanceSpacing = lb->m_balanceSpacing; m_itemsVisible = lb->m_itemsVisible; m_active = lb->m_active; @@ -1172,9 +1203,9 @@ } else { - if (active_on) - button->DisplayState("inactive"); - else + if (active_on) + button->DisplayState("inactive"); + else button->DisplayState("active"); } } @@ -1233,7 +1264,7 @@ QMap::iterator string_it = m_strings.begin(); while (string_it != m_strings.end()) { text = dynamic_cast - (buttonstate->GetChild(string_it.key())); + (buttonstate->GetChild(string_it.key())); if (text) text->SetText(string_it.value()); ++string_it; @@ -1243,7 +1274,7 @@ QMap::iterator image_it = m_images.begin(); while (image_it != m_images.end()) { image = dynamic_cast - (buttonstate->GetChild(image_it.key())); + (buttonstate->GetChild(image_it.key())); if (image) image->SetImage(image_it.value()); ++image_it; Index: mythtv/libs/libmythui/mythuibuttonlist.h =================================================================== --- mythtv/libs/libmythui/mythuibuttonlist.h (revision 18231) +++ mythtv/libs/libmythui/mythuibuttonlist.h (working copy) @@ -175,6 +175,7 @@ int m_itemHeight; int m_itemHorizSpacing; int m_itemVertSpacing; + bool m_balanceSpacing; uint m_itemsVisible; int m_rows; int m_columns;