mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 18:23:15 +02:00
if it is running under single_top.cpp or under a project manager. *) Test Kiface().IsSingle() when adding menus, some operations are not permitted when running under a project manager and the KIWAY_PLAYER is pegged to a specific project. *) Implemented KIWAY::KiFACE() so it loads *.kiface files. They still have to be in the same directory as the main *.exe launcher, so this presents some difficulty when the binaries are not yet installed but rather the *.kiface files are still in their original build directories. For today, I simply copied _pcbnew.kiface to build/kicad/. *) Add a test case to kicad/mainframe.cpp just to get an early peek at loading _pcbnew.kiface under the C++ project manager. Got that working for one specific invocation just for proof of concept. Surprise, it works.
71 lines
1.7 KiB
C++
71 lines
1.7 KiB
C++
|
|
#include <macros.h>
|
|
#include <fctsys.h>
|
|
#include <wx/filename.h>
|
|
|
|
|
|
|
|
#if !wxCHECK_VERSION( 3, 0, 0 )
|
|
|
|
// implement missing wx2.8 function until >= wx3.0 pervades.
|
|
static wxString wxJoin(const wxArrayString& arr, const wxChar sep,
|
|
const wxChar escape = '\\')
|
|
{
|
|
size_t count = arr.size();
|
|
if ( count == 0 )
|
|
return wxEmptyString;
|
|
|
|
wxString str;
|
|
|
|
// pre-allocate memory using the estimation of the average length of the
|
|
// strings in the given array: this is very imprecise, of course, but
|
|
// better than nothing
|
|
str.reserve(count*(arr[0].length() + arr[count-1].length()) / 2);
|
|
|
|
if ( escape == wxT('\0') )
|
|
{
|
|
// escaping is disabled:
|
|
for ( size_t i = 0; i < count; i++ )
|
|
{
|
|
if ( i )
|
|
str += sep;
|
|
str += arr[i];
|
|
}
|
|
}
|
|
else // use escape character
|
|
{
|
|
for ( size_t n = 0; n < count; n++ )
|
|
{
|
|
if ( n )
|
|
str += sep;
|
|
|
|
for ( wxString::const_iterator i = arr[n].begin(),
|
|
end = arr[n].end();
|
|
i != end;
|
|
++i )
|
|
{
|
|
const wxChar ch = *i;
|
|
if ( ch == sep )
|
|
str += escape; // escape this separator
|
|
str += ch;
|
|
}
|
|
}
|
|
}
|
|
|
|
str.Shrink(); // release extra memory if we allocated too much
|
|
return str;
|
|
}
|
|
#endif
|
|
|
|
|
|
/// Put aPriorityPath in front of all paths in the value of aEnvVar.
|
|
const wxString PrePendPath( const wxString& aEnvVar, const wxString& aPriorityPath )
|
|
{
|
|
wxPathList paths;
|
|
|
|
paths.AddEnvList( aEnvVar );
|
|
paths.Insert( aPriorityPath, 0 );
|
|
|
|
return wxJoin( paths, wxPATH_SEP[0] );
|
|
}
|