rewrite stupid selection stuff (more brown paper bags, please)
This commit is contained in:
@@ -116,24 +116,15 @@ void GroupList::SetSelection( unsigned sel )
|
|||||||
{
|
{
|
||||||
BeforeChange();
|
BeforeChange();
|
||||||
|
|
||||||
if( sel == m_iSelection ) ;
|
|
||||||
else if( sel == m_iSelection+1 ) {
|
|
||||||
if( m_iSelection >= MAX_GROUPS_ONSCREEN/2 )
|
|
||||||
m_iTop++;
|
|
||||||
} else if( sel == m_iSelection-1 ) {
|
|
||||||
if(m_iTop && m_iSelection < m_textLabels.size() - MAX_GROUPS_ONSCREEN/2)
|
|
||||||
m_iTop--;
|
|
||||||
} else {
|
|
||||||
/* We're jumping somewhere else; just put the top somewhere
|
|
||||||
* reasonable. */
|
|
||||||
if(sel >= MAX_GROUPS_ONSCREEN/2)
|
|
||||||
m_iTop = sel - MAX_GROUPS_ONSCREEN/2;
|
|
||||||
else
|
|
||||||
m_iTop = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_iSelection=sel;
|
m_iSelection=sel;
|
||||||
m_iTop = clamp( m_iTop, 0u, m_textLabels.size()-MAX_GROUPS_ONSCREEN );
|
|
||||||
|
if( m_textLabels.size() <= MAX_GROUPS_ONSCREEN ||
|
||||||
|
sel <= MAX_GROUPS_ONSCREEN/2 )
|
||||||
|
m_iTop = 0;
|
||||||
|
else if ( sel >= m_textLabels.size() - MAX_GROUPS_ONSCREEN/2 )
|
||||||
|
m_iTop = m_textLabels.size() - MAX_GROUPS_ONSCREEN;
|
||||||
|
else
|
||||||
|
m_iTop = sel - MAX_GROUPS_ONSCREEN/2;
|
||||||
|
|
||||||
/* The current selection must always be visible. */
|
/* The current selection must always be visible. */
|
||||||
ASSERT( m_iTop <= m_iSelection );
|
ASSERT( m_iTop <= m_iSelection );
|
||||||
|
|||||||
Reference in New Issue
Block a user