mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
Implement UICheckBox (#77)
* Implement UICheckBox * Remove UICheckBox destructor and unnecessary `str` initializations
This commit is contained in:
parent
d757fa6306
commit
7280acee42
2 changed files with 151 additions and 80 deletions
|
@ -22,129 +22,195 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
|
||||
#include "ui_local.h"
|
||||
|
||||
Event EV_UICheckBox_SetCheckedCommand
|
||||
(
|
||||
"checked_command",
|
||||
EV_DEFAULT,
|
||||
"s",
|
||||
"command",
|
||||
"Command to execute when checkbox is checked"
|
||||
);
|
||||
|
||||
Event EV_UICheckBox_SetUncheckedCommand
|
||||
(
|
||||
"unchecked_command",
|
||||
EV_DEFAULT,
|
||||
"s",
|
||||
"command",
|
||||
"Command to execute when checkbox is unchecked" // text not present in original executable
|
||||
);
|
||||
|
||||
Event EV_UICheckBox_SetCheckedShader
|
||||
(
|
||||
"checked_shader",
|
||||
EV_DEFAULT,
|
||||
"s",
|
||||
"shader",
|
||||
"Set the shader of the small button when it is checked"
|
||||
);
|
||||
|
||||
Event EV_UICheckBox_SetUncheckedShader
|
||||
(
|
||||
"unchecked_shader",
|
||||
EV_DEFAULT,
|
||||
"s",
|
||||
"shader",
|
||||
"Set the shader of the small button when it is unchecked"
|
||||
);
|
||||
|
||||
CLASS_DECLARATION( UIWidget, UICheckBox, NULL )
|
||||
{
|
||||
{ NULL, NULL }
|
||||
{&W_LeftMouseDown, &UICheckBox::Pressed },
|
||||
{&W_LeftMouseUp, &UICheckBox::Released },
|
||||
{&W_MouseEntered, &UICheckBox::MouseEntered },
|
||||
{&W_MouseExited, &UICheckBox::MouseExited },
|
||||
{&EV_UICheckBox_SetCheckedCommand, &UICheckBox::SetCheckedCommand },
|
||||
{&EV_UICheckBox_SetUncheckedCommand, &UICheckBox::SetUncheckedCommand},
|
||||
{&EV_UICheckBox_SetCheckedShader, &UICheckBox::SetCheckedShader },
|
||||
{&EV_UICheckBox_SetUncheckedShader, &UICheckBox::SetUncheckedShader },
|
||||
{NULL, NULL }
|
||||
};
|
||||
|
||||
UICheckBox::UICheckBox()
|
||||
{
|
||||
// FIXME: stub
|
||||
AllowActivate(qtrue);
|
||||
m_check_height = 14.0;
|
||||
m_check_width = 14.0;
|
||||
m_indent = 8.0;
|
||||
m_depressed = qfalse;
|
||||
m_checked_material = NULL;
|
||||
m_unchecked_material = NULL;
|
||||
}
|
||||
|
||||
void UICheckBox::Draw
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
void UICheckBox::Draw()
|
||||
{
|
||||
// FIXME: stub
|
||||
if (!m_depressed)
|
||||
{
|
||||
Draw3DBox(0.0f, 0.0f, m_frame.size.width, m_frame.size.height, 0, m_border_color, m_local_alpha);
|
||||
}
|
||||
|
||||
SetColor(m_foreground_color, m_local_alpha);
|
||||
|
||||
UColor color = m_checked ? UBlue : UBlack;
|
||||
UIReggedMaterial* material = m_checked ? m_checked_material : m_unchecked_material;
|
||||
|
||||
float width = m_check_width * m_vVirtualScale[0];
|
||||
float height = m_check_height * m_vVirtualScale[1];
|
||||
float x = m_vVirtualScale[0] * m_indent;
|
||||
float y = (m_frame.size.height - height) * 0.5f;
|
||||
if (material)
|
||||
{
|
||||
material->ReregisterMaterial();
|
||||
uii.Rend_DrawPicStretched(x, y, width, height, 0.0f, 0.0f, 1.0f, 1.0f, material->GetMaterial());
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawBox(x, y, width, height, color, m_local_alpha);
|
||||
}
|
||||
|
||||
float titleX = m_indent * 1.5f + m_check_width;
|
||||
float titleY = (m_frame.size.height / m_vVirtualScale[1] - getTitleHeight()) * 0.5f - 1.0f;
|
||||
return DrawTitle(titleX, titleY);
|
||||
}
|
||||
|
||||
void UICheckBox::CharEvent
|
||||
(
|
||||
int ch
|
||||
)
|
||||
|
||||
void UICheckBox::CharEvent(int ch)
|
||||
{
|
||||
// FIXME: stub
|
||||
// Support ticking checkboxes with spacebar
|
||||
if (ch == ' ')
|
||||
{
|
||||
m_checked = !m_checked;
|
||||
UpdateCvar();
|
||||
}
|
||||
}
|
||||
|
||||
void UICheckBox::Pressed
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::Pressed(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
m_depressed = qtrue;
|
||||
}
|
||||
|
||||
void UICheckBox::Released
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::Released(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
m_checked = !m_checked;
|
||||
|
||||
// Handle additional commands:
|
||||
// this is for checkboxes that either change multiple cvars,
|
||||
// or that set a cvar with a non-bool value.
|
||||
// e.g.: the Invert Mouse checkbox originally flips cvar m_invert_pitch,
|
||||
// but also does ("set m_pitch -0.022" : "set m_pitch 0.022") commands using this
|
||||
str command = m_checked ? m_checked_command : m_unchecked_command;
|
||||
Cbuf_AddText(command.c_str());
|
||||
|
||||
m_depressed = qfalse;
|
||||
UpdateCvar();
|
||||
}
|
||||
|
||||
void UICheckBox::UpdateCvar
|
||||
(
|
||||
void
|
||||
)
|
||||
void UICheckBox::UpdateCvar()
|
||||
{
|
||||
// FIXME: stub
|
||||
if (m_cvarname.length())
|
||||
{
|
||||
UI_SetCvarInt(m_cvarname, m_checked);
|
||||
}
|
||||
|
||||
if (m_command.length()) // always seems to be NULL, could be remnant code
|
||||
{
|
||||
const char* text_to_append = m_checked ? " 1\n" : " 0\n";
|
||||
m_command.append(text_to_append);
|
||||
Cbuf_AddText(m_command.c_str());
|
||||
}
|
||||
|
||||
if (m_commandhandler) // always seems to be NULL, could be remnant code
|
||||
{
|
||||
const char *checkedInt = va("%d", m_checked);
|
||||
m_commandhandler(checkedInt, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void UICheckBox::MouseEntered
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::MouseEntered(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
auto num = ev->GetInteger(3);
|
||||
uWinMan.ActivateControl(this);
|
||||
if (num)
|
||||
{
|
||||
m_depressed = qtrue;
|
||||
}
|
||||
}
|
||||
|
||||
void UICheckBox::MouseExited
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::MouseExited(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
m_depressed = qfalse;
|
||||
}
|
||||
|
||||
void UICheckBox::SetCheckedCommand
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::SetCheckedCommand(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
m_checked_command = ev->GetString(1);
|
||||
}
|
||||
|
||||
void UICheckBox::SetUncheckedCommand
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::SetUncheckedCommand(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
m_unchecked_command = ev->GetString(1);
|
||||
}
|
||||
|
||||
void UICheckBox::SetCheckedShader
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::SetCheckedShader(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
str shader = ev->GetString(1);
|
||||
m_checked_material = uWinMan.RegisterShader(shader);
|
||||
}
|
||||
|
||||
void UICheckBox::SetUncheckedShader
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
|
||||
void UICheckBox::SetUncheckedShader(Event *ev)
|
||||
{
|
||||
// FIXME: stub
|
||||
str shader = ev->GetString(1);
|
||||
m_unchecked_material = uWinMan.RegisterShader(shader);
|
||||
}
|
||||
|
||||
void UICheckBox::UpdateData
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
void UICheckBox::UpdateData(void)
|
||||
{
|
||||
// FIXME: stub
|
||||
if (m_cvarname.length())
|
||||
{
|
||||
m_checked = UI_GetCvarInt(m_cvarname.c_str(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
bool UICheckBox::isChecked
|
||||
(
|
||||
void
|
||||
)
|
||||
|
||||
bool UICheckBox::isChecked()
|
||||
{
|
||||
// FIXME: stub
|
||||
return false;
|
||||
return m_checked;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue