pcbjam/tests/apps/standalone/aui/aui_test.cpp
Viktor Vaczi a26b40c063 Reorganize project structure for clarity
- Rename tests/wasm-app/ to tests/apps/ for brevity
- Move lib/gl_immediate_shim.js to wasm/shims/ (consolidates WASM files)
- Delete docs/ directory (outdated Nov 2024 research docs)
- Delete patches/ directory (already applied to fork submodules)
- Delete wasm/patches/ and wasm/config/ (empty/unused)
- Update all file references in scripts, configs, and documentation
- Update .gitignore for new tests/apps/ paths

Verified both build workflows pass:
- wxWidgets tests: 255 passed
- Docker KiCad build: completed successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 14:06:23 +01:00

143 lines
4.1 KiB
C++

// wxAuiManager Test - Tests AUI docking functionality in WASM
// KiCad uses AUI extensively for dockable panels
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/aui/aui.h"
#ifdef __EMSCRIPTEN__
#include <emscripten/emscripten.h>
#endif
class AuiTestApp : public wxApp
{
public:
virtual bool OnInit() override;
};
class AuiTestFrame : public wxFrame
{
public:
AuiTestFrame();
~AuiTestFrame();
private:
wxAuiManager m_mgr;
wxTextCtrl* m_log;
void LogEvent(const wxString& msg);
void OnPaneClose(wxAuiManagerEvent& evt);
wxDECLARE_EVENT_TABLE();
};
wxBEGIN_EVENT_TABLE(AuiTestFrame, wxFrame)
EVT_AUI_PANE_CLOSE(AuiTestFrame::OnPaneClose)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(AuiTestApp);
bool AuiTestApp::OnInit()
{
if (!wxApp::OnInit())
return false;
AuiTestFrame* frame = new AuiTestFrame();
frame->Show(true);
return true;
}
AuiTestFrame::AuiTestFrame()
: wxFrame(nullptr, wxID_ANY, "wxAuiManager WASM Test",
wxDefaultPosition, wxSize(800, 600))
{
m_mgr.SetManagedWindow(this);
// Create center pane with event log
m_log = new wxTextCtrl(this, wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_READONLY);
m_mgr.AddPane(m_log, wxAuiPaneInfo().Name("log").Caption("Event Log")
.Center().CloseButton(false));
// Create left panel (like KiCad's properties panel)
wxPanel* leftPanel = new wxPanel(this);
leftPanel->SetBackgroundColour(*wxLIGHT_GREY);
wxBoxSizer* leftSizer = new wxBoxSizer(wxVERTICAL);
leftSizer->Add(new wxStaticText(leftPanel, wxID_ANY, "Properties Panel"), 0, wxALL, 10);
leftSizer->Add(new wxStaticText(leftPanel, wxID_ANY, "Like KiCad's"), 0, wxALL, 5);
leftSizer->Add(new wxStaticText(leftPanel, wxID_ANY, "property editor"), 0, wxALL, 5);
leftPanel->SetSizer(leftSizer);
m_mgr.AddPane(leftPanel, wxAuiPaneInfo().Name("properties").Caption("Properties")
.Left().Layer(1).Position(1).CloseButton(true).MaximizeButton(true)
.MinSize(150, 200));
// Create right panel (like KiCad's layer manager)
wxPanel* rightPanel = new wxPanel(this);
rightPanel->SetBackgroundColour(wxColour(240, 240, 255));
wxBoxSizer* rightSizer = new wxBoxSizer(wxVERTICAL);
rightSizer->Add(new wxStaticText(rightPanel, wxID_ANY, "Layers Panel"), 0, wxALL, 10);
rightSizer->Add(new wxStaticText(rightPanel, wxID_ANY, "Like KiCad's"), 0, wxALL, 5);
rightSizer->Add(new wxStaticText(rightPanel, wxID_ANY, "layer manager"), 0, wxALL, 5);
rightPanel->SetSizer(rightSizer);
m_mgr.AddPane(rightPanel, wxAuiPaneInfo().Name("layers").Caption("Layers")
.Right().Layer(1).Position(1).CloseButton(true).MaximizeButton(true)
.MinSize(150, 200));
// Create bottom panel (like KiCad's message panel)
wxPanel* bottomPanel = new wxPanel(this);
bottomPanel->SetBackgroundColour(wxColour(255, 255, 240));
wxBoxSizer* bottomSizer = new wxBoxSizer(wxVERTICAL);
bottomSizer->Add(new wxStaticText(bottomPanel, wxID_ANY,
"Message Panel - Like KiCad's message area"), 0, wxALL, 5);
bottomPanel->SetSizer(bottomSizer);
m_mgr.AddPane(bottomPanel, wxAuiPaneInfo().Name("messages").Caption("Messages")
.Bottom().Layer(0).Position(1).CloseButton(true)
.MinSize(-1, 80));
m_mgr.Update();
CreateStatusBar();
SetStatusText("AUI Manager ready - try dragging and docking panels");
LogEvent("AUI test app started");
LogEvent("Created dockable panels: Properties, Layers, Messages");
#ifdef __EMSCRIPTEN__
EM_ASM({
console.log('[AUI_TEST] wxAuiManager test app started successfully');
});
#endif
}
AuiTestFrame::~AuiTestFrame()
{
m_mgr.UnInit();
}
void AuiTestFrame::LogEvent(const wxString& msg)
{
m_log->AppendText(msg + "\n");
SetStatusText(msg);
#ifdef __EMSCRIPTEN__
EM_ASM({
console.log('[AUI_EVENT] ' + UTF8ToString($0));
}, msg.c_str().AsChar());
#endif
}
void AuiTestFrame::OnPaneClose(wxAuiManagerEvent& evt)
{
wxAuiPaneInfo* pane = evt.GetPane();
if (pane) {
LogEvent(wxString::Format("Pane closing: %s", pane->name));
}
}