CLI_Manager/app/inc/Manager.h

111 lines
2.4 KiB
C++

#pragma once
#include "imgui.h"
#include "AppState.h"
#include "TrayIcon.h"
#ifdef USE_WIN32_BACKEND
#include <d3d11.h>
#include <windows.h>
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#else
#ifdef _WIN32
#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3.h>
#include <GLFW/glfw3native.h>
#include <windows.h>
#elif __APPLE__
#define GLFW_EXPOSE_NATIVE_COCOA
#include <GLFW/glfw3.h>
#include <GLFW/glfw3native.h>
#else
#include <GLFW/glfw3.h>
#endif
#include "imgui_impl_glfw.h"
#include "imgui_impl_opengl3.h"
#endif
#include <memory>
class Manager {
public:
Manager();
~Manager();
bool Initialize();
void Run();
void Shutdown();
void OnTrayShowWindow();
void OnTrayExit();
AppState m_app_state;
private:
// UI渲染
void RenderUI();
void RenderMenuBar();
void RenderMainContent();
void RenderSettingsMenu();
void RenderStopCommandSettings();
void RenderEnvironmentVariablesSettings();
void RenderOutputEncodingSettings();
// 事件处理
void HandleMessages();
bool ShouldExit() const;
void ShowMainWindow();
void HideMainWindow();
// 平台相关初始化
#ifdef USE_WIN32_BACKEND
bool InitializeWin32();
bool InitializeDirectX11();
void CleanupWin32();
void CleanupDirectX11();
static LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
HWND m_hwnd = nullptr;
WNDCLASSEX m_wc = {};
ID3D11Device* m_pd3dDevice = nullptr;
ID3D11DeviceContext* m_pd3dDeviceContext = nullptr;
IDXGISwapChain* m_pSwapChain = nullptr;
ID3D11RenderTargetView* m_mainRenderTargetView = nullptr;
#else
bool InitializeGLFW();
void CleanupGLFW();
static void GlfwErrorCallback(int error, const char* description);
GLFWwindow* m_window = nullptr;
const char* m_glsl_version = nullptr;
#endif
// 托盘相关
bool InitializeTray();
void CleanupTray();
#ifdef _WIN32
static HWND CreateHiddenWindow();
HWND m_tray_hwnd = nullptr;
#endif
std::unique_ptr<TrayIcon> m_tray;
// 控制标志
bool m_should_exit = false;
bool m_initialized = false;
// DPI缩放因子
float m_dpi_scale = 1.0f;
// 环境变量UI状态
char env_key_input_[256] = {};
char env_value_input_[512] = {};
bool show_env_settings_ = false;
// 编码设置UI状态
bool show_encoding_settings_ = false;
// 历史命令UI状态
bool show_command_history_;
};