mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-27 15:32:59 +02:00
gui/widget/listbox.cpp: reuse selection code; add list start/end keys
This commit is contained in:
@@ -145,6 +145,24 @@ void CListBox::paintItem(unsigned int /*itemNr*/, int paintNr, bool pselected)
|
|||||||
g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x + 10, ypos+ fheight, width-20, "demo", color);
|
g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->RenderString(x + 10, ypos+ fheight, width-20, "demo", color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CListBox::updateSelection(unsigned int newpos)
|
||||||
|
{
|
||||||
|
if(newpos == selected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unsigned int prev_selected = selected;
|
||||||
|
selected = newpos;
|
||||||
|
|
||||||
|
unsigned int oldliststart = liststart;
|
||||||
|
liststart = (selected/listmaxshow)*listmaxshow;
|
||||||
|
if(oldliststart!=liststart) {
|
||||||
|
paint();
|
||||||
|
} else {
|
||||||
|
paintItem(prev_selected - liststart);
|
||||||
|
paintItem(selected - liststart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int CListBox::exec(CMenuTarget* parent, const std::string & /*actionKey*/)
|
int CListBox::exec(CMenuTarget* parent, const std::string & /*actionKey*/)
|
||||||
{
|
{
|
||||||
neutrino_msg_t msg;
|
neutrino_msg_t msg;
|
||||||
@@ -176,67 +194,38 @@ int CListBox::exec(CMenuTarget* parent, const std::string & /*actionKey*/)
|
|||||||
else if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup)
|
else if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup)
|
||||||
{
|
{
|
||||||
if(getItemCount()!=0) {
|
if(getItemCount()!=0) {
|
||||||
int step = 0;
|
int step = (msg == (neutrino_msg_t)g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1
|
||||||
int prev_selected = selected;
|
int new_selected = selected - step;
|
||||||
|
|
||||||
step = ((int) msg == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1
|
if (new_selected < 0) {
|
||||||
selected -= step;
|
if (selected != 0 && step != 1)
|
||||||
|
new_selected = 0;
|
||||||
if((prev_selected-step) < 0) {
|
|
||||||
if(prev_selected != 0 && step != 1)
|
|
||||||
selected = 0;
|
|
||||||
else
|
else
|
||||||
selected = getItemCount() - 1;
|
new_selected = getItemCount() - 1;
|
||||||
}
|
}
|
||||||
|
updateSelection(new_selected);
|
||||||
#if 0
|
|
||||||
if((prev_selected-step) < 0) // because of uint
|
|
||||||
selected = getItemCount() - 1;
|
|
||||||
#endif
|
|
||||||
paintItem(prev_selected - liststart);
|
|
||||||
unsigned int oldliststart = liststart;
|
|
||||||
liststart = (selected/listmaxshow)*listmaxshow;
|
|
||||||
|
|
||||||
if(oldliststart!=liststart)
|
|
||||||
paint();
|
|
||||||
else
|
|
||||||
paintItem(selected - liststart);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown)
|
else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown)
|
||||||
{
|
{
|
||||||
if(getItemCount()!=0) {
|
if(getItemCount()!=0) {
|
||||||
unsigned int step = 0;
|
int step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1
|
||||||
unsigned int prev_selected = selected;
|
int new_selected = selected + step;
|
||||||
|
if (new_selected >= (int) getItemCount()) {
|
||||||
step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1
|
if ((getItemCount() - listmaxshow -1 < selected) && (selected != (getItemCount() - 1)) && (step != 1))
|
||||||
selected += step;
|
new_selected = getItemCount() - 1;
|
||||||
|
|
||||||
if(selected >= getItemCount()) {
|
|
||||||
if((getItemCount() - listmaxshow -1 < prev_selected) && (prev_selected != (getItemCount() - 1)) && (step != 1))
|
|
||||||
selected = getItemCount() - 1;
|
|
||||||
else if (((getItemCount() / listmaxshow) + 1) * listmaxshow == getItemCount() + listmaxshow) // last page has full entries
|
else if (((getItemCount() / listmaxshow) + 1) * listmaxshow == getItemCount() + listmaxshow) // last page has full entries
|
||||||
selected = 0;
|
new_selected = 0;
|
||||||
else
|
else
|
||||||
selected = ((step == listmaxshow) && (selected < (((getItemCount() / listmaxshow)+1) * listmaxshow))) ? (getItemCount() - 1) : 0;
|
new_selected = ((step == (int) listmaxshow) && (new_selected < (int) (((getItemCount() / listmaxshow)+1) * listmaxshow))) ? (getItemCount() - 1) : 0;
|
||||||
}
|
}
|
||||||
|
updateSelection(new_selected);
|
||||||
#if 0
|
|
||||||
if(selected >= getItemCount()) {
|
|
||||||
if (((getItemCount() / listmaxshow) + 1) * listmaxshow == getItemCount() + listmaxshow) // last page has full entries
|
|
||||||
selected = 0;
|
|
||||||
else
|
|
||||||
selected = ((step == listmaxshow) && (selected < (((getItemCount() / listmaxshow) + 1) * listmaxshow))) ? (getItemCount() - 1) : 0;
|
|
||||||
}
|
}
|
||||||
#endif
|
}
|
||||||
|
else if (msg == (neutrino_msg_t) g_settings.key_list_start || msg == (neutrino_msg_t) g_settings.key_list_end) {
|
||||||
paintItem(prev_selected - liststart);
|
if (getItemCount()) {
|
||||||
unsigned int oldliststart = liststart;
|
int new_selected = msg == (neutrino_msg_t) g_settings.key_list_start ? 0 : getItemCount() - 1;
|
||||||
liststart = (selected/listmaxshow)*listmaxshow;
|
updateSelection(new_selected);
|
||||||
if(oldliststart!=liststart)
|
|
||||||
paint();
|
|
||||||
else
|
|
||||||
paintItem(selected - liststart);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( msg ==CRCInput::RC_ok)
|
else if( msg ==CRCInput::RC_ok)
|
||||||
|
@@ -78,6 +78,7 @@ class CListBox : public CMenuWidget
|
|||||||
//------malen der Items-------------------
|
//------malen der Items-------------------
|
||||||
virtual int getItemHeight();
|
virtual int getItemHeight();
|
||||||
virtual void paintItem(uint32_t itemNr, int paintNr, bool selected);
|
virtual void paintItem(uint32_t itemNr, int paintNr, bool selected);
|
||||||
|
void updateSelection(unsigned int newpos);
|
||||||
|
|
||||||
//------Benutzung von setModified---------
|
//------Benutzung von setModified---------
|
||||||
void setModified(void);
|
void setModified(void);
|
||||||
|
Reference in New Issue
Block a user