Browse Source
* Footprint wizard UI: Added to module editor.
* 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 wizardspull/1/head
18 changed files with 1696 additions and 40 deletions
-
1bitmaps_png/CMakeLists.txt
-
97bitmaps_png/cpp_26/module_wizard.cpp
-
401bitmaps_png/sources/module_wizard.svg
-
1include/bitmaps.h
-
5pcbnew/CMakeLists.txt
-
41pcbnew/class_footprint_wizard.cpp
-
44pcbnew/class_footprint_wizard.h
-
160pcbnew/footprint_wizard.cpp
-
685pcbnew/footprint_wizard_frame.cpp
-
167pcbnew/footprint_wizard_frame.h
-
32pcbnew/modedit.cpp
-
1pcbnew/moduleframe.cpp
-
18pcbnew/pcbnew_id.h
-
56pcbnew/scripting/pcbnew_footprint_wizards.cpp
-
17pcbnew/scripting/pcbnew_footprint_wizards.h
-
2pcbnew/scripting/plugins.i
-
6pcbnew/tool_modedit.cpp
-
2scripting/kicadplugins.i
@ -0,0 +1,97 @@ |
|||
|
|||
/* 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
|
|||
@ -0,0 +1,401 @@ |
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|||
<svg |
|||
xmlns:dc="http://purl.org/dc/elements/1.1/" |
|||
xmlns:cc="http://creativecommons.org/ns#" |
|||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
|||
xmlns:svg="http://www.w3.org/2000/svg" |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
xmlns:xlink="http://www.w3.org/1999/xlink" |
|||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
|||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
|||
height="48" |
|||
width="48" |
|||
version="1.1" |
|||
viewBox="0 0 48 48" |
|||
id="svg2" |
|||
inkscape:version="0.48.3.1 r9886" |
|||
sodipodi:docname="module_wizard.svg"> |
|||
<metadata |
|||
id="metadata146"> |
|||
<rdf:RDF> |
|||
<cc:Work |
|||
rdf:about=""> |
|||
<dc:format>image/svg+xml</dc:format> |
|||
<dc:type |
|||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
|||
</cc:Work> |
|||
</rdf:RDF> |
|||
</metadata> |
|||
<sodipodi:namedview |
|||
pagecolor="#ffffff" |
|||
bordercolor="#666666" |
|||
borderopacity="1" |
|||
objecttolerance="10" |
|||
gridtolerance="10" |
|||
guidetolerance="10" |
|||
inkscape:pageopacity="0" |
|||
inkscape:pageshadow="2" |
|||
inkscape:window-width="1280" |
|||
inkscape:window-height="776" |
|||
id="namedview144" |
|||
showgrid="false" |
|||
inkscape:zoom="8.1513305" |
|||
inkscape:cx="24.655547" |
|||
inkscape:cy="24.064883" |
|||
inkscape:window-x="0" |
|||
inkscape:window-y="24" |
|||
inkscape:window-maximized="1" |
|||
inkscape:current-layer="svg2" /> |
|||
<defs |
|||
id="defs4"> |
|||
<linearGradient |
|||
id="i" |
|||
y2="14.691" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="30.432" |
|||
gradientTransform="translate(6.3922,12.185)" |
|||
y1="12.338" |
|||
x1="28.079"> |
|||
<stop |
|||
stop-color="#fcaf3e" |
|||
offset="0" |
|||
id="stop7" /> |
|||
<stop |
|||
stop-color="#ce5c00" |
|||
offset="1" |
|||
id="stop9" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="j" |
|||
y2="22.119" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="22.81" |
|||
gradientTransform="translate(6.3922,12.185)" |
|||
y1="21.481" |
|||
x1="23.448"> |
|||
<stop |
|||
stop-color="#ce5c00" |
|||
offset="0" |
|||
id="stop12" /> |
|||
<stop |
|||
stop-color="#ce5c00" |
|||
offset="1" |
|||
id="stop14" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="k" |
|||
y2="32.714" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="25.485" |
|||
y1="34.39" |
|||
x1="26.379"> |
|||
<stop |
|||
stop-color="#e9b96e" |
|||
offset="0" |
|||
id="stop17" /> |
|||
<stop |
|||
stop-color="#fff" |
|||
offset="1" |
|||
id="stop19" /> |
|||
</linearGradient> |
|||
<radialGradient |
|||
id="n" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="128" |
|||
cx="-138.84" |
|||
gradientTransform="matrix(.35473 -.34328 .35696 .34544 130.15 -71.026)" |
|||
r="9.1267"> |
|||
<stop |
|||
stop-color="#f9a9a9" |
|||
offset="0" |
|||
id="stop22" /> |
|||
<stop |
|||
stop-color="#ab5f5f" |
|||
offset="1" |
|||
id="stop24" /> |
|||
</radialGradient> |
|||
<linearGradient |
|||
id="l" |
|||
y2="134.25" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="-158.75" |
|||
gradientTransform="matrix(.20949 -.20274 .20949 .20274 129.28 -31.999)" |
|||
y1="115.94" |
|||
x1="-158.75"> |
|||
<stop |
|||
stop-color="#ddd" |
|||
offset="0" |
|||
id="stop27" /> |
|||
<stop |
|||
stop-color="#fff" |
|||
offset=".34468" |
|||
id="stop29" /> |
|||
<stop |
|||
stop-color="#737373" |
|||
offset=".72695" |
|||
id="stop31" /> |
|||
<stop |
|||
stop-color="#bbb" |
|||
offset="1" |
|||
id="stop33" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="o" |
|||
y2="9.2485" |
|||
xlink:href="#m" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="9.3617" |
|||
gradientTransform="matrix(.88741 0 0 1.1269 1.1058 6.5)" |
|||
y1="2.8702" |
|||
x1="3.4673" /> |
|||
<linearGradient |
|||
id="m"> |
|||
<stop |
|||
stop-color="#fff" |
|||
offset="0" |
|||
id="stop37" /> |
|||
<stop |
|||
stop-color="#ff6900" |
|||
offset="1" |
|||
id="stop39" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="p" |
|||
y2="7.8438" |
|||
xlink:href="#m" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="12.922" |
|||
y1="6.0625" |
|||
x1="11.078" /> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#i" |
|||
id="linearGradient3123" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="translate(6.3922,12.185)" |
|||
x1="28.079" |
|||
y1="12.338" |
|||
x2="30.432" |
|||
y2="14.691" /> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#j" |
|||
id="linearGradient3125" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="translate(6.3922,12.185)" |
|||
x1="23.448" |
|||
y1="21.481" |
|||
x2="22.81" |
|||
y2="22.119" /> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#k" |
|||
id="linearGradient3127" |
|||
gradientUnits="userSpaceOnUse" |
|||
x1="26.379" |
|||
y1="34.39" |
|||
x2="25.485" |
|||
y2="32.714" /> |
|||
<radialGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#n" |
|||
id="radialGradient3129" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="matrix(0.35473,-0.34328,0.35696,0.34544,130.15,-71.026)" |
|||
cx="-138.84" |
|||
cy="128" |
|||
r="9.1267" /> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#l" |
|||
id="linearGradient3131" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="matrix(0.20949,-0.20274,0.20949,0.20274,129.28,-31.999)" |
|||
x1="-158.75" |
|||
y1="115.94" |
|||
x2="-158.75" |
|||
y2="134.25" /> |
|||
</defs> |
|||
<g |
|||
id="g3919" |
|||
transform="matrix(0.97746831,0,0,1.0670086,1.0454603,-0.55396231)"> |
|||
<g |
|||
transform="matrix(-3.0977413,0,0,-2.623624,-9.6989928,37.816312)" |
|||
id="g44" |
|||
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:0.70154679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="14.619" |
|||
width="9.7086" |
|||
y="3.4905" |
|||
x="1.904" |
|||
id="rect46" |
|||
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:0.70154679;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> |
|||
<path |
|||
d="m 693.26,625.06 a 18.91409,18.91409 0 0 1 -37.828,0.11702" |
|||
transform="matrix(0,0.071482,-0.071482,0,41.168,-41.24)" |
|||
id="path48" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:9.81431389;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> |
|||
</g> |
|||
<g |
|||
transform="matrix(-3.0977413,0,0,-2.623624,-9.5828275,38.209856)" |
|||
id="g50" |
|||
style="stroke:#030303;stroke-linejoin:round"> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="13.332" |
|||
x="-0.31959" |
|||
id="rect52" |
|||
style="fill:#ff7800;stroke-width:0.30000001" /> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="5.3635998" |
|||
x="-0.31959" |
|||
id="rect54" |
|||
style="fill:#ff7800;stroke-width:0.30000001" /> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,46.083,-44.072)" |
|||
id="path56" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke-width:4.19689989" /> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="9.3478003" |
|||
x="-0.31959" |
|||
id="rect58" |
|||
style="fill:#ff7800;stroke-width:0.30000001" /> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,42.08,-44.072)" |
|||
id="path60" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke-width:4.19689989" /> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,38.077,-44.072)" |
|||
id="path62" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke-width:4.19689989" /> |
|||
</g> |
|||
<g |
|||
transform="matrix(-3.0977413,0,0,-2.623624,-9.5828275,12.561045)" |
|||
id="g64"> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="13.332" |
|||
x="-0.31959" |
|||
id="rect66" |
|||
style="fill:#ff7800;stroke:#030303;stroke-width:0.30000001;stroke-linejoin:round" /> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="5.3635998" |
|||
x="-0.31959" |
|||
id="rect68" |
|||
style="fill:#ff7800;stroke:#030303;stroke-width:0.30000001;stroke-linejoin:round" /> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,46.083,-44.072)" |
|||
id="path70" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round" /> |
|||
<rect |
|||
transform="matrix(0,1,-1,0,0,0)" |
|||
height="2.5109999" |
|||
width="4.7175999" |
|||
y="9.3478003" |
|||
x="-0.31959" |
|||
id="rect72" |
|||
style="fill:#ff7800;stroke:#030303;stroke-width:0.30000001;stroke-linejoin:round" /> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,42.08,-44.072)" |
|||
id="path74" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round" /> |
|||
<g |
|||
id="g76" |
|||
style="stroke-width:0.30000001"> |
|||
<path |
|||
d="m 654.65,737.28 a 9.5805,9.5805 0 1 1 -19.161,0 9.5805,9.5805 0 1 1 19.161,0 z" |
|||
transform="matrix(0,0.071482,-0.071482,0,38.077,-44.072)" |
|||
id="path78" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round" /> |
|||
</g> |
|||
</g> |
|||
</g> |
|||
<g |
|||
transform="matrix(-0.06556536,1.2979898,-1.1671085,-0.04646565,78.72536,-112.86048)" |
|||
id="g80"> |
|||
<g |
|||
transform="matrix(1.1072,0,0,1.0714,74.214,8.4286)" |
|||
id="g82"> |
|||
<path |
|||
d="m 25.892,30.185 19,-19 c 2.175,0.35996 3.0847,1.7322 3.5,3.5 l -19,19 -4.6161,0.7045 1.1161,-4.2045 z" |
|||
id="path84" |
|||
style="fill:url(#linearGradient3123);fill-rule:evenodd;stroke:url(#linearGradient3125);stroke-linejoin:round" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
d="M 26.792,30.685 45.29,12.287 c 1.0897,0.17844 1.5173,0.98794 2,2 l -18.398,18.498 -3.3,0.9 1.2,-3 z" |
|||
id="path86" |
|||
inkscape:connector-curvature="0" |
|||
style="opacity:0.28235001;fill:none;stroke:#ffffff" /> |
|||
<path |
|||
d="m 24.55,34.633 1.6663,-4.1803 c 0,0 1.1995,0.24536 1.9322,0.97509 0.73264,0.72973 0.99839,1.9438 0.99839,1.9438 l -4.5969,1.2614 z" |
|||
id="path88" |
|||
style="fill:url(#linearGradient3127);fill-rule:evenodd" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
d="m 23,21.5 -5.5,1.5 2,-5" |
|||
transform="translate(6.3922,12.185)" |
|||
id="path90" |
|||
inkscape:connector-curvature="0" |
|||
style="fill:none;stroke:#e9b96e;stroke-linecap:round;stroke-linejoin:round" /> |
|||
<path |
|||
d="m 23.955,33.685 -0.90625,2.25 2.3438,-0.65625 c 0.002,-0.03184 0,-0.06141 0,-0.09375 0,-0.80212 -0.64531,-1.4598 -1.4375,-1.5 z" |
|||
id="path92" |
|||
inkscape:connector-curvature="0" |
|||
style="fill-rule:evenodd" /> |
|||
</g> |
|||
<path |
|||
style="fill:url(#radialGradient3129);stroke:#ef2929;stroke-width:1.0891;enable-background:new" |
|||
d="m 121.62,22.515 c 2.0307,-0.53628 4.3014,1.7694 3.8196,3.6963 l 2.4306,-2.3522 c 1.1808,-2.6427 -1.2536,-4.7247 -3.8692,-3.7443 l -2.381,2.4002 z" |
|||
id="path94" |
|||
inkscape:connector-curvature="0" /> |
|||
<path |
|||
style="fill:url(#linearGradient3131);stroke:#888a85;stroke-width:1.0891;enable-background:new" |
|||
d="m 119.12,24.769 c 2.144,-0.56623 4.5413,1.8683 4.0326,3.9028 l 2.5662,-2.4836 c 0.8353,-1.7098 -2.2637,-4.6473 -4.085,-3.9535 l -2.52,2.535 z" |
|||
id="path96" |
|||
inkscape:connector-curvature="0" /> |
|||
</g> |
|||
<path |
|||
sodipodi:type="star" |
|||
style="fill:#ffff0c;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1" |
|||
id="path3036" |
|||
sodipodi:sides="5" |
|||
sodipodi:cx="16.070995" |
|||
sodipodi:cy="14.263176" |
|||
sodipodi:r1="14.004804" |
|||
sodipodi:r2="7.0024018" |
|||
sodipodi:arg1="1.5182133" |
|||
sodipodi:arg2="2.1465318" |
|||
inkscape:flatsided="false" |
|||
inkscape:rounded="0" |
|||
inkscape:randomized="0" |
|||
d="m 16.807071,28.248623 -4.548546,-8.111888 -9.26102,-0.851769 6.3092852,-6.832635 -2.0517319,-9.0709646 8.4478987,3.8890862 7.99298,-4.7543951 -1.088197,9.2362235 6.991665,6.132586 -9.120441,1.819214 z" |
|||
inkscape:transform-center-x="-0.22746004" |
|||
inkscape:transform-center-y="1.119164" |
|||
transform="translate(3.3123427,2.8216252)" /> |
|||
</svg> |
|||
@ -0,0 +1,41 @@ |
|||
/**
|
|||
* @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
|
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,44 @@ |
|||
/** |
|||
* @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 */ |
|||
|
|||
@ -0,0 +1,160 @@ |
|||
/**
|
|||
* @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 ); |
|||
} |
|||
@ -0,0 +1,685 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras |
|||
* Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> |
|||
* Copyright (C) 2004-2011 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 modview_frame.cpp |
|||
*/ |
|||
|
|||
#include <fctsys.h>
|
|||
#include <appl_wxstruct.h>
|
|||
#include <macros.h>
|
|||
#include <class_drawpanel.h>
|
|||
#include <wxPcbStruct.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 <footprint_info.h>
|
|||
|
|||
#include <hotkeys.h>
|
|||
#include <wildcards_and_files_ext.h>
|
|||
|
|||
|
|||
BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME ) |
|||
/* Window events */ |
|||
EVT_CLOSE( FOOTPRINT_WIZARD_FRAME::OnCloseWindow ) |
|||
EVT_SIZE( FOOTPRINT_WIZARD_FRAME::OnSize ) |
|||
EVT_ACTIVATE( FOOTPRINT_WIZARD_FRAME::OnActivate ) |
|||
|
|||
/* Sash drag events */ |
|||
EVT_SASH_DRAGGED( ID_FOOTPRINT_WIZARD_PAGES, FOOTPRINT_WIZARD_FRAME::OnSashDrag ) |
|||
EVT_SASH_DRAGGED( ID_FOOTPRINT_WIZARD_PARAMETERS, FOOTPRINT_WIZARD_FRAME::OnSashDrag ) |
|||
|
|||
/* Toolbar events */ |
|||
EVT_TOOL( ID_FOOTPRINT_WIZARD_NEXT, |
|||
FOOTPRINT_WIZARD_FRAME::Process_Special_Functions ) |
|||
EVT_TOOL( ID_FOOTPRINT_WIZARD_PREVIOUS, |
|||
FOOTPRINT_WIZARD_FRAME::Process_Special_Functions ) |
|||
/* EVT_TOOL( ID_FOOTPRINT_WIZARD_DONE,
|
|||
FOOTPRINT_WIZARD_FRAME::ExportSelectedFootprint )*/ |
|||
EVT_TOOL( ID_FOOTPRINT_WIZARD_SHOW_3D_VIEW, |
|||
FOOTPRINT_WIZARD_FRAME::Show3D_Frame ) |
|||
|
|||
/* listbox events */ |
|||
EVT_LISTBOX( ID_FOOTPRINT_WIZARD_PAGE_LIST, FOOTPRINT_WIZARD_FRAME::ClickOnPageList ) |
|||
EVT_LISTBOX( ID_FOOTPRINT_WIZARD_PARAMETER_LIST, FOOTPRINT_WIZARD_FRAME::ClickOnParameterList ) |
|||
|
|||
EVT_MENU( ID_SET_RELATIVE_OFFSET, FOOTPRINT_WIZARD_FRAME::OnSetRelativeOffset ) |
|||
END_EVENT_TABLE() |
|||
|
|||
|
|||
/*
|
|||
* This emulates the zoom menu entries found in the other KiCad applications. |
|||
* The library viewer does not have any menus so add an accelerator table to |
|||
* the main frame. |
|||
*/ |
|||
static wxAcceleratorEntry accels[] = |
|||
{ |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F1, ID_ZOOM_IN ), |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F2, ID_ZOOM_OUT ), |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F3, ID_ZOOM_REDRAW ), |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F4, ID_POPUP_ZOOM_CENTER ), |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_HOME, ID_ZOOM_PAGE ), |
|||
wxAcceleratorEntry( wxACCEL_NORMAL, WXK_SPACE, ID_SET_RELATIVE_OFFSET ) |
|||
}; |
|||
|
|||
#define ACCEL_TABLE_CNT ( sizeof( accels ) / sizeof( wxAcceleratorEntry ) )
|
|||
|
|||
#define EXTRA_BORDER_SIZE 2
|
|||
|
|||
|
|||
FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( wxWindow* parent, wxSemaphore* semaphore ) : |
|||
PCB_BASE_FRAME( parent, MODULE_VIEWER_FRAME, _( "Footprint Wizard" ), |
|||
wxDefaultPosition, wxDefaultSize ) |
|||
{ |
|||
wxAcceleratorTable table( ACCEL_TABLE_CNT, accels ); |
|||
|
|||
m_FrameName = wxT( "FootprintWizard" ); |
|||
m_configPath = wxT( "FootprintWizard" ); |
|||
m_showAxis = true; // true to draw axis.
|
|||
|
|||
// Give an icon
|
|||
wxIcon icon; |
|||
icon.CopyFromBitmap( KiBitmap( modview_icon_xpm ) ); |
|||
SetIcon( icon ); |
|||
|
|||
m_HotkeysZoomAndGridList = g_Module_Viewer_Hokeys_Descr; |
|||
m_PageList= NULL; |
|||
m_ParameterList = NULL; |
|||
m_PageListWindow = NULL; |
|||
m_ParameterListWindow = NULL; |
|||
m_Semaphore = semaphore; |
|||
m_wizardName.Empty(); |
|||
|
|||
if( m_Semaphore ) |
|||
MakeModal(true); |
|||
|
|||
SetBoard( new BOARD() ); |
|||
// Ensure all layers and items are visible:
|
|||
GetBoard()->SetVisibleAlls(); |
|||
SetScreen( new PCB_SCREEN(GetPageSizeIU()) ); |
|||
GetScreen()->m_Center = true; // Center coordinate origins on screen.
|
|||
LoadSettings(); |
|||
|
|||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); |
|||
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); |
|||
|
|||
ReCreateHToolbar(); |
|||
ReCreateVToolbar(); |
|||
|
|||
wxSize size = GetClientSize(); |
|||
size.y -= m_MsgFrameHeight + 2; |
|||
|
|||
m_PageListSize.y = -1; |
|||
|
|||
wxPoint win_pos( 0, 0 ); |
|||
|
|||
// Creates the libraries window display
|
|||
m_PageListWindow = |
|||
new wxSashLayoutWindow( this, ID_FOOTPRINT_WIZARD_PAGES_WINDOW, win_pos, |
|||
wxDefaultSize, wxCLIP_CHILDREN | wxSW_3D, |
|||
wxT( "PagesWindow" ) ); |
|||
m_PageListWindow->SetOrientation( wxLAYOUT_VERTICAL ); |
|||
m_PageListWindow->SetAlignment( wxLAYOUT_LEFT ); |
|||
m_PageListWindow->SetSashVisible( wxSASH_RIGHT, true ); |
|||
m_PageListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE ); |
|||
m_PageList = new wxListBox( m_PageListWindow, ID_FOOTPRINT_WIZARD_PAGE_LIST, |
|||
wxPoint( 0, 0 ), wxDefaultSize, |
|||
0, NULL, wxLB_HSCROLL ); |
|||
|
|||
// Creates the component window display
|
|||
m_ParameterListSize.y = size.y; |
|||
win_pos.x = m_PageListSize.x; |
|||
m_ParameterListWindow = new wxSashLayoutWindow( this, |
|||
ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW, |
|||
win_pos, wxDefaultSize, |
|||
wxCLIP_CHILDREN | wxSW_3D, |
|||
wxT( "ParameterList" ) ); |
|||
|
|||
m_ParameterListWindow->SetOrientation( wxLAYOUT_VERTICAL ); |
|||
|
|||
m_ParameterListWindow->SetSashVisible( wxSASH_RIGHT, true ); |
|||
m_ParameterListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE ); |
|||
m_ParameterList = new wxListBox( m_ParameterListWindow, ID_FOOTPRINT_WIZARD_PARAMETER_LIST, |
|||
wxPoint( 0, 0 ), wxDefaultSize, |
|||
0, NULL, wxLB_HSCROLL ); |
|||
|
|||
ReCreatePageList(); |
|||
|
|||
DisplayWizardInfos(); |
|||
|
|||
if( m_canvas ) |
|||
m_canvas->SetAcceleratorTable( table ); |
|||
|
|||
m_auimgr.SetManagedWindow( this ); |
|||
|
|||
|
|||
EDA_PANEINFO horiz; |
|||
horiz.HorizontalToolbarPane(); |
|||
|
|||
EDA_PANEINFO vert; |
|||
vert.VerticalToolbarPane(); |
|||
|
|||
EDA_PANEINFO info; |
|||
info.InfoToolbarPane(); |
|||
|
|||
EDA_PANEINFO mesg; |
|||
mesg.MessageToolbarPane(); |
|||
|
|||
|
|||
// Manage main toolbal
|
|||
m_auimgr.AddPane( m_mainToolBar, |
|||
wxAuiPaneInfo( horiz ).Name( wxT ("m_mainToolBar" ) ).Top().Row( 0 ) ); |
|||
|
|||
wxSize minsize( 60, -1 ); |
|||
|
|||
// Manage the left window (list of pages)
|
|||
if( m_PageListWindow ) |
|||
m_auimgr.AddPane( m_PageListWindow, wxAuiPaneInfo( info ).Name( wxT( "m_PageList" ) ). |
|||
Left().Row( 0 )); |
|||
|
|||
// Manage the list of parameters)
|
|||
m_auimgr.AddPane( m_ParameterListWindow, |
|||
wxAuiPaneInfo( info ).Name( wxT( "m_ParameterList" ) ). |
|||
Left().Row( 1 ) ); |
|||
|
|||
// Manage the draw panel
|
|||
m_auimgr.AddPane( m_canvas, |
|||
wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).Centre() ); |
|||
|
|||
// Manage the message panel
|
|||
m_auimgr.AddPane( m_messagePanel, |
|||
wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer(10) ); |
|||
|
|||
/* Now the minimum windows are fixed, set library list
|
|||
* and component list of the previous values from last viewlib use |
|||
*/ |
|||
if( m_PageListWindow ) |
|||
{ |
|||
wxAuiPaneInfo& pane = m_auimgr.GetPane(m_PageListWindow); |
|||
pane.MinSize( wxSize(m_PageListSize.x, -1)); |
|||
} |
|||
wxAuiPaneInfo& pane = m_auimgr.GetPane(m_ParameterListWindow); |
|||
pane.MinSize(wxSize(m_ParameterListSize.x, -1)); |
|||
|
|||
m_auimgr.Update(); |
|||
|
|||
// Now Drawpanel is sized, we can use BestZoom to show the component (if any)
|
|||
#ifdef USE_WX_GRAPHICS_CONTEXT
|
|||
GetScreen()->SetZoom( BestZoom() ); |
|||
#else
|
|||
Zoom_Automatique( false ); |
|||
#endif
|
|||
|
|||
Show( true ); |
|||
} |
|||
|
|||
|
|||
FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME() |
|||
{ |
|||
if( m_Draw3DFrame ) |
|||
m_Draw3DFrame->Destroy(); |
|||
PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) GetParent(); |
|||
frame->m_ModuleViewerFrame = NULL; |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event ) |
|||
{ |
|||
SaveSettings(); |
|||
|
|||
if( m_Semaphore ) |
|||
{ |
|||
m_Semaphore->Post(); |
|||
MakeModal(false); |
|||
// This window will be destroyed by the calling function,
|
|||
// to avoid side effects
|
|||
} |
|||
else |
|||
{ |
|||
Destroy(); |
|||
} |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::OnSashDrag( wxSashEvent& event ) |
|||
{ |
|||
if( event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE ) |
|||
return; |
|||
|
|||
m_PageListSize.y = GetClientSize().y - m_MsgFrameHeight; |
|||
m_ParameterListSize.y = m_PageListSize.y; |
|||
|
|||
switch( event.GetId() ) |
|||
{ |
|||
case ID_FOOTPRINT_WIZARD_WINDOW: |
|||
if( m_PageListWindow ) |
|||
{ |
|||
wxAuiPaneInfo& pane = m_auimgr.GetPane( m_PageListWindow ); |
|||
m_PageListSize.x = event.GetDragRect().width; |
|||
pane.MinSize( m_PageListSize ); |
|||
m_auimgr.Update(); |
|||
} |
|||
break; |
|||
|
|||
case ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW: |
|||
{ |
|||
wxAuiPaneInfo& pane = m_auimgr.GetPane( m_ParameterListWindow ); |
|||
m_ParameterListSize.x = event.GetDragRect().width; |
|||
pane.MinSize( m_ParameterListSize ); |
|||
m_auimgr.Update(); |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv ) |
|||
{ |
|||
if( m_auimgr.GetManagedWindow() ) |
|||
m_auimgr.Update(); |
|||
|
|||
SizeEv.Skip(); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::OnSetRelativeOffset( wxCommandEvent& event ) |
|||
{ |
|||
GetScreen()->m_O_Curseur = GetScreen()->GetCrossHairPosition(); |
|||
UpdateStatusBar(); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ReCreatePageList() |
|||
{ |
|||
if( m_PageList == NULL ) |
|||
return; |
|||
|
|||
m_PageList->Clear(); |
|||
|
|||
m_PageList->Append(wxT("Pads")); |
|||
m_PageList->Append(wxT("Shield")); |
|||
|
|||
m_PageList->SetSelection( 0, true ); |
|||
|
|||
/*for( unsigned ii = 0; ii < g_LibraryNames.GetCount(); ii++ )
|
|||
{ |
|||
m_PageList->Append( g_LibraryNames[ii] ); |
|||
}*/ |
|||
|
|||
#if 0
|
|||
// Search for a previous selection:
|
|||
|
|||
int index = m_PageList->FindString( m_libraryName ); |
|||
|
|||
if( index != wxNOT_FOUND ) |
|||
{ |
|||
m_PageList->SetSelection( index, true ); |
|||
} |
|||
else |
|||
{ |
|||
/* If not found, clear current library selection because it can be
|
|||
* deleted after a config change. */ |
|||
m_libraryName = wxEmptyString; |
|||
m_footprintName = wxEmptyString; |
|||
} |
|||
#endif
|
|||
|
|||
ReCreateHToolbar(); |
|||
DisplayWizardInfos(); |
|||
m_canvas->Refresh(); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ReCreateParameterList() |
|||
{ |
|||
if( m_ParameterList == NULL ) |
|||
return; |
|||
|
|||
m_ParameterList->Clear(); |
|||
|
|||
wxArrayString fpList; |
|||
|
|||
m_ParameterList->Append( fpList ); |
|||
m_ParameterList->Append(wxT("N")); |
|||
m_ParameterList->Append(wxT("pitch")); |
|||
m_ParameterList->Append(wxT("width")); |
|||
m_ParameterList->Append(wxT("height")); |
|||
m_ParameterList->SetSelection( 0, true ); |
|||
|
|||
//m_ParameterList->SetSelection( index, true );
|
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event ) |
|||
{ |
|||
int ii = m_PageList->GetSelection(); |
|||
|
|||
if( ii < 0 ) |
|||
return; |
|||
|
|||
wxString name = m_PageList->GetString( ii ); |
|||
|
|||
printf("page=%d\n",ii); |
|||
|
|||
ReCreateParameterList(); |
|||
m_canvas->Refresh(); |
|||
DisplayWizardInfos(); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ClickOnParameterList( wxCommandEvent& event ) |
|||
{ |
|||
int ii = m_ParameterList->GetSelection(); |
|||
|
|||
if( ii < 0 ) |
|||
return; |
|||
|
|||
wxString name = m_ParameterList->GetString( ii ); |
|||
|
|||
SetCurItem( NULL ); |
|||
// Delete the current footprint
|
|||
GetBoard()->m_Modules.DeleteAll(); |
|||
DisplayWizardInfos(); |
|||
Zoom_Automatique( false ); |
|||
m_canvas->Refresh(); |
|||
} |
|||
|
|||
|
|||
#define PARTLIST_WIDTH_KEY wxT( "Partlist_width" )
|
|||
#define PARAMLIST_WIDTH_KEY wxT( "Paramlist_width" )
|
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::LoadSettings( ) |
|||
{ |
|||
wxConfig* cfg ; |
|||
|
|||
EDA_DRAW_FRAME::LoadSettings(); |
|||
|
|||
wxConfigPathChanger cpc( wxGetApp().GetSettings(), m_configPath ); |
|||
cfg = wxGetApp().GetSettings(); |
|||
|
|||
m_PageListSize.x = 150; // default width of libs list
|
|||
m_ParameterListSize.x = 150; // default width of component list
|
|||
|
|||
cfg->Read( PARTLIST_WIDTH_KEY , &m_PageListSize.x ); |
|||
cfg->Read( PARAMLIST_WIDTH_KEY, &m_ParameterListSize.x ); |
|||
|
|||
// Set parameters to a reasonable value.
|
|||
if ( m_PageListSize.x > m_FrameSize.x/2 ) |
|||
m_PageListSize.x = m_FrameSize.x/2; |
|||
|
|||
if ( m_ParameterListSize.x > m_FrameSize.x/2 ) |
|||
m_ParameterListSize.x = m_FrameSize.x/2; |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::SaveSettings() |
|||
{ |
|||
wxConfig* cfg; |
|||
|
|||
EDA_DRAW_FRAME::SaveSettings(); |
|||
|
|||
wxConfigPathChanger cpc( wxGetApp().GetSettings(), m_configPath ); |
|||
cfg = wxGetApp().GetSettings(); |
|||
|
|||
if ( m_PageListSize.x ) |
|||
cfg->Write( PARTLIST_WIDTH_KEY, m_PageListSize.x ); |
|||
|
|||
cfg->Write( PARAMLIST_WIDTH_KEY, m_ParameterListSize.x ); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event ) |
|||
{ |
|||
EDA_DRAW_FRAME::OnActivate( event ); |
|||
|
|||
// Ensure we do not have old selection:
|
|||
if( ! m_FrameIsActive ) |
|||
return; |
|||
|
|||
bool footprintWizardsChanged=false; |
|||
if (footprintWizardsChanged) |
|||
{ |
|||
// If we are here, the library list has changed, rebuild it
|
|||
ReCreatePageList(); |
|||
DisplayWizardInfos(); |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey ) |
|||
{ |
|||
wxRealPoint gridSize; |
|||
wxPoint oldpos; |
|||
PCB_SCREEN* screen = GetScreen(); |
|||
wxPoint pos = aPosition; |
|||
|
|||
wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); |
|||
cmd.SetEventObject( this ); |
|||
|
|||
pos = screen->GetNearestGridPosition( pos ); |
|||
oldpos = screen->GetCrossHairPosition(); |
|||
gridSize = screen->GetGridSize(); |
|||
|
|||
switch( aHotKey ) |
|||
{ |
|||
case WXK_F1: |
|||
cmd.SetId( ID_POPUP_ZOOM_IN ); |
|||
GetEventHandler()->ProcessEvent( cmd ); |
|||
break; |
|||
|
|||
case WXK_F2: |
|||
cmd.SetId( ID_POPUP_ZOOM_OUT ); |
|||
GetEventHandler()->ProcessEvent( cmd ); |
|||
break; |
|||
|
|||
case WXK_F3: |
|||
cmd.SetId( ID_ZOOM_REDRAW ); |
|||
GetEventHandler()->ProcessEvent( cmd ); |
|||
break; |
|||
|
|||
case WXK_F4: |
|||
cmd.SetId( ID_POPUP_ZOOM_CENTER ); |
|||
GetEventHandler()->ProcessEvent( cmd ); |
|||
break; |
|||
|
|||
case WXK_HOME: |
|||
cmd.SetId( ID_ZOOM_PAGE ); |
|||
GetEventHandler()->ProcessEvent( cmd ); |
|||
break; |
|||
|
|||
case ' ': |
|||
screen->m_O_Curseur = screen->GetCrossHairPosition(); |
|||
break; |
|||
|
|||
case WXK_NUMPAD8: /* cursor moved up */ |
|||
case WXK_UP: |
|||
pos.y -= KiROUND( gridSize.y ); |
|||
m_canvas->MoveCursor( pos ); |
|||
break; |
|||
|
|||
case WXK_NUMPAD2: /* cursor moved down */ |
|||
case WXK_DOWN: |
|||
pos.y += KiROUND( gridSize.y ); |
|||
m_canvas->MoveCursor( pos ); |
|||
break; |
|||
|
|||
case WXK_NUMPAD4: /* cursor moved left */ |
|||
case WXK_LEFT: |
|||
pos.x -= KiROUND( gridSize.x ); |
|||
m_canvas->MoveCursor( pos ); |
|||
break; |
|||
|
|||
case WXK_NUMPAD6: /* cursor moved right */ |
|||
case WXK_RIGHT: |
|||
pos.x += KiROUND( gridSize.x ); |
|||
m_canvas->MoveCursor( pos ); |
|||
break; |
|||
} |
|||
|
|||
screen->SetCrossHairPosition( pos ); |
|||
|
|||
if( oldpos != screen->GetCrossHairPosition() ) |
|||
{ |
|||
pos = screen->GetCrossHairPosition(); |
|||
screen->SetCrossHairPosition( oldpos ); |
|||
m_canvas->CrossHairOff( aDC ); |
|||
screen->SetCrossHairPosition( pos ); |
|||
m_canvas->CrossHairOn( aDC ); |
|||
|
|||
if( m_canvas->IsMouseCaptured() ) |
|||
{ |
|||
m_canvas->CallMouseCapture( aDC, aPosition, 0 ); |
|||
} |
|||
} |
|||
|
|||
UpdateStatusBar(); /* Display new cursor coordinates */ |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::Show3D_Frame( wxCommandEvent& event ) |
|||
{ |
|||
if( m_Draw3DFrame ) |
|||
{ |
|||
// Raising the window does not show the window on Windows if iconized.
|
|||
// This should work on any platform.
|
|||
if( m_Draw3DFrame->IsIconized() ) |
|||
m_Draw3DFrame->Iconize( false ); |
|||
|
|||
m_Draw3DFrame->Raise(); |
|||
|
|||
// Raising the window does not set the focus on Linux. This should work on any platform.
|
|||
if( wxWindow::FindFocus() != m_Draw3DFrame ) |
|||
m_Draw3DFrame->SetFocus(); |
|||
|
|||
return; |
|||
} |
|||
|
|||
m_Draw3DFrame = new EDA_3D_FRAME( this, wxEmptyString ); |
|||
Update3D_Frame( false ); |
|||
m_Draw3DFrame->Show( true ); |
|||
} |
|||
|
|||
/**
|
|||
* Function Update3D_Frame |
|||
* must be called after a footprint selection |
|||
* Updates the 3D view and 3D frame title. |
|||
*/ |
|||
void FOOTPRINT_WIZARD_FRAME::Update3D_Frame( bool aForceReloadFootprint ) |
|||
{ |
|||
if( m_Draw3DFrame == NULL ) |
|||
return; |
|||
|
|||
wxString frm3Dtitle; |
|||
frm3Dtitle.Printf( _( "ModView: 3D Viewer [%s]" ), GetChars( m_wizardName ) ); |
|||
m_Draw3DFrame->SetTitle( frm3Dtitle ); |
|||
|
|||
if( aForceReloadFootprint ) |
|||
{ |
|||
m_Draw3DFrame->ReloadRequest(); |
|||
// Force 3D screen refresh immediately
|
|||
if( GetBoard()->m_Modules ) |
|||
m_Draw3DFrame->NewDisplay(); |
|||
} |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar() |
|||
{ |
|||
wxString msg; |
|||
|
|||
if( m_mainToolBar == NULL ) |
|||
{ |
|||
m_mainToolBar = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, |
|||
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT ); |
|||
|
|||
// Set up toolbar
|
|||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, wxEmptyString, |
|||
KiBitmap( library_xpm ), |
|||
_( "Select wizard to use" ) ); |
|||
|
|||
m_mainToolBar->AddSeparator(); |
|||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_PREVIOUS, wxEmptyString, |
|||
KiBitmap( lib_previous_xpm ), |
|||
_( "Display previous page" ) ); |
|||
|
|||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_NEXT, wxEmptyString, |
|||
KiBitmap( lib_next_xpm ), |
|||
_( "Display next page" ) ); |
|||
|
|||
m_mainToolBar->AddSeparator(); |
|||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_SHOW_3D_VIEW, wxEmptyString, |
|||
KiBitmap( three_d_xpm ), |
|||
_( "Show footprint in 3D viewer" ) ); |
|||
|
|||
m_mainToolBar->AddSeparator(); |
|||
msg = AddHotkeyName( _( "Zoom in" ), g_Module_Editor_Hokeys_Descr, |
|||
HK_ZOOM_IN, IS_COMMENT ); |
|||
m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, |
|||
KiBitmap( zoom_in_xpm ), msg ); |
|||
|
|||
msg = AddHotkeyName( _( "Zoom out" ), g_Module_Editor_Hokeys_Descr, |
|||
HK_ZOOM_OUT, IS_COMMENT ); |
|||
m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, |
|||
KiBitmap( zoom_out_xpm ), msg ); |
|||
|
|||
msg = AddHotkeyName( _( "Redraw view" ), g_Module_Editor_Hokeys_Descr, |
|||
HK_ZOOM_REDRAW, IS_COMMENT ); |
|||
m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString, |
|||
KiBitmap( zoom_redraw_xpm ), msg ); |
|||
|
|||
msg = AddHotkeyName( _( "Zoom auto" ), g_Module_Editor_Hokeys_Descr, |
|||
HK_ZOOM_AUTO, IS_COMMENT ); |
|||
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, |
|||
KiBitmap( zoom_fit_in_page_xpm ), msg ); |
|||
#if 0
|
|||
if( m_Semaphore ) |
|||
{ |
|||
// The library browser is called from a "load component" command
|
|||
m_mainToolBar->AddSeparator(); |
|||
m_mainToolBar->AddTool( ID_FOOTPRINT_WIZARD_FOOTPRINT_EXPORT_TO_BOARD, |
|||
wxEmptyString, KiBitmap( export_footprint_names_xpm ), |
|||
_( "Insert footprint in board" ) ); |
|||
} |
|||
#endif
|
|||
// after adding the buttons to the toolbar, must call Realize() to
|
|||
// reflect the changes
|
|||
m_mainToolBar->Realize(); |
|||
} |
|||
|
|||
m_mainToolBar->Refresh(); |
|||
} |
|||
|
|||
|
|||
void FOOTPRINT_WIZARD_FRAME::ReCreateVToolbar() |
|||
{ |
|||
} |
|||
@ -0,0 +1,167 @@ |
|||
/* |
|||
* 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_ |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue