mirror of
https://github.com/bearstonem/openmohaa-vr.git
synced 2026-10-23 08:00:18 +02:00
301 lines
9.1 KiB
C++
301 lines
9.1 KiB
C++
/*
|
|
===========================================================================
|
|
Copyright (C) 2015 the OpenMoHAA team
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
or (at your option) any later version.
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
#include "ui_local.h"
|
|
|
|
Event EV_UIPulldownMenuContainer_AddPopup
|
|
(
|
|
"addpopup",
|
|
EV_DEFAULT,
|
|
"ssss",
|
|
"menuname title type string",
|
|
"Adds a popup to the list box.\n"
|
|
"menuname - the name of the menu to add this to\n"
|
|
"title - the string to display\n"
|
|
"type - type of item this is (command,cvar,event_name)\n"
|
|
"string - the data that corresponds to the correct type\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_MenuShader
|
|
(
|
|
"menushader",
|
|
EV_DEFAULT,
|
|
"ss",
|
|
"menuname shader",
|
|
"Adds a menu to the container and sets the shader.\n"
|
|
"menuname - the name of the menu to add this to\n"
|
|
"shader - the string to display"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_SelectedMenuShader
|
|
(
|
|
"selmenushader",
|
|
EV_DEFAULT,
|
|
"ss",
|
|
"menuname shader",
|
|
"Adds a menu to the container and sets the shader when it's selected.\n"
|
|
"menuname - the name of the menu to add this to\n"
|
|
"shader - the string to display"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_PopupHighlightFGColor
|
|
(
|
|
"popup_highlight_fgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the highlight background color of the popup menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_HighlightBGColor
|
|
(
|
|
"highlight_bgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the highlight foreground color of the pulldown menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_HighlightFGColor
|
|
(
|
|
"highlight_fgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the highlight background color of the pulldown menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_PopupHighlightBGColor
|
|
(
|
|
"popup_highlight_bgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the highlight foreground color of the popup menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_PopupFGColor
|
|
(
|
|
"popup_fgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the background color of the popup menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
Event EV_UIPulldownMenuContainer_PopupBGColor
|
|
(
|
|
"popup_bgcolor",
|
|
EV_DEFAULT,
|
|
"sffff",
|
|
"menu r g b a",
|
|
"Set the foreground color of the popup menu\n"
|
|
"menu - the name of the popup menu to color\n"
|
|
);
|
|
|
|
CLASS_DECLARATION(UIWidget, UIPulldownMenuContainer, NULL) {
|
|
{&EV_UIPulldownMenuContainer_AddPopup, &UIPulldownMenuContainer::AddPopup },
|
|
{&EV_UIPulldownMenuContainer_MenuShader, &UIPulldownMenuContainer::SetMenuShader },
|
|
{&EV_UIPulldownMenuContainer_SelectedMenuShader, &UIPulldownMenuContainer::SetSelectedMenuShader },
|
|
{&EV_UIPulldownMenuContainer_PopupHighlightFGColor, &UIPulldownMenuContainer::SetPopupHighlightFGColor},
|
|
{&EV_UIPulldownMenuContainer_PopupHighlightBGColor, &UIPulldownMenuContainer::SetPopupHighlightBGColor},
|
|
{&EV_UIPulldownMenuContainer_PopupFGColor, &UIPulldownMenuContainer::SetPopupFGColor },
|
|
{&EV_UIPulldownMenuContainer_PopupBGColor, &UIPulldownMenuContainer::SetPopupBGColor },
|
|
{&EV_UIPulldownMenuContainer_HighlightFGColor, &UIPulldownMenuContainer::SetHighlightFGColor },
|
|
{&EV_UIPulldownMenuContainer_HighlightBGColor, &UIPulldownMenuContainer::SetHighlightBGColor },
|
|
{&EV_Layout_VirtualRes, &UIPulldownMenuContainer::PulldownVirtualRes },
|
|
{NULL, NULL }
|
|
};
|
|
|
|
UIPulldownMenuContainer::UIPulldownMenuContainer()
|
|
{
|
|
m_menu = new UIPulldownMenu();
|
|
m_menu->CreateAligned(this, this);
|
|
}
|
|
|
|
UIPulldownMenuContainer::~UIPulldownMenuContainer()
|
|
{
|
|
for (int i = m_popups.NumObjects(); i > 0; i--) {
|
|
uipopup_describe *uipd = m_popups.ObjectAt(i);
|
|
m_popups.RemoveObjectAt(i);
|
|
delete uipd;
|
|
}
|
|
|
|
for (int i = m_dataContainer.NumObjects(); i > 0; i--) {
|
|
char *data = m_dataContainer.ObjectAt(i);
|
|
m_dataContainer.RemoveObjectAt(i);
|
|
delete data;
|
|
}
|
|
|
|
// FIXME: m_menu isn't deleted, possible memory leak!
|
|
}
|
|
|
|
void UIPulldownMenuContainer::FrameInitialized(void)
|
|
{
|
|
AllowActivate(qfalse);
|
|
m_menu->setBackgroundColor(m_background_color, qtrue);
|
|
m_menu->setForegroundColor(m_foreground_color);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::setBackgroundAlpha(float f)
|
|
{
|
|
m_alpha = f;
|
|
m_menu->setBackgroundAlpha(f);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::setBackgroundColor(const UColor& color, bool setbordercolor)
|
|
{
|
|
UIWidget::setBackgroundColor(color, setbordercolor);
|
|
m_menu->setBackgroundColor(color, setbordercolor);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::setForegroundColor(const UColor& color)
|
|
{
|
|
UIWidget::setForegroundColor(color);
|
|
m_menu->setForegroundColor(color);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetPopupHighlightFGColor(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setPopupHighlightFGColor(menu, UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetPopupHighlightBGColor(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setPopupHighlightBGColor(menu, UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetPopupFGColor(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setPopupFGColor(menu, UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetPopupBGColor(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setPopupBGColor(menu, UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetHighlightFGColor(Event *ev)
|
|
{
|
|
// original game goes 1-4 for some reason
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setHighlightFGColor(UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetHighlightBGColor(Event *ev)
|
|
{
|
|
// original game goes 1-4 for some reason
|
|
float r = ev->GetFloat(2);
|
|
float g = ev->GetFloat(3);
|
|
float b = ev->GetFloat(4);
|
|
float a = ev->GetFloat(5);
|
|
|
|
m_menu->setHighlightBGColor(UColor(r, g, b, a));
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetMenuShader(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
str shader = ev->GetString(2);
|
|
UIReggedMaterial *mat = uWinMan.RegisterShader(shader);
|
|
m_menu->setPulldownShader(menu, mat);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::SetSelectedMenuShader(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
str shader = ev->GetString(2);
|
|
UIReggedMaterial *mat = uWinMan.RegisterShader(shader);
|
|
m_menu->setSelectedPulldownShader(menu, mat);
|
|
}
|
|
|
|
void UIPulldownMenuContainer::Realign(void)
|
|
{
|
|
UIWidget::Realign();
|
|
m_menu->Realign();
|
|
}
|
|
|
|
void UIPulldownMenuContainer::PulldownVirtualRes(Event *ev)
|
|
{
|
|
LayoutVirtualRes(ev);
|
|
|
|
if (m_bVirtual) {
|
|
Event *newEv = new Event(EV_Layout_VirtualRes);
|
|
newEv->AddInteger(1);
|
|
m_menu->ProcessEvent(newEv);
|
|
}
|
|
}
|
|
|
|
void UIPulldownMenuContainer::AddPopup(Event *ev)
|
|
{
|
|
str menu = ev->GetString(1);
|
|
str title = ev->GetString(2);
|
|
str t = ev->GetString(3);
|
|
str d = ev->GetString(4);
|
|
|
|
uipopup_type type = UI_PopupTypeStringToInt(t);
|
|
|
|
// Make sure to create a duplicate of the original string,
|
|
// otherwise `data` will point to junk when `d` is destroyed.
|
|
// This only seems to run for each popup menu during game startup,
|
|
// so it doesn't appear to leak memory continuously,
|
|
// but it's being cleaned up in uipopup_describe's dtor anyway.
|
|
void *data = strdup(d);
|
|
|
|
uipopup_describe *uipd = new uipopup_describe(title, type, data, NULL);
|
|
m_popups.AddObject(uipd);
|
|
m_menu->AddUIPopupDescribe(menu, uipd);
|
|
}
|