stuff-from-scratch/src/windows/managers/DesktopManager.cpp
2022-11-14 11:19:51 +00:00

131 lines
2.8 KiB
C++

#include "DesktopManager.h"
#include "AbstractDesktopApp.h"
#include "FileLogger.h"
DesktopManager::DesktopManager(AbstractDesktopApp* application)
: mScreens(),
mWindowManager(WindowManager::Create()),
mKeyboard(Keyboard::Create()),
mUiApplication(application),
mModified(false),
mEventManager(EventManager::Create())
{
}
DesktopManager::~DesktopManager()
{
}
std::unique_ptr<DesktopManager> DesktopManager::Create(AbstractDesktopApp* application)
{
return std::make_unique<DesktopManager>(application);
}
void DesktopManager::clearEvents()
{
mEventManager->ClearEvents();
}
void DesktopManager::onKeyboardEvent(const KeyboardEvent* event)
{
mWindowManager->onKeyboardEvent(event);
}
void DesktopManager::onPaintEvent(const PaintEvent* event)
{
mWindowManager->onPaintEvent(event);
}
void DesktopManager::onMouseEvent(const MouseEvent* event)
{
mWindowManager->onMouseEvent(event);
}
bool DesktopManager::isModified() const
{
return mModified;
}
void DesktopManager::onUiEvent(UiEventUPtr eventUPtr)
{
mModified = false;
const auto event = mEventManager->AddEvent(std::move(eventUPtr));
switch (event->GetType())
{
case (UiEvent::Type::Paint):
{
onPaintEvent(dynamic_cast<const PaintEvent*>(event));
break;
}
case (UiEvent::Type::Keyboard):
{
onKeyboardEvent(dynamic_cast<const KeyboardEvent*>(event));
mModified = true;
break;
}
case (UiEvent::Type::Mouse):
{
auto mouseEvent = dynamic_cast<const MouseEvent*>(event);
onMouseEvent(mouseEvent);
if (mouseEvent->GetAction() == MouseEvent::Action::Pressed)
{
mModified = true;
}
else if(mouseEvent->GetAction() == MouseEvent::Action::Released)
{
mModified = true;
}
break;
}
default:
break;
}
}
void DesktopManager::setIsModified(bool modified)
{
mModified = modified;
}
Keyboard* DesktopManager::getKeyboard() const
{
return mKeyboard.get();
}
void DesktopManager::setKeyboard(KeyboardUPtr keyboard)
{
mKeyboard = std::move(keyboard);
}
AbstractApp* DesktopManager::getMainApp() const
{
return mUiApplication->getMainApplication();
}
void DesktopManager::addScreen(ScreenPtr screen)
{
mScreens.push_back(std::move(screen));
}
mt::Screen* DesktopManager::getDefaultScreen() const
{
if (mScreens.size() > 0)
{
return mScreens[0].get();
}
return nullptr;
}
void DesktopManager::setWindowManager(WindowManagerUPtr windowManager)
{
mWindowManager = std::move(windowManager);
}
WindowManager* DesktopManager::getWindowManager() const
{
return mWindowManager.get();
}