#include "gui_menu.h"

void GuiMenu::create()
{
    show();
}
void GuiMenu::show()
{
    _gpu->set_font(font);
    _gpu->set_text_mode(text_mode);

    _gpu->fill_rect(x,y,x+len,y+hight,_gpu->back_color);

    for(int i = 0; i < max; i++)
    {
        if((i + index) >= current_menu->count)
            break;
        _gpu->printf(x,y+i*font->YSize,"%d:%s",index + 1 + i ,current_menu->items[i + index].title);
    }
    if(max != 1)
        _gpu->printf(x - 10,y,">");
}
void GuiMenu::hide()
{
        _gpu->fill_rect(x,y,x+len,y+hight,_gpu->back_color);

//    _gpu->set_font(font);
//    
//    for(int i = 0; i < max; i++)
//    {
//        if((i + index) >= current_menu->count)
//            break;
//        uint16_t slen = _gpu->get_string_xlength(current_menu->items[index].title);
//        _gpu->fill_rect(x,y,x+slen,y + font->YSize,_gpu->back_color);
//    }
    
}
void GuiMenu::set_select(bool state)
{
    
}
int16_t GuiMenu::index_get()
{
    return index;
}

void GuiMenu::index_set(int16_t value)
{
    _gpu->set_font(font);
    
//    for(int i = 0; i < max; i++)
//    {
//        if((i + index) >= current_menu->count)
//            break;
//        uint16_t slen = _gpu->get_string_xlength(current_menu->items[index].title);
//        _gpu->fill_rect(x,y,x+slen,y + font->YSize,_gpu->back_color);
//    }
    
    index = value;
    show();
}

bool GuiMenu::index_next()
{
    if(index < current_menu->count - 1)
    {
//        _gpu->set_font(font);
//        
//        for(int i = 0; i < max; i++)
//        {
//            if((i + index) >= current_menu->count)
//                break;
//            uint16_t slen = _gpu->get_string_xlength(current_menu->items[index].title);
//            _gpu->fill_rect(x,y,x+slen,y + font->YSize,_gpu->back_color);
//        }
//    
        
        index++;
        show();
        return true;
    }
    return false;
}
bool GuiMenu::index_previous()
{
    if(index > 0)
    {
        
//        _gpu->set_font(font);
        
//        for(int i = 0; i < max; i++)
//        {
//            if((i + index) >= current_menu->count)
//                break;
//            uint16_t slen = _gpu->get_string_xlength(current_menu->items[index].title);
//            _gpu->fill_rect(x,y,x+slen,y + font->YSize,_gpu->back_color);
//        }
//    

        index--;
        show();
        return true;
    }
    return false;
}
void GuiMenu::update_item_index()
{
    
    _gpu->set_font(font);
    _gpu->set_text_mode(text_mode);

    _gpu->fill_rect(x,y,x+len,y+hight,_gpu->back_color);
   
    for(int i = 0; i < max; i++)
    {
        if((i + index) >= current_menu->count)
            break;
        _gpu->printf(x,y+i*font->YSize,"%d:%s",index + 1 + i ,current_menu->items[i + index].title);
    }
}