Commit 23bec4b8 authored by Miguel Angel Ajo's avatar Miguel Angel Ajo

* Footprint wizard UI: Added to module editor.

* Footprint wizard C++ generic classes
* Footprint wizard C++ to python wrappers 
* Automatic plugin loader from ~/.kicad/plugins
* Python plugin architecture: Footprint wizards
parent edee5dc1
......@@ -327,6 +327,7 @@ set( BMAPS_MID
modratsnest
module_check
module_edit
module_wizard
module_filtered_list
module_full_list
module_options
......
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x05, 0x07, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x0d, 0x50, 0x14,
0x65, 0x18, 0xc7, 0x6f, 0x77, 0x39, 0xe4, 0x38, 0x20, 0x2f, 0x73, 0xc0, 0x92, 0x13, 0x2c, 0xd4,
0x81, 0xf1, 0x03, 0xc5, 0xa0, 0x3b, 0x0e, 0x41, 0x4f, 0x85, 0x88, 0x81, 0x40, 0x0e, 0x90, 0x4f,
0x0f, 0x30, 0x08, 0xc3, 0x03, 0x3d, 0xc4, 0x14, 0xc2, 0x86, 0x98, 0x38, 0x04, 0x86, 0x14, 0x44,
0xc1, 0x0f, 0x3a, 0x3f, 0xf8, 0x70, 0x40, 0x4b, 0x1a, 0x14, 0x6c, 0x4c, 0x4c, 0xb4, 0xc2, 0xf2,
0x2b, 0x6d, 0x9c, 0xd1, 0x12, 0x6a, 0xc8, 0xd0, 0x50, 0x01, 0x01, 0xcf, 0xfb, 0xb7, 0xef, 0xe5,
0x22, 0x2a, 0x37, 0x9e, 0xe5, 0xcd, 0xfc, 0x66, 0x6e, 0xfe, 0xef, 0x3e, 0xcf, 0xef, 0xf6, 0xdd,
0x67, 0x77, 0x8f, 0x07, 0x80, 0x37, 0x12, 0x99, 0x98, 0x3e, 0xb7, 0xda, 0x9d, 0xfa, 0x85, 0x43,
0x62, 0xcf, 0xec, 0x23, 0xb9, 0xdb, 0x04, 0x3a, 0xed, 0x03, 0x37, 0xea, 0x0a, 0x97, 0x07, 0x4f,
0xa5, 0xaf, 0xf2, 0x78, 0xbc, 0x29, 0x64, 0xcd, 0x4b, 0xcc, 0x7c, 0x37, 0xb2, 0x46, 0x66, 0xcf,
0x34, 0x3c, 0xd9, 0x97, 0xf7, 0x64, 0x40, 0x0e, 0x44, 0x26, 0xfb, 0xf5, 0x21, 0xfe, 0x4e, 0xcc,
0x21, 0x92, 0x4b, 0xec, 0xe9, 0xdc, 0xbf, 0xd3, 0x1e, 0xe5, 0x8d, 0x0a, 0xaa, 0x97, 0xcf, 0xe7,
0xcf, 0x22, 0x6b, 0xa9, 0x6e, 0xd4, 0xd9, 0x91, 0x35, 0x4b, 0x5d, 0xa8, 0x26, 0x93, 0x44, 0x1d,
0x29, 0x3c, 0xec, 0x0f, 0x13, 0xe2, 0xde, 0xea, 0xa7, 0x45, 0x2d, 0xd1, 0x02, 0xb4, 0x2b, 0xcd,
0xb0, 0x69, 0x31, 0xd5, 0x3f, 0x52, 0xd4, 0xbd, 0x92, 0x87, 0x5a, 0x85, 0x10, 0x3d, 0x69, 0x46,
0x44, 0xec, 0xe7, 0xd5, 0x31, 0x63, 0xc6, 0x6c, 0xb3, 0xb0, 0xb0, 0xd8, 0x41, 0x48, 0x9e, 0x43,
0xdf, 0x7e, 0xd7, 0x67, 0x32, 0x12, 0xe3, 0xbc, 0x90, 0xe1, 0x3b, 0x09, 0xec, 0xb6, 0x74, 0x90,
0x7c, 0xea, 0x78, 0xfe, 0x4f, 0x35, 0x61, 0xd6, 0x28, 0xda, 0xa0, 0x86, 0xaf, 0x7c, 0x02, 0x3c,
0x67, 0xd1, 0x60, 0xeb, 0x0e, 0x90, 0x35, 0xe5, 0x4c, 0xfa, 0x56, 0x56, 0xe8, 0x1c, 0x9c, 0x6b,
0x6d, 0xc2, 0xfa, 0xe0, 0x19, 0xe4, 0xc7, 0x75, 0x72, 0xfd, 0x08, 0x66, 0x66, 0x66, 0x0b, 0x88,
0x28, 0xc9, 0xd6, 0xd6, 0x76, 0x28, 0x21, 0x21, 0x01, 0x84, 0x74, 0xaf, 0xb1, 0x88, 0x90, 0x4d,
0x44, 0x6d, 0x8d, 0x00, 0xb9, 0x59, 0x02, 0x78, 0x7b, 0x08, 0x11, 0x1c, 0x1c, 0x08, 0x3f, 0xe9,
0x0c, 0x24, 0x78, 0x33, 0xc8, 0x5a, 0x67, 0x8d, 0xc1, 0x41, 0x2b, 0xc4, 0xf8, 0x32, 0x6c, 0x1e,
0x6c, 0xa8, 0x59, 0x21, 0x1b, 0x87, 0x82, 0x50, 0x27, 0x14, 0xaf, 0x5d, 0x8e, 0xe2, 0xd0, 0xc9,
0x88, 0x96, 0xda, 0x83, 0xeb, 0x27, 0x95, 0x4a, 0x21, 0x14, 0x0a, 0x8f, 0x18, 0x44, 0xae, 0xae,
0xae, 0xbd, 0xa7, 0x4e, 0x9d, 0x02, 0x21, 0x27, 0x60, 0x12, 0x6e, 0xaa, 0x78, 0xc8, 0x59, 0xc5,
0x67, 0xcf, 0xd8, 0x0a, 0x03, 0x03, 0x56, 0x28, 0x2b, 0x1b, 0x8f, 0x65, 0xb1, 0x22, 0x74, 0x76,
0x0a, 0x0d, 0x19, 0x21, 0xda, 0x87, 0x0f, 0xad, 0x56, 0x6b, 0xa8, 0xc9, 0x0e, 0x74, 0x32, 0x5c,
0x9b, 0x9e, 0x87, 0xd7, 0x70, 0x6d, 0x98, 0x04, 0x5c, 0xbf, 0x8c, 0x8c, 0x0c, 0xe3, 0x22, 0x72,
0xb0, 0x4a, 0xc1, 0x0c, 0x37, 0x7d, 0x92, 0xdb, 0xb7, 0x85, 0x88, 0xf7, 0x7a, 0x5a, 0xc4, 0x61,
0x92, 0x28, 0x25, 0x4c, 0x8e, 0xcc, 0x08, 0x19, 0xde, 0xf6, 0x79, 0x05, 0x7a, 0xfd, 0xe8, 0xa2,
0x0b, 0x17, 0x2c, 0xb1, 0xc8, 0xc3, 0x01, 0x8d, 0x8d, 0x8d, 0x86, 0x1a, 0x55, 0x94, 0xbf, 0xa1,
0x86, 0x23, 0x3b, 0x35, 0x76, 0x74, 0x91, 0xa3, 0xa3, 0xe3, 0x40, 0x5d, 0x5d, 0xdd, 0xf0, 0x62,
0x6b, 0x6b, 0x2b, 0x82, 0x82, 0xa6, 0xe3, 0xde, 0xbd, 0xd1, 0x45, 0x43, 0x43, 0x56, 0x48, 0x4a,
0x72, 0x40, 0x45, 0x45, 0xe9, 0x70, 0x8d, 0x31, 0x1e, 0x13, 0xc9, 0x64, 0x32, 0x3d, 0x3b, 0x41,
0xc8, 0xcb, 0xcb, 0xc3, 0xc9, 0x93, 0x27, 0x11, 0x1e, 0x2e, 0xc1, 0xc5, 0x8b, 0x56, 0x46, 0xb7,
0x8e, 0x23, 0x27, 0xc7, 0x1e, 0x1a, 0x4d, 0xb6, 0xe9, 0xa2, 0xda, 0xda, 0xda, 0x07, 0x6a, 0xb5,
0x1a, 0xce, 0xce, 0xce, 0x88, 0x8b, 0x93, 0xa3, 0xad, 0xcd, 0xe6, 0x99, 0x12, 0x8e, 0x8a, 0x0a,
0x3b, 0x64, 0x66, 0x26, 0x9a, 0x2e, 0x22, 0x81, 0x8b, 0xcb, 0xcb, 0xc8, 0xcf, 0x17, 0xa2, 0xab,
0x4b, 0x08, 0x9d, 0x6e, 0xf4, 0xc6, 0x24, 0x6f, 0x6f, 0xb7, 0xc4, 0xe6, 0x22, 0x4b, 0xa4, 0xa4,
0x38, 0x22, 0x3e, 0xde, 0x15, 0xc9, 0xc9, 0x81, 0xa6, 0x89, 0xd8, 0x59, 0xd7, 0xb3, 0x77, 0x39,
0x54, 0x2a, 0x15, 0x72, 0x73, 0xd7, 0x62, 0xd5, 0xaa, 0x68, 0x28, 0x95, 0x0b, 0x11, 0x13, 0x23,
0x61, 0xef, 0x05, 0x87, 0xc7, 0x44, 0xeb, 0xd3, 0x2d, 0xa1, 0xfd, 0x70, 0x36, 0x4e, 0x6b, 0x16,
0xa0, 0x7d, 0xa3, 0xe2, 0xf9, 0xae, 0x11, 0x19, 0x06, 0xf6, 0xac, 0x46, 0x3d, 0xb0, 0xa4, 0x24,
0x1f, 0xd5, 0xd5, 0xe3, 0x0c, 0x92, 0xbe, 0x3e, 0x2b, 0xa4, 0x2a, 0xec, 0xd0, 0xa7, 0x9d, 0x0b,
0x5d, 0x73, 0x14, 0x7e, 0xdd, 0x28, 0xc1, 0xf7, 0xbb, 0x73, 0x4d, 0x17, 0x8d, 0x1c, 0x6f, 0x32,
0xb2, 0x0d, 0x0d, 0x0d, 0xc3, 0xb4, 0xb4, 0xb4, 0x20, 0x32, 0x72, 0x8e, 0xe1, 0xc6, 0x2d, 0xfd,
0xcc, 0x06, 0x0d, 0x49, 0xd3, 0x70, 0xb3, 0x72, 0x1e, 0x06, 0x6b, 0x24, 0xd0, 0x7d, 0x9d, 0x80,
0x4b, 0xeb, 0x9c, 0xd1, 0x5c, 0xbd, 0xed, 0xb1, 0x9a, 0xe6, 0xe6, 0xe6, 0x67, 0x8b, 0x96, 0x4a,
0xc4, 0xd0, 0x2a, 0x44, 0xc3, 0x2c, 0x0f, 0xf4, 0xc4, 0x9e, 0x3d, 0x5a, 0x7c, 0x94, 0x6d, 0x83,
0x25, 0x72, 0x73, 0x1c, 0x5b, 0xca, 0xc7, 0x35, 0x8d, 0x14, 0xb7, 0x2a, 0xde, 0x82, 0xee, 0xc0,
0x7c, 0x0c, 0x1e, 0x8e, 0xc7, 0xb7, 0x89, 0x22, 0xec, 0x51, 0x8c, 0x7d, 0x54, 0x13, 0xe0, 0x6e,
0xfa, 0x93, 0x81, 0x43, 0x15, 0xea, 0x69, 0xc8, 0x17, 0x7a, 0x3b, 0x60, 0x57, 0x08, 0x05, 0xfd,
0x1a, 0x1e, 0x2e, 0xc7, 0x9b, 0xe1, 0xf7, 0xd2, 0xc5, 0xe8, 0xa9, 0x64, 0xb7, 0xf0, 0x90, 0x1f,
0xee, 0xd4, 0x87, 0xe3, 0x6a, 0xb2, 0xf9, 0xf3, 0x3d, 0x19, 0x88, 0xe8, 0x74, 0xbc, 0x00, 0xf9,
0x41, 0x62, 0x74, 0xa5, 0xd2, 0xc3, 0xa2, 0xec, 0x95, 0xcb, 0x70, 0x83, 0x7d, 0x15, 0x94, 0x87,
0x4e, 0xc0, 0xfe, 0x08, 0x11, 0xce, 0x24, 0x5a, 0xe3, 0xcf, 0x4a, 0x7f, 0xdc, 0xdd, 0xe5, 0x06,
0x5d, 0x53, 0x08, 0x6e, 0x6c, 0x9d, 0x8f, 0x83, 0x91, 0x22, 0x5c, 0x79, 0x9f, 0x6f, 0x54, 0x14,
0xce, 0x30, 0xcc, 0x7d, 0x91, 0x48, 0xd4, 0x4b, 0x58, 0x3e, 0xdb, 0xec, 0xc1, 0x9a, 0x28, 0x39,
0xfa, 0x3a, 0x2f, 0xe1, 0xe3, 0xe0, 0x69, 0x90, 0x8a, 0xcd, 0x75, 0x24, 0x9f, 0x62, 0x2b, 0x18,
0xda, 0x15, 0xf2, 0x12, 0x7e, 0x68, 0x39, 0x88, 0xaa, 0xe2, 0x1c, 0xec, 0x7e, 0x87, 0xd2, 0xb7,
0x25, 0xbf, 0xa6, 0xff, 0x6b, 0x87, 0x1f, 0xfa, 0x77, 0xbf, 0x89, 0x07, 0x47, 0x63, 0xf1, 0x9b,
0xc6, 0x1d, 0x65, 0xe1, 0x4e, 0x58, 0xf4, 0xc6, 0xbf, 0x35, 0x04, 0x81, 0x40, 0x30, 0xc8, 0x52,
0xcd, 0xbd, 0x94, 0xdc, 0x58, 0x3c, 0x08, 0xaa, 0xb9, 0xd4, 0xf5, 0xa2, 0xd0, 0xd7, 0xb1, 0x41,
0xe9, 0x8b, 0xa6, 0xb8, 0x71, 0x58, 0x38, 0x99, 0x39, 0x41, 0xf2, 0x59, 0x76, 0xf4, 0xce, 0xf3,
0x09, 0x14, 0x32, 0x14, 0x12, 0x64, 0x04, 0xcd, 0x44, 0x7d, 0x08, 0xd5, 0x5f, 0x2e, 0xa7, 0xea,
0x2f, 0x67, 0x4d, 0xef, 0xbf, 0x59, 0xe9, 0x8d, 0xc1, 0x3a, 0x29, 0xee, 0x1f, 0x4d, 0xc4, 0x79,
0x95, 0x1d, 0x92, 0x5c, 0xa9, 0x1f, 0xb9, 0x7e, 0x0f, 0xb1, 0xfe, 0xdf, 0xaf, 0xf2, 0x33, 0x51,
0xbc, 0xa6, 0x6b, 0x1b, 0xbd, 0xf4, 0xb7, 0x2a, 0xd9, 0xe1, 0x38, 0x28, 0xc7, 0x40, 0xd3, 0x32,
0xb4, 0x29, 0x2d, 0x7b, 0xd9, 0xdc, 0xf2, 0x85, 0xfe, 0x67, 0x60, 0x1b, 0x0a, 0x4f, 0x44, 0x9a,
0x0f, 0xfc, 0xb1, 0xc5, 0x0f, 0x3d, 0xdb, 0xd9, 0xeb, 0xd5, 0xe8, 0x8f, 0x9e, 0xda, 0x25, 0xfa,
0x2f, 0xd5, 0x9e, 0x67, 0x3f, 0xd5, 0x7c, 0x62, 0x61, 0x54, 0xe4, 0x3e, 0x91, 0x2e, 0xf0, 0x99,
0x44, 0xef, 0xe0, 0xf0, 0x10, 0x33, 0xb1, 0x24, 0x9f, 0x6d, 0xcb, 0xf7, 0x18, 0x99, 0x7b, 0xda,
0xd3, 0x95, 0xec, 0x96, 0x88, 0xc8, 0x5a, 0x8c, 0x0b, 0xbd, 0xf9, 0xb4, 0xd2, 0xa6, 0xff, 0xc6,
0xf6, 0x00, 0xf4, 0x56, 0xb1, 0x93, 0x78, 0x58, 0x81, 0x9a, 0xb2, 0x2c, 0x5d, 0x45, 0x41, 0xe6,
0x15, 0xa3, 0xa2, 0xff, 0x0a, 0x7b, 0x66, 0x41, 0x3f, 0xa7, 0x8b, 0xbb, 0xbb, 0xd9, 0xe1, 0xe8,
0xfe, 0x7c, 0x1e, 0xf6, 0x56, 0x6d, 0xc2, 0x91, 0xc6, 0x03, 0xfa, 0x7a, 0xf5, 0x7b, 0xdf, 0xbc,
0x50, 0x11, 0xe1, 0xab, 0x15, 0xd3, 0xf7, 0x55, 0x69, 0xd2, 0x74, 0x25, 0x9a, 0xf5, 0x38, 0x7e,
0xfc, 0x18, 0x3a, 0x3a, 0xae, 0xe3, 0x8b, 0xf4, 0x54, 0x74, 0x4a, 0x26, 0xfa, 0xbe, 0x50, 0xd1,
0xce, 0x75, 0x11, 0x4c, 0x79, 0x5e, 0xfa, 0x9d, 0x2d, 0x5b, 0x4a, 0x51, 0x58, 0x58, 0x88, 0xbd,
0x5b, 0x37, 0xe3, 0xb8, 0x7a, 0x35, 0xba, 0x3c, 0x66, 0xde, 0xfd, 0x07, 0x3e, 0x0a, 0x38, 0xab,
0xbb, 0xc7, 0x1e, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE module_wizard_xpm[1] = {{ png, sizeof( png ), "module_wizard_xpm" }};
//EOF
This diff is collapsed.
......@@ -278,6 +278,7 @@ EXTERN_BITMAP( mode_track_xpm )
EXTERN_BITMAP( mod_ratsnest_xpm )
EXTERN_BITMAP( module_check_xpm )
EXTERN_BITMAP( module_edit_xpm )
EXTERN_BITMAP( module_wizard_xpm )
EXTERN_BITMAP( module_filtered_list_xpm )
EXTERN_BITMAP( module_pin_filtered_list_xpm )
EXTERN_BITMAP( module_full_list_xpm )
......
......@@ -97,8 +97,11 @@ set(PCBNEW_DIALOGS
dialogs/dialog_set_grid_base.cpp
dialogs/dialog_scripting_base.cpp
dialogs/dialog_scripting.cpp
footprint_wizard.cpp
footprint_wizard_frame.cpp
)
# some of the files here may be going to the dialog srcs in fact....
set(PCBNEW_CLASS_SRCS
tool_modview.cpp
modview.cpp
......@@ -114,7 +117,6 @@ set(PCBNEW_CLASS_SRCS
block.cpp
block_module_editor.cpp
build_BOM_from_board.cpp
# class_footprint_library.cpp
class_pcb_layer_widget.cpp
clean.cpp
connect.cpp
......@@ -215,6 +217,7 @@ set(PCBNEW_CLASS_SRCS
zones_polygons_insulated_copper_islands.cpp
zones_polygons_test_connections.cpp
zones_test_and_combine_areas.cpp
class_footprint_wizard.cpp
)
set(PCBNEW_SRCS ${PCBNEW_CLASS_SRCS} ${PCBNEW_DIALOGS})
......
/**
* @file class_footprint_wizard.cpp
* @brief Class FOOTPRINT_WIZARD and FOOTPRINT_WIZARDS
*/
#include "class_footprint_wizard.h"
#include <stdio.h>
void FOOTPRINT_WIZARD::register_wizard()
{
FOOTPRINT_WIZARDS::register_wizard(this);
}
std::vector<FOOTPRINT_WIZARD*> FOOTPRINT_WIZARDS::m_FootprintWizards;
void FOOTPRINT_WIZARDS::register_wizard(FOOTPRINT_WIZARD *aWizard)
{
wxString name = aWizard->GetName();
m_FootprintWizards.push_back(aWizard);
printf("Registered footprint wizard '%s'\n",(const char*)name.mb_str() );
#if 0
/* just to test if it works correctly */
int pages = fw->GetNumParameterPages();
printf(" %d pages\n",pages);
for (int n=0; n<pages; n++)
{
printf(" page %d->'%s'\n",n,
(const char*)fw->GetParameterPageName(n).mb_str());
}
#endif
}
/**
* @file pcbnew_footprint_wizards.h
* @brief Class PCBNEW_FOOTPRINT_WIZARDS
*/
#ifndef CLASS_FOOTPRINT_WIZARD_H
#define CLASS_FOOTPRINT_WIZARD_H
#include <vector>
#include <wxPcbStruct.h>
/* This is the parent class from where any footprint wiizard class must
* derive */
class FOOTPRINT_WIZARD
{
public:
FOOTPRINT_WIZARD() {}
~FOOTPRINT_WIZARD() {}
virtual wxString GetName()=0;
virtual wxString GetImage()=0;
virtual wxString GetDescription()=0;
virtual int GetNumParameterPages()=0;
virtual wxString GetParameterPageName(int aPage)=0;
virtual wxArrayString GetParameterNames(int aPage)=0;
virtual wxArrayString GetParameterValues(int aPage)=0;
virtual wxString SetParameterValues(int aPage,wxArrayString& aValues)=0;
virtual MODULE *GetModule()=0;
void register_wizard();
};
class FOOTPRINT_WIZARDS
{
private:
static std::vector<FOOTPRINT_WIZARD*> m_FootprintWizards;
public:
static void register_wizard(FOOTPRINT_WIZARD *wizard);
};
#endif /* PCBNEW_FOOTPRINT_WIZARDS_H */
/**
* @file footprint wizard.cpp
*/
#include <fctsys.h>
#include <gr_basic.h>
#include <class_drawpanel.h>
#include <wxPcbStruct.h>
#include <dialog_helpers.h>
#include <3d_viewer.h>
#include <pcbcommon.h>
#include <class_board.h>
#include <class_module.h>
#include <pcbnew.h>
#include <pcbnew_id.h>
#include "footprint_wizard_frame.h"
#include <wildcards_and_files_ext.h>
#define NEXT_PART 1
#define NEW_PART 0
#define PREVIOUS_PART -1
void FOOTPRINT_WIZARD_FRAME::Process_Special_Functions( wxCommandEvent& event )
{
wxString msg;
switch( event.GetId() )
{
case ID_FOOTPRINT_WIZARD_NEXT:
//SelectAndViewFootprint( NEXT_PART );
break;
case ID_FOOTPRINT_WIZARD_PREVIOUS:
//SelectAndViewFootprint( PREVIOUS_PART );
break;
default:
msg << wxT( "FOOTPRINT_WIZARD_FRAME::Process_Special_Functions error: id = " )
<< event.GetId();
wxMessageBox( msg );
break;
}
}
void FOOTPRINT_WIZARD_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
{
}
bool FOOTPRINT_WIZARD_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu )
{
return true;
}
/* Displays the name of the current opened library in the caption */
void FOOTPRINT_WIZARD_FRAME::DisplayWizardInfos()
{
wxString msg;
msg = _( "Footprint Wizard" );
msg << wxT( " [" );
if( ! m_wizardName.IsEmpty() )
msg << m_wizardName;
else
msg += _( "no wizard selected" );
msg << wxT( "]" );
SetTitle( msg );
}
void FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard( wxCommandEvent& event )
{
wxString msg;
if( g_LibraryNames.GetCount() == 0 )
return;
EDA_LIST_DIALOG dlg( this, _( "Select Current Wizard:" ),
g_LibraryNames, m_wizardName );
if( dlg.ShowModal() != wxID_OK )
return;
if( m_wizardName == dlg.GetTextSelection() )
return;
m_wizardName = dlg.GetTextSelection();
DisplayWizardInfos();
ReCreatePageList();
ReCreateParameterList();
}
/**
* Function SelectCurrentFootprint
* Selects the current footprint name and display it
*/
void FOOTPRINT_WIZARD_FRAME::ParametersUpdated( wxCommandEvent& event )
{
/*
// will pick it from the wizard
MODULE * module = new MODULE(NULL);
if( module )
{
module->SetPosition( wxPoint( 0, 0 ) );
// Only one fotprint allowed: remove the previous footprint (if exists)
if( oldmodule )
{
GetBoard()->Remove( oldmodule );
delete oldmodule;
}
m_footprintName = module->GetLibRef();
module->ClearFlags();
SetCurItem( NULL );
Zoom_Automatique( false );
m_canvas->Refresh( );
Update3D_Frame();
m_FootprintList->SetStringSelection( m_footprintName );
}
* */
}
/**
* Function RedrawActiveWindow
* Display the current selected component.
* If the component is an alias, the ROOT component is displayed
*/
void FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
{
if( !GetBoard() )
return;
m_canvas->DrawBackGround( DC );
GetBoard()->Draw( m_canvas, DC, GR_COPY );
MODULE* module = GetBoard()->m_Modules;
if ( module )
module->DisplayInfo( this );
m_canvas->DrawCrossHair( DC );
ClearMsgPanel();
if( module )
module->DisplayInfo( this );
}
This diff is collapsed.
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012 Miguel Angel Ajo Pelayo, miguelangel@nbee.es
* Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file footprint_wizard_frame.h
*/
#ifndef FOOTPRINT_WIZARD_FRAME_H_
#define FOOTPRINT_WIZARD_FRAME_H_
#include <wx/gdicmn.h>
class wxSashLayoutWindow;
class wxListBox;
class wxSemaphore;
/**
* Component library viewer main window.
*/
class FOOTPRINT_WIZARD_FRAME : public PCB_BASE_FRAME
{
private:
// List of libraries (for selection )
wxSashLayoutWindow* m_PageListWindow;
wxListBox* m_PageList; // The list of pages
wxSize m_PageListSize; // size of the window
// List of components in the selected library
wxSashLayoutWindow* m_ParameterListWindow;
wxListBox* m_ParameterList; // The list of parameters
wxSize m_ParameterListSize; // size of the window
// Flags
wxSemaphore* m_Semaphore; // != NULL if the frame must emulate a modal dialog
wxString m_configPath; // subpath for configuration
protected:
wxString m_wizardName; //< name of the current wizard
wxString m_wizardDescription; //< description of the wizard
wxString m_wizardStatus; //< current wizard status
public:
FOOTPRINT_WIZARD_FRAME( wxWindow* parent, wxSemaphore* semaphore = NULL );
~FOOTPRINT_WIZARD_FRAME();
MODULE* GetBuiltFootrint( void );
private:
void OnSize( wxSizeEvent& event );
/**
* Function OnSashDrag
* resizes the child windows when dragging a sash window border.
*/
void OnSashDrag( wxSashEvent& event );
/**
* Function ReCreateLibraryList
*
* Creates or recreates the list of current loaded libraries.
* This list is sorted, with the library cache always at end of the list
*/
void ReCreatePageList();
void ReCreateParameterList();
void Process_Special_Functions( wxCommandEvent& event );
void DisplayWizardInfos();
void RedrawActiveWindow( wxDC* DC, bool EraseBg );
void OnCloseWindow( wxCloseEvent& Event );
void ReCreateHToolbar();
void ReCreateVToolbar();
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
void ClickOnPageList( wxCommandEvent& event );
void ClickOnParameterList( wxCommandEvent& event );
void OnSetRelativeOffset( wxCommandEvent& event );
void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 );
/**
* Function LoadSettings
* loads the library viewer frame specific configuration settings.
*
* Don't forget to call this base method from any derived classes or the
* settings will not get loaded.
*/
void LoadSettings();
/**
* Function SaveSettings
* save library viewer frame specific configuration settings.
*
* Don't forget to call this base method from any derived classes or the
* settings will not get saved.
*/
void SaveSettings();
/**
* Function OnActivate
* is called when the frame frame is activate to reload the libraries and component lists
* that can be changed by the schematic editor or the library editor.
*/
virtual void OnActivate( wxActivateEvent& event );
void SelectCurrentWizard( wxCommandEvent& event );
void ParametersUpdated( wxCommandEvent& event );
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
/**
* Function Show3D_Frame (virtual)
* displays 3D view of the footprint (module) being edited.
*/
void Show3D_Frame( wxCommandEvent& event );
/**
* Function Update3D_Frame
* must be called after a footprint selection
* Updates the 3D view and 3D frame title.
* @param aForceReloadFootprint = true to reload data (default)
* = false to update title only -(aftre creating the 3D viewer)
*/
void Update3D_Frame( bool aForceReloadFootprint = true );
/*
* Virtual functions, not used here, but needed by PCB_BASE_FRAME
* (virtual pure functions )
*/
void OnLeftDClick(wxDC*, const wxPoint&) {}
void SaveCopyInUndoList(BOARD_ITEM*, UNDO_REDO_T, const wxPoint&) {}
void SaveCopyInUndoList(PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint&) {}
DECLARE_EVENT_TABLE()
};
#endif // FOOTPRINT_WIZARD_FRM_H_
......@@ -29,6 +29,8 @@
#include <dialog_edit_module_for_Modedit.h>
#include <wildcards_and_files_ext.h>
#include <menus_helpers.h>
#include <footprint_wizard_frame.h>
// Functions defined in block_module_editor, but used here
// These 2 functions are used in modedit to rotate or mirror the whole footprint
......@@ -284,6 +286,36 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
break;
}
case ID_MODEDIT_NEW_MODULE_FROM_WIZARD:
{
Clear_Pcb( true );
GetScreen()->ClearUndoRedoList();
SetCurItem( NULL );
GetScreen()->SetCrossHairPosition( wxPoint( 0, 0 ) );
MODULE* module = NULL;
FOOTPRINT_WIZARD_FRAME *wizard = new FOOTPRINT_WIZARD_FRAME(this,NULL);
wizard->Show( true );
wizard->Zoom_Automatique( false );
if( module ) // i.e. if create module command not aborted
{
// Initialize data relative to nets and netclasses (for a new
// module the defaults are used)
// This is mandatory to handle and draw pads
GetBoard()->BuildListOfNets();
redraw = true;
module->SetPosition( wxPoint( 0, 0 ) );
if( GetBoard()->m_Modules )
GetBoard()->m_Modules->ClearFlags();
Zoom_Automatique( false );
}
break;
}
case ID_MODEDIT_SAVE_LIBMODULE:
if( GetBoard()->m_Modules == NULL )
break;
......
......@@ -71,6 +71,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME )
EVT_TOOL( ID_MODEDIT_DELETE_PART, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_MODEDIT_NEW_MODULE, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_MODEDIT_NEW_MODULE_FROM_WIZARD, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_MODEDIT_LOAD_MODULE, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_MODEDIT_IMPORT_PART, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
EVT_TOOL( ID_MODEDIT_EXPORT_PART, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
......
......@@ -299,6 +299,7 @@ enum pcbnew_ids
ID_MODEDIT_SAVE_LIBMODULE,
ID_MODEDIT_DELETE_PART,
ID_MODEDIT_NEW_MODULE,
ID_MODEDIT_NEW_MODULE_FROM_WIZARD,
ID_MODEDIT_SHEET_SET,
ID_MODEDIT_LOAD_MODULE,
ID_MODEDIT_PAD_SETTINGS,
......@@ -323,7 +324,20 @@ enum pcbnew_ids
ID_MODVIEW_PREVIOUS,
ID_MODVIEW_NEXT,
ID_MODVIEW_SHOW_3D_VIEW,
ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD
ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD,
ID_FOOTPRINT_WIZARD_WINDOW,
ID_FOOTPRINT_WIZARD_PAGES,
ID_FOOTPRINT_WIZARD_PARAMETERS,
ID_FOOTPRINT_WIZARD_NEXT,
ID_FOOTPRINT_WIZARD_PREVIOUS,
ID_FOOTPRINT_WIZARD_DONE,
ID_FOOTPRINT_WIZARD_SHOW_3D_VIEW,
ID_FOOTPRINT_WIZARD_PAGE_LIST,
ID_FOOTPRINT_WIZARD_PARAMETER_LIST,
ID_FOOTPRINT_WIZARD_PAGES_WINDOW,
ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW,
ID_FOOTPRINT_WIZARD_SELECT_WIZARD,
ID_FOOTPRINT_WIZARD_EXPORT_TO_BOARD,
};
......
/**
* @file pcbnew_footprint_wizards.cpp
* @brief Class PCBNEW_FOOTPRINT_WIZARDS
* @brief Class PCBNEW_PYTHON_FOOTPRINT_WIZARDS
*/
#include "pcbnew_footprint_wizards.h"
#include <stdio.h>
FOOTPRINT_WIZARD::FOOTPRINT_WIZARD(PyObject *aWizard)
PYTHON_FOOTPRINT_WIZARD::PYTHON_FOOTPRINT_WIZARD(PyObject *aWizard)
{
this->py_wizard = aWizard;
this->m_PyWizard= aWizard;
Py_XINCREF(aWizard);
}
FOOTPRINT_WIZARD::~FOOTPRINT_WIZARD()
PYTHON_FOOTPRINT_WIZARD::~PYTHON_FOOTPRINT_WIZARD()
{
Py_XDECREF(this->py_wizard);
Py_XDECREF(this->m_PyWizard);
}
PyObject* FOOTPRINT_WIZARD::CallMethod(const char* aMethod, PyObject *aArglist)
PyObject* PYTHON_FOOTPRINT_WIZARD::CallMethod(const char* aMethod, PyObject *aArglist)
{
PyObject *pFunc;
/* pFunc is a new reference to the desired method */
pFunc = PyObject_GetAttrString(this->py_wizard, aMethod);
pFunc = PyObject_GetAttrString(this->m_PyWizard, aMethod);
if (pFunc && PyCallable_Check(pFunc))
{
......@@ -39,7 +39,6 @@ PyObject* FOOTPRINT_WIZARD::CallMethod(const char* aMethod, PyObject *aArglist)
printf (" : %s\n",PyString_AsString(PyObject_Str(b)));
}
if (result)
{
Py_XDECREF(pFunc);
......@@ -57,7 +56,7 @@ PyObject* FOOTPRINT_WIZARD::CallMethod(const char* aMethod, PyObject *aArglist)
return NULL;
}
wxString FOOTPRINT_WIZARD::CallRetStrMethod(const char* aMethod, PyObject *aArglist)
wxString PYTHON_FOOTPRINT_WIZARD::CallRetStrMethod(const char* aMethod, PyObject *aArglist)
{
wxString ret;
PyObject *result = CallMethod(aMethod,aArglist);
......@@ -74,22 +73,22 @@ wxString FOOTPRINT_WIZARD::CallRetStrMethod(const char* aMethod, PyObject *aArgl
return ret;
}
wxString FOOTPRINT_WIZARD::GetName()
wxString PYTHON_FOOTPRINT_WIZARD::GetName()
{
return CallRetStrMethod("GetName");
}
wxString FOOTPRINT_WIZARD::GetImage()
wxString PYTHON_FOOTPRINT_WIZARD::GetImage()
{
return CallRetStrMethod("GetImage");
}
wxString FOOTPRINT_WIZARD::GetDescription()
wxString PYTHON_FOOTPRINT_WIZARD::GetDescription()
{
return CallRetStrMethod("GetDescription");
}
int FOOTPRINT_WIZARD::GetNumParameterPages()
int PYTHON_FOOTPRINT_WIZARD::GetNumParameterPages()
{
int ret;
PyObject *result;
......@@ -106,7 +105,7 @@ int FOOTPRINT_WIZARD::GetNumParameterPages()
return ret;
}
wxString FOOTPRINT_WIZARD::GetParameterPageName(int aPage)
wxString PYTHON_FOOTPRINT_WIZARD::GetParameterPageName(int aPage)
{
wxString ret;
PyObject *arglist;
......@@ -126,41 +125,48 @@ wxString FOOTPRINT_WIZARD::GetParameterPageName(int aPage)
return ret;
}
wxArrayString FOOTPRINT_WIZARD::GetParameterNames(int aPage)
wxArrayString PYTHON_FOOTPRINT_WIZARD::GetParameterNames(int aPage)
{
wxArrayString a;
return a;
}
wxArrayString FOOTPRINT_WIZARD::GetParameterValues(int aPage)
wxArrayString PYTHON_FOOTPRINT_WIZARD::GetParameterValues(int aPage)
{
wxArrayString a;
return a;
}
wxString FOOTPRINT_WIZARD::SetParameterValues(int aPage,wxArrayString& aValues)
wxString PYTHON_FOOTPRINT_WIZARD::SetParameterValues(int aPage,wxArrayString& aValues)
{
wxString ret;
return ret;
}
MODULE FOOTPRINT_WIZARD::*GetModule()
MODULE *PYTHON_FOOTPRINT_WIZARD::GetModule()
{
return NULL;
}
std::vector<FOOTPRINT_WIZARD*> FOOTPRINT_WIZARDS::m_FootprintWizards;
void FOOTPRINT_WIZARDS::register_wizard(PyObject* wizard)
void PYTHON_FOOTPRINT_WIZARDS::register_wizard(PyObject* aPyWizard)
{
FOOTPRINT_WIZARD *fw;
PYTHON_FOOTPRINT_WIZARD *fw;
fw = new FOOTPRINT_WIZARD(wizard);
m_FootprintWizards.push_back(fw);
fw = new PYTHON_FOOTPRINT_WIZARD(aPyWizard);
printf("Registered python footprint wizard '%s'\n",
(const char*)fw->GetName().mb_str());
(const char*)fw->GetName().mb_str()
);
// this get the wizard registered in the common
// FOOTPRINT_WIZARDS class
fw->register_wizard();
#if 0
/* just to test if it works correctly */
int pages = fw->GetNumParameterPages();
printf(" %d pages\n",pages);
......@@ -169,7 +175,7 @@ void FOOTPRINT_WIZARDS::register_wizard(PyObject* wizard)
printf(" page %d->'%s'\n",n,
(const char*)fw->GetParameterPageName(n).mb_str());
}
#endif
}
......
......@@ -7,17 +7,17 @@
#define PCBNEW_FOOTPRINT_WIZARDS_H
#include <Python.h>
#include <vector>
#include <wxPcbStruct.h>
#include <class_footprint_wizard.h>
class FOOTPRINT_WIZARD
class PYTHON_FOOTPRINT_WIZARD: public FOOTPRINT_WIZARD
{
PyObject *py_wizard;
PyObject *m_PyWizard;
PyObject *CallMethod(const char *aMethod, PyObject *aArglist=NULL);
wxString CallRetStrMethod(const char *aMethod, PyObject *aArglist=NULL);
public:
FOOTPRINT_WIZARD(PyObject *wizard);
~FOOTPRINT_WIZARD();
PYTHON_FOOTPRINT_WIZARD(PyObject *wizard);
~PYTHON_FOOTPRINT_WIZARD();
wxString GetName();
wxString GetImage();
wxString GetDescription();
......@@ -31,13 +31,10 @@ public:
};
class FOOTPRINT_WIZARDS
class PYTHON_FOOTPRINT_WIZARDS
{
private:
static std::vector<FOOTPRINT_WIZARD*> m_FootprintWizards;
public:
static void register_wizard(PyObject *wizard);
static void register_wizard(PyObject *aPyWizard);
};
......
......@@ -3,7 +3,7 @@
#include <scripting/pcbnew_footprint_wizards.h>
%}
class FOOTPRINT_WIZARDS
class PYTHON_FOOTPRINT_WIZARDS
{
public:
static void register_wizard(PyObject *wizard);
......
......@@ -77,6 +77,12 @@ void FOOTPRINT_EDIT_FRAME::ReCreateHToolbar()
m_mainToolBar->AddTool( ID_MODEDIT_NEW_MODULE, wxEmptyString, KiBitmap( new_footprint_xpm ),
_( "New module" ) );
m_mainToolBar->AddTool( ID_MODEDIT_NEW_MODULE_FROM_WIZARD, wxEmptyString,
KiBitmap( module_wizard_xpm ),
_( "New module from footprint wizard" ) );
m_mainToolBar->AddTool( ID_MODEDIT_LOAD_MODULE, wxEmptyString,
KiBitmap( load_module_lib_xpm ),
_( "Load module from library" ) );
......
......@@ -35,7 +35,7 @@ class KiCadPlugin:
if isinstance(self,FilePlugin):
pass # register to file plugins in C++
if isinstance(self,FootprintWizardPlugin):
FOOTPRINT_WIZARDS.register_wizard(self)
PYTHON_FOOTPRINT_WIZARDS.register_wizard(self)
return
if isinstance(self,ActionPlugin):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment