Commit 4a26d543 authored by jean-pierre charras's avatar jean-pierre charras

Pcbnew: Add a minimal test for illegal chars in footprints libname (like space and dir separtor)

Also a minor cosmetic enhancement
parent 926dec84
......@@ -338,6 +338,7 @@ set( BMAPS_MID
library_browse
library_update
library
library_table
libview
lines90
load_module_board
......
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x07, 0x23, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x96, 0x7b, 0x54, 0xd3,
0xe7, 0x19, 0xc7, 0xdb, 0xd5, 0xe3, 0x15, 0xaa, 0x56, 0xc5, 0xaa, 0xd8, 0xd3, 0xa1, 0x96, 0xe3,
0xac, 0x1b, 0xab, 0x0e, 0x37, 0xaa, 0xc7, 0x3f, 0x56, 0x0f, 0x1e, 0x14, 0x87, 0xce, 0xb5, 0x74,
0x55, 0xab, 0xab, 0x07, 0x44, 0x01, 0x15, 0xbc, 0x50, 0x04, 0x8b, 0xee, 0x0c, 0x25, 0x45, 0x24,
0x96, 0x06, 0x42, 0x0c, 0x98, 0x18, 0x48, 0x0c, 0x01, 0x12, 0x08, 0xb9, 0x10, 0x48, 0x42, 0x82,
0x5c, 0xe4, 0x96, 0x04, 0x85, 0x04, 0x73, 0xbf, 0x08, 0xed, 0x8a, 0xd5, 0x01, 0x56, 0x87, 0xc9,
0xb3, 0xe7, 0x65, 0xc5, 0x23, 0xa5, 0x87, 0xda, 0xfe, 0xce, 0x79, 0xc8, 0x8f, 0x5f, 0x9e, 0xf7,
0xf7, 0x79, 0x9f, 0xdb, 0xf7, 0xcd, 0x4b, 0x00, 0xf0, 0xd2, 0xb8, 0xe1, 0x35, 0x6f, 0xce, 0x9c,
0x39, 0x54, 0xb4, 0xf7, 0xf0, 0xfe, 0x57, 0xcf, 0x7f, 0xf7, 0x73, 0x0c, 0xaf, 0xe5, 0xfe, 0xfe,
0xfe, 0xa7, 0xe6, 0xcd, 0x9b, 0x97, 0xf4, 0xec, 0x19, 0xf9, 0x33, 0x73, 0xe6, 0xcc, 0xa0, 0xd9,
0xb3, 0x67, 0x47, 0xa1, 0xc3, 0xda, 0x90, 0x90, 0x90, 0x2f, 0xa3, 0xa3, 0xa3, 0xe9, 0xe8, 0x94,
0x3d, 0x7d, 0xfa, 0xf4, 0xb7, 0x7f, 0x26, 0xe0, 0x0d, 0x04, 0x9c, 0x5e, 0xb6, 0x6c, 0x19, 0xed,
0xe0, 0xc1, 0x83, 0x37, 0xe6, 0xce, 0x9d, 0x5b, 0xbe, 0x60, 0xc1, 0x82, 0x14, 0x7c, 0x3e, 0x67,
0xcc, 0x01, 0x23, 0xf8, 0x7b, 0x78, 0x78, 0x78, 0xf1, 0xf2, 0xe5, 0xcb, 0x59, 0x6b, 0xd7, 0xae,
0xed, 0xac, 0xa8, 0xa8, 0x50, 0xde, 0xc0, 0x2b, 0x2c, 0x2c, 0x8c, 0x86, 0x8e, 0x69, 0xe8, 0xf8,
0xfa, 0x0b, 0x00, 0x52, 0x96, 0x2e, 0x5d, 0x5a, 0x1c, 0x17, 0x17, 0xa7, 0xcc, 0xcc, 0xcc, 0xbc,
0x93, 0x9a, 0x9a, 0x6a, 0xda, 0xb0, 0x61, 0x83, 0x3e, 0x30, 0x30, 0x90, 0x4e, 0xd6, 0x3f, 0x03,
0x15, 0x15, 0x15, 0xb1, 0xac, 0x56, 0xeb, 0x8d, 0x23, 0x47, 0x8e, 0xf4, 0x96, 0x95, 0x95, 0x59,
0xd2, 0xd3, 0xd3, 0xed, 0x74, 0x3a, 0xbd, 0xe7, 0xe2, 0xc5, 0x8b, 0x75, 0xb8, 0xc3, 0xfc, 0x59,
0xb3, 0x66, 0x85, 0xfe, 0x08, 0xe0, 0x65, 0x7c, 0xfe, 0x57, 0xdc, 0x4c, 0xc5, 0x81, 0x03, 0x07,
0x6e, 0x23, 0xc0, 0x74, 0xee, 0xdc, 0x39, 0x47, 0x61, 0x61, 0xa1, 0x43, 0x22, 0x91, 0x98, 0x63,
0x62, 0x62, 0xba, 0x83, 0x83, 0x83, 0x69, 0xe8, 0xb7, 0x78, 0x12, 0xe8, 0xe8, 0xd1, 0xa3, 0x7d,
0xcd, 0xcd, 0xcd, 0xae, 0x5b, 0xb7, 0x6e, 0x39, 0x79, 0x3c, 0x9e, 0x13, 0x17, 0x59, 0xaf, 0x5c,
0xb9, 0x62, 0x5c, 0xb3, 0x66, 0x4d, 0xf5, 0xfc, 0xf9, 0xf3, 0xa3, 0x9f, 0x83, 0xf8, 0x63, 0xba,
0x19, 0xa1, 0xa1, 0xa1, 0xfa, 0x9c, 0x9c, 0x1c, 0x13, 0x9b, 0xcd, 0xb6, 0x17, 0x14, 0x14, 0xb8,
0xa4, 0x52, 0xa9, 0x0d, 0xcd, 0x8e, 0x9b, 0xb5, 0x13, 0xd0, 0xaa, 0x55, 0xab, 0x08, 0x28, 0x60,
0x12, 0xe8, 0xc4, 0x89, 0x13, 0xbd, 0x7d, 0x7d, 0x7d, 0xe6, 0x9e, 0x9e, 0x1e, 0x2b, 0x01, 0x8a,
0xc5, 0x62, 0xb7, 0x40, 0x20, 0x70, 0x96, 0x97, 0x97, 0x9b, 0xb0, 0x7e, 0x7a, 0x3f, 0x3f, 0xbf,
0xdd, 0xb8, 0xf0, 0x55, 0xfc, 0x94, 0xed, 0xdd, 0xbb, 0xd7, 0x58, 0x53, 0x53, 0x63, 0x66, 0x32,
0x99, 0x4e, 0x04, 0xb9, 0xf0, 0xde, 0x51, 0x57, 0x57, 0x67, 0xd3, 0x6a, 0xb5, 0x66, 0x5c, 0x67,
0x8e, 0x8d, 0x8d, 0x35, 0xac, 0x5c, 0xb9, 0x92, 0x80, 0x16, 0x4d, 0x00, 0xd9, 0x6c, 0xb6, 0x31,
0x10, 0x01, 0xb4, 0xb7, 0xb7, 0x3b, 0x4c, 0x26, 0x93, 0xe5, 0xce, 0x9d, 0x3b, 0x56, 0xdc, 0xa1,
0xa7, 0xa4, 0xa4, 0xc4, 0xa3, 0x54, 0x2a, 0xcd, 0x2b, 0x56, 0xac, 0xe8, 0x41, 0xff, 0x6e, 0x7c,
0x89, 0x51, 0xa1, 0x50, 0x58, 0x30, 0x9a, 0x7b, 0xb8, 0x09, 0x27, 0x7e, 0x67, 0x25, 0x80, 0xda,
0xda, 0x5a, 0x9b, 0x50, 0x28, 0x74, 0x61, 0x36, 0xec, 0x87, 0x0e, 0x1d, 0x32, 0x04, 0x05, 0x05,
0x11, 0xd0, 0xc2, 0x09, 0x20, 0x87, 0xc3, 0xc1, 0x1b, 0x8f, 0x88, 0xcf, 0xe7, 0xbb, 0x55, 0x2a,
0x95, 0x9b, 0x40, 0x7b, 0x7b, 0x7b, 0x2d, 0x1a, 0x8d, 0xc6, 0x75, 0x91, 0x42, 0x79, 0x5c, 0x23,
0x95, 0x78, 0x8b, 0xae, 0x5d, 0xf3, 0x52, 0xf3, 0xbe, 0x18, 0xce, 0xce, 0xce, 0x1e, 0x20, 0x11,
0xa8, 0xd5, 0x6a, 0x0b, 0x79, 0x39, 0x36, 0x91, 0x2b, 0x3f, 0x3f, 0xdf, 0x83, 0x91, 0x59, 0x2b,
0x2b, 0x85, 0x96, 0xcc, 0x4b, 0xb4, 0x07, 0xe1, 0xdb, 0x77, 0x0a, 0x27, 0x81, 0x9c, 0x4e, 0x27,
0x6f, 0x3c, 0xa2, 0xd6, 0xd6, 0x56, 0x67, 0x55, 0x55, 0x95, 0x13, 0x17, 0x3b, 0xc9, 0x3d, 0x31,
0x99, 0x5c, 0xd6, 0x5f, 0x56, 0x2e, 0xf0, 0xe2, 0x86, 0xe0, 0xee, 0xdd, 0xbb, 0x40, 0xbf, 0xca,
0x78, 0x44, 0x00, 0xc4, 0x0f, 0xd7, 0xbb, 0x18, 0x0c, 0x86, 0xb3, 0xba, 0xba, 0xda, 0x21, 0x10,
0x54, 0x7a, 0x8a, 0x38, 0xc2, 0xc7, 0xaa, 0x36, 0x23, 0x30, 0x79, 0xd5, 0xff, 0xc9, 0xb8, 0x90,
0x17, 0x33, 0x09, 0x94, 0x9c, 0x9c, 0x3c, 0x16, 0x91, 0xd1, 0x68, 0xb4, 0x90, 0x97, 0x63, 0x54,
0x2e, 0x0e, 0x87, 0xe3, 0x6e, 0x6b, 0x6b, 0xb3, 0x63, 0x6a, 0xdc, 0x59, 0x14, 0xca, 0x60, 0x55,
0x75, 0xb5, 0xcf, 0x6c, 0x36, 0x83, 0x52, 0xa5, 0xf2, 0x72, 0xb9, 0x5c, 0x77, 0x5e, 0x5e, 0x9e,
0x1b, 0x33, 0xe0, 0x1a, 0x83, 0xd6, 0xc8, 0x3c, 0x7c, 0x51, 0xfd, 0x93, 0x9b, 0x3a, 0x0b, 0x68,
0xd1, 0xd4, 0x1d, 0x7d, 0x90, 0x4b, 0x2f, 0x55, 0x4c, 0x02, 0x25, 0x25, 0x25, 0xf5, 0x8e, 0x47,
0xa0, 0xd7, 0xeb, 0x6d, 0x57, 0x8b, 0x8b, 0x86, 0x54, 0x6a, 0x95, 0x87, 0xc5, 0x62, 0xf5, 0x63,
0x8a, 0xec, 0x58, 0x93, 0x01, 0xd6, 0x75, 0xb6, 0xd7, 0xe3, 0xf1, 0x00, 0xd6, 0x10, 0xb2, 0x28,
0x59, 0xf7, 0x09, 0xa0, 0xa1, 0xa1, 0xc1, 0x42, 0x8c, 0xcd, 0x15, 0x0e, 0x6b, 0x3a, 0x4d, 0x50,
0xdb, 0x64, 0x80, 0xda, 0x9b, 0x7a, 0x84, 0x70, 0xbe, 0xdd, 0x1a, 0x15, 0xf5, 0xe6, 0x04, 0x90,
0xdb, 0xed, 0xe6, 0x1d, 0x3f, 0x7e, 0x7c, 0x2c, 0x22, 0x6c, 0x4f, 0x17, 0xb3, 0xa8, 0xe8, 0xdf,
0xfa, 0x6e, 0x83, 0xef, 0x06, 0x9f, 0xff, 0xdf, 0xa6, 0xa6, 0x26, 0x52, 0x83, 0x7b, 0x18, 0xd1,
0x88, 0xa1, 0xbb, 0xdb, 0xf7, 0xf0, 0xe1, 0x43, 0xd0, 0xe9, 0xf5, 0x3e, 0x91, 0x48, 0xe4, 0x24,
0xdd, 0x46, 0x60, 0xc5, 0xc5, 0xc5, 0x9e, 0x82, 0x62, 0xde, 0x63, 0x79, 0x43, 0x1b, 0x08, 0x15,
0x8d, 0xc0, 0x11, 0x48, 0x46, 0xb7, 0x6e, 0xdb, 0x59, 0x43, 0xa4, 0x6d, 0x02, 0x08, 0x77, 0xc9,
0x25, 0x20, 0x12, 0x0d, 0xa9, 0x13, 0x16, 0xda, 0x2d, 0x57, 0xd4, 0x7a, 0x5d, 0x2e, 0x17, 0xa8,
0x1a, 0xd4, 0x5e, 0x89, 0x4c, 0x3a, 0x6a, 0x30, 0x18, 0x7c, 0xd8, 0x9d, 0x80, 0xa3, 0x00, 0xd8,
0x24, 0x40, 0x2f, 0x2c, 0x1c, 0xc1, 0x56, 0xb6, 0x63, 0xfa, 0x5c, 0x57, 0x59, 0xbc, 0x47, 0x72,
0x55, 0x13, 0xf0, 0x85, 0xb2, 0xa7, 0x4c, 0x36, 0xff, 0x51, 0xc6, 0x3f, 0x29, 0x9e, 0x25, 0x4b,
0x96, 0x14, 0x20, 0x68, 0xee, 0x04, 0x50, 0x7f, 0x7f, 0x3f, 0x37, 0x31, 0x31, 0xd1, 0xd8, 0xd5,
0xd5, 0x65, 0x27, 0x51, 0xe9, 0x74, 0x3a, 0x3b, 0xa6, 0xe9, 0xbb, 0x81, 0x81, 0x01, 0xb8, 0x7f,
0xff, 0x3e, 0x0c, 0x0e, 0x0e, 0x3e, 0x33, 0xb5, 0xba, 0x01, 0x2a, 0x85, 0x55, 0xd0, 0x6b, 0x34,
0xfa, 0x72, 0xa9, 0xd4, 0x61, 0x26, 0x8b, 0x3f, 0x52, 0xaf, 0x69, 0xf1, 0x55, 0x8a, 0xeb, 0x9e,
0x8a, 0xc4, 0xd2, 0x7b, 0xa5, 0xa5, 0xa5, 0x36, 0x7c, 0x97, 0xee, 0x7b, 0xd0, 0xab, 0x93, 0x40,
0xa8, 0x0c, 0xbd, 0xa4, 0xf0, 0x28, 0x75, 0xfd, 0x24, 0xaa, 0xdb, 0xb7, 0x6f, 0x5b, 0x4b, 0xb8,
0xdc, 0xef, 0x9a, 0x5b, 0x5b, 0xbc, 0x36, 0xbb, 0x1d, 0xd4, 0x0d, 0x0d, 0x5e, 0x09, 0xb6, 0xb8,
0x4e, 0x67, 0x00, 0x8d, 0xb6, 0x09, 0xaa, 0x6b, 0x14, 0x20, 0x14, 0xd7, 0x01, 0x81, 0x54, 0xc9,
0x54, 0x4f, 0xaf, 0x16, 0xb1, 0xbf, 0x21, 0x29, 0x24, 0x32, 0x76, 0xec, 0xd8, 0xb1, 0xae, 0xc5,
0x8b, 0x17, 0x13, 0x90, 0xff, 0x24, 0x50, 0x42, 0x42, 0x82, 0x91, 0xa4, 0xae, 0xa5, 0xa5, 0xc5,
0x86, 0x43, 0xe7, 0xc6, 0xb4, 0x78, 0xc8, 0xff, 0x1d, 0x1d, 0x1d, 0xf6, 0xf2, 0x8a, 0x8a, 0xaf,
0x33, 0x2f, 0x64, 0x7e, 0xfd, 0xee, 0xa6, 0x4d, 0x43, 0x35, 0x52, 0xe9, 0xd3, 0xe6, 0x96, 0x76,
0xe0, 0x0a, 0xc4, 0x04, 0x02, 0x12, 0x85, 0x06, 0x2e, 0x53, 0x69, 0xc3, 0x64, 0x50, 0x49, 0xcd,
0xb0, 0x79, 0xec, 0x04, 0x14, 0x10, 0x10, 0x40, 0x44, 0xd5, 0x6f, 0x02, 0x68, 0x68, 0x68, 0x88,
0x83, 0xb2, 0xd2, 0x93, 0x92, 0x92, 0x62, 0x44, 0xdd, 0x72, 0x90, 0x21, 0x45, 0xd0, 0xd8, 0x9c,
0x8c, 0xeb, 0x5f, 0x6e, 0x6e, 0x6e, 0xff, 0x6f, 0xfe, 0xb0, 0x65, 0x64, 0xcf, 0xa7, 0xd7, 0x1e,
0xa5, 0x65, 0x73, 0x7c, 0x4a, 0x6d, 0x2b, 0x42, 0xb4, 0xc0, 0xaf, 0xac, 0x83, 0x4e, 0x5d, 0x97,
0x37, 0xfb, 0xd2, 0xa5, 0x41, 0x54, 0x6e, 0xcb, 0xbe, 0x7d, 0xfb, 0x4c, 0x28, 0xc8, 0x37, 0xbf,
0x07, 0xfd, 0xff, 0x98, 0x40, 0xdd, 0x7a, 0x3f, 0x2a, 0x2a, 0x8a, 0x89, 0xc5, 0x67, 0x3d, 0x79,
0xf2, 0x84, 0x85, 0x6d, 0x2d, 0xa0, 0x52, 0xa9, 0x1a, 0x74, 0x36, 0xe2, 0xa4, 0xdb, 0x50, 0x56,
0xdc, 0x38, 0x4b, 0x1e, 0xac, 0x99, 0x2d, 0xfa, 0x18, 0x75, 0x78, 0xdf, 0x79, 0xa1, 0x8f, 0x5a,
0xd1, 0x0d, 0x7b, 0x32, 0x84, 0x90, 0x7a, 0x59, 0x00, 0x22, 0xb1, 0x1a, 0x1a, 0xb4, 0x3a, 0xa8,
0xad, 0xeb, 0x04, 0x6d, 0x63, 0xe3, 0x68, 0xf2, 0xc9, 0x93, 0x1d, 0x28, 0x3f, 0xec, 0xc8, 0xc8,
0x48, 0xda, 0x8c, 0x19, 0x33, 0x18, 0x08, 0x9a, 0x31, 0xae, 0xc4, 0x7e, 0xd3, 0xa6, 0x4d, 0x0b,
0x5f, 0xb4, 0x68, 0x51, 0x1a, 0x42, 0x0b, 0x37, 0x6e, 0xdc, 0x48, 0x43, 0x79, 0xb9, 0xd6, 0xd8,
0xd8, 0x58, 0x92, 0x95, 0x95, 0xd5, 0x14, 0x1f, 0x1f, 0x6f, 0xc2, 0xe8, 0x1c, 0xfb, 0x53, 0x0a,
0x86, 0xe3, 0x3e, 0x57, 0xf8, 0xf6, 0x5c, 0x50, 0xc2, 0xae, 0xf4, 0x6a, 0xf8, 0xcb, 0xa7, 0x22,
0x88, 0x4c, 0x64, 0x8c, 0x8a, 0xaa, 0xaa, 0x46, 0x95, 0xea, 0x2e, 0xa8, 0x57, 0x75, 0x81, 0x4c,
0x81, 0x40, 0x85, 0xe2, 0x41, 0x44, 0x44, 0x44, 0x12, 0xbe, 0xf7, 0x6d, 0xb4, 0xd7, 0x9e, 0x9d,
0xb0, 0x3f, 0x38, 0x63, 0x5e, 0x41, 0x0b, 0x46, 0xe0, 0x07, 0x0b, 0x17, 0x2e, 0xa4, 0xa0, 0x88,
0x16, 0xe0, 0xd9, 0x24, 0xde, 0xf2, 0x51, 0xfa, 0x37, 0x87, 0x2f, 0x2b, 0xbd, 0x04, 0x92, 0x90,
0x23, 0x83, 0x4d, 0xff, 0xb8, 0x02, 0x91, 0x27, 0x05, 0x10, 0xb2, 0xe3, 0xf4, 0x83, 0xf5, 0xeb,
0xd7, 0xab, 0x51, 0x2d, 0xbe, 0x95, 0x2b, 0x3a, 0x41, 0xae, 0xe8, 0x42, 0xeb, 0x06, 0xa9, 0x5c,
0xee, 0x3e, 0x75, 0xe6, 0xd4, 0xfa, 0x09, 0x47, 0xf9, 0x54, 0xe6, 0xff, 0xc6, 0x86, 0x75, 0xbf,
0xdb, 0x75, 0xde, 0x18, 0x43, 0x91, 0x8f, 0xfe, 0xab, 0xa4, 0x13, 0x3e, 0x63, 0xa8, 0x21, 0xec,
0xe3, 0x1c, 0xd8, 0x8e, 0x90, 0xdf, 0xee, 0x3c, 0x3f, 0xf2, 0x5a, 0xc0, 0x32, 0x72, 0x02, 0xcf,
0x4f, 0x4b, 0x4b, 0xdb, 0x2a, 0x95, 0xc9, 0xfa, 0xc5, 0xd2, 0x4e, 0xa8, 0x91, 0xe9, 0x30, 0xb2,
0x6e, 0x6c, 0x7f, 0xa1, 0x1d, 0x95, 0xe6, 0xad, 0x9f, 0x04, 0xad, 0xde, 0x9d, 0xbb, 0xe3, 0xbd,
0x84, 0xeb, 0xd6, 0xb3, 0xac, 0x4e, 0x10, 0x68, 0xac, 0x70, 0x96, 0xd9, 0x08, 0x7f, 0xda, 0x9b,
0x0d, 0xdb, 0x4e, 0x08, 0xe0, 0x9d, 0xf7, 0xb3, 0x1e, 0xf8, 0x05, 0xae, 0x0b, 0x79, 0xde, 0xff,
0xf4, 0x99, 0x33, 0x91, 0x12, 0xa9, 0x74, 0x40, 0x24, 0x6e, 0x07, 0x41, 0xe5, 0x2d, 0xc0, 0x79,
0x04, 0x9c, 0xc3, 0x9e, 0x8c, 0x8c, 0x8c, 0x69, 0x53, 0x82, 0xc2, 0x3e, 0x61, 0x68, 0x18, 0xd2,
0x3e, 0xa8, 0xef, 0xf2, 0xc0, 0x27, 0x94, 0x7a, 0x78, 0x77, 0x7f, 0x2e, 0x6c, 0x4d, 0x2e, 0x83,
0xd0, 0x8f, 0xf3, 0x9d, 0x41, 0xdb, 0x29, 0x81, 0x3f, 0xb6, 0xe6, 0x74, 0x7a, 0xea, 0x6e, 0xb1,
0x44, 0x32, 0x80, 0x02, 0x0c, 0x38, 0x4b, 0x63, 0xc2, 0x9b, 0x7c, 0x32, 0xf9, 0xc3, 0x29, 0x41,
0x7f, 0xdc, 0x4f, 0x67, 0x27, 0xd1, 0x9a, 0x60, 0xd7, 0x59, 0x09, 0x6c, 0x8e, 0xa1, 0xc3, 0xe6,
0xf8, 0x52, 0xd8, 0x72, 0x94, 0xd7, 0x1f, 0xb4, 0x23, 0x7b, 0xf5, 0x54, 0xeb, 0x52, 0xd3, 0x53,
0x3f, 0x14, 0x54, 0x94, 0x7f, 0x85, 0x87, 0x21, 0xb0, 0x39, 0x9c, 0xaf, 0x0e, 0x1f, 0x3e, 0xfc,
0xfa, 0x94, 0xa0, 0x95, 0x3b, 0x3e, 0x0f, 0x8e, 0x38, 0x5e, 0xe2, 0xd8, 0x8d, 0x1d, 0xb6, 0x29,
0xee, 0x3a, 0x6c, 0x4b, 0x11, 0xfb, 0x56, 0xff, 0xed, 0x0b, 0xda, 0x8b, 0xfc, 0xf4, 0xc2, 0x4e,
0xfd, 0x35, 0xa6, 0xf2, 0xb3, 0xd8, 0xc4, 0xd8, 0x55, 0x2f, 0xd4, 0x0c, 0x6f, 0xed, 0xbc, 0xb4,
0x79, 0xdd, 0x9e, 0x2f, 0x55, 0x7f, 0x8e, 0x2f, 0x71, 0xfc, 0xfe, 0xa3, 0x02, 0xe9, 0x9b, 0x11,
0x17, 0xa6, 0xff, 0x92, 0x1f, 0x95, 0xff, 0x03, 0x8b, 0xa9, 0x94, 0x7e, 0x43, 0x32, 0xbc, 0xfa,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE library_table_xpm[1] = {{ png, sizeof( png ), "library_table_xpm" }};
//EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="48"
height="48"
id="svg2"
inkscape:version="0.48.2 r9819"
sodipodi:docname="library_table.svg">
<metadata
id="metadata166">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</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="977"
id="namedview164"
showgrid="false"
inkscape:zoom="6.9532166"
inkscape:cx="47.631222"
inkscape:cy="0.72269904"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective51" />
<linearGradient
id="linearGradient6881-1">
<stop
id="stop6883-0"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop6885-3"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
x1="14.462892"
y1="12.284524"
x2="34.534348"
y2="39.684914"
id="linearGradient4064"
xlink:href="#linearGradient3264-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.92673346,0,0,0.8449938,4.7270711,52.187103)" />
<linearGradient
id="linearGradient3264-3">
<stop
id="stop3266-9"
style="stop-color:#c9c9c9;stop-opacity:1"
offset="0" />
<stop
id="stop3276-4"
style="stop-color:#f8f8f8;stop-opacity:1"
offset="0.25" />
<stop
id="stop3272-8"
style="stop-color:#e2e2e2;stop-opacity:1"
offset="0.5" />
<stop
id="stop3274-1"
style="stop-color:#b0b0b0;stop-opacity:1"
offset="0.75" />
<stop
id="stop3268-2"
style="stop-color:#c9c9c9;stop-opacity:1"
offset="1" />
</linearGradient>
<radialGradient
id="a"
gradientUnits="userSpaceOnUse"
cy="39.125"
cx="24.812"
gradientTransform="matrix(1,0,0,0.37456,0,24.47)"
r="17.688">
<stop
offset="0"
id="stop3115" />
<stop
stop-opacity="0"
offset="1"
id="stop3117" />
</radialGradient>
<radialGradient
id="radialGradient3213"
gradientUnits="userSpaceOnUse"
cy="39.125"
cx="24.812"
gradientTransform="matrix(1,0,0,0.37456,0,24.47)"
r="17.688">
<stop
offset="0"
id="stop3215" />
<stop
stop-opacity="0"
offset="1"
id="stop3217" />
</radialGradient>
<linearGradient
id="i"
y2="6.7758002"
gradientUnits="userSpaceOnUse"
x2="20.631001"
gradientTransform="matrix(0.87827,0,0,0.87827,56.157,5.6701)"
y1="42.254002"
x1="19.648001">
<stop
stop-color="#b6b6b6"
offset="0"
id="stop3120" />
<stop
stop-color="#f2f2f2"
offset=".5"
id="stop3122" />
<stop
stop-color="#fafafa"
offset=".67613"
id="stop3124" />
<stop
stop-color="#d8d8d8"
offset=".84052"
id="stop3126" />
<stop
stop-color="#f2f2f2"
offset=".875"
id="stop3128" />
<stop
stop-color="#dbdbdb"
offset="1"
id="stop3130" />
</linearGradient>
<linearGradient
id="j"
y2="-4.3003001"
gradientUnits="userSpaceOnUse"
x2="25.291"
gradientTransform="matrix(0.87827,0,0,0.87827,43.255,-36.26)"
y1="-3.6324"
x1="50.153">
<stop
stop-color="#fff"
offset="0"
id="stop3133"
style="stop-color:#4754ba;stop-opacity:1;" />
<stop
offset="1"
id="stop3135" />
</linearGradient>
<linearGradient
id="k"
y2="6.6286001"
gradientUnits="userSpaceOnUse"
x2="37.535"
gradientTransform="matrix(0.87827,0,0,0.87827,56.467,6.2911)"
y1="13.603"
x1="38.228001">
<stop
stop-color="#98a0a9"
offset="0"
id="stop3138" />
<stop
stop-color="#c3d0dd"
offset="1"
id="stop3140" />
</linearGradient>
<linearGradient
id="l"
y2="9.6569004"
gradientUnits="userSpaceOnUse"
x2="40.859001"
gradientTransform="translate(53.62,0.70241)"
y1="19.822001"
x1="31.177">
<stop
stop-color="#fff"
offset="0"
id="stop3143" />
<stop
stop-color="#fff"
stop-opacity="0"
offset="1"
id="stop3145" />
</linearGradient>
<linearGradient
id="m"
y2="39.443001"
gradientUnits="userSpaceOnUse"
x2="16.915001"
gradientTransform="matrix(0.87827,0,0,0.87827,56.157,5.6701)"
y1="32.284"
x1="9.7503004">
<stop
stop-color="#3465a4"
offset="0"
id="stop3148" />
<stop
stop-color="#9fbce1"
offset="0"
id="stop3150" />
<stop
stop-color="#6b95ca"
offset="0"
id="stop3152" />
<stop
stop-color="#3d6aa5"
offset=".75"
id="stop3154" />
<stop
stop-color="#386eb4"
offset="1"
id="stop3156" />
</linearGradient>
<linearGradient
id="n"
y2="33.195"
gradientUnits="userSpaceOnUse"
x2="10.651"
gradientTransform="matrix(1.0073,-0.026365,0.026365,1.0073,55.213,0.7816)"
y1="35.688"
x1="12.005">
<stop
stop-color="#fff"
offset="0"
id="stop3159" />
<stop
stop-color="#fff"
stop-opacity="0"
offset="1"
id="stop3161" />
</linearGradient>
<linearGradient
id="o"
y2="38.268002"
gradientUnits="userSpaceOnUse"
x2="15.416"
gradientTransform="matrix(0.8781,-0.017324,0.017324,0.8781,55.783,4.7703)"
y1="36.943001"
x1="14.018">
<stop
offset="0"
id="stop3164" />
<stop
stop-opacity="0"
offset="1"
id="stop3166" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient3375"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,57.85303,42.413047)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient3379"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,57.352193,38.917708)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient3384"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.18165,43.201551)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient3387"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,55.952486,38.848313)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient3390"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.454035,43.74574)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient3393"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,71.531212,-11.419427)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient3397"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.18165,43.201551)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient3400"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.73462249,0,0,0.22498252,48.95834,67.319905)"
cx="24.812"
cy="39.125"
r="17.688" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient3403"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6599802,0,0,0.18994717,70.924877,68.226074)"
cx="24.812"
cy="39.125"
r="17.688" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient4242"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6599802,0,0,0.18994717,70.924877,68.226074)"
cx="24.812"
cy="39.125"
r="17.688" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient4244"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.18165,43.201551)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient4246"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,71.531212,-11.419427)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient4248"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.454035,43.74574)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient4250"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,55.952486,38.848313)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient4252"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.18165,43.201551)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient4254"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,57.352193,38.917708)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient4256"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,57.85303,42.413047)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient4259"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,49.080112,36.228859)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient4263"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,48.579275,32.73352)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient4268"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.408732,37.017363)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient4271"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,47.179568,32.664125)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient4274"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.681117,37.561552)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient4277"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,60.982001,-9.4669729)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient4281"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.408732,37.017363)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient4284"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6599802,0,0,0.18994717,62.151959,62.041886)"
cx="24.812"
cy="39.125"
r="17.688" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient4387"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.73462249,0,0,0.22498252,48.95834,67.319905)"
cx="24.812"
cy="39.125"
r="17.688" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient4389"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.408732,37.017363)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient4391"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,60.982001,-9.4669729)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient4393"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.681117,37.561552)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient4395"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,47.179568,32.664125)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient4397"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,49.408732,37.017363)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient4399"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,48.579275,32.73352)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient4401"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,49.080112,36.228859)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient4404"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,58.140667,26.736849)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient4408"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,57.63983,23.24151)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient4413"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.469287,27.525353)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient4416"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,56.240123,23.172115)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient4419"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.741672,28.069542)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient4422"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,60.490409,-22.581269)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient4426"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.469287,27.525353)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<radialGradient
inkscape:collect="always"
xlink:href="#a"
id="radialGradient4429"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.73462249,0,0,0.22498252,58.018895,57.827895)"
cx="24.812"
cy="39.125"
r="17.688" />
<linearGradient
inkscape:collect="always"
xlink:href="#i"
id="linearGradient4444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.469287,27.525353)"
x1="19.648001"
y1="42.254002"
x2="20.631001"
y2="6.7758002" />
<linearGradient
inkscape:collect="always"
xlink:href="#j"
id="linearGradient4446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77064365,0,0,0.77069683,60.490409,-22.581269)"
x1="50.153"
y1="-3.6324"
x2="25.291"
y2="-4.3003001" />
<linearGradient
inkscape:collect="always"
xlink:href="#k"
id="linearGradient4448"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.741672,28.069542)"
x1="38.228001"
y1="13.603"
x2="37.535"
y2="6.6286001" />
<linearGradient
inkscape:collect="always"
xlink:href="#l"
id="linearGradient4450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.87866146,0,0,0.87631036,56.240123,23.172115)"
x1="31.177"
y1="19.822001"
x2="40.859001"
y2="9.6569004" />
<linearGradient
inkscape:collect="always"
xlink:href="#m"
id="linearGradient4452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.771702,0,0,0.7696371,58.469287,27.525353)"
x1="9.7503004"
y1="32.284"
x2="16.915001"
y2="39.443001" />
<linearGradient
inkscape:collect="always"
xlink:href="#n"
id="linearGradient4454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.88507569,-0.02310392,0.02316591,0.88270743,57.63983,23.24151)"
x1="12.005"
y1="35.688"
x2="10.651"
y2="33.195" />
<linearGradient
inkscape:collect="always"
xlink:href="#o"
id="linearGradient4456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77155263,-0.0151812,0.01522193,0.76948813,58.140667,26.736849)"
x1="14.018"
y1="36.943001"
x2="15.416"
y2="38.268002" />
</defs>
<g
id="g4358">
<g
id="g4214">
<path
inkscape:connector-curvature="0"
id="path37"
d="M 24.205623,13.245771 C 22.078215,9.4167306 9.39583,4.3848643 3.5531846,3.3700677 3.8615182,15.294128 3.8674448,21.823238 3.5489742,32.845877 c 7.6204018,1.076395 14.9876568,4.398117 20.8236988,7.682434 0,1.603634 -0.166734,-26.320439 -0.166734,-27.28254 z"
style="opacity:0.62891002;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.71034181;stroke-linejoin:round" />
<path
inkscape:connector-curvature="0"
id="path39"
d="M 24.205623,13.169921 C 29.667888,7.6779632 37.053198,5.4427758 45.5638,2.9916149 44.921992,15.747233 45.332892,22.351795 45.401247,32.618726 c -7.704049,0.09366 -15.693389,4.020064 -21.028858,7.909186 0,-0.05949 -0.166734,-26.39589 -0.166734,-27.357991 z"
style="opacity:0.62891002;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.71034181;stroke-linejoin:round" />
<path
inkscape:connector-curvature="0"
id="path49"
d="m 42.147837,7.7594024 c 0,0 -8.599528,2.2779826 -15.435832,7.6281406"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.34206837" />
<path
inkscape:connector-curvature="0"
id="path51"
d="m 41.637149,11.91919 c 0,0 -7.913177,1.333368 -14.922063,6.45366"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path53"
d="m 41.364179,15.604714 c 0,0 -7.378694,1.313647 -14.649973,6.023709"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path55"
d="m 41.368593,19.356109 c 0,0 -7.150213,0.691993 -14.653947,5.700346"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path57"
d="m 41.271737,22.48553 c -0.08334,0.01915 -6.483665,1.312011 -14.557091,5.884384"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path59"
d="m 41.632735,25.538304 c -0.08334,0.01915 -6.950324,1.41816 -14.918529,6.190978"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path61"
d="m 41.742803,28.800463 c 0,0 -7.515178,1.599962 -15.029478,6.27641"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path63"
d="M 24.264618,13.146767 C 29.077944,7.0863312 35.586698,4.0834594 43.086469,0.74684645 42.520871,13.569133 42.883001,20.130978 42.943168,30.390724 c -6.789198,0.895033 -13.82978,5.652441 -18.531721,10.096468 0,-0.05947 -0.146931,-26.378325 -0.146931,-27.340824 z"
style="opacity:0.62891002;fill:#acacac;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.60557556;stroke-linejoin:round" />
<path
inkscape:connector-curvature="0"
id="path65"
d="m 40.078632,5.8695333 c 0,0 -7.578573,3.1724969 -13.602606,9.2337707"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path67"
d="m 39.387431,13.796684 c 0,0 -6.502148,2.081131 -12.910084,7.5475"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path69"
d="m 39.303787,20.687481 c -0.07346,0.02782 -5.713653,1.986438 -12.828201,7.398594"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path71"
d="m 39.722033,26.953111 c 0,0 -6.622785,2.381658 -13.244686,7.839723"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path73"
d="m 8.6517973,7.6835522 c 0,0 7.5860617,2.2779828 13.6162567,7.6281408"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path75"
d="m 9.1048204,11.843739 c 0,0 6.9802696,1.333368 13.1627936,6.45366"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path77"
d="m 9.3452011,15.529263 c 0,0 6.5087539,1.313647 12.9228529,6.023709"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path79"
d="m 9.3412389,19.280657 c 0,0 6.3071161,0.691995 12.9263751,5.700347"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path81"
d="m 9.4270892,22.410079 c 0.073538,0.01915 5.7193738,1.312011 12.8409648,5.884383"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path83"
d="m 9.1079027,25.462454 c 0.073538,0.01915 6.1310143,1.418159 13.1601513,6.190978"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path85"
d="m 9.0101658,28.724893 c 0,0 6.6289442,1.599962 13.2578882,6.276409"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path87"
d="M 24.428394,13.071316 C 20.182559,7.0108801 14.441171,4.0080083 7.8254351,0.67139537 8.3243336,13.493682 8.0049236,20.055528 7.9517931,30.315274 c 5.9888119,0.894993 12.1995109,5.652441 16.3471689,10.096468 0,-0.05949 0.12961,-26.378326 0.12961,-27.340825 z"
style="opacity:0.62891002;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.50797832;stroke-linejoin:round" />
<path
inkscape:connector-curvature="0"
id="path89"
d="m 10.479301,5.7940822 c 0,0 6.684858,3.1724971 11.999196,9.2337708"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path91"
d="m 11.089937,13.721233 c 0,0 5.735665,2.081131 11.38812,7.547499"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path93"
d="m 11.16258,20.612029 c 0.0648,0.02782 5.040058,1.986438 11.315917,7.398594"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
<path
inkscape:connector-curvature="0"
id="path95"
d="m 10.794966,26.877659 c 0,0 5.841765,2.381658 11.683531,7.839724"
style="opacity:0.62891002;fill:none;stroke:#000000;stroke-width:0.52404034" />
</g>
</g>
<g
id="g4431"
transform="translate(-47.316231,-14.813288)">
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:url(#linearGradient4444);stroke:#676b6a;stroke-width:0.8774851;stroke-opacity:1"
d="m 71.973435,41.763556 16.688417,17.028463 c 0.675242,0.769637 2.814792,1.364503 4.244374,0 1.380465,-1.31762 1.061072,-3.174784 -0.289387,-4.521586 L 76.604112,37.145576 c 1.976989,-5.47694 -2.024348,-10.077569 -7.186484,-9.09172 l -1.10931,1.010123 3.472646,3.270916 0.192928,2.886128 -2.592755,2.36043 -3.098511,-0.340131 -3.183303,-2.982347 -1.115988,1.099682 c -0.519078,4.943529 4.663672,9.361623 9.990381,6.404251 z"
id="path3174" />
<path
inkscape:connector-curvature="0"
style="opacity:0.42613998;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.8774851"
d="m 72.158832,40.646261 16.872936,17.550744 c 0.522725,0.595794 2.178993,1.056304 3.285667,0 1.068716,-1.020026 0.821417,-2.4577 -0.224023,-3.500334 L 75.846082,37.501709 c 1.317993,-5.696018 -1.633255,-8.767485 -6.026563,-8.657596 l -0.237353,0.239566 3.16573,2.836003 0.114375,3.664554 -3.175395,2.89051 -3.727545,-0.401534 -2.791156,-2.621482 -0.309851,0.376866 c -0.274582,5.230521 5.704006,7.61058 9.300631,4.817341 z"
id="path3176" />
<rect
style="opacity:0.55416667;color:#000000;fill:none;stroke:url(#linearGradient4446);stroke-width:0.87700158;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.69889898,0.7152204,-0.71708981,0.69698078,0,0)"
rx="0.77556622"
ry="0.77561975"
height="1.8037362"
width="20.416656"
y="-26.326511"
x="80.546432"
id="rect3178" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:url(#linearGradient4448);stroke:#878f9d;stroke-width:0.8774851"
d="M 76.008248,49.571482 C 76.741052,48.94492 87.680387,37.785984 87.680387,37.785984 l 2.700918,-0.192412 4.244374,-5.868475 -3.535998,-3.141748 -5.498399,4.714024 v 2.693691 L 74.401528,47.583773 c -0.530545,0.529125 0.931557,2.564523 1.606808,1.987297 z"
id="path3180" />
<path
inkscape:connector-curvature="0"
style="opacity:0.53977003;color:#000000;fill:none;stroke:url(#linearGradient4450);stroke-width:0.8774851"
d="M 75.923897,48.660119 C 76.491512,48.173767 87.367584,37.066533 87.367584,37.066533 l 2.573248,-0.217325 3.702591,-4.961757 -2.539068,-2.233715 -4.812077,4.133994 0.136421,2.498361 -11.137913,11.647917 c -0.41167,0.410569 0.108919,1.173555 0.632865,0.725682 z"
id="path3182" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:url(#linearGradient4452);stroke:#204a87;stroke-width:0.8774851"
d="m 63.677992,61.389403 c 1.156846,1.28397 4.370198,1.864964 5.795124,-0.622101 0.62131,-1.084347 1.839829,-4.121113 7.276283,-9.000584 0.913017,-0.818623 1.880248,-2.691237 1.060281,-3.701447 l -2.122143,-2.116465 c -0.868162,-0.962014 -3.281274,-0.513299 -4.271349,0.833266 -2.951248,4.027698 -7.772727,7.233854 -8.860422,7.621096 -2.080583,0.741078 -1.84642,3.799769 -0.469926,5.254795 l 1.591607,1.731677 z"
id="path3184" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:#ffffff;stroke:#a1a1a1;stroke-width:0.87748355"
d="m 91.748745,56.482963 a 1.0610902,1.058251 0 0 1 -2.12218,0 1.0610902,1.058251 0 1 1 2.12218,0 z"
id="path3186" />
<path
inkscape:connector-curvature="0"
style="opacity:0.60227003;color:#000000;fill:#ffffff"
d="m 74.702337,47.14006 a 0.8867466,0.88437388 0 1 1 -1.773444,0 0.8867466,0.88437388 0 1 1 1.773444,0 z"
id="path3188" />
<path
inkscape:connector-curvature="0"
style="color:#000000;fill:none;stroke:url(#linearGradient4454);stroke-width:2.01338983;stroke-linecap:round;stroke-linejoin:round"
d="m 72.65264,49.13245 c 0,0 -6.299915,6.396715 -9.251426,7.481062"
id="path3190" />
<path
inkscape:connector-curvature="0"
style="opacity:0.19886002;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.8774851"
d="m 63.977616,60.403554 c 1.266414,1.529688 4.041403,1.893882 4.912771,-0.324752 0.598641,-1.524342 2.929106,-4.964999 7.202916,-8.800785 0.717787,-0.643544 1.478172,-2.115676 0.833559,-2.909788 l -1.668314,-1.663851 c -0.682492,-0.756299 -2.579574,-0.403523 -3.357805,0.65506 -2.320018,3.166284 -7.453949,7.308078 -8.69497,7.716438 -1.921457,0.632355 -1.561381,2.822859 -0.479257,3.966619 l 1.251214,1.361348 z"
id="path3192" />
<path
inkscape:connector-curvature="0"
style="opacity:0.27841001;color:#000000;fill:none;stroke:url(#linearGradient4456);stroke-width:2.01338983;stroke-linecap:round;stroke-linejoin:round"
d="m 74.537369,50.566094 c 0,0 -6.434262,5.798896 -7.832213,9.516731"
id="path3194" />
</g>
</svg>
......@@ -260,6 +260,7 @@ EXTERN_BITMAP( lib_previous_xpm )
EXTERN_BITMAP( library_browse_xpm )
EXTERN_BITMAP( library_update_xpm )
EXTERN_BITMAP( library_xpm )
EXTERN_BITMAP( library_table_xpm )
EXTERN_BITMAP( libview_xpm )
EXTERN_BITMAP( lines90_xpm )
EXTERN_BITMAP( load_module_board_xpm )
......
......@@ -139,7 +139,7 @@ MODULE::MODULE( const MODULE& aModule ) :
break;
default:
wxMessageBox( wxT( "MODULE::Copy() Internal Err: unknown type" ) );
wxLogMessage( wxT( "MODULE::Copy() Internal Err: unknown type" ) );
break;
}
}
......@@ -262,7 +262,7 @@ void MODULE::Copy( MODULE* aModule )
break;
default:
wxMessageBox( wxT( "MODULE::Copy() Internal Err: unknown type" ) );
wxLogMessage( wxT( "MODULE::Copy() Internal Err: unknown type" ) );
break;
}
}
......@@ -698,6 +698,41 @@ EDA_ITEM* MODULE::Clone() const
return new MODULE( *this );
}
/* Test for validity of the name in a library of the footprint
* ( no spaces, dir separators ... )
* return true if the given name is valid
* static function
*/
bool MODULE::IsLibNameValid( const wxString & aName )
{
const wxChar * invalids = ReturnStringLibNameInvalidChars( false );
if( aName.find_first_of( invalids ) != std::string::npos )
return false;
return true;
}
/* Test for validity of the name of a footprint to be used in a footprint library
* ( no spaces, dir separators ... )
* param bool aUserReadable = false to get the list of invalid chars
* true to get a readable form (i.e ' ' = 'space' '\t'= 'tab')
* return a constant string giving the list of invalid chars in lib name
* static function
*/
const wxChar* MODULE::ReturnStringLibNameInvalidChars( bool aUserReadable )
{
static const wxChar invalidChars[] = wxT("\t \"\\/");
static const wxChar invalidCharsReadable[] = wxT("'tab' 'space' \\ \" /");
if( aUserReadable )
return invalidCharsReadable;
else
return invalidChars;
}
#if defined(DEBUG)
......
......@@ -361,6 +361,25 @@ public:
EDA_ITEM* Clone() const;
/**
* static function IsLibNameValid
* Test for validity of a name of a footprint to be used in a footprint library
* ( no spaces, dir separators ... )
* @param aName = the name in library to validate
* @return true if the given name is valid
*/
static bool IsLibNameValid( const wxString & aName );
/**
* static function ReturnStringLibNameInvalidChars
* Test for validity of the name in a library of the footprint
* ( no spaces, dir separators ... )
* @param bool aUserReadable = false to get the list of invalid chars
* true to get a readable form (i.e ' ' = 'space' '\t'= 'tab')
* @return a constant std::string giving the list of invalid chars in lib name
*/
static const wxChar* ReturnStringLibNameInvalidChars( bool aUserReadable );
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const; // overload
#endif
......
......@@ -7,7 +7,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2011 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2012 Dick Hollenbeck, dick@softplc.com
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
*
......@@ -52,15 +52,15 @@ DIALOG_MODULE_MODULE_EDITOR::DIALOG_MODULE_MODULE_EDITOR( FOOTPRINT_EDIT_FRAME*
MODULE* aModule ) :
DIALOG_MODULE_MODULE_EDITOR_BASE( aParent )
{
m_Parent = aParent;
m_CurrentModule = aModule;
m_parent = aParent;
m_currentModule = aModule;
// Give an icon
wxIcon icon;
icon.CopyFromBitmap( KiBitmap( icon_modedit_xpm ) );
SetIcon( icon );
InitModeditProperties();
initModeditProperties();
m_sdbSizerStdButtonsOK->SetDefault();
GetSizer()->Fit( this );
GetSizer()->SetSizeHints( this );
......@@ -70,13 +70,13 @@ DIALOG_MODULE_MODULE_EDITOR::DIALOG_MODULE_MODULE_EDITOR( FOOTPRINT_EDIT_FRAME*
DIALOG_MODULE_MODULE_EDITOR::~DIALOG_MODULE_MODULE_EDITOR()
{
for( unsigned ii = 0; ii < m_Shapes3D_list.size(); ii++ )
delete m_Shapes3D_list[ii];
for( unsigned ii = 0; ii < m_shapes3D_list.size(); ii++ )
delete m_shapes3D_list[ii];
m_Shapes3D_list.clear();
m_shapes3D_list.clear();
delete m_ReferenceCopy;
delete m_ValueCopy;
delete m_referenceCopy;
delete m_valueCopy;
delete m_3D_Scale;
delete m_3D_Offset;
delete m_3D_Rotation;
......@@ -84,15 +84,15 @@ DIALOG_MODULE_MODULE_EDITOR::~DIALOG_MODULE_MODULE_EDITOR()
/********************************************************/
void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties()
/********************************************************/
{
SetFocus();
m_LastSelected3DShapeIndex = -1;
m_lastSelected3DShapeIndex = -1;
// Init 3D shape list
S3D_MASTER* draw3D = m_CurrentModule->m_3D_Drawings;
S3D_MASTER* draw3D = m_currentModule->m_3D_Drawings;
while( draw3D )
{
......@@ -100,22 +100,22 @@ void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
{
S3D_MASTER* draw3DCopy = new S3D_MASTER(NULL);
draw3DCopy->Copy( draw3D );
m_Shapes3D_list.push_back( draw3DCopy );
m_shapes3D_list.push_back( draw3DCopy );
m_3D_ShapeNameListBox->Append(draw3DCopy->m_Shape3DName);
}
draw3D = (S3D_MASTER*) draw3D->Next();
}
m_DocCtrl->SetValue( m_CurrentModule->m_Doc );
m_KeywordCtrl->SetValue( m_CurrentModule->m_KeyWord);
m_ReferenceCopy = new TEXTE_MODULE(NULL);
m_ValueCopy = new TEXTE_MODULE(NULL);
m_ReferenceCopy->Copy(m_CurrentModule->m_Reference);
m_ValueCopy->Copy(m_CurrentModule->m_Value);
m_ReferenceCtrl->SetValue( m_ReferenceCopy->m_Text );
m_ValueCtrl->SetValue( m_ValueCopy->m_Text );
m_ValueCtrl->SetValue( m_ValueCopy->m_Text );
m_FootprintNameCtrl->SetValue( m_CurrentModule->m_LibRef );
m_DocCtrl->SetValue( m_currentModule->m_Doc );
m_KeywordCtrl->SetValue( m_currentModule->m_KeyWord);
m_referenceCopy = new TEXTE_MODULE(NULL);
m_valueCopy = new TEXTE_MODULE(NULL);
m_referenceCopy->Copy(m_currentModule->m_Reference);
m_valueCopy->Copy(m_currentModule->m_Value);
m_ReferenceCtrl->SetValue( m_referenceCopy->m_Text );
m_ValueCtrl->SetValue( m_valueCopy->m_Text );
m_ValueCtrl->SetValue( m_valueCopy->m_Text );
m_FootprintNameCtrl->SetValue( m_currentModule->m_LibRef );
m_AttributsCtrl->SetItemToolTip( 0, _( "Use this attribute for most non smd components" ) );
m_AttributsCtrl->SetItemToolTip( 1,
......@@ -126,7 +126,7 @@ void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
"Use this attribute for \"virtual\" components drawn on board (like a old ISA PC bus connector)" ) );
// Controls on right side of the dialog
switch( m_CurrentModule->m_Attributs & 255 )
switch( m_currentModule->m_Attributs & 255 )
{
case 0:
m_AttributsCtrl->SetSelection( 0 );
......@@ -146,13 +146,13 @@ void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
}
m_AutoPlaceCtrl->SetSelection(
(m_CurrentModule->m_ModuleStatus & MODULE_is_LOCKED) ? 1 : 0 );
(m_currentModule->m_ModuleStatus & MODULE_is_LOCKED) ? 1 : 0 );
m_AutoPlaceCtrl->SetItemToolTip( 0, _( "Enable hotkey move commands and Auto Placement" ) );
m_AutoPlaceCtrl->SetItemToolTip( 1, _( "Disable hotkey move commands and Auto Placement" ) );
m_CostRot90Ctrl->SetValue( m_CurrentModule->m_CntRot90 );
m_CostRot90Ctrl->SetValue( m_currentModule->m_CntRot90 );
m_CostRot180Ctrl->SetValue( m_CurrentModule->m_CntRot180 );
m_CostRot180Ctrl->SetValue( m_currentModule->m_CntRot180 );
// Initialize 3D parameters
......@@ -174,28 +174,28 @@ void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
m_SolderPasteMarginUnits->SetLabel( GetUnitsLabel( g_UserUnit ) );
wxString msg;
PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_CurrentModule->GetLocalClearance() );
PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_CurrentModule->GetLocalSolderMaskMargin() );
PutValueInLocalUnits( *m_NetClearanceValueCtrl, m_currentModule->GetLocalClearance() );
PutValueInLocalUnits( *m_SolderMaskMarginCtrl, m_currentModule->GetLocalSolderMaskMargin() );
// These 2 parameters are usually < 0, so prepare entering a negative value, if current is 0
PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_CurrentModule->GetLocalSolderPasteMargin() );
PutValueInLocalUnits( *m_SolderPasteMarginCtrl, m_currentModule->GetLocalSolderPasteMargin() );
if( m_CurrentModule->GetLocalSolderPasteMargin() == 0 )
if( m_currentModule->GetLocalSolderPasteMargin() == 0 )
m_SolderPasteMarginCtrl->SetValue( wxT("-") + m_SolderPasteMarginCtrl->GetValue() );
if( m_CurrentModule->GetLocalSolderPasteMarginRatio() == 0.0 )
msg.Printf( wxT( "-%.1f" ), m_CurrentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
if( m_currentModule->GetLocalSolderPasteMarginRatio() == 0.0 )
msg.Printf( wxT( "-%.1f" ), m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
else
msg.Printf( wxT( "%.1f" ), m_CurrentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
msg.Printf( wxT( "%.1f" ), m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
m_SolderPasteMarginRatioCtrl->SetValue( msg );
// Add solder paste margin ration in per cent
// for the usual default value 0.0, display -0.0 (or -0,0 in some countries)
msg.Printf( wxT( "%.1f" ),
m_CurrentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
m_currentModule->GetLocalSolderPasteMarginRatio() * 100.0 );
if( m_CurrentModule->GetLocalSolderPasteMarginRatio() == 0.0 &&
if( m_currentModule->GetLocalSolderPasteMarginRatio() == 0.0 &&
msg[0] == '0') // Sometimes Printf adds a sign if the value is very small (0.0)
m_SolderPasteMarginRatioCtrl->SetValue( wxT("-") + msg );
else
......@@ -204,9 +204,9 @@ void DIALOG_MODULE_MODULE_EDITOR::InitModeditProperties()
// if m_3D_ShapeNameListBox is not empty, preselect first 3D shape
if( m_3D_ShapeNameListBox->GetCount() > 0 )
{
m_LastSelected3DShapeIndex = 0;
m_3D_ShapeNameListBox->SetSelection( m_LastSelected3DShapeIndex );
Transfert3DValuesToDisplay( m_Shapes3D_list[m_LastSelected3DShapeIndex] );
m_lastSelected3DShapeIndex = 0;
m_3D_ShapeNameListBox->SetSelection( m_lastSelected3DShapeIndex );
Transfert3DValuesToDisplay( m_shapes3D_list[m_lastSelected3DShapeIndex] );
}
}
......@@ -231,15 +231,15 @@ void DIALOG_MODULE_MODULE_EDITOR::Transfert3DValuesToDisplay( S3D_MASTER * aStru
}
}
/** Copy 3D info displayed in dialog box to values in a item in m_Shapes3D_list
* @param aIndexSelection = item index in m_Shapes3D_list
/** Copy 3D info displayed in dialog box to values in a item in m_shapes3D_list
* @param aIndexSelection = item index in m_shapes3D_list
*/
void DIALOG_MODULE_MODULE_EDITOR::TransfertDisplayTo3DValues( int aIndexSelection )
{
if( aIndexSelection >= (int)m_Shapes3D_list.size() )
if( aIndexSelection >= (int)m_shapes3D_list.size() )
return;
S3D_MASTER * struct3DDest = m_Shapes3D_list[aIndexSelection];
S3D_MASTER * struct3DDest = m_shapes3D_list[aIndexSelection];
struct3DDest->m_MatScale = m_3D_Scale->GetValue();
struct3DDest->m_MatRotation = m_3D_Rotation->GetValue();
struct3DDest->m_MatPosition = m_3D_Offset->GetValue();
......@@ -249,20 +249,20 @@ void DIALOG_MODULE_MODULE_EDITOR::TransfertDisplayTo3DValues( int aIndexSelectio
void DIALOG_MODULE_MODULE_EDITOR::On3DShapeNameSelected(wxCommandEvent& event)
/***********************************************************/
{
if( m_LastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_LastSelected3DShapeIndex );
m_LastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetSelection();
if( m_lastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_lastSelected3DShapeIndex );
m_lastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetSelection();
if( m_LastSelected3DShapeIndex < 0 ) // happens under wxGTK when deleting an item in m_3D_ShapeNameListBox wxListBox
if( m_lastSelected3DShapeIndex < 0 ) // happens under wxGTK when deleting an item in m_3D_ShapeNameListBox wxListBox
return;
if( m_LastSelected3DShapeIndex >= (int)m_Shapes3D_list.size() )
if( m_lastSelected3DShapeIndex >= (int)m_shapes3D_list.size() )
{
wxMessageBox(wxT("On3DShapeNameSelected() error"));
m_LastSelected3DShapeIndex = -1;
m_lastSelected3DShapeIndex = -1;
return;
}
Transfert3DValuesToDisplay( m_Shapes3D_list[m_LastSelected3DShapeIndex] );
Transfert3DValuesToDisplay( m_shapes3D_list[m_lastSelected3DShapeIndex] );
}
......@@ -270,23 +270,23 @@ void DIALOG_MODULE_MODULE_EDITOR::On3DShapeNameSelected(wxCommandEvent& event)
void DIALOG_MODULE_MODULE_EDITOR::Remove3DShape(wxCommandEvent& event)
/***********************************************************/
{
if( m_LastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_LastSelected3DShapeIndex );
if( m_lastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_lastSelected3DShapeIndex );
int ii = m_3D_ShapeNameListBox->GetSelection();
if( ii < 0 )
return;
m_Shapes3D_list.erase(m_Shapes3D_list.begin() + ii );
m_shapes3D_list.erase(m_shapes3D_list.begin() + ii );
m_3D_ShapeNameListBox->Delete(ii);
if( m_3D_ShapeNameListBox->GetCount() == 0)
Transfert3DValuesToDisplay( NULL );
else
{
m_LastSelected3DShapeIndex = 0;
m_3D_ShapeNameListBox->SetSelection(m_LastSelected3DShapeIndex);
Transfert3DValuesToDisplay( m_Shapes3D_list[m_LastSelected3DShapeIndex] );
m_lastSelected3DShapeIndex = 0;
m_3D_ShapeNameListBox->SetSelection(m_lastSelected3DShapeIndex);
Transfert3DValuesToDisplay( m_shapes3D_list[m_lastSelected3DShapeIndex] );
}
}
......@@ -348,15 +348,15 @@ void DIALOG_MODULE_MODULE_EDITOR::BrowseAndAdd3DLib( wxCommandEvent& event )
#endif
new3DShape->m_Shape3DName = shortfilename;
m_Shapes3D_list.push_back( new3DShape );
m_shapes3D_list.push_back( new3DShape );
m_3D_ShapeNameListBox->Append( shortfilename );
if( m_LastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_LastSelected3DShapeIndex );
if( m_lastSelected3DShapeIndex >= 0 )
TransfertDisplayTo3DValues( m_lastSelected3DShapeIndex );
m_LastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetCount() - 1;
m_3D_ShapeNameListBox->SetSelection(m_LastSelected3DShapeIndex);
Transfert3DValuesToDisplay( m_Shapes3D_list[m_LastSelected3DShapeIndex] );
m_lastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetCount() - 1;
m_3D_ShapeNameListBox->SetSelection(m_lastSelected3DShapeIndex);
Transfert3DValuesToDisplay( m_shapes3D_list[m_lastSelected3DShapeIndex] );
}
......@@ -368,52 +368,67 @@ void DIALOG_MODULE_MODULE_EDITOR::OnCancelClick( wxCommandEvent& event )
EndModal( -1 );
}
/******************************************************************************/
void DIALOG_MODULE_MODULE_EDITOR::OnOkClick( wxCommandEvent& event )
/******************************************************************************/
{
m_Parent->SaveCopyInUndoList( m_CurrentModule, UR_MODEDIT );
// First, test for invalid chars in module name
wxString footprintName = m_FootprintNameCtrl->GetValue();
if( ! footprintName.IsEmpty() )
{
if( ! MODULE::IsLibNameValid( footprintName ) )
{
wxString msg;
msg.Printf( _("Error:\none of invalid chars <%s> found\nin <%s>" ),
MODULE::ReturnStringLibNameInvalidChars( true ),
GetChars( footprintName ) );
DisplayError( NULL, msg );
return;
}
}
m_parent->SaveCopyInUndoList( m_currentModule, UR_MODEDIT );
if( m_AutoPlaceCtrl->GetSelection() == 1 )
m_CurrentModule->m_ModuleStatus |= MODULE_is_LOCKED;
m_currentModule->m_ModuleStatus |= MODULE_is_LOCKED;
else
m_CurrentModule->m_ModuleStatus &= ~MODULE_is_LOCKED;
m_currentModule->m_ModuleStatus &= ~MODULE_is_LOCKED;
switch( m_AttributsCtrl->GetSelection() )
{
case 0:
m_CurrentModule->m_Attributs = 0;
m_currentModule->m_Attributs = 0;
break;
case 1:
m_CurrentModule->m_Attributs = MOD_CMS;
m_currentModule->m_Attributs = MOD_CMS;
break;
case 2:
m_CurrentModule->m_Attributs = MOD_VIRTUAL;
m_currentModule->m_Attributs = MOD_VIRTUAL;
break;
}
m_CurrentModule->m_CntRot90 = m_CostRot90Ctrl->GetValue();
m_CurrentModule->m_CntRot180 = m_CostRot180Ctrl->GetValue();
m_CurrentModule->m_Doc = m_DocCtrl->GetValue();
m_CurrentModule->m_KeyWord = m_KeywordCtrl->GetValue();
m_currentModule->m_CntRot90 = m_CostRot90Ctrl->GetValue();
m_currentModule->m_CntRot180 = m_CostRot180Ctrl->GetValue();
m_currentModule->m_Doc = m_DocCtrl->GetValue();
m_currentModule->m_KeyWord = m_KeywordCtrl->GetValue();
// Init footprint name in library
if( ! m_FootprintNameCtrl->GetValue( ).IsEmpty() )
m_CurrentModule->m_LibRef = m_FootprintNameCtrl->GetValue( );
if( ! footprintName.IsEmpty() )
m_currentModule->m_LibRef = footprintName;
// Init Fields:
m_CurrentModule->m_Reference->Copy(m_ReferenceCopy );
m_CurrentModule->m_Value->Copy(m_ValueCopy );
m_currentModule->m_Reference->Copy(m_referenceCopy );
m_currentModule->m_Value->Copy(m_valueCopy );
// Initialize masks clearances
m_CurrentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) );
m_currentModule->SetLocalClearance( ReturnValueFromTextCtrl( *m_NetClearanceValueCtrl ) );
m_CurrentModule->SetLocalSolderMaskMargin( ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl ) );
m_currentModule->SetLocalSolderMaskMargin( ReturnValueFromTextCtrl( *m_SolderMaskMarginCtrl ) );
m_CurrentModule->SetLocalSolderPasteMargin( ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl ) );
m_currentModule->SetLocalSolderPasteMargin( ReturnValueFromTextCtrl( *m_SolderPasteMarginCtrl ) );
double dtmp;
wxString msg = m_SolderPasteMarginRatioCtrl->GetValue();
msg.ToDouble( &dtmp );
......@@ -425,22 +440,22 @@ void DIALOG_MODULE_MODULE_EDITOR::OnOkClick( wxCommandEvent& event )
if( dtmp > 0.0 )
dtmp = 0.0;
m_CurrentModule->SetLocalSolderPasteMarginRatio( dtmp / 100 );
m_currentModule->SetLocalSolderPasteMarginRatio( dtmp / 100 );
// Update 3D shape list
int ii = m_3D_ShapeNameListBox->GetSelection();
if ( ii >= 0 )
TransfertDisplayTo3DValues( ii );
S3D_MASTER* draw3D = m_CurrentModule->m_3D_Drawings;
for( unsigned ii = 0; ii < m_Shapes3D_list.size(); ii++ )
S3D_MASTER* draw3D = m_currentModule->m_3D_Drawings;
for( unsigned ii = 0; ii < m_shapes3D_list.size(); ii++ )
{
S3D_MASTER* draw3DCopy = m_Shapes3D_list[ii];
S3D_MASTER* draw3DCopy = m_shapes3D_list[ii];
if( draw3DCopy->m_Shape3DName.IsEmpty() )
continue;
if( draw3D == NULL )
{
draw3D = new S3D_MASTER( draw3D );
m_CurrentModule->m_3D_Drawings.Append( draw3D );
m_currentModule->m_3D_Drawings.Append( draw3D );
}
draw3D->m_Shape3DName = draw3DCopy->m_Shape3DName;
......@@ -456,17 +471,17 @@ void DIALOG_MODULE_MODULE_EDITOR::OnOkClick( wxCommandEvent& event )
for( ; draw3D != NULL; draw3D = nextdraw3D )
{
nextdraw3D = (S3D_MASTER*) draw3D->Next();
delete m_CurrentModule->m_3D_Drawings.Remove( draw3D );
delete m_currentModule->m_3D_Drawings.Remove( draw3D );
}
// Fill shape list with one void entry, if no entry
if( m_CurrentModule->m_3D_Drawings == NULL )
m_CurrentModule->m_3D_Drawings.PushBack( new S3D_MASTER( m_CurrentModule ) );
if( m_currentModule->m_3D_Drawings == NULL )
m_currentModule->m_3D_Drawings.PushBack( new S3D_MASTER( m_currentModule ) );
m_CurrentModule->CalculateBoundingBox();
m_currentModule->CalculateBoundingBox();
m_Parent->OnModify();
m_parent->OnModify();
EndModal( 1 );
}
......@@ -476,21 +491,21 @@ void DIALOG_MODULE_MODULE_EDITOR::OnOkClick( wxCommandEvent& event )
void DIALOG_MODULE_MODULE_EDITOR::OnEditReference(wxCommandEvent& event)
/***********************************************************************/
{
wxPoint tmp = m_Parent->GetScreen()->GetCrossHairPosition();
m_Parent->GetScreen()->SetCrossHairPosition( m_ReferenceCopy->m_Pos );
m_Parent->InstallTextModOptionsFrame( m_ReferenceCopy, NULL );
m_Parent->GetScreen()->SetCrossHairPosition( tmp );
m_ReferenceCtrl->SetValue(m_ReferenceCopy->m_Text);
wxPoint tmp = m_parent->GetScreen()->GetCrossHairPosition();
m_parent->GetScreen()->SetCrossHairPosition( m_referenceCopy->m_Pos );
m_parent->InstallTextModOptionsFrame( m_referenceCopy, NULL );
m_parent->GetScreen()->SetCrossHairPosition( tmp );
m_ReferenceCtrl->SetValue(m_referenceCopy->m_Text);
}
/***********************************************************/
void DIALOG_MODULE_MODULE_EDITOR::OnEditValue(wxCommandEvent& event)
/***********************************************************/
{
wxPoint tmp = m_Parent->GetScreen()->GetCrossHairPosition();
m_Parent->GetScreen()->SetCrossHairPosition( m_ValueCopy->m_Pos );
m_Parent->InstallTextModOptionsFrame( m_ValueCopy, NULL );
m_Parent->GetScreen()->SetCrossHairPosition( tmp);
m_ValueCtrl->SetValue(m_ValueCopy->m_Text);
wxPoint tmp = m_parent->GetScreen()->GetCrossHairPosition();
m_parent->GetScreen()->SetCrossHairPosition( m_valueCopy->m_Pos );
m_parent->InstallTextModOptionsFrame( m_valueCopy, NULL );
m_parent->GetScreen()->SetCrossHairPosition( tmp);
m_ValueCtrl->SetValue(m_valueCopy->m_Text);
}
......@@ -17,12 +17,12 @@ class DIALOG_MODULE_MODULE_EDITOR : public DIALOG_MODULE_MODULE_EDITOR_BASE
{
private:
FOOTPRINT_EDIT_FRAME* m_Parent;
MODULE* m_CurrentModule;
TEXTE_MODULE* m_ReferenceCopy;
TEXTE_MODULE* m_ValueCopy;
std::vector <S3D_MASTER*> m_Shapes3D_list;
int m_LastSelected3DShapeIndex;
FOOTPRINT_EDIT_FRAME* m_parent;
MODULE* m_currentModule;
TEXTE_MODULE* m_referenceCopy;
TEXTE_MODULE* m_valueCopy;
std::vector <S3D_MASTER*> m_shapes3D_list;
int m_lastSelected3DShapeIndex;
VERTEX_VALUE_CTRL * m_3D_Scale;
VERTEX_VALUE_CTRL * m_3D_Offset;
VERTEX_VALUE_CTRL * m_3D_Rotation;
......@@ -34,7 +34,7 @@ public:
~DIALOG_MODULE_MODULE_EDITOR();
private:
void InitModeditProperties();
void initModeditProperties();
void Transfert3DValuesToDisplay( S3D_MASTER * aStruct3DSource );
void TransfertDisplayTo3DValues( int aIndexSelection );
void OnEditValue( wxCommandEvent& event );
......
......@@ -566,6 +566,17 @@ bool PCB_BASE_FRAME::Save_Module_In_Library( const wxString& aLibPath,
if( footprintName.IsEmpty() )
return false;
if( ! MODULE::IsLibNameValid( footprintName ) )
{
wxString msg;
msg.Printf( _("Error:\none of invalid chars <%s> found\nin <%s>" ),
MODULE::ReturnStringLibNameInvalidChars( true ),
GetChars( footprintName ) );
DisplayError( NULL, msg );
return false;
}
aModule->SetLibRef( footprintName );
}
......
......@@ -428,7 +428,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
AddMenuItem( configmenu, ID_PCB_LIB_TABLE_EDIT,
_( "Li&brary Tables" ), _( "Setup footprint libraries" ),
KiBitmap( library_xpm ) );
KiBitmap( library_table_xpm ) );
// Colors and Visibility are also handled by the layers manager toolbar
AddMenuItem( configmenu, ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
......
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