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>
This commit is contained in:
parent
c4cd69f28d
commit
a26b40c063
78 changed files with 38 additions and 128055 deletions
300
tests/apps/standalone/menu/menu_test.cpp
Normal file
300
tests/apps/standalone/menu/menu_test.cpp
Normal file
|
|
@ -0,0 +1,300 @@
|
|||
// wxMenuBar Test - Tests menu functionality in WASM
|
||||
// KiCad uses extensive menus for File, Edit, View, Place, Route, etc.
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten/emscripten.h>
|
||||
#endif
|
||||
|
||||
class MenuTestApp : public wxApp
|
||||
{
|
||||
public:
|
||||
virtual bool OnInit() override;
|
||||
};
|
||||
|
||||
class MenuTestFrame : public wxFrame
|
||||
{
|
||||
public:
|
||||
MenuTestFrame();
|
||||
|
||||
private:
|
||||
wxTextCtrl* m_log;
|
||||
|
||||
void LogEvent(const wxString& msg);
|
||||
|
||||
// Menu event handlers
|
||||
void OnMenuNew(wxCommandEvent& evt);
|
||||
void OnMenuOpen(wxCommandEvent& evt);
|
||||
void OnMenuSave(wxCommandEvent& evt);
|
||||
void OnMenuSaveAs(wxCommandEvent& evt);
|
||||
void OnMenuExit(wxCommandEvent& evt);
|
||||
|
||||
void OnMenuUndo(wxCommandEvent& evt);
|
||||
void OnMenuRedo(wxCommandEvent& evt);
|
||||
void OnMenuCut(wxCommandEvent& evt);
|
||||
void OnMenuCopy(wxCommandEvent& evt);
|
||||
void OnMenuPaste(wxCommandEvent& evt);
|
||||
void OnMenuSelectAll(wxCommandEvent& evt);
|
||||
|
||||
void OnMenuZoomIn(wxCommandEvent& evt);
|
||||
void OnMenuZoomOut(wxCommandEvent& evt);
|
||||
void OnMenuZoomFit(wxCommandEvent& evt);
|
||||
void OnMenuFullScreen(wxCommandEvent& evt);
|
||||
|
||||
void OnMenuPreferences(wxCommandEvent& evt);
|
||||
void OnMenuAbout(wxCommandEvent& evt);
|
||||
void OnMenuHelp(wxCommandEvent& evt);
|
||||
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
enum {
|
||||
ID_NEW = wxID_HIGHEST + 1,
|
||||
ID_OPEN,
|
||||
ID_SAVE,
|
||||
ID_SAVE_AS,
|
||||
ID_UNDO,
|
||||
ID_REDO,
|
||||
ID_CUT,
|
||||
ID_COPY,
|
||||
ID_PASTE,
|
||||
ID_SELECT_ALL,
|
||||
ID_ZOOM_IN,
|
||||
ID_ZOOM_OUT,
|
||||
ID_ZOOM_FIT,
|
||||
ID_FULLSCREEN,
|
||||
ID_PREFERENCES,
|
||||
ID_HELP_CONTENTS
|
||||
};
|
||||
|
||||
wxBEGIN_EVENT_TABLE(MenuTestFrame, wxFrame)
|
||||
EVT_MENU(ID_NEW, MenuTestFrame::OnMenuNew)
|
||||
EVT_MENU(ID_OPEN, MenuTestFrame::OnMenuOpen)
|
||||
EVT_MENU(ID_SAVE, MenuTestFrame::OnMenuSave)
|
||||
EVT_MENU(ID_SAVE_AS, MenuTestFrame::OnMenuSaveAs)
|
||||
EVT_MENU(wxID_EXIT, MenuTestFrame::OnMenuExit)
|
||||
EVT_MENU(ID_UNDO, MenuTestFrame::OnMenuUndo)
|
||||
EVT_MENU(ID_REDO, MenuTestFrame::OnMenuRedo)
|
||||
EVT_MENU(ID_CUT, MenuTestFrame::OnMenuCut)
|
||||
EVT_MENU(ID_COPY, MenuTestFrame::OnMenuCopy)
|
||||
EVT_MENU(ID_PASTE, MenuTestFrame::OnMenuPaste)
|
||||
EVT_MENU(ID_SELECT_ALL, MenuTestFrame::OnMenuSelectAll)
|
||||
EVT_MENU(ID_ZOOM_IN, MenuTestFrame::OnMenuZoomIn)
|
||||
EVT_MENU(ID_ZOOM_OUT, MenuTestFrame::OnMenuZoomOut)
|
||||
EVT_MENU(ID_ZOOM_FIT, MenuTestFrame::OnMenuZoomFit)
|
||||
EVT_MENU(ID_FULLSCREEN, MenuTestFrame::OnMenuFullScreen)
|
||||
EVT_MENU(ID_PREFERENCES, MenuTestFrame::OnMenuPreferences)
|
||||
EVT_MENU(wxID_ABOUT, MenuTestFrame::OnMenuAbout)
|
||||
EVT_MENU(ID_HELP_CONTENTS, MenuTestFrame::OnMenuHelp)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxIMPLEMENT_APP(MenuTestApp);
|
||||
|
||||
bool MenuTestApp::OnInit()
|
||||
{
|
||||
if (!wxApp::OnInit())
|
||||
return false;
|
||||
|
||||
MenuTestFrame* frame = new MenuTestFrame();
|
||||
frame->Show(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
MenuTestFrame::MenuTestFrame()
|
||||
: wxFrame(nullptr, wxID_ANY, "wxMenuBar WASM Test",
|
||||
wxDefaultPosition, wxSize(600, 400))
|
||||
{
|
||||
// Create File menu
|
||||
wxMenu* menuFile = new wxMenu;
|
||||
menuFile->Append(ID_NEW, "&New\tCtrl+N", "Create a new file");
|
||||
menuFile->Append(ID_OPEN, "&Open...\tCtrl+O", "Open an existing file");
|
||||
menuFile->AppendSeparator();
|
||||
menuFile->Append(ID_SAVE, "&Save\tCtrl+S", "Save the current file");
|
||||
menuFile->Append(ID_SAVE_AS, "Save &As...\tCtrl+Shift+S", "Save with a new name");
|
||||
menuFile->AppendSeparator();
|
||||
menuFile->Append(wxID_EXIT, "E&xit\tAlt+F4", "Exit the application");
|
||||
|
||||
// Create Edit menu
|
||||
wxMenu* menuEdit = new wxMenu;
|
||||
menuEdit->Append(ID_UNDO, "&Undo\tCtrl+Z", "Undo the last action");
|
||||
menuEdit->Append(ID_REDO, "&Redo\tCtrl+Y", "Redo the last undone action");
|
||||
menuEdit->AppendSeparator();
|
||||
menuEdit->Append(ID_CUT, "Cu&t\tCtrl+X", "Cut selection to clipboard");
|
||||
menuEdit->Append(ID_COPY, "&Copy\tCtrl+C", "Copy selection to clipboard");
|
||||
menuEdit->Append(ID_PASTE, "&Paste\tCtrl+V", "Paste from clipboard");
|
||||
menuEdit->AppendSeparator();
|
||||
menuEdit->Append(ID_SELECT_ALL, "Select &All\tCtrl+A", "Select all");
|
||||
|
||||
// Create View menu
|
||||
wxMenu* menuView = new wxMenu;
|
||||
menuView->Append(ID_ZOOM_IN, "Zoom &In\tCtrl++", "Zoom in");
|
||||
menuView->Append(ID_ZOOM_OUT, "Zoom &Out\tCtrl+-", "Zoom out");
|
||||
menuView->Append(ID_ZOOM_FIT, "Zoom to &Fit\tCtrl+0", "Fit view to window");
|
||||
menuView->AppendSeparator();
|
||||
menuView->AppendCheckItem(ID_FULLSCREEN, "&Full Screen\tF11", "Toggle full screen mode");
|
||||
|
||||
// Create Tools menu (like KiCad's preferences)
|
||||
wxMenu* menuTools = new wxMenu;
|
||||
menuTools->Append(ID_PREFERENCES, "&Preferences...", "Open preferences dialog");
|
||||
|
||||
// Create Help menu
|
||||
wxMenu* menuHelp = new wxMenu;
|
||||
menuHelp->Append(ID_HELP_CONTENTS, "&Help Contents\tF1", "Show help");
|
||||
menuHelp->AppendSeparator();
|
||||
menuHelp->Append(wxID_ABOUT, "&About...", "About this application");
|
||||
|
||||
// Create menu bar
|
||||
wxMenuBar* menuBar = new wxMenuBar;
|
||||
menuBar->Append(menuFile, "&File");
|
||||
menuBar->Append(menuEdit, "&Edit");
|
||||
menuBar->Append(menuView, "&View");
|
||||
menuBar->Append(menuTools, "&Tools");
|
||||
menuBar->Append(menuHelp, "&Help");
|
||||
|
||||
SetMenuBar(menuBar);
|
||||
|
||||
// Create main content - NO GL canvas
|
||||
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxStaticText* desc = new wxStaticText(this, wxID_ANY,
|
||||
"wxMenuBar Test\n\n"
|
||||
"This tests the menu system which KiCad uses extensively.\n"
|
||||
"Click menu items to see events logged below.");
|
||||
sizer->Add(desc, 0, wxALL, 10);
|
||||
|
||||
m_log = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxSize(-1, 200),
|
||||
wxTE_MULTILINE | wxTE_READONLY);
|
||||
sizer->Add(m_log, 1, wxEXPAND | wxALL, 10);
|
||||
|
||||
SetSizer(sizer);
|
||||
|
||||
// Create status bar
|
||||
CreateStatusBar(2);
|
||||
SetStatusText("Ready");
|
||||
SetStatusText("Menu test", 1);
|
||||
|
||||
LogEvent("Menu test app started");
|
||||
LogEvent("Menu bar created with File, Edit, View, Tools, Help menus");
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
EM_ASM({
|
||||
console.log('[MENU_TEST] wxMenuBar test app started successfully');
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
||||
void MenuTestFrame::LogEvent(const wxString& msg)
|
||||
{
|
||||
m_log->AppendText(msg + "\n");
|
||||
SetStatusText(msg);
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
EM_ASM({
|
||||
console.log('[MENU_EVENT] ' + UTF8ToString($0));
|
||||
}, msg.c_str().AsChar());
|
||||
#endif
|
||||
}
|
||||
|
||||
// File menu handlers
|
||||
void MenuTestFrame::OnMenuNew(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("File > New clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuOpen(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("File > Open clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuSave(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("File > Save clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuSaveAs(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("File > Save As clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuExit(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("File > Exit clicked");
|
||||
Close(true);
|
||||
}
|
||||
|
||||
// Edit menu handlers
|
||||
void MenuTestFrame::OnMenuUndo(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Undo clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuRedo(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Redo clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuCut(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Cut clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuCopy(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Copy clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuPaste(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Paste clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuSelectAll(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Edit > Select All clicked");
|
||||
}
|
||||
|
||||
// View menu handlers
|
||||
void MenuTestFrame::OnMenuZoomIn(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("View > Zoom In clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuZoomOut(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("View > Zoom Out clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuZoomFit(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("View > Zoom to Fit clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuFullScreen(wxCommandEvent& evt)
|
||||
{
|
||||
bool isFullScreen = evt.IsChecked();
|
||||
LogEvent(wxString::Format("View > Full Screen toggled: %s",
|
||||
isFullScreen ? "ON" : "OFF"));
|
||||
ShowFullScreen(isFullScreen);
|
||||
}
|
||||
|
||||
// Tools menu handlers
|
||||
void MenuTestFrame::OnMenuPreferences(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Tools > Preferences clicked");
|
||||
}
|
||||
|
||||
// Help menu handlers
|
||||
void MenuTestFrame::OnMenuAbout(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Help > About clicked");
|
||||
}
|
||||
|
||||
void MenuTestFrame::OnMenuHelp(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
LogEvent("Help > Help Contents clicked");
|
||||
}
|
||||
Loading…
Reference in a new issue