256 lines
9.7 KiB
C++
256 lines
9.7 KiB
C++
/********************************/
|
|
/* kicad.cpp - module principal */
|
|
/********************************/
|
|
|
|
#ifdef __GNUG__
|
|
#pragma implementation
|
|
#endif
|
|
|
|
#define MAIN
|
|
#define eda_global
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include <wx/image.h>
|
|
|
|
//#define SPLASH_OK
|
|
|
|
#ifdef SPLASH_OK
|
|
#include <wx/splash.h>
|
|
#endif
|
|
#include <wx/button.h>
|
|
|
|
#include "wxstruct.h"
|
|
#include "common.h"
|
|
#include "bitmaps.h"
|
|
#include "kicad.h"
|
|
#include "macros.h"
|
|
|
|
#ifdef KICAD_PYTHON
|
|
#include <pyhandler.h>
|
|
#endif
|
|
|
|
/* Routines exportees */
|
|
|
|
/* fonctions importees */
|
|
char *GetFileName(char *FullPathName);
|
|
void ShowLogo(char * FonteFileName);
|
|
|
|
/* Routines locales */
|
|
|
|
/************************************/
|
|
/* Called to initialize the program */
|
|
/************************************/
|
|
|
|
// Create a new application object
|
|
IMPLEMENT_APP(WinEDA_App)
|
|
|
|
#ifdef KICAD_PYTHON
|
|
using namespace boost::python;
|
|
|
|
// Global functions:
|
|
static WinEDA_MainFrame& GetMainFrame() { return *( wxGetApp().m_MainFrame ); }
|
|
static void WinEDAPrint( str msg ) { GetMainFrame().PrintMsg( PyHandler::MakeStr( msg ) + wxT("\n") ); }
|
|
static void WinEDAClear() { GetMainFrame().ClearMsg(); }
|
|
static object GetTypeExt( enum TreeFileType type ) { return PyHandler::Convert( WinEDA_PrjFrame::GetFileExt( type ) ); }
|
|
|
|
// WinEDA_MainFrame Special binding functions:
|
|
// (one line functions are simple wrappers)
|
|
|
|
object WinEDA_MainFrame::GetPrjName() const { return PyHandler::Convert( m_PrjFileName ); }
|
|
object WinEDA_MainFrame::ToWx() { return object( handle<>( borrowed( wxPyMake_wxObject( this, false ) ) ) ); }
|
|
WinEDA_PrjFrame* WinEDA_MainFrame::GetTree() const { return m_LeftWin; }
|
|
|
|
void WinEDA_MainFrame::AddFastLaunchPy( object & button )
|
|
{
|
|
wxBitmapButton * btn;
|
|
bool success = wxPyConvertSwigPtr( button.ptr(), (void**)&btn, _T("wxBitmapButton"));
|
|
if ( !success ) return;
|
|
|
|
Py_INCREF( button.ptr() );
|
|
btn->Reparent( m_CommandWin );
|
|
m_CommandWin->AddFastLaunch( btn );
|
|
}
|
|
|
|
// WinEDA_PrjFrame Special binding functions:
|
|
// (one line functions are simple wrappers)
|
|
|
|
object WinEDA_PrjFrame::ToWx() { return object( handle<>( borrowed( wxPyMake_wxObject( this, false ) ) ) ); }
|
|
object WinEDA_PrjFrame::GetFtExPy( enum TreeFileType type ) const { return PyHandler::Convert( GetFileExt( type ) ); }
|
|
object WinEDA_PrjFrame::GetMenuPy( enum TreeFileType type ) { return object( handle<>( borrowed( wxPyMake_wxObject( GetContextMenu( (int) type ), false ) ) ) ); }
|
|
object WinEDA_PrjFrame::GetTreeCtrl() { return object( handle<>( borrowed( wxPyMake_wxObject( m_TreeProject, false ) ) ) ); }
|
|
object WinEDA_PrjFrame::GetCurrentMenu() { return object( handle<>( borrowed( wxPyMake_wxObject( m_PopupMenu, false ) ) ) ); }
|
|
|
|
void WinEDA_PrjFrame::NewFilePy( const str & name, enum TreeFileType type, object & id )
|
|
{
|
|
wxTreeItemId root;
|
|
if (! wxPyConvertSwigPtr( id.ptr(), (void**)&root, _T("wxTreeItemId") ) ) return;
|
|
NewFile( PyHandler::MakeStr( name ), type, root );
|
|
}
|
|
|
|
void WinEDA_PrjFrame::AddFilePy( const str & file, object & root )
|
|
/* Add a file to the tree under root, or m_root if conversion is wrong */
|
|
{
|
|
wxTreeItemId * theroot = &m_root;
|
|
if ( !wxPyConvertSwigPtr( root.ptr(), (void**)&root, _T("wxTreeItemId") ) )
|
|
{
|
|
theroot = &m_root;
|
|
}
|
|
AddFile( PyHandler::MakeStr( file ), *theroot );
|
|
}
|
|
|
|
TreePrjItemData * WinEDA_PrjFrame::GetItemData( const object & item )
|
|
/* convert wxTreeItem into TreePrjItemData */
|
|
{
|
|
wxTreeItemId *id = NULL;
|
|
if ( !wxPyConvertSwigPtr( item.ptr(), (void**)&id, _T("wxTreeItemId") ) ) return NULL;
|
|
return dynamic_cast<TreePrjItemData *>( m_TreeProject->GetItemData( *id ) );
|
|
}
|
|
|
|
// TreePrjItemData Special binding functions
|
|
// (one line functions are simple wrappers)
|
|
|
|
bool TreePrjItemData::RenamePy( const str & newname, bool check ) { return Rename( PyHandler::MakeStr(newname), check ); }
|
|
object TreePrjItemData::GetDirPy() const { return PyHandler::Convert( GetDir() ); }
|
|
object TreePrjItemData::GetFileNamePy() const { return PyHandler::Convert( GetFileName() ); }
|
|
object TreePrjItemData::GetMenuPy() { return object( handle<>( borrowed( wxPyMake_wxObject( &m_fileMenu, false ) ) ) ); }
|
|
|
|
// kicad module init function
|
|
// ( this function is called from PyHandler to init the kicad module )
|
|
|
|
static void py_kicad_init()
|
|
{
|
|
def( "GetMainFrame", &GetMainFrame, return_value_policy< reference_existing_object >() );
|
|
def( "GetTypeExtension", &GetTypeExt );
|
|
|
|
class_<TreePrjItemData>( "PrjItem" )
|
|
// Internal data:
|
|
.def( "GetFileName", &TreePrjItemData::GetFileNamePy )
|
|
.def( "GetDir", &TreePrjItemData::GetDirPy )
|
|
.def( "GetType", &TreePrjItemData::GetType )
|
|
.def( "GetId", &TreePrjItemData::GetIdPy )
|
|
.def( "GetMenu", &TreePrjItemData::GetMenuPy )
|
|
// Item control
|
|
.def( "SetState", &TreePrjItemData::SetState )
|
|
.def( "Rename", &TreePrjItemData::RenamePy )
|
|
.def( "Move", &TreePrjItemData::Move )
|
|
.def( "Delete", &TreePrjItemData::Delete )
|
|
.def( "Activate", &TreePrjItemData::Activate )
|
|
;
|
|
|
|
enum_<TreeFileType>( "FileType" )
|
|
.value( "PROJECT", TREE_PROJECT )
|
|
.value( "SCHEMA", TREE_SCHEMA )
|
|
.value( "BOARD", TREE_PCB )
|
|
.value( "PYSCRIPT", TREE_PY )
|
|
.value( "GERBER", TREE_GERBER )
|
|
.value( "PDF", TREE_PDF )
|
|
.value( "TXT", TREE_TXT )
|
|
.value( "NETLIST", TREE_NET )
|
|
.value( "UNKNOWN", TREE_UNKNOWN )
|
|
.value( "DIRECTORY", TREE_DIRECTORY )
|
|
.value( "MAX", TREE_MAX );
|
|
|
|
class_<WinEDA_PrjFrame>( "TreeWindow" )
|
|
// wx Interface
|
|
.def( "ToWx", &WinEDA_PrjFrame::ToWx )
|
|
// common features
|
|
.def( "GetContextMenu", &WinEDA_PrjFrame::GetMenuPy )
|
|
.def( "GetFileExtension", &WinEDA_PrjFrame::GetFtExPy )
|
|
// file filters control
|
|
.def( "AddFilter", &WinEDA_PrjFrame::AddFilter )
|
|
.def( "ClearFilters", &WinEDA_PrjFrame::ClearFilters )
|
|
.def( "RemoveFilter", &WinEDA_PrjFrame::RemoveFilterPy )
|
|
.def( "GetFilters", &WinEDA_PrjFrame::GetFilters, return_value_policy < copy_const_reference >() )
|
|
.def( "GetCurrentMenu", &WinEDA_PrjFrame::GetCurrentMenu )
|
|
// Project tree control
|
|
.def( "AddState", &WinEDA_PrjFrame::AddStatePy )
|
|
.def( "GetTreeCtrl", &WinEDA_PrjFrame::GetTreeCtrl )
|
|
.def( "GetItemData", &WinEDA_PrjFrame::GetItemData, return_value_policy < reference_existing_object >() )
|
|
.def( "FindItemData", &WinEDA_PrjFrame::FindItemData, return_value_policy < reference_existing_object >() )
|
|
.def( "NewFile", &WinEDA_PrjFrame::NewFilePy )
|
|
.def( "AddFile", &WinEDA_PrjFrame::AddFilePy )
|
|
;
|
|
|
|
class_<WinEDA_MainFrame>( "MainFrame" )
|
|
// Wx interface
|
|
.def( "ToWx", &WinEDA_MainFrame::ToWx )
|
|
// Common controls
|
|
.def( "AddFastLaunch", &WinEDA_MainFrame::AddFastLaunchPy )
|
|
.def( "Refresh", &WinEDA_MainFrame::OnRefreshPy )
|
|
.def( "GetProjectName", &WinEDA_MainFrame::GetPrjName )
|
|
.def( "GetProjectWindow", &WinEDA_MainFrame::GetTree, return_value_policy< reference_existing_object >() );
|
|
|
|
}
|
|
|
|
// common module init function
|
|
|
|
static void py_common_init()
|
|
{
|
|
def( "Print", &WinEDAPrint );
|
|
def( "Clear", &WinEDAClear );
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
bool WinEDA_App::OnInit()
|
|
{
|
|
g_EDA_Appl = this;
|
|
InitEDA_Appl( wxT("kicad"));
|
|
|
|
/* init kicad */
|
|
GetSettings(); // read current setup
|
|
|
|
m_MainFrame = new WinEDA_MainFrame(this, NULL, wxT("KiCad"),
|
|
wxPoint(0,0), wxSize(600,400) );
|
|
|
|
if(argc > 1 )
|
|
m_MainFrame->m_PrjFileName = argv[1];
|
|
else if ( m_EDA_Config )
|
|
{
|
|
m_MainFrame->m_PrjFileName = m_EDA_Config->Read(wxT("LastProject"),
|
|
wxT("noname.pro") );
|
|
}
|
|
else
|
|
m_MainFrame->m_PrjFileName = wxT("noname.pro");
|
|
|
|
wxString Title = g_Main_Title + wxT(" ") + GetBuildVersion();
|
|
Title += wxT(" ") + m_MainFrame->m_PrjFileName;
|
|
m_MainFrame->SetTitle(Title);
|
|
m_MainFrame->ReCreateMenuBar();
|
|
m_MainFrame->RecreateBaseHToolbar();
|
|
|
|
m_MainFrame->m_LeftWin->ReCreateTreePrj();
|
|
SetTopWindow(m_MainFrame);
|
|
m_MainFrame->Show(TRUE);
|
|
|
|
/* Preparation Affichage du logo */
|
|
#ifdef SPLASH_OK
|
|
wxString logoname( wxString(m_BinDir) + wxT("logokicad.png") );
|
|
wxBitmap image;
|
|
if ( image.LoadFile( logoname, wxBITMAP_TYPE_PNG ) )
|
|
{
|
|
wxSplashScreen * logoscreen = new wxSplashScreen( image,
|
|
wxSPLASH_CENTRE_ON_PARENT | wxSPLASH_TIMEOUT,
|
|
500, m_MainFrame, -1,
|
|
wxDefaultPosition, wxDefaultSize,
|
|
wxSIMPLE_BORDER | wxSTAY_ON_TOP);
|
|
}
|
|
#endif
|
|
|
|
if( wxFileExists(m_MainFrame->m_PrjFileName) )
|
|
{
|
|
m_MainFrame->Load_Prj_Config();
|
|
}
|
|
|
|
#ifdef KICAD_PYTHON
|
|
PyHandler::GetInstance()->AddToModule( wxT("kicad"), &py_kicad_init );
|
|
PyHandler::GetInstance()->AddToModule( wxT("common"), &py_common_init );
|
|
#endif
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// vim: tabstop=4 : noexpandtab :
|