Commit 2153f4d1 authored by jean-pierre charras's avatar jean-pierre charras

Pcbnew: footprint placement file creation:

 * Added a dialog to select options: one or 2 files, units (mm or inch), and force INSERT option.
 * code cleaning
 * Modify corresponding  icon in menu to show a footprint, not a schematic component.
parent 74aecb3e
...@@ -8,77 +8,86 @@ ...@@ -8,77 +8,86 @@
static const unsigned char png[] = { static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 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, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x53, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4b, 0x48, 0x5c, 0xce, 0x00, 0x00, 0x04, 0xe4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x6d, 0x4c, 0x5b,
0x77, 0x14, 0xc6, 0x2d, 0x74, 0x21, 0x54, 0x89, 0x51, 0xc4, 0x62, 0x50, 0x2b, 0xa2, 0x68, 0xc0, 0x55, 0x18, 0xc7, 0x8b, 0x1f, 0x24, 0xe1, 0x03, 0x09, 0x1f, 0x74, 0x1a, 0x86, 0x63, 0x66, 0x95,
0xc4, 0x10, 0x24, 0xb4, 0xd4, 0x14, 0xa7, 0xd0, 0x85, 0x8b, 0x6e, 0xdc, 0xb4, 0x60, 0xdc, 0x48, 0x10, 0x42, 0x1b, 0x21, 0x82, 0xd1, 0x64, 0xbc, 0x68, 0x60, 0x81, 0x30, 0x40, 0xc8, 0x30, 0xbc,
0x71, 0x23, 0x18, 0x1b, 0xa1, 0x5d, 0xb8, 0x92, 0xba, 0x90, 0x11, 0x22, 0x14, 0x2c, 0x8a, 0x2d, 0xcb, 0xc6, 0x4a, 0x4b, 0x24, 0x04, 0x75, 0x2a, 0x2c, 0x82, 0x15, 0x37, 0x40, 0x03, 0x68, 0xc8,
0x3e, 0xd1, 0x85, 0x22, 0x5a, 0x15, 0x51, 0xd3, 0xf1, 0x51, 0x45, 0x47, 0xeb, 0x13, 0xe2, 0x18, 0x60, 0x6c, 0x82, 0x23, 0x6c, 0x83, 0xe1, 0x20, 0x31, 0xb0, 0xe2, 0xe2, 0x60, 0xbc, 0x15, 0xfc,
0xe3, 0x33, 0xbe, 0x67, 0xc6, 0xf7, 0x38, 0xea, 0xa8, 0x5f, 0xcf, 0xf7, 0x37, 0x57, 0xa6, 0xe3, 0x00, 0x92, 0x10, 0xf6, 0x09, 0x24, 0x8c, 0x77, 0x68, 0x81, 0x96, 0x97, 0x02, 0x05, 0xfe, 0x9e,
0xb5, 0x35, 0xd0, 0x76, 0xe0, 0x70, 0xaf, 0xd7, 0x99, 0xf3, 0x3b, 0xe7, 0x3b, 0x8f, 0xfb, 0xf7, 0xe7, 0xd0, 0x5b, 0x2e, 0x05, 0xa3, 0xd3, 0x78, 0x93, 0x5f, 0x6e, 0x4f, 0x4f, 0xfa, 0xfc, 0xee,
0x02, 0xe0, 0xf5, 0x7f, 0xd8, 0xe5, 0x4d, 0x5c, 0x5c, 0xdc, 0x37, 0xe9, 0xe9, 0xe9, 0xc6, 0x7f, 0x79, 0x9e, 0xe7, 0x9e, 0x53, 0x89, 0x44, 0x22, 0x39, 0xc6, 0x38, 0xfd, 0x3f, 0xe3, 0xcc, 0x90,
0xdb, 0x62, 0x62, 0x62, 0x52, 0xfe, 0x02, 0xca, 0xcd, 0xcd, 0xad, 0xdf, 0xda, 0xde, 0x86, 0xcd, 0xbc, 0x35, 0x3c, 0x3c, 0x3c, 0xa3, 0xd3, 0xe9, 0xcc, 0x3a, 0xbd, 0xde, 0xac, 0x27, 0x16, 0x17,
0x66, 0x83, 0xcd, 0x6e, 0x87, 0x7d, 0x6b, 0x1b, 0xfc, 0x7b, 0x7b, 0x67, 0x07, 0x3b, 0xbb, 0xbb, 0xcd, 0x8b, 0xc4, 0xd2, 0x12, 0x67, 0x49, 0x60, 0x79, 0xd9, 0xbc, 0x2c, 0xc6, 0x60, 0xe0, 0x18,
0xd8, 0xd5, 0x6c, 0x6f, 0x0f, 0x7b, 0xb4, 0xfd, 0x7d, 0x65, 0xfb, 0xb4, 0x83, 0x03, 0x65, 0x07, 0x2c, 0x4c, 0x4d, 0x4d, 0x59, 0x3f, 0x0b, 0x8c, 0x8f, 0x8f, 0xeb, 0x99, 0xe3, 0x1d, 0x2e, 0x7a,
0x1e, 0x76, 0x78, 0x78, 0x88, 0xec, 0xec, 0xec, 0x5f, 0xae, 0x80, 0xac, 0x36, 0x3b, 0x36, 0xad, 0x3a, 0x39, 0x69, 0x9c, 0x9d, 0x9b, 0xc7, 0xdc, 0xfc, 0x02, 0x16, 0x74, 0x3a, 0x64, 0x67, 0x67,
0x56, 0x58, 0x2f, 0x61, 0x5b, 0x17, 0x30, 0x4f, 0xa0, 0x1b, 0x6c, 0xdf, 0x03, 0xe6, 0x6e, 0x8e, 0x83, 0x49, 0xc1, 0x84, 0x60, 0x22, 0x0e, 0x93, 0x60, 0x99, 0x30, 0x18, 0x60, 0x20, 0x8c, 0x46,
0xeb, 0x40, 0x76, 0x71, 0xce, 0x8c, 0xec, 0xee, 0x10, 0x37, 0x40, 0x4f, 0x4f, 0x0f, 0x3a, 0x3a, 0x18, 0x05, 0x56, 0x56, 0x38, 0x72, 0xb9, 0x1c, 0xbd, 0xbd, 0xbd, 0x58, 0x61, 0x9f, 0x05, 0xd8,
0x3b, 0x31, 0x31, 0x31, 0x81, 0xee, 0xee, 0x6e, 0xec, 0xc8, 0xff, 0x4c, 0x5d, 0x5d, 0xb0, 0x4a, 0x03, 0x6f, 0x58, 0x45, 0x93, 0x4c, 0x34, 0xbf, 0xb0, 0x27, 0x21, 0xc1, 0x69, 0x3f, 0xbf, 0x83,
0x70, 0x9d, 0xf2, 0x7c, 0x74, 0x74, 0x14, 0x53, 0x53, 0x53, 0xea, 0x7e, 0x78, 0x78, 0x18, 0x4e, 0x02, 0xdb, 0xe0, 0x42, 0xa0, 0xd5, 0x55, 0xce, 0xaa, 0x85, 0x53, 0x52, 0x29, 0x5c, 0x5c, 0x5c,
0xa7, 0x53, 0x1f, 0x44, 0xc7, 0x04, 0xac, 0x6f, 0x6c, 0x5c, 0x00, 0xc4, 0x08, 0xd0, 0xa2, 0x9f, 0x70, 0xaf, 0xa1, 0x01, 0xab, 0x6b, 0x6b, 0x1c, 0x96, 0x09, 0x91, 0x68, 0x6a, 0xca, 0x58, 0x71,
0x9e, 0x9e, 0x46, 0x73, 0x73, 0x33, 0x06, 0x06, 0x07, 0x51, 0x59, 0x59, 0x89, 0x85, 0x85, 0x05, 0xfd, 0x3a, 0x14, 0x0a, 0x05, 0x14, 0x69, 0x69, 0x70, 0x76, 0x76, 0x46, 0x1a, 0xbb, 0xa7, 0x29,
0x94, 0x95, 0x95, 0xe1, 0x8f, 0x91, 0x11, 0x8c, 0x8f, 0x8f, 0xa3, 0xa9, 0xa9, 0x09, 0xab, 0xab, 0x95, 0x50, 0x0a, 0xa8, 0x54, 0x50, 0x89, 0x49, 0x4f, 0x47, 0xba, 0x0d, 0x4e, 0x4e, 0x4e, 0x60,
0xab, 0x2a, 0x90, 0x8a, 0x8a, 0x0a, 0x1c, 0x1d, 0x1d, 0xe9, 0x83, 0xe8, 0x9c, 0xb0, 0x84, 0x84, 0xf1, 0xe0, 0xe8, 0xe8, 0x88, 0xaa, 0xaa, 0x2a, 0xac, 0xaf, 0xaf, 0x53, 0x16, 0xf6, 0x45, 0x2c,
0x04, 0x54, 0x55, 0x55, 0x5d, 0x48, 0xf4, 0x56, 0x16, 0x6a, 0x4e, 0x68, 0x4d, 0x4d, 0x8d, 0x0a, 0xb7, 0xc6, 0xdf, 0x07, 0x07, 0xd1, 0xd6, 0xd6, 0x86, 0xf6, 0xf6, 0x76, 0x78, 0x79, 0x79, 0xe1,
0xa0, 0xb5, 0xb5, 0x15, 0x0d, 0x0d, 0x0d, 0x28, 0x2d, 0x2d, 0xc5, 0xd0, 0xd0, 0x10, 0xce, 0xce, 0x71, 0x47, 0x07, 0x3a, 0x3a, 0x3b, 0xd1, 0x29, 0xd0, 0xd5, 0x85, 0xae, 0xee, 0x6e, 0x74, 0x13,
0xce, 0x60, 0x36, 0x9b, 0x55, 0x5d, 0xda, 0xda, 0xda, 0x30, 0x3f, 0x3f, 0x8f, 0xe3, 0xe3, 0x63, 0x3d, 0x3d, 0xe8, 0x21, 0xb4, 0x5a, 0x68, 0x45, 0xb8, 0xba, 0xba, 0xc2, 0xce, 0xce, 0x0e, 0xee,
0x7d, 0x10, 0x25, 0x22, 0x2c, 0x32, 0x32, 0x12, 0x7e, 0x7e, 0x7e, 0x48, 0x4a, 0x4a, 0x52, 0x3f, 0xee, 0xee, 0x98, 0x98, 0x98, 0x80, 0x69, 0x63, 0xc3, 0x46, 0x34, 0x3d, 0x6d, 0x14, 0xd7, 0xc1,
0x38, 0x70, 0x38, 0x94, 0xde, 0x83, 0x92, 0xc9, 0xc0, 0xc0, 0x80, 0x8a, 0x94, 0x46, 0x47, 0xe5, 0x8f, 0xa5, 0x8e, 0x52, 0x24, 0xa4, 0x87, 0x52, 0xb0, 0xc6, 0xa0, 0x27, 0x5c, 0x37, 0x99, 0x60,
0xe5, 0xe5, 0xb0, 0x58, 0x2c, 0xa8, 0xaf, 0xaf, 0x47, 0x5d, 0x5d, 0x9d, 0x82, 0x56, 0x57, 0x57, 0x22, 0x58, 0x90, 0x0d, 0x0b, 0x9b, 0x9b, 0x9b, 0x1c, 0x4a, 0x9b, 0xaf, 0xaf, 0x2f, 0x16, 0x58,
0xa3, 0xbd, 0xbd, 0x1d, 0x2e, 0x97, 0x4b, 0x1f, 0xc4, 0x0c, 0x18, 0x35, 0x41, 0x66, 0xf3, 0x30, 0x19, 0x84, 0xef, 0x58, 0xca, 0xf7, 0x45, 0xd3, 0x4c, 0x64, 0xad, 0x05, 0x13, 0xf8, 0xfb, 0xfb,
0x9e, 0x3e, 0xcd, 0x46, 0x40, 0x40, 0x00, 0x4a, 0x4a, 0x4a, 0x94, 0xde, 0x2b, 0x2b, 0x2b, 0x2a, 0x73, 0x09, 0xe5, 0x5d, 0x10, 0x34, 0xff, 0x50, 0x80, 0x96, 0xab, 0x49, 0xb8, 0x95, 0x9b, 0xcc,
0x33, 0x02, 0x4e, 0x4e, 0x4e, 0x94, 0xad, 0xad, 0xad, 0xa9, 0x2b, 0x25, 0x63, 0xd3, 0x30, 0x5b, 0x83, 0xdf, 0xb9, 0xa2, 0xc4, 0x83, 0x82, 0x64, 0xfc, 0x5c, 0x9e, 0x87, 0xb9, 0xb9, 0x39, 0x34,
0xde, 0xaf, 0xaf, 0xaf, 0xe3, 0xf4, 0xf4, 0x54, 0x1f, 0x44, 0x99, 0x28, 0x47, 0x44, 0x44, 0x84, 0xe4, 0xc5, 0x22, 0x37, 0xd2, 0x1d, 0x1d, 0x8d, 0x55, 0xd8, 0xda, 0xda, 0xb2, 0x72, 0x48, 0x24,
0xe8, 0x6c, 0x91, 0x6e, 0x02, 0xfa, 0xfb, 0x27, 0xf1, 0xe8, 0xd1, 0xa7, 0x48, 0x4c, 0x4c, 0xc4, 0x48, 0xa8, 0xd0, 0x24, 0x12, 0xaf, 0x82, 0x56, 0xd0, 0xa2, 0x8e, 0xc6, 0xfa, 0xc7, 0x12, 0x68,
0xdc, 0xdc, 0xdc, 0x25, 0x80, 0xd1, 0x7a, 0x1a, 0x1d, 0x7b, 0x9a, 0x2e, 0x88, 0xd1, 0x66, 0x64, 0x52, 0x8f, 0xf3, 0x00, 0x0f, 0x54, 0x6e, 0x30, 0xd1, 0xf8, 0x8b, 0x10, 0x8c, 0x8c, 0x8c, 0x60,
0x64, 0x20, 0x34, 0x34, 0x54, 0x3a, 0xc8, 0x22, 0xd1, 0x41, 0x3a, 0x0a, 0x92, 0xc9, 0x39, 0x8c, 0x4c, 0x29, 0xe1, 0xe3, 0xb6, 0xf2, 0x4b, 0x30, 0x9b, 0xcd, 0x56, 0x0e, 0x8a, 0x66, 0x66, 0x8c,
0xc6, 0x9f, 0x11, 0x1c, 0x1c, 0x82, 0xc2, 0xc2, 0x42, 0x05, 0x1a, 0x1b, 0x1b, 0x53, 0x0d, 0xa0, 0x82, 0x84, 0x52, 0x45, 0xa2, 0x35, 0x4b, 0x9a, 0xa8, 0x6e, 0x09, 0x09, 0x09, 0xb8, 0x1c, 0x7a,
0xe7, 0x5c, 0x33, 0xd6, 0xed, 0x5a, 0x10, 0x7f, 0x1c, 0x16, 0x16, 0x26, 0xed, 0x69, 0x91, 0x56, 0x02, 0x95, 0xea, 0x0c, 0x7c, 0x1d, 0xf1, 0x2a, 0x92, 0x92, 0x92, 0x90, 0x7f, 0xf6, 0x15, 0xdc,
0x87, 0x48, 0x03, 0xbc, 0x79, 0x03, 0xc9, 0x06, 0x52, 0x23, 0x1b, 0x92, 0x93, 0xd3, 0x10, 0x12, 0xfa, 0x36, 0x07, 0x97, 0x43, 0x5c, 0x10, 0x15, 0x15, 0x85, 0x9a, 0x54, 0x39, 0x2a, 0x3e, 0x4f,
0x12, 0x82, 0x7b, 0xf7, 0xee, 0xe3, 0xee, 0xdd, 0xfb, 0xc8, 0xc9, 0xc9, 0x51, 0x0e, 0xaf, 0x33, 0xc4, 0xa5, 0x70, 0x19, 0x9f, 0x2f, 0x2c, 0x2c, 0xc4, 0xf6, 0xf6, 0x36, 0x95, 0x60, 0x5f, 0x34,
0x7d, 0x10, 0x8b, 0x2e, 0x16, 0x15, 0x15, 0x25, 0x4e, 0x2d, 0xa2, 0x33, 0xb0, 0xbc, 0x0c, 0x69, 0xc3, 0x44, 0x46, 0x51, 0x3d, 0xfc, 0x03, 0x02, 0xf6, 0x6a, 0xc1, 0x52, 0x54, 0x50, 0x50, 0x80,
0x08, 0xe0, 0xd5, 0x2b, 0xe0, 0xe5, 0x4b, 0x48, 0x20, 0xc0, 0xed, 0xdb, 0x81, 0x12, 0xc8, 0x92, 0xfa, 0xfa, 0x7a, 0xdc, 0xce, 0x7a, 0x17, 0x8f, 0x15, 0xc7, 0xd0, 0x90, 0xf0, 0x12, 0xfa, 0xfa,
0x74, 0xde, 0x2c, 0x7c, 0x7d, 0x7d, 0x95, 0x51, 0x85, 0xf3, 0xf3, 0xf3, 0x2b, 0xa6, 0x0b, 0x62, 0xfa, 0x70, 0x2f, 0xf9, 0x04, 0x1e, 0x5d, 0x7c, 0x19, 0x77, 0x33, 0xde, 0x46, 0x53, 0x53, 0x13,
0x67, 0xb1, 0x3d, 0x09, 0xea, 0xeb, 0xb3, 0x88, 0x64, 0x90, 0x59, 0x01, 0x66, 0x66, 0x20, 0x83, 0xfa, 0x2f, 0x3c, 0x8f, 0xdf, 0x54, 0x2f, 0xe0, 0x4e, 0x5e, 0x22, 0x9f, 0x8f, 0x8d, 0x8d, 0x3d,
0x08, 0xe9, 0xb8, 0x7d, 0xa4, 0xa4, 0x3c, 0x83, 0xbf, 0xbf, 0xbf, 0xd4, 0xcd, 0x80, 0x07, 0x0f, 0x5a, 0xc4, 0x6b, 0x42, 0xe9, 0x62, 0x2b, 0x09, 0x60, 0x22, 0xa1, 0xc8, 0xf4, 0x64, 0x24, 0xfa,
0x12, 0x25, 0xc3, 0x64, 0x35, 0x3f, 0xac, 0x6d, 0x47, 0x47, 0xc7, 0xcd, 0x40, 0x84, 0x14, 0x14, 0x3e, 0x23, 0x1c, 0x8d, 0xa9, 0xa7, 0x70, 0xf5, 0x9c, 0x07, 0x0f, 0x54, 0x18, 0xf7, 0x3a, 0x1f,
0x14, 0xa8, 0x66, 0xe8, 0xed, 0xb5, 0x60, 0x71, 0x11, 0x78, 0xfd, 0x1a, 0xd2, 0xbe, 0xc0, 0xf3, 0x97, 0x28, 0x83, 0xd1, 0xdc, 0xdc, 0x8c, 0x9b, 0x71, 0x27, 0xf9, 0xf8, 0x66, 0x5e, 0x1a, 0x9f,
0xe7, 0xf5, 0xb8, 0x73, 0xe7, 0x23, 0xa4, 0xa6, 0xa6, 0x2a, 0xa7, 0x46, 0xa3, 0x11, 0x79, 0x79, 0x8f, 0x8b, 0x8b, 0xc3, 0xce, 0xce, 0xce, 0x61, 0x91, 0xb5, 0xf0, 0x6c, 0x25, 0x24, 0x22, 0x09,
0x79, 0x0a, 0x32, 0xc3, 0x48, 0xde, 0x7e, 0x34, 0x80, 0xf6, 0xd1, 0x05, 0xb1, 0x85, 0xf3, 0xf3, 0xd5, 0x42, 0xad, 0x56, 0x23, 0x25, 0x25, 0x85, 0xb7, 0x2f, 0x05, 0xf8, 0xa7, 0x90, 0x68, 0x77,
0xf3, 0x95, 0x0c, 0x26, 0x93, 0x05, 0xb3, 0xb3, 0xc0, 0x8b, 0x17, 0x73, 0x78, 0xfc, 0x38, 0x09, 0x77, 0xd7, 0x46, 0x34, 0x3b, 0x6b, 0x14, 0x17, 0x9e, 0x44, 0x42, 0xd7, 0x94, 0x96, 0x96, 0x22,
0xd1, 0xd1, 0xd1, 0x28, 0x2a, 0x2a, 0x42, 0x4b, 0x4b, 0x8b, 0x3c, 0x9f, 0x55, 0xfa, 0x73, 0x55, 0x27, 0x27, 0x07, 0xc5, 0xc5, 0xc5, 0xff, 0x4a, 0xc4, 0x32, 0xb5, 0x2f, 0x9a, 0x25, 0x91, 0x45,
0xb1, 0xa5, 0x79, 0xcf, 0xe2, 0xb3, 0x49, 0xd8, 0xfa, 0x5a, 0xfb, 0xbb, 0xae, 0xeb, 0x3a, 0xa7, 0x42, 0x29, 0x13, 0x44, 0xd4, 0x35, 0x54, 0xa3, 0xa0, 0xa0, 0x20, 0xd4, 0xd6, 0xd6, 0x3e, 0xb3,
0x0c, 0x21, 0xd7, 0x4a, 0x78, 0x78, 0xb8, 0xe8, 0x3f, 0x8e, 0xac, 0xac, 0x1f, 0x70, 0xeb, 0x96, 0x88, 0xae, 0x43, 0x22, 0xbe, 0x1a, 0x4b, 0x5d, 0x02, 0x03, 0x03, 0xad, 0xed, 0x49, 0x35, 0x2a,
0x1f, 0xd2, 0xd2, 0xd2, 0xd0, 0xd8, 0xd8, 0x28, 0x72, 0xf6, 0xa9, 0x39, 0xd2, 0x22, 0xe6, 0x95, 0x2b, 0x2b, 0x7b, 0x26, 0x89, 0xb8, 0x19, 0x0c, 0xe2, 0xd4, 0x91, 0x48, 0x58, 0x8d, 0xad, 0xa8,
0x00, 0x06, 0x48, 0xe0, 0x86, 0xac, 0x2e, 0xce, 0x1a, 0x8d, 0xf3, 0xc5, 0x37, 0x40, 0x66, 0xd6, 0xa8, 0xa8, 0x88, 0x37, 0xc3, 0x77, 0x99, 0xef, 0xe1, 0xbe, 0xc2, 0x1d, 0x57, 0x62, 0x64, 0x7b,
0xb3, 0xab, 0x20, 0x6d, 0xe2, 0x59, 0xa3, 0xc0, 0xc0, 0x0f, 0x11, 0x1b, 0x1b, 0x8b, 0xe2, 0xe2, 0xcd, 0x10, 0xff, 0x06, 0x1f, 0x97, 0xa4, 0x87, 0xa0, 0xa5, 0xa5, 0x05, 0x37, 0xe2, 0xa5, 0x7c,
0x62, 0x95, 0x05, 0x37, 0x04, 0x23, 0x77, 0x87, 0x70, 0x76, 0xb8, 0x07, 0xe9, 0x94, 0x33, 0xc6, 0x7c, 0xf3, 0x4b, 0x15, 0x9f, 0x8f, 0x89, 0x89, 0xa1, 0x0d, 0x15, 0xf3, 0x3a, 0xdd, 0x61, 0x91,
0x85, 0xca, 0x3d, 0xc7, 0xed, 0xd0, 0xd7, 0xdf, 0x0f, 0x53, 0x4f, 0xef, 0x61, 0xdc, 0xc3, 0x87, 0xd0, 0x00, 0x82, 0x88, 0x9e, 0x48, 0x10, 0x51, 0x7b, 0x3f, 0x4a, 0x3d, 0xd8, 0xde, 0x0f, 0x2f,
0x5f, 0xeb, 0x82, 0x98, 0x76, 0x7c, 0x7c, 0x3c, 0x32, 0x33, 0x33, 0x55, 0x2d, 0xb8, 0x72, 0xd8, 0x1c, 0x6c, 0x6f, 0x6d, 0xda, 0x7e, 0x7b, 0x47, 0x47, 0x47, 0x63, 0xf8, 0xc9, 0x13, 0x74, 0x6a,
0x89, 0x1a, 0x44, 0x03, 0x31, 0x13, 0xbe, 0x1e, 0x18, 0xfd, 0x88, 0x2c, 0x55, 0x6e, 0x6b, 0xd6, 0xb5, 0x74, 0x1e, 0xbd, 0x69, 0x15, 0x51, 0x8b, 0x7a, 0x7a, 0x7a, 0xc2, 0xc7, 0xc7, 0x87, 0xef,
0x8a, 0xdb, 0xdf, 0xe9, 0x3c, 0x84, 0x79, 0x68, 0xe8, 0x54, 0x20, 0xc9, 0x57, 0xde, 0xb0, 0x04, 0xbe, 0x74, 0x97, 0xc9, 0x64, 0x28, 0x2f, 0x2f, 0xb7, 0xbc, 0xb0, 0xae, 0xa8, 0xfc, 0x2a, 0x13,
0x69, 0xfa, 0x72, 0xed, 0x9b, 0x4c, 0x26, 0x69, 0x86, 0xc5, 0xcb, 0xc1, 0xf3, 0xcc, 0x86, 0x35, 0xf9, 0x11, 0x27, 0x91, 0x98, 0x98, 0x08, 0x75, 0x98, 0x0b, 0x6a, 0x4a, 0x72, 0x91, 0x73, 0xe6,
0xd8, 0xdc, 0xdc, 0x54, 0xce, 0xd9, 0x10, 0xda, 0x77, 0x1c, 0x8e, 0x03, 0xfc, 0xd6, 0x65, 0x72, 0x38, 0x42, 0x43, 0x43, 0x51, 0x7d, 0x5e, 0x86, 0x6b, 0x9f, 0x25, 0x21, 0xe3, 0xcc, 0x6b, 0x88,
0xc5, 0x7f, 0x1c, 0xff, 0xb9, 0xee, 0xab, 0xdc, 0x1d, 0x44, 0x27, 0xd4, 0xdd, 0x7d, 0xc2, 0xdd, 0x8c, 0x8c, 0x44, 0x66, 0x66, 0x26, 0x3a, 0xba, 0xba, 0x36, 0x3d, 0x3c, 0x3c, 0x62, 0x58, 0xa9,
0x41, 0x17, 0x0e, 0x1d, 0x32, 0x63, 0xcb, 0x98, 0x9c, 0x9c, 0x44, 0x6d, 0x6d, 0xad, 0x7a, 0xc6, 0x24, 0x56, 0x11, 0xa5, 0x8d, 0xde, 0x68, 0x07, 0x07, 0x07, 0xbe, 0xd5, 0xd3, 0x9d, 0x8e, 0x03,
0x3d, 0xd7, 0xd4, 0xfc, 0xeb, 0x89, 0xe1, 0x0b, 0xc3, 0x27, 0xd7, 0x9e, 0x19, 0x3c, 0x41, 0xee, 0x7a, 0x17, 0x08, 0x4d, 0xfe, 0x39, 0x18, 0xb3, 0x24, 0x68, 0xbd, 0xe8, 0xc2, 0xc7, 0xb4, 0x05,
0xbb, 0x4b, 0x4f, 0x36, 0xd6, 0x86, 0x19, 0x73, 0x15, 0x51, 0x62, 0x4a, 0xf6, 0xe3, 0x4f, 0x45, 0xad, 0xb0, 0x71, 0xe3, 0x27, 0x01, 0xa8, 0xae, 0xae, 0xc6, 0x1f, 0x6c, 0x0b, 0xa2, 0x71, 0x7b,
0x5b, 0x06, 0x83, 0x21, 0xea, 0x6f, 0x0f, 0x27, 0xef, 0x0a, 0x62, 0x7d, 0x96, 0x96, 0x96, 0x54, 0xc5, 0xa7, 0xac, 0x01, 0x8c, 0xf8, 0xe5, 0xd7, 0x87, 0x9b, 0x6e, 0x6e, 0x6e, 0x81, 0x24, 0x39,
0x6d, 0x7a, 0x7a, 0x7f, 0xc7, 0xb7, 0xdf, 0x7f, 0x37, 0x1e, 0x14, 0x14, 0xf4, 0xc1, 0x3f, 0x9e, 0x24, 0xa2, 0xb4, 0x85, 0x87, 0x87, 0xc3, 0xde, 0xde, 0x1e, 0x61, 0x61, 0x61, 0x3c, 0x75, 0x82,
0x82, 0x08, 0xf2, 0xdc, 0xc2, 0xee, 0x92, 0xb9, 0x83, 0x78, 0x3d, 0x92, 0x80, 0x36, 0xac, 0x36, 0xa8, 0xf5, 0xc7, 0x6f, 0xd0, 0x5a, 0x94, 0x82, 0x5a, 0xf5, 0x79, 0xfe, 0x7d, 0x6d, 0xbe, 0x02,
0xb4, 0x75, 0x9a, 0x5c, 0x5f, 0x3d, 0x79, 0x52, 0xe9, 0xe5, 0xe5, 0xf5, 0xfe, 0x8d, 0x8e, 0x5b, 0x8d, 0x79, 0xef, 0xa3, 0x3a, 0xff, 0x43, 0x2e, 0xba, 0xaf, 0x8e, 0x87, 0xa6, 0xf0, 0x03, 0xb4,
0xde, 0xde, 0xde, 0x9f, 0x05, 0x07, 0x07, 0x7f, 0xf9, 0xae, 0xe6, 0xe3, 0xe3, 0x93, 0x20, 0x90, 0x35, 0xdc, 0xc0, 0x4f, 0x4d, 0x8d, 0x26, 0x6f, 0x6f, 0x6f, 0x2f, 0x41, 0x72, 0xa4, 0x88, 0x6a,
0xf7, 0x6e, 0x7c, 0xae, 0xfb, 0xaf, 0xed, 0x4f, 0x3b, 0x6c, 0x44, 0xed, 0xb6, 0xad, 0x23, 0x6f, 0x45, 0x47, 0x39, 0xdd, 0xc5, 0x22, 0x7a, 0x27, 0x08, 0xba, 0xa8, 0x7e, 0xec, 0x88, 0xc6, 0xd8,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 0xd8, 0x18, 0x06, 0x06, 0x06, 0x50, 0x57, 0x57, 0xc7, 0x7f, 0xcb, 0xe2, 0xe0, 0x5a, 0x65, 0xc5,
0x72, 0x70, 0x70, 0x80, 0x9b, 0x58, 0x72, 0x50, 0x64, 0x69, 0x04, 0xa1, 0xdb, 0x48, 0x62, 0x2b,
0xa2, 0x8b, 0xee, 0x34, 0xcf, 0xfe, 0xc4, 0x60, 0x74, 0x74, 0x14, 0xfd, 0xfd, 0xfd, 0xd0, 0x68,
0x34, 0x5c, 0x9a, 0xf1, 0x51, 0xd6, 0xa0, 0x54, 0x2a, 0x75, 0xb4, 0x95, 0x1c, 0xb9, 0x22, 0x41,
0x76, 0x94, 0x48, 0xbc, 0x22, 0x6a, 0x5d, 0x0a, 0x4e, 0xbb, 0x3b, 0x3b, 0x8d, 0x77, 0x42, 0x23,
0xce, 0x56, 0xb0, 0x58, 0xcf, 0x1d, 0x25, 0xb1, 0x8a, 0x86, 0x86, 0x86, 0xa6, 0xe8, 0xdc, 0xa0,
0x7d, 0x49, 0x80, 0xde, 0x68, 0x31, 0x6c, 0x2f, 0xb4, 0x42, 0xf3, 0xf3, 0x3a, 0xfd, 0xc6, 0xe8,
0xf8, 0xd3, 0x8d, 0x9a, 0xbb, 0xf5, 0x7a, 0xb9, 0xdc, 0x2b, 0xe1, 0xaf, 0x04, 0x62, 0xd1, 0x8b,
0x24, 0xfb, 0x0f, 0x48, 0xff, 0x4e, 0x42, 0xfc, 0x09, 0x7a, 0x54, 0x50, 0xa3, 0xa0, 0x06, 0xf6,
0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
}; };
const BITMAP_OPAQUE post_compo_xpm[1] = {{ png, sizeof( png ), "post_compo_xpm" }}; const BITMAP_OPAQUE post_compo_xpm[1] = {{ png, sizeof( png ), "post_compo_xpm" }};
......
...@@ -8,76 +8,86 @@ ...@@ -8,76 +8,86 @@
static const unsigned char png[] = { static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 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, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x44, 0x49, 0x44, 0x41, 0x54, 0x48, 0x4b, 0xbd, 0x95, 0x49, 0x4c, 0x9c, 0xce, 0x00, 0x00, 0x04, 0xe5, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x59, 0x48, 0xdc,
0x65, 0x18, 0xc7, 0x07, 0x22, 0x06, 0x1d, 0x20, 0x40, 0x42, 0x58, 0x84, 0x70, 0x00, 0x09, 0x54, 0x57, 0x14, 0x87, 0xc7, 0x14, 0x69, 0x68, 0x10, 0x97, 0x5a, 0xf3, 0xa2, 0xa2, 0x3e, 0x89, 0x7d,
0x9a, 0x12, 0x6a, 0x0f, 0xd2, 0x18, 0x61, 0x94, 0x4d, 0xc4, 0xcb, 0x84, 0x82, 0x04, 0x08, 0x3b, 0x48, 0xc4, 0xda, 0x4a, 0x3a, 0xc1, 0xb8, 0x90, 0x2e, 0xc4, 0x25, 0xa9, 0x4b, 0x8b, 0xfa, 0xe0,
0x27, 0x30, 0x2a, 0x42, 0x49, 0x43, 0x68, 0xe8, 0x91, 0x43, 0x0f, 0x26, 0x1a, 0x8a, 0xf5, 0xc2, 0x43, 0xfb, 0xa2, 0xa5, 0x90, 0x4c, 0xd4, 0xd1, 0x5a, 0xf4, 0x49, 0x5c, 0xe2, 0x83, 0xa0, 0x42,
0x05, 0x0e, 0x96, 0x04, 0x3d, 0x48, 0x62, 0xc0, 0x69, 0xb5, 0x24, 0x0e, 0x05, 0x84, 0x03, 0x08, 0x1a, 0xd7, 0x8a, 0x2d, 0x88, 0xf5, 0x41, 0xb4, 0xb6, 0x9a, 0xb8, 0x44, 0x6b, 0x35, 0x71, 0x89,
0x0e, 0x3b, 0x61, 0x99, 0x85, 0x6d, 0x16, 0x60, 0x80, 0xbf, 0xef, 0xf3, 0x74, 0x5e, 0xfa, 0xcd, 0x62, 0x46, 0x8d, 0x71, 0xaf, 0xcb, 0x8c, 0xdb, 0xa8, 0xa3, 0xe3, 0xfa, 0xeb, 0x39, 0x37, 0xf3,
0xf0, 0xd1, 0xc4, 0x44, 0x25, 0xf9, 0xe7, 0x5b, 0xf8, 0xe6, 0xf9, 0x3d, 0xfb, 0xab, 0x01, 0xa0, 0x9f, 0xcc, 0x8c, 0x5a, 0x02, 0xa5, 0x03, 0x1f, 0xfa, 0xdf, 0xee, 0x77, 0xef, 0x39, 0xe7, 0x9e,
0xf9, 0x3f, 0x74, 0x7e, 0x93, 0x96, 0x96, 0x56, 0xd7, 0xd0, 0xd0, 0xd0, 0xf5, 0x6f, 0x2b, 0x25, 0x2b, 0x93, 0xc9, 0x64, 0x6f, 0x13, 0xbe, 0xff, 0x33, 0x2e, 0x84, 0xec, 0xdd, 0xf2, 0xf2, 0xf2,
0x25, 0xa5, 0xcc, 0x0b, 0xd4, 0xd9, 0xd9, 0xf9, 0xbd, 0x6d, 0x67, 0x07, 0x16, 0x8b, 0x05, 0x16, 0xa7, 0x4b, 0x6a, 0xb5, 0x7e, 0x99, 0x50, 0xab, 0x35, 0x7a, 0x8d, 0x86, 0x58, 0x59, 0x11, 0xac,
0xab, 0x15, 0x56, 0xdb, 0x0e, 0xe8, 0x79, 0x67, 0x77, 0x17, 0xbb, 0x7b, 0x7b, 0xd8, 0x93, 0xda, 0x30, 0xab, 0xab, 0x82, 0x55, 0x4b, 0xd6, 0xd6, 0x8c, 0xac, 0x9d, 0x01, 0x7d, 0xaf, 0x23, 0x47,
0xdf, 0xc7, 0x3e, 0xe9, 0xe0, 0x80, 0x75, 0x40, 0xb2, 0xdb, 0x59, 0xb3, 0xb3, 0xb3, 0xfc, 0x6c, 0x94, 0x10, 0x35, 0x34, 0x34, 0xa8, 0x96, 0x96, 0x97, 0x41, 0x22, 0xa8, 0x35, 0x1a, 0x34, 0xb7,
0x17, 0xf7, 0x24, 0xa7, 0xd3, 0x89, 0xe6, 0xe6, 0xe6, 0xef, 0x2e, 0x80, 0xcc, 0x16, 0x2b, 0xb6, 0xb4, 0x40, 0x35, 0x3a, 0x0a, 0x1a, 0x00, 0x6b, 0xcc, 0xfa, 0x3a, 0xd6, 0x37, 0x36, 0xb0, 0xc1,
0xcd, 0x66, 0x98, 0x05, 0xac, 0xa5, 0xb5, 0x15, 0x7f, 0x99, 0x4c, 0xcf, 0x61, 0xbe, 0x40, 0x05, 0x68, 0xb5, 0xd0, 0x32, 0x9b, 0x9b, 0x82, 0x4d, 0x66, 0x6b, 0x4b, 0x30, 0x32, 0x32, 0x82, 0xc4,
0x8c, 0x41, 0x1e, 0xd8, 0xed, 0xb6, 0x36, 0x64, 0x66, 0x66, 0xf2, 0xef, 0xe9, 0xd9, 0x71, 0x19, 0xc4, 0x44, 0x71, 0x6f, 0xcb, 0x70, 0x4f, 0xbf, 0xb7, 0x07, 0x33, 0x11, 0x0b, 0x68, 0x05, 0xa0,
0xc8, 0x2a, 0x22, 0xa1, 0x88, 0xe8, 0x5a, 0x59, 0x59, 0x89, 0x3f, 0xe7, 0xe6, 0xbc, 0x00, 0x5e, 0x99, 0x43, 0x71, 0xf7, 0x2e, 0x7e, 0x6b, 0x6a, 0x3a, 0x29, 0x30, 0x19, 0x78, 0x4b, 0x62, 0x7b,
0xc6, 0x3d, 0x5e, 0xdb, 0x1d, 0x0e, 0x38, 0x3c, 0x12, 0x46, 0xe1, 0xef, 0xef, 0x8f, 0xf4, 0xf4, 0x1b, 0xdb, 0x06, 0x58, 0x64, 0x67, 0x67, 0x87, 0xc0, 0xc0, 0x40, 0x31, 0xe1, 0x6d, 0x9d, 0x0e,
0x74, 0x2c, 0x2f, 0x2f, 0xc3, 0xe5, 0x72, 0xa9, 0x83, 0x26, 0x26, 0x27, 0x91, 0x93, 0x93, 0xc3, 0x7b, 0x96, 0xa2, 0xa1, 0xe1, 0x61, 0xfc, 0xf8, 0xe0, 0x01, 0x1e, 0x94, 0x94, 0x20, 0x24, 0x24,
0x8a, 0x8d, 0x8b, 0x43, 0x56, 0x56, 0x16, 0x72, 0x73, 0x73, 0x5f, 0x28, 0x2f, 0x0f, 0x79, 0x6a, 0x04, 0xca, 0xd4, 0x54, 0x94, 0x96, 0x96, 0xa2, 0xb4, 0xac, 0x0c, 0x65, 0x06, 0x28, 0xc4, 0x28,
0xca, 0xcf, 0x47, 0xbe, 0x50, 0x42, 0x42, 0x82, 0xb0, 0xa8, 0x81, 0x9f, 0x9f, 0x1f, 0x0a, 0x0b, 0xaf, 0xa8, 0x40, 0x85, 0x25, 0x95, 0x95, 0xa8, 0x24, 0xf2, 0xf3, 0xf3, 0x61, 0x6b, 0x6b, 0x0b,
0x0b, 0x71, 0x78, 0x78, 0xa8, 0x0e, 0x22, 0xef, 0x65, 0x5d, 0xaa, 0xaa, 0xaa, 0x38, 0x75, 0x1c, 0x2b, 0x2b, 0x2b, 0x78, 0x7a, 0x7a, 0x62, 0x62, 0x62, 0x02, 0xfb, 0xfb, 0xfb, 0xe6, 0xa2, 0xbe,
0x81, 0xc7, 0x7b, 0xf6, 0x5c, 0xa4, 0x83, 0x72, 0x4f, 0xde, 0x92, 0xc8, 0x98, 0x54, 0x4b, 0x4b, 0xfe, 0x7e, 0x64, 0x67, 0x67, 0x23, 0x3b, 0x27, 0x07, 0xc1, 0xc1, 0xc1, 0x48, 0x48, 0x48, 0x40,
0x0b, 0x02, 0x02, 0x02, 0x90, 0x9d, 0x9d, 0xcd, 0x51, 0x1f, 0x1d, 0x1d, 0xa9, 0x83, 0x28, 0x45, 0x6e, 0x5e, 0x1e, 0xf2, 0x24, 0xee, 0xdd, 0xc3, 0x3d, 0x09, 0x1a, 0x30, 0xff, 0x14, 0xbe, 0x4f,
0x32, 0x55, 0xd5, 0xd5, 0xd5, 0x58, 0x58, 0x58, 0x78, 0x91, 0x1e, 0x05, 0x80, 0x8c, 0x76, 0x74, 0x4f, 0x87, 0x8d, 0x8d, 0x0d, 0x0f, 0x0c, 0x0f, 0x0f, 0x0f, 0x4c, 0xbc, 0x7c, 0x89, 0x83, 0x83,
0x74, 0xb0, 0x21, 0xd2, 0xf1, 0xf1, 0x31, 0xab, 0xbd, 0xbd, 0x1d, 0x7a, 0xbd, 0x9e, 0xff, 0x4f, 0x03, 0x73, 0x11, 0xe7, 0x62, 0x9d, 0x42, 0xc5, 0x61, 0x4a, 0x4a, 0x4a, 0xc2, 0x1f, 0xcd, 0xcd,
0xcf, 0x6e, 0xb7, 0x5b, 0x1d, 0x44, 0x45, 0x96, 0xb5, 0x20, 0xd0, 0xe2, 0xe2, 0x22, 0x47, 0xa1, 0xaf, 0x42, 0x64, 0x08, 0x8b, 0x8e, 0xc2, 0xa0, 0xdb, 0xd9, 0xc1, 0x0e, 0xc1, 0xd7, 0xfc, 0xae,
0x04, 0x90, 0x61, 0x6a, 0x8e, 0x82, 0x82, 0x02, 0x7e, 0x2f, 0x0d, 0x92, 0xa8, 0x2e, 0xf2, 0x9e, 0x5e, 0xaf, 0x17, 0x70, 0x78, 0x98, 0xf1, 0xf1, 0x71, 0xd8, 0xdb, 0xdb, 0xc3, 0xd7, 0xd7, 0x17,
0x74, 0x72, 0x72, 0xa2, 0x0e, 0xe2, 0x96, 0x15, 0x10, 0x0a, 0xbb, 0xa6, 0xa6, 0x06, 0x4b, 0x4b, 0xcb, 0x94, 0x73, 0xbe, 0x77, 0x78, 0x78, 0x68, 0x2e, 0x92, 0x24, 0x9c, 0xe8, 0xe4, 0xe4, 0x64,
0x4b, 0x5e, 0x90, 0xe1, 0xe1, 0x61, 0xd4, 0xd7, 0xd7, 0xa3, 0xa4, 0xa4, 0x04, 0x37, 0x6f, 0xbe, 0xb4, 0x50, 0x41, 0x58, 0x0a, 0x76, 0x77, 0x77, 0xc5, 0xc0, 0xfd, 0xb4, 0xfa, 0x3b, 0x77, 0xee,
0x8d, 0xae, 0x2e, 0x3d, 0xee, 0xde, 0xfd, 0x12, 0xab, 0xab, 0xab, 0xe7, 0x86, 0x7d, 0xa5, 0x0a, 0x88, 0x81, 0x38, 0x34, 0x12, 0x2f, 0x5e, 0xbc, 0x40, 0x50, 0x50, 0x90, 0xc8, 0xa3, 0x74, 0xef,
0xa2, 0x34, 0xc9, 0x39, 0x20, 0xd0, 0xf2, 0xca, 0x0a, 0x5c, 0x9e, 0x28, 0xfa, 0xfb, 0xfb, 0x51, 0x84, 0x48, 0x92, 0xf0, 0x4b, 0x2c, 0x7a, 0xf8, 0xf0, 0xa1, 0x90, 0x98, 0x0a, 0x98, 0xc5, 0xc5,
0x5a, 0x5a, 0x8a, 0xf8, 0xf8, 0x78, 0x24, 0x25, 0x25, 0xe1, 0xd6, 0xad, 0x0f, 0x30, 0x3d, 0xad, 0x45, 0x91, 0xab, 0x9b, 0x37, 0x6f, 0x62, 0x6c, 0x6c, 0x4c, 0x0c, 0xc6, 0xe1, 0x61, 0xf8, 0x5d,
0x11, 0xb3, 0xf3, 0x1a, 0xee, 0xdd, 0x2b, 0xc6, 0xfc, 0xfc, 0xfc, 0x05, 0xc8, 0xe9, 0xe9, 0xe9, 0x96, 0x4b, 0xd7, 0xcc, 0xd1, 0xd1, 0xd1, 0x6b, 0x51, 0x63, 0x63, 0xa3, 0x4a, 0x92, 0x70, 0x25,
0xe5, 0x20, 0x59, 0xf4, 0x9a, 0xda, 0x5a, 0xf6, 0x94, 0x20, 0x54, 0x2b, 0x02, 0x87, 0x84, 0x84, 0xa5, 0xa4, 0xa4, 0x08, 0x91, 0xa9, 0x64, 0x7e, 0x7e, 0x1e, 0xa9, 0x54, 0x20, 0xd1, 0xd1, 0xd1,
0x70, 0x57, 0xc5, 0x89, 0x8e, 0x24, 0xd0, 0xc4, 0x84, 0x06, 0x06, 0x83, 0x46, 0xa4, 0xec, 0x55, 0x88, 0x89, 0x89, 0x41, 0x5c, 0xdc, 0x27, 0x54, 0x20, 0x9f, 0x53, 0x39, 0x7f, 0x85, 0x47, 0x8f,
0xb4, 0xb5, 0xd5, 0xb3, 0x61, 0x5f, 0xa9, 0x83, 0x3c, 0xf3, 0x40, 0xe9, 0xaa, 0x15, 0xa0, 0xb5, 0x1e, 0x89, 0x41, 0x79, 0xf6, 0x96, 0x9c, 0x10, 0x49, 0x12, 0x0e, 0x17, 0x8b, 0xf8, 0x63, 0x49,
0xb5, 0x35, 0xae, 0x41, 0x4f, 0x4f, 0x0f, 0x0f, 0x62, 0x50, 0x50, 0x10, 0x2b, 0x31, 0x31, 0x91, 0xc2, 0xf1, 0x8e, 0x8d, 0x8d, 0x15, 0xb1, 0xbf, 0x78, 0xf1, 0x22, 0xae, 0x5f, 0xbf, 0x8e, 0xdb,
0x41, 0x33, 0x33, 0x1a, 0x3c, 0x7b, 0x46, 0x51, 0x69, 0xd0, 0xdb, 0xfb, 0x11, 0x3b, 0x74, 0x76, 0xb7, 0x6f, 0x60, 0x60, 0x40, 0x86, 0xd1, 0xd1, 0x73, 0xb8, 0x7f, 0xff, 0x06, 0xea, 0xea, 0xea,
0x76, 0xe6, 0x25, 0x55, 0x90, 0xb2, 0xb3, 0x08, 0x64, 0x30, 0x18, 0x50, 0x51, 0x51, 0x81, 0xd4, 0xde, 0x4c, 0x24, 0x49, 0x38, 0x5c, 0x4a, 0xa5, 0x12, 0xad, 0xad, 0xad, 0xc6, 0x44, 0x73, 0x71,
0xd4, 0x54, 0x5c, 0xb9, 0x92, 0x24, 0xae, 0xc9, 0xb8, 0x7a, 0x35, 0x05, 0xd7, 0xae, 0xbd, 0x85, 0x5c, 0xba, 0x74, 0x49, 0x54, 0x13, 0x13, 0x10, 0x10, 0x20, 0x44, 0x4f, 0x9f, 0xca, 0xd0, 0xde,
0xd8, 0xd8, 0x37, 0x50, 0x54, 0xf4, 0xa1, 0x00, 0x16, 0xb0, 0xf2, 0xf2, 0x74, 0x3c, 0x7f, 0x34, 0x2e, 0xa3, 0xdc, 0xc8, 0x90, 0x9e, 0xfe, 0x25, 0x16, 0x16, 0x16, 0xc4, 0xc0, 0xa6, 0x1c, 0x1f,
0xe8, 0xbb, 0xa2, 0x73, 0x5f, 0x0a, 0x22, 0x88, 0xd3, 0x53, 0xf8, 0xba, 0xba, 0x3a, 0x8e, 0x88, 0x1f, 0x9b, 0x8b, 0x24, 0x09, 0x87, 0x8b, 0x45, 0x6d, 0x6d, 0x6d, 0x42, 0xc2, 0x13, 0x88, 0x8b,
0x8a, 0xdc, 0xdd, 0xdd, 0x2d, 0xbc, 0x7e, 0x93, 0xbd, 0x1f, 0x1b, 0xd3, 0xc0, 0x64, 0xd2, 0xf2, 0x8b, 0x83, 0x83, 0x83, 0x03, 0x2e, 0x5c, 0xb8, 0x20, 0x90, 0x56, 0x34, 0x3c, 0x2c, 0x43, 0x6f,
0x80, 0x46, 0x44, 0x44, 0x20, 0x38, 0x38, 0x18, 0x61, 0x61, 0x61, 0x0c, 0x30, 0x89, 0xb9, 0x93, 0xaf, 0x0c, 0x43, 0x43, 0xcc, 0x47, 0xa8, 0xaa, 0xaa, 0x12, 0x03, 0x5b, 0x62, 0x2e, 0x32, 0x49,
0x00, 0xf9, 0xa7, 0x0a, 0x92, 0x43, 0x48, 0x75, 0x21, 0xd0, 0xfa, 0xfa, 0x3a, 0x83, 0xa8, 0xd0, 0x3c, 0xe7, 0x82, 0x73, 0x14, 0x1e, 0x1e, 0x0e, 0x7f, 0x7f, 0x7f, 0x38, 0x39, 0x39, 0xc1, 0xd5,
0xf7, 0xef, 0x17, 0x61, 0x72, 0xf2, 0x79, 0x4d, 0xa8, 0x01, 0x08, 0xa4, 0xd5, 0x6a, 0xcf, 0x6b, 0xd5, 0x15, 0x6e, 0x6e, 0x6e, 0x70, 0x77, 0x77, 0x17, 0xff, 0x7b, 0x78, 0xb8, 0xd1, 0x73, 0x7f,
0xd6, 0xd8, 0xd8, 0xc8, 0x69, 0x56, 0xce, 0x96, 0xfb, 0xb2, 0xae, 0xa3, 0x0e, 0x93, 0xb3, 0xa2, 0x2a, 0x8a, 0x6b, 0x82, 0xf0, 0xf0, 0x6b, 0xf0, 0xf2, 0xf2, 0xc2, 0xad, 0x5b, 0xb7, 0x50, 0x42,
0x04, 0x51, 0x07, 0x3d, 0x7c, 0xf8, 0x2d, 0x1e, 0x3d, 0xd2, 0x31, 0x6c, 0x6e, 0xee, 0x75, 0x06, 0x9b, 0xfe, 0x4c, 0x91, 0x58, 0x8d, 0x21, 0x27, 0x2c, 0x6a, 0x6f, 0x6f, 0x17, 0x09, 0x56, 0x53,
0x45, 0x47, 0x47, 0x43, 0x1c, 0x03, 0x28, 0x2f, 0x2f, 0x17, 0x91, 0x8e, 0x61, 0x6b, 0x6b, 0x8b, 0xff, 0xcb, 0xcd, 0x8d, 0xa0, 0x5d, 0x6e, 0x4d, 0xb3, 0x7e, 0x4b, 0xd0, 0xd5, 0x25, 0x47, 0x64,
0x7f, 0x43, 0xda, 0xd8, 0xd8, 0xe0, 0x13, 0xe0, 0xd3, 0xcf, 0xbe, 0xb8, 0x08, 0xa2, 0xd4, 0x51, 0x64, 0x24, 0x9c, 0x9d, 0x9d, 0x45, 0xce, 0x98, 0xd0, 0xd0, 0x50, 0x14, 0x15, 0x15, 0xe1, 0xb4,
0x7e, 0xe5, 0xc0, 0xca, 0xcd, 0x40, 0x51, 0x52, 0x07, 0x0d, 0x0d, 0x0d, 0xe1, 0xce, 0x9d, 0x6a, 0x9f, 0x99, 0xc8, 0x58, 0x61, 0x14, 0xae, 0xb4, 0xb4, 0x34, 0xa3, 0x88, 0x51, 0x28, 0xbe, 0xc1,
0x3c, 0x78, 0x50, 0x84, 0x8c, 0x8c, 0x0c, 0x94, 0x95, 0x95, 0xa1, 0xa9, 0xa9, 0x09, 0xa3, 0xa3, 0xf4, 0xf4, 0x3b, 0x22, 0x1f, 0x4c, 0x67, 0xe7, 0x07, 0x88, 0x88, 0x88, 0xc0, 0xf9, 0xf3, 0xe7,
0xa3, 0xfc, 0xed, 0xcc, 0xcc, 0x0c, 0xa6, 0xa6, 0xa6, 0x60, 0x34, 0x1a, 0xf1, 0xdb, 0xd3, 0xa7, 0x45, 0xce, 0xf8, 0x6f, 0x7c, 0x7c, 0x3c, 0x9e, 0x3d, 0x7b, 0x66, 0x56, 0xda, 0xa7, 0x96, 0xb7,
0x18, 0x79, 0xfc, 0xc4, 0x99, 0x76, 0xfd, 0xfa, 0x27, 0x17, 0x40, 0x36, 0x9b, 0x0d, 0xe2, 0x00, 0xb4, 0x9a, 0x3d, 0x83, 0xa8, 0xa3, 0xa3, 0xc3, 0x58, 0xb2, 0x83, 0x83, 0x83, 0xc8, 0xc9, 0x89,
0x44, 0x54, 0x54, 0x14, 0xa7, 0x25, 0x26, 0x26, 0x06, 0xa1, 0xa1, 0xa1, 0xdc, 0x14, 0x04, 0x92, 0xa1, 0x9c, 0x9c, 0xc3, 0xe3, 0xc7, 0xaf, 0x45, 0xdc, 0x6e, 0x38, 0xac, 0xbc, 0x9a, 0xac, 0xac,
0xf9, 0xdf, 0xdc, 0xdc, 0xe4, 0x65, 0x2a, 0x23, 0x18, 0x1f, 0x1f, 0xe7, 0x88, 0x28, 0xc5, 0xb4, 0x2c, 0xd1, 0x2d, 0xe8, 0x58, 0x10, 0x51, 0xa0, 0xa3, 0x46, 0x74, 0xfe, 0xed, 0x9d, 0x5d, 0x73,
0xfd, 0x5d, 0x2e, 0x27, 0x7e, 0x37, 0x1a, 0x4f, 0x04, 0x44, 0x2f, 0xed, 0x7b, 0x81, 0x28, 0x65, 0x91, 0x54, 0xca, 0xbc, 0x01, 0x2d, 0x45, 0x3c, 0x2b, 0x2e, 0x77, 0xa5, 0xf2, 0x6b, 0x2a, 0x12,
0x66, 0x71, 0x1e, 0x11, 0x8c, 0x72, 0x1f, 0x1e, 0x1e, 0xce, 0x8d, 0x20, 0x67, 0x42, 0x16, 0x99, 0x39, 0x11, 0x8c, 0xa8, 0xa8, 0x28, 0x84, 0x85, 0x85, 0x89, 0x42, 0xc9, 0xcc, 0xcc, 0xc4, 0xcc,
0xae, 0xc5, 0xc5, 0xc5, 0xd8, 0xde, 0xde, 0x66, 0xe3, 0x83, 0x83, 0x83, 0xe7, 0xdf, 0x38, 0x1c, 0xcc, 0x0c, 0x26, 0x27, 0x27, 0x45, 0x1b, 0x1a, 0xa5, 0x23, 0x86, 0x37, 0x33, 0x77, 0xf3, 0xde,
0x76, 0x0c, 0xff, 0x32, 0xe2, 0xbe, 0xf1, 0xce, 0x8d, 0xf7, 0xa5, 0x6d, 0x55, 0x10, 0x89, 0xbc, 0xbe, 0x01, 0x3e, 0x8f, 0x3e, 0x33, 0x8a, 0xa6, 0xe9, 0x45, 0xfe, 0x90, 0x5b, 0x3c, 0x27, 0xdd,
0x4c, 0x4e, 0x4e, 0xe6, 0x6d, 0x2c, 0x27, 0x5c, 0x09, 0xa2, 0x7b, 0x4a, 0x31, 0x75, 0xe5, 0xf4, 0xc7, 0xc7, 0x47, 0x94, 0xf1, 0x5d, 0x3a, 0x32, 0x24, 0x19, 0x87, 0x97, 0xf7, 0x0b, 0xb7, 0x1f,
0xf4, 0x34, 0xfa, 0xfa, 0xfa, 0xce, 0xdf, 0x0d, 0xfe, 0xf8, 0xc3, 0xb1, 0x2e, 0x47, 0x97, 0xa1, 0xb9, 0x5c, 0x8e, 0xe2, 0xe2, 0x62, 0x3c, 0x79, 0xf2, 0x04, 0x53, 0x53, 0x53, 0xe8, 0xe9, 0xe9,
0x84, 0x5c, 0x0a, 0xa2, 0x8e, 0xa1, 0x14, 0x28, 0x57, 0x89, 0xb2, 0x6d, 0xe9, 0x1d, 0xd5, 0x91, 0xa1, 0x95, 0x76, 0x52, 0xfe, 0xba, 0xd0, 0xd7, 0xd7, 0x87, 0xe7, 0xcf, 0x47, 0xf0, 0x57, 0x4f,
0x96, 0xe8, 0xa4, 0x38, 0xc3, 0x06, 0x06, 0x06, 0xf8, 0xfb, 0xaf, 0xbe, 0xf9, 0xda, 0xa6, 0xd3, 0xef, 0xe1, 0x95, 0x2b, 0x57, 0xbf, 0x25, 0x87, 0x95, 0x51, 0xc4, 0xab, 0x29, 0x2c, 0x2c, 0x14,
0xe9, 0x92, 0x7c, 0x21, 0x2f, 0x05, 0x29, 0x97, 0xa4, 0x1a, 0x88, 0x76, 0xe2, 0x8a, 0xd8, 0x85, 0x89, 0x95, 0xf6, 0x0b, 0x57, 0x98, 0x4a, 0xa5, 0x32, 0xee, 0x07, 0x86, 0x7f, 0xc3, 0x74, 0xa4,
0x54, 0x9b, 0xc7, 0x4f, 0x7e, 0xc5, 0xe7, 0xb7, 0x5b, 0xff, 0x88, 0x8c, 0x8c, 0xd4, 0xfa, 0x02, 0x28, 0x14, 0x0a, 0xd0, 0x29, 0x4b, 0xb9, 0x9b, 0x16, 0x32, 0x5e, 0x0d, 0x3f, 0xe7, 0x77, 0x75,
0x54, 0x41, 0xca, 0xf5, 0xee, 0x9b, 0x32, 0x25, 0x88, 0xae, 0x87, 0xc2, 0xa1, 0x2d, 0xb3, 0x05, 0xba, 0x6d, 0x74, 0xfe, 0xd9, 0x75, 0x78, 0xd9, 0xe7, 0x72, 0x04, 0xd7, 0xc2, 0xab, 0x7a, 0x30,
0x3f, 0xfd, 0x3c, 0xe2, 0x2e, 0x29, 0x2f, 0xef, 0x15, 0x35, 0x7d, 0xc5, 0xd7, 0xb8, 0x2a, 0x28, 0x11, 0x71, 0x7e, 0x72, 0xe8, 0x98, 0x70, 0x74, 0x74, 0x84, 0x8b, 0x8b, 0x0b, 0xba, 0xbb, 0xbb,
0x30, 0x30, 0xf0, 0x3d, 0xd1, 0x65, 0x1f, 0xff, 0x53, 0x89, 0xdd, 0xf7, 0xae, 0x80, 0xf8, 0xf9, 0xcd, 0x36, 0x9e, 0x24, 0xe2, 0x76, 0x54, 0x53, 0x53, 0x23, 0x36, 0x28, 0x4f, 0x84, 0xbe, 0x17,
0x1a, 0xf6, 0xd5, 0x85, 0x17, 0xff, 0x95, 0xfe, 0x06, 0xd8, 0xdb, 0xd8, 0xd9, 0x0f, 0x89, 0xfd, 0xf9, 0xe0, 0x95, 0x73, 0xcf, 0x6c, 0xfc, 0xbd, 0x69, 0xdf, 0x4f, 0xee, 0x17, 0x2c, 0x49, 0x4e,
0xaf, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 0x88, 0xa4, 0x8e, 0x9b, 0x91, 0x91, 0x81, 0xfa, 0xfa, 0x7a, 0x63, 0xc8, 0x2c, 0x45, 0x7c, 0x9f,
0x7b, 0x23, 0xe7, 0x85, 0x2b, 0xad, 0xba, 0xba, 0x9a, 0x26, 0xa9, 0x17, 0x05, 0x50, 0xf1, 0x53,
0xa5, 0x2e, 0x24, 0xe4, 0x53, 0x3f, 0x53, 0xc9, 0x99, 0x22, 0xd3, 0x06, 0x79, 0x9a, 0x88, 0x9f,
0xf3, 0xcc, 0x39, 0x6c, 0x03, 0x03, 0x03, 0xa8, 0xad, 0xad, 0xc5, 0xdc, 0xdc, 0x1c, 0x94, 0x3f,
0xa4, 0x8f, 0x7b, 0x7b, 0x7b, 0xbf, 0x67, 0x29, 0x39, 0x35, 0x74, 0x6f, 0x22, 0xe2, 0xfb, 0xdc,
0x84, 0x67, 0x67, 0x67, 0x45, 0x11, 0xd0, 0x21, 0x79, 0xf4, 0x45, 0x74, 0xd4, 0x2f, 0x34, 0x96,
0xf5, 0x69, 0x12, 0xa3, 0xa8, 0xa0, 0xa0, 0xa0, 0x9b, 0xe2, 0xad, 0xa5, 0xb3, 0xc6, 0x8c, 0xa5,
0xa5, 0x25, 0x23, 0xd4, 0xc1, 0x8d, 0xf0, 0xf5, 0xdc, 0xfc, 0xdf, 0x5a, 0xd5, 0xd8, 0xb8, 0xf6,
0xe7, 0xda, 0x5f, 0x35, 0x1f, 0x5e, 0xfd, 0xf8, 0x3b, 0xae, 0xac, 0xb3, 0x24, 0x92, 0xc8, 0x9a,
0x78, 0xff, 0x3f, 0xe0, 0xf1, 0x6f, 0x02, 0x89, 0x7f, 0x00, 0x2e, 0xa3, 0x62, 0xef, 0x4d, 0x9e,
0x78, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
}; };
const BITMAP_OPAQUE post_drill_xpm[1] = {{ png, sizeof( png ), "post_drill_xpm" }}; const BITMAP_OPAQUE post_drill_xpm[1] = {{ png, sizeof( png ), "post_drill_xpm" }};
......
<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<defs> <svg
<filter id="l" color-interpolation-filters="sRGB"> xmlns:dc="http://purl.org/dc/elements/1.1/"
<feGaussianBlur stdDeviation="1.2065414"/> 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.1 "
sodipodi:docname="post_compo.svg">
<metadata
id="metadata133">
<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="968"
id="namedview131"
showgrid="false"
inkscape:zoom="11.15955"
inkscape:cx="7.5456375"
inkscape:cy="34.760928"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<defs
id="defs4">
<filter
id="l"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="1.2065414"
id="feGaussianBlur7" />
</filter> </filter>
<filter id="j" color-interpolation-filters="sRGB"> <filter
<feGaussianBlur stdDeviation="0.89955545"/> id="j"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="0.89955545"
id="feGaussianBlur10" />
</filter> </filter>
<radialGradient id="p" gradientUnits="userSpaceOnUse" cy="112.3" cx="102" gradientTransform="matrix(.875 0 0 .85714 10 17.143)" r="139.56"> <radialGradient
<stop stop-color="#00537d" offset="0"/> id="p"
<stop stop-color="#186389" offset=".0151"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#558ca8" offset=".0558"/> cy="112.3"
<stop stop-color="#89afc3" offset=".0964"/> cx="102"
<stop stop-color="#b3ccd8" offset=".1357"/> gradientTransform="matrix(.875 0 0 .85714 10 17.143)"
<stop stop-color="#d4e2e9" offset=".1737"/> r="139.56">
<stop stop-color="#ecf2f5" offset=".20990"/> <stop
<stop stop-color="#fafcfd" offset=".24350"/> stop-color="#00537d"
<stop stop-color="#fff" offset=".27220"/> offset="0"
id="stop13" />
<stop
stop-color="#186389"
offset=".0151"
id="stop15" />
<stop
stop-color="#558ca8"
offset=".0558"
id="stop17" />
<stop
stop-color="#89afc3"
offset=".0964"
id="stop19" />
<stop
stop-color="#b3ccd8"
offset=".1357"
id="stop21" />
<stop
stop-color="#d4e2e9"
offset=".1737"
id="stop23" />
<stop
stop-color="#ecf2f5"
offset=".20990"
id="stop25" />
<stop
stop-color="#fafcfd"
offset=".24350"
id="stop27" />
<stop
stop-color="#fff"
offset=".27220"
id="stop29" />
</radialGradient> </radialGradient>
<radialGradient id="q" gradientUnits="userSpaceOnUse" cy="109.33" cx="99.081" gradientTransform="matrix(.85638 0 0 .84156 11.191 18.14)" r="139.56"> <radialGradient
<stop stop-color="#7a7d80" offset="0"/> id="q"
<stop stop-color="#c2c2c2" offset=".12618"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#fafafa" offset=".23251"/> cy="109.33"
<stop stop-color="#fff" offset=".27220"/> cx="99.081"
<stop stop-color="#fafafa" offset=".53130"/> gradientTransform="matrix(.85638 0 0 .84156 11.191 18.14)"
<stop stop-color="#ebecec" offset=".84490"/> r="139.56">
<stop stop-color="#e1e2e3" offset="1"/> <stop
stop-color="#7a7d80"
offset="0"
id="stop32" />
<stop
stop-color="#c2c2c2"
offset=".12618"
id="stop34" />
<stop
stop-color="#fafafa"
offset=".23251"
id="stop36" />
<stop
stop-color="#fff"
offset=".27220"
id="stop38" />
<stop
stop-color="#fafafa"
offset=".53130"
id="stop40" />
<stop
stop-color="#ebecec"
offset=".84490"
id="stop42" />
<stop
stop-color="#e1e2e3"
offset="1"
id="stop44" />
</radialGradient> </radialGradient>
<linearGradient id="m" y2="94.104" gradientUnits="userSpaceOnUse" x2="86.572" gradientTransform="matrix(.875 0 0 .85714 10 17.143)" y1="104" x1="96"> <linearGradient
<stop stop-color="#888a85" offset="0"/> id="m"
<stop stop-color="#8c8e89" offset=".0072"/> y2="94.104"
<stop stop-color="#abaca9" offset=".0673"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#c5c6c4" offset=".1347"/> x2="86.572"
<stop stop-color="#dbdbda" offset=".2115"/> gradientTransform="matrix(.875 0 0 .85714 10 17.143)"
<stop stop-color="#ebebeb" offset=".3012"/> y1="104"
<stop stop-color="#f7f7f6" offset=".4122"/> x1="96">
<stop stop-color="#fdfdfd" offset=".5679"/> <stop
<stop stop-color="#fff" offset="1"/> stop-color="#888a85"
offset="0"
id="stop47" />
<stop
stop-color="#8c8e89"
offset=".0072"
id="stop49" />
<stop
stop-color="#abaca9"
offset=".0673"
id="stop51" />
<stop
stop-color="#c5c6c4"
offset=".1347"
id="stop53" />
<stop
stop-color="#dbdbda"
offset=".2115"
id="stop55" />
<stop
stop-color="#ebebeb"
offset=".3012"
id="stop57" />
<stop
stop-color="#f7f7f6"
offset=".4122"
id="stop59" />
<stop
stop-color="#fdfdfd"
offset=".5679"
id="stop61" />
<stop
stop-color="#fff"
offset="1"
id="stop63" />
</linearGradient> </linearGradient>
<linearGradient id="o" y2="7.8438" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="12.922" y1="6.0625" x1="11.078"/> <linearGradient
<linearGradient id="a"> id="o"
<stop stop-color="#fff" offset="0"/> y2="7.8438"
<stop stop-color="#babaff" offset="1"/> xlink:href="#a"
gradientUnits="userSpaceOnUse"
x2="12.922"
y1="6.0625"
x1="11.078" />
<linearGradient
id="a">
<stop
stop-color="#fff"
offset="0"
id="stop67" />
<stop
stop-color="#babaff"
offset="1"
id="stop69" />
</linearGradient> </linearGradient>
<linearGradient id="n" y2="10.441" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="12.136" gradientTransform="matrix(1.6113,0,0,2.0018,5.897,10.72)" y1="1.9828" x1="3.4673"/> <linearGradient
<filter id="k" color-interpolation-filters="sRGB"> id="n"
<feGaussianBlur stdDeviation="0.26143807"/> y2="10.441"
xlink:href="#a"
gradientUnits="userSpaceOnUse"
x2="12.136"
gradientTransform="matrix(1.6113,0,0,2.0018,5.897,10.72)"
y1="1.9828"
x1="3.4673" />
<filter
id="k"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="0.26143807"
id="feGaussianBlur73" />
</filter> </filter>
<mask
id="w">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3301" />
</mask>
<mask
id="x">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3304" />
</mask>
<mask
id="q-1">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3307" />
</mask>
<mask
id="v">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3310" />
</mask>
<mask
id="r">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3313" />
</mask>
<mask
id="u">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3316" />
</mask>
<mask
id="s">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3319" />
</mask>
<mask
id="t">
<rect
style="fill:#ffffff;fill-rule:evenodd"
height="26.091999"
width="25.032"
y="-3.7337"
x="-4.6403999"
id="rect3322" />
</mask>
<filter
id="n-7"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="0.89955545"
id="feGaussianBlur3298" />
</filter>
<radialGradient
id="y"
gradientUnits="userSpaceOnUse"
cy="112.3"
cx="102"
gradientTransform="matrix(0.875,0,0,0.85714,10,17.143)"
r="139.56">
<stop
stop-color="#00537d"
offset="0"
id="stop3325" />
<stop
stop-color="#186389"
offset=".0151"
id="stop3327" />
<stop
stop-color="#558ca8"
offset=".0558"
id="stop3329" />
<stop
stop-color="#89afc3"
offset=".0964"
id="stop3331" />
<stop
stop-color="#b3ccd8"
offset=".1357"
id="stop3333" />
<stop
stop-color="#d4e2e9"
offset=".1737"
id="stop3335" />
<stop
stop-color="#ecf2f5"
offset=".20990"
id="stop3337" />
<stop
stop-color="#fafcfd"
offset=".24350"
id="stop3339" />
<stop
stop-color="#fff"
offset=".27220"
id="stop3341" />
</radialGradient>
<radialGradient
id="z"
gradientUnits="userSpaceOnUse"
cy="109.33"
cx="99.081001"
gradientTransform="matrix(0.85638,0,0,0.84156,11.191,18.14)"
r="139.56">
<stop
stop-color="#7a7d80"
offset="0"
id="stop3344" />
<stop
stop-color="#c2c2c2"
offset=".12618"
id="stop3346" />
<stop
stop-color="#fafafa"
offset=".23251"
id="stop3348" />
<stop
stop-color="#fff"
offset=".27220"
id="stop3350" />
<stop
stop-color="#fafafa"
offset=".53130"
id="stop3352" />
<stop
stop-color="#ebecec"
offset=".84490"
id="stop3354" />
<stop
stop-color="#e1e2e3"
offset="1"
id="stop3356" />
</radialGradient>
<filter
id="o-4"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="1.2065414"
id="feGaussianBlur3295" />
</filter>
<linearGradient
id="p-0"
y2="94.103996"
gradientUnits="userSpaceOnUse"
x2="86.571999"
gradientTransform="matrix(0.875,0,0,0.85714,10,17.143)"
y1="104"
x1="96">
<stop
stop-color="#888a85"
offset="0"
id="stop3359" />
<stop
stop-color="#8c8e89"
offset=".0072"
id="stop3361" />
<stop
stop-color="#abaca9"
offset=".0673"
id="stop3363" />
<stop
stop-color="#c5c6c4"
offset=".1347"
id="stop3365" />
<stop
stop-color="#dbdbda"
offset=".2115"
id="stop3367" />
<stop
stop-color="#ebebeb"
offset=".3012"
id="stop3369" />
<stop
stop-color="#f7f7f6"
offset=".4122"
id="stop3371" />
<stop
stop-color="#fdfdfd"
offset=".5679"
id="stop3373" />
<stop
stop-color="#fff"
offset="1"
id="stop3375" />
</linearGradient>
<linearGradient
y2="94.103996"
x2="86.571999"
y1="104"
x1="96"
gradientTransform="matrix(0.875,0,0,0.85714,10,17.143)"
gradientUnits="userSpaceOnUse"
id="linearGradient3529"
xlink:href="#p-0"
inkscape:collect="always" />
</defs> </defs>
<g transform="matrix(.47468 0 0 .42788 -6.467 -7.0045)"> <g
<path opacity=".6" d="m23 25v96h53.525c0.464 0 30.475-29.398 30.475-29.853v-66.147h-84z" transform="matrix(1.0476,0,0,1.0417,-2.0952,-4.0417)" filter="url(#j)"/> transform="matrix(.74661 0 0 .79847 16.665 .51902)"
<path fill="url(#p)" d="m24 24v96h53.525c0.464 0 30.475-29.398 30.475-29.853v-66.147h-84z"/> id="g87">
<path fill="url(#q)" d="m26.606 25.714c-0.47187 0-0.85638 0.37786-0.85638 0.84156v90.888c0 0.46455 0.38452 0.84157 0.85638 0.84157h50.674c0.22523 0 0.44618-0.0892 0.60546-0.24658l28.115-27.618c0.16013-0.15737 0.25092-0.37365 0.25092-0.59498v-63.262c0-0.4637-0.38366-0.84156-0.85639-0.84156h-78.787z"/> <rect
<path opacity=".5" filter="url(#l)" d="m76.526 120s11.662-9 16.474-13.714c4.812-4.72 14-16.143 14-16.143s-8 5.853-24 5.853c0 16-6.4745 24-6.4745 24z"/> fill-opacity="0"
<path fill="url(#m)" d="m77.526 120s11.662-9 16.474-13.714c4.812-4.72 14-16.143 14-16.143s-8 5.853-24 5.853c0 16-6.4745 24-6.4745 24z"/> height="16"
width="16"
y="0"
x="0"
id="rect89" />
</g>
<g
transform="matrix(0.52013677,0,0,0.45759617,-10.263625,-8.9845933)"
id="g3377">
<path
style="opacity:0.6;filter:url(#n-7)"
inkscape:connector-curvature="0"
d="m 23,25 v 96 H 76.525 C 76.989,121 107,91.602 107,91.147 V 25 H 23 z"
transform="matrix(1.0476,0,0,1.0417,-2.0952,-4.0417)"
id="path3379" />
<path
style="fill:url(#y)"
inkscape:connector-curvature="0"
d="m 24,24 v 96 H 77.525 C 77.989,120 108,90.602 108,90.147 V 24 H 24 z"
id="path3381" />
<path
style="fill:url(#z)"
inkscape:connector-curvature="0"
d="m 26.606,25.714 c -0.47187,0 -0.85638,0.37786 -0.85638,0.84156 v 90.888 c 0,0.46455 0.38452,0.84157 0.85638,0.84157 H 77.28 c 0.22523,0 0.44618,-0.0892 0.60546,-0.24658 l 28.115,-27.618 c 0.16013,-0.15737 0.25092,-0.37365 0.25092,-0.59498 v -63.262 c 0,-0.4637 -0.38366,-0.84156 -0.85639,-0.84156 h -78.787 z"
id="path3383" />
<path
style="opacity:0.5;filter:url(#o-4)"
inkscape:connector-curvature="0"
d="m 76.526,120 c 0,0 11.662,-9 16.474,-13.714 4.812,-4.72 14,-16.143 14,-16.143 0,0 -8,5.853 -24,5.853 0,16 -6.4745,24 -6.4745,24 z"
id="path3385" />
<path
style="fill:url(#linearGradient3529)"
inkscape:connector-curvature="0"
d="m 77.526,120 c 0,0 11.662,-9 16.474,-13.714 4.812,-4.72 14,-16.143 14,-16.143 0,0 -8,5.853 -24,5.853 0,16 -6.4745,24 -6.4745,24 z"
id="path3387" />
</g>
<path
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:1.5581075px"
inkscape:connector-curvature="0"
d="M 39.830074,8.8807023 H 4.3898176"
id="path3429" />
<path
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:1.49439585px"
inkscape:connector-curvature="0"
d="M 10.111511,36.732359 V 4.3264105"
id="path3431" />
<path
style="stroke:#000000;stroke-width:1.10369503px"
inkscape:connector-curvature="0"
d="M 41.027366,8.8019769 35.886242,4.3576864 v 9.1772406 z"
id="path3433" />
<path
style="stroke:#000000;stroke-width:1.10369503px"
inkscape:connector-curvature="0"
d="M 10.215715,39.334046 14.686632,34.223 H 5.4538759 z"
id="path3435" />
<g
id="g3960"
transform="matrix(0.55678302,0,0,0.52759133,34.204311,24.931152)">
<g
transform="matrix(-3.089888,0,0,-3.1303427,-42.828281,22.964105)"
id="g42"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:0.63823414;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="rect44"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:0.63823414;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="path46"
style="fill:#c8c8c8;fill-opacity:1;stroke:#000000;stroke-width:8.92859936;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(-3.1385085,0,0,-3.1287915,-43.598609,23.42294)"
id="g48"
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="rect50"
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="rect52"
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="path54"
style="fill:#ffede0;stroke-width:4.19689989"
inkscape:connector-curvature="0" />
<rect
transform="matrix(0,1,-1,0,0,0)"
height="2.5109999"
width="4.7175999"
y="9.3478003"
x="-0.31959"
id="rect56"
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="path58"
style="fill:#ffede0;stroke-width:4.19689989"
inkscape:connector-curvature="0" />
<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="path60"
style="fill:#ffede0;stroke-width:4.19689989"
inkscape:connector-curvature="0" />
</g> </g>
<g transform="matrix(.74661 0 0 .79847 16.665 .51902)"> <g
<rect fill-opacity="0" height="16" width="16" y="0" x="0"/> transform="matrix(-3.1385085,0,0,-3.1287915,-43.598609,-7.1644389)"
id="g62">
<rect
transform="matrix(0,1,-1,0,0,0)"
height="2.5109999"
width="4.7175999"
y="13.332"
x="-0.31959"
id="rect64"
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="rect66"
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="path68"
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<rect
transform="matrix(0,1,-1,0,0,0)"
height="2.5109999"
width="4.7175999"
y="9.3478003"
x="-0.31959"
id="rect70"
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="path72"
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<g
id="g74"
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="path76"
style="fill:#ffede0;stroke:#030303;stroke-width:4.19689989;stroke-linejoin:round"
inkscape:connector-curvature="0" />
</g> </g>
<g opacity=".30078" filter="url(#k)" transform="matrix(1.8157,0,0,1.7764,-3.1921,-11.041)">
<path fill-rule="evenodd" d="m8 13.25v14l10.5-7-10.5-7z"/>
<rect y="17.25" width="1.9942" x="6.0058" height="1"/>
<rect y="22.25" width="2" x="6" height="1"/>
<path d="m14.5 6.5a1.5 1.5 0 1 1 -3 0 1.5 1.5 0 1 1 3 0z" transform="matrix(1.3333 0 0 1.3333 .66664 11.583)"/>
<rect y="19.75" width="2.4942" x="19.506" height="1"/>
</g> </g>
<rect transform="matrix(-1.7e-7,1,-1,-4.6099e-8,0,0)" height="1.8157" width="1.7764" y="-13.149" x="14.273" fill="#fff"/>
<path fill-rule="evenodd" d="m9.5178 10.72v24.87l19.065-12.435-19.065-12.435z"/>
<rect y="17.826" width="1.8157" x="7.7021" height="1.7764"/>
<rect y="26.708" width="1.8157" x="7.7021" height="1.7764"/>
<path fill-rule="evenodd" fill="url(#n)" d="m11.344 14.273v17.764l14.526-8.882-14.526-8.882z"/>
<path d="m14.5 6.5a1.5 1.5 0 1 1 -3 0 1.5 1.5 0 1 1 3 0z" transform="matrix(2.4209,0,0,2.3686,-3.7974,7.7594)"/>
<path fill="url(#o)" d="m13 7a1 1 0 1 1 -2 0 1 1 0 1 1 2 0z" transform="matrix(1.8157,0,0,1.7764,5.8864,10.72)"/>
<rect y="22.267" width="4.5287" x="30.409" height="1.7764"/>
<g fill-rule="evenodd" transform="matrix(.80699 0 0 .90684 -22.065 7.996)">
<path fill="#9b9b9b" d="m52.807 0.10325h5.6249v1.9589l-3.375 5.8916h-2.25l3.375-5.8768h-3.375v-1.9738z"/>
<path fill="#9b9b9b" d="m74.181 0.10325v1.9589h3.375v0.97946l-3.375 2.9384v1.9589h5.6249v-1.9589h-3.375l3.375-2.9384v-1.959l-1.125-0.99432-4.5 0.01489z"/>
<path fill="#9b9b9b" d="m67.431 2.17 0.01708 3.81 1.1079 1.9589h3.375l1.1421-2.0667v-3.9178l-1.1421-1.8511h-3.375l-1.125 2.0667z"/>
<path fill="#fff" d="m68.556 3.0416 1.125-0.97946h1.125l1.125 0.9795v1.9589l-1.125 0.9795h-1.125l-1.125-0.9795v-1.9589z"/>
<path fill="#9b9b9b" d="m59.557 0.10325v4.8973h4.5v2.9384h2.25v-7.8357h-2.25v2.9384h-2.25v-2.9384h-2.25z"/>
</g> </g>
</svg> </svg>
<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.1" viewBox="0 0 48 48"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<defs> <svg
<filter id="o" color-interpolation-filters="sRGB"> xmlns:dc="http://purl.org/dc/elements/1.1/"
<feGaussianBlur stdDeviation="1.2065414"/> 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: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="svg3290"
inkscape:version="0.48.1 "
sodipodi:docname="post_drill.svg">
<metadata
id="metadata3439">
<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="968"
id="namedview3437"
showgrid="false"
inkscape:zoom="15.4375"
inkscape:cx="24"
inkscape:cy="24"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg3290" />
<defs
id="defs3292">
<filter
id="o"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="1.2065414"
id="feGaussianBlur3295" />
</filter> </filter>
<filter id="n" color-interpolation-filters="sRGB"> <filter
<feGaussianBlur stdDeviation="0.89955545"/> id="n"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="0.89955545"
id="feGaussianBlur3298" />
</filter> </filter>
<mask id="w"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="w">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3301" />
</mask> </mask>
<mask id="x"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="x">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3304" />
</mask> </mask>
<mask id="q"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="q">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3307" />
</mask> </mask>
<mask id="v"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="v">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3310" />
</mask> </mask>
<mask id="r"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="r">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3313" />
</mask> </mask>
<mask id="u"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="u">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3316" />
</mask> </mask>
<mask id="s"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="s">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3319" />
</mask> </mask>
<mask id="t"> <mask
<rect fill-rule="evenodd" height="26.092" width="25.032" y="-3.7337" x="-4.6404" fill="#fff"/> id="t">
<rect
fill-rule="evenodd"
height="26.092"
width="25.032"
y="-3.7337"
x="-4.6404"
fill="#fff"
id="rect3322" />
</mask> </mask>
<radialGradient id="y" gradientUnits="userSpaceOnUse" cy="112.3" cx="102" gradientTransform="matrix(.875 0 0 .85714 10 17.143)" r="139.56"> <radialGradient
<stop stop-color="#00537d" offset="0"/> id="y"
<stop stop-color="#186389" offset=".0151"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#558ca8" offset=".0558"/> cy="112.3"
<stop stop-color="#89afc3" offset=".0964"/> cx="102"
<stop stop-color="#b3ccd8" offset=".1357"/> gradientTransform="matrix(0.875,0,0,0.85714,10,17.143)"
<stop stop-color="#d4e2e9" offset=".1737"/> r="139.56">
<stop stop-color="#ecf2f5" offset=".20990"/> <stop
<stop stop-color="#fafcfd" offset=".24350"/> stop-color="#00537d"
<stop stop-color="#fff" offset=".27220"/> offset="0"
id="stop3325" />
<stop
stop-color="#186389"
offset=".0151"
id="stop3327" />
<stop
stop-color="#558ca8"
offset=".0558"
id="stop3329" />
<stop
stop-color="#89afc3"
offset=".0964"
id="stop3331" />
<stop
stop-color="#b3ccd8"
offset=".1357"
id="stop3333" />
<stop
stop-color="#d4e2e9"
offset=".1737"
id="stop3335" />
<stop
stop-color="#ecf2f5"
offset=".20990"
id="stop3337" />
<stop
stop-color="#fafcfd"
offset=".24350"
id="stop3339" />
<stop
stop-color="#fff"
offset=".27220"
id="stop3341" />
</radialGradient> </radialGradient>
<radialGradient id="z" gradientUnits="userSpaceOnUse" cy="109.33" cx="99.081" gradientTransform="matrix(.85638 0 0 .84156 11.191 18.14)" r="139.56"> <radialGradient
<stop stop-color="#7a7d80" offset="0"/> id="z"
<stop stop-color="#c2c2c2" offset=".12618"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#fafafa" offset=".23251"/> cy="109.33"
<stop stop-color="#fff" offset=".27220"/> cx="99.081"
<stop stop-color="#fafafa" offset=".53130"/> gradientTransform="matrix(0.85638,0,0,0.84156,11.191,18.14)"
<stop stop-color="#ebecec" offset=".84490"/> r="139.56">
<stop stop-color="#e1e2e3" offset="1"/> <stop
stop-color="#7a7d80"
offset="0"
id="stop3344" />
<stop
stop-color="#c2c2c2"
offset=".12618"
id="stop3346" />
<stop
stop-color="#fafafa"
offset=".23251"
id="stop3348" />
<stop
stop-color="#fff"
offset=".27220"
id="stop3350" />
<stop
stop-color="#fafafa"
offset=".53130"
id="stop3352" />
<stop
stop-color="#ebecec"
offset=".84490"
id="stop3354" />
<stop
stop-color="#e1e2e3"
offset="1"
id="stop3356" />
</radialGradient> </radialGradient>
<linearGradient id="p" y2="94.104" gradientUnits="userSpaceOnUse" x2="86.572" gradientTransform="matrix(.875 0 0 .85714 10 17.143)" y1="104" x1="96"> <linearGradient
<stop stop-color="#888a85" offset="0"/> id="p"
<stop stop-color="#8c8e89" offset=".0072"/> y2="94.104"
<stop stop-color="#abaca9" offset=".0673"/> gradientUnits="userSpaceOnUse"
<stop stop-color="#c5c6c4" offset=".1347"/> x2="86.572"
<stop stop-color="#dbdbda" offset=".2115"/> gradientTransform="matrix(0.875,0,0,0.85714,10,17.143)"
<stop stop-color="#ebebeb" offset=".3012"/> y1="104"
<stop stop-color="#f7f7f6" offset=".4122"/> x1="96">
<stop stop-color="#fdfdfd" offset=".5679"/> <stop
<stop stop-color="#fff" offset="1"/> stop-color="#888a85"
offset="0"
id="stop3359" />
<stop
stop-color="#8c8e89"
offset=".0072"
id="stop3361" />
<stop
stop-color="#abaca9"
offset=".0673"
id="stop3363" />
<stop
stop-color="#c5c6c4"
offset=".1347"
id="stop3365" />
<stop
stop-color="#dbdbda"
offset=".2115"
id="stop3367" />
<stop
stop-color="#ebebeb"
offset=".3012"
id="stop3369" />
<stop
stop-color="#f7f7f6"
offset=".4122"
id="stop3371" />
<stop
stop-color="#fdfdfd"
offset=".5679"
id="stop3373" />
<stop
stop-color="#fff"
offset="1"
id="stop3375" />
</linearGradient> </linearGradient>
</defs> </defs>
<g transform="matrix(.47468 0 0 .42788 -6.467 -7.0045)"> <g
<path opacity=".6" d="m23 25v96h53.525c0.464 0 30.475-29.398 30.475-29.853v-66.147h-84z" transform="matrix(1.0476,0,0,1.0417,-2.0952,-4.0417)" filter="url(#n)"/> transform="matrix(0.51827266,0,0,0.45499315,-9.7975047,-8.8271572)"
<path fill="url(#y)" d="m24 24v96h53.525c0.464 0 30.475-29.398 30.475-29.853v-66.147h-84z"/> id="g3377">
<path fill="url(#z)" d="m26.606 25.714c-0.47187 0-0.85638 0.37786-0.85638 0.84156v90.888c0 0.46455 0.38452 0.84157 0.85638 0.84157h50.674c0.22523 0 0.44618-0.0892 0.60546-0.24658l28.115-27.618c0.16013-0.15737 0.25092-0.37365 0.25092-0.59498v-63.262c0-0.4637-0.38366-0.84156-0.85639-0.84156h-78.787z"/> <path
<path opacity=".5" filter="url(#o)" d="m76.526 120s11.662-9 16.474-13.714c4.812-4.72 14-16.143 14-16.143s-8 5.853-24 5.853c0 16-6.4745 24-6.4745 24z"/> d="m 23,25 v 96 H 76.525 C 76.989,121 107,91.602 107,91.147 V 25 H 23 z"
<path fill="url(#p)" d="m77.526 120s11.662-9 16.474-13.714c4.812-4.72 14-16.143 14-16.143s-8 5.853-24 5.853c0 16-6.4745 24-6.4745 24z"/> transform="matrix(1.0476,0,0,1.0417,-2.0952,-4.0417)"
id="path3379"
inkscape:connector-curvature="0"
style="opacity:0.6;filter:url(#n)" />
<path
d="m 24,24 v 96 H 77.525 C 77.989,120 108,90.602 108,90.147 V 24 H 24 z"
id="path3381"
style="fill:url(#y)"
inkscape:connector-curvature="0" />
<path
d="m 26.606,25.714 c -0.47187,0 -0.85638,0.37786 -0.85638,0.84156 v 90.888 c 0,0.46455 0.38452,0.84157 0.85638,0.84157 H 77.28 c 0.22523,0 0.44618,-0.0892 0.60546,-0.24658 l 28.115,-27.618 c 0.16013,-0.15737 0.25092,-0.37365 0.25092,-0.59498 v -63.262 c 0,-0.4637 -0.38366,-0.84156 -0.85639,-0.84156 h -78.787 z"
id="path3383"
style="fill:url(#z)"
inkscape:connector-curvature="0" />
<path
d="m 76.526,120 c 0,0 11.662,-9 16.474,-13.714 4.812,-4.72 14,-16.143 14,-16.143 0,0 -8,5.853 -24,5.853 0,16 -6.4745,24 -6.4745,24 z"
id="path3385"
inkscape:connector-curvature="0"
style="opacity:0.5;filter:url(#o)" />
<path
d="m 77.526,120 c 0,0 11.662,-9 16.474,-13.714 4.812,-4.72 14,-16.143 14,-16.143 0,0 -8,5.853 -24,5.853 0,16 -6.4745,24 -6.4745,24 z"
id="path3387"
style="fill:url(#p)"
inkscape:connector-curvature="0" />
</g> </g>
<g transform="matrix(-.63561 0 0 .61084 41.848 10.591)"> <g
<a fill="#e5e500" mask="url(#w)" transform="matrix(-1.0533,0,0,-1.0414,46.87,47.939)"> transform="matrix(-0.69398181,0,0,0.64954664,42.954546,9.8833035)"
<path d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" fill-rule="evenodd" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)" fill="#e5e500"/> id="g3389">
<a
mask="url(#w)"
transform="matrix(-1.0533,0,0,-1.0414,46.87,47.939)"
id="a3391"
style="fill:#e5e500">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3393"
inkscape:connector-curvature="0"
style="fill:#e5e500;fill-rule:evenodd" />
</a> </a>
<a opacity=".83203" mask="url(#x)" transform="matrix(0 -1.0414 1.0533 0 -.64254 45.87)"> <a
<path fill-rule="evenodd" d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)"/> mask="url(#x)"
transform="matrix(0,-1.0414,1.0533,0,-0.64254,45.87)"
id="a3395"
style="opacity:0.83202999">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3397"
inkscape:connector-curvature="0"
style="fill-rule:evenodd" />
</a> </a>
<a fill="#eded00" mask="url(#q)" transform="matrix(1.0533 0 0 1.0414 1.4155 -.94445)"> <a
<path d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" fill-rule="evenodd" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)" fill="#eded00"/> mask="url(#q)"
transform="matrix(1.0533,0,0,1.0414,1.4155,-0.94445)"
id="a3399"
style="fill:#eded00">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3401"
inkscape:connector-curvature="0"
style="fill:#eded00;fill-rule:evenodd" />
</a> </a>
<path opacity=".9" d="m39.075 22.875a13.875 14.25 0 1 1 -0.0016 -0.21848l-13.873 0.218z" transform="matrix(.99191 0 0 .94943 -.85146 1.8348)" stroke="#000" stroke-width="1.5405" fill="none"/> <path
<a opacity="0.83" mask="url(#v)" transform="matrix(0,1.0414,-1.0533,0,48.922,1.1043)"> d="m 39.075,22.875 a 13.875,14.25 0 1 1 -0.0016,-0.21848 l -13.873,0.218 z"
<path fill-rule="evenodd" d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)"/> transform="matrix(0.99191,0,0,0.94943,-0.85146,1.8348)"
id="path3403"
inkscape:connector-curvature="0"
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:1.54050004" />
<a
mask="url(#v)"
transform="matrix(0,1.0414,-1.0533,0,48.922,1.1043)"
id="a3405"
style="opacity:0.82999998">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3407"
inkscape:connector-curvature="0"
style="fill-rule:evenodd" />
</a> </a>
<path opacity=".9" d="m4.5373 23.491h38.818" stroke="#000" stroke-width="2.016px" fill="none"/> <path
<path opacity=".9" d="m24.134 4.5338v38.704" stroke="#000" stroke-width="2.1559px" fill="none"/> d="m 4.5373,23.491 h 38.818"
<a fill="#c1c100" mask="url(#r)" transform="matrix(.67174 0 0 .76458 7.6512 3.9816)"> id="path3409"
<path d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" fill-rule="evenodd" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)" fill="#c1c100"/> inkscape:connector-curvature="0"
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:2.01600003px" />
<path
d="m 24.134,4.5338 v 38.704"
id="path3411"
inkscape:connector-curvature="0"
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:2.1559px" />
<a
mask="url(#r)"
transform="matrix(0.67174,0,0,0.76458,7.6512,3.9816)"
id="a3413"
style="fill:#c1c100">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3415"
inkscape:connector-curvature="0"
style="fill:#c1c100;fill-rule:evenodd" />
</a> </a>
<a fill="#c1c100" mask="url(#u)" transform="matrix(-.67174 0 0 -.76458 40.662 43.016)"> <a
<path d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" fill-rule="evenodd" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)" fill="#c1c100"/> mask="url(#u)"
transform="matrix(-0.67174,0,0,-0.76458,40.662,43.016)"
id="a3417"
style="fill:#c1c100">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3419"
inkscape:connector-curvature="0"
style="fill:#c1c100;fill-rule:evenodd" />
</a> </a>
<a mask="url(#s)" transform="matrix(0 .67174 -.76458 0 43.801 7.3614)"> <a
<path fill-rule="evenodd" d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)"/> mask="url(#s)"
transform="matrix(0,0.67174,-0.76458,0,43.801,7.3614)"
id="a3421">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3423"
inkscape:connector-curvature="0"
style="fill-rule:evenodd" />
</a> </a>
<a mask="url(#t)" transform="matrix(0 -.67174 .76458 0 4.4238 39.589)"> <a
<path fill-rule="evenodd" d="m40.093 23.074a14.001 13.576 0 1 1 -28.001 0 14.001 13.576 0 1 1 28.001 0z" transform="matrix(.86364 0 0 .875 -1.0028 3.2555)"/> mask="url(#t)"
transform="matrix(0,-0.67174,0.76458,0,4.4238,39.589)"
id="a3425">
<path
d="m 40.093,23.074 a 14.001,13.576 0 1 1 -28.001,0 14.001,13.576 0 1 1 28.001,0 z"
transform="matrix(0.86364,0,0,0.875,-1.0028,3.2555)"
id="path3427"
inkscape:connector-curvature="0"
style="fill-rule:evenodd" />
</a> </a>
</g> </g>
<path opacity=".9" d="m40.358 10.051h-33.33" stroke="#000" stroke-width="1.46px" fill="none"/> <path
<path opacity=".9" d="m12.409 36.054v-30.255" stroke="#000" stroke-width="1.4003px" fill="none"/> d="M 41.327711,9.3090858 H 4.9368207"
<path stroke-width="1.0342px" d="m41.484 9.9775-4.835-4.1493v8.5681z" stroke="#000"/> id="path3429"
<path stroke-width="1.0342px" d="m12.507 38.483 4.2047-4.7718h-8.683z" stroke="#000"/> inkscape:connector-curvature="0"
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:1.57316029px" />
<path
d="M 10.81199,36.959799 V 4.7876526"
id="path3431"
inkscape:connector-curvature="0"
style="opacity:0.9;fill:none;stroke:#000000;stroke-width:1.50883317px" />
<path
d="M 42.557119,9.2309283 37.278091,4.8187028 v 9.1110282 z"
id="path3433"
inkscape:connector-curvature="0"
style="stroke:#000000;stroke-width:1.11435771px" />
<path
d="m 10.918989,39.542715 4.590843,-5.074171 H 6.0294209 z"
id="path3435"
inkscape:connector-curvature="0"
style="stroke:#000000;stroke-width:1.11435771px" />
</svg> </svg>
...@@ -713,8 +713,46 @@ public: ...@@ -713,8 +713,46 @@ public:
void InstallDialogLayerSetup(); void InstallDialogLayerSetup();
void GenModulesPosition( wxCommandEvent& event ); /**
void GenModuleReport( wxCommandEvent& event ); * Function GenFootprintsPositionFile
* Calls DoGenFootprintsPositionFile to create a footprint position file
* See DoGenFootprintsPositionFile for options and file format
*/
void GenFootprintsPositionFile( wxCommandEvent& event );
/**
* Function DoGenFootprintsPositionFile
* Creates an ascii footprint position file
* @param aFullFilename = the full file name of the file to create
* @param aUnitsMM = false to use inches, true to use mm in coordinates
* @param aForceSmdItems = true to force all footprints with smd pads in list
* = false to put only footprints with option "INSERT" in list
* @param aSide = 0 to list footprints on BACK side,
* 1 to list footprints on FRONT side
* 2 to list footprints on both sides
* @return the number of footprints found on aSide side,
* or -1 if the file could not be created
*/
int DoGenFootprintsPositionFile( const wxString& aFullFileName, bool aUnitsMM,
bool aForceSmdItems, int aSide );
/**
* Function GenFootprintsReport
* Calls DoGenFootprintsReport to create a footprint reprot file
* See DoGenFootprintsReport for file format
*/
void GenFootprintsReport( wxCommandEvent& event );
/**
* Function DoGenFootprintsReport
* Creates an ascii footprint report file giving some infos on footprints
* and board outlines
* @param aFullFilename = the full file name of the file to create
* @param aUnitsMM = false to use inches, true to use mm in coordinates
* @return true if OK, false if error
*/
bool DoGenFootprintsReport( const wxString& aFullFilename, bool aUnitsMM );
void InstallDrillFrame( wxCommandEvent& event ); void InstallDrillFrame( wxCommandEvent& event );
void ToPostProcess( wxCommandEvent& event ); void ToPostProcess( wxCommandEvent& event );
......
...@@ -43,6 +43,7 @@ set(PCBNEW_DIALOGS ...@@ -43,6 +43,7 @@ set(PCBNEW_DIALOGS
dialogs/dialog_freeroute_exchange_base.cpp dialogs/dialog_freeroute_exchange_base.cpp
dialogs/dialog_gendrill.cpp dialogs/dialog_gendrill.cpp
dialogs/dialog_gendrill_base.cpp dialogs/dialog_gendrill_base.cpp
dialogs/dialog_gen_module_position_file_base.cpp
dialogs/dialog_general_options.cpp dialogs/dialog_general_options.cpp
dialogs/dialog_general_options_BoardEditor_base.cpp dialogs/dialog_general_options_BoardEditor_base.cpp
dialogs/dialog_global_edit_tracks_and_vias.cpp dialogs/dialog_global_edit_tracks_and_vias.cpp
......
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 30 2011)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_gen_module_position_file_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
m_MainSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bUpperSizer;
bUpperSizer = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bDirSizer;
bDirSizer = new wxBoxSizer( wxVERTICAL );
m_staticTextDir = new wxStaticText( this, wxID_ANY, _("Output directory:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextDir->Wrap( -1 );
bDirSizer->Add( m_staticTextDir, 0, wxEXPAND|wxTOP|wxLEFT, 5 );
wxBoxSizer* bSizerdirBrowse;
bSizerdirBrowse = new wxBoxSizer( wxHORIZONTAL );
m_outputDirectoryName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_outputDirectoryName->SetToolTip( _("Target directory for plot files. Can be absolute or relative to the board file location.") );
m_outputDirectoryName->SetMinSize( wxSize( 350,-1 ) );
bSizerdirBrowse->Add( m_outputDirectoryName, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
m_browseButton = new wxButton( this, wxID_ANY, _("Browse..."), wxDefaultPosition, wxDefaultSize, 0 );
bSizerdirBrowse->Add( m_browseButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
bDirSizer->Add( bSizerdirBrowse, 1, wxEXPAND, 5 );
bUpperSizer->Add( bDirSizer, 1, 0, 5 );
m_MainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 );
wxBoxSizer* bSizerOptions;
bSizerOptions = new wxBoxSizer( wxHORIZONTAL );
wxString m_radioBoxUnitsChoices[] = { _("Inches"), _("mm") };
int m_radioBoxUnitsNChoices = sizeof( m_radioBoxUnitsChoices ) / sizeof( wxString );
m_radioBoxUnits = new wxRadioBox( this, wxID_ANY, _("Units:"), wxDefaultPosition, wxDefaultSize, m_radioBoxUnitsNChoices, m_radioBoxUnitsChoices, 1, wxRA_SPECIFY_COLS );
m_radioBoxUnits->SetSelection( 0 );
bSizerOptions->Add( m_radioBoxUnits, 1, wxALL, 5 );
wxString m_radioBoxFilesCountChoices[] = { _("One file per side"), _("One file for board") };
int m_radioBoxFilesCountNChoices = sizeof( m_radioBoxFilesCountChoices ) / sizeof( wxString );
m_radioBoxFilesCount = new wxRadioBox( this, wxID_ANY, _("Files:"), wxDefaultPosition, wxDefaultSize, m_radioBoxFilesCountNChoices, m_radioBoxFilesCountChoices, 1, wxRA_SPECIFY_COLS );
m_radioBoxFilesCount->SetSelection( 0 );
m_radioBoxFilesCount->SetToolTip( _("Creates 2 files: one for each board side or\nCreates only one file containing all footprints to place\n") );
bSizerOptions->Add( m_radioBoxFilesCount, 1, wxALL, 5 );
wxString m_radioBoxForceSmdChoices[] = { _("With INSERT attribute set"), _("Force INSERT attribute for all SMD footprints") };
int m_radioBoxForceSmdNChoices = sizeof( m_radioBoxForceSmdChoices ) / sizeof( wxString );
m_radioBoxForceSmd = new wxRadioBox( this, wxID_ANY, _("Footprints:"), wxDefaultPosition, wxDefaultSize, m_radioBoxForceSmdNChoices, m_radioBoxForceSmdChoices, 1, wxRA_SPECIFY_COLS );
m_radioBoxForceSmd->SetSelection( 0 );
m_radioBoxForceSmd->SetToolTip( _("Only footprints with option INSERT are listed in placement file.\nThis option can force this option for all footprints having only SMD pads.\nWarning: this options will modify the board.") );
bSizerOptions->Add( m_radioBoxForceSmd, 0, wxALL, 5 );
m_MainSizer->Add( bSizerOptions, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
wxStaticBoxSizer* sbSizerMsg;
sbSizerMsg = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL );
m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
m_messagesBox->SetMinSize( wxSize( -1,70 ) );
sbSizerMsg->Add( m_messagesBox, 1, wxEXPAND, 5 );
m_MainSizer->Add( sbSizerMsg, 1, wxEXPAND, 5 );
m_sdbSizerButtons = new wxStdDialogButtonSizer();
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
m_sdbSizerButtons->Realize();
m_MainSizer->Add( m_sdbSizerButtons, 0, wxEXPAND|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxRIGHT, 5 );
this->SetSizer( m_MainSizer );
this->Layout();
// Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnClose ) );
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnInitDialog ) );
m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
m_sdbSizerButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnCancelButton ), NULL, this );
m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOKButton ), NULL, this );
}
DIALOG_GEN_MODULE_POSITION_BASE::~DIALOG_GEN_MODULE_POSITION_BASE()
{
// Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnClose ) );
this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnInitDialog ) );
m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
m_sdbSizerButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnCancelButton ), NULL, this );
m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOKButton ), NULL, this );
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="10" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_gen_module_position_file_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="internationalize">1</property>
<property name="name">Dialog_Gen_Modules_Positions_base</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_python_events">1</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_managed">0</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center"></property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="layer"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">-1,-1</property>
<property name="moveable">1</property>
<property name="name">DIALOG_GEN_MODULE_POSITION_BASE</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="show">1</property>
<property name="size">501,340</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass"></property>
<property name="title">Position Files:</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose">OnClose</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog">OnInitDialog</event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_MainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bUpperSizer</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bDirSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Output directory:</property>
<property name="layer"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticTextDir</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerdirBrowse</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="layer"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength">0</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">350,-1</property>
<property name="moveable">1</property>
<property name="name">m_outputDirectoryName</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Target directory for plot files. Can be absolute or relative to the board file location.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Browse...</property>
<property name="layer"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_browseButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnOutputDirectoryBrowseClicked</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerOptions</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">1</property>
<object class="wxRadioBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Inches&quot; &quot;mm&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Units:</property>
<property name="layer"></property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_radioBoxUnits</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">1</property>
<object class="wxRadioBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;One file per side&quot; &quot;One file for board&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Files:</property>
<property name="layer"></property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_radioBoxFilesCount</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Creates 2 files: one for each board side or&#x0A;Creates only one file containing all footprints to place&#x0A;</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;With INSERT attribute set&quot; &quot;Force INSERT attribute for all SMD footprints&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Footprints Selection:</property>
<property name="layer"></property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_radioBoxForceSmd</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Only footprints with option INSERT are listed in placement file.&#x0A;This option can force this option for all footprints having only SMD pads.&#x0A;Warning: this options will modify the board.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRadioBox"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Messages:</property>
<property name="minimum_size"></property>
<property name="name">sbSizerMsg</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_name"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="layer"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength">0</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">-1,70</property>
<property name="moveable">1</property>
<property name="name">m_messagesBox</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="resize">Resizable</property>
<property name="row"></property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="1">
<property name="Apply">0</property>
<property name="Cancel">1</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="name">m_sdbSizerButtons</property>
<property name="permission">protected</property>
<event name="OnApplyButtonClick"></event>
<event name="OnCancelButtonClick">OnCancelButton</event>
<event name="OnContextHelpButtonClick"></event>
<event name="OnHelpButtonClick"></event>
<event name="OnNoButtonClick"></event>
<event name="OnOKButtonClick">OnOKButton</event>
<event name="OnSaveButtonClick"></event>
<event name="OnYesButtonClick"></event>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 30 2011)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_GEN_MODULE_POSITION_FILE_BASE_H__
#define __DIALOG_GEN_MODULE_POSITION_FILE_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/radiobox.h>
#include <wx/statbox.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_GEN_MODULE_POSITION_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_GEN_MODULE_POSITION_BASE : public wxDialog
{
private:
protected:
wxBoxSizer* m_MainSizer;
wxStaticText* m_staticTextDir;
wxTextCtrl* m_outputDirectoryName;
wxButton* m_browseButton;
wxRadioBox* m_radioBoxUnits;
wxRadioBox* m_radioBoxFilesCount;
wxRadioBox* m_radioBoxForceSmd;
wxTextCtrl* m_messagesBox;
wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelButton( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButton( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Position Files:"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 501,340 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_GEN_MODULE_POSITION_BASE();
};
#endif //__DIALOG_GEN_MODULE_POSITION_FILE_BASE_H__
/** /**
* @file gen_modules_placefile.cpp * @file gen_modules_placefile.cpp
*/ */
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012 KiCad Developers, see CHANGELOG.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
*/
/* /*
* 1 - create ascii files for automatic placement of smd components * 1 - create ascii files for automatic placement of smd components
...@@ -22,44 +44,264 @@ ...@@ -22,44 +44,264 @@
#include <class_drawsegment.h> #include <class_drawsegment.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <pcb_plot_params.h>
#include <dialog_gen_module_position_file_base.h>
class LIST_MOD // Can list the elements of useful modules.
class LIST_MOD // An helper class used to build a list of useful footprints.
{ {
public: public:
MODULE* m_Module; MODULE* m_Module; // Link to the actual footprint
const wxChar* m_Reference; const wxChar* m_Reference; // Its schematic reference
const wxChar* m_Value; const wxChar* m_Value; // Its schematic value
int m_Layer; // its side (LAYER_N_BACK, or LAYER_N_FRONT)
}; };
/*
* The dialog to create footprint position files,
* and choose options (one or 2 files, units and force all SMD footprints in list)
*/
class DIALOG_GEN_MODULE_POSITION : public DIALOG_GEN_MODULE_POSITION_BASE
{
private:
PCB_EDIT_FRAME* m_parent;
static int m_unitsOpt;
static int m_fileOpt;
public:
DIALOG_GEN_MODULE_POSITION( PCB_EDIT_FRAME * parent):
DIALOG_GEN_MODULE_POSITION_BASE( parent )
{
m_parent = parent;
}
private:
void OnInitDialog( wxInitDialogEvent& event );
void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
void OnCancelButton( wxCommandEvent& event )
{
EndModal( wxID_CANCEL );
}
void OnOKButton( wxCommandEvent& event );
bool CreateFiles();
// accessors to options:
wxString GetOutputDirectory()
{
return m_outputDirectoryName->GetValue();
}
bool UnitsMM()
{
return m_radioBoxUnits->GetSelection() == 1;
}
bool OneFileOnly()
{
return m_radioBoxFilesCount->GetSelection() == 1;
}
bool ForceAllSmd()
{
return m_radioBoxForceSmd->GetSelection() == 1;
}
#if 1 void AddMessage( const wxString & aMessage )
static const double conv_unit = 0.0001; // units = INCHES {
static const char unit_text[] = "## Unit = inches, Angle = deg.\n"; m_messagesBox->AppendText( aMessage );
#else }
static const double conv_unit = 0.00254; // units = mm };
static const char unit_text[] = "## Unit = mm, Angle = deg.\n";
#endif // Static members to remember choices
int DIALOG_GEN_MODULE_POSITION::m_unitsOpt = 0;
int DIALOG_GEN_MODULE_POSITION::m_fileOpt = 0;
void DIALOG_GEN_MODULE_POSITION::OnInitDialog( wxInitDialogEvent& event )
{
// Output directory
m_outputDirectoryName->SetValue( g_PcbPlotOptions.GetOutputDirectory() );
m_radioBoxUnits->SetSelection( m_unitsOpt );
m_radioBoxFilesCount->SetSelection( m_fileOpt );
m_sdbSizerButtonsOK->SetDefault();
GetSizer()->SetSizeHints(this);
Centre();
}
void DIALOG_GEN_MODULE_POSITION::OnOutputDirectoryBrowseClicked( wxCommandEvent& event )
{
// Build the absolute path of current output plot directory
// to preselect it when opening the dialog.
wxFileName fn( m_outputDirectoryName->GetValue() );
wxString path;
if( fn.IsRelative() )
path = wxGetCwd() + fn.GetPathSeparator() + m_outputDirectoryName->GetValue();
else
path = m_outputDirectoryName->GetValue();
wxDirDialog dirDialog( this, _( "Select Output Directory" ), path );
if( dirDialog.ShowModal() == wxID_CANCEL )
return;
wxFileName dirName = wxFileName::DirName( dirDialog.GetPath() );
wxMessageDialog dialog( this, _( "Use a relative path? "),
_( "Plot Output Directory" ),
wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT );
if( dialog.ShowModal() == wxID_YES )
{
wxString boardFilePath = ( (wxFileName) m_parent->GetScreen()->GetFileName()).GetPath();
if( !dirName.MakeRelativeTo( boardFilePath ) )
wxMessageBox( _( "Cannot make path relative (target volume different from board file volume)!" ),
_( "Plot Output Directory" ), wxOK | wxICON_ERROR );
}
m_outputDirectoryName->SetValue( dirName.GetFullPath() );
}
void DIALOG_GEN_MODULE_POSITION::OnOKButton( wxCommandEvent& event )
{
m_unitsOpt = m_radioBoxUnits->GetSelection();
m_fileOpt = m_radioBoxFilesCount->GetSelection();
// Set output directory and replace backslashes with forward ones
// (Keep unix convention in cfg files)
wxString dirStr;
dirStr = m_outputDirectoryName->GetValue();
dirStr.Replace( wxT( "\\" ), wxT( "/" ) );
g_PcbPlotOptions.SetOutputDirectory( dirStr );
CreateFiles();
}
bool DIALOG_GEN_MODULE_POSITION::CreateFiles()
{
BOARD * brd = m_parent->GetBoard();
PCB_SCREEN * screen = m_parent->GetScreen();
wxFileName fn;
wxString msg;
wxString frontLayerName;
wxString backLayerName;
bool singleFile = OneFileOnly();
int fullcount = 0;
fn = screen->GetFileName();
fn.SetPath( GetOutputDirectory() );
frontLayerName = brd->GetLayerName( LAYER_N_FRONT );
backLayerName = brd->GetLayerName( LAYER_N_BACK );
// Create the the Front or Top side placement file,
// or the single file
int side = 1;
if( singleFile )
{
side = 2;
fn.SetName( fn.GetName() + wxT( "_" ) + wxT("all") );
}
else
fn.SetName( fn.GetName() + wxT( "_" ) + frontLayerName );
fn.SetExt( wxT( "pos") );
int fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(),
ForceAllSmd(), side );
if( fpcount < 0 )
{
msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) );
AddMessage( msg + wxT("\n") );
wxMessageBox( msg );
return false;
}
if( fpcount == 0)
{
wxMessageBox( _( "No modules for automated placement." ) );
return false;
}
if( singleFile )
msg.Printf( _( "Place file: %s\n" ), GetChars( fn.GetFullPath() ) );
else
msg.Printf( _( "Component side place file: %s\n" ), GetChars( fn.GetFullPath() ) );
AddMessage( msg );
msg.Printf( _( "Footprint count %d\n" ), fpcount );
AddMessage( msg );
if( singleFile )
return true;
// Create the Back or Bottom side placement file
fullcount = fpcount;
side = 0;
fn = screen->GetFileName();
fn.SetPath( GetOutputDirectory() );
fn.SetName( fn.GetName() + wxT( "_" ) + backLayerName );
fn.SetExt( wxT( "pos" ) );
fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(),
ForceAllSmd(), side );
if( fpcount < 0 )
{
msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) );
AddMessage( msg + wxT("\n") );
wxMessageBox( msg );
return false;
}
// Display results
if( !singleFile )
{
msg.Printf( _( "Copper side place file: %s\n" ), GetChars( fn.GetFullPath() ) );
AddMessage( msg );
msg.Printf( _( "Footprint count %d\n" ), fpcount );
AddMessage( msg );
}
if( !singleFile )
{
fullcount += fpcount;
msg.Printf( _( "Full footprint count %d\n" ), fullcount );
AddMessage( msg );
}
return true;
}
// Defined values to write coordinates using inches or mm:
static const double conv_unit_inch = 0.0001; // units = INCHES
static const char unit_text_inch[] = "## Unit = inches, Angle = deg.\n";
static const double conv_unit_mm = 0.00254; // units = mm
static const char unit_text_mm[] = "## Unit = mm, Angle = deg.\n";
static wxPoint File_Place_Offset; // Offset coordinates for generated file. static wxPoint File_Place_Offset; // Offset coordinates for generated file.
static void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile ); static void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile,
double aConvUnit );
// Sort function use by GenereModulesPosition() // Sort function use by GenereModulesPosition()
static int ListeModCmp( const void* o1, const void* o2 ) // sort is made by side (layer) top layer first
// then by reference increasing order
static bool sortFPlist( const LIST_MOD& ref, const LIST_MOD& tst )
{ {
LIST_MOD* ref = (LIST_MOD*) o1; if( ref.m_Layer == tst.m_Layer )
LIST_MOD* cmp = (LIST_MOD*) o2; return StrNumCmp( ref.m_Reference, tst.m_Reference, 16 ) < 0;
return StrNumCmp( ref->m_Reference, cmp->m_Reference, 16 ); return ref.m_Layer > tst.m_Layer;
} }
#if defined(DEBUG)
/** /**
* Function HasNonSMDPins * Helper function HasNonSMDPins
* returns true if the given module has any non smd pins, such as through hole * returns true if the given module has any non smd pins, such as through hole
* and therefore cannot be placed automatically. * and therefore cannot be placed automatically.
*/ */
...@@ -76,24 +318,24 @@ static bool HasNonSMDPins( MODULE* aModule ) ...@@ -76,24 +318,24 @@ static bool HasNonSMDPins( MODULE* aModule )
return false; return false;
} }
#endif void PCB_EDIT_FRAME::GenFootprintsPositionFile( wxCommandEvent& event )
{
DIALOG_GEN_MODULE_POSITION dlg( this );
dlg.ShowModal();
}
void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) /*
* Creates a footprint position file
* aSide = 0 -> Back (bottom) side)
* aSide = 1 -> Front (top) side)
* aSide = 2 -> both sides
*/
int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
bool aUnitsMM,
bool aForceSmdItems, int aSide )
{ {
bool doBoardBack = false;
MODULE* module; MODULE* module;
LIST_MOD* list = NULL;
char line[1024]; char line[1024];
wxFileName fnFront;
wxFileName fnBack;
wxString msg;
wxString frontLayerName;
wxString backLayerName;
wxString Title;
FILE* fpFront = 0;
FILE* fpBack = 0;
bool switchedLocale = false;
File_Place_Offset = GetOriginAxisPosition(); File_Place_Offset = GetOriginAxisPosition();
...@@ -102,6 +344,14 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) ...@@ -102,6 +344,14 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event )
for( module = GetBoard()->m_Modules; module; module = module->Next() ) for( module = GetBoard()->m_Modules; module; module = module->Next() )
{ {
if( aSide < 2 )
{
if( module->GetLayer() == LAYER_N_BACK && aSide == 1)
continue;
if( module->GetLayer() == LAYER_N_FRONT && aSide == 0)
continue;
}
if( module->m_Attributs & MOD_VIRTUAL ) if( module->m_Attributs & MOD_VIRTUAL )
{ {
D( printf( "skipping module %s because it's virtual\n", D( printf( "skipping module %s because it's virtual\n",
...@@ -111,142 +361,88 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) ...@@ -111,142 +361,88 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event )
if( ( module->m_Attributs & MOD_CMS ) == 0 ) if( ( module->m_Attributs & MOD_CMS ) == 0 )
{ {
#if 1 && defined(DEBUG) // enable this code to fix a bunch of mis-labeled modules: if( aForceSmdItems ) // true to fix a bunch of mis-labeled modules:
{
if( !HasNonSMDPins( module ) ) if( !HasNonSMDPins( module ) )
{ {
// all module's pins are SMD, mark the part for pick and place // all module's pins are SMD, mark the part for pick and place
module->m_Attributs |= MOD_CMS; module->m_Attributs |= MOD_CMS;
OnModify();
} }
else else
{ {
printf( "skipping %s because its attribute is not CMS and it has non SMD pins\n", D(printf( "skipping %s because its attribute is not CMS and it has non SMD pins\n",
TO_UTF8(module->GetReference()) ); TO_UTF8(module->GetReference()) ) );
continue; continue;
} }
#else }
continue; continue;
#endif
} }
if( module->GetLayer() == LAYER_N_BACK )
doBoardBack = true;
moduleCount++; moduleCount++;
} }
if( moduleCount == 0 ) FILE * file = wxFopen( aFullFileName, wxT( "wt" ) );
{ if( file == NULL )
DisplayError( this, _( "No modules for automated placement." ) ); return -1;
return;
}
wxString boardFilePath = ( (wxFileName) GetScreen()->GetFileName()).GetPath();
wxDirDialog dirDialog( this, _( "Select Output Directory" ), boardFilePath );
if( dirDialog.ShowModal() == wxID_CANCEL )
return;
fnFront = GetScreen()->GetFileName(); // Select units:
fnFront.SetPath( dirDialog.GetPath() ); double conv_unit = aUnitsMM ? conv_unit_mm : conv_unit_inch;
frontLayerName = GetBoard()->GetLayerName( LAYER_N_FRONT ); const char *unit_text = aUnitsMM ? unit_text_mm : unit_text_inch;
fnFront.SetName( fnFront.GetName() + wxT( "_" ) + frontLayerName );
fnFront.SetExt( wxT( "pos") );
fpFront = wxFopen( fnFront.GetFullPath(), wxT( "wt" ) );
if( fpFront == 0 ) // Build and sort the list of modules alphabetically
{ std::vector<LIST_MOD> list;
msg = _( "Unable to create " ) + fnFront.GetFullPath(); list.reserve(moduleCount);
DisplayError( this, msg ); for( module = GetBoard()->m_Modules; module; module = module->Next() )
goto exit;
}
if( doBoardBack )
{ {
fnBack = GetScreen()->GetFileName(); if( aSide < 2 )
fnBack.SetPath( dirDialog.GetPath() );
backLayerName = GetBoard()->GetLayerName( LAYER_N_BACK );
fnBack.SetName( fnBack.GetName() + wxT( "_" ) + backLayerName );
fnBack.SetExt( wxT( "pos" ) );
fpBack = wxFopen( fnBack.GetFullPath(), wxT( "wt" ) );
if( fpBack == 0 )
{ {
msg = _( "Unable to create " ) + fnBack.GetFullPath(); if( module->GetLayer() == LAYER_N_BACK && aSide == 1)
DisplayError( this, msg ); continue;
goto exit; if( module->GetLayer() == LAYER_N_FRONT && aSide == 0)
} continue;
} }
// Switch the locale to standard C (needed to print floating point
// numbers like 1.3)
SetLocaleTo_C_standard( );
switchedLocale = true;
// Display results
ClearMsgPanel();
AppendMsgPanel( _( "Component side place file:" ), fnFront.GetFullPath(), BLUE );
if( doBoardBack )
AppendMsgPanel( _( "Copper side place file:" ), fnBack.GetFullPath(), BLUE );
msg.Empty(); msg << moduleCount;
AppendMsgPanel( _( "Module count" ), msg, RED );
// Sort the list of modules alphabetically
list = new LIST_MOD[moduleCount];
module = GetBoard()->m_Modules;
for( int ii = 0; module; module = module->Next() )
{
if( module->m_Attributs & MOD_VIRTUAL ) if( module->m_Attributs & MOD_VIRTUAL )
continue; continue;
if( (module->m_Attributs & MOD_CMS) == 0 ) if( (module->m_Attributs & MOD_CMS) == 0 )
continue; continue;
LIST_MOD item;
list[ii].m_Module = module; item.m_Module = module;
list[ii].m_Reference = module->m_Reference->m_Text; item.m_Reference = module->m_Reference->m_Text;
list[ii].m_Value = module->m_Value->m_Text; item.m_Value = module->m_Value->m_Text;
ii++; item.m_Layer = module->GetLayer();
list.push_back( item );
} }
qsort( list, moduleCount, sizeof(LIST_MOD), ListeModCmp ); if( moduleCount > 1 )
sort( list.begin(), list.end(), sortFPlist );
wxString frontLayerName = GetBoard()->GetLayerName( LAYER_N_FRONT );
wxString backLayerName = GetBoard()->GetLayerName( LAYER_N_BACK );
// Switch the locale to standard C (needed to print floating point
// numbers like 1.3)
SetLocaleTo_C_standard( );
// Write file header // Write file header
sprintf( line, "### Module positions - created on %s ###\n", TO_UTF8( DateAndTime() ) ); sprintf( line, "### Module positions - created on %s ###\n", TO_UTF8( DateAndTime() ) );
fputs( line, fpFront ); fputs( line, file );
if( doBoardBack )
fputs( line, fpBack );
Title = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); wxString Title = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion();
sprintf( line, "### Printed by Pcbnew version %s\n", TO_UTF8( Title ) ); sprintf( line, "### Printed by Pcbnew version %s\n", TO_UTF8( Title ) );
fputs( line, fpFront ); fputs( line, file );
if( doBoardBack )
fputs( line, fpBack );
fputs( unit_text, fpFront );
if( doBoardBack ) fputs( unit_text, file );
fputs( line, fpBack );
sprintf( line, "## Side : %s\n", TO_UTF8( frontLayerName ) ); sprintf( line, "## Side : %s\n",
fputs( line, fpFront ); ( aSide < 2 ) ? TO_UTF8( frontLayerName ) : "All" );
fputs( line, file );
if( doBoardBack )
{
sprintf( line, "## Side : %s\n", TO_UTF8( backLayerName ) );
fputs( line, fpBack );
}
sprintf( line, sprintf( line,
"# Ref Val PosX PosY Rot Side\n" ); "# Ref Val PosX PosY Rot Side\n" );
fputs( line, fpFront ); fputs( line, file );
if( doBoardBack )
fputs( line, fpBack );
for( int ii = 0; ii < moduleCount; ii++ ) for( int ii = 0; ii < moduleCount; ii++ )
{ {
...@@ -256,8 +452,7 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) ...@@ -256,8 +452,7 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event )
sprintf( line, "%-8.8s %-16.16s ", TO_UTF8( ref ), TO_UTF8( val ) ); sprintf( line, "%-8.8s %-16.16s ", TO_UTF8( ref ), TO_UTF8( val ) );
module_pos = list[ii].m_Module->m_Pos; module_pos = list[ii].m_Module->m_Pos;
module_pos.x -= File_Place_Offset.x; module_pos -= File_Place_Offset;
module_pos.y -= File_Place_Offset.y;
char* text = line + strlen( line ); char* text = line + strlen( line );
sprintf( text, " %9.4f %9.4f %8.1f ", sprintf( text, " %9.4f %9.4f %8.1f ",
...@@ -273,82 +468,78 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event ) ...@@ -273,82 +468,78 @@ void PCB_EDIT_FRAME::GenModulesPosition( wxCommandEvent& event )
{ {
strcat( line, TO_UTF8( frontLayerName ) ); strcat( line, TO_UTF8( frontLayerName ) );
strcat( line, "\n" ); strcat( line, "\n" );
fputs( line, fpFront ); fputs( line, file );
} }
else if( layer == LAYER_N_BACK ) else if( layer == LAYER_N_BACK )
{ {
strcat( line, TO_UTF8( backLayerName ) ); strcat( line, TO_UTF8( backLayerName ) );
strcat( line, "\n" ); strcat( line, "\n" );
fputs( line, fpBack ); fputs( line, file );
} }
} }
// Write EOF // Write EOF
fputs( "## End\n", fpFront ); fputs( "## End\n", file );
if( doBoardBack ) SetLocaleTo_Default( ); // revert to the current locale
fputs( "## End\n", fpBack );
msg = _( "Module position files created:" ); fclose( file );
msg.Append( wxT( "\n\n" ) + frontLayerName + wxT( ":\n" ) ); return moduleCount;
msg.Append( fnFront.GetFullPath() ); }
if( doBoardBack )
{
msg.Append( wxT( "\n\n" ) + backLayerName + wxT( ":\n" ) );
msg.Append( fnBack.GetFullPath() );
}
wxMessageBox( msg, _( "Module Position File" ), wxICON_INFORMATION ); void PCB_EDIT_FRAME::GenFootprintsReport( wxCommandEvent& event )
{
wxFileName fn;
exit: // the only safe way out of here, no returns please. wxString boardFilePath = ( (wxFileName) GetScreen()->GetFileName()).GetPath();
wxDirDialog dirDialog( this, _( "Select Output Directory" ), boardFilePath );
if( list ) if( dirDialog.ShowModal() == wxID_CANCEL )
delete[] list; return;
if( switchedLocale ) fn = GetScreen()->GetFileName();
SetLocaleTo_Default( ); // revert to the current locale fn.SetPath( dirDialog.GetPath() );
fn.SetExt( wxT( "rpt" ) );
if( fpFront ) bool success = DoGenFootprintsReport( fn.GetFullPath(), false );
fclose( fpFront );
if( fpBack ) wxString msg;
fclose( fpBack ); if( success )
} {
msg.Printf( _( "Module report file created:\n%s" ),
GetChars( fn.GetFullPath() ) );
wxMessageBox( msg, _( "Module Report" ), wxICON_INFORMATION );
}
else
{
msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) );
DisplayError( this, msg );
}
}
/* Print a module report. /* Print a module report.
*/ */
void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) bool PCB_EDIT_FRAME::DoGenFootprintsReport( const wxString& aFullFilename, bool aUnitsMM )
{ {
MODULE* Module; MODULE* Module;
D_PAD* pad; D_PAD* pad;
char line[1024]; char line[1024];
wxFileName fn;
wxString fnFront, msg; wxString fnFront, msg;
FILE* rptfile; FILE* rptfile;
wxPoint module_pos; wxPoint module_pos;
File_Place_Offset = wxPoint( 0, 0 ); File_Place_Offset = wxPoint( 0, 0 );
wxString boardFilePath = ( (wxFileName) GetScreen()->GetFileName()).GetPath(); rptfile = wxFopen( aFullFilename, wxT( "wt" ) );
wxDirDialog dirDialog( this, _( "Select Output Directory" ), boardFilePath );
if( dirDialog.ShowModal() == wxID_CANCEL )
return;
fn = GetScreen()->GetFileName();
fn.SetPath( dirDialog.GetPath() );
fn.SetExt( wxT( "rpt" ) );
rptfile = wxFopen( fn.GetFullPath(), wxT( "wt" ) );
if( rptfile == NULL ) if( rptfile == NULL )
{ return false;
msg = _( "Unable to create " ) + fn.GetFullPath();
DisplayError( this, msg ); // Select units:
return; double conv_unit = aUnitsMM ? conv_unit_mm : conv_unit_inch;
} const char *unit_text = aUnitsMM ? unit_text_mm : unit_text_inch;
// Switch the locale to standard C (needed to print floating point // Switch the locale to standard C (needed to print floating point
// numbers like 1.3) // numbers like 1.3)
...@@ -489,7 +680,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) ...@@ -489,7 +680,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event )
if( ( (DRAWSEGMENT*) PtStruct )->GetLayer() != EDGE_N ) if( ( (DRAWSEGMENT*) PtStruct )->GetLayer() != EDGE_N )
continue; continue;
WriteDrawSegmentPcb( (DRAWSEGMENT*) PtStruct, rptfile ); WriteDrawSegmentPcb( (DRAWSEGMENT*) PtStruct, rptfile, conv_unit );
} }
// Generate EOF. // Generate EOF.
...@@ -497,10 +688,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) ...@@ -497,10 +688,7 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event )
fclose( rptfile ); fclose( rptfile );
SetLocaleTo_Default( ); // revert to the current locale SetLocaleTo_Default( ); // revert to the current locale
msg = _( "Module report file created:" ); return true;
msg.Append( wxT( "\n" ) + fn.GetFullPath() );
wxMessageBox( msg, _( "Module Report" ), wxICON_INFORMATION );
} }
...@@ -510,19 +698,19 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event ) ...@@ -510,19 +698,19 @@ void PCB_EDIT_FRAME::GenModuleReport( wxCommandEvent& event )
* Circle * Circle
* Arc * Arc
*/ */
void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile ) void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile, double aConvUnit )
{ {
double ux0, uy0, dx, dy; double ux0, uy0, dx, dy;
double radius, width; double radius, width;
char line[1024]; char line[1024];
ux0 = PtDrawSegment->GetStart().x * conv_unit; ux0 = PtDrawSegment->GetStart().x * aConvUnit;
uy0 = PtDrawSegment->GetStart().y * conv_unit; uy0 = PtDrawSegment->GetStart().y * aConvUnit;
dx = PtDrawSegment->GetEnd().x * conv_unit; dx = PtDrawSegment->GetEnd().x * aConvUnit;
dy = PtDrawSegment->GetEnd().y * conv_unit; dy = PtDrawSegment->GetEnd().y * aConvUnit;
width = PtDrawSegment->GetWidth() * conv_unit; width = PtDrawSegment->GetWidth() * aConvUnit;
switch( PtDrawSegment->GetShape() ) switch( PtDrawSegment->GetShape() )
{ {
...@@ -550,7 +738,7 @@ void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile ) ...@@ -550,7 +738,7 @@ void WriteDrawSegmentPcb( DRAWSEGMENT* PtDrawSegment, FILE* rptfile )
fprintf( rptfile, "$ARC \n" ); fprintf( rptfile, "$ARC \n" );
fprintf( rptfile, "centre %.6lf %.6lf\n", ux0, uy0 ); fprintf( rptfile, "centre %.6lf %.6lf\n", ux0, uy0 );
fprintf( rptfile, "start %.6lf %.6lf\n", fprintf( rptfile, "start %.6lf %.6lf\n",
endx * conv_unit, endy * conv_unit ); endx * aConvUnit, endy * aConvUnit );
fprintf( rptfile, "end %.6lf %.6lf\n", dx, dy ); fprintf( rptfile, "end %.6lf %.6lf\n", dx, dy );
fprintf( rptfile, "width %.6lf\n", width ); fprintf( rptfile, "width %.6lf\n", width );
fprintf( rptfile, "$EndARC \n" ); fprintf( rptfile, "$EndARC \n" );
......
...@@ -127,18 +127,24 @@ void PCB_EDIT_FRAME::ReCreateMenuBar() ...@@ -127,18 +127,24 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
/* Fabrication Outputs submenu */ /* Fabrication Outputs submenu */
wxMenu* fabricationOutputsMenu = new wxMenu; wxMenu* fabricationOutputsMenu = new wxMenu;
AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_POS_MODULES_FILE, AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_POS_MODULES_FILE,
_( "&Modules Position File" ), _( "&Modules Position (.pos) File" ),
_( "Generate modules position file for pick and place" ), _( "Generate modules position file for pick and place" ),
KiBitmap( post_compo_xpm ) ); KiBitmap( post_compo_xpm ) );
AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_DRILL_FILE, AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_DRILL_FILE,
_( "&Drill File" ), _( "&Drill (.drl) File" ),
_( "Generate excellon2 drill file" ), _( "Generate excellon2 drill file" ),
KiBitmap( post_drill_xpm ) ); KiBitmap( post_drill_xpm ) );
// Module Report
AddMenuItem( fabricationOutputsMenu, ID_GEN_EXPORT_FILE_MODULE_REPORT,
_( "&Module (.rpt) Report" ),
_( "Create a report of all modules on the current board" ),
KiBitmap( tools_xpm ) );
// Component File // Component File
AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_CMP_FILE, AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_CMP_FILE,
_( "&Component File" ), _( "&Component (.cmp) File" ),
_( "(Re)create components file (*.cmp) for CvPcb" ), _( "(Re)create components file (*.cmp) for CvPcb" ),
KiBitmap( create_cmp_file_xpm ) ); KiBitmap( create_cmp_file_xpm ) );
...@@ -146,7 +152,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar() ...@@ -146,7 +152,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_BOM_FILE_FROM_BOARD, AddMenuItem( fabricationOutputsMenu, ID_PCB_GEN_BOM_FILE_FROM_BOARD,
_( "&BOM File" ), _( "&BOM File" ),
_( "Create a bill of materials from schematic" ), _( "Create a bill of materials from schematic" ),
KiBitmap( tools_xpm ) ); KiBitmap( bom_xpm ) );
// Fabrications Outputs submenu append // Fabrications Outputs submenu append
AddMenuItem( filesMenu, fabricationOutputsMenu, AddMenuItem( filesMenu, fabricationOutputsMenu,
...@@ -183,12 +189,6 @@ void PCB_EDIT_FRAME::ReCreateMenuBar() ...@@ -183,12 +189,6 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
_( "&GenCAD" ), _( "Export GenCAD format" ), _( "&GenCAD" ), _( "Export GenCAD format" ),
KiBitmap( export_xpm ) ); KiBitmap( export_xpm ) );
// Module Report
AddMenuItem( submenuexport, ID_GEN_EXPORT_FILE_MODULE_REPORT,
_( "&Module Report" ),
_( "Create a report of all modules on the current board" ),
KiBitmap( tools_xpm ) );
// VRML // VRML
AddMenuItem( submenuexport, ID_GEN_EXPORT_FILE_VRML, AddMenuItem( submenuexport, ID_GEN_EXPORT_FILE_VRML,
_( "&VRML" ), _( "&VRML" ),
......
...@@ -94,7 +94,7 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME ) ...@@ -94,7 +94,7 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
EVT_MENU( ID_GEN_EXPORT_SPECCTRA, PCB_EDIT_FRAME::ExportToSpecctra ) EVT_MENU( ID_GEN_EXPORT_SPECCTRA, PCB_EDIT_FRAME::ExportToSpecctra )
EVT_MENU( ID_GEN_EXPORT_FILE_GENCADFORMAT, PCB_EDIT_FRAME::ExportToGenCAD ) EVT_MENU( ID_GEN_EXPORT_FILE_GENCADFORMAT, PCB_EDIT_FRAME::ExportToGenCAD )
EVT_MENU( ID_GEN_EXPORT_FILE_MODULE_REPORT, PCB_EDIT_FRAME::GenModuleReport ) EVT_MENU( ID_GEN_EXPORT_FILE_MODULE_REPORT, PCB_EDIT_FRAME::GenFootprintsReport )
EVT_MENU( ID_GEN_EXPORT_FILE_VRML, PCB_EDIT_FRAME::OnExportVRML ) EVT_MENU( ID_GEN_EXPORT_FILE_VRML, PCB_EDIT_FRAME::OnExportVRML )
EVT_MENU( ID_GEN_IMPORT_SPECCTRA_SESSION,PCB_EDIT_FRAME::ImportSpecctraSession ) EVT_MENU( ID_GEN_IMPORT_SPECCTRA_SESSION,PCB_EDIT_FRAME::ImportSpecctraSession )
...@@ -127,7 +127,7 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME ) ...@@ -127,7 +127,7 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, PCB_EDIT_FRAME::SetLanguage ) EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, PCB_EDIT_FRAME::SetLanguage )
// menu Postprocess // menu Postprocess
EVT_MENU( ID_PCB_GEN_POS_MODULES_FILE, PCB_EDIT_FRAME::GenModulesPosition ) EVT_MENU( ID_PCB_GEN_POS_MODULES_FILE, PCB_EDIT_FRAME::GenFootprintsPositionFile )
EVT_MENU( ID_PCB_GEN_DRILL_FILE, PCB_EDIT_FRAME::InstallDrillFrame ) EVT_MENU( ID_PCB_GEN_DRILL_FILE, PCB_EDIT_FRAME::InstallDrillFrame )
EVT_MENU( ID_PCB_GEN_CMP_FILE, PCB_EDIT_FRAME::RecreateCmpFileFromBoard ) EVT_MENU( ID_PCB_GEN_CMP_FILE, PCB_EDIT_FRAME::RecreateCmpFileFromBoard )
EVT_MENU( ID_PCB_GEN_BOM_FILE_FROM_BOARD, PCB_EDIT_FRAME::RecreateBOMFileFromBoard ) EVT_MENU( ID_PCB_GEN_BOM_FILE_FROM_BOARD, PCB_EDIT_FRAME::RecreateBOMFileFromBoard )
......
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