#include "GuiApplication.h" #include "Widget.h" #include "HorizontalSpacer.h" #include "VerticalSpacer.h" #include "TextBox.h" #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 GuiApplication::GuiApplication() : AbstractDesktopApp(), mMainApplication(), mDesktopManager(DesktopManager::Create()) { } GuiApplication::~GuiApplication() { } void GuiApplication::SetMainApplication(MainApplicationPtr app) { mMainApplication = app; } void GuiApplication::SetUpWidget() { auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow(); mainWindow->SetSize(800, 600); // 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)); } void GuiApplication::Run() { auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow(); SetUpWidget(); mDesktopManager->SetKeyboard(XcbKeyboard::Create()); 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(); }