From 95e4f93256373434deadf34f721cb773062cd31a Mon Sep 17 00:00:00 2001 From: Nimetu Date: Tue, 31 Mar 2015 18:47:46 +0300 Subject: [PATCH] Add radio button type to CGroupHTML (issue 237) --- code/nel/include/nel/gui/group_html.h | 3 + code/nel/src/gui/group_html.cpp | 105 ++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 8 deletions(-) diff --git a/code/nel/include/nel/gui/group_html.h b/code/nel/include/nel/gui/group_html.h index 98532abe4..bafa63348 100644 --- a/code/nel/include/nel/gui/group_html.h +++ b/code/nel/include/nel/gui/group_html.h @@ -163,6 +163,9 @@ namespace NLGUI std::string DefaultCheckBoxBitmapNormal; std::string DefaultCheckBoxBitmapPushed; std::string DefaultCheckBoxBitmapOver; + std::string DefaultRadioButtonBitmapNormal; + std::string DefaultRadioButtonBitmapPushed; + std::string DefaultRadioButtonBitmapOver; std::string DefaultBackgroundBitmapView; std::string CurrentLinkTitle; diff --git a/code/nel/src/gui/group_html.cpp b/code/nel/src/gui/group_html.cpp index c06daeead..0c9ee58a0 100644 --- a/code/nel/src/gui/group_html.cpp +++ b/code/nel/src/gui/group_html.cpp @@ -1445,30 +1445,71 @@ namespace NLGUI _Forms.back().Entries.push_back (entry); } } - else if (type == "checkbox") + else if (type == "checkbox" || type == "radio") { - // The submit button + CCtrlButton::EType btnType; string name; - string normal = DefaultCheckBoxBitmapNormal; - string pushed = DefaultCheckBoxBitmapPushed; - string over = DefaultCheckBoxBitmapOver; + string normal; + string pushed; + string over; + ucstring ucValue = ucstring("on"); bool checked = false; + + if (type == "radio") + { + btnType = CCtrlButton::RadioButton; + normal = DefaultRadioButtonBitmapNormal; + pushed = DefaultRadioButtonBitmapPushed; + over = DefaultRadioButtonBitmapOver; + } + else + { + btnType = CCtrlButton::ToggleButton; + normal = DefaultCheckBoxBitmapNormal; + pushed = DefaultCheckBoxBitmapPushed; + over = DefaultCheckBoxBitmapOver; + } + if (present[MY_HTML_INPUT_NAME] && value[MY_HTML_INPUT_NAME]) name = value[MY_HTML_INPUT_NAME]; if (present[MY_HTML_INPUT_SRC] && value[MY_HTML_INPUT_SRC]) normal = value[MY_HTML_INPUT_SRC]; + if (present[MY_HTML_INPUT_VALUE] && value[MY_HTML_INPUT_VALUE]) + ucValue.fromUtf8(value[MY_HTML_INPUT_VALUE]); checked = (present[MY_HTML_INPUT_CHECKED] && value[MY_HTML_INPUT_CHECKED]); // Add the ctrl button - CCtrlButton *checkbox = addButton (CCtrlButton::ToggleButton, name, normal, pushed, over, + CCtrlButton *checkbox = addButton (btnType, name, normal, pushed, over, globalColor, "", "", tooltip); if (checkbox) { + if (btnType == CCtrlButton::RadioButton) + { + // group together buttons with same name + CForm &form = _Forms.back(); + bool notfound = true; + for (uint i=0; igetType() == CCtrlButton::RadioButton) + { + checkbox->initRBRefFromRadioButton(form.Entries[i].Checkbox); + notfound = false; + break; + } + } + if (notfound) + { + // this will start a new group (initRBRef() would take first button in group container otherwise) + checkbox->initRBRefFromRadioButton(checkbox); + } + } + checkbox->setPushed (checked); - // Add the text area to the form + // Add the button to the form CGroupHTML::CForm::CEntry entry; entry.Name = name; + entry.Value = decodeHTMLEntities(ucValue); entry.Checkbox = checkbox; _Forms.back().Entries.push_back (entry); } @@ -2040,6 +2081,9 @@ namespace NLGUI DefaultCheckBoxBitmapNormal = "checkbox_normal.tga"; DefaultCheckBoxBitmapPushed = "checkbox_pushed.tga"; DefaultCheckBoxBitmapOver = "checkbox_over.tga"; + DefaultRadioButtonBitmapNormal = "w_radiobutton.png"; + DefaultRadioButtonBitmapPushed = "w_radiobutton_pushed.png"; + DefaultRadioButtonBitmapOver = ""; DefaultBackgroundBitmapView = "bg"; clearContext(); @@ -2275,6 +2319,21 @@ namespace NLGUI return DefaultCheckBoxBitmapOver; } else + if( name == "radiobutton_bitmap_normal" ) + { + return DefaultRadioButtonBitmapNormal; + } + else + if( name == "radiobutton_bitmap_pushed" ) + { + return DefaultRadioButtonBitmapPushed; + } + else + if( name == "radiobutton_bitmap_over" ) + { + return DefaultRadioButtonBitmapOver; + } + else if( name == "background_bitmap_view" ) { return DefaultBackgroundBitmapView; @@ -2618,6 +2677,24 @@ namespace NLGUI return; } else + if( name == "radiobutton_bitmap_normal" ) + { + DefaultRadioButtonBitmapNormal = value; + return; + } + else + if( name == "radiobutton_bitmap_pushed" ) + { + DefaultRadioButtonBitmapPushed = value; + return; + } + else + if( name == "radiobutton_bitmap_over" ) + { + DefaultRadioButtonBitmapOver = value; + return; + } + else if( name == "background_bitmap_view" ) { DefaultBackgroundBitmapView = value; @@ -2731,6 +2808,9 @@ namespace NLGUI xmlSetProp( node, BAD_CAST "checkbox_bitmap_normal", BAD_CAST DefaultCheckBoxBitmapNormal.c_str() ); xmlSetProp( node, BAD_CAST "checkbox_bitmap_pushed", BAD_CAST DefaultCheckBoxBitmapPushed.c_str() ); xmlSetProp( node, BAD_CAST "checkbox_bitmap_over", BAD_CAST DefaultCheckBoxBitmapOver.c_str() ); + xmlSetProp( node, BAD_CAST "radiobutton_bitmap_normal", BAD_CAST DefaultRadioButtonBitmapNormal.c_str() ); + xmlSetProp( node, BAD_CAST "radiobutton_bitmap_pushed", BAD_CAST DefaultRadioButtonBitmapPushed.c_str() ); + xmlSetProp( node, BAD_CAST "radiobutton_bitmap_over", BAD_CAST DefaultRadioButtonBitmapOver.c_str() ); xmlSetProp( node, BAD_CAST "background_bitmap_view", BAD_CAST DefaultBackgroundBitmapView.c_str() ); xmlSetProp( node, BAD_CAST "home", BAD_CAST Home.c_str() ); xmlSetProp( node, BAD_CAST "browse_next_time", BAD_CAST toString( _BrowseNextTime ).c_str() ); @@ -2888,6 +2968,15 @@ namespace NLGUI ptr = xmlGetProp (cur, (xmlChar*)"checkbox_bitmap_over"); if (ptr) DefaultCheckBoxBitmapOver = (const char*)(ptr); + ptr = xmlGetProp (cur, (xmlChar*)"radiobutton_bitmap_normal"); + if (ptr) + DefaultRadioButtonBitmapNormal = (const char*)(ptr); + ptr = xmlGetProp (cur, (xmlChar*)"radiobutton_bitmap_pushed"); + if (ptr) + DefaultRadioButtonBitmapPushed = (const char*)(ptr); + ptr = xmlGetProp (cur, (xmlChar*)"radiobutton_bitmap_over"); + if (ptr) + DefaultRadioButtonBitmapOver = (const char*)(ptr); ptr = xmlGetProp (cur, (xmlChar*)"background_bitmap_view"); if (ptr) DefaultBackgroundBitmapView = (const char*)(ptr); @@ -3966,7 +4055,7 @@ namespace NLGUI // todo handle unicode POST here if (form.Entries[i].Checkbox->getPushed ()) { - entryData = ucstring ("on"); + entryData = form.Entries[i].Value; addEntry = true; } }