#include "GuiApplication.h" #include "Widget.h" #ifdef __linux__ #include "XcbInterface.h" #include "XcbKeyboard.h" #else #include "Win32UiInterface.h" #endif #include "Window.h" #include "TextElement.h" #include "WindowManager.h" #include "TextEditorView.h" #include "AudioEditorView.h" #include "ImageEditorView.h" #include "WebClientView.h" #include "TabbedPanelWidget.h" #include "TopBar.h" #include "StatusBar.h" #include "HorizontalSpacer.h" #include "FileLogger.h" #include GuiApplication::GuiApplication() : AbstractDesktopApp(), mMainApplication(), mDesktopManager(DesktopManager::Create()) { } GuiApplication::~GuiApplication() { } void GuiApplication::SetMainApplication(MainApplicationPtr app) { mMainApplication = app; mDesktopManager->SetMainApp(app); } void GuiApplication::SetUpWidget() { auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow(); mainWindow->SetSize(800, 600); auto tabbedPanel = TabbedPanelWidget::Create(); auto textEditor = TextEditorView::Create(); auto path = mMainApplication->GetCommandLineArgs()->GetLaunchPath(); path /= "out.txt"; textEditor->GetController()->SetSavePath(path); textEditor->GetController()->SetLoadPath(path); textEditor->Initialize(); tabbedPanel->AddPanel(std::move(textEditor), "Text Editor"); auto audioEditor = AudioEditorView::Create(); tabbedPanel->AddPanel(std::move(audioEditor), "Audio Editor"); auto imageEditor = ImageEditorView::Create(); tabbedPanel->AddPanel(std::move(imageEditor), "Image Editor"); auto webClient = WebClientView::Create(); tabbedPanel->AddPanel(std::move(webClient), "Web Client"); auto topBar = TopBar::Create(); auto statusBar = StatusBar::Create(); auto horizontalSpace = HorizontalSpacer::Create(); horizontalSpace->AddWidgetWithScale(std::move(topBar), 1); horizontalSpace->AddWidgetWithScale(std::move(tabbedPanel), 20); horizontalSpace->AddWidgetWithScale(std::move(statusBar), 1); mainWindow->AddWidget(std::move(horizontalSpace)); } void GuiApplication::Run() { auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow(); SetUpWidget(); #ifdef __linux__ mDesktopManager->SetKeyboard(XcbKeyboard::Create()); bool useOpenGl = true; XcbInterface window_interface; window_interface.SetUseOpenGl(useOpenGl); window_interface.Initialize(mDesktopManager.get()); window_interface.AddWindow(mainWindow, mDesktopManager.get()); window_interface.ShowWindow(mainWindow); if (useOpenGl) { window_interface.CreateOpenGlDrawable(mainWindow); } window_interface.Loop(mDesktopManager.get()); window_interface.ShutDown(); #else mDesktopManager->SetKeyboard(Keyboard::Create()); MLOG_INFO("Creating Window Interface"); Win32UIInterface window_interface; window_interface.AddWindow(mainWindow, mDesktopManager.get()); window_interface.ShowWindow(mainWindow); window_interface.Loop(mDesktopManager.get()); window_interface.ShutDown(); MLOG_INFO("Window Interface Shut Down"); #endif }