public static void PrintScrollableMenu <T>(ScrollableMenu <T> menu) { if (menu.GetTotalItemNumber() < menu.GetScopeSize()) { PrintMenu(menu); } else { int currentRow = menu.GetPositionY(); int positionX = menu.GetPositionX(); int dotPosition = menu.GetPositionX() + (menu.GetSizeX() / 2 - 1); switch (menu.GetAlignment()) { case Alignment.Left: break; case Alignment.Right: positionX = positionX + menu.GetSizeX() - 1; break; default: positionX = positionX + (menu.GetSizeX() / 2 - 1); break; } List <MenuItem <T> > menuitems = menu.GetMenuItemsInScope(); for (int i = 0; i < menuitems.Count; i++) { if (i == 0 && !menu.FirstIsInScope()) { PrintFreeString(new FreeString("...", dotPosition, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center)); } else if (i == menuitems.Count - 1 && !menu.LastIsInScope()) { PrintFreeString(new FreeString("...", dotPosition, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), Alignment.Center)); } else if (i + menu.GetFirstItemIndexInScope() == menu.GetCurrentSelectedIndex()) { PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow, menuitems[i].GetColor2(), menuitems[i].GetColor1(), menu.GetAlignment())); } else { PrintFreeString(new FreeString(menuitems[i].GetText(), positionX, currentRow, menuitems[i].GetColor1(), menuitems[i].GetColor2(), menu.GetAlignment())); } currentRow++; } CleanUp(); } }