#include #include #include "diadef.h" #include #include "dialog.h" #include "../diajava/proto.h" #include "internal.h" PUBLIC void FIELD_CHECK_BASE::xul_draw(int, SSTRINGS &){} PUBLIC FIELD_CHECK_BASE::FIELD_CHECK_BASE( const char *_prompt, char &_var) : FIELD (_prompt) { var = &_var; val = _var; backup = val; registry_buf[0] = '\0'; } PUBLIC void FIELD_CHECK_BASE::draw_helpdia(WINDOW *dialog, int nof) { draw_helpdia_common (dialog,nof); } PUBLIC void FIELD_CHECK_BASE::set_registry_value(const char *v) { val = atoi(v); } PUBLIC const char *FIELD_CHECK_BASE::get_registry_value() { sprintf (registry_buf,"%d",val); return registry_buf; } PUBLIC FIELD_CHECK_RADIO::FIELD_CHECK_RADIO( const char *_prompt, char &_var, const char *_title) : FIELD_CHECK_BASE (_prompt,_var) { original_title = _title; // For the virtual registry (see return_prompt below) title = strdup(_title); box.width = 4 + strlen(_title); } PUBLIC FIELD_CHECK_RADIO::~FIELD_CHECK_RADIO() { free (title); } PUBLIC const char* FIELD_CHECK_RADIO::return_prompt() { const char *ret = original_prompt; if (original_prompt == NULL || original_prompt[0] == '\0'){ ret = original_title; } return ret; } PUBLIC void FIELD_CHECK_RADIO::restore() { *var = backup; } PUBLIC void FIELD_CHECK_RADIO::reload(const char *dianame, int nof) { val = *var; sendval (dianame,nof,'C',val); } PUBLIC void FIELD_CHECK_RADIO::save() { *var = val; } /* Position the cursor in the field */ PUBLIC void FIELD_CHECK_RADIO::setcursor(WINDOW *dialog, int) { wmove (dialog,box.y,box.x+1); } /* Draw only the input part of a field */ PUBLIC void FIELD_CHECK_RADIO::drawtxt_check ( WINDOW *dialog, char openchar, // Code to draw the left side of the button char closechar, // Right side char selchar) // Interior of the button { char buf[4+strlen(title)+1]; sprintf (buf,"%c%c%c %s",openchar,selchar,closechar,title); wattrset(dialog, inputbox_attr); diaetc_drawinput (dialog,box.x,box.y,box.width,buf); } /* Build a key that uniquely identify this field in the dialog */ PUBLIC void FIELD_CHECK_RADIO::format_htmlkey(char *key, int nof) { char buf[strlen(prompt)+1+strlen(title)+1]; strcpy (buf,prompt); strcat (buf,title); html_formatkey (key,"%s-%d",buf,nof); } /* #Specification: dialog / checkbox A checkbox is used to toggle an option. It edit a variable from 0 to 1. The checkbox is presented like this # prompt [ ] some explanation prompt [X] some explanation # */ # PUBLIC FIELD_CHECK::FIELD_CHECK( const char *_prompt, char &_var, const char *_title) : FIELD_CHECK_RADIO (_prompt,_var,_title) { } /* Draw only the input part of a field */ PUBLIC void FIELD_CHECK::drawtxt ( WINDOW *dialog, int, int, int) { char checked = readonly ? '#' : 'X'; drawtxt_check (dialog,'[',']',val ? checked : ' '); } static const char YES[]="yes"; static const char NO[]="no"; PUBLIC void FIELD_CHECK::html_draw(int nof, SSTRINGS &) { char key[100]; format_htmlkey (key,nof); html_defvar (prompt,title,"checkbox",key,val,""); html_defvarcur (key,backup); } PUBLIC void FIELD_CHECK::gui_draw(int nof, SSTRINGS &) { guisendprompt(); char tmp[1000]; diagui_sendcmd (P_Checkbox,"C%d %d %s\n",nof,val,diagui_quote(title,tmp)); } PUBLIC MENU_STATUS FIELD_CHECK::gui_get(int nof, const char *, const char *) { val = atoi (diagui_getval('C',nof)); return MENU_NULL; } /* Get the letter use to define the ID of a field in GUI mode. */ PUBLIC char FIELD_CHECK::getidprefix () { return 'C'; } PUBLIC int FIELD_CHECK::html_validate(int nof) { int ret = -1; char key[100]; format_htmlkey (key,nof); char oldval = stricmp(html_getoldval(key),YES)==0; char newval = stricmp(html_getval(key),YES)==0; if (backup == oldval){ ret = 0; val = newval; } return ret; } PUBLIC MENU_STATUS FIELD_CHECK::dokey ( WINDOW *dialog, int key, FIELD_MSG &, bool &) { switch (key){ case ' ': val = !val; drawtxt (dialog,0,0,0); break; } return MENU_NULL; } /* Add a check box field to the dialog. */ PUBLIC FIELD_CHECK *DIALOG::newf_chk( const char *prompt, char &var, const char *title) { FIELD_CHECK *s = new FIELD_CHECK(prompt,var,title); add (s); return s; } class FIELD_CHECK_BOOL: public FIELD_CHECK{ bool &bvar; char cvar; /*~PROTOBEG~ FIELD_CHECK_BOOL */ public: FIELD_CHECK_BOOL (const char *_prompt, bool&_var, const char *_title); void reload (const char *dianame, int nof); void restore (void); void save (void); /*~PROTOEND~ FIELD_CHECK_BOOL */ }; PUBLIC FIELD_CHECK_BOOL::FIELD_CHECK_BOOL ( const char *_prompt, bool &_var, const char *_title) : FIELD_CHECK (_prompt,cvar,_title),bvar(_var) { cvar = _var ? 1 : 0; val = cvar; } PUBLIC void FIELD_CHECK_BOOL::restore() { FIELD_CHECK::restore(); bvar = cvar != 0; } PUBLIC void FIELD_CHECK_BOOL::save() { FIELD_CHECK::save(); bvar = cvar != 0; } PUBLIC void FIELD_CHECK_BOOL::reload(const char *dianame, int nof) { cvar = bvar ? 1 : 0; FIELD_CHECK::reload(dianame,nof); } PUBLIC FIELD_CHECK *DIALOG::newf_chk( const char *prompt, bool &var, const char *title) { FIELD_CHECK *s = new FIELD_CHECK_BOOL(prompt,var,title); add (s); return s; } /* #Specification: dialog / checkbox multi A checkbox multi is used to toggle an between more than one option but not too many. It edit a variable from 0,1,number of option-1. It is presented like this. # prompt (o) opt1 ( ) opt2 ( ) opt3 prompt ( ) opt1 ( ) opt2 ( ) opt3 # */ # PUBLIC FIELD_CHECK_MULTI::FIELD_CHECK_MULTI( const char *_prompt, char &_var, const char *_options[]) : FIELD_CHECK_BASE(_prompt,_var) { int len = 0; for (int i=0; _options[i] != NULL; i++){ const char *str = _options[i]; len += strlen(str)+4+1; options.add (new SSTRING (str)); } box.width = len; } /* Draw only the input part of a field */ PUBLIC void FIELD_CHECK_MULTI::drawtxt ( WINDOW *dialog, int, int, int) { SSTRING tmp; int n = options.getnb(); for (int i=0; iget()); } diaetc_drawinput (dialog,box.x,box.y,box.width,tmp.get()); } PUBLIC void FIELD_CHECK_MULTI::save( ) { *var = val; } PUBLIC void FIELD_CHECK_MULTI::restore( ) { *var = backup; } PUBLIC void FIELD_CHECK_MULTI::reload(const char *dianame, int nof) { val = *var; sendval (dianame,nof,'R',val); } PUBLIC void FIELD_CHECK_MULTI::html_draw(int nof, SSTRINGS &) { char key[100]; format_htmlkey (key,nof); int n = options.getnb(); char valstr[20]; snprintf (valstr,sizeof(valstr)-1,"%d",val); html_defvar (prompt,"","checkboxm",key,valstr,"",true); for (int i=0; iget(); char opt[20]; snprintf (opt,sizeof(opt)-1,"item=\"%d\"",i); html_printf ("