stuff-from-scratch/src/client/GuiApplication.cpp

99 lines
2.8 KiB
C++
Raw Normal View History

2020-05-02 07:31:03 +00:00
#include "GuiApplication.h"
#include "Widget.h"
#include "HorizontalSpacer.h"
#include "VerticalSpacer.h"
#include "TextBox.h"
2020-05-02 07:31:03 +00:00
#include "Button.h"
#include "Label.h"
#include "XcbInterface.h"
#include "XcbKeyboard.h"
#include "Window.h"
#include "TextElement.h"
#include "WindowManager.h"
#include "TextEditorPanel.h"
#include <iostream>
2020-05-02 07:31:03 +00:00
GuiApplication::GuiApplication()
: AbstractDesktopApp(),
mMainApplication(),
mDesktopManager(DesktopManager::Create())
2020-05-02 07:31:03 +00:00
{
2020-05-02 07:31:03 +00:00
}
GuiApplication::~GuiApplication()
{
}
void GuiApplication::SetMainApplication(MainApplicationPtr app)
{
mMainApplication = app;
2020-05-02 07:31:03 +00:00
}
void GuiApplication::SetUpWidget()
2020-05-02 07:31:03 +00:00
{
auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow();
mainWindow->SetSize(800, 600);
2020-05-02 07:31:03 +00:00
// Left panel
auto textEditorButton = Button::Create();
textEditorButton->SetLabel("Text Editor");
textEditorButton->SetBackgroundColor(Color::Create(156, 156, 156));
auto imageEditorButton = Button::Create();
imageEditorButton->SetLabel("Image Editor");
imageEditorButton->SetBackgroundColor(Color::Create(156, 156, 156));
auto audioEditorButton = Button::Create();
audioEditorButton->SetLabel("Audio Editor");
audioEditorButton->SetBackgroundColor(Color::Create(156, 156, 156));
auto webClientButton = Button::Create();
webClientButton->SetLabel("Web Client");
webClientButton->SetBackgroundColor(Color::Create(156, 156, 156));
auto leftSpacer = HorizontalSpacer::Create();
leftSpacer->AddWidget(std::move(textEditorButton));
leftSpacer->AddWidget(std::move(imageEditorButton));
leftSpacer->AddWidget(std::move(audioEditorButton));
leftSpacer->AddWidget(std::move(webClientButton));
leftSpacer->SetMaxHeight(200);
// Right panel
auto textEditor = TextEditorPanel::Create();
textEditor->SetOnSaveFunction([](const std::string& content)
{
std::cout << content << std::endl;
});
textEditor->Initialize();
auto vertSpacer = VerticalSpacer::Create();
vertSpacer->AddWidgetWithScale(std::move(leftSpacer), 1);
vertSpacer->AddWidgetWithScale(std::move(textEditor), 4);
mainWindow->AddWidget(std::move(vertSpacer));
}
2020-05-02 07:31:03 +00:00
void GuiApplication::Run()
{
auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow();
SetUpWidget();
2020-05-02 07:31:03 +00:00
mDesktopManager->SetKeyboard(XcbKeyboard::Create());
2020-05-02 07:31:03 +00:00
bool useOpenGl = false;
XcbInterface window_interface;
window_interface.SetUseOpenGl(useOpenGl);
window_interface.Initialize();
window_interface.AddWindow(mainWindow);
window_interface.ShowWindow(mainWindow);
if(useOpenGl)
{
window_interface.CreateOpenGlDrawable(mainWindow);
}
window_interface.Loop(mDesktopManager.get());
window_interface.ShutDown();
2020-05-02 07:31:03 +00:00
}