You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

593 lines
16 KiB

  1. /***************/
  2. /* edaappl.cpp */
  3. /***************/
  4. /*
  5. ROLE: methodes relative a la classe winEDA_App, communes
  6. aux environements window et linux
  7. */
  8. #define EDA_BASE
  9. #define COMMON_GLOBL
  10. #ifdef KICAD_PYTHON
  11. #include <pyhandler.h>
  12. #endif
  13. #include "fctsys.h"
  14. #include <wx/image.h>
  15. #include "wx/html/htmlwin.h"
  16. #include "wx/fs_zip.h"
  17. #include "wxstruct.h"
  18. #include "macros.h"
  19. #include "gr_basic.h"
  20. #include "common.h"
  21. #include "worksheet.h"
  22. #include "id.h"
  23. #include "build_version.h"
  24. #include "bitmaps.h"
  25. #include "Language.xpm"
  26. #ifdef __WINDOWS__
  27. /* Icons for language choice (only for Windows)*/
  28. #include "Lang_Default.xpm"
  29. #include "Lang_En.xpm"
  30. #include "Lang_Es.xpm"
  31. #include "Lang_Fr.xpm"
  32. #include "Lang_Pt.xpm"
  33. #include "Lang_It.xpm"
  34. #include "Lang_De.xpm"
  35. #include "Lang_Sl.xpm"
  36. #include "Lang_Hu.xpm"
  37. #include "Lang_Po.xpm"
  38. #include "Lang_Ko.xpm"
  39. #include "Lang_Ru.xpm"
  40. #endif
  41. #define FONT_DEFAULT_SIZE 10 /* Default font size.
  42. The real font size will be computed at run time */
  43. /*****************************/
  44. /* Constructeur de WinEDA_App */
  45. /*****************************/
  46. WinEDA_App::WinEDA_App(void)
  47. {
  48. m_Checker = NULL;
  49. m_MainFrame = NULL;
  50. m_PcbFrame = NULL;
  51. m_ModuleEditFrame = NULL; // Edition des modules
  52. SchematicFrame = NULL; // Edition des Schemas
  53. LibeditFrame = NULL; // Edition des composants
  54. ViewlibFrame = NULL; // Visualisation des composants
  55. m_CvpcbFrame = NULL;
  56. m_GerberFrame = NULL; // ecran de visualisation GERBER
  57. m_LastProjectMaxCount = 10;
  58. m_HtmlCtrl = NULL;
  59. m_EDA_CommonConfig = NULL;
  60. m_EDA_Config = NULL;
  61. m_Env_Defined = FALSE;
  62. m_LanguageId = wxLANGUAGE_DEFAULT;
  63. m_Language_Menu = NULL;
  64. m_Locale = NULL;
  65. m_PdfBrowserIsDefault = TRUE;
  66. }
  67. /*****************************/
  68. /* Destructeur de WinEDA_App */
  69. /*****************************/
  70. WinEDA_App::~WinEDA_App(void)
  71. {
  72. SaveSettings();
  73. /* delete data non directement geree par wxAppl */
  74. delete g_Prj_Config;
  75. delete m_EDA_Config;
  76. delete m_EDA_CommonConfig;
  77. delete g_StdFont;
  78. delete g_DialogFont;
  79. delete g_ItalicFont;
  80. delete g_FixedFont;
  81. delete g_MsgFont;
  82. if ( m_Checker ) delete m_Checker;
  83. delete m_Locale;
  84. }
  85. /**************************************************/
  86. void WinEDA_App::InitEDA_Appl(const wxString & name)
  87. /***************************************************/
  88. {
  89. wxString ident;
  90. wxString EnvLang;
  91. ident = name + wxT("-") + wxGetUserId();
  92. m_Checker = new wxSingleInstanceChecker(ident);
  93. /* Init environnement
  94. (KICAD definit le chemin de kicad ex: set KICAD=d:\kicad) */
  95. m_Env_Defined = wxGetEnv( wxT("KICAD"), &m_KicadEnv);
  96. if ( m_Env_Defined ) // m_KicadEnv doit finir par "/" ou "\"
  97. {
  98. m_KicadEnv.Replace(WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP);
  99. if ( m_KicadEnv.Last() != '/' ) m_KicadEnv += UNIX_STRING_DIR_SEP;
  100. }
  101. /* Prepare On Line Help */
  102. m_HelpFileName = name + wxT(".html");
  103. // Init parametres pour configuration
  104. SetVendorName(wxT("kicad"));
  105. SetAppName(name);
  106. m_EDA_Config = new wxConfig(name);
  107. m_EDA_CommonConfig = new wxConfig(wxT("kicad_common"));
  108. /* Creation des fontes utiles */
  109. g_StdFontPointSize = FONT_DEFAULT_SIZE;
  110. g_MsgFontPointSize = FONT_DEFAULT_SIZE;
  111. g_DialogFontPointSize = FONT_DEFAULT_SIZE;
  112. g_FixedFontPointSize = FONT_DEFAULT_SIZE;
  113. g_StdFont = new wxFont(g_StdFontPointSize, wxFONTFAMILY_ROMAN, wxNORMAL, wxNORMAL);
  114. g_MsgFont = new wxFont(g_StdFontPointSize, wxFONTFAMILY_ROMAN, wxNORMAL, wxNORMAL);
  115. g_DialogFont = new wxFont(g_DialogFontPointSize, wxFONTFAMILY_ROMAN, wxNORMAL, wxNORMAL);
  116. g_ItalicFont = new wxFont(g_DialogFontPointSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_ITALIC, wxNORMAL);
  117. g_FixedFont = new wxFont(g_FixedFontPointSize, wxFONTFAMILY_MODERN, wxNORMAL, wxNORMAL);
  118. /* installation des gestionnaires de visu d'images (pour help) */
  119. wxImage::AddHandler(new wxPNGHandler);
  120. wxImage::AddHandler(new wxGIFHandler);
  121. wxImage::AddHandler(new wxJPEGHandler);
  122. wxFileSystem::AddHandler(new wxZipFSHandler);
  123. // Analyse command line & init binary path
  124. SetBinDir();
  125. ReadPdfBrowserInfos();
  126. // Internationalisation: chargement du Dictionnaire de kicad
  127. m_EDA_CommonConfig->Read(wxT("Language"), &m_LanguageId, wxLANGUAGE_DEFAULT);
  128. bool succes = SetLanguage(TRUE);
  129. if ( ! succes )
  130. {
  131. }
  132. #ifdef KICAD_PYTHON
  133. PyHandler::GetInstance()->SetAppName( name );
  134. #endif
  135. }
  136. /*****************************************/
  137. void WinEDA_App::InitOnLineHelp(void)
  138. /*****************************************/
  139. /* Init On Line Help
  140. */
  141. {
  142. wxString fullfilename = FindKicadHelpPath();
  143. fullfilename += wxT("kicad.hhp");
  144. if ( wxFileExists(fullfilename) )
  145. {
  146. m_HtmlCtrl = new wxHtmlHelpController(wxHF_TOOLBAR |
  147. wxHF_CONTENTS | wxHF_PRINT | wxHF_OPEN_FILES
  148. /*| wxHF_SEARCH */);
  149. m_HtmlCtrl->UseConfig(m_EDA_CommonConfig);
  150. m_HtmlCtrl->SetTitleFormat( wxT("Kicad Help") );
  151. m_HtmlCtrl->AddBook(fullfilename);
  152. }
  153. }
  154. /*******************************/
  155. bool WinEDA_App::SetBinDir(void)
  156. /*******************************/
  157. /*
  158. Analyse la ligne de commande pour retrouver le chemin de l'executable
  159. Sauve en WinEDA_App::m_BinDir le repertoire de l'executable
  160. */
  161. {
  162. /* Calcul du chemin ou se trouve l'executable */
  163. #ifdef __UNIX__
  164. /* Sous LINUX ptarg[0] ne donne pas le chemin complet de l'executable,
  165. il faut le retrouver par la commande "which <filename> si aucun
  166. chemin n'est donne */
  167. FILE * ftmp;
  168. #define TMP_FILE "/tmp/kicad.tmp"
  169. char Line[1024];
  170. char FileName[1024];
  171. wxString str_arg0;
  172. int ii;
  173. FileName[0] = 0;
  174. str_arg0 = argv[0];
  175. if( strchr( (const char *)argv[0],'/') == NULL ) /* pas de chemin */
  176. {
  177. sprintf( FileName, "which %s > %s", CONV_TO_UTF8(str_arg0), TMP_FILE);
  178. ii = system(FileName);
  179. if( (ftmp = fopen(TMP_FILE, "rt")) != NULL )
  180. {
  181. fgets(Line,1000,ftmp);
  182. fclose(ftmp);
  183. remove(TMP_FILE);
  184. }
  185. m_BinDir = CONV_FROM_UTF8(Line);
  186. }
  187. else m_BinDir = argv[0];
  188. #else
  189. m_BinDir = argv[0];
  190. #endif
  191. m_BinDir.Replace(WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP);
  192. while ( m_BinDir.Last() != '/' ) m_BinDir.RemoveLast();
  193. return TRUE;
  194. }
  195. /*********************************/
  196. void WinEDA_App::GetSettings(void)
  197. /*********************************/
  198. /* Lit les infos utiles sauvees lors de la derniere utilisation du logiciel
  199. */
  200. {
  201. wxString Line, Ident;
  202. unsigned ii;
  203. m_HelpSize.x = 500; m_HelpSize.y = 400;
  204. if ( m_EDA_CommonConfig )
  205. {
  206. m_LanguageId = m_EDA_CommonConfig->Read(wxT("Language"), wxLANGUAGE_DEFAULT);
  207. g_EditorName = m_EDA_CommonConfig->Read(wxT("Editor"));
  208. }
  209. if ( ! m_EDA_Config ) return;
  210. for ( ii = 0; ii < 10; ii++ )
  211. {
  212. Ident = wxT("LastProject"); if ( ii ) Ident << ii;
  213. if( m_EDA_Config->Read(Ident, &Line) )
  214. m_LastProject.Add(Line);
  215. }
  216. g_StdFontPointSize = m_EDA_Config->Read(wxT("SdtFontSize"), FONT_DEFAULT_SIZE);
  217. g_MsgFontPointSize = m_EDA_Config->Read(wxT("MsgFontSize"), FONT_DEFAULT_SIZE);
  218. g_DialogFontPointSize = m_EDA_Config->Read(wxT("DialogFontSize"), FONT_DEFAULT_SIZE);
  219. g_FixedFontPointSize = m_EDA_Config->Read(wxT("FixedFontSize"), FONT_DEFAULT_SIZE);
  220. Line = m_EDA_Config->Read(wxT("SdtFontType"), wxEmptyString);
  221. if ( ! Line.IsEmpty() ) g_StdFont->SetFaceName(Line);
  222. ii = m_EDA_Config->Read(wxT("SdtFontStyle"), wxFONTFAMILY_ROMAN);
  223. g_StdFont->SetStyle(ii);
  224. ii = m_EDA_Config->Read(wxT("SdtFontWeight"), wxNORMAL);
  225. g_StdFont->SetWeight(ii);
  226. g_StdFont->SetPointSize(g_StdFontPointSize);
  227. Line = m_EDA_Config->Read(wxT("MsgFontType"), wxEmptyString);
  228. if ( ! Line.IsEmpty() ) g_MsgFont->SetFaceName(Line);
  229. ii = m_EDA_Config->Read(wxT("MsgFontStyle"), wxFONTFAMILY_ROMAN);
  230. g_MsgFont->SetStyle(ii);
  231. ii = m_EDA_Config->Read(wxT("MsgFontWeight"), wxNORMAL);
  232. g_MsgFont->SetWeight(ii);
  233. g_MsgFont->SetPointSize(g_MsgFontPointSize);
  234. Line = m_EDA_Config->Read(wxT("DialogFontType"), wxEmptyString);
  235. if ( ! Line.IsEmpty() ) g_DialogFont->SetFaceName(Line);
  236. ii = m_EDA_Config->Read(wxT("DialogFontStyle"), wxFONTFAMILY_ROMAN);
  237. g_DialogFont->SetStyle(ii);
  238. ii = m_EDA_Config->Read(wxT("DialogFontWeight"), wxNORMAL);
  239. g_DialogFont->SetWeight(ii);
  240. g_DialogFont->SetPointSize(g_DialogFontPointSize);
  241. g_FixedFont->SetPointSize(g_FixedFontPointSize);
  242. m_EDA_Config->Read(wxT("ShowPageLimits"), & g_ShowPageLimits);
  243. if( m_EDA_Config->Read(wxT("WorkingDir"), &Line) )
  244. {
  245. if ( wxDirExists(Line) ) wxSetWorkingDirectory(Line);
  246. }
  247. m_EDA_Config->Read( wxT("BgColor"), &g_DrawBgColor);
  248. }
  249. /**********************************/
  250. void WinEDA_App::SaveSettings(void)
  251. /**********************************/
  252. {
  253. unsigned int ii;
  254. if( m_EDA_Config == NULL ) return;
  255. m_EDA_Config->Write(wxT("SdtFontSize"), g_StdFontPointSize);
  256. m_EDA_Config->Write(wxT("SdtFontType"), g_StdFont->GetFaceName());
  257. m_EDA_Config->Write(wxT("SdtFontStyle"), g_StdFont->GetStyle());
  258. m_EDA_Config->Write(wxT("SdtFontWeight"), g_StdFont->GetWeight());
  259. m_EDA_Config->Write(wxT("MsgFontSize"), g_MsgFontPointSize);
  260. m_EDA_Config->Write(wxT("MsgFontType"), g_MsgFont->GetFaceName());
  261. m_EDA_Config->Write(wxT("MsgFontStyle"), g_MsgFont->GetStyle());
  262. m_EDA_Config->Write(wxT("MsgFontWeight"), g_MsgFont->GetWeight());
  263. m_EDA_Config->Write(wxT("DialogFontSize"), g_DialogFontPointSize);
  264. m_EDA_Config->Write(wxT("DialogFontType"), g_DialogFont->GetFaceName());
  265. m_EDA_Config->Write(wxT("DialogFontStyle"), g_DialogFont->GetStyle());
  266. m_EDA_Config->Write(wxT("DialogFontWeight"), g_DialogFont->GetWeight());
  267. m_EDA_Config->Write(wxT("FixedFontSize"), g_FixedFontPointSize);
  268. m_EDA_Config->Write(wxT("ShowPageLimits"), g_ShowPageLimits);
  269. m_EDA_Config->Write(wxT("WorkingDir"), wxGetCwd());
  270. for( ii = 0; ii < 10; ii++ )
  271. {
  272. wxString msg = wxT("LastProject");
  273. if ( ii ) msg << ii;
  274. if ( ii < m_LastProject.GetCount() )
  275. m_EDA_Config->Write(msg, m_LastProject[ii]);
  276. else
  277. m_EDA_Config->Write(msg, wxEmptyString);
  278. }
  279. }
  280. /*********************************************/
  281. bool WinEDA_App::SetLanguage(bool first_time)
  282. /*********************************************/
  283. /* Set the dictionary file name for internationalization
  284. the files are in kicad/internat/xx or kicad/internat/xx_XX
  285. and are named kicad.mo
  286. */
  287. {
  288. wxString DictionaryName( wxT("kicad")); // dictionary file name without extend (full name is kicad.mo)
  289. wxString BaseDictionaryPath( wxT("internat")); // Real path is kicad/internat/xx_XX or kicad/internat/xx
  290. wxString dic_path;
  291. if ( m_Locale != NULL ) delete m_Locale;
  292. m_Locale = new wxLocale();
  293. m_Locale->Init(m_LanguageId);
  294. dic_path = ReturnKicadDatasPath() + BaseDictionaryPath;
  295. m_Locale->AddCatalogLookupPathPrefix(dic_path);
  296. if ( ! first_time )
  297. {
  298. if ( m_EDA_CommonConfig )
  299. m_EDA_CommonConfig->Write( wxT("Language"), m_LanguageId);
  300. }
  301. if ( ! m_Locale->IsLoaded(DictionaryName) )
  302. m_Locale->AddCatalog(DictionaryName);
  303. SetLanguageList(NULL);
  304. return m_Locale->IsOk();
  305. }
  306. /**************************************************/
  307. void WinEDA_App::SetLanguageIdentifier(int menu_id)
  308. /**************************************************/
  309. /* return in m_LanguageId the language id (wxWidgets language identifier)
  310. from menu id (internal menu identifier)
  311. */
  312. {
  313. switch (menu_id)
  314. {
  315. case ID_LANGUAGE_ITALIAN:
  316. m_LanguageId = wxLANGUAGE_ITALIAN;
  317. break;
  318. case ID_LANGUAGE_PORTUGUESE:
  319. m_LanguageId = wxLANGUAGE_PORTUGUESE;
  320. break;
  321. case ID_LANGUAGE_RUSSIAN:
  322. m_LanguageId = wxLANGUAGE_RUSSIAN;
  323. break;
  324. case ID_LANGUAGE_GERMAN:
  325. m_LanguageId = wxLANGUAGE_GERMAN;
  326. break;
  327. case ID_LANGUAGE_SPANISH:
  328. m_LanguageId = wxLANGUAGE_SPANISH;
  329. break;
  330. case ID_LANGUAGE_ENGLISH:
  331. m_LanguageId = wxLANGUAGE_ENGLISH;
  332. break;
  333. case ID_LANGUAGE_FRENCH:
  334. m_LanguageId = wxLANGUAGE_FRENCH;
  335. break;
  336. case ID_LANGUAGE_SLOVENIAN:
  337. m_LanguageId = wxLANGUAGE_SLOVENIAN;
  338. break;
  339. case ID_LANGUAGE_HUNGARIAN:
  340. m_LanguageId = wxLANGUAGE_HUNGARIAN ;
  341. break;
  342. case ID_LANGUAGE_POLISH:
  343. m_LanguageId = wxLANGUAGE_POLISH ;
  344. break;
  345. case ID_LANGUAGE_KOREAN:
  346. m_LanguageId = wxLANGUAGE_KOREAN;
  347. break;
  348. default:
  349. m_LanguageId = wxLANGUAGE_DEFAULT;
  350. break;
  351. }
  352. }
  353. /*********************************************************/
  354. wxMenu * WinEDA_App::SetLanguageList(wxMenu * MasterMenu)
  355. /*********************************************************/
  356. /* Create menu list for language choice.
  357. */
  358. {
  359. wxMenuItem * item;
  360. if ( m_Language_Menu == NULL )
  361. {
  362. m_Language_Menu = new wxMenu;
  363. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_DEFAULT,
  364. _("Default"), wxEmptyString, wxITEM_CHECK );
  365. SETBITMAPS(lang_def_xpm);
  366. m_Language_Menu->Append(item);
  367. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_ENGLISH,
  368. wxT("English"), wxEmptyString, wxITEM_CHECK);
  369. SETBITMAPS(lang_en_xpm);
  370. m_Language_Menu->Append(item);
  371. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_FRENCH,
  372. _("French"), wxEmptyString, wxITEM_CHECK);
  373. SETBITMAPS(lang_fr_xpm);
  374. m_Language_Menu->Append(item);
  375. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_SPANISH,
  376. _("Spanish"), wxEmptyString, wxITEM_CHECK);
  377. SETBITMAPS(lang_es_xpm);
  378. m_Language_Menu->Append(item);
  379. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_PORTUGUESE,
  380. _("Portuguese"), wxEmptyString, wxITEM_CHECK);
  381. SETBITMAPS(lang_pt_xpm);
  382. m_Language_Menu->Append(item);
  383. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_ITALIAN,
  384. _("Italian"), wxEmptyString, wxITEM_CHECK);
  385. SETBITMAPS(lang_it_xpm);
  386. m_Language_Menu->Append(item);
  387. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_GERMAN,
  388. _("German"), wxEmptyString, wxITEM_CHECK);
  389. SETBITMAPS(lang_de_xpm);
  390. m_Language_Menu->Append(item);
  391. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_SLOVENIAN,
  392. _("Slovenian"), wxEmptyString, wxITEM_CHECK);
  393. SETBITMAPS(lang_sl_xpm);
  394. m_Language_Menu->Append(item);
  395. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_HUNGARIAN,
  396. _("Hungarian"), wxEmptyString, wxITEM_CHECK);
  397. SETBITMAPS(lang_hu_xpm);
  398. m_Language_Menu->Append(item);
  399. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_POLISH,
  400. _("Polish"), wxEmptyString, wxITEM_CHECK);
  401. SETBITMAPS(lang_po_xpm);
  402. m_Language_Menu->Append(item);
  403. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_RUSSIAN,
  404. _("Russian"), wxEmptyString, wxITEM_CHECK);
  405. SETBITMAPS(lang_ru_xpm);
  406. m_Language_Menu->Append(item);
  407. item = new wxMenuItem(m_Language_Menu, ID_LANGUAGE_KOREAN,
  408. _("Korean"), wxEmptyString, wxITEM_CHECK);
  409. SETBITMAPS(lang_ko_xpm);
  410. m_Language_Menu->Append(item);
  411. }
  412. m_Language_Menu->Check(ID_LANGUAGE_KOREAN, FALSE);
  413. m_Language_Menu->Check(ID_LANGUAGE_RUSSIAN, FALSE);
  414. m_Language_Menu->Check(ID_LANGUAGE_POLISH, FALSE);
  415. m_Language_Menu->Check(ID_LANGUAGE_HUNGARIAN, FALSE);
  416. m_Language_Menu->Check(ID_LANGUAGE_SLOVENIAN, FALSE);
  417. m_Language_Menu->Check(ID_LANGUAGE_ITALIAN, FALSE);
  418. m_Language_Menu->Check(ID_LANGUAGE_PORTUGUESE, FALSE);
  419. m_Language_Menu->Check(ID_LANGUAGE_GERMAN, FALSE);
  420. m_Language_Menu->Check(ID_LANGUAGE_SPANISH, FALSE);
  421. m_Language_Menu->Check(ID_LANGUAGE_FRENCH, FALSE);
  422. m_Language_Menu->Check(ID_LANGUAGE_ENGLISH, FALSE);
  423. m_Language_Menu->Check(ID_LANGUAGE_DEFAULT, FALSE);
  424. switch ( m_LanguageId )
  425. {
  426. case wxLANGUAGE_KOREAN:
  427. m_Language_Menu->Check(ID_LANGUAGE_KOREAN, TRUE);
  428. break;
  429. case wxLANGUAGE_RUSSIAN:
  430. m_Language_Menu->Check(ID_LANGUAGE_RUSSIAN, TRUE);
  431. break;
  432. case wxLANGUAGE_GERMAN:
  433. m_Language_Menu->Check(ID_LANGUAGE_GERMAN, TRUE);
  434. break;
  435. case wxLANGUAGE_FRENCH:
  436. m_Language_Menu->Check(ID_LANGUAGE_FRENCH, TRUE);
  437. break;
  438. case wxLANGUAGE_ENGLISH:
  439. m_Language_Menu->Check(ID_LANGUAGE_ENGLISH, TRUE);
  440. break;
  441. case wxLANGUAGE_SPANISH:
  442. m_Language_Menu->Check(ID_LANGUAGE_SPANISH, TRUE);
  443. break;
  444. case wxLANGUAGE_PORTUGUESE:
  445. m_Language_Menu->Check(ID_LANGUAGE_PORTUGUESE, TRUE);
  446. break;
  447. case wxLANGUAGE_ITALIAN:
  448. m_Language_Menu->Check(ID_LANGUAGE_ITALIAN, TRUE);
  449. break;
  450. case wxLANGUAGE_SLOVENIAN:
  451. m_Language_Menu->Check(ID_LANGUAGE_SLOVENIAN, TRUE);
  452. break;
  453. case wxLANGUAGE_HUNGARIAN:
  454. m_Language_Menu->Check(ID_LANGUAGE_HUNGARIAN, TRUE);
  455. break;
  456. case wxLANGUAGE_POLISH:
  457. m_Language_Menu->Check(ID_LANGUAGE_POLISH, TRUE);
  458. break;
  459. default:
  460. m_Language_Menu->Check(ID_LANGUAGE_DEFAULT, TRUE);
  461. break;
  462. }
  463. if ( MasterMenu )
  464. {
  465. ADD_MENUITEM_WITH_HELP_AND_SUBMENU(MasterMenu, m_Language_Menu,
  466. ID_LANGUAGE_CHOICE, _("Language"),
  467. wxT("For test only, use Default setup for normal use"),
  468. language_xpm);
  469. }
  470. return m_Language_Menu;
  471. }
  472. int WinEDA_App::OnRun(void)
  473. /* Run init scripts */
  474. {
  475. #ifdef KICAD_PYTHON
  476. PyHandler::GetInstance()->RunScripts();
  477. #endif
  478. return wxApp::OnRun();
  479. }