43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
|
|
/*
|
||
|
|
* Embind bindings for KiCad eeschema WASM.
|
||
|
|
*
|
||
|
|
* Picked up automatically by scripts/kicad/build-kicad-target.sh when building
|
||
|
|
* the eeschema app (it compiles wasm/bindings/<app>_embind.cpp if present).
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef __EMSCRIPTEN__
|
||
|
|
#include <emscripten/bind.h>
|
||
|
|
#include <kiway_player.h>
|
||
|
|
#include <kiway.h>
|
||
|
|
#include <vector>
|
||
|
|
#include <wx/app.h>
|
||
|
|
#include <wx/string.h>
|
||
|
|
#include <wx/window.h>
|
||
|
|
|
||
|
|
using namespace emscripten;
|
||
|
|
|
||
|
|
// Programmatically open a project file (schematic) in the running editor frame,
|
||
|
|
// without UI automation. Mirrors single_top.cpp's MacOpenFile path: the editor
|
||
|
|
// frame is the app's top window and is a KIWAY_PLAYER. Returns the result of
|
||
|
|
// OpenProjectFiles, or false if no frame is available — letting the JS caller
|
||
|
|
// fall back to driving File→Open.
|
||
|
|
bool kicadOpenFile( std::string path )
|
||
|
|
{
|
||
|
|
KIWAY_PLAYER* frame =
|
||
|
|
wxTheApp ? static_cast<KIWAY_PLAYER*>( wxTheApp->GetTopWindow() ) : nullptr;
|
||
|
|
|
||
|
|
if( !frame )
|
||
|
|
return false;
|
||
|
|
|
||
|
|
if( wxWindow* blocking = frame->Kiway().GetBlockingDialog() )
|
||
|
|
blocking->Close( true );
|
||
|
|
|
||
|
|
return frame->OpenProjectFiles(
|
||
|
|
std::vector<wxString>( 1, wxString::FromUTF8( path.c_str() ) ) );
|
||
|
|
}
|
||
|
|
|
||
|
|
EMSCRIPTEN_BINDINGS(eeschema) {
|
||
|
|
// Programmatic file open (preferred over UI automation from the web app).
|
||
|
|
function("kicadOpenFile", &kicadOpenFile);
|
||
|
|
}
|
||
|
|
#endif
|