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
213
tests/apps/standalone/calendar/calendar_test.cpp
Normal file
213
tests/apps/standalone/calendar/calendar_test.cpp
Normal file
|
|
@ -0,0 +1,213 @@
|
|||
// wxCalendarCtrl Test - Date selection
|
||||
// Tests wxCalendarCtrl for date picking functionality
|
||||
|
||||
#include "wx/wx.h"
|
||||
#include "wx/calctrl.h"
|
||||
#include "wx/datectrl.h"
|
||||
#include "wx/dateevt.h"
|
||||
|
||||
class CalendarFrame : public wxFrame
|
||||
{
|
||||
public:
|
||||
CalendarFrame() : wxFrame(nullptr, wxID_ANY, "wxCalendarCtrl Test",
|
||||
wxDefaultPosition, wxSize(700, 550))
|
||||
{
|
||||
wxPanel* mainPanel = new wxPanel(this);
|
||||
wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
// Description
|
||||
wxStaticText* desc = new wxStaticText(mainPanel, wxID_ANY,
|
||||
"KiCad may use wxCalendarCtrl for date-related features.\n"
|
||||
"This tests calendar widget rendering and date selection.");
|
||||
mainSizer->Add(desc, 0, wxALL, 5);
|
||||
|
||||
// Horizontal layout for calendar and controls
|
||||
wxBoxSizer* hSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
// Calendar control
|
||||
wxStaticBoxSizer* calBox = new wxStaticBoxSizer(wxVERTICAL, mainPanel, "Calendar");
|
||||
m_calendar = new wxCalendarCtrl(mainPanel, wxID_ANY, wxDefaultDateTime,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
wxCAL_SHOW_HOLIDAYS | wxCAL_SHOW_SURROUNDING_WEEKS);
|
||||
calBox->Add(m_calendar, 1, wxEXPAND | wxALL, 5);
|
||||
hSizer->Add(calBox, 1, wxEXPAND | wxRIGHT, 10);
|
||||
|
||||
// Controls panel
|
||||
wxBoxSizer* controlSizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
// Date picker
|
||||
wxStaticBoxSizer* pickerBox = new wxStaticBoxSizer(wxVERTICAL, mainPanel, "Date Picker");
|
||||
m_datePicker = new wxDatePickerCtrl(mainPanel, wxID_ANY);
|
||||
pickerBox->Add(m_datePicker, 0, wxEXPAND | wxALL, 5);
|
||||
controlSizer->Add(pickerBox, 0, wxEXPAND | wxBOTTOM, 10);
|
||||
|
||||
// Navigation buttons
|
||||
wxStaticBoxSizer* navBox = new wxStaticBoxSizer(wxVERTICAL, mainPanel, "Navigation");
|
||||
|
||||
wxButton* btnToday = new wxButton(mainPanel, wxID_ANY, "Today");
|
||||
wxButton* btnPrevMonth = new wxButton(mainPanel, wxID_ANY, "Previous Month");
|
||||
wxButton* btnNextMonth = new wxButton(mainPanel, wxID_ANY, "Next Month");
|
||||
wxButton* btnPrevYear = new wxButton(mainPanel, wxID_ANY, "Previous Year");
|
||||
wxButton* btnNextYear = new wxButton(mainPanel, wxID_ANY, "Next Year");
|
||||
|
||||
btnToday->Bind(wxEVT_BUTTON, &CalendarFrame::OnToday, this);
|
||||
btnPrevMonth->Bind(wxEVT_BUTTON, &CalendarFrame::OnPrevMonth, this);
|
||||
btnNextMonth->Bind(wxEVT_BUTTON, &CalendarFrame::OnNextMonth, this);
|
||||
btnPrevYear->Bind(wxEVT_BUTTON, &CalendarFrame::OnPrevYear, this);
|
||||
btnNextYear->Bind(wxEVT_BUTTON, &CalendarFrame::OnNextYear, this);
|
||||
|
||||
navBox->Add(btnToday, 0, wxEXPAND | wxALL, 2);
|
||||
navBox->Add(btnPrevMonth, 0, wxEXPAND | wxALL, 2);
|
||||
navBox->Add(btnNextMonth, 0, wxEXPAND | wxALL, 2);
|
||||
navBox->Add(btnPrevYear, 0, wxEXPAND | wxALL, 2);
|
||||
navBox->Add(btnNextYear, 0, wxEXPAND | wxALL, 2);
|
||||
|
||||
controlSizer->Add(navBox, 0, wxEXPAND | wxBOTTOM, 10);
|
||||
|
||||
// Selected date display
|
||||
wxStaticBoxSizer* selBox = new wxStaticBoxSizer(wxVERTICAL, mainPanel, "Selected Date");
|
||||
m_selectedLabel = new wxStaticText(mainPanel, wxID_ANY, "No date selected");
|
||||
selBox->Add(m_selectedLabel, 0, wxALL, 5);
|
||||
controlSizer->Add(selBox, 0, wxEXPAND);
|
||||
|
||||
hSizer->Add(controlSizer, 0, wxEXPAND);
|
||||
mainSizer->Add(hSizer, 0, wxEXPAND | wxALL, 5);
|
||||
|
||||
// Event log
|
||||
mainSizer->Add(new wxStaticText(mainPanel, wxID_ANY, "Event Log"), 0, wxLEFT | wxTOP, 5);
|
||||
m_log = new wxTextCtrl(mainPanel, wxID_ANY, "", wxDefaultPosition, wxSize(-1, 120),
|
||||
wxTE_MULTILINE | wxTE_READONLY);
|
||||
mainSizer->Add(m_log, 1, wxEXPAND | wxALL, 5);
|
||||
|
||||
mainPanel->SetSizer(mainSizer);
|
||||
|
||||
// Bind calendar events
|
||||
m_calendar->Bind(wxEVT_CALENDAR_SEL_CHANGED, &CalendarFrame::OnDateChanged, this);
|
||||
m_calendar->Bind(wxEVT_CALENDAR_DAY_CHANGED, &CalendarFrame::OnDayChanged, this);
|
||||
m_calendar->Bind(wxEVT_CALENDAR_MONTH_CHANGED, &CalendarFrame::OnMonthChanged, this);
|
||||
m_calendar->Bind(wxEVT_CALENDAR_YEAR_CHANGED, &CalendarFrame::OnYearChanged, this);
|
||||
m_calendar->Bind(wxEVT_CALENDAR_DOUBLECLICKED, &CalendarFrame::OnDoubleClicked, this);
|
||||
|
||||
m_datePicker->Bind(wxEVT_DATE_CHANGED, &CalendarFrame::OnPickerChanged, this);
|
||||
|
||||
// Status bar
|
||||
CreateStatusBar();
|
||||
SetStatusText("Calendar test app started");
|
||||
|
||||
Log("Calendar test app started");
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
private:
|
||||
void Log(const wxString& msg)
|
||||
{
|
||||
m_log->AppendText(msg + "\n");
|
||||
}
|
||||
|
||||
void UpdateSelectedLabel()
|
||||
{
|
||||
wxDateTime date = m_calendar->GetDate();
|
||||
m_selectedLabel->SetLabel(date.FormatDate());
|
||||
}
|
||||
|
||||
void OnDateChanged(wxCalendarEvent& event)
|
||||
{
|
||||
wxDateTime date = event.GetDate();
|
||||
Log(wxString::Format("Date selected: %s", date.FormatDate()));
|
||||
UpdateSelectedLabel();
|
||||
m_datePicker->SetValue(date);
|
||||
}
|
||||
|
||||
void OnDayChanged(wxCalendarEvent& event)
|
||||
{
|
||||
Log(wxString::Format("Day changed: %d", event.GetDate().GetDay()));
|
||||
}
|
||||
|
||||
void OnMonthChanged(wxCalendarEvent& event)
|
||||
{
|
||||
wxDateTime date = event.GetDate();
|
||||
Log(wxString::Format("Month changed: %s %d",
|
||||
wxDateTime::GetMonthName(date.GetMonth()), date.GetYear()));
|
||||
}
|
||||
|
||||
void OnYearChanged(wxCalendarEvent& event)
|
||||
{
|
||||
Log(wxString::Format("Year changed: %d", event.GetDate().GetYear()));
|
||||
}
|
||||
|
||||
void OnDoubleClicked(wxCalendarEvent& event)
|
||||
{
|
||||
wxDateTime date = event.GetDate();
|
||||
Log(wxString::Format("Double-clicked: %s", date.FormatDate()));
|
||||
}
|
||||
|
||||
void OnPickerChanged(wxDateEvent& event)
|
||||
{
|
||||
wxDateTime date = event.GetDate();
|
||||
m_calendar->SetDate(date);
|
||||
Log(wxString::Format("Date picker changed: %s", date.FormatDate()));
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
void OnToday(wxCommandEvent& event)
|
||||
{
|
||||
m_calendar->SetDate(wxDateTime::Today());
|
||||
m_datePicker->SetValue(wxDateTime::Today());
|
||||
Log("Navigated to today");
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
void OnPrevMonth(wxCommandEvent& event)
|
||||
{
|
||||
wxDateTime date = m_calendar->GetDate();
|
||||
date -= wxDateSpan::Month();
|
||||
m_calendar->SetDate(date);
|
||||
Log(wxString::Format("Previous month: %s", date.FormatDate()));
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
void OnNextMonth(wxCommandEvent& event)
|
||||
{
|
||||
wxDateTime date = m_calendar->GetDate();
|
||||
date += wxDateSpan::Month();
|
||||
m_calendar->SetDate(date);
|
||||
Log(wxString::Format("Next month: %s", date.FormatDate()));
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
void OnPrevYear(wxCommandEvent& event)
|
||||
{
|
||||
wxDateTime date = m_calendar->GetDate();
|
||||
date -= wxDateSpan::Year();
|
||||
m_calendar->SetDate(date);
|
||||
Log(wxString::Format("Previous year: %d", date.GetYear()));
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
void OnNextYear(wxCommandEvent& event)
|
||||
{
|
||||
wxDateTime date = m_calendar->GetDate();
|
||||
date += wxDateSpan::Year();
|
||||
m_calendar->SetDate(date);
|
||||
Log(wxString::Format("Next year: %d", date.GetYear()));
|
||||
UpdateSelectedLabel();
|
||||
}
|
||||
|
||||
wxCalendarCtrl* m_calendar;
|
||||
wxDatePickerCtrl* m_datePicker;
|
||||
wxStaticText* m_selectedLabel;
|
||||
wxTextCtrl* m_log;
|
||||
};
|
||||
|
||||
class CalendarApp : public wxApp
|
||||
{
|
||||
public:
|
||||
virtual bool OnInit() override
|
||||
{
|
||||
CalendarFrame* frame = new CalendarFrame();
|
||||
frame->Show();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
wxIMPLEMENT_APP(CalendarApp);
|
||||
Loading…
Reference in a new issue