mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 13:47:58 +03:00
367 lines
8.4 KiB
C++
367 lines
8.4 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);
|
|
}
|
|
|