// BOXLIB EXAMPLE (scrollbar, progressbar, editbox and checkbox)
// Writed by maxcodehack and superturbocat2001

#include <sys/ksys.h>
#include <stdlib.h>
#include <string.h>
#include <clayer/boxlib.h>
#include <stdio.h>

#define WIN_W 640
#define WIN_H 563

#define ED_BUFF_LEN 50
#define TEXT_SIZE 0x10000000
#define SCROLL_BUTTON_SIZE 15
#define SCROLL_MAX_LEN 215
#define BLACK 0x000000
#define WHITE 0xFFFFFF
#define BLUE  0x0000FF
#define X_W(X, W) ((X<<16)+W)
#define Y_H X_W

uint32_t wheels;
char* title = "Boxlib example";
char ed_buff[ED_BUFF_LEN];
   
scrollbar scroll = {15, WIN_W - 26, WIN_H - 29, 0, 0, 2, 215, SCROLL_BUTTON_SIZE, 0,0x707070,0xD2CED0,0x555555};
progressbar pg = {0, 10, 10, 270, 35, 1, 0, 200, 0xB4B4B4, 0x2728FF, 0xA9A9A9};
edit_box ed={WIN_W-140,10,60,0xFFFFFF,0x6a9480,0,0x6a9480, BLACK | TEXT_SIZE, ED_BUFF_LEN, ed_buff,NULL,ed_focus};
check_box output_off={X_W(10, 15), Y_H(120,15), 10, WHITE, BLUE, BLACK | TEXT_SIZE, "Disable duplicate output",0};

void draw_window(){
    _ksys_start_draw(); 
    _ksys_create_window(215,100,WIN_W,WIN_H,title, 0x858585, 0x34);     
	edit_box_draw(&ed);
	check_box_draw2(&output_off);
	if(!output_off.flags){
		_ksys_draw_text(ed_buff, 10, 90, strlen(ed_buff), BLACK | TEXT_SIZE);
	}
	scrollbar_v_draw(&scroll);
    progressbar_draw(&pg);
	_ksys_end_draw();
}


int main()
{
	kolibri_boxlib_init();
	init_checkbox2(&output_off);
	_ksys_set_event_mask(KSYS_EVM_REDRAW + KSYS_EVM_KEY + KSYS_EVM_BUTTON + KSYS_EVM_MOUSE+ KSYS_EVM_MOUSE_FILTER);
	while(1){
		switch(_ksys_get_event()){
		case KSYS_EVENT_BUTTON:
			if (_ksys_get_button() == 1) return 0;
		break;
		  
		case KSYS_EVENT_KEY:
			edit_box_key(&ed, _ksys_get_key().val);
            draw_window();
		break;
			 
		case KSYS_EVENT_REDRAW:
			draw_window();
		break;
		
		case KSYS_EVENT_MOUSE: 
			edit_box_mouse(&ed);
			scrollbar_v_mouse(&scroll);
			pg.value = scroll.position;
			progressbar_draw(&pg);
			check_box_mouse2(&output_off);
			unsigned int scroll_strong = 10;
            wheels = _ksys_get_mouse_wheels();
			if(wheels & 0xFFFF){
				if((short)wheels > 0){
					scroll.position += scroll_strong;
					if(scroll.position>scroll.max_area-scroll.cur_area){
						scroll.position=scroll.max_area-scroll.cur_area;
					}
				}else if((short)wheels < 0 && scroll.position > 0){
            		scroll.position -= scroll_strong;
					if((int)scroll.position<0){
						scroll.position=0;
					}
				}
            	scrollbar_v_draw(&scroll);
            }
			break;
		}
	}
	return 0;
}