/*
 * Mr. 4th Dimention - Allen Webster
 *
 * 26.09.2015
 *
 * File editing view for 4coder
 *
 */

// TOP

struct Menu_View{
    View view_base;
    Style *style;
    Working_Set *working_set;
    Delay *delay;
    Font_Set *font_set;
    UI_State state;
};

inline Menu_View*
view_to_menu_view(View *view){
    Menu_View *result = 0;
    if (view->type == VIEW_TYPE_MENU){
        result = (Menu_View*)view;
    }
    return result;
}

internal i32
step_draw_menu_view(Menu_View *view, Render_Target *target, i32_Rect rect,
                    Input_Summary *user_input, b32 input_stage){
    i32 result = 0;
    
    UI_State state =
        ui_state_init(&view->state, target, user_input,
                      view->style, view->font_set, view->working_set, input_stage);
    
    UI_Layout layout;
    begin_layout(&layout, rect);
    
    i32 id = 0;
    
    do_label(&state, &layout, literal("Menu"), 2.f);
    
    if (do_list_option(++id, &state, &layout, make_lit_string("Theme Options"))){
        delayed_action(view->delay, DACT_THEME_OPTIONS, {}, view->view_base.panel);
    }

    if (do_list_option(++id, &state, &layout, make_lit_string("Keyboard Layout Options"))){
        delayed_action(view->delay, DACT_KEYBOARD_OPTIONS, {}, view->view_base.panel);
    }
    
    if (ui_finish_frame(&view->state, &state, &layout, rect, 0, 0)){
        result = 1;
    }
    
    return result;
}

Do_View_Sig(do_menu_view){
    i32 result = 0;
    
    Menu_View *menu_view = (Menu_View*)view;
    switch (message){
    case VMSG_STEP: case VMSG_DRAW:
        result = step_draw_menu_view(menu_view, target, rect, user_input, (message == VMSG_STEP));
        break;
    }
    
    return result;
}

internal Menu_View*
menu_view_init(View *view, Style *style, Working_Set *working_set,
               Delay *delay, Font_Set *font_set){
    view->type = VIEW_TYPE_INTERACTIVE;
    view->do_view = do_menu_view;
    
    Menu_View *result;
    result = (Menu_View*)view;
    result->style = style;
    result->working_set = working_set;
    result->delay = delay;
    result->font_set = font_set;
    return result;
}

// BOTTOM