improve help file finding after kiway breakage.
This commit is contained in:
parent
d2e56665f5
commit
c39385a5cd
|
@ -172,6 +172,7 @@ set( COMMON_SRCS
|
||||||
eda_dde.cpp
|
eda_dde.cpp
|
||||||
eda_doc.cpp
|
eda_doc.cpp
|
||||||
filter_reader.cpp
|
filter_reader.cpp
|
||||||
|
# findkicadhelppath.cpp.notused deprecated, use searchhelpfilefullpath.cpp
|
||||||
gestfich.cpp
|
gestfich.cpp
|
||||||
getrunningmicrosecs.cpp
|
getrunningmicrosecs.cpp
|
||||||
grid_tricks.cpp
|
grid_tricks.cpp
|
||||||
|
@ -189,6 +190,7 @@ set( COMMON_SRCS
|
||||||
ptree.cpp
|
ptree.cpp
|
||||||
reporter.cpp
|
reporter.cpp
|
||||||
richio.cpp
|
richio.cpp
|
||||||
|
searchhelpfilefullpath.cpp
|
||||||
search_stack.cpp
|
search_stack.cpp
|
||||||
selcolor.cpp
|
selcolor.cpp
|
||||||
systemdirsappend.cpp
|
systemdirsappend.cpp
|
||||||
|
|
|
@ -271,6 +271,18 @@ wxConfigBase* EDA_BASE_FRAME::config()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const SEARCH_STACK& EDA_BASE_FRAME::sys_search()
|
||||||
|
{
|
||||||
|
return Kiface().KifaceSearch();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString EDA_BASE_FRAME::help_name()
|
||||||
|
{
|
||||||
|
return Kiface().GetHelpFileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDA_BASE_FRAME::PrintMsg( const wxString& text )
|
void EDA_BASE_FRAME::PrintMsg( const wxString& text )
|
||||||
{
|
{
|
||||||
SetStatusText( text );
|
SetStatusText( text );
|
||||||
|
@ -327,33 +339,28 @@ wxString EDA_BASE_FRAME::GetFileFromHistory( int cmdId, const wxString& type,
|
||||||
|
|
||||||
void EDA_BASE_FRAME::GetKicadHelp( wxCommandEvent& event )
|
void EDA_BASE_FRAME::GetKicadHelp( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxString msg;
|
const SEARCH_STACK& search = sys_search();
|
||||||
|
|
||||||
/* We have to get document for beginners,
|
/* We have to get document for beginners,
|
||||||
* or the the full specific doc
|
* or the full specific doc
|
||||||
* if event id is wxID_INDEX, we want the document for beginners.
|
* if event id is wxID_INDEX, we want the document for beginners.
|
||||||
* else the specific doc file (its name is in Kiface().GetHelpFileName())
|
* else the specific doc file (its name is in Kiface().GetHelpFileName())
|
||||||
* The document for beginners is the same for all KiCad utilities
|
* The document for beginners is the same for all KiCad utilities
|
||||||
*/
|
*/
|
||||||
if( event.GetId() == wxID_INDEX )
|
if( event.GetId() == wxID_INDEX )
|
||||||
{
|
{
|
||||||
// Temporarily change the help filename
|
|
||||||
wxString tmp = Kiface().GetHelpFileName();
|
|
||||||
|
|
||||||
// Search for "getting_started_in_kicad.pdf" or "Getting_Started_in_KiCad.pdf"
|
// Search for "getting_started_in_kicad.pdf" or "Getting_Started_in_KiCad.pdf"
|
||||||
Kiface().SetHelpFileName( wxT( "getting_started_in_kicad.pdf" ) );
|
wxString helpFile = SearchHelpFileFullPath( search, wxT( "getting_started_in_kicad.pdf" ) );
|
||||||
wxString helpFile = Kiface().GetHelpFile();
|
|
||||||
|
|
||||||
if( !helpFile )
|
if( !helpFile )
|
||||||
{ // Try to find "Getting_Started_in_KiCad.pdf"
|
helpFile = SearchHelpFileFullPath( search, wxT( "Getting_Started_in_KiCad.pdf" ) );
|
||||||
Kiface().SetHelpFileName( wxT( "Getting_Started_in_KiCad.pdf" ) );
|
|
||||||
helpFile = Kiface().GetHelpFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !helpFile )
|
if( !helpFile )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Help file %s could not be found." ),
|
wxString msg = wxString::Format( _(
|
||||||
GetChars( Kiface().GetHelpFileName() ) );
|
"Help file '%s' could not be found." ),
|
||||||
|
wxT( "getting_started_in_kicad.pdf" )
|
||||||
|
);
|
||||||
wxMessageBox( msg );
|
wxMessageBox( msg );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -361,36 +368,36 @@ void EDA_BASE_FRAME::GetKicadHelp( wxCommandEvent& event )
|
||||||
GetAssociatedDocument( this, helpFile );
|
GetAssociatedDocument( this, helpFile );
|
||||||
}
|
}
|
||||||
|
|
||||||
Kiface().SetHelpFileName( tmp );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString base_name = help_name();
|
||||||
|
|
||||||
#if defined ONLINE_HELP_FILES_FORMAT_IS_HTML
|
#if defined ONLINE_HELP_FILES_FORMAT_IS_HTML
|
||||||
|
|
||||||
if( Kiface().GetHtmlHelpController() == NULL )
|
wxHtmlHelpController* hc = Pgm().GetHtmlHelpController();
|
||||||
|
|
||||||
|
wxString helpFile = SearchHelpFileFullPath( search, );
|
||||||
|
|
||||||
|
if( !!helpFile )
|
||||||
{
|
{
|
||||||
Kiface().InitOnLineHelp();
|
hc->UseConfig( Pgm().CommonSettings() );
|
||||||
|
hc->SetTitleFormat( wxT( "KiCad Help" ) );
|
||||||
|
hc->AddBook( helpFile );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hc->DisplayContents();
|
||||||
if( Kiface().GetHtmlHelpController() )
|
hc->Display( helpFile );
|
||||||
{
|
|
||||||
Kiface().GetHtmlHelpController()->DisplayContents();
|
|
||||||
Kiface().GetHtmlHelpController()->Display( Kiface().GetHelpFileName() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg.Printf( _( "Help file %s could not be found." ), GetChars( Kiface().GetHelpFileName() ) );
|
|
||||||
wxMessageBox( msg );
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF
|
#elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF
|
||||||
wxString helpFile = Kiface().GetHelpFile();
|
wxString helpFile = SearchHelpFileFullPath( search, base_name );
|
||||||
|
|
||||||
if( !helpFile )
|
if( !helpFile )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Help file %s could not be found." ),
|
wxString msg = wxString::Format( _(
|
||||||
GetChars( Kiface().GetHelpFileName() ) );
|
"Help file '%s' could not be found." ),
|
||||||
|
GetChars( base_name )
|
||||||
|
);
|
||||||
wxMessageBox( msg );
|
wxMessageBox( msg );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -64,15 +64,19 @@ bool GetAssociatedDocument( wxFrame* aFrame,
|
||||||
const wxPathList* aPaths)
|
const wxPathList* aPaths)
|
||||||
|
|
||||||
{
|
{
|
||||||
wxString docname, fullfilename, file_ext;
|
wxString docname, fullfilename;
|
||||||
wxString msg;
|
wxString msg;
|
||||||
wxString command;
|
wxString command;
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
// Is an internet url
|
// Is an internet url
|
||||||
static const wxString url_header[3] = { wxT( "http:" ), wxT( "ftp:" ), wxT( "www." ) };
|
static const wxChar* url_header[3] = {
|
||||||
|
wxT( "http:" ),
|
||||||
|
wxT( "ftp:" ),
|
||||||
|
wxT( "www." )
|
||||||
|
};
|
||||||
|
|
||||||
for( int ii = 0; ii < 3; ii++ )
|
for( unsigned ii = 0; ii < DIM(url_header); ii++ )
|
||||||
{
|
{
|
||||||
if( aDocName.First( url_header[ii] ) == 0 ) //. seems an internet url
|
if( aDocName.First( url_header[ii] ) == 0 ) //. seems an internet url
|
||||||
{
|
{
|
||||||
|
@ -133,8 +137,9 @@ bool GetAssociatedDocument( wxFrame* aFrame,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFileName CurrentFileName( fullfilename );
|
wxFileName currentFileName( fullfilename );
|
||||||
file_ext = CurrentFileName.GetExt();
|
|
||||||
|
wxString file_ext = currentFileName.GetExt();
|
||||||
|
|
||||||
if( file_ext == wxT( "pdf" ) )
|
if( file_ext == wxT( "pdf" ) )
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
|
||||||
|
#include <fctsys.h>
|
||||||
|
#include <pgm_base.h>
|
||||||
|
#include <macros.h>
|
||||||
|
#include <gestfich.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function FindKicadHelpPath
|
||||||
|
* finds the absolute path for KiCad "help" (or "help/<language>")
|
||||||
|
* Find path kicad/doc/help/xx/ or kicad/doc/help/:
|
||||||
|
* from BinDir
|
||||||
|
* else from environment variable KICAD
|
||||||
|
* else from one of s_HelpPathList
|
||||||
|
* typically c:/kicad/doc/help or /usr/share/kicad/help
|
||||||
|
* or /usr/local/share/kicad/help
|
||||||
|
* (must have kicad in path name)
|
||||||
|
*
|
||||||
|
* xx = iso639-1 language id (2 letters (generic) or 4 letters):
|
||||||
|
* fr = french (or fr_FR)
|
||||||
|
* en = English (or en_GB or en_US ...)
|
||||||
|
* de = deutch
|
||||||
|
* es = spanish
|
||||||
|
* pt = portuguese (or pt_BR ...)
|
||||||
|
*
|
||||||
|
* default = en (if not found = fr)
|
||||||
|
*/
|
||||||
|
wxString FindKicadHelpPath()
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
wxString bin_dir = Pgm().GetExecutablePath();
|
||||||
|
|
||||||
|
if( bin_dir.Last() == '/' )
|
||||||
|
bin_dir.RemoveLast();
|
||||||
|
|
||||||
|
wxString fullPath = bin_dir.BeforeLast( '/' ); // cd ..
|
||||||
|
|
||||||
|
fullPath += wxT( "/doc/help/" );
|
||||||
|
|
||||||
|
wxString localeString = Pgm().GetLocale()->GetCanonicalName();
|
||||||
|
|
||||||
|
wxString path_tmp = fullPath;
|
||||||
|
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
path_tmp.MakeLower();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if( path_tmp.Contains( wxT( "kicad" ) ) )
|
||||||
|
{
|
||||||
|
if( wxDirExists( fullPath ) )
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find kicad/help/ from environment variable KICAD
|
||||||
|
if( !found && Pgm().IsKicadEnvVariableDefined() )
|
||||||
|
{
|
||||||
|
fullPath = Pgm().GetKicadEnvVariable() + wxT( "/doc/help/" );
|
||||||
|
|
||||||
|
if( wxDirExists( fullPath ) )
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !found )
|
||||||
|
{
|
||||||
|
// Possibilities online help
|
||||||
|
const static wxChar* possibilities[] = {
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
wxT( "c:/kicad/doc/help/" ),
|
||||||
|
wxT( "d:/kicad/doc/help/" ),
|
||||||
|
wxT( "c:/Program Files/kicad/doc/help/" ),
|
||||||
|
wxT( "d:/Program Files/kicad/doc/help/" ),
|
||||||
|
#else
|
||||||
|
wxT( "/usr/share/doc/kicad/help/" ),
|
||||||
|
wxT( "/usr/local/share/doc/kicad/help/" ),
|
||||||
|
wxT( "/usr/local/kicad/doc/help/" ), // default install for "universal
|
||||||
|
// tarballs" and build for a server
|
||||||
|
// (new)
|
||||||
|
wxT( "/usr/local/kicad/help/" ), // default install for "universal
|
||||||
|
// tarballs" and build for a server
|
||||||
|
// (old)
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
for( unsigned i=0; i<DIM(possibilities); ++i )
|
||||||
|
{
|
||||||
|
fullPath = possibilities[i];
|
||||||
|
|
||||||
|
if( wxDirExists( fullPath ) )
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( found )
|
||||||
|
{
|
||||||
|
wxString langFullPath = fullPath + localeString + UNIX_STRING_DIR_SEP;
|
||||||
|
|
||||||
|
if( wxDirExists( langFullPath ) )
|
||||||
|
return langFullPath;
|
||||||
|
|
||||||
|
langFullPath = fullPath + localeString.Left( 2 ) + UNIX_STRING_DIR_SEP;
|
||||||
|
|
||||||
|
if( wxDirExists( langFullPath ) )
|
||||||
|
return langFullPath;
|
||||||
|
|
||||||
|
langFullPath = fullPath + wxT( "en/" );
|
||||||
|
|
||||||
|
if( wxDirExists( langFullPath ) )
|
||||||
|
{
|
||||||
|
return langFullPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
langFullPath = fullPath + wxT( "fr/" );
|
||||||
|
|
||||||
|
if( wxDirExists( langFullPath ) )
|
||||||
|
return langFullPath;
|
||||||
|
}
|
||||||
|
return fullPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxEmptyString;
|
||||||
|
}
|
||||||
|
|
|
@ -78,66 +78,6 @@
|
||||||
* like export KICAD=/my_path/kicad if /my_path/kicad is not a default path
|
* like export KICAD=/my_path/kicad if /my_path/kicad is not a default path
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Path list for online help
|
|
||||||
static wxString s_HelpPathList[] = {
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
wxT( "c:/kicad/doc/help/" ),
|
|
||||||
wxT( "d:/kicad/doc/help/" ),
|
|
||||||
wxT( "c:/Program Files/kicad/doc/help/" ),
|
|
||||||
wxT( "d:/Program Files/kicad/doc/help/" ),
|
|
||||||
#else
|
|
||||||
wxT( "/usr/share/doc/kicad/help/" ),
|
|
||||||
wxT( "/usr/local/share/doc/kicad/help/" ),
|
|
||||||
wxT( "/usr/local/kicad/doc/help/" ), // default install for "universal
|
|
||||||
// tarballs" and build for a server
|
|
||||||
// (new)
|
|
||||||
wxT( "/usr/local/kicad/help/" ), // default install for "universal
|
|
||||||
// tarballs" and build for a server
|
|
||||||
// (old)
|
|
||||||
#endif
|
|
||||||
wxT( "end_list" ) // End of list symbol, do not change
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Path list for KiCad data files
|
|
||||||
static wxString s_KicadDataPathList[] = {
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
wxT( "c:/kicad/share/" ),
|
|
||||||
wxT( "d:/kicad/share/" ),
|
|
||||||
wxT( "c:/kicad/" ),
|
|
||||||
wxT( "d:/kicad/" ),
|
|
||||||
wxT( "c:/Program Files/kicad/share/" ),
|
|
||||||
wxT( "d:/Program Files/kicad/share/" ),
|
|
||||||
wxT( "c:/Program Files/kicad/" ),
|
|
||||||
wxT( "d:/Program Files/kicad/" ),
|
|
||||||
#else
|
|
||||||
wxT( "/usr/share/kicad/" ),
|
|
||||||
wxT( "/usr/local/share/kicad/" ),
|
|
||||||
wxT( "/usr/local/kicad/share/" ), // default data path for "universal
|
|
||||||
// tarballs" and build for a server
|
|
||||||
// (new)
|
|
||||||
wxT( "/usr/local/kicad/" ), // default data path for "universal
|
|
||||||
// tarballs" and build for a server
|
|
||||||
// (old)
|
|
||||||
#endif
|
|
||||||
wxT( "end_list" ) // End of list symbol, do not change
|
|
||||||
};
|
|
||||||
|
|
||||||
// Path list for KiCad binary files
|
|
||||||
static wxString s_KicadBinaryPathList[] = {
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
wxT( "c:/kicad/bin/" ),
|
|
||||||
wxT( "d:/kicad/bin/" ),
|
|
||||||
wxT( "c:/Program Files/kicad/bin/" ),
|
|
||||||
wxT( "d:/Program Files/kicad/bin/" ),
|
|
||||||
#else
|
|
||||||
wxT( "/usr/bin/" ),
|
|
||||||
wxT( "/usr/local/bin/" ),
|
|
||||||
wxT( "/usr/local/kicad/bin/" ),
|
|
||||||
#endif
|
|
||||||
wxT( "end_list" ) // End of list symbol, do not change
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
wxString MakeReducedFileName( const wxString& fullfilename,
|
wxString MakeReducedFileName( const wxString& fullfilename,
|
||||||
const wxString& default_path,
|
const wxString& default_path,
|
||||||
|
@ -281,7 +221,7 @@ wxString EDA_FileSelector( const wxString& Title,
|
||||||
defaultname,
|
defaultname,
|
||||||
dotted_Ext,
|
dotted_Ext,
|
||||||
Mask,
|
Mask,
|
||||||
flag, /* open mode wxFD_OPEN, wxFD_SAVE .. */
|
flag, // open mode wxFD_OPEN, wxFD_SAVE ..
|
||||||
Frame,
|
Frame,
|
||||||
Pos.x, Pos.y );
|
Pos.x, Pos.y );
|
||||||
|
|
||||||
|
@ -292,123 +232,48 @@ wxString EDA_FileSelector( const wxString& Title,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString FindKicadHelpPath()
|
|
||||||
{
|
|
||||||
wxString FullPath, LangFullPath, tmp;
|
|
||||||
wxString LocaleString;
|
|
||||||
bool PathFound = false;
|
|
||||||
|
|
||||||
/* find kicad/help/ */
|
|
||||||
tmp = Pgm().GetExecutablePath();
|
|
||||||
|
|
||||||
if( tmp.Last() == '/' )
|
|
||||||
tmp.RemoveLast();
|
|
||||||
|
|
||||||
FullPath = tmp.BeforeLast( '/' ); // cd ..
|
|
||||||
FullPath += wxT( "/doc/help/" );
|
|
||||||
LocaleString = Pgm().GetLocale()->GetCanonicalName();
|
|
||||||
|
|
||||||
wxString path_tmp = FullPath;
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
path_tmp.MakeLower();
|
|
||||||
#endif
|
|
||||||
if( path_tmp.Contains( wxT( "kicad" ) ) )
|
|
||||||
{
|
|
||||||
if( wxDirExists( FullPath ) )
|
|
||||||
PathFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* find kicad/help/ from environment variable KICAD */
|
|
||||||
if( !PathFound && Pgm().IsKicadEnvVariableDefined() )
|
|
||||||
{
|
|
||||||
FullPath = Pgm().GetKicadEnvVariable() + wxT( "/doc/help/" );
|
|
||||||
|
|
||||||
if( wxDirExists( FullPath ) )
|
|
||||||
PathFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* find kicad/help/ from "s_HelpPathList" */
|
|
||||||
int ii = 0;
|
|
||||||
|
|
||||||
while( !PathFound )
|
|
||||||
{
|
|
||||||
FullPath = s_HelpPathList[ii++];
|
|
||||||
|
|
||||||
if( FullPath == wxT( "end_list" ) )
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( wxDirExists( FullPath ) )
|
|
||||||
PathFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( PathFound )
|
|
||||||
{
|
|
||||||
LangFullPath = FullPath + LocaleString + UNIX_STRING_DIR_SEP;
|
|
||||||
|
|
||||||
if( wxDirExists( LangFullPath ) )
|
|
||||||
return LangFullPath;
|
|
||||||
|
|
||||||
LangFullPath = FullPath + LocaleString.Left( 2 ) + UNIX_STRING_DIR_SEP;
|
|
||||||
|
|
||||||
if( wxDirExists( LangFullPath ) )
|
|
||||||
return LangFullPath;
|
|
||||||
|
|
||||||
LangFullPath = FullPath + wxT( "en/" );
|
|
||||||
|
|
||||||
if( wxDirExists( LangFullPath ) )
|
|
||||||
{
|
|
||||||
return LangFullPath;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LangFullPath = FullPath + wxT( "fr/" );
|
|
||||||
|
|
||||||
if( wxDirExists( LangFullPath ) )
|
|
||||||
return LangFullPath;
|
|
||||||
}
|
|
||||||
return FullPath;
|
|
||||||
}
|
|
||||||
return wxEmptyString;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
wxString FindKicadFile( const wxString& shortname )
|
wxString FindKicadFile( const wxString& shortname )
|
||||||
{
|
{
|
||||||
wxString FullFileName;
|
// Test the presence of the file in the directory shortname of
|
||||||
|
// the KiCad binary path.
|
||||||
|
wxString fullFileName = Pgm().GetExecutablePath() + shortname;
|
||||||
|
|
||||||
/* Test the presence of the file in the directory shortname of
|
if( wxFileExists( fullFileName ) )
|
||||||
* the KiCad binary path.
|
return fullFileName;
|
||||||
*/
|
|
||||||
FullFileName = Pgm().GetExecutablePath() + shortname;
|
|
||||||
|
|
||||||
if( wxFileExists( FullFileName ) )
|
// Test the presence of the file in the directory shortname
|
||||||
return FullFileName;
|
// defined by the environment variable KiCad.
|
||||||
|
|
||||||
/* Test the presence of the file in the directory shortname
|
|
||||||
* defined by the environment variable KiCad.
|
|
||||||
*/
|
|
||||||
if( Pgm().IsKicadEnvVariableDefined() )
|
if( Pgm().IsKicadEnvVariableDefined() )
|
||||||
{
|
{
|
||||||
FullFileName = Pgm().GetKicadEnvVariable() + shortname;
|
fullFileName = Pgm().GetKicadEnvVariable() + shortname;
|
||||||
|
|
||||||
if( wxFileExists( FullFileName ) )
|
if( wxFileExists( fullFileName ) )
|
||||||
return FullFileName;
|
return fullFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find binary file from default path list:
|
// find binary file from possibilities list:
|
||||||
* /usr/local/kicad/linux or c:/kicad/winexe
|
// /usr/local/kicad/linux or c:/kicad/winexe
|
||||||
* (see s_KicadDataPathList) */
|
|
||||||
int ii = 0;
|
|
||||||
|
|
||||||
while( 1 )
|
// Path list for KiCad binary files
|
||||||
|
const static wxChar* possibilities[] = {
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
wxT( "c:/kicad/bin/" ),
|
||||||
|
wxT( "d:/kicad/bin/" ),
|
||||||
|
wxT( "c:/Program Files/kicad/bin/" ),
|
||||||
|
wxT( "d:/Program Files/kicad/bin/" ),
|
||||||
|
#else
|
||||||
|
wxT( "/usr/bin/" ),
|
||||||
|
wxT( "/usr/local/bin/" ),
|
||||||
|
wxT( "/usr/local/kicad/bin/" ),
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
for( unsigned i=0; i<DIM(possibilities); ++i )
|
||||||
{
|
{
|
||||||
if( s_KicadBinaryPathList[ii] == wxT( "end_list" ) )
|
fullFileName = possibilities[i] + shortname;
|
||||||
break;
|
|
||||||
|
|
||||||
FullFileName = s_KicadBinaryPathList[ii++] + shortname;
|
if( wxFileExists( fullFileName ) )
|
||||||
|
return fullFileName;
|
||||||
if( wxFileExists( FullFileName ) )
|
|
||||||
return FullFileName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return shortname;
|
return shortname;
|
||||||
|
@ -418,13 +283,13 @@ wxString FindKicadFile( const wxString& shortname )
|
||||||
int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param,
|
int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param,
|
||||||
wxProcess *callback )
|
wxProcess *callback )
|
||||||
{
|
{
|
||||||
wxString FullFileName;
|
wxString fullFileName;
|
||||||
|
|
||||||
|
|
||||||
FullFileName = FindKicadFile( ExecFile );
|
fullFileName = FindKicadFile( ExecFile );
|
||||||
|
|
||||||
#ifdef __WXMAC__
|
#ifdef __WXMAC__
|
||||||
if( wxFileExists( FullFileName ) || wxDir::Exists( FullFileName ) )
|
if( wxFileExists( fullFileName ) || wxDir::Exists( fullFileName ) )
|
||||||
{
|
{
|
||||||
return ProcessExecute( Pgm().GetExecutablePath() + wxT( "/" )
|
return ProcessExecute( Pgm().GetExecutablePath() + wxT( "/" )
|
||||||
+ ExecFile + wxT( " " )
|
+ ExecFile + wxT( " " )
|
||||||
|
@ -435,16 +300,16 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& para
|
||||||
return ProcessExecute( wxT( "/usr/bin/open " ) + param, wxEXEC_ASYNC, callback );
|
return ProcessExecute( wxT( "/usr/bin/open " ) + param, wxEXEC_ASYNC, callback );
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if( wxFileExists( FullFileName ) )
|
if( wxFileExists( fullFileName ) )
|
||||||
{
|
{
|
||||||
if( !param.IsEmpty() )
|
if( !param.IsEmpty() )
|
||||||
FullFileName += wxT( " " ) + param;
|
fullFileName += wxT( " " ) + param;
|
||||||
|
|
||||||
return ProcessExecute( FullFileName, wxEXEC_ASYNC, callback );
|
return ProcessExecute( fullFileName, wxEXEC_ASYNC, callback );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf( _( "Command <%s> could not found" ), GetChars( FullFileName ) );
|
msg.Printf( _( "Command <%s> could not found" ), GetChars( fullFileName ) );
|
||||||
DisplayError( frame, msg, 20 );
|
DisplayError( frame, msg, 20 );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -452,13 +317,13 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& para
|
||||||
|
|
||||||
wxString KicadDatasPath()
|
wxString KicadDatasPath()
|
||||||
{
|
{
|
||||||
bool PathFound = false;
|
bool found = false;
|
||||||
wxString data_path;
|
wxString data_path;
|
||||||
|
|
||||||
if( Pgm().IsKicadEnvVariableDefined() ) // Path defined by the KICAD environment variable.
|
if( Pgm().IsKicadEnvVariableDefined() ) // Path defined by the KICAD environment variable.
|
||||||
{
|
{
|
||||||
data_path = Pgm().GetKicadEnvVariable();
|
data_path = Pgm().GetKicadEnvVariable();
|
||||||
PathFound = true;
|
found = true;
|
||||||
}
|
}
|
||||||
else // Path of executables.
|
else // Path of executables.
|
||||||
{
|
{
|
||||||
|
@ -485,33 +350,56 @@ wxString KicadDatasPath()
|
||||||
|
|
||||||
if( wxDirExists( data_path ) )
|
if( wxDirExists( data_path ) )
|
||||||
{
|
{
|
||||||
PathFound = true;
|
found = true;
|
||||||
}
|
}
|
||||||
else if( wxDirExists( old_path ) )
|
else if( wxDirExists( old_path ) )
|
||||||
{
|
{
|
||||||
data_path = old_path;
|
data_path = old_path;
|
||||||
PathFound = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find KiCad from default path list:
|
if( !found )
|
||||||
* /usr/local/kicad/ or c:/kicad/
|
|
||||||
* (see s_KicadDataPathList) */
|
|
||||||
int ii = 0;
|
|
||||||
|
|
||||||
while( !PathFound )
|
|
||||||
{
|
{
|
||||||
if( s_KicadDataPathList[ii] == wxT( "end_list" ) )
|
// find KiCad from possibilities list:
|
||||||
break;
|
// /usr/local/kicad/ or c:/kicad/
|
||||||
|
|
||||||
data_path = s_KicadDataPathList[ii++];
|
const static wxChar* possibilities[] = {
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
wxT( "c:/kicad/share/" ),
|
||||||
|
wxT( "d:/kicad/share/" ),
|
||||||
|
wxT( "c:/kicad/" ),
|
||||||
|
wxT( "d:/kicad/" ),
|
||||||
|
wxT( "c:/Program Files/kicad/share/" ),
|
||||||
|
wxT( "d:/Program Files/kicad/share/" ),
|
||||||
|
wxT( "c:/Program Files/kicad/" ),
|
||||||
|
wxT( "d:/Program Files/kicad/" ),
|
||||||
|
#else
|
||||||
|
wxT( "/usr/share/kicad/" ),
|
||||||
|
wxT( "/usr/local/share/kicad/" ),
|
||||||
|
wxT( "/usr/local/kicad/share/" ), // default data path for "universal
|
||||||
|
// tarballs" and build for a server
|
||||||
|
// (new)
|
||||||
|
wxT( "/usr/local/kicad/" ), // default data path for "universal
|
||||||
|
// tarballs" and build for a server
|
||||||
|
// (old)
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
if( wxDirExists( data_path ) )
|
for( unsigned i=0; i<DIM(possibilities); ++i )
|
||||||
PathFound = true;
|
{
|
||||||
|
data_path = possibilities[i];
|
||||||
|
|
||||||
|
if( wxDirExists( data_path ) )
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( PathFound )
|
if( found )
|
||||||
{
|
{
|
||||||
data_path.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
|
data_path.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP );
|
||||||
|
|
||||||
|
@ -569,38 +457,36 @@ bool OpenPDF( const wxString& file )
|
||||||
}
|
}
|
||||||
|
|
||||||
success = false;
|
success = false;
|
||||||
command.Empty();
|
command.clear();
|
||||||
|
|
||||||
if( !success )
|
if( !success )
|
||||||
{
|
{
|
||||||
#ifndef __WINDOWS__
|
#if !defined(__WINDOWS__)
|
||||||
AddDelimiterString( filename );
|
AddDelimiterString( filename );
|
||||||
|
|
||||||
/* here is a list of PDF viewers candidates */
|
// here is a list of PDF viewers candidates
|
||||||
const static wxString tries[] =
|
static const wxChar* tries[] =
|
||||||
{
|
{
|
||||||
wxT( "/usr/bin/evince" ),
|
wxT( "/usr/bin/evince" ),
|
||||||
|
wxT( "/usr/bin/okular" ),
|
||||||
wxT( "/usr/bin/gpdf" ),
|
wxT( "/usr/bin/gpdf" ),
|
||||||
wxT( "/usr/bin/konqueror" ),
|
wxT( "/usr/bin/konqueror" ),
|
||||||
wxT( "/usr/bin/kpdf" ),
|
wxT( "/usr/bin/kpdf" ),
|
||||||
wxT( "/usr/bin/xpdf" ),
|
wxT( "/usr/bin/xpdf" ),
|
||||||
wxT( "/usr/bin/open" ), // BSD and OSX file & dir opener
|
wxT( "/usr/bin/open" ), // BSD and OSX file & dir opener
|
||||||
wxT( "/usr/bin/xdg-open" ), // Freedesktop file & dir opener
|
wxT( "/usr/bin/xdg-open" ), // Freedesktop file & dir opener
|
||||||
wxT( "" ),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
for( int ii = 0; ; ii++ )
|
for( unsigned ii = 0; ii<DIM(tries); ii++ )
|
||||||
{
|
{
|
||||||
if( tries[ii].IsEmpty() )
|
|
||||||
break;
|
|
||||||
|
|
||||||
if( wxFileExists( tries[ii] ) )
|
if( wxFileExists( tries[ii] ) )
|
||||||
{
|
{
|
||||||
command = tries[ii] + wxT( " " ) + filename;
|
command = tries[ii];
|
||||||
|
command += wxT( ' ' );
|
||||||
|
command += filename;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,10 +55,11 @@ static void setSearchPaths( SEARCH_STACK* aDst, KIWAY::FACE_T aId )
|
||||||
// we must add <kicad path>/library and <kicad path>/library/doc
|
// we must add <kicad path>/library and <kicad path>/library/doc
|
||||||
if( aId == KIWAY::FACE_SCH )
|
if( aId == KIWAY::FACE_SCH )
|
||||||
{
|
{
|
||||||
|
// Add schematic doc file path (library/doc) to search path list.
|
||||||
|
|
||||||
fn.AppendDir( wxT( "library" ) );
|
fn.AppendDir( wxT( "library" ) );
|
||||||
aDst->AddPaths( fn.GetPath() );
|
aDst->AddPaths( fn.GetPath() );
|
||||||
|
|
||||||
// Add schematic doc file path (library/doc)to search path list.
|
|
||||||
fn.AppendDir( wxT( "doc" ) );
|
fn.AppendDir( wxT( "doc" ) );
|
||||||
aDst->AddPaths( fn.GetPath() );
|
aDst->AddPaths( fn.GetPath() );
|
||||||
|
|
||||||
|
@ -85,8 +86,10 @@ static void setSearchPaths( SEARCH_STACK* aDst, KIWAY::FACE_T aId )
|
||||||
aDst->AddPaths( fn.GetPath() );
|
aDst->AddPaths( fn.GetPath() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aDst->AddPaths( wxT( "/usr/local/share" ) );
|
||||||
|
|
||||||
#if 1 && defined(DEBUG)
|
#if 1 && defined(DEBUG)
|
||||||
aDst->Show( "kiway" );
|
aDst->Show( "kiface" );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,86 +124,3 @@ void KIFACE_I::end_common()
|
||||||
m_bm.End();
|
m_bm.End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString KIFACE_I::GetHelpFile()
|
|
||||||
{
|
|
||||||
wxString fn;
|
|
||||||
wxArrayString subdirs;
|
|
||||||
wxArrayString altsubdirs;
|
|
||||||
|
|
||||||
// FIXME: This is not the ideal way to handle this. Unfortunately, the
|
|
||||||
// CMake install paths seem to be a moving target so this crude
|
|
||||||
// hack solves the problem of install path differences between
|
|
||||||
// Windows and non-Windows platforms.
|
|
||||||
|
|
||||||
// Partially fixed, but must be enhanced
|
|
||||||
|
|
||||||
// Create subdir tree for "standard" linux distributions, when KiCad comes
|
|
||||||
// from a distribution files are in /usr/share/doc/kicad/help and binaries
|
|
||||||
// in /usr/bin or /usr/local/bin
|
|
||||||
subdirs.Add( wxT( "share" ) );
|
|
||||||
subdirs.Add( wxT( "doc" ) );
|
|
||||||
subdirs.Add( wxT( "kicad" ) );
|
|
||||||
subdirs.Add( wxT( "help" ) );
|
|
||||||
|
|
||||||
// Create subdir tree for linux and Windows KiCad pack.
|
|
||||||
// Note the pack form under linux is also useful if a user wants to
|
|
||||||
// install KiCad to a server because there is only one path to mount
|
|
||||||
// or export (something like /usr/local/kicad).
|
|
||||||
// files are in <install dir>/kicad/doc/help
|
|
||||||
// (often /usr/local/kicad/kicad/doc/help)
|
|
||||||
// <install dir>/kicad/ is retrieved from m_BinDir
|
|
||||||
altsubdirs.Add( wxT( "doc" ) );
|
|
||||||
altsubdirs.Add( wxT( "help" ) );
|
|
||||||
|
|
||||||
/* Search for a help file.
|
|
||||||
* we *must* find a help file.
|
|
||||||
* so help is searched in directories in this order:
|
|
||||||
* help/<canonical name> like help/en_GB
|
|
||||||
* help/<short name> like help/en
|
|
||||||
* help/en
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxLocale* i18n = Pgm().GetLocale();
|
|
||||||
|
|
||||||
// Step 1 : Try to find help file in help/<canonical name>
|
|
||||||
subdirs.Add( i18n->GetCanonicalName() );
|
|
||||||
altsubdirs.Add( i18n->GetCanonicalName() );
|
|
||||||
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &altsubdirs );
|
|
||||||
|
|
||||||
if( !fn )
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &subdirs );
|
|
||||||
|
|
||||||
// Step 2 : if not found Try to find help file in help/<short name>
|
|
||||||
if( !fn )
|
|
||||||
{
|
|
||||||
subdirs.RemoveAt( subdirs.GetCount() - 1 );
|
|
||||||
altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
|
|
||||||
|
|
||||||
// wxLocale::GetName() does not return always the short name
|
|
||||||
subdirs.Add( i18n->GetName().BeforeLast( '_' ) );
|
|
||||||
altsubdirs.Add( i18n->GetName().BeforeLast( '_' ) );
|
|
||||||
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &altsubdirs );
|
|
||||||
|
|
||||||
if( !fn )
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &subdirs );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 3 : if not found Try to find help file in help/en
|
|
||||||
if( !fn )
|
|
||||||
{
|
|
||||||
subdirs.RemoveAt( subdirs.GetCount() - 1 );
|
|
||||||
altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
|
|
||||||
subdirs.Add( wxT( "en" ) );
|
|
||||||
altsubdirs.Add( wxT( "en" ) );
|
|
||||||
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &altsubdirs );
|
|
||||||
|
|
||||||
if( !fn )
|
|
||||||
fn = m_bm.m_search.FindFileInSearchPaths( m_bm.m_help_file, &subdirs );
|
|
||||||
}
|
|
||||||
|
|
||||||
return fn;
|
|
||||||
}
|
|
||||||
|
|
|
@ -297,6 +297,13 @@ void PGM_BASE::destroy()
|
||||||
delete m_locale;
|
delete m_locale;
|
||||||
m_locale = 0;
|
m_locale = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Close the help frame
|
||||||
|
if( m_html_ctrl && m_html_ctrl->GetFrame() ) // returns NULL if no help frame active
|
||||||
|
m_html_ctrl->GetFrame()->Close( true );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
delete m_html_ctrl;
|
delete m_html_ctrl;
|
||||||
m_html_ctrl = 0;
|
m_html_ctrl = 0;
|
||||||
}
|
}
|
||||||
|
@ -415,30 +422,18 @@ bool PGM_BASE::initPgm()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PGM_BASE::SetHtmlHelpController( wxHtmlHelpController* aController )
|
void PGM_BASE::initHtmlHelpController()
|
||||||
{
|
{
|
||||||
delete m_html_ctrl;
|
|
||||||
m_html_ctrl = aController;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PGM_BASE::InitOnLineHelp()
|
|
||||||
{
|
|
||||||
wxString fullfilename = FindKicadHelpPath();
|
|
||||||
|
|
||||||
#if defined ONLINE_HELP_FILES_FORMAT_IS_HTML
|
#if defined ONLINE_HELP_FILES_FORMAT_IS_HTML
|
||||||
m_HelpFileName = fullfilename + wxT( ".html" );
|
|
||||||
fullfilename += wxT( "kicad.hhp" );
|
|
||||||
|
|
||||||
if( wxFileExists( fullfilename ) )
|
if( !m_html_ctrl )
|
||||||
{
|
m_html_ctrl = new wxHtmlHelpController(
|
||||||
m_html_ctrl = new wxHtmlHelpController( wxHF_TOOLBAR | wxHF_CONTENTS |
|
wxHF_TOOLBAR | wxHF_CONTENTS |
|
||||||
wxHF_PRINT | wxHF_OPEN_FILES
|
wxHF_PRINT | wxHF_OPEN_FILES
|
||||||
/*| wxHF_SEARCH */ );
|
// | wxHF_SEARCH
|
||||||
m_html_ctrl->UseConfig( m_common_settings );
|
);
|
||||||
m_html_ctrl->SetTitleFormat( wxT( "KiCad Help" ) );
|
|
||||||
m_html_ctrl->AddBook( fullfilename );
|
wxASSERT( m_html_ctrl ); // may not leave here as NULL
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF
|
#elif defined ONLINE_HELP_FILES_FORMAT_IS_PDF
|
||||||
m_html_ctrl = NULL;
|
m_html_ctrl = NULL;
|
||||||
|
@ -449,10 +444,22 @@ void PGM_BASE::InitOnLineHelp()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxHtmlHelpController* PGM_BASE::HtmlHelpController()
|
||||||
|
{
|
||||||
|
if( !m_html_ctrl )
|
||||||
|
initHtmlHelpController();
|
||||||
|
|
||||||
|
// there should not be calls to this unless ONLINE_HELP_FILES_FORMAT_IS_HTML is defined
|
||||||
|
wxASSERT( m_html_ctrl );
|
||||||
|
|
||||||
|
return m_html_ctrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool PGM_BASE::setExecutablePath()
|
bool PGM_BASE::setExecutablePath()
|
||||||
{
|
{
|
||||||
// Apple MacOSx
|
#ifdef __APPLE__ // Apple MacOSx
|
||||||
#ifdef __APPLE__
|
|
||||||
|
|
||||||
// Derive path from location of the app bundle
|
// Derive path from location of the app bundle
|
||||||
CFBundleRef mainBundle = CFBundleGetMainBundle();
|
CFBundleRef mainBundle = CFBundleGetMainBundle();
|
||||||
|
|
|
@ -104,31 +104,6 @@ void SEARCH_STACK::AddPaths( const wxString& aPaths, int aIndex )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString SEARCH_STACK::FindFileInSearchPaths(
|
|
||||||
const wxString& aFilename, const wxArrayString* aSubdirs )
|
|
||||||
{
|
|
||||||
wxPathList paths;
|
|
||||||
|
|
||||||
for( unsigned i = 0; i < GetCount(); ++i )
|
|
||||||
{
|
|
||||||
wxFileName fn( (*this)[i] );
|
|
||||||
|
|
||||||
if( aSubdirs )
|
|
||||||
{
|
|
||||||
for( unsigned j = 0; j < aSubdirs->GetCount(); j++ )
|
|
||||||
fn.AppendDir( (*aSubdirs)[j] );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( fn.DirExists() )
|
|
||||||
{
|
|
||||||
paths.Add( fn.GetPath() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return paths.FindValidPath( aFilename );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RETAINED_PATH::Clear()
|
void RETAINED_PATH::Clear()
|
||||||
{
|
{
|
||||||
m_retained_path.Clear();
|
m_retained_path.Clear();
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
|
||||||
|
#include <pgm_base.h>
|
||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function FindFileInSearchPaths
|
||||||
|
* looks in "this" for \a aFilename, but first modifies every search
|
||||||
|
* path by appending a list of path fragments from aSubdirs. That modification
|
||||||
|
* is not rentative.
|
||||||
|
*/
|
||||||
|
wxString FindFileInSearchPaths( const SEARCH_STACK& aStack,
|
||||||
|
const wxString& aFilename, const wxArrayString* aSubdirs )
|
||||||
|
{
|
||||||
|
wxPathList paths;
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < aStack.GetCount(); ++i )
|
||||||
|
{
|
||||||
|
wxFileName fn( aStack[i], wxEmptyString );
|
||||||
|
|
||||||
|
if( aSubdirs )
|
||||||
|
{
|
||||||
|
for( unsigned j = 0; j < aSubdirs->GetCount(); j++ )
|
||||||
|
fn.AppendDir( (*aSubdirs)[j] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fn.DirExists() )
|
||||||
|
{
|
||||||
|
paths.Add( fn.GetPath() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return paths.FindValidPath( aFilename );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// See also FindKicadHelpPath.cpp.notused.
|
||||||
|
wxString SearchHelpFileFullPath( const SEARCH_STACK& aSStack, const wxString& aBaseName )
|
||||||
|
{
|
||||||
|
wxArrayString subdirs;
|
||||||
|
wxArrayString altsubdirs;
|
||||||
|
SEARCH_STACK ss = aSStack;
|
||||||
|
|
||||||
|
// It might already be in aSStack, but why depend on other code
|
||||||
|
// far away when it's so easy to add it again (to our copy) as the first place to look.
|
||||||
|
// This is CMAKE_INSTALL_PREFIX:
|
||||||
|
ss.AddPaths( wxT( DEFAULT_INSTALL_PATH ), 0 );
|
||||||
|
|
||||||
|
// If there's a KICAD environment variable set, use that guy's path also
|
||||||
|
ss.AddPaths( Pgm().GetKicadEnvVariable(), 0 );
|
||||||
|
|
||||||
|
#if 1 // && defined(__linux__)
|
||||||
|
// Based on kicad-doc.bzr/CMakeLists.txt, line 20, the help files are
|
||||||
|
// installed into "<CMAKE_INSTALL_PREFIX>/share/doc/kicad/help" for linux.
|
||||||
|
// This is ${KICAD_HELP} var in that CMakeLists.txt file.
|
||||||
|
// Below we account for an international subdirectory.
|
||||||
|
subdirs.Add( wxT( "share" ) );
|
||||||
|
subdirs.Add( wxT( "doc" ) );
|
||||||
|
subdirs.Add( wxT( "kicad" ) );
|
||||||
|
subdirs.Add( wxT( "help" ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1 // && defined(__WINDOWS__)
|
||||||
|
// Based on kicad-doc.bzr/CMakeLists.txt, line 35, the help files are
|
||||||
|
// installed into "<CMAKE_INSTALL_PREFIX>/doc/help" for Windows.
|
||||||
|
// This is ${KICAD_HELP} var in that CMakeLists.txt file.
|
||||||
|
// Below we account for an international subdirectory.
|
||||||
|
altsubdirs.Add( wxT( "doc" ) );
|
||||||
|
altsubdirs.Add( wxT( "help" ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Search for a help file.
|
||||||
|
* we *must* find a help file.
|
||||||
|
* so help is searched in directories in this order:
|
||||||
|
* help/<canonical name> like help/en_GB
|
||||||
|
* help/<short name> like help/en
|
||||||
|
* help/en
|
||||||
|
*/
|
||||||
|
|
||||||
|
wxLocale* i18n = Pgm().GetLocale();
|
||||||
|
|
||||||
|
// Step 1 : Try to find help file in help/<canonical name>
|
||||||
|
subdirs.Add( i18n->GetCanonicalName() );
|
||||||
|
altsubdirs.Add( i18n->GetCanonicalName() );
|
||||||
|
|
||||||
|
#if defined(DEBUG) && 0
|
||||||
|
ss.Show( __func__ );
|
||||||
|
printf( "%s: m_help_file:'%s'\n", __func__, TO_UTF8( aBaseName ) );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxString fn = FindFileInSearchPaths( ss, aBaseName, &altsubdirs );
|
||||||
|
|
||||||
|
if( !fn )
|
||||||
|
fn = FindFileInSearchPaths( ss, aBaseName, &subdirs );
|
||||||
|
|
||||||
|
// Step 2 : if not found Try to find help file in help/<short name>
|
||||||
|
if( !fn )
|
||||||
|
{
|
||||||
|
subdirs.RemoveAt( subdirs.GetCount() - 1 );
|
||||||
|
altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
|
||||||
|
|
||||||
|
// wxLocale::GetName() does not return always the short name
|
||||||
|
subdirs.Add( i18n->GetName().BeforeLast( '_' ) );
|
||||||
|
altsubdirs.Add( i18n->GetName().BeforeLast( '_' ) );
|
||||||
|
|
||||||
|
fn = FindFileInSearchPaths( ss, aBaseName, &altsubdirs );
|
||||||
|
|
||||||
|
if( !fn )
|
||||||
|
fn = FindFileInSearchPaths( ss, aBaseName, &subdirs );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3 : if not found Try to find help file in help/en
|
||||||
|
if( !fn )
|
||||||
|
{
|
||||||
|
subdirs.RemoveAt( subdirs.GetCount() - 1 );
|
||||||
|
altsubdirs.RemoveAt( altsubdirs.GetCount() - 1 );
|
||||||
|
subdirs.Add( wxT( "en" ) );
|
||||||
|
altsubdirs.Add( wxT( "en" ) );
|
||||||
|
|
||||||
|
fn = FindFileInSearchPaths( ss, aBaseName, &altsubdirs );
|
||||||
|
|
||||||
|
if( !fn )
|
||||||
|
fn = FindFileInSearchPaths( ss, aBaseName, &subdirs );
|
||||||
|
}
|
||||||
|
|
||||||
|
return fn;
|
||||||
|
}
|
|
@ -301,13 +301,6 @@ void CVPCB_MAINFRAME::OnCloseWindow( wxCloseEvent& Event )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the help frame
|
|
||||||
if( Pgm().GetHtmlHelpController() )
|
|
||||||
{
|
|
||||||
if( Pgm().GetHtmlHelpController()->GetFrame() )// returns NULL if no help frame active
|
|
||||||
Pgm().GetHtmlHelpController()->GetFrame()->Close( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( m_NetlistFileName.IsOk() )
|
if( m_NetlistFileName.IsOk() )
|
||||||
{
|
{
|
||||||
UpdateFileHistory( m_NetlistFileName.GetFullPath() );
|
UpdateFileHistory( m_NetlistFileName.GetFullPath() );
|
||||||
|
|
|
@ -59,6 +59,8 @@ struct BIN_MOD
|
||||||
wxString m_help_file;
|
wxString m_help_file;
|
||||||
|
|
||||||
SEARCH_STACK m_search;
|
SEARCH_STACK m_search;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BIN_MOD_H_
|
#endif // BIN_MOD_H_
|
||||||
|
|
|
@ -589,4 +589,25 @@ wxString FormatDateLong( const wxDateTime &aDate );
|
||||||
*/
|
*/
|
||||||
void SystemDirsAppend( SEARCH_STACK* aSearchStack );
|
void SystemDirsAppend( SEARCH_STACK* aSearchStack );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SearchHelpFileFullPath
|
||||||
|
* returns the help file's full path.
|
||||||
|
* <p>
|
||||||
|
* Return the KiCad help file with path.
|
||||||
|
* If the help file for the current locale is not found, an attempt to find
|
||||||
|
* the English version of the help file is made.
|
||||||
|
* Help file is searched in directories in this order:
|
||||||
|
* help/\<canonical name\> like help/en_GB
|
||||||
|
* help/\<short name\> like help/en
|
||||||
|
* help/en
|
||||||
|
* </p>
|
||||||
|
* @param aSearchStack contains some possible base dirs that may be above the
|
||||||
|
* the one actually holding @a aBaseName. These are starting points for nested searches.
|
||||||
|
* @param aBaseName is the name of the help file to search for.
|
||||||
|
* @return wxEmptyString is returned if aBaseName is not found, else the full path & filename.
|
||||||
|
*/
|
||||||
|
wxString SearchHelpFileFullPath( const SEARCH_STACK& aSearchStack, const wxString& aBaseName );
|
||||||
|
|
||||||
|
|
||||||
#endif // INCLUDE__COMMON_H_
|
#endif // INCLUDE__COMMON_H_
|
||||||
|
|
|
@ -89,28 +89,6 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile,
|
||||||
*/
|
*/
|
||||||
void AddDelimiterString( wxString& string );
|
void AddDelimiterString( wxString& string );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function FindKicadHelpPath
|
|
||||||
* finds the absolute path for KiCad "help" (or "help/<language>")
|
|
||||||
* Find path kicad/doc/help/xx/ or kicad/doc/help/:
|
|
||||||
* from BinDir
|
|
||||||
* else from environment variable KICAD
|
|
||||||
* else from one of s_HelpPathList
|
|
||||||
* typically c:/kicad/doc/help or /usr/share/kicad/help
|
|
||||||
* or /usr/local/share/kicad/help
|
|
||||||
* (must have kicad in path name)
|
|
||||||
*
|
|
||||||
* xx = iso639-1 language id (2 letters (generic) or 4 letters):
|
|
||||||
* fr = french (or fr_FR)
|
|
||||||
* en = English (or en_GB or en_US ...)
|
|
||||||
* de = deutch
|
|
||||||
* es = spanish
|
|
||||||
* pt = portuguese (or pt_BR ...)
|
|
||||||
*
|
|
||||||
* default = en (if not found = fr)
|
|
||||||
*/
|
|
||||||
wxString FindKicadHelpPath();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function KicadDatasPath
|
* Function KicadDatasPath
|
||||||
* returns the data path common to KiCad.
|
* returns the data path common to KiCad.
|
||||||
|
|
|
@ -100,33 +100,17 @@ public:
|
||||||
|
|
||||||
wxConfigBase* KifaceSettings() const { return m_bm.m_config; }
|
wxConfigBase* KifaceSettings() const { return m_bm.m_config; }
|
||||||
|
|
||||||
const wxString& GetHelpFileName() const { return m_bm.m_help_file; }
|
|
||||||
void SetHelpFileName( const wxString& aFileName ) { m_bm.m_help_file = aFileName; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetHelpFile
|
* Function GetHelpFileName
|
||||||
* gets the help file path.
|
* returns just the basename portion of the current help file.
|
||||||
* <p>
|
|
||||||
* Return the KiCad help file with path. The base paths defined in
|
|
||||||
* m_searchPaths are tested for a valid file. The path returned can
|
|
||||||
* be relative depending on the paths added to m_searchPaths. See the
|
|
||||||
* documentation for wxPathList for more information. If the help file
|
|
||||||
* for the current locale is not found, an attempt to find the English
|
|
||||||
* version of the help file is made.
|
|
||||||
* wxEmptyString is returned if help file not found.
|
|
||||||
* Help file is searched in directories in this order:
|
|
||||||
* help/\<canonical name\> like help/en_GB
|
|
||||||
* help/\<short name\> like help/en
|
|
||||||
* help/en
|
|
||||||
* </p>
|
|
||||||
*/
|
*/
|
||||||
wxString GetHelpFile();
|
const wxString& GetHelpFileName() const { return m_bm.m_help_file; }
|
||||||
|
|
||||||
wxFileHistory& GetFileHistory() { return m_bm.m_history; }
|
wxFileHistory& GetFileHistory() { return m_bm.m_history; }
|
||||||
|
|
||||||
/// Only for DSO specific 'non-library' files.
|
/// Only for DSO specific 'non-library' files.
|
||||||
/// (The library search path is in the PROJECT class.)
|
/// (The library search path is in the PROJECT class.)
|
||||||
SEARCH_STACK& KifaceSearch() { return m_bm.m_search; }
|
SEARCH_STACK& KifaceSearch() { return m_bm.m_search; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KIWAY::FACE_T m_id;
|
KIWAY::FACE_T m_id;
|
||||||
|
|
|
@ -86,9 +86,7 @@ public:
|
||||||
|
|
||||||
//----<Cross Module API>-----------------------------------------------------
|
//----<Cross Module API>-----------------------------------------------------
|
||||||
|
|
||||||
VTBL_ENTRY wxHtmlHelpController* GetHtmlHelpController() { return m_html_ctrl; }
|
VTBL_ENTRY wxHtmlHelpController* HtmlHelpController();
|
||||||
|
|
||||||
VTBL_ENTRY void SetHtmlHelpController( wxHtmlHelpController* aController );
|
|
||||||
|
|
||||||
VTBL_ENTRY wxConfigBase* CommonSettings() const { return m_common_settings; }
|
VTBL_ENTRY wxConfigBase* CommonSettings() const { return m_common_settings; }
|
||||||
|
|
||||||
|
@ -161,12 +159,6 @@ public:
|
||||||
|
|
||||||
VTBL_ENTRY void SetLanguagePath();
|
VTBL_ENTRY void SetLanguagePath();
|
||||||
|
|
||||||
/**
|
|
||||||
* Function InitOnLineHelp
|
|
||||||
* initializes KiCad's online help.
|
|
||||||
*/
|
|
||||||
VTBL_ENTRY void InitOnLineHelp();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ReadPdfBrowserInfos
|
* Function ReadPdfBrowserInfos
|
||||||
* reads the PDF browser choice from the common configuration.
|
* reads the PDF browser choice from the common configuration.
|
||||||
|
@ -217,6 +209,8 @@ protected:
|
||||||
*/
|
*/
|
||||||
bool initPgm();
|
bool initPgm();
|
||||||
|
|
||||||
|
void initHtmlHelpController();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function loadCommonSettings
|
* Function loadCommonSettings
|
||||||
* loads the program (process) settings subset which are stored in .kicad_common
|
* loads the program (process) settings subset which are stored in .kicad_common
|
||||||
|
|
|
@ -57,15 +57,6 @@ public:
|
||||||
* ";" on windows, or ":" | ";" on unix.
|
* ";" on windows, or ":" | ";" on unix.
|
||||||
*/
|
*/
|
||||||
void RemovePaths( const wxString& aPaths );
|
void RemovePaths( const wxString& aPaths );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function FindFileInSearchPaths
|
|
||||||
* looks in "this" for \a aFilename, but first modifies every search
|
|
||||||
* path by appending a list of path fragments from aSubdirs. That modification
|
|
||||||
* is not rentative.
|
|
||||||
*/
|
|
||||||
wxString FindFileInSearchPaths( const wxString& aFilename,
|
|
||||||
const wxArrayString* aSubdirs = NULL );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,15 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual wxConfigBase* config();
|
virtual wxConfigBase* config();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function sys_search
|
||||||
|
* returns a SEARCH_STACK pertaining to entire program, and is overloaded in
|
||||||
|
* KICAD_MANAGER_FRAME
|
||||||
|
*/
|
||||||
|
virtual const SEARCH_STACK& sys_search();
|
||||||
|
|
||||||
|
virtual wxString help_name();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EDA_BASE_FRAME( wxWindow* aParent, ID_DRAWFRAME_TYPE aFrameType,
|
EDA_BASE_FRAME( wxWindow* aParent, ID_DRAWFRAME_TYPE aFrameType,
|
||||||
const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
|
const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
|
||||||
|
|
|
@ -123,6 +123,11 @@ class KICAD_MANAGER_FRAME : public EDA_BASE_FRAME
|
||||||
protected:
|
protected:
|
||||||
wxConfigBase* config(); // override EDA_BASE_FRAME virtual
|
wxConfigBase* config(); // override EDA_BASE_FRAME virtual
|
||||||
|
|
||||||
|
const SEARCH_STACK& sys_search(); // override EDA_BASE_FRAME virtual
|
||||||
|
|
||||||
|
wxString help_name(); // override EDA_BASE_FRAME virtual
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TREE_PROJECT_FRAME* m_LeftWin;
|
TREE_PROJECT_FRAME* m_LeftWin;
|
||||||
LAUNCHER_PANEL* m_Launcher;
|
LAUNCHER_PANEL* m_Launcher;
|
||||||
|
|
|
@ -123,6 +123,18 @@ wxConfigBase* KICAD_MANAGER_FRAME::config()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const SEARCH_STACK& KICAD_MANAGER_FRAME::sys_search()
|
||||||
|
{
|
||||||
|
return Pgm().SysSearch();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString KICAD_MANAGER_FRAME::help_name()
|
||||||
|
{
|
||||||
|
return Pgm().GetHelpFileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void KICAD_MANAGER_FRAME::PrintMsg( const wxString& aText )
|
void KICAD_MANAGER_FRAME::PrintMsg( const wxString& aText )
|
||||||
{
|
{
|
||||||
m_MessagesBox->AppendText( aText );
|
m_MessagesBox->AppendText( aText );
|
||||||
|
@ -157,15 +169,6 @@ void KICAD_MANAGER_FRAME::OnCloseWindow( wxCloseEvent& Event )
|
||||||
|
|
||||||
Event.SetCanVeto( true );
|
Event.SetCanVeto( true );
|
||||||
|
|
||||||
// Close the help frame
|
|
||||||
if( Pgm().GetHtmlHelpController() )
|
|
||||||
{
|
|
||||||
if( Pgm().GetHtmlHelpController()->GetFrame() ) // returns NULL if no help frame active
|
|
||||||
Pgm().GetHtmlHelpController()->GetFrame()->Close( true );
|
|
||||||
|
|
||||||
Pgm().SetHtmlHelpController( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LeftWin->Show( false );
|
m_LeftWin->Show( false );
|
||||||
|
|
||||||
Destroy();
|
Destroy();
|
||||||
|
|
|
@ -58,6 +58,8 @@ public:
|
||||||
|
|
||||||
SEARCH_STACK& SysSearch() { return m_bm.m_search; }
|
SEARCH_STACK& SysSearch() { return m_bm.m_search; }
|
||||||
|
|
||||||
|
wxString GetHelpFileName() { return m_bm.m_help_file; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// The PGM_* classes can have difficulties at termination if they
|
// The PGM_* classes can have difficulties at termination if they
|
||||||
|
|
|
@ -94,10 +94,10 @@ static const wxChar* s_allowedExtensionsToList[] =
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File extension definitions. */
|
/* File extension definitions. */
|
||||||
const wxString TextFileExtension( wxT( "txt" ) );
|
const wxChar TextFileExtension[] = wxT( "txt" );
|
||||||
|
|
||||||
/* File wildcard definitions. */
|
/* File wildcard definitions. */
|
||||||
const wxString TextFileWildcard( wxT( "Text files (*.txt)|*.txt" ) );
|
const wxChar TextFileWildcard[] = wxT( "Text files (*.txt)|*.txt" );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,7 +177,6 @@ void TREE_PROJECT_FRAME::RemoveFilter( const wxString& filter )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the popup menu in the tree frame
|
* Called by the popup menu in the tree frame
|
||||||
* Creates a new subdirectory inside the current kicad project directory
|
* Creates a new subdirectory inside the current kicad project directory
|
||||||
|
|
Loading…
Reference in New Issue