2019-06-26 07:12 AM
Hello
Is there a way to determine which items in a ScrollList are visible at the moment (item index)?
Because the user will control the GUI by buttons i like highlight the currently selected item in the list (similar behaviour like a list on a PC program which is scrolled by the up and down keys).
I have implemented the highlight functionality by myself (set background of the item black and the text white) since I haven't found another solution.
Is it true that there is no "built in" functionality in TGX to implement such a behaviour?
To know which items are visible would facilitate the implementation of my desired behaviour.
Unfortunately https://touchgfx.zendesk.com/hc/en-us/articles/360018095032-Scroll-List did not help me very much.
Thanks!
2019-06-28 01:25 AM
Hello void
I figured out a workaround: By consecutively remembering the index of the top entry of the list, I am able to calculate the position of item to be highlighted.
I duno if there is a more appropriate way to do this.
Further
scrollListMenu.animateToItem(...);
seems to do the trick to scroll in the upper and lower not visible items. It the item index if above the visible ones, the list scrolls down and vice versa.
Button up, scroll upwards:
int16_t selectedMenuItem = 0; // Currently selecte index
uint16_t topMenuItem = 0; // Index of the item at the top of the list
void Screen1View::MainWindowBtnUp()
{
if(selectedMenuItem > 0)
{
// update the index of the selected entry
selectedMenuItem--;
if(selectedMenuItem < topMenuItem)
{
// highlighter is now at the top
scrollListMenu.animateToItem(selectedMenuItem,5);
// Update the index of the top most item in the list
topMenuItem--;
}
}
scrollListMenu.initialize();
}
Button down, scroll downwards:
void Screen1View::MainWindowBtnDwn()
{
// increment the highlight position and selected item, we will correct them just afterwards
selectedMenuItem++;
if(selectedMenuItem < scrollListMenu.getNumberOfItems()-1)
{
if(selectedMenuItem > scrollmaxpos)
{
// highlight the last entry
// scroll list up
scrollListMenu.animateToItem(selectedMenuItem,5);
// Update the index of the top most item in the list
topMenuItem++;
}
}
else if(selectedMenuItem >= scrollListMenu.getNumberOfItems()-1)
{
// End of the list
selectedMenuItem = scrollListMenu.getNumberOfItems()-1;
scrollListMenu.animateToItem(selectedMenuItem,5);
// Update the index of the top most item in the list
if(topMenuItem < (selectedMenuItem-scrollmaxpos))
{
topMenuItem++;
}
}
scrollListMenu.initialize();
}
The highlighting is done it the overridden update method:
void Screen1View::scrollListMenuUpdateItem(lstEntry& item, int16_t itemIndex)
{
// setHighlighted(...) will change the background of the item black and the text white or contrary
if(itemIndex == selectedMenuItem)
{
item.setHighlighted(true);
}
else
{
item.setHighlighted(false);
}
:
}
Maybe it will help someone else...otherwise i filled the void and made the forum at least looking more alive :smiling_face_with_smiling_eyes: