/* Terminality - a portable terminal handling library * Copyright (C) 1998-2002, Emil Mikulic. * This is LGPL - look at COPYING.LIB */ /* Project: Terminality/GUI * File: checkbox.cpp * Author: Michal Safranek * Description: Implements the checkbox class */ #include const char checkbox_rcsid[] = "$Id: checkbox.cpp,v 1.9 2002/07/26 01:39:40 darkmoon Exp $"; /* Checkbox elements */ void checkbox::element(const checkbox_element el) { if (has_color()) { /* Pretty colors */ switch (el) { case CB_left: if (focus) setcolor(SELECTED_BOX,SELECTED_BOX_BG); else setcolor(BOX,BOX_BG); printw("%c", LBOX_CHR); break; case CB_check: if (focus) setcolor(SELECTED_CHECK, SELECTED_CHECK_BG); else setcolor(CHECK,CHECK_BG); if (selected) printw("%c", CHECK_CHECKED_CHR); else printw("%c", CHECK_UNCHECKED_CHR); break; case CB_label: if (focus) setcolor(SELECTED_LABEL, SELECTED_LABEL_BG); else setcolor(LABEL,LABEL_BG); break; case CB_right: if (focus) setcolor(SELECTED_BOX,SELECTED_BOX_BG); else setcolor(BOX,BOX_BG); printw("%c", RBOX_CHR); break; } } else { /* Plain */ switch (el) { case CB_left: if (focus) highvideo(); else normvideo(); printw("%c", LBOX_CHR); break; case CB_check: if (focus) normvideo(); else highvideo(); if (selected) printw("%c", CHECK_CHECKED_CHR); else printw("%c", CHECK_UNCHECKED_CHR); break; case CB_label: if (focus) normvideo(); else lowvideo(); break; case CB_right: if (focus) highvideo(); else normvideo(); printw("%c",RBOX_CHR); break; } } } #define CB_SETUP() BACKGROUND = COLOR_CHECKBOX_BG; \ LABEL_BG = COLOR_CHECKBOX_LABELBG; \ CHECK_BG = COLOR_CHECKBOX_CHECKBG; \ BOX_BG = COLOR_CHECKBOX_BOXBG; \ LABEL = COLOR_CHECKBOX_LABEL; \ SELECTED_LABEL_BG = COLOR_CHECKBOX_SLABELBG; \ SELECTED_CHECK_BG = COLOR_CHECKBOX_SCHECKBG; \ SELECTED_BOX_BG = COLOR_CHECKBOX_SBOXBG; \ SELECTED_LABEL = COLOR_CHECKBOX_SLABEL; \ BOX = COLOR_CHECKBOX_BOX; \ SELECTED_CHECK = COLOR_CHECKBOX_SCHECK; \ SELECTED_BOX = COLOR_CHECKBOX_SBOX; \ CHECK = COLOR_CHECKBOX_CHECK; \ LBOX_CHR = '['; RBOX_CHR = ']'; \ CHECK_CHECKED_CHR = 'x'; \ CHECK_UNCHECKED_CHR = ' '; // Construct checkbox at checkbox::checkbox(const int xx, const int yy, bool sel) { x = xx; y = yy; width = 4; focus = false; selected = sel; label = NULL; type_id = Checkbox; visible = true; fixed_colors = false; spc_handle = NULL; CB_SETUP(); } // Construct checkbox at using for a buffer checkbox::checkbox(const int xx, const int yy, bool sel, const char *s) { x = xx; y = yy; focus = false; selected = sel; width = 4 + strlen(s); label = (char*)xmalloc(strlen(s)+1); strcpy(label, s); type_id = Checkbox; visible = true; fixed_colors = false; spc_handle = NULL; CB_SETUP(); } // Construct checkbox at using for a buffer, label's width checkbox::checkbox(const int xx, const int yy, bool sel, const char *s, const int w) { x = xx; y = yy; focus = false; selected = sel; width = 4 + w; label = (char*)xmalloc(w+1); strncpy(label, s, w); label[w] = 0; type_id = Checkbox; visible = true; fixed_colors = false; spc_handle = NULL; CB_SETUP(); } // Destroy checkbox checkbox::~checkbox() { // Deallocate buffer! xfree(label); } // Draw checkbox void checkbox::draw(void) { char *temp; if(!visible) return; // Draw empty box bgcolor(BACKGROUND); gotoxy(x,y); for(int i=0; i