// Lab 5: Multi-line text, Fl_Text_Editor, and Fl_Text_Buffer
// CMainWindow.cpp
#include "CMainWindow.h"

CMainWindow::CMainWindow()
{
    txt_buff = new Fl_Text_Buffer();
    txt_edit->buffer( txt_buff );
}

void CMainWindow::show()
{
    // Window callbacks:
    win_app->callback( (Fl_Callback*)CMainWindow::callback_window_closing, (void*)(this) );
    btn_show_text->callback( (Fl_Callback*)CMainWindow::callback_btn_show_text, (void*)(this) );
    btn_get_text->callback( (Fl_Callback*)CMainWindow::callback_btn_get_text, (void*)(this) );

    // Make the window visible:
    win_app->show();
}

// callback functions
void CMainWindow::callback_window_closing(Fl_Widget* widg, void* userdata_) {
    std::cout << "X button clicked -- exiting the program\n";
    while( Fl::first_window() ) {
        Fl::first_window()->hide();
    }
}

void CMainWindow::callback_btn_show_text(Fl_Widget* widg, void* userdata_)
{
    CMainWindow* win = static_cast< CMainWindow* > ( userdata_ );
    win->click_btn_show_text();
}

void CMainWindow::click_btn_show_text()
{
    std::cout << "btn_show_text click\n";
    txt_buff->text("line 0\nline 1\nline 2\n"
        "line 3\nline 4\nline 5\n"
        "line 6\nline 7\nline 8\n"
        "line 9\nline 10\nline 11\n"
        "line 12\nline 13\nline 14\n"
        "line 15\nline 16\nline 17\n"
        "line 18\nline 19\nline 20\n"
        "line 21\nline 22\nline 23\n"
        );
}

void CMainWindow::callback_btn_get_text(Fl_Widget* widg, void* userdata_)
{
    CMainWindow* win = static_cast< CMainWindow* > ( userdata_ );
    win->click_btn_get_text();
}

void CMainWindow::click_btn_get_text()
{
    std::cout << "btn_get_text click\n";
    std::cout << txt_buff->text();
}
