1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-15 21:19:57 +00:00
openmw-tes3mp/apps/openmw/mwgui/window_manager.cpp

116 lines
2.7 KiB
C++
Raw Normal View History

#include "window_manager.hpp"
#include "mw_layouts.hpp"
2010-07-20 19:10:51 +00:00
#include "console.hpp"
#include <assert.h>
#include <iostream>
2010-08-22 10:56:35 +00:00
#include <iterator>
using namespace MWGui;
WindowManager::WindowManager(MyGUI::Gui *_gui, MWWorld::Environment& environment,
const Compiler::Extensions& extensions, bool newGame)
: gui(_gui), mode(GM_Game), shown(GW_ALL), allowed(newGame ? GW_None : GW_ALL)
{
// Get size info from the Gui object
assert(gui);
2010-08-30 10:19:45 +00:00
int w = gui->getViewSize().width;
int h = gui->getViewSize().height;
hud = new HUD(w,h);
menu = new MainMenu(w,h);
map = new MapWindow();
stats = new StatsWindow (environment.mWorld->getStore());
inventory = new InventoryWindow ();
console = new Console(w,h, environment, extensions);
// The HUD is always on
hud->setVisible(true);
// Set up visibility
updateVisible();
}
WindowManager::~WindowManager()
{
2010-07-20 19:10:51 +00:00
delete console;
delete hud;
delete map;
delete menu;
delete stats;
delete inventory;
}
void WindowManager::updateVisible()
{
// Start out by hiding everything except the HUD
map->setVisible(false);
menu->setVisible(false);
stats->setVisible(false);
inventory->setVisible(false);
2010-07-20 19:10:51 +00:00
console->disable();
// Mouse is visible whenever we're not in game mode
gui->setVisiblePointer(isGuiMode());
// If in game mode, don't show anything.
if(mode == GM_Game)
{
return;
}
if(mode == GM_MainMenu)
{
// Enable the main menu
menu->setVisible(true);
return;
}
2010-07-20 19:10:51 +00:00
if(mode == GM_Console)
{
console->enable();
return;
}
if(mode == GM_Inventory)
{
// Ah, inventory mode. First, compute the effective set of
// windows to show. This is controlled both by what windows the
// user has opened/closed (the 'shown' variable) and by what
// windows we are allowed to show (the 'allowed' var.)
int eff = shown & allowed;
// Show the windows we want
map -> setVisible( eff & GW_Map );
stats -> setVisible( eff & GW_Stats );
inventory -> setVisible( eff & GW_Inventory );
return;
}
// All other modes are ignored
}
void WindowManager::setValue (const std::string& id, const MWMechanics::Stat<int>& value)
{
stats->setValue (id, value);
}
void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value)
{
stats->setValue (id, value);
hud->setValue (id, value);
}
void WindowManager::messageBox (const std::string& message, const std::vector<std::string>& buttons)
{
std::cout << "message box: " << message << std::endl;
if (!buttons.empty())
2010-08-22 10:56:35 +00:00
{
std::cout << "buttons: ";
std::copy (buttons.begin(), buttons.end(), std::ostream_iterator<std::string> (std::cout, ", "));
std::cout << std::endl;
}
}