ADDED: Geographic Reannotation
|
@ -542,6 +542,14 @@ set( BMAPS_BIG
|
||||||
icon_pcbnew
|
icon_pcbnew
|
||||||
icon_bitmap2component
|
icon_bitmap2component
|
||||||
icon_pcbcalculator
|
icon_pcbcalculator
|
||||||
|
reannotate_down_left
|
||||||
|
reannotate_down_right
|
||||||
|
reannotate_left_down
|
||||||
|
reannotate_left_up
|
||||||
|
reannotate_right_down
|
||||||
|
reannotate_right_up
|
||||||
|
reannotate_up_left
|
||||||
|
reannotate_up_right
|
||||||
viewlibs_icon
|
viewlibs_icon
|
||||||
icon_pagelayout_editor
|
icon_pagelayout_editor
|
||||||
wizard_add_fplib_icon
|
wizard_add_fplib_icon
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x02, 0x5e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0xef, 0x4b, 0x93,
|
||||||
|
0x51, 0x14, 0xc7, 0xfd, 0x9f, 0xbe, 0xcf, 0xaa, 0xb5, 0xad, 0x6d, 0x4e, 0x7d, 0x14, 0x4b, 0x92,
|
||||||
|
0x12, 0xa1, 0x08, 0x8d, 0x20, 0x92, 0xa1, 0x24, 0x6b, 0x23, 0xa3, 0x51, 0x52, 0x5a, 0x08, 0x92,
|
||||||
|
0x16, 0x46, 0x11, 0x84, 0x62, 0xbf, 0xe0, 0x69, 0x85, 0x35, 0x89, 0x60, 0x85, 0xf6, 0xaa, 0x22,
|
||||||
|
0x8b, 0x45, 0xc6, 0x22, 0x2d, 0x32, 0x27, 0x12, 0xad, 0x55, 0x94, 0x30, 0xf2, 0xd9, 0xe9, 0xc5,
|
||||||
|
0xb3, 0xed, 0xb9, 0xf7, 0x9e, 0xbd, 0xf0, 0x79, 0x53, 0xf7, 0xd5, 0x39, 0xf0, 0xfd, 0x70, 0xee,
|
||||||
|
0xb9, 0xe7, 0x70, 0xce, 0xad, 0x21, 0x87, 0xa7, 0xe6, 0xdf, 0x01, 0xd9, 0xd4, 0x3b, 0x67, 0xc0,
|
||||||
|
0x03, 0x44, 0x9d, 0x01, 0xf7, 0x70, 0xcc, 0x19, 0x90, 0xc0, 0x09, 0x67, 0xc0, 0x2d, 0x0c, 0x6c,
|
||||||
|
0x1c, 0x78, 0x6d, 0x18, 0x46, 0x14, 0x07, 0x0d, 0xc3, 0x48, 0x32, 0x41, 0x21, 0xf3, 0x95, 0x03,
|
||||||
|
0x69, 0x2f, 0x4a, 0xe7, 0x8c, 0xaa, 0x7f, 0x52, 0x07, 0x6d, 0xd0, 0x64, 0x57, 0x8a, 0x96, 0xf4,
|
||||||
|
0x0d, 0x2b, 0x8a, 0x3e, 0xa1, 0xa1, 0x47, 0xc7, 0x25, 0x06, 0x94, 0x43, 0xa8, 0x01, 0xd2, 0x5b,
|
||||||
|
0xb4, 0x29, 0x5a, 0xf0, 0xb8, 0x96, 0x58, 0xd2, 0xb1, 0xaa, 0x01, 0x0a, 0x2d, 0x18, 0x25, 0xa2,
|
||||||
|
0x21, 0x9c, 0x65, 0x80, 0x15, 0x62, 0x50, 0x09, 0x70, 0x15, 0x6d, 0xeb, 0x44, 0xb4, 0x84, 0xc0,
|
||||||
|
0x1f, 0xf6, 0xac, 0x31, 0x00, 0x0d, 0x59, 0x59, 0x9f, 0xf3, 0xe1, 0x29, 0x11, 0x11, 0xb5, 0x61,
|
||||||
|
0x8e, 0x01, 0xe9, 0xcd, 0x3c, 0xc0, 0x18, 0x7a, 0x2c, 0x63, 0x04, 0x17, 0x78, 0xe1, 0x76, 0xc1,
|
||||||
|
0xab, 0x04, 0x58, 0xab, 0xc5, 0x2b, 0xcb, 0x9a, 0x41, 0x17, 0x07, 0x4e, 0x61, 0x8f, 0x12, 0xe0,
|
||||||
|
0x3a, 0xf6, 0x95, 0xac, 0x55, 0x04, 0x8b, 0x0c, 0x98, 0x40, 0xbf, 0xac, 0x2f, 0xb6, 0x22, 0x55,
|
||||||
|
0xb6, 0x43, 0x58, 0x61, 0xc0, 0x4d, 0x35, 0x85, 0x97, 0xa8, 0xaf, 0xbc, 0xcd, 0x01, 0x3c, 0xab,
|
||||||
|
0xd2, 0xad, 0x27, 0x65, 0xa0, 0x1f, 0xa3, 0x15, 0x3b, 0x8e, 0x3b, 0x0c, 0xb8, 0x8f, 0x3e, 0x49,
|
||||||
|
0xff, 0xdb, 0x87, 0xc5, 0x8a, 0x73, 0x11, 0x63, 0x0c, 0x78, 0x88, 0x88, 0x04, 0x24, 0xd1, 0x69,
|
||||||
|
0x3b, 0x77, 0x11, 0x67, 0xc0, 0x0c, 0xba, 0x25, 0xa0, 0x17, 0x37, 0x6c, 0x67, 0x16, 0x61, 0x06,
|
||||||
|
0xcc, 0xa1, 0x43, 0xba, 0x91, 0x5b, 0x5b, 0x15, 0x9a, 0x10, 0x7b, 0x19, 0xf0, 0x01, 0x2d, 0x22,
|
||||||
|
0x30, 0x8d, 0xfd, 0x82, 0xf7, 0x09, 0xcd, 0x0c, 0xc8, 0x63, 0x9b, 0x08, 0x44, 0x70, 0x4d, 0xf0,
|
||||||
|
0x7e, 0xc0, 0xc3, 0x00, 0xd3, 0x85, 0x82, 0xad, 0xc8, 0xbb, 0x35, 0xb1, 0xd5, 0x4d, 0x60, 0x9d,
|
||||||
|
0x4d, 0xbe, 0x26, 0x7c, 0xb6, 0x15, 0xe3, 0x76, 0x96, 0x44, 0x44, 0xe4, 0xc6, 0x2f, 0x06, 0x08,
|
||||||
|
0xd5, 0x24, 0x73, 0x07, 0x66, 0x25, 0x20, 0x80, 0x1c, 0x03, 0xe2, 0x48, 0x54, 0xec, 0xc7, 0xd8,
|
||||||
|
0x6e, 0x4a, 0x40, 0x23, 0x96, 0x19, 0x70, 0x59, 0x68, 0x85, 0x2e, 0x4c, 0xc8, 0x7d, 0xb2, 0x13,
|
||||||
|
0x0b, 0x0c, 0x48, 0xd9, 0x95, 0xcb, 0x68, 0x5b, 0xbf, 0xcb, 0xc0, 0x6e, 0x64, 0x18, 0x90, 0x45,
|
||||||
|
0xc8, 0xae, 0xf2, 0xb0, 0x30, 0x09, 0xda, 0x75, 0x5d, 0xdf, 0x84, 0x3a, 0x5d, 0x6f, 0x7c, 0x21,
|
||||||
|
0x01, 0xc5, 0x20, 0x4a, 0xb5, 0x9d, 0xd7, 0x3c, 0xe2, 0xb4, 0x1b, 0x29, 0x4f, 0xb9, 0xb0, 0xb2,
|
||||||
|
0x50, 0x0e, 0x63, 0xca, 0x32, 0xba, 0x71, 0x4e, 0xbc, 0x4e, 0xbe, 0xc9, 0xd2, 0x6b, 0x49, 0x05,
|
||||||
|
0x48, 0xe0, 0x08, 0x11, 0x11, 0x3d, 0x82, 0x2f, 0x27, 0x25, 0x30, 0x60, 0x01, 0x1d, 0xa6, 0x02,
|
||||||
|
0x7c, 0xd1, 0xbc, 0x3f, 0x89, 0x28, 0x5f, 0x8f, 0xdb, 0x72, 0xc6, 0x1f, 0x03, 0x00, 0x80, 0x49,
|
||||||
|
0xb6, 0xe3, 0x22, 0xb8, 0x42, 0x64, 0xf6, 0xe2, 0x50, 0x51, 0x19, 0x07, 0x47, 0x01, 0xa0, 0xb5,
|
||||||
|
0xc0, 0x80, 0x79, 0xf8, 0x17, 0xd7, 0x8e, 0x23, 0x94, 0x55, 0x47, 0xf8, 0x73, 0x37, 0x80, 0xf3,
|
||||||
|
0x55, 0xb6, 0xe8, 0x10, 0xdc, 0x7e, 0xd4, 0xbe, 0xe1, 0x5b, 0x24, 0x0c, 0xe8, 0xdf, 0xaa, 0x00,
|
||||||
|
0xe6, 0x78, 0x73, 0xb0, 0x6f, 0xb9, 0xca, 0xda, 0x99, 0x76, 0xe1, 0xb4, 0xa3, 0x3d, 0x5d, 0xec,
|
||||||
|
0xf4, 0xbf, 0x77, 0xb6, 0xd8, 0x27, 0x63, 0x0e, 0x7f, 0x02, 0x85, 0xb7, 0xff, 0xe1, 0xaf, 0xb1,
|
||||||
|
0xd1, 0xf3, 0x17, 0x12, 0x24, 0x06, 0x6c, 0x46, 0xc1, 0x0a, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||||
|
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_down_left_xpm[1] = {{ png, sizeof( png ), "reannotate_down_left_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x02, 0x5a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0xd6, 0xef, 0x4b, 0x13,
|
||||||
|
0x71, 0x1c, 0x07, 0x70, 0xff, 0xa7, 0xf7, 0x1d, 0xb9, 0x59, 0xd3, 0xad, 0xb5, 0x03, 0xdb, 0x30,
|
||||||
|
0xab, 0x19, 0x21, 0x6d, 0xf4, 0xa4, 0xba, 0x72, 0x45, 0x14, 0x65, 0x14, 0x44, 0x90, 0x52, 0xed,
|
||||||
|
0x49, 0x1a, 0x59, 0x11, 0x81, 0x22, 0x22, 0x74, 0x8f, 0x8c, 0x64, 0x89, 0x8c, 0x06, 0xb9, 0x10,
|
||||||
|
0x62, 0x23, 0x4b, 0x29, 0x34, 0xc1, 0xa1, 0x88, 0x04, 0xb9, 0x56, 0x48, 0xae, 0x3c, 0x3f, 0x3d,
|
||||||
|
0xb8, 0xdb, 0xdd, 0xf7, 0xc7, 0x3d, 0xb9, 0x67, 0x75, 0x8f, 0x3e, 0x5f, 0xf8, 0xbe, 0xf6, 0xd9,
|
||||||
|
0xf7, 0xc7, 0x7d, 0x3e, 0xd7, 0x44, 0x3e, 0x9f, 0xa6, 0x7f, 0x05, 0x94, 0xa7, 0x7e, 0xf8, 0x03,
|
||||||
|
0x87, 0xb0, 0xec, 0x0f, 0x24, 0xf1, 0xd9, 0x1f, 0x38, 0x8e, 0x8f, 0xfe, 0x40, 0x0a, 0x65, 0x6f,
|
||||||
|
0xb0, 0xf6, 0xc5, 0x14, 0xe7, 0xd6, 0x0d, 0xc3, 0x30, 0x3a, 0x90, 0x35, 0x8c, 0xe7, 0x6b, 0x22,
|
||||||
|
0xd8, 0x3a, 0x07, 0x1c, 0x5d, 0x14, 0x45, 0x06, 0xf6, 0x13, 0xaf, 0x0a, 0xc0, 0xbc, 0x84, 0x64,
|
||||||
|
0x1a, 0xc1, 0xb2, 0x00, 0x8a, 0x41, 0x1b, 0x0c, 0x8a, 0x7f, 0x29, 0x8f, 0x44, 0xcd, 0xcc, 0x22,
|
||||||
|
0xf6, 0xd5, 0x3b, 0x45, 0xbc, 0x2a, 0x82, 0x93, 0x98, 0x20, 0x32, 0x33, 0xb8, 0xe0, 0x9d, 0x62,
|
||||||
|
0x50, 0x5c, 0x74, 0x05, 0x91, 0x3a, 0x11, 0x7d, 0x0b, 0xa1, 0xe8, 0x95, 0xc2, 0x4a, 0xc0, 0x82,
|
||||||
|
0x31, 0xdc, 0x20, 0x22, 0xa2, 0x11, 0x24, 0x85, 0xad, 0x7a, 0x1b, 0x04, 0x30, 0x20, 0x6d, 0x6b,
|
||||||
|
0x0f, 0x72, 0x44, 0x44, 0xf4, 0x3b, 0x81, 0x69, 0x39, 0xc5, 0xfe, 0xaa, 0x04, 0xc2, 0xd8, 0xb0,
|
||||||
|
0x82, 0x71, 0x9c, 0x10, 0x57, 0xa1, 0xe2, 0xa2, 0x74, 0x70, 0xeb, 0x88, 0xd8, 0xd1, 0xaf, 0x08,
|
||||||
|
0x4a, 0x82, 0x88, 0x62, 0x52, 0x02, 0x05, 0xe8, 0x8d, 0xf0, 0x21, 0xae, 0x0a, 0xa0, 0x0b, 0xb3,
|
||||||
|
0x12, 0x18, 0xc1, 0x5d, 0x27, 0x99, 0xda, 0x5c, 0xe5, 0x41, 0xda, 0xc9, 0xe9, 0x82, 0x3b, 0x18,
|
||||||
|
0x75, 0x62, 0x1d, 0xe3, 0xe2, 0x6d, 0x9d, 0x97, 0x40, 0x06, 0x79, 0x27, 0xce, 0xe1, 0x18, 0x0f,
|
||||||
|
0x0e, 0x63, 0x51, 0x02, 0x49, 0x2c, 0x38, 0xf1, 0x76, 0x1b, 0xf8, 0x3b, 0x98, 0xc0, 0x8a, 0x04,
|
||||||
|
0xa2, 0x8d, 0x5d, 0x25, 0x22, 0xba, 0x85, 0x21, 0x0e, 0x68, 0x58, 0x17, 0x81, 0xa9, 0x62, 0xdb,
|
||||||
|
0x9d, 0x30, 0x83, 0x4e, 0x0e, 0x04, 0xb0, 0x25, 0x82, 0x1a, 0xf6, 0x32, 0x13, 0xfe, 0x84, 0xb1,
|
||||||
|
0xc4, 0x0c, 0x7f, 0x22, 0x20, 0x95, 0x99, 0x0a, 0x0e, 0xb2, 0x3f, 0x79, 0x13, 0x8f, 0x98, 0xd1,
|
||||||
|
0x2a, 0xda, 0x25, 0xf0, 0x09, 0x5d, 0x2c, 0x78, 0x83, 0x0e, 0xe6, 0x06, 0xce, 0xa1, 0x5b, 0x02,
|
||||||
|
0x65, 0xa4, 0x58, 0xb0, 0xd3, 0x8e, 0x19, 0x77, 0x34, 0xed, 0x5c, 0x25, 0x17, 0x14, 0x71, 0x9a,
|
||||||
|
0x5b, 0xe6, 0x33, 0x9c, 0x77, 0x07, 0xc3, 0xc8, 0x4a, 0x20, 0x2f, 0xbc, 0x68, 0x9b, 0x01, 0xa5,
|
||||||
|
0xe2, 0x0c, 0xfa, 0x30, 0x26, 0x81, 0x49, 0x5c, 0xe1, 0x0f, 0xf7, 0x3a, 0xee, 0x3b, 0xf1, 0x59,
|
||||||
|
0x14, 0x24, 0xf0, 0x02, 0xd7, 0x78, 0x30, 0x87, 0xb6, 0x46, 0x01, 0xa6, 0x03, 0x58, 0xe5, 0xc0,
|
||||||
|
0x70, 0x4c, 0xd3, 0x5a, 0xd1, 0xa2, 0x69, 0x9a, 0xce, 0x88, 0x53, 0x78, 0x6c, 0x47, 0x1b, 0x08,
|
||||||
|
0xef, 0x72, 0xa0, 0x7e, 0xc4, 0xae, 0x3c, 0xca, 0x4b, 0x06, 0x94, 0x10, 0xfa, 0x6e, 0x45, 0xaf,
|
||||||
|
0x71, 0x46, 0xe8, 0x0f, 0x03, 0x36, 0x48, 0x73, 0x6f, 0xbf, 0x8e, 0x07, 0x56, 0x70, 0x8f, 0x39,
|
||||||
|
0x45, 0x0b, 0x54, 0xe3, 0x16, 0x18, 0xe5, 0x57, 0xa1, 0x04, 0x96, 0xed, 0xbb, 0x3a, 0x2f, 0x76,
|
||||||
|
0xa0, 0x3e, 0x00, 0x40, 0x67, 0x9d, 0x5f, 0x77, 0x3f, 0x52, 0x3b, 0x44, 0xb4, 0x80, 0x98, 0x29,
|
||||||
|
0x82, 0x95, 0xb0, 0x5b, 0xdb, 0x98, 0xe2, 0x1c, 0xc7, 0x10, 0x11, 0x5d, 0xc6, 0x13, 0xb9, 0xc7,
|
||||||
|
0xf5, 0x02, 0xd0, 0x36, 0xc5, 0xc2, 0xfd, 0x6e, 0x0f, 0x9e, 0x9a, 0x05, 0x25, 0x54, 0x93, 0x41,
|
||||||
|
0xa9, 0x05, 0xb8, 0x2d, 0x37, 0x92, 0x57, 0xcd, 0x88, 0xaa, 0xca, 0x84, 0x57, 0x17, 0xed, 0x41,
|
||||||
|
0xeb, 0x92, 0x47, 0xeb, 0xf9, 0xa0, 0xef, 0x4b, 0x4e, 0x79, 0xb6, 0xdd, 0x9c, 0xda, 0xeb, 0xaf,
|
||||||
|
0x4f, 0xef, 0x76, 0xcf, 0xfa, 0x6c, 0xec, 0xef, 0xff, 0xb3, 0x6f, 0x0d, 0xf7, 0xf9, 0x0b, 0x5e,
|
||||||
|
0xf9, 0x06, 0x8a, 0xac, 0x4f, 0x10, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||||
|
0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_down_right_xpm[1] = {{ png, sizeof( png ), "reannotate_down_right_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x01, 0xf2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0x4f, 0x22, 0x60,
|
||||||
|
0x18, 0xb2, 0x1a, 0x0e, 0x65, 0x7e, 0x21, 0x45, 0xc3, 0xe1, 0x02, 0x0b, 0x07, 0x12, 0x34, 0x00,
|
||||||
|
0x95, 0x1b, 0x1b, 0x13, 0xaf, 0x01, 0xac, 0x1c, 0xbf, 0x86, 0xb7, 0x97, 0x76, 0x2c, 0x9b, 0xda,
|
||||||
|
0x52, 0x9c, 0x99, 0x12, 0x13, 0xe9, 0xe7, 0x66, 0x6e, 0x0c, 0x01, 0xa6, 0xbe, 0x61, 0x31, 0x31,
|
||||||
|
0x19, 0xdf, 0xd1, 0x34, 0xfc, 0xbd, 0xb6, 0xba, 0x39, 0xda, 0xc6, 0x18, 0x27, 0x30, 0xfd, 0x87,
|
||||||
|
0xa2, 0xe1, 0x4c, 0xb3, 0x1b, 0x58, 0xd8, 0x2e, 0xb2, 0xb8, 0x63, 0xc6, 0x8a, 0x1d, 0x47, 0x4f,
|
||||||
|
0x5e, 0xb8, 0x76, 0xeb, 0xc9, 0xea, 0x64, 0x33, 0x88, 0xe0, 0x85, 0x6b, 0x57, 0x4f, 0x9e, 0x41,
|
||||||
|
0x76, 0xd2, 0xb9, 0x44, 0xa0, 0xb0, 0x5f, 0xed, 0xd2, 0x73, 0xef, 0xd1, 0x5c, 0xb8, 0x37, 0xdd,
|
||||||
|
0x0c, 0x9b, 0x1f, 0xb6, 0x99, 0x1a, 0x7b, 0xce, 0xbd, 0x8b, 0xdd, 0xdf, 0x20, 0x2d, 0xe8, 0x1a,
|
||||||
|
0x3e, 0xda, 0x9a, 0x2d, 0xf9, 0x89, 0x3b, 0xa8, 0xf6, 0xa6, 0xa3, 0x6b, 0x38, 0x61, 0xdc, 0x8c,
|
||||||
|
0x37, 0x70, 0xff, 0x6d, 0xfa, 0x89, 0xaa, 0xe1, 0x96, 0x71, 0xc8, 0x0f, 0x92, 0xd2, 0xd2, 0xbf,
|
||||||
|
0x24, 0xe3, 0x82, 0x1f, 0x24, 0x25, 0xbe, 0xa7, 0xae, 0xc6, 0xe1, 0x57, 0x49, 0x4a, 0xad, 0x8f,
|
||||||
|
0x82, 0x8d, 0xcd, 0xa6, 0x7c, 0x25, 0x25, 0x79, 0xff, 0x9c, 0x64, 0x6a, 0xec, 0x3c, 0xf3, 0x2b,
|
||||||
|
0x29, 0xf9, 0xe1, 0x62, 0x9c, 0xb1, 0xb1, 0xdb, 0x92, 0xcf, 0xa4, 0x64, 0xa0, 0x93, 0xb1, 0xc6,
|
||||||
|
0xc6, 0x96, 0xb5, 0xb7, 0x48, 0xc8, 0x71, 0xff, 0xf6, 0xa7, 0x00, 0xd3, 0x41, 0xda, 0xce, 0xef,
|
||||||
|
0x24, 0x64, 0xd1, 0x9b, 0x2d, 0xc0, 0xf4, 0x6a, 0x5d, 0xbe, 0xeb, 0x1b, 0xf1, 0x79, 0xfa, 0xd3,
|
||||||
|
0xd2, 0x28, 0xa0, 0x35, 0x56, 0x65, 0x87, 0xff, 0x12, 0x5f, 0x08, 0x3c, 0x5e, 0x00, 0xf4, 0x8d,
|
||||||
|
0xb1, 0xc7, 0xe4, 0x87, 0x24, 0x94, 0x1a, 0x4f, 0x67, 0xfb, 0x19, 0x1b, 0x9b, 0x14, 0x9c, 0x25,
|
||||||
|
0xa1, 0x98, 0xf9, 0x77, 0xba, 0xd6, 0xd2, 0xd8, 0x38, 0xee, 0x38, 0x29, 0xe5, 0xd2, 0xdb, 0xa9,
|
||||||
|
0x8e, 0xc6, 0xc6, 0x05, 0x0f, 0x49, 0x29, 0xc8, 0xbe, 0x2d, 0xb0, 0x35, 0xb6, 0xde, 0x4a, 0x52,
|
||||||
|
0xc9, 0xf7, 0xa6, 0xce, 0xd8, 0x78, 0x36, 0x69, 0x45, 0xe5, 0x26, 0x4b, 0xd3, 0x63, 0xa4, 0x95,
|
||||||
|
0xad, 0x5b, 0x8c, 0x13, 0x71, 0x68, 0x78, 0xbb, 0x0d, 0xab, 0x86, 0x1f, 0x16, 0xbe, 0x58, 0x35,
|
||||||
|
0x3c, 0xe8, 0xf4, 0x2a, 0xc3, 0xa6, 0xfe, 0x61, 0xa2, 0x71, 0x23, 0x16, 0x0d, 0xa7, 0xca, 0xed,
|
||||||
|
0x8d, 0x8d, 0xcb, 0x31, 0x54, 0x7f, 0xdc, 0x55, 0x62, 0x6a, 0x1c, 0xfd, 0x16, 0x5d, 0xc3, 0xdf,
|
||||||
|
0xed, 0x05, 0x96, 0xa0, 0x12, 0x0e, 0x45, 0xc3, 0x9b, 0x4b, 0x6b, 0xdb, 0xe2, 0x80, 0xc5, 0x98,
|
||||||
|
0x4d, 0xef, 0x0f, 0xb4, 0x50, 0xfa, 0xb9, 0x24, 0xc1, 0x14, 0x52, 0x7c, 0xa6, 0x9e, 0x3c, 0xb1,
|
||||||
|
0x7b, 0xdb, 0xda, 0xa5, 0x33, 0x3a, 0x2a, 0xd2, 0x82, 0xc1, 0x26, 0x18, 0x5b, 0x64, 0x2c, 0xf9,
|
||||||
|
0x80, 0x1e, 0x71, 0xf3, 0x03, 0xb1, 0x17, 0xbe, 0xf6, 0x91, 0x55, 0x8b, 0x4e, 0x7e, 0xc5, 0x92,
|
||||||
|
0x96, 0x7e, 0xad, 0x48, 0x81, 0x5a, 0x60, 0xec, 0x18, 0x93, 0x99, 0x57, 0xde, 0xd0, 0x36, 0x75,
|
||||||
|
0xe9, 0xd6, 0x23, 0x37, 0x3e, 0xe2, 0x2b, 0x97, 0xf6, 0x16, 0x58, 0x19, 0x63, 0xf8, 0x01, 0x7f,
|
||||||
|
0x06, 0x3a, 0x5d, 0xe3, 0x4c, 0x9a, 0x06, 0x70, 0x34, 0x90, 0xa6, 0xe1, 0xff, 0xff, 0x77, 0x13,
|
||||||
|
0x1b, 0x87, 0x6f, 0xd3, 0x01, 0x01, 0x00, 0x90, 0x80, 0x07, 0x25, 0x04, 0x97, 0x6b, 0x8c, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_left_down_xpm[1] = {{ png, sizeof( png ), "reannotate_left_down_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x01, 0xed, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0x4f, 0x22, 0x60,
|
||||||
|
0x18, 0xec, 0x1a, 0xde, 0x4d, 0x68, 0x24, 0x45, 0xc3, 0x83, 0x4e, 0x6f, 0xe3, 0x72, 0xe2, 0x35,
|
||||||
|
0x9c, 0x2e, 0xb7, 0x37, 0x36, 0x26, 0x5a, 0xc3, 0xbf, 0x3d, 0x05, 0x96, 0xc6, 0xc6, 0x44, 0x6b,
|
||||||
|
0xf8, 0xb5, 0x22, 0xc5, 0xd4, 0x18, 0x02, 0x1c, 0x63, 0x52, 0x32, 0xcb, 0x6b, 0x5a, 0x27, 0x2d,
|
||||||
|
0xda, 0x78, 0xf0, 0xca, 0x3b, 0x9c, 0x1a, 0xe6, 0x07, 0x19, 0x63, 0x05, 0x36, 0x61, 0x15, 0xf3,
|
||||||
|
0x8f, 0x7d, 0xc4, 0xe6, 0x24, 0x84, 0x15, 0x69, 0x27, 0x4f, 0xee, 0xdf, 0xbd, 0x76, 0xe5, 0xac,
|
||||||
|
0xee, 0xea, 0x9c, 0x30, 0x5b, 0xb0, 0x88, 0x59, 0xea, 0xc2, 0x77, 0x58, 0x3c, 0xfd, 0x6f, 0x4f,
|
||||||
|
0x89, 0x15, 0x86, 0x1f, 0xde, 0x5f, 0xdd, 0xd8, 0x99, 0x64, 0x6e, 0x6c, 0x6c, 0xd5, 0xf9, 0x1d,
|
||||||
|
0x5b, 0xb0, 0x82, 0x83, 0x09, 0xd3, 0xd3, 0x5f, 0xf6, 0x96, 0x9b, 0x1a, 0x47, 0xbd, 0xc5, 0x1a,
|
||||||
|
0x71, 0xc0, 0x88, 0x28, 0xc3, 0xe6, 0xd1, 0xa7, 0x29, 0xc6, 0x8d, 0x38, 0x92, 0xc6, 0xfb, 0xed,
|
||||||
|
0x58, 0xc3, 0xf2, 0x87, 0x85, 0x2f, 0x69, 0x69, 0x69, 0xa3, 0x71, 0x32, 0x49, 0x1a, 0xd6, 0x5a,
|
||||||
|
0x9a, 0x9e, 0x24, 0x41, 0xc3, 0xab, 0x6a, 0x63, 0x93, 0x05, 0xc4, 0x27, 0xef, 0x2f, 0x73, 0x6c,
|
||||||
|
0x8d, 0x6d, 0x76, 0x12, 0x9d, 0x1f, 0x5e, 0x4d, 0x02, 0x06, 0x75, 0xc9, 0x63, 0x22, 0x33, 0xd0,
|
||||||
|
0xdf, 0x13, 0x55, 0x16, 0xc6, 0xc6, 0x49, 0xa7, 0x89, 0xcc, 0x71, 0x8f, 0x66, 0x78, 0x1b, 0x1b,
|
||||||
|
0x9b, 0x16, 0x5f, 0x24, 0x2e, 0x8b, 0x3e, 0x9c, 0x1b, 0x05, 0x4c, 0x27, 0x5e, 0xd3, 0x9e, 0x10,
|
||||||
|
0x95, 0xa7, 0x3f, 0x2e, 0x89, 0x04, 0x25, 0xd5, 0xca, 0x63, 0x7f, 0x89, 0x2a, 0x04, 0x6e, 0x34,
|
||||||
|
0x59, 0x83, 0x54, 0xef, 0xfd, 0x4e, 0x54, 0xa9, 0xf1, 0x6f, 0x6f, 0xa2, 0xb1, 0xb1, 0x49, 0xc6,
|
||||||
|
0xae, 0x1f, 0x44, 0x96, 0x1a, 0x27, 0xa3, 0x8d, 0x8d, 0x6d, 0x5b, 0x6f, 0x13, 0x5b, 0x6a, 0x5c,
|
||||||
|
0x88, 0x31, 0x36, 0xf6, 0x58, 0xfe, 0x95, 0xd8, 0x52, 0xe3, 0xc7, 0x24, 0x53, 0x63, 0xe7, 0x05,
|
||||||
|
0x3f, 0x88, 0x2e, 0x66, 0x1e, 0x04, 0x1a, 0x9b, 0x4f, 0xfb, 0x4e, 0x7c, 0xc9, 0xf7, 0xc4, 0xc5,
|
||||||
|
0x38, 0xf2, 0x06, 0x09, 0x45, 0xe5, 0xbf, 0x44, 0xe3, 0xa2, 0x9f, 0xa4, 0x94, 0xad, 0x37, 0x8d,
|
||||||
|
0x43, 0x7f, 0x92, 0x54, 0x18, 0x9f, 0x34, 0x6e, 0xc2, 0xab, 0xec, 0xdf, 0xa6, 0x9f, 0xa8, 0x1a,
|
||||||
|
0x3e, 0xdb, 0x99, 0xce, 0xc7, 0x13, 0x40, 0x7b, 0xb3, 0x1d, 0xbe, 0xa0, 0x79, 0x7a, 0x97, 0x99,
|
||||||
|
0xb1, 0xdb, 0xac, 0x1b, 0xb8, 0x94, 0x9b, 0x1a, 0x63, 0x68, 0xf8, 0x7f, 0x31, 0x15, 0x98, 0xe0,
|
||||||
|
0x3c, 0x2b, 0x17, 0x9e, 0x7c, 0x8d, 0x45, 0xb9, 0x31, 0x16, 0x0d, 0xff, 0xff, 0x9f, 0x6b, 0xf5,
|
||||||
|
0x04, 0x97, 0x8d, 0x56, 0xa1, 0x05, 0x8d, 0x53, 0x97, 0x6e, 0xdd, 0x77, 0xf2, 0xe4, 0xb5, 0x6b,
|
||||||
|
0x0f, 0x57, 0xa7, 0x42, 0xca, 0x50, 0xbb, 0xb3, 0xd7, 0x2e, 0x9c, 0x3c, 0x83, 0x9e, 0x96, 0xfe,
|
||||||
|
0xdd, 0x5a, 0xdf, 0x1e, 0xe7, 0x60, 0x8c, 0x13, 0x98, 0xfe, 0xc3, 0x9a, 0x1f, 0x3e, 0x5e, 0xdf,
|
||||||
|
0xbb, 0x72, 0x66, 0x67, 0x79, 0x66, 0x66, 0x6c, 0x4c, 0xb0, 0x9b, 0x25, 0x4c, 0xad, 0x5f, 0x4c,
|
||||||
|
0x4c, 0x42, 0xe6, 0x77, 0x22, 0x4a, 0x8d, 0xc3, 0x05, 0x16, 0xc6, 0x38, 0xfc, 0x80, 0x57, 0x0b,
|
||||||
|
0x29, 0x1a, 0xc0, 0x5a, 0x48, 0xd3, 0xf0, 0xff, 0xff, 0xa1, 0x4c, 0x12, 0x35, 0x0c, 0xea, 0xb6,
|
||||||
|
0x06, 0x00, 0xd0, 0x71, 0x07, 0x63, 0x3c, 0x5b, 0x6c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||||
|
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_left_up_xpm[1] = {{ png, sizeof( png ), "reannotate_left_up_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x01, 0xf7, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0x4f, 0x22, 0x60,
|
||||||
|
0x18, 0xcc, 0x1a, 0xb2, 0xb7, 0xfe, 0x23, 0x4d, 0x83, 0xbf, 0x69, 0xca, 0xc6, 0x7f, 0x24, 0x69,
|
||||||
|
0x30, 0x36, 0x26, 0x46, 0x0b, 0x8a, 0x06, 0x62, 0xb4, 0x80, 0x35, 0x14, 0xc5, 0xc4, 0x44, 0xf8,
|
||||||
|
0x99, 0x1b, 0x83, 0x81, 0x89, 0xb9, 0xb3, 0x5f, 0x44, 0x4c, 0x52, 0x66, 0x61, 0xe3, 0x94, 0xa5,
|
||||||
|
0x5b, 0x2f, 0xbc, 0xc2, 0xae, 0xc1, 0xdb, 0x18, 0x27, 0xb0, 0x8c, 0xa8, 0x5f, 0x7e, 0xf1, 0x2f,
|
||||||
|
0xba, 0x86, 0x8b, 0x27, 0xaf, 0x5c, 0xbb, 0xe1, 0x03, 0x51, 0x11, 0x3a, 0xf5, 0xe1, 0xed, 0x6b,
|
||||||
|
0x17, 0x4f, 0x1e, 0xdf, 0xb9, 0x72, 0x66, 0x67, 0x69, 0x8c, 0x23, 0x58, 0xcc, 0xa9, 0xf6, 0xf0,
|
||||||
|
0x3f, 0x1c, 0x7e, 0x88, 0x58, 0xf2, 0x07, 0xd5, 0x05, 0x9f, 0x2e, 0xae, 0x6c, 0x0c, 0x06, 0x4a,
|
||||||
|
0x44, 0x1e, 0xc1, 0xa6, 0x01, 0x43, 0x39, 0x14, 0x3c, 0x5a, 0x12, 0x60, 0x6c, 0xb2, 0x14, 0x5d,
|
||||||
|
0x83, 0x2f, 0x2e, 0xe5, 0x20, 0xf0, 0x77, 0x83, 0x95, 0xd9, 0x53, 0x34, 0x0d, 0x6b, 0xff, 0xe2,
|
||||||
|
0x0d, 0xce, 0x69, 0xc6, 0xdb, 0x48, 0x4a, 0x4b, 0x7f, 0x93, 0x8d, 0x8f, 0x93, 0xa2, 0xe1, 0x4f,
|
||||||
|
0x9d, 0x71, 0xe0, 0x6f, 0x12, 0x34, 0xdc, 0x4f, 0x30, 0xb6, 0xbb, 0x49, 0x7c, 0xf2, 0xfe, 0x39,
|
||||||
|
0xdf, 0xd2, 0xd8, 0xeb, 0x26, 0xd1, 0xf9, 0xe1, 0xf7, 0x16, 0x3f, 0x63, 0xe3, 0xf2, 0x8f, 0xc4,
|
||||||
|
0x66, 0xa0, 0xef, 0x6b, 0x81, 0x29, 0x20, 0xf4, 0x38, 0xb1, 0x39, 0xee, 0xc9, 0x24, 0x27, 0x63,
|
||||||
|
0x63, 0xbf, 0xb5, 0x7f, 0x89, 0xcb, 0xa2, 0xbf, 0x0e, 0xe5, 0x9b, 0x1a, 0x1b, 0x47, 0x6f, 0xfd,
|
||||||
|
0x4b, 0x54, 0x9e, 0xfe, 0x79, 0xb0, 0xd6, 0xc1, 0xd8, 0xd8, 0xa2, 0xfa, 0x22, 0x51, 0x85, 0xc0,
|
||||||
|
0xbf, 0xd3, 0xb5, 0x76, 0xc0, 0x04, 0x17, 0x3c, 0xe7, 0x2d, 0x51, 0xa5, 0xc6, 0xf3, 0x59, 0xbe,
|
||||||
|
0xa0, 0x64, 0x3e, 0xf3, 0x0e, 0x71, 0xc5, 0xcc, 0xb5, 0x4a, 0x33, 0x63, 0x63, 0x8f, 0x29, 0xf7,
|
||||||
|
0x88, 0x2c, 0x97, 0x2e, 0xa6, 0x1b, 0x1b, 0x9b, 0x95, 0x1e, 0xfe, 0x4b, 0x64, 0x41, 0xf6, 0xb2,
|
||||||
|
0xda, 0xc4, 0xd8, 0xb6, 0xf7, 0x19, 0xd1, 0x25, 0xdf, 0x61, 0x47, 0x63, 0xcb, 0xa9, 0x1f, 0x89,
|
||||||
|
0x2f, 0x2a, 0xd7, 0x98, 0x1a, 0x17, 0x3e, 0x25, 0xa1, 0x20, 0xbb, 0x6a, 0x61, 0xb6, 0x98, 0xa4,
|
||||||
|
0x92, 0xaf, 0xd4, 0x78, 0x21, 0x69, 0x65, 0x6b, 0xa2, 0xf1, 0x4b, 0xac, 0x2a, 0xf6, 0x3e, 0xc1,
|
||||||
|
0xa1, 0x61, 0xaa, 0x71, 0xd8, 0x4d, 0x6c, 0x1a, 0xda, 0x9d, 0xaa, 0xce, 0x60, 0xd5, 0xf0, 0x35,
|
||||||
|
0xd3, 0xd8, 0x24, 0x7b, 0xeb, 0x3b, 0x4c, 0x0d, 0xc6, 0xc6, 0x36, 0x59, 0x9b, 0xb1, 0x14, 0x64,
|
||||||
|
0xff, 0xff, 0xcc, 0x04, 0x96, 0x73, 0xa6, 0x91, 0x4d, 0xab, 0xce, 0xbd, 0xfa, 0x87, 0xaa, 0x01,
|
||||||
|
0x28, 0x1c, 0xbf, 0xe2, 0x37, 0x96, 0x88, 0xfb, 0xba, 0x36, 0xd7, 0x0a, 0x52, 0xa2, 0x06, 0xa6,
|
||||||
|
0x96, 0xb6, 0x4f, 0x5b, 0xbc, 0x76, 0xeb, 0xee, 0x63, 0x27, 0x0b, 0xa1, 0xa5, 0x6c, 0xe8, 0x84,
|
||||||
|
0x0f, 0xd8, 0xd2, 0xd2, 0x8f, 0xb3, 0xcb, 0xea, 0xa2, 0x1d, 0xb1, 0x17, 0xcc, 0xde, 0xfd, 0x38,
|
||||||
|
0xf3, 0xc3, 0x97, 0x5b, 0x47, 0xb7, 0x2e, 0x9b, 0xde, 0xde, 0x58, 0x9e, 0x9f, 0x19, 0xeb, 0x02,
|
||||||
|
0x53, 0x1f, 0x3c, 0xe1, 0x23, 0x51, 0x85, 0x40, 0x3b, 0xa4, 0xda, 0x88, 0x5d, 0x4a, 0x6c, 0xb9,
|
||||||
|
0x04, 0xd2, 0x60, 0x9d, 0xb7, 0xfd, 0x1f, 0xd1, 0xc5, 0x4c, 0xbb, 0xb1, 0x63, 0xd5, 0x45, 0x52,
|
||||||
|
0xea, 0xe9, 0xde, 0xae, 0x67, 0x43, 0xa6, 0xe9, 0x40, 0x24, 0x00, 0x00, 0x8a, 0x44, 0x05, 0xeb,
|
||||||
|
0x5d, 0xfa, 0x75, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_right_down_xpm[1] = {{ png, sizeof( png ), "reannotate_right_down_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x01, 0xec, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0x4f, 0x22, 0x60,
|
||||||
|
0x18, 0x8a, 0x1a, 0x7a, 0x3b, 0x9f, 0x92, 0xa6, 0xa1, 0xdd, 0xd8, 0xa9, 0xea, 0x0c, 0x69, 0x1a,
|
||||||
|
0x8c, 0x8d, 0x6d, 0xf2, 0xb6, 0xff, 0x23, 0x49, 0x83, 0xb1, 0xb1, 0x69, 0xcc, 0xd2, 0xdf, 0x78,
|
||||||
|
0x34, 0x7c, 0xbc, 0x76, 0x68, 0xf3, 0x92, 0xa9, 0xad, 0xb5, 0xe5, 0x59, 0xa9, 0x31, 0x2e, 0xc6,
|
||||||
|
0x50, 0x10, 0x3a, 0xe1, 0x23, 0x16, 0x0d, 0x5f, 0x4f, 0x2e, 0xaa, 0x89, 0xb4, 0x33, 0xc6, 0x0a,
|
||||||
|
0x7c, 0xfa, 0xd1, 0x35, 0x7c, 0x59, 0x99, 0x65, 0x09, 0x96, 0xb2, 0x0a, 0xcd, 0xac, 0xea, 0x9c,
|
||||||
|
0xb9, 0x62, 0xed, 0xce, 0x7d, 0x27, 0x4f, 0x16, 0xa2, 0x58, 0x80, 0xac, 0xe1, 0xf7, 0x54, 0xa0,
|
||||||
|
0xc9, 0xa6, 0xb1, 0xad, 0x6b, 0x2f, 0xbe, 0xc1, 0xf0, 0x83, 0x69, 0x2c, 0xd4, 0x0b, 0x48, 0x1a,
|
||||||
|
0xbe, 0xa6, 0x19, 0x9b, 0xe4, 0xed, 0xf8, 0x88, 0xcd, 0xd3, 0x48, 0x81, 0x84, 0xa4, 0x61, 0x8a,
|
||||||
|
0x71, 0xc4, 0x1d, 0xac, 0xa1, 0xe4, 0x54, 0x77, 0x11, 0x6b, 0xc4, 0x25, 0x1a, 0xbf, 0xc4, 0x1a,
|
||||||
|
0x62, 0xfb, 0x9f, 0xe1, 0x48, 0x1a, 0xa5, 0xc6, 0x73, 0x49, 0x4b, 0x4b, 0xd7, 0x2d, 0x4d, 0xe7,
|
||||||
|
0xff, 0x23, 0x29, 0xf1, 0x6d, 0x30, 0x35, 0xce, 0x7f, 0x4c, 0x52, 0x6a, 0x3d, 0xee, 0x64, 0x6c,
|
||||||
|
0x39, 0xf1, 0x03, 0x29, 0xc9, 0xfb, 0x55, 0xbd, 0xa9, 0xb1, 0x75, 0xe7, 0x13, 0x52, 0xf2, 0xc3,
|
||||||
|
0xd5, 0x6c, 0x60, 0x24, 0x15, 0x1d, 0xfc, 0x43, 0x42, 0x06, 0xba, 0x59, 0x63, 0x6e, 0x6c, 0xec,
|
||||||
|
0x36, 0xe1, 0x0e, 0x09, 0x39, 0xee, 0xe5, 0xdc, 0x40, 0x60, 0x62, 0x08, 0x9e, 0x7e, 0x8b, 0xf8,
|
||||||
|
0x2c, 0xfa, 0xef, 0x5c, 0xa3, 0x03, 0x50, 0x4f, 0xd0, 0xec, 0x37, 0xc4, 0xe7, 0xe9, 0x5f, 0x87,
|
||||||
|
0x1b, 0x1c, 0x8d, 0x8d, 0x2d, 0x2a, 0xcf, 0x93, 0x50, 0x08, 0xfc, 0x3a, 0x5c, 0x68, 0x6a, 0x6c,
|
||||||
|
0x1c, 0xb9, 0xf9, 0x0f, 0x09, 0xa5, 0xc6, 0xcb, 0x99, 0xce, 0xc6, 0xc6, 0xbe, 0x6b, 0xff, 0x90,
|
||||||
|
0x50, 0x6a, 0xfc, 0xdc, 0xe0, 0x67, 0x6c, 0x1c, 0x72, 0x94, 0x94, 0x52, 0xe3, 0xf7, 0x16, 0x7f,
|
||||||
|
0x63, 0xe3, 0xf2, 0x0f, 0xa4, 0x94, 0x7c, 0xbf, 0x16, 0x59, 0x19, 0x7b, 0x5e, 0x25, 0xa9, 0xa8,
|
||||||
|
0x7c, 0x98, 0x64, 0x6c, 0x7b, 0x9d, 0xa4, 0xb2, 0xf5, 0x4f, 0xa3, 0x71, 0xc0, 0x2f, 0x92, 0x0a,
|
||||||
|
0xe3, 0xbf, 0xa9, 0xc6, 0x47, 0xd1, 0x34, 0xac, 0xf9, 0x8b, 0x57, 0xc7, 0x54, 0xe3, 0x6d, 0x68,
|
||||||
|
0x1a, 0xfc, 0x22, 0x17, 0xe3, 0x4e, 0xa4, 0xbf, 0x57, 0x5b, 0x9a, 0x3d, 0x47, 0xd3, 0x00, 0x0c,
|
||||||
|
0x3c, 0x5c, 0x5a, 0xee, 0x2d, 0xf4, 0x35, 0x36, 0x59, 0xf5, 0x1f, 0x53, 0x03, 0x16, 0x2d, 0x6f,
|
||||||
|
0xcf, 0x2e, 0xad, 0x01, 0x46, 0x9d, 0x71, 0xcc, 0x09, 0xe4, 0x60, 0xbd, 0x78, 0xf2, 0xfc, 0xb5,
|
||||||
|
0x6b, 0xde, 0xd0, 0x12, 0x71, 0xca, 0xbd, 0x6b, 0xd7, 0x4e, 0x9d, 0x3c, 0xb0, 0x7d, 0xd9, 0xb4,
|
||||||
|
0x96, 0xc2, 0x70, 0x5b, 0xb0, 0x98, 0x6b, 0xc3, 0x51, 0xd4, 0x82, 0xcc, 0xdb, 0x18, 0x27, 0xb0,
|
||||||
|
0x8d, 0x6e, 0x5e, 0x73, 0xed, 0x2f, 0x7a, 0x5a, 0x2a, 0x4a, 0x8c, 0x89, 0x09, 0x34, 0x87, 0xa8,
|
||||||
|
0x30, 0xb1, 0x70, 0x09, 0x8c, 0x89, 0xc9, 0xcc, 0x2c, 0x6d, 0x9f, 0xb1, 0x62, 0xf7, 0x95, 0x77,
|
||||||
|
0x78, 0xf2, 0x03, 0xd8, 0x0f, 0xa6, 0x89, 0x1b, 0xff, 0x11, 0x5b, 0x6a, 0xf8, 0x13, 0xa3, 0x1c,
|
||||||
|
0x45, 0x03, 0x31, 0xca, 0x91, 0x35, 0x64, 0x6f, 0xfb, 0x47, 0x5a, 0xd9, 0x3a, 0x74, 0xdb, 0x1a,
|
||||||
|
0x00, 0x3b, 0xb8, 0x06, 0x01, 0x9b, 0xe5, 0xac, 0x50, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||||
|
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_right_up_xpm[1] = {{ png, sizeof( png ), "reannotate_right_up_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x02, 0x5d, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0xd6, 0xdd, 0x4b, 0x53,
|
||||||
|
0x71, 0x18, 0x07, 0xf0, 0xfd, 0x4f, 0xdf, 0x73, 0x72, 0x2f, 0x2d, 0x50, 0x2f, 0x9a, 0xad, 0xa8,
|
||||||
|
0xd8, 0xca, 0x82, 0x85, 0x69, 0x56, 0x14, 0x41, 0xf6, 0x02, 0x75, 0x61, 0x1d, 0x57, 0xda, 0xf0,
|
||||||
|
0x22, 0xbd, 0xa8, 0x8b, 0x02, 0x0b, 0x96, 0xa2, 0x0d, 0x4a, 0x0a, 0xfc, 0xe1, 0x34, 0x16, 0x14,
|
||||||
|
0x14, 0x04, 0x19, 0x2c, 0xb0, 0x8b, 0x51, 0x81, 0xa3, 0x42, 0x1b, 0xbd, 0x4c, 0xb7, 0x70, 0x5b,
|
||||||
|
0xee, 0xe9, 0xe2, 0xec, 0x9c, 0xf3, 0x7b, 0x39, 0x90, 0xbb, 0xab, 0x73, 0xf5, 0x3c, 0xe3, 0xf9,
|
||||||
|
0xec, 0xd9, 0xf9, 0xbd, 0xce, 0x43, 0x4d, 0x3e, 0x9e, 0x7f, 0x06, 0x14, 0x9b, 0x04, 0x99, 0x6b,
|
||||||
|
0x4d, 0x82, 0xbe, 0x70, 0xd1, 0x15, 0x64, 0x8d, 0xf3, 0xd3, 0x35, 0x97, 0xfa, 0x6c, 0x00, 0xb7,
|
||||||
|
0xdc, 0x00, 0xd3, 0x01, 0x1c, 0xfe, 0xae, 0x82, 0x7e, 0xa0, 0xb3, 0xaa, 0x82, 0x15, 0xbf, 0xfe,
|
||||||
|
0x68, 0x21, 0x8a, 0x43, 0xbf, 0xe4, 0xfa, 0x4f, 0xed, 0x00, 0xa6, 0x54, 0x70, 0x1d, 0x71, 0xa2,
|
||||||
|
0x9f, 0x11, 0x0c, 0xcb, 0x20, 0x01, 0x00, 0x3d, 0x75, 0x19, 0x94, 0x03, 0xfa, 0x12, 0x11, 0xe5,
|
||||||
|
0xbc, 0xfa, 0x82, 0x58, 0x5f, 0xda, 0x09, 0x00, 0xda, 0xbc, 0x0c, 0x32, 0xe8, 0x25, 0x22, 0xa2,
|
||||||
|
0xdb, 0xd8, 0x53, 0x11, 0xc0, 0x4d, 0x00, 0x00, 0xfa, 0x64, 0x30, 0x80, 0x24, 0x11, 0x11, 0xd5,
|
||||||
|
0xa2, 0x48, 0xf1, 0xf5, 0xb5, 0x4e, 0x13, 0xf8, 0xdf, 0x48, 0x20, 0x8c, 0xf7, 0x66, 0x30, 0x8f,
|
||||||
|
0x0e, 0xbe, 0xc5, 0x14, 0x1a, 0x4f, 0xbf, 0x08, 0x7e, 0x20, 0xb8, 0x61, 0x46, 0xf5, 0x83, 0xd6,
|
||||||
|
0x90, 0x10, 0x11, 0x51, 0xaf, 0x05, 0x5a, 0xf3, 0x02, 0x78, 0x89, 0x1e, 0x2b, 0x7c, 0x8a, 0xed,
|
||||||
|
0x55, 0xfb, 0xf3, 0xca, 0x2c, 0x63, 0xac, 0x03, 0x63, 0x8c, 0xb1, 0x2f, 0x02, 0x48, 0x3a, 0xc3,
|
||||||
|
0x59, 0x8f, 0x62, 0x56, 0x1c, 0xa8, 0xbd, 0xc8, 0x29, 0x33, 0x3d, 0x84, 0x49, 0x3b, 0x4e, 0xa1,
|
||||||
|
0x5b, 0x04, 0x3b, 0x90, 0x57, 0xc0, 0x09, 0x3c, 0x73, 0xa6, 0x64, 0x1b, 0xde, 0x09, 0xa0, 0x0d,
|
||||||
|
0x5f, 0x15, 0xb0, 0x1b, 0x1f, 0x9c, 0x82, 0x61, 0x5c, 0x11, 0x80, 0x1f, 0xab, 0x0a, 0xf0, 0xa1,
|
||||||
|
0xec, 0x14, 0x7c, 0xd4, 0x02, 0x6b, 0x5c, 0xfd, 0x86, 0x86, 0xaa, 0x0c, 0xd6, 0xe0, 0xe3, 0xbf,
|
||||||
|
0xb2, 0x1b, 0x8c, 0xcb, 0xca, 0xf0, 0x2a, 0x1b, 0x28, 0x8f, 0x30, 0x0f, 0x26, 0x70, 0x96, 0xcb,
|
||||||
|
0x3e, 0x23, 0xa4, 0x80, 0x2c, 0x62, 0x3c, 0x58, 0xd6, 0x7c, 0x25, 0x27, 0x5b, 0xc4, 0x01, 0x05,
|
||||||
|
0x3c, 0xc7, 0x49, 0xe1, 0x35, 0xbb, 0x90, 0x76, 0x92, 0x17, 0x38, 0xae, 0x80, 0x27, 0x38, 0x23,
|
||||||
|
0x80, 0x7b, 0x38, 0xe7, 0x24, 0x33, 0xb8, 0xa0, 0x00, 0x86, 0x8b, 0x02, 0x58, 0xd6, 0x5b, 0xbe,
|
||||||
|
0xd9, 0xc9, 0x1d, 0x8c, 0x28, 0x60, 0x1a, 0x97, 0xc5, 0xc9, 0x3d, 0x85, 0x09, 0x3b, 0xbe, 0x8a,
|
||||||
|
0xfb, 0x0a, 0x48, 0x61, 0x48, 0x04, 0x73, 0xd8, 0xe7, 0xb6, 0x0a, 0x6c, 0x30, 0x8e, 0x84, 0x08,
|
||||||
|
0x2a, 0xad, 0x78, 0x6b, 0xc5, 0xbb, 0x9c, 0x55, 0x60, 0x83, 0x1b, 0x38, 0x22, 0x6d, 0xfd, 0x11,
|
||||||
|
0xfb, 0x4d, 0x8b, 0x9a, 0xff, 0xb7, 0x02, 0x62, 0x68, 0x5b, 0x17, 0xc1, 0x8a, 0x57, 0x6f, 0x2c,
|
||||||
|
0xd1, 0x57, 0xe8, 0x52, 0x0e, 0xe3, 0xc2, 0x56, 0x60, 0x4c, 0x6a, 0x71, 0xc9, 0xda, 0x21, 0x77,
|
||||||
|
0xb9, 0x9f, 0xeb, 0xe1, 0x8e, 0x9e, 0x88, 0xd4, 0x22, 0xa7, 0x7b, 0x97, 0x88, 0x88, 0xe8, 0x28,
|
||||||
|
0x32, 0x32, 0x28, 0x84, 0x00, 0xb5, 0xc5, 0x80, 0x39, 0x99, 0xc5, 0x2d, 0x2d, 0x25, 0x19, 0x24,
|
||||||
|
0x00, 0x97, 0x16, 0x85, 0x20, 0xe6, 0x88, 0x28, 0xd9, 0x38, 0x92, 0x38, 0x60, 0x36, 0x50, 0x5b,
|
||||||
|
0x3c, 0x44, 0x30, 0x47, 0xc5, 0x10, 0x5e, 0xcb, 0x20, 0xd1, 0x38, 0x48, 0xe4, 0x16, 0x14, 0x47,
|
||||||
|
0x70, 0xfc, 0x18, 0x4e, 0xcb, 0x57, 0x96, 0xd5, 0x40, 0x6d, 0x51, 0x1b, 0xd5, 0x80, 0xfd, 0xab,
|
||||||
|
0x32, 0x48, 0x1b, 0x86, 0x11, 0x43, 0xc4, 0x30, 0x8c, 0x51, 0xe5, 0x6a, 0x58, 0x4c, 0xa6, 0x2b,
|
||||||
|
0xae, 0x97, 0xe2, 0xa4, 0xbc, 0x96, 0xfe, 0x76, 0x8b, 0x3e, 0x40, 0xbc, 0x39, 0xf0, 0xd8, 0x3c,
|
||||||
|
0x6b, 0x37, 0x0f, 0x98, 0xb3, 0xa9, 0x36, 0x07, 0xb2, 0x83, 0x33, 0xff, 0xd9, 0x7f, 0x0d, 0xfb,
|
||||||
|
0xf9, 0x03, 0x51, 0xf8, 0x05, 0x6d, 0x1f, 0x78, 0x3a, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||||
|
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_up_left_xpm[1] = {{ png, sizeof( png ), "reannotate_up_left_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,55 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps_png/bitmaps_list.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, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x72, 0x69, 0xa6,
|
||||||
|
0x5b, 0x00, 0x00, 0x02, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0xdf, 0x4b, 0x14,
|
||||||
|
0x51, 0x14, 0xc7, 0xf7, 0x7f, 0xfa, 0xac, 0x6b, 0x64, 0x8b, 0x4a, 0x6b, 0x8b, 0xb1, 0xa9, 0x49,
|
||||||
|
0xa8, 0x25, 0x82, 0x5a, 0x41, 0x16, 0x44, 0x06, 0x41, 0x3f, 0x94, 0x51, 0x4a, 0x48, 0x82, 0x28,
|
||||||
|
0x0b, 0x41, 0x02, 0x5f, 0xa2, 0x1f, 0x42, 0xfa, 0x50, 0x0e, 0x3d, 0xd8, 0x0f, 0xa3, 0x82, 0x84,
|
||||||
|
0x24, 0x85, 0x36, 0x85, 0xd0, 0xd2, 0x34, 0x12, 0x12, 0x15, 0x2c, 0x4a, 0x67, 0x3d, 0x3d, 0xec,
|
||||||
|
0xee, 0xcc, 0xbd, 0x73, 0x87, 0x70, 0x5e, 0xea, 0x3e, 0x9d, 0xc3, 0x7c, 0x3f, 0x73, 0xee, 0x9c,
|
||||||
|
0x7b, 0xee, 0x39, 0x13, 0x91, 0x90, 0x2b, 0xf2, 0x0f, 0x81, 0xb5, 0xb0, 0xc0, 0x89, 0x85, 0x70,
|
||||||
|
0xc0, 0xfb, 0x78, 0x77, 0x38, 0xa0, 0x8d, 0xbd, 0x41, 0x9b, 0x5a, 0xef, 0x6f, 0xed, 0x9e, 0x0f,
|
||||||
|
0x02, 0x16, 0x13, 0xd0, 0x67, 0xea, 0x67, 0x52, 0x40, 0x71, 0x3a, 0x00, 0xb8, 0x0c, 0xd4, 0x6c,
|
||||||
|
0xf8, 0xf5, 0x5f, 0xf7, 0xd0, 0x32, 0x7d, 0x95, 0x2a, 0xc7, 0x00, 0xd6, 0x2b, 0x01, 0xee, 0xfb,
|
||||||
|
0xf4, 0x99, 0xa3, 0x9c, 0x74, 0x64, 0xeb, 0x10, 0x8f, 0x0c, 0xa0, 0x17, 0x80, 0xe6, 0x2d, 0x1d,
|
||||||
|
0x18, 0x20, 0xb9, 0x26, 0x22, 0x4f, 0xa9, 0xf5, 0x03, 0x9b, 0x75, 0x00, 0x14, 0x8c, 0x68, 0xfa,
|
||||||
|
0x6f, 0xbb, 0x18, 0x15, 0x11, 0x71, 0x4a, 0x59, 0xf0, 0x01, 0x03, 0x51, 0x00, 0x38, 0xa5, 0x01,
|
||||||
|
0x5d, 0x9c, 0xc9, 0x1a, 0xe7, 0xb9, 0xe7, 0x03, 0x0e, 0x67, 0xf5, 0x14, 0xbd, 0x53, 0xf4, 0x8b,
|
||||||
|
0x85, 0x05, 0xb3, 0x59, 0x6b, 0x98, 0xd3, 0x3a, 0xf0, 0xa4, 0x30, 0x07, 0xd0, 0xa6, 0x00, 0x9d,
|
||||||
|
0xb4, 0xe7, 0xac, 0x59, 0xca, 0x75, 0x60, 0xda, 0xb6, 0xed, 0x4b, 0x34, 0xd9, 0xb6, 0xfd, 0x4c,
|
||||||
|
0x09, 0x10, 0x8b, 0xcd, 0xe5, 0xb3, 0x15, 0x67, 0xd9, 0x38, 0xe9, 0x61, 0xce, 0xea, 0x29, 0xba,
|
||||||
|
0xce, 0x39, 0xd7, 0x6e, 0xe6, 0x8d, 0x01, 0x8c, 0xd0, 0xaa, 0xe9, 0x7f, 0x27, 0x98, 0x70, 0x1d,
|
||||||
|
0x8b, 0x41, 0x03, 0x78, 0x45, 0x8b, 0x06, 0x3c, 0xe4, 0xa0, 0xe7, 0xf4, 0xd1, 0x63, 0x00, 0x6f,
|
||||||
|
0x69, 0xd2, 0x80, 0x06, 0x86, 0x3c, 0x47, 0xd9, 0xaf, 0x0b, 0xa4, 0xa9, 0x53, 0xf5, 0x53, 0x94,
|
||||||
|
0xfc, 0xf4, 0xbc, 0x71, 0x1a, 0x0d, 0x60, 0x96, 0x0a, 0xfd, 0x93, 0xbb, 0x14, 0x4f, 0x79, 0xe8,
|
||||||
|
0x02, 0xcb, 0x14, 0xab, 0x40, 0x25, 0x63, 0x8a, 0xb7, 0x4a, 0xdc, 0x00, 0x9c, 0x28, 0x4a, 0x75,
|
||||||
|
0xa7, 0xd9, 0xed, 0xa8, 0x65, 0x1b, 0xe3, 0x97, 0x71, 0xa7, 0x4b, 0xf8, 0xee, 0x29, 0x7a, 0xb4,
|
||||||
|
0x1d, 0x89, 0x24, 0x58, 0x32, 0x80, 0x2a, 0x3e, 0xba, 0xf6, 0xd6, 0x3e, 0xef, 0xa4, 0x44, 0x44,
|
||||||
|
0x24, 0xc5, 0x9c, 0x01, 0x1c, 0xe3, 0xa5, 0x78, 0x39, 0x4e, 0x3a, 0x1a, 0xb0, 0xdf, 0x7d, 0x5b,
|
||||||
|
0x44, 0xa9, 0xb5, 0x01, 0xd7, 0x6e, 0xe7, 0x86, 0x5e, 0x27, 0xb5, 0xa4, 0x0d, 0xe0, 0x16, 0xd7,
|
||||||
|
0xdc, 0x56, 0x51, 0xc4, 0x27, 0xf1, 0x1d, 0xe3, 0x84, 0x01, 0x3c, 0xf6, 0x8a, 0xfe, 0x01, 0xcd,
|
||||||
|
0xbe, 0xdb, 0x5d, 0xef, 0x66, 0xd9, 0x03, 0x66, 0x48, 0xe5, 0x93, 0x58, 0x8d, 0xed, 0x03, 0x92,
|
||||||
|
0xbc, 0x30, 0x80, 0x4c, 0x11, 0x2b, 0x59, 0xeb, 0x39, 0xe5, 0xbe, 0x86, 0x33, 0xbf, 0x83, 0x8b,
|
||||||
|
0x66, 0xf7, 0x6e, 0xe4, 0x75, 0xd6, 0x68, 0xe2, 0xb6, 0x2f, 0x80, 0x05, 0x15, 0x8e, 0x01, 0xf4,
|
||||||
|
0x72, 0x45, 0x44, 0x44, 0x46, 0x29, 0x5d, 0xd7, 0xf5, 0x73, 0x09, 0xc8, 0xe7, 0x50, 0x01, 0x26,
|
||||||
|
0xa9, 0x14, 0x11, 0xd9, 0xa8, 0x52, 0x7a, 0x44, 0x76, 0x75, 0x00, 0x34, 0x38, 0x7e, 0x20, 0x93,
|
||||||
|
0x62, 0x4c, 0x44, 0x6e, 0x72, 0x60, 0x33, 0x20, 0x40, 0xbe, 0x2f, 0xaa, 0x13, 0xe8, 0x0e, 0x47,
|
||||||
|
0x32, 0x32, 0x12, 0x2d, 0x9c, 0x08, 0x0a, 0x90, 0x0f, 0xa1, 0x02, 0x3f, 0xaa, 0xb1, 0x7a, 0x0a,
|
||||||
|
0x94, 0x03, 0xd7, 0x02, 0xe4, 0x42, 0x68, 0x33, 0xee, 0x73, 0x19, 0xec, 0x1c, 0x94, 0xe0, 0x00,
|
||||||
|
0xb9, 0x10, 0xfa, 0x50, 0x5c, 0x1d, 0xba, 0xfb, 0xc5, 0xaf, 0xdf, 0xe8, 0xb0, 0x2c, 0xab, 0x8c,
|
||||||
|
0xe3, 0x96, 0x75, 0x61, 0x6a, 0xfb, 0x53, 0xb4, 0x91, 0xf1, 0x70, 0x63, 0xb7, 0x9e, 0xc9, 0x70,
|
||||||
|
0x40, 0x0d, 0x1f, 0xc2, 0x01, 0x41, 0x17, 0xe8, 0xaf, 0xab, 0xbf, 0x73, 0xe9, 0x3f, 0xfc, 0x6b,
|
||||||
|
0x6c, 0x73, 0xfd, 0x01, 0x9a, 0x3b, 0x05, 0xb1, 0x1d, 0x29, 0xfa, 0x84, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE reannotate_up_right_xpm[1] = {{ png, sizeof( png ), "reannotate_up_right_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -383,6 +383,14 @@ EXTERN_BITMAP( py_script_xpm )
|
||||||
EXTERN_BITMAP( question_mark_xpm )
|
EXTERN_BITMAP( question_mark_xpm )
|
||||||
EXTERN_BITMAP( ratsnest_xpm )
|
EXTERN_BITMAP( ratsnest_xpm )
|
||||||
EXTERN_BITMAP( read_setup_xpm )
|
EXTERN_BITMAP( read_setup_xpm )
|
||||||
|
EXTERN_BITMAP( reannotate_right_down_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_left_down_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_right_up_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_left_up_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_down_left_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_up_left_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_down_right_xpm );
|
||||||
|
EXTERN_BITMAP( reannotate_up_right_xpm );
|
||||||
EXTERN_BITMAP( recent_xpm )
|
EXTERN_BITMAP( recent_xpm )
|
||||||
EXTERN_BITMAP( redo_xpm )
|
EXTERN_BITMAP( redo_xpm )
|
||||||
EXTERN_BITMAP( red_xpm )
|
EXTERN_BITMAP( red_xpm )
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-filename="C:\Users\bjpic\Documents\Test\reannotate_down_left.png"
|
||||||
|
sodipodi:docname="reannotate_down_left.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="13.001281"
|
||||||
|
inkscape:cx="-1.9698619"
|
||||||
|
inkscape:zoom="26.337527"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<color-profile
|
||||||
|
id="color-profile2783"
|
||||||
|
xlink:href="C:\WINDOWS\system32\spool\drivers\color\RSWOP.icm"
|
||||||
|
name="Agfa-:-Swop-Standard" />
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,0.04837496,-0.04384193,0.25964309,1.3389478,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.54999997,0,0,0.54999999,10.22052,86.253371)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.9 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_down_right.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="g11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="12.926513"
|
||||||
|
inkscape:cx="8.6276579"
|
||||||
|
inkscape:zoom="36.34276"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,0.04837496,-0.04384193,0.25964309,1.3389478,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(-0.51950634,0.19926325,0.16366857,0.51950636,96.675539,70.14565)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_left_down.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="13.00128"
|
||||||
|
inkscape:cx="13.300124"
|
||||||
|
inkscape:zoom="37.246888"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,0.04837496,-0.04384193,0.25964309,1.3389482,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0,0.60686718,-0.49846159,0,109.15196,79.43347)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_left_up.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="13.001281"
|
||||||
|
inkscape:cx="8.8165279"
|
||||||
|
inkscape:zoom="37.246888"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,-0.04837496,-0.04384193,-0.25964309,1.3389482,51.64059)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0,0.60686718,-0.49846159,0,109.15196,79.43347)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_right_down.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="13.00128"
|
||||||
|
inkscape:cx="8.8165279"
|
||||||
|
inkscape:zoom="37.246888"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(-0.28648887,0.04837496,0.04384193,0.25964309,25.2613,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0,0.60686718,-0.49846159,0,109.15196,79.43347)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_right_up.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="svg2"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="13.001281"
|
||||||
|
inkscape:cx="13.300124"
|
||||||
|
inkscape:zoom="37.246888"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(-0.28648887,-0.04837496,0.04384193,-0.25964309,25.2613,51.64059)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0,0.60686718,-0.49846159,0,109.15196,79.43347)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_up_left.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="g11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="12.926514"
|
||||||
|
inkscape:cx="13.222796"
|
||||||
|
inkscape:zoom="36.34276"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,0.04837496,-0.04384193,0.25964309,1.3389478,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.51950634,-0.19926325,-0.16366857,-0.51950636,28.360131,204.78822)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reannotate_up_right.svg"
|
||||||
|
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26">
|
||||||
|
<metadata
|
||||||
|
id="metadata29">
|
||||||
|
<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:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="g11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:cy="12.926514"
|
||||||
|
inkscape:cx="13.222796"
|
||||||
|
inkscape:zoom="36.342761"
|
||||||
|
showgrid="true"
|
||||||
|
id="namedview27"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
guidetolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
objecttolerance="10"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff">
|
||||||
|
<inkscape:grid
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
visible="true"
|
||||||
|
empspacing="5"
|
||||||
|
id="grid2987"
|
||||||
|
type="xygrid" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="a">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="5.4804575" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.28648887,0.04837496,-0.04384193,0.25964309,1.3389478,-25.643151)"
|
||||||
|
id="g11">
|
||||||
|
<g
|
||||||
|
transform="matrix(-0.54999997,0,0,-0.54999999,114.81515,188.6805)"
|
||||||
|
id="g2989">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#333333;stroke-width:6.89179993"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path13"
|
||||||
|
d="m 34.321,26.857 c 11.72,107.25 39.47,196.69 61.459,78.893 13.63,-112.28 39.73,-84.752 56.12,26.02" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path15"
|
||||||
|
d="m 132.41581,120.30954 33.93774,-6.32305 -10.66527,44.35293 z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:#333333;stroke:#333333"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path17"
|
||||||
|
d="M 20.243052,48.774241 54.180793,42.451188 42.942466,83.059446 Z"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -35,7 +35,8 @@ WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent,
|
||||||
WX_HTML_REPORT_PANEL_BASE( parent, id, pos, size, style ),
|
WX_HTML_REPORT_PANEL_BASE( parent, id, pos, size, style ),
|
||||||
m_reporter( this ),
|
m_reporter( this ),
|
||||||
m_severities( -1 ),
|
m_severities( -1 ),
|
||||||
m_lazyUpdate( false )
|
m_lazyUpdate( false ),
|
||||||
|
m_PrintInfo( true )
|
||||||
{
|
{
|
||||||
syncCheckboxes();
|
syncCheckboxes();
|
||||||
m_htmlView->SetPage( addHeader( "" ) );
|
m_htmlView->SetPage( addHeader( "" ) );
|
||||||
|
@ -310,7 +311,12 @@ void WX_HTML_REPORT_PANEL::onCheckBoxShowActions( wxCommandEvent& event )
|
||||||
|
|
||||||
void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event )
|
void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxFileName fn( "./report.txt" );
|
wxFileName fn;
|
||||||
|
|
||||||
|
if( m_ReportFileName.empty() )
|
||||||
|
fn = wxT( "./report.txt" );
|
||||||
|
else
|
||||||
|
fn = m_ReportFileName;
|
||||||
|
|
||||||
wxFileDialog dlg( this, _( "Save Report to File" ), fn.GetPath(), fn.GetFullName(),
|
wxFileDialog dlg( this, _( "Save Report to File" ), fn.GetPath(), fn.GetFullName(),
|
||||||
TextFileWildcard(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
TextFileWildcard(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||||
|
@ -339,7 +345,7 @@ void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
f.Write( generatePlainText( l ) );
|
f.Write( generatePlainText( l ) );
|
||||||
}
|
}
|
||||||
|
m_ReportFileName = fn.GetFullPath();
|
||||||
f.Close();
|
f.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,3 +379,44 @@ int WX_HTML_REPORT_PANEL::GetVisibleSeverities()
|
||||||
{
|
{
|
||||||
return m_severities;
|
return m_severities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WX_HTML_REPORT_PANEL::SetFileName( wxString& aReportFileName )
|
||||||
|
{
|
||||||
|
m_ReportFileName = aReportFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString& WX_HTML_REPORT_PANEL::GetFileName( void )
|
||||||
|
{
|
||||||
|
return ( m_ReportFileName );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WX_HTML_REPORT_PANEL::SetPrintInfo( bool aPrintInfo )
|
||||||
|
{
|
||||||
|
m_PrintInfo = aPrintInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WX_HTML_REPORT_PANEL::SetShowSeverity( SEVERITY aSeverity, bool aValue )
|
||||||
|
{
|
||||||
|
switch( aSeverity )
|
||||||
|
{
|
||||||
|
case RPT_SEVERITY_INFO:
|
||||||
|
m_checkBoxShowInfos->SetValue( aValue );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RPT_SEVERITY_ACTION:
|
||||||
|
m_checkBoxShowActions->SetValue( aValue );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RPT_SEVERITY_WARNING:
|
||||||
|
m_checkBoxShowWarnings->SetValue( aValue );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
m_checkBoxShowErrors->SetValue( aValue );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -87,6 +87,20 @@ public:
|
||||||
///> If the m_showAll option is set, the mask is < 0
|
///> If the m_showAll option is set, the mask is < 0
|
||||||
int GetVisibleSeverities();
|
int GetVisibleSeverities();
|
||||||
|
|
||||||
|
///> If true prints Info: at the beginning of each Info severity line (Default)
|
||||||
|
void SetPrintInfo( bool aPrintInfo );
|
||||||
|
|
||||||
|
///> @return the visible severity filter.
|
||||||
|
///> If the m_showAll option is set, the mask is < 0
|
||||||
|
void SetShowSeverity( SEVERITY aSeverity, bool aValue );
|
||||||
|
|
||||||
|
///> Set the report full file name to the string
|
||||||
|
void SetFileName( wxString& aReportFileName );
|
||||||
|
|
||||||
|
///> @return reference to the current report fill file name string.
|
||||||
|
wxString& GetFileName( void );
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct REPORT_LINE
|
struct REPORT_LINE
|
||||||
{
|
{
|
||||||
|
@ -130,6 +144,12 @@ private:
|
||||||
int m_severities;
|
int m_severities;
|
||||||
|
|
||||||
bool m_lazyUpdate;
|
bool m_lazyUpdate;
|
||||||
|
|
||||||
|
///> Print "Info:" at the front of Info messages (default)
|
||||||
|
bool m_PrintInfo;
|
||||||
|
|
||||||
|
///> Use this as the filename instead of /bin/report.txt (default)
|
||||||
|
wxString m_ReportFileName;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__WX_HTML_REPORT_PANEL_H__
|
#endif //__WX_HTML_REPORT_PANEL_H__
|
||||||
|
|
|
@ -247,6 +247,7 @@ set( EESCHEMA_SRCS
|
||||||
tools/lib_edit_tool.cpp
|
tools/lib_edit_tool.cpp
|
||||||
tools/lib_move_tool.cpp
|
tools/lib_move_tool.cpp
|
||||||
tools/lib_pin_tool.cpp
|
tools/lib_pin_tool.cpp
|
||||||
|
tools/reannotate.cpp
|
||||||
tools/sch_drawing_tools.cpp
|
tools/sch_drawing_tools.cpp
|
||||||
tools/sch_edit_tool.cpp
|
tools/sch_edit_tool.cpp
|
||||||
tools/sch_editor_control.cpp
|
tools/sch_editor_control.cpp
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include <project/project_file.h>
|
#include <project/project_file.h>
|
||||||
#include <project/net_settings.h>
|
#include <project/net_settings.h>
|
||||||
#include <tools/ee_actions.h>
|
#include <tools/ee_actions.h>
|
||||||
|
#include <tools/reannotate.h>
|
||||||
#include <tools/sch_editor_control.h>
|
#include <tools/sch_editor_control.h>
|
||||||
#include <advanced_config.h>
|
#include <advanced_config.h>
|
||||||
#include <netclass.h>
|
#include <netclass.h>
|
||||||
|
@ -576,7 +577,12 @@ void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
|
||||||
m_toolManager->RunAction( ACTIONS::updateSchematicFromPcb, true );
|
m_toolManager->RunAction( ACTIONS::updateSchematicFromPcb, true );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case MAIL_REANNOTATE:
|
||||||
;
|
{ //Reannotate the schematic as per the netlist.
|
||||||
|
ReannotateFromPCBNew( this, payload );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 2004-2020 KiCad Developers, see AUTHORS.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sch_edit_frame.h>
|
||||||
|
#include <tools/backannotate.h>
|
||||||
|
#include <reannotate.h>
|
||||||
|
|
||||||
|
|
||||||
|
WX_STRING_REPORTER_FILTERED::WX_STRING_REPORTER_FILTERED( SEVERITY aSeverity ) :
|
||||||
|
m_MinSeverity( aSeverity )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WX_STRING_REPORTER_FILTERED::~WX_STRING_REPORTER_FILTERED()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
REPORTER& WX_STRING_REPORTER_FILTERED::Report( const wxString &aText,
|
||||||
|
SEVERITY aSeverity )
|
||||||
|
{
|
||||||
|
if ( aSeverity < m_MinSeverity )
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
m_string << aText << "\n";
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool WX_STRING_REPORTER_FILTERED::HasMessage() const
|
||||||
|
{
|
||||||
|
return !m_string.IsEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ReannotateFromPCBNew( SCH_EDIT_FRAME* aFrame, std::string& aNetlist )
|
||||||
|
{
|
||||||
|
wxString annotateerrors;
|
||||||
|
WX_STRING_REPORTER_FILTERED reporter( SEVERITY::RPT_SEVERITY_ERROR );
|
||||||
|
|
||||||
|
BACK_ANNOTATE backAnno( aFrame,
|
||||||
|
reporter,
|
||||||
|
false, //aRelinkFootprints
|
||||||
|
false, //aProcessFootprints
|
||||||
|
false, //aProcessValues
|
||||||
|
true, //aProcessReferences
|
||||||
|
false, //aProcessNetNames
|
||||||
|
false, //aIgnoreOtherProjects
|
||||||
|
false ); //aDryRun
|
||||||
|
|
||||||
|
if ( !backAnno.BackAnnotateSymbols( aNetlist ) )
|
||||||
|
{
|
||||||
|
aNetlist = _( "Errors reported by Eeschema:\n" )
|
||||||
|
+ reporter.m_string.ToStdString(); //Assume the worst
|
||||||
|
aNetlist += _( "\nAnnotation not performed!\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aNetlist.clear(); //Empty means good
|
||||||
|
}
|
||||||
|
|
||||||
|
aFrame->GetCurrentSheet().UpdateAllScreenReferences();
|
||||||
|
aFrame->SetSheetNumberAndCount();
|
||||||
|
aFrame->SyncView();
|
||||||
|
aFrame->OnModify();
|
||||||
|
aFrame->GetCanvas()->Refresh();
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 2004-2020 KiCad Developers, see AUTHORS.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EESCHEMA_TOOLS_REANNOTATE_H_
|
||||||
|
#define EESCHEMA_TOOLS_REANNOTATE_H_
|
||||||
|
|
||||||
|
#include <reporter.h>
|
||||||
|
/**
|
||||||
|
* Class WX_STRING_REPORTER
|
||||||
|
* is a wrapper for reporting to a wxString object.
|
||||||
|
*/
|
||||||
|
class WX_STRING_REPORTER_FILTERED : public REPORTER
|
||||||
|
{
|
||||||
|
SEVERITY m_MinSeverity;
|
||||||
|
|
||||||
|
public:
|
||||||
|
WX_STRING_REPORTER_FILTERED( SEVERITY aSeverity );
|
||||||
|
virtual ~WX_STRING_REPORTER_FILTERED();
|
||||||
|
|
||||||
|
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||||
|
wxString m_string = "";
|
||||||
|
bool HasMessage() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
///> Backannotate the schematic with a netlist sent from PCBNew.
|
||||||
|
///> Reply with a string consisting of errors or warnings. If empty no errors
|
||||||
|
void ReannotateFromPCBNew( SCH_EDIT_FRAME* aFrame, std::string& aNetlist );
|
||||||
|
|
||||||
|
#endif /* EESCHEMA_TOOLS_REANNOTATE_H_ */
|
|
@ -47,9 +47,9 @@ enum MAIL_T
|
||||||
MAIL_PCB_GET_NETLIST, // Fetch a netlist from PCB layout
|
MAIL_PCB_GET_NETLIST, // Fetch a netlist from PCB layout
|
||||||
MAIL_PCB_UPDATE_LINKS, // Update the schematic symbol paths in the PCB's footprints
|
MAIL_PCB_UPDATE_LINKS, // Update the schematic symbol paths in the PCB's footprints
|
||||||
MAIL_SCH_REFRESH, // Tell the schematic editor to refresh the display.
|
MAIL_SCH_REFRESH, // Tell the schematic editor to refresh the display.
|
||||||
|
|
||||||
MAIL_SCH_CLEAN_NETCLASSES, // Tell the schematic editor to clean stale nets out of
|
MAIL_SCH_CLEAN_NETCLASSES, // Tell the schematic editor to clean stale nets out of
|
||||||
// the netclass membership lists
|
// the netclass membership lists
|
||||||
|
MAIL_REANNOTATE, // Reannotate eeSchema
|
||||||
MAIL_LIB_EDIT,
|
MAIL_LIB_EDIT,
|
||||||
MAIL_FP_EDIT
|
MAIL_FP_EDIT
|
||||||
};
|
};
|
||||||
|
|
|
@ -54,6 +54,8 @@ set( PCBNEW_DIALOGS
|
||||||
dialogs/dialog_board_setup.cpp
|
dialogs/dialog_board_setup.cpp
|
||||||
dialogs/dialog_board_statistics.cpp
|
dialogs/dialog_board_statistics.cpp
|
||||||
dialogs/dialog_board_statistics_base.cpp
|
dialogs/dialog_board_statistics_base.cpp
|
||||||
|
dialogs/dialog_board_reannotate.cpp
|
||||||
|
dialogs/dialog_board_reannotate_base.cpp
|
||||||
dialogs/dialog_choose_footprint.cpp
|
dialogs/dialog_choose_footprint.cpp
|
||||||
dialogs/dialog_cleanup_graphics.cpp
|
dialogs/dialog_cleanup_graphics.cpp
|
||||||
dialogs/dialog_cleanup_graphics_base.cpp
|
dialogs/dialog_cleanup_graphics_base.cpp
|
||||||
|
@ -317,6 +319,7 @@ set( PCBNEW_CLASS_SRCS
|
||||||
tools/pcb_bright_box.cpp
|
tools/pcb_bright_box.cpp
|
||||||
tools/pcb_editor_control.cpp
|
tools/pcb_editor_control.cpp
|
||||||
tools/pcb_inspection_tool.cpp
|
tools/pcb_inspection_tool.cpp
|
||||||
|
tools/pcb_reannotate_tool.cpp
|
||||||
tools/pcb_selection_conditions.cpp
|
tools/pcb_selection_conditions.cpp
|
||||||
tools/pcb_tool_base.cpp
|
tools/pcb_tool_base.cpp
|
||||||
tools/pcbnew_control.cpp
|
tools/pcbnew_control.cpp
|
||||||
|
|
|
@ -0,0 +1,919 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
* @author Brian Piccioni <brian@documenteddesigns.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <base_units.h>
|
||||||
|
#include <bitmaps.h>
|
||||||
|
#include <board_commit.h>
|
||||||
|
#include <confirm.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <dialog_board_reannotate.h>
|
||||||
|
#include <fstream>
|
||||||
|
#include <kiface_i.h>
|
||||||
|
#include <mail_type.h>
|
||||||
|
#include <pcbnew_settings.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tool/grid_menu.h>
|
||||||
|
|
||||||
|
bool SortYFirst;
|
||||||
|
bool DescendingFirst;
|
||||||
|
bool DescendingSecond;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This converts the index into a sort code. Note that Back sort code will have left and right swapped.
|
||||||
|
//
|
||||||
|
int FrontDirectionsArray[] = {
|
||||||
|
SORTYFIRST + ASCENDINGFIRST + ASCENDINGSECOND, //"Top to bottom, left to right", // 100
|
||||||
|
SORTYFIRST + ASCENDINGFIRST + DESCENDINGSECOND, //"Top to bottom, right to left", // 101
|
||||||
|
SORTYFIRST + DESCENDINGFIRST + ASCENDINGSECOND, //"Back to Front, left to right", // 110
|
||||||
|
SORTYFIRST + DESCENDINGFIRST + DESCENDINGSECOND, //"Back to Front, right to left", // 111
|
||||||
|
SORTXFIRST + ASCENDINGFIRST + ASCENDINGSECOND, //"Left to right, Front to Back", // 000
|
||||||
|
SORTXFIRST + ASCENDINGFIRST + DESCENDINGSECOND, //"Left to right, Back to Front", // 001
|
||||||
|
SORTXFIRST + DESCENDINGFIRST + ASCENDINGSECOND, //"Right to left, Front to Back", // 010
|
||||||
|
SORTXFIRST + DESCENDINGFIRST + DESCENDINGSECOND //"Right to left, Back to Front", // 011
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Back Left/Right is opposite because it is a mirror image (coordinates are from the top)
|
||||||
|
//
|
||||||
|
int BackDirectionsArray[] = {
|
||||||
|
SORTYFIRST + ASCENDINGFIRST + DESCENDINGSECOND, //"Top to bottom, left to right", // 101
|
||||||
|
SORTYFIRST + ASCENDINGFIRST + ASCENDINGSECOND, //"Top to bottom, right to left", // 100
|
||||||
|
SORTYFIRST + DESCENDINGFIRST + DESCENDINGSECOND, //"Bottom to top, left to right", // 111
|
||||||
|
SORTYFIRST + DESCENDINGFIRST + ASCENDINGSECOND, //"Bottom to top, right to left", // 110
|
||||||
|
SORTXFIRST + DESCENDINGFIRST + ASCENDINGSECOND, //"Left to right, top to bottom", // 010
|
||||||
|
SORTXFIRST + DESCENDINGFIRST + DESCENDINGSECOND, //"Left to right, bottom to top", // 011
|
||||||
|
SORTXFIRST + ASCENDINGFIRST + ASCENDINGSECOND, //"Right to left, top to bottom", // 000
|
||||||
|
SORTXFIRST + ASCENDINGFIRST + DESCENDINGSECOND //"Right to left, bottom to top", // 001
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SetSortCodes( DirArray, Code ) \
|
||||||
|
{ \
|
||||||
|
SortYFirst = ( ( DirArray[Code] & SORTYFIRST ) != 0 ); \
|
||||||
|
DescendingFirst = ( ( DirArray[Code] & DESCENDINGFIRST ) != 0 ); \
|
||||||
|
DescendingSecond = ( ( DirArray[Code] & DESCENDINGSECOND ) != 0 ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString AnnotateString[] = {
|
||||||
|
_( "All" ), //AnnotateAll
|
||||||
|
_( "Only front" ), //AnnotateFront
|
||||||
|
_( "Only back" ), //AnnotateBack
|
||||||
|
_( "Only selected" ) //AnnotateSelected
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
wxString ActionMessage[] = {
|
||||||
|
_( "" ), //UpdateRefDes
|
||||||
|
_( "Empty" ), //EmptyRefDes
|
||||||
|
_( "Invalid" ), //InvalidRefDes
|
||||||
|
_( "Excluded" ) //Exclude
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_BOARD_REANNOTATE::DIALOG_BOARD_REANNOTATE( PCB_EDIT_FRAME* aParentFrame )
|
||||||
|
: DIALOG_BOARD_REANNOTATE_BASE( aParentFrame ), m_modules( aParentFrame->GetBoard()->Modules() )
|
||||||
|
{
|
||||||
|
m_Config = Kiface().KifaceSettings();
|
||||||
|
InitValues();
|
||||||
|
|
||||||
|
m_frame = aParentFrame;
|
||||||
|
m_screen = m_frame->GetScreen();
|
||||||
|
m_Units = m_frame->GetUserUnits();
|
||||||
|
m_Standalone = !m_frame->TestStandalone(); //Do this here forces the menu on top
|
||||||
|
|
||||||
|
if( m_Standalone )
|
||||||
|
{ //Only update the schematic if not in standalone mode
|
||||||
|
m_UpdateSchematic->Enable( false );
|
||||||
|
m_UpdateSchematic->SetValue( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_FrontRefDesStart->SetValidator( wxTextValidator( wxFILTER_DIGITS ) );
|
||||||
|
m_BackRefDesStart->SetValidator( wxTextValidator( wxFILTER_DIGITS ) );
|
||||||
|
|
||||||
|
m_sdbSizerOK->SetLabel( _( "Reannotate PCB" ) );
|
||||||
|
m_sdbSizerCancel->SetLabel( _( "Close" ) );
|
||||||
|
|
||||||
|
m_Settings = aParentFrame->config();
|
||||||
|
wxArrayString gridslist;
|
||||||
|
GRID_MENU::BuildChoiceList( &gridslist, m_Settings,
|
||||||
|
aParentFrame->GetUserUnits() != EDA_UNITS::INCHES );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if( -1 == m_GridIndex ) //If no default loaded
|
||||||
|
m_GridIndex = m_Settings->m_Window.grid.last_size_idx; //Get the current grid size
|
||||||
|
|
||||||
|
m_SortGridx = m_frame->GetCanvas()->GetGAL()->GetGridSize().x;
|
||||||
|
m_SortGridy = m_frame->GetCanvas()->GetGAL()->GetGridSize().y;
|
||||||
|
|
||||||
|
m_GridChoice->Set( gridslist ); //Show the choice in the dialog
|
||||||
|
m_GridChoice->SetSelection( m_GridIndex );
|
||||||
|
|
||||||
|
for( wxRadioButton* button : m_sortButtons )
|
||||||
|
button->SetValue( false );
|
||||||
|
|
||||||
|
m_sortButtons[m_SortCode]->SetValue( true );
|
||||||
|
|
||||||
|
m_selection = m_frame->GetToolManager()->GetTool<SELECTION_TOOL>()->GetSelection();
|
||||||
|
|
||||||
|
if( !m_selection.Empty() )
|
||||||
|
m_AnnotationChoice = AnnotationChoice::AnnotateSelected;
|
||||||
|
|
||||||
|
for( wxRadioButton* button : AnnotateWhat )
|
||||||
|
button->SetValue( false );
|
||||||
|
|
||||||
|
m_AnnotationChoice = ( m_SortCode >= (int) AnnotateWhat.size() ) ?
|
||||||
|
AnnotationChoice::AnnotateAll :
|
||||||
|
m_AnnotationChoice;
|
||||||
|
|
||||||
|
AnnotateWhat[m_AnnotationChoice]->SetValue( true );
|
||||||
|
|
||||||
|
reannotate_down_right_bitmap->SetBitmap( KiBitmap( reannotate_right_down_xpm ) );
|
||||||
|
reannotate_right_down_bitmap->SetBitmap( KiBitmap( reannotate_left_down_xpm ) );
|
||||||
|
reannotate_down_left_bitmap->SetBitmap( KiBitmap( reannotate_right_up_xpm ) );
|
||||||
|
reannotate_left_down_bitmap->SetBitmap( KiBitmap( reannotate_left_up_xpm ) );
|
||||||
|
reannotate_up_right_bitmap->SetBitmap( KiBitmap( reannotate_down_left_xpm ) );
|
||||||
|
reannotate_right_up_bitmap->SetBitmap( KiBitmap( reannotate_up_left_xpm ) );
|
||||||
|
reannotate_up_left_bitmap->SetBitmap( KiBitmap( reannotate_down_right_xpm ) );
|
||||||
|
reannotate_left_up_bitmap->SetBitmap( KiBitmap( reannotate_up_right_xpm ) );
|
||||||
|
|
||||||
|
m_ExcludeList->SetToolTip( m_ExcludeListText->GetToolTipText() );
|
||||||
|
m_GridChoice->SetToolTip( m_SortGridText->GetToolTipText() );
|
||||||
|
|
||||||
|
if( m_MessageWindow->GetFileName().empty() )
|
||||||
|
{ //Set the reporter window filename to something sensible
|
||||||
|
wxFileName fn = m_frame->GetBoard()->GetFileName();
|
||||||
|
fn.SetName( "annotationreport" );
|
||||||
|
fn.SetExt( "txt " );
|
||||||
|
wxString fullname = fn.GetFullPath();
|
||||||
|
m_MessageWindow->SetFileName( fullname );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_MessageWindow->SetPrintInfo( false ); //Suppress the "Info: " prefix
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_BOARD_REANNOTATE::~DIALOG_BOARD_REANNOTATE()
|
||||||
|
{
|
||||||
|
GetParameters(); //Get the current menu settings
|
||||||
|
PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings();
|
||||||
|
cfg->m_Reannotate.sort_on_modules = m_SortOnModules->GetValue();
|
||||||
|
cfg->m_Reannotate.remove_front_prefix = m_RemoveFrontPrefix->GetValue();
|
||||||
|
cfg->m_Reannotate.remove_back_prefix = m_RemoveBackPrefix->GetValue();
|
||||||
|
cfg->m_Reannotate.update_schematic = m_UpdateSchematic->GetValue();
|
||||||
|
cfg->m_Reannotate.exclude_locked = m_ExcludeLocked->GetValue();
|
||||||
|
|
||||||
|
cfg->m_Reannotate.grid_index = m_GridIndex;
|
||||||
|
cfg->m_Reannotate.sort_code = m_SortCode;
|
||||||
|
cfg->m_Reannotate.annotation_choice = m_AnnotationChoice;
|
||||||
|
cfg->m_Reannotate.report_severity = m_Severity;
|
||||||
|
|
||||||
|
cfg->m_Reannotate.front_refdes_start = m_FrontRefDesStart->GetValue();
|
||||||
|
cfg->m_Reannotate.back_refdes_start = m_BackRefDesStart->GetValue();
|
||||||
|
cfg->m_Reannotate.front_prefix = m_FrontPrefix->GetValue();
|
||||||
|
cfg->m_Reannotate.back_prefix = m_BackPrefix->GetValue();
|
||||||
|
cfg->m_Reannotate.exclude_list = m_ExcludeList->GetValue();
|
||||||
|
cfg->m_Reannotate.report_file_name = m_MessageWindow->GetFileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Copy saved app settings to the dialog
|
||||||
|
void DIALOG_BOARD_REANNOTATE::InitValues( void )
|
||||||
|
{
|
||||||
|
PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings();
|
||||||
|
m_SortOnModules->SetValue( cfg->m_Reannotate.sort_on_modules );
|
||||||
|
m_SortOnReference->SetValue( !cfg->m_Reannotate.sort_on_modules );
|
||||||
|
m_RemoveFrontPrefix->SetValue( cfg->m_Reannotate.remove_front_prefix );
|
||||||
|
m_RemoveBackPrefix->SetValue( cfg->m_Reannotate.remove_back_prefix );
|
||||||
|
m_UpdateSchematic->SetValue( cfg->m_Reannotate.update_schematic );
|
||||||
|
m_ExcludeLocked->SetValue( cfg->m_Reannotate.exclude_locked );
|
||||||
|
|
||||||
|
m_GridIndex = cfg->m_Reannotate.grid_index ;
|
||||||
|
m_SortCode = cfg->m_Reannotate.sort_code ;
|
||||||
|
m_AnnotationChoice = cfg->m_Reannotate.annotation_choice ;
|
||||||
|
m_Severity = cfg->m_Reannotate.report_severity;
|
||||||
|
|
||||||
|
m_FrontRefDesStart->SetValue( cfg->m_Reannotate.front_refdes_start );
|
||||||
|
m_BackRefDesStart->SetValue( cfg->m_Reannotate.back_refdes_start );
|
||||||
|
m_FrontPrefix->SetValue( cfg->m_Reannotate.front_prefix );
|
||||||
|
m_BackPrefix->SetValue( cfg->m_Reannotate.back_prefix );
|
||||||
|
m_ExcludeList->SetValue( cfg->m_Reannotate.exclude_list );
|
||||||
|
m_MessageWindow->SetFileName( cfg->m_Reannotate.report_file_name );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_BOARD_REANNOTATE::OnCloseClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
EndDialog( wxID_OK );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Check to make sure the prefix (if there is one) is properly constructed
|
||||||
|
void DIALOG_BOARD_REANNOTATE::FilterPrefix( wxTextCtrl* aPrefix )
|
||||||
|
{
|
||||||
|
std::string tmps = VALIDPREFIX;
|
||||||
|
|
||||||
|
if( aPrefix->GetValue().empty() )
|
||||||
|
return; //Should never happen
|
||||||
|
|
||||||
|
char lastc = aPrefix->GetValue().Last();
|
||||||
|
|
||||||
|
if( isalnum( (int) lastc ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( std::string::npos != tmps.find( lastc ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
tmps = aPrefix->GetValue();
|
||||||
|
aPrefix->Clear();
|
||||||
|
tmps.pop_back();
|
||||||
|
aPrefix->AppendText( tmps );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_BOARD_REANNOTATE::FilterFrontPrefix( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
FilterPrefix( m_FrontPrefix );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_BOARD_REANNOTATE::FilterBackPrefix( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
FilterPrefix( m_BackPrefix );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Warn the user about the settings and try to reannotate the board
|
||||||
|
void DIALOG_BOARD_REANNOTATE::OnApplyClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
wxString warning;
|
||||||
|
|
||||||
|
if( m_frame->GetBoard()->IsEmpty() )
|
||||||
|
{
|
||||||
|
ShowReport( _( "No Board to reannotate!" ), RPT_SEVERITY_ERROR );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetParameters(); //Figure out how this is to be done
|
||||||
|
MakeSampleText( warning );
|
||||||
|
|
||||||
|
if( !IsOK( m_frame, warning ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( ReannotateBoard() )
|
||||||
|
ShowReport( _( "PCB and schematic successfully reannotated" ), RPT_SEVERITY_ACTION );
|
||||||
|
|
||||||
|
m_MessageWindow->SetLazyUpdate( false );
|
||||||
|
m_MessageWindow->Flush( false );
|
||||||
|
m_frame->GetCanvas()->Refresh(); //Redraw
|
||||||
|
m_frame->OnModify(); //Need to save file on exit.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Make the text to summarize what is about to happen
|
||||||
|
void DIALOG_BOARD_REANNOTATE::MakeSampleText( wxString& aMessage )
|
||||||
|
{
|
||||||
|
wxString tmp;
|
||||||
|
|
||||||
|
aMessage.Printf( "\n%s components will be reannotated. ",
|
||||||
|
_( AnnotateString[m_AnnotationChoice] ) );
|
||||||
|
|
||||||
|
if( !m_ExcludeList->GetValue().empty() )
|
||||||
|
aMessage += wxString::Format(
|
||||||
|
( "\nAny reference types %s will not be annotated." ), m_ExcludeList->GetValue() );
|
||||||
|
|
||||||
|
if( m_ExcludeLocked->GetValue() )
|
||||||
|
aMessage += wxString::Format( _( "\nLocked footprints will not be annotated" ) );
|
||||||
|
|
||||||
|
if( !m_AnnotateBack->GetValue() )
|
||||||
|
aMessage += wxString::Format(
|
||||||
|
_( "\nFront components will start at %s" ), m_FrontRefDesStart->GetValue() );
|
||||||
|
|
||||||
|
if( !m_AnnotateFront->GetValue() )
|
||||||
|
aMessage += wxString::Format( _( "\nBack components will start at %s." ),
|
||||||
|
( ( ( 0 == atoi( m_BackRefDesStart->GetValue() ) )
|
||||||
|
&& !m_AnnotateBack->GetValue() ) ?
|
||||||
|
_( "the last front component + 1" ).c_str() :
|
||||||
|
m_BackRefDesStart->GetValue().c_str() ) );
|
||||||
|
|
||||||
|
if( !m_FrontPrefix->GetValue().empty() )
|
||||||
|
{
|
||||||
|
if( m_RemoveFrontPrefix->GetValue() )
|
||||||
|
aMessage += wxString::Format(
|
||||||
|
_( "\nFront components starting with %s will have the prefix removed." ),
|
||||||
|
m_FrontPrefix->GetValue() );
|
||||||
|
else
|
||||||
|
aMessage +=
|
||||||
|
wxString::Format( _( "\nFront components will have %s inserted as a prefix." ),
|
||||||
|
m_FrontPrefix->GetValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !m_BackPrefix->GetValue().empty() )
|
||||||
|
{
|
||||||
|
if( m_RemoveBackPrefix->GetValue() )
|
||||||
|
aMessage += wxString::Format(
|
||||||
|
_( "\nBack components starting with %s will have the prefix removed." ),
|
||||||
|
m_BackPrefix->GetValue() );
|
||||||
|
else
|
||||||
|
aMessage +=
|
||||||
|
wxString::Format( _( "\nBack components will have %s inserted as a prefix." ),
|
||||||
|
m_BackPrefix->GetValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
aMessage += wxString::Format(
|
||||||
|
_( "\nPrior to sorting on %s, the coordinates of which will be rounded to a %s, %s grid. " ),
|
||||||
|
( m_SortOnModules->GetValue() ? _( "footprints" ) : _( "references" ) ),
|
||||||
|
MessageTextFromValue( m_Units, m_SortGridx, false ).c_str(),
|
||||||
|
MessageTextFromValue( m_Units, m_SortGridy, false ).c_str() );
|
||||||
|
|
||||||
|
aMessage += wxString::Format( _( "\nThe schematic will %sbe updated." ),
|
||||||
|
( m_UpdateSchematic->GetValue() ? "" : _( "not " ) ) );
|
||||||
|
|
||||||
|
ShowReport( aMessage, RPT_SEVERITY_INFO );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Copies the dialog settings to the private variables
|
||||||
|
void DIALOG_BOARD_REANNOTATE::GetParameters( void )
|
||||||
|
{
|
||||||
|
m_SortCode = 0; //Convert radio button to sort direction code
|
||||||
|
|
||||||
|
for( wxRadioButton* sortbuttons : m_sortButtons )
|
||||||
|
{
|
||||||
|
if( sortbuttons->GetValue() )
|
||||||
|
break;
|
||||||
|
|
||||||
|
m_SortCode++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_SortCode >= (int) m_sortButtons.size() )
|
||||||
|
m_SortCode = 0;
|
||||||
|
|
||||||
|
m_FrontPrefixString = m_FrontPrefix->GetValue();
|
||||||
|
m_BackPrefixString = m_BackPrefix->GetValue();
|
||||||
|
|
||||||
|
//Get the chosen sort grid for rounding
|
||||||
|
m_GridIndex = m_GridChoice->GetSelection();
|
||||||
|
|
||||||
|
if( m_GridIndex >= ( int ) m_Settings->m_Window.grid.sizes.size() )
|
||||||
|
{
|
||||||
|
m_SortGridx = DoubleValueFromString( EDA_UNITS::INCHES, m_Settings->m_Window.grid.user_grid_x, true );
|
||||||
|
m_SortGridy = DoubleValueFromString( EDA_UNITS::INCHES, m_Settings->m_Window.grid.user_grid_y, true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_SortGridx = DoubleValueFromString( EDA_UNITS::INCHES, m_Settings->m_Window.grid.sizes[ m_GridIndex ], true );
|
||||||
|
m_SortGridy = m_SortGridx;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for( wxRadioButton* button : AnnotateWhat )
|
||||||
|
{
|
||||||
|
if( button->GetValue() )
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_AnnotationChoice = ( i >= (int) AnnotateWhat.size() ) ? AnnotationChoice::AnnotateAll : i;
|
||||||
|
|
||||||
|
m_MessageWindow->SetLazyUpdate( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Round an int coordinate to a suitable grid
|
||||||
|
int DIALOG_BOARD_REANNOTATE::RoundToGrid( int aCoord, int aGrid )
|
||||||
|
{
|
||||||
|
if( 0 == aGrid )
|
||||||
|
aGrid = MINGRID;
|
||||||
|
|
||||||
|
int rounder;
|
||||||
|
rounder = aCoord % aGrid;
|
||||||
|
aCoord -= rounder;
|
||||||
|
|
||||||
|
if( abs( rounder ) > ( aGrid / 2 ) )
|
||||||
|
aCoord += ( aCoord < 0 ? -aGrid : aGrid );
|
||||||
|
|
||||||
|
return ( aCoord );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Compare function used to compare ChangeArray element for sort
|
||||||
|
/// @return true is A < B
|
||||||
|
static bool ChangeArrayCompare( const RefDesChange& aA, const RefDesChange& aB )
|
||||||
|
{
|
||||||
|
return ( aA.OldRefDesString < aB.OldRefDesString );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Compare function to sort modules.
|
||||||
|
/// @return true if the first coordinate should be before the second coordinate
|
||||||
|
static bool ModuleCompare( const RefDesInfo& aA, const RefDesInfo& aB )
|
||||||
|
{
|
||||||
|
int X0 = aA.roundedx, X1 = aB.roundedx, Y0 = aA.roundedy, Y1 = aB.roundedy;
|
||||||
|
|
||||||
|
if( SortYFirst ) //If sorting by Y then X, swap X and Y
|
||||||
|
{
|
||||||
|
std::swap( X0, Y0 );
|
||||||
|
std::swap( X1, Y1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//If descending, same compare just swap directions
|
||||||
|
if( DescendingFirst )
|
||||||
|
std::swap( X0, X1 );
|
||||||
|
|
||||||
|
if( DescendingSecond )
|
||||||
|
std::swap( Y0, Y1 );
|
||||||
|
|
||||||
|
if( X0 < X1 )
|
||||||
|
return ( true ); //yes, its smaller
|
||||||
|
|
||||||
|
if( X0 > X1 )
|
||||||
|
return ( false ); //No its not
|
||||||
|
|
||||||
|
if( Y0 < Y1 )
|
||||||
|
return ( true ); //same but equal
|
||||||
|
|
||||||
|
return ( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Convert coordinates to wxString
|
||||||
|
/// @return the string
|
||||||
|
wxString DIALOG_BOARD_REANNOTATE::CoordTowxString( int aX, int aY )
|
||||||
|
{
|
||||||
|
return wxString::Format( "%s, %s", MessageTextFromValue( m_Units, aX, false ),
|
||||||
|
MessageTextFromValue( m_Units, aY, false ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Break report into strings separated by \n and sent to the reporter
|
||||||
|
void DIALOG_BOARD_REANNOTATE::ShowReport( wxString aMessage, SEVERITY aSeverity )
|
||||||
|
{
|
||||||
|
|
||||||
|
size_t pos = 0, prev = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
pos = aMessage.ToStdString().find( '\n', prev );
|
||||||
|
m_MessageWindow->Report( ( aMessage.ToStdString().substr( prev, pos - prev ) ), aSeverity );
|
||||||
|
prev = pos + 1;
|
||||||
|
} while( std::string::npos != pos );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Create an audit trail of the changes
|
||||||
|
void DIALOG_BOARD_REANNOTATE::LogChangePlan( void )
|
||||||
|
{
|
||||||
|
int i = 1;
|
||||||
|
wxString message;
|
||||||
|
|
||||||
|
message.Printf( _( "\n\nThere are %i "
|
||||||
|
" types of reference designations\n"
|
||||||
|
"**********************************************************\n" ),
|
||||||
|
(int) m_RefDesTypes.size() );
|
||||||
|
|
||||||
|
for( RefDesTypeStr Type : m_RefDesTypes ) //Show all the types of refdes
|
||||||
|
message += Type.RefDesType + ( 0 == ( i++ % 16 ) ? "\n" : " " );
|
||||||
|
|
||||||
|
if( !m_ExcludeArray.empty() )
|
||||||
|
{
|
||||||
|
message += _( "\nExcluding: " );
|
||||||
|
for( wxString Exclude : m_ExcludeArray ) //Show the refdes we are excluding
|
||||||
|
message += Exclude + " ";
|
||||||
|
message += _( " from reannotation\n\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
message += _( "\n Change Array\n***********************\n" );
|
||||||
|
|
||||||
|
for( RefDesChange Change : m_ChangeArray )
|
||||||
|
{
|
||||||
|
message += wxString::Format( "%s -> %s %s %s\n", Change.OldRefDesString, Change.NewRefDes,
|
||||||
|
ActionMessage[Change.Action],
|
||||||
|
( std::string )( UpdateRefDes != Change.Action ? _( " will be ignored" ) : "" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowReport( message, RPT_SEVERITY_INFO );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Create a list of the modules and their coordinates
|
||||||
|
void DIALOG_BOARD_REANNOTATE::LogModules( wxString& aMessage, std::vector<RefDesInfo>& aModules )
|
||||||
|
{
|
||||||
|
wxString message = aMessage;
|
||||||
|
|
||||||
|
if( aModules.empty() )
|
||||||
|
message += _( "\nNo modules" );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i = 1;
|
||||||
|
|
||||||
|
message += wxString::Format(
|
||||||
|
_( "\n*********** Sort on " )
|
||||||
|
+ ( std::string )( m_SortOnModules->GetValue() ? _( "Module" ) : _( "Reference" ) )
|
||||||
|
+ _( " Coordinates *******************" ) + _( "\nSort Code " )
|
||||||
|
+ std::to_string( m_SortCode ) );
|
||||||
|
|
||||||
|
for( RefDesInfo mod : aModules )
|
||||||
|
{
|
||||||
|
message += wxString::Format( _( "\n%d %s Uuid: [%s], X, Y: %s, Rounded X, Y, %s" ),
|
||||||
|
i++, mod.RefDesString, mod.Uuid.AsString(), CoordTowxString( mod.x, mod.y ),
|
||||||
|
CoordTowxString( mod.roundedx, mod.roundedy ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowReport( message, RPT_SEVERITY_INFO );
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Actually reannotate the board
|
||||||
|
/// @return false if fail, true if success
|
||||||
|
bool DIALOG_BOARD_REANNOTATE::ReannotateBoard( void )
|
||||||
|
{
|
||||||
|
std::string payload;
|
||||||
|
std::vector<RefDesInfo> BadRefDes;
|
||||||
|
wxString message, badrefdes;
|
||||||
|
STRING_FORMATTER stringformatter;
|
||||||
|
RefDesChange* newref;
|
||||||
|
NETLIST netlist;
|
||||||
|
|
||||||
|
if( !BuildModuleList( BadRefDes ) )
|
||||||
|
{
|
||||||
|
ShowReport( "Selected options resulted in errors! Change them and try again.", RPT_SEVERITY_ERROR );
|
||||||
|
return ( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !BadRefDes.empty() )
|
||||||
|
{
|
||||||
|
message.Printf(
|
||||||
|
_( "\nPCB has %d empty or invalid reference designations "
|
||||||
|
"\nRecommend you run DRC with Test footprints against schematic checked.\n" ),
|
||||||
|
(int) BadRefDes.size() );
|
||||||
|
|
||||||
|
for( RefDesInfo mod : BadRefDes )
|
||||||
|
{
|
||||||
|
badrefdes += _( "\nRefdes: \"" ) + mod.RefDesString + _( "\" Module:" )
|
||||||
|
+ mod.FPID.GetLibNickname() + ":" + mod.FPID.GetLibItemName();
|
||||||
|
badrefdes += "at X, Y " + CoordTowxString( mod.x, mod.y ) + _( " on PCB " );
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowReport( ( message + badrefdes + "\n" ), RPT_SEVERITY_WARNING );
|
||||||
|
message += _( "Yes will attempt reannotate. Proceed?" );
|
||||||
|
|
||||||
|
if( !IsOK( m_frame, message ) )
|
||||||
|
return ( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
payload.clear(); //If not updating schematic no netlist error
|
||||||
|
|
||||||
|
if( m_UpdateSchematic->GetValue() )
|
||||||
|
{ //If updating schematic send a netlist
|
||||||
|
|
||||||
|
for( MODULE* mod : m_modules )
|
||||||
|
{ // Create a netlist
|
||||||
|
newref = GetNewRefDes( mod );
|
||||||
|
|
||||||
|
if( NULL == newref )
|
||||||
|
return ( false ); //Not found in changelist
|
||||||
|
|
||||||
|
netlist.AddComponent( //add to the netlist
|
||||||
|
new COMPONENT(
|
||||||
|
mod->GetFPID(), newref->NewRefDes, mod->GetValue(), mod->GetPath() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
netlist.Format( "pcb_netlist", &stringformatter, 0,
|
||||||
|
CTL_OMIT_FILTERS | CTL_OMIT_NETS | CTL_OMIT_FILTERS );
|
||||||
|
|
||||||
|
payload = stringformatter.GetString(); //create netlist
|
||||||
|
|
||||||
|
bool attemptreannotate =
|
||||||
|
m_frame->ReannotateSchematic( payload ); //Send netlist to eeSchema
|
||||||
|
|
||||||
|
if( !attemptreannotate )
|
||||||
|
{ //Didn't get a valid reply
|
||||||
|
ShowReport( _( "\nReannotate failed!\n" ), RPT_SEVERITY_WARNING );
|
||||||
|
return ( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
} //If updating schematic
|
||||||
|
|
||||||
|
bool reannotateok = payload.size( ) == 0; //( 0 == payload.find( REANNOTATE_OK ) );
|
||||||
|
|
||||||
|
ShowReport( payload, reannotateok ? RPT_SEVERITY_ACTION : RPT_SEVERITY_ERROR );
|
||||||
|
BOARD_COMMIT commit( m_frame );
|
||||||
|
|
||||||
|
if( reannotateok )
|
||||||
|
{ //Only update if no errors
|
||||||
|
|
||||||
|
for( MODULE* mod : m_modules )
|
||||||
|
{ // Create a netlist
|
||||||
|
newref = GetNewRefDes( mod );
|
||||||
|
|
||||||
|
if( NULL == newref )
|
||||||
|
return ( false );
|
||||||
|
|
||||||
|
commit.Modify( mod ); //Make a copy for undo
|
||||||
|
mod->SetReference( newref->NewRefDes ); //Update the PCB reference
|
||||||
|
m_frame->GetCanvas()->GetView()->Update( mod ); //Touch the module
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commit.Push( "Geographic reannotation" );
|
||||||
|
return ( reannotateok );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Build the module lists, sort it, filter for excludes, then build the change list
|
||||||
|
/// @returns true if success, false if errors
|
||||||
|
bool DIALOG_BOARD_REANNOTATE::BuildModuleList( std::vector<RefDesInfo>& aBadRefDes )
|
||||||
|
{
|
||||||
|
bool annotateselected;
|
||||||
|
bool annotatefront = m_AnnotateFront->GetValue(); //Unless only doing back
|
||||||
|
bool annotateback = m_AnnotateBack->GetValue(); //Unless only doing front
|
||||||
|
bool skiplocked = m_ExcludeLocked->GetValue();
|
||||||
|
|
||||||
|
int errorcount = 0;
|
||||||
|
unsigned int backstartrefdes;
|
||||||
|
|
||||||
|
size_t firstnum, changearraysize;
|
||||||
|
|
||||||
|
m_FrontModules.clear();
|
||||||
|
m_BackModules.clear();
|
||||||
|
m_ExcludeArray.clear();
|
||||||
|
m_modules = m_frame->GetBoard()->Modules();
|
||||||
|
|
||||||
|
std::vector<KIID> selected;
|
||||||
|
|
||||||
|
if( m_AnnotateSelection->GetValue() )
|
||||||
|
{
|
||||||
|
for( EDA_ITEM* item : m_selection )
|
||||||
|
{ //Get the timestamps of selected modules
|
||||||
|
if( item->Type() == PCB_MODULE_T )
|
||||||
|
selected.push_back( item->m_Uuid );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
annotateselected = !selected.empty();
|
||||||
|
|
||||||
|
wxString exclude;
|
||||||
|
|
||||||
|
for( auto thischar : m_ExcludeList->GetValue() )
|
||||||
|
{ //Break exclude list into words
|
||||||
|
|
||||||
|
if( ( ' ' == thischar ) || ( ',' == thischar ) )
|
||||||
|
{
|
||||||
|
m_ExcludeArray.push_back( exclude );
|
||||||
|
exclude.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
exclude += thischar;
|
||||||
|
|
||||||
|
if( !exclude.empty() )
|
||||||
|
m_ExcludeArray.push_back( exclude );
|
||||||
|
}
|
||||||
|
|
||||||
|
RefDesInfo thismodule;
|
||||||
|
|
||||||
|
for( MODULE* mod : m_modules )
|
||||||
|
{
|
||||||
|
thismodule.Uuid = mod->m_Uuid;
|
||||||
|
thismodule.RefDesString = mod->GetReference();
|
||||||
|
thismodule.FPID = mod->GetFPID();
|
||||||
|
thismodule.x = m_SortOnModules->GetValue() ? mod->GetPosition().x :
|
||||||
|
mod->Reference().GetPosition().x;
|
||||||
|
thismodule.y = m_SortOnModules->GetValue() ? mod->GetPosition().y :
|
||||||
|
mod->Reference().GetPosition().y;
|
||||||
|
thismodule.roundedx = RoundToGrid( thismodule.x, m_SortGridx ); //Round to sort
|
||||||
|
thismodule.roundedy = RoundToGrid( thismodule.y, m_SortGridy );
|
||||||
|
thismodule.Front = mod->GetLayer() == F_Cu ? true : false;
|
||||||
|
thismodule.Action = UpdateRefDes; //Usually good
|
||||||
|
|
||||||
|
if( thismodule.RefDesString.IsEmpty() )
|
||||||
|
thismodule.Action = EmptyRefDes;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
firstnum = thismodule.RefDesString.find_first_of( "0123456789" );
|
||||||
|
|
||||||
|
if( std::string::npos == firstnum )
|
||||||
|
thismodule.Action = InvalidRefDes; //do not change ref des such as 12 or +1, or L
|
||||||
|
}
|
||||||
|
|
||||||
|
thismodule.RefDesType =
|
||||||
|
thismodule.RefDesString.substr( 0, firstnum ); //Get the type (R, C, etc)
|
||||||
|
|
||||||
|
for( wxString excluded : m_ExcludeArray )
|
||||||
|
{
|
||||||
|
if( excluded == thismodule.RefDesType ) //Am I supposed to exclude this type?
|
||||||
|
{
|
||||||
|
thismodule.Action = Exclude; //Yes
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( thismodule.Front && annotateback ) || //If a front module and doing backs only
|
||||||
|
( !thismodule.Front && annotatefront ) || //If a back module and doing front only
|
||||||
|
( mod->IsLocked() && skiplocked ) ) //If excluding locked and it is locked
|
||||||
|
thismodule.Action = Exclude;
|
||||||
|
|
||||||
|
if( annotateselected )
|
||||||
|
{ //If onnly annotating selected c
|
||||||
|
thismodule.Action = Exclude; //Assume it isn't selected
|
||||||
|
|
||||||
|
for( KIID sel : selected )
|
||||||
|
{
|
||||||
|
if( thismodule.Uuid == sel )
|
||||||
|
{ //Found in selected modules
|
||||||
|
thismodule.Action = UpdateRefDes; //Update it
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( thismodule.Front )
|
||||||
|
m_FrontModules.push_back( thismodule );
|
||||||
|
else
|
||||||
|
m_BackModules.push_back( thismodule );
|
||||||
|
}
|
||||||
|
|
||||||
|
SetSortCodes( FrontDirectionsArray, m_SortCode ); //Determine the sort order for the front
|
||||||
|
sort( m_FrontModules.begin(), m_FrontModules.end(),ModuleCompare ); //Sort the front modules
|
||||||
|
|
||||||
|
SetSortCodes( BackDirectionsArray, m_SortCode ); //Determine the sort order for the back
|
||||||
|
sort( m_BackModules.begin(), m_BackModules.end(), ModuleCompare ); //Sort the back modules
|
||||||
|
|
||||||
|
m_RefDesTypes.clear();
|
||||||
|
m_ChangeArray.clear();
|
||||||
|
backstartrefdes = atoi( m_BackRefDesStart->GetValue() );
|
||||||
|
|
||||||
|
if( !m_FrontModules.empty() )
|
||||||
|
BuildChangeArray( m_FrontModules, atoi( m_FrontRefDesStart->GetValue() ),
|
||||||
|
m_FrontPrefix->GetValue(), m_RemoveFrontPrefix->GetValue(),
|
||||||
|
aBadRefDes ); //Create the ChangeArray for front
|
||||||
|
|
||||||
|
if( !m_BackModules.empty() )
|
||||||
|
BuildChangeArray( m_BackModules, backstartrefdes, m_BackPrefix->GetValue(),
|
||||||
|
m_RemoveBackPrefix->GetValue(), aBadRefDes ); //and for the back
|
||||||
|
|
||||||
|
if( !m_ChangeArray.empty() )
|
||||||
|
sort( m_ChangeArray.begin(), m_ChangeArray.end(),
|
||||||
|
ChangeArrayCompare ); //Sort the front modules
|
||||||
|
|
||||||
|
LogChangePlan();
|
||||||
|
|
||||||
|
changearraysize = m_ChangeArray.size();
|
||||||
|
for( size_t i = 0; i < changearraysize; i++ ) //Scan through for duplicates if update or skip
|
||||||
|
{
|
||||||
|
if( ( m_ChangeArray[i].Action != EmptyRefDes )
|
||||||
|
&& ( m_ChangeArray[i].Action != InvalidRefDes ) )
|
||||||
|
{
|
||||||
|
for( size_t j = i + 1; j < changearraysize; j++ )
|
||||||
|
{
|
||||||
|
if( m_ChangeArray[i].NewRefDes == m_ChangeArray[j].NewRefDes )
|
||||||
|
{
|
||||||
|
ShowReport( "Duplicate instances of " + m_ChangeArray[j].NewRefDes, RPT_SEVERITY_ERROR );
|
||||||
|
|
||||||
|
if( errorcount++ > MAXERROR )
|
||||||
|
{
|
||||||
|
ShowReport( _( "Aborted: too many errors " ), RPT_SEVERITY_ERROR );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( errorcount > MAXERROR )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ( 0 == errorcount );
|
||||||
|
} //void BuildModuleList( )
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
/// Scan through the module arrays and create the from -> to array
|
||||||
|
void DIALOG_BOARD_REANNOTATE::BuildChangeArray( std::vector<RefDesInfo>& aModules,
|
||||||
|
unsigned int aStartRefDes, wxString aPrefix, bool aRemovePrefix,
|
||||||
|
std::vector<RefDesInfo>& aBadRefDes )
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
RefDesChange change;
|
||||||
|
RefDesTypeStr newtype;
|
||||||
|
|
||||||
|
wxString refdestype;
|
||||||
|
size_t prefixsize = aPrefix.size();
|
||||||
|
|
||||||
|
bool haveprefix = ( 0 != prefixsize ); //Do I have a prefix?
|
||||||
|
bool addprefix = haveprefix & !aRemovePrefix; //Yes- and I'm not removing it
|
||||||
|
aRemovePrefix &= haveprefix; //Only remove if I have a prefix
|
||||||
|
|
||||||
|
bool prefixpresent; //Prefix found
|
||||||
|
|
||||||
|
wxString logstring =
|
||||||
|
( aModules.front().Front ) ? _( "\n\nFront Modules" ) : _( "\n\nBack Modules" );
|
||||||
|
LogModules( logstring, aModules );
|
||||||
|
|
||||||
|
if( 0 != aStartRefDes ) //Initialize the change array if present
|
||||||
|
|
||||||
|
for( i = 0; i < m_RefDesTypes.size(); i++ )
|
||||||
|
m_RefDesTypes[i].RefDesCount = aStartRefDes;
|
||||||
|
|
||||||
|
for( RefDesInfo Mod : aModules )
|
||||||
|
{ //For each module
|
||||||
|
change.Uuid = Mod.Uuid;
|
||||||
|
change.Action = Mod.Action;
|
||||||
|
change.OldRefDesString = Mod.RefDesString;
|
||||||
|
change.NewRefDes = Mod.RefDesString;
|
||||||
|
change.Front = Mod.Front;
|
||||||
|
|
||||||
|
if( Mod.RefDesString.IsEmpty() )
|
||||||
|
Mod.Action = EmptyRefDes;
|
||||||
|
|
||||||
|
if( ( change.Action == EmptyRefDes ) || ( change.Action == InvalidRefDes ) )
|
||||||
|
{
|
||||||
|
m_ChangeArray.push_back( change );
|
||||||
|
aBadRefDes.push_back( Mod );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( change.Action == UpdateRefDes )
|
||||||
|
{
|
||||||
|
refdestype = Mod.RefDesType;
|
||||||
|
prefixpresent = ( 0 == Mod.RefDesType.find( aPrefix ) );
|
||||||
|
|
||||||
|
if( addprefix && !prefixpresent )
|
||||||
|
Mod.RefDesType.insert( 0, aPrefix ); //Add prefix once only
|
||||||
|
|
||||||
|
if( aRemovePrefix && prefixpresent ) //If there is a prefix remove it
|
||||||
|
Mod.RefDesType.erase( 0, prefixsize );
|
||||||
|
|
||||||
|
for( i = 0; i < m_RefDesTypes.size(); i++ ) //See if it is in the types array
|
||||||
|
|
||||||
|
if( m_RefDesTypes[i].RefDesType == Mod.RefDesType ) //Found it!
|
||||||
|
break;
|
||||||
|
|
||||||
|
if( i == m_RefDesTypes.size() )
|
||||||
|
{ //Wasn't in the types array so add it
|
||||||
|
newtype.RefDesType = Mod.RefDesType;
|
||||||
|
newtype.RefDesCount =
|
||||||
|
( aStartRefDes == 0 ? 1 : aStartRefDes ); //Add from start or 1
|
||||||
|
m_RefDesTypes.push_back( newtype );
|
||||||
|
}
|
||||||
|
|
||||||
|
change.NewRefDes =
|
||||||
|
m_RefDesTypes[i].RefDesType
|
||||||
|
+ std::to_string( m_RefDesTypes[i].RefDesCount++ ); //This is the new refdes
|
||||||
|
}
|
||||||
|
m_ChangeArray.push_back( change ); //Add to the change array
|
||||||
|
} //Loop
|
||||||
|
} //void BuildChangeArray( )
|
||||||
|
|
||||||
|
//
|
||||||
|
/// @returns the new refdes for this module
|
||||||
|
RefDesChange* DIALOG_BOARD_REANNOTATE::GetNewRefDes( MODULE* aMod )
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for( i = 0; i < m_ChangeArray.size(); i++ )
|
||||||
|
|
||||||
|
if( aMod->m_Uuid == m_ChangeArray[i].Uuid )
|
||||||
|
return ( &m_ChangeArray[i] );
|
||||||
|
|
||||||
|
ShowReport( _( "Module not found in changelist " ) + aMod->GetReference(), RPT_SEVERITY_ERROR );
|
||||||
|
return ( NULL ); //Should never happen
|
||||||
|
}
|
|
@ -0,0 +1,178 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
* @author Brian Piccioni <brian@documenteddesigns.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DIALOG_BOARD_REANNOTATE_H_
|
||||||
|
#define DIALOG_BOARD_REANNOTATE_H_
|
||||||
|
|
||||||
|
#include <class_board.h>
|
||||||
|
#include <class_module.h>
|
||||||
|
#include <class_text_mod.h>
|
||||||
|
#include <dialogs/dialog_board_reannotate_base.h>
|
||||||
|
#include <layers_id_colors_and_visibility.h>
|
||||||
|
#include <netlist_reader/pcb_netlist.h>
|
||||||
|
#include <pcb_base_frame.h>
|
||||||
|
#include <pcb_edit_frame.h>
|
||||||
|
#include <project.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx_html_report_panel.h>
|
||||||
|
|
||||||
|
#include <fctsys.h>
|
||||||
|
#include <frame_type.h>
|
||||||
|
#include <tool/actions.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tools/selection_tool.h>
|
||||||
|
|
||||||
|
#define SORTXFIRST 0b000 //Sort on X
|
||||||
|
#define SORTYFIRST 0b100 //Sort on Y
|
||||||
|
#define ASCENDINGFIRST 0b000 //Sort low to high
|
||||||
|
#define DESCENDINGFIRST 0b010 //Sort high to low
|
||||||
|
#define ASCENDINGSECOND 0b000 //Sort low to high
|
||||||
|
#define DESCENDINGSECOND 0b001 //Sort high to low
|
||||||
|
|
||||||
|
#define MINGRID 1000
|
||||||
|
#define MAXERROR 10
|
||||||
|
#define VALIDPREFIX "_-+=/\\" //Prefixs can be alpha or these symbols
|
||||||
|
|
||||||
|
enum ActionCode
|
||||||
|
{
|
||||||
|
UpdateRefDes,
|
||||||
|
EmptyRefDes,
|
||||||
|
InvalidRefDes,
|
||||||
|
Exclude
|
||||||
|
};
|
||||||
|
|
||||||
|
enum AnnotationChoice
|
||||||
|
{
|
||||||
|
AnnotateAll,
|
||||||
|
AnnotateFront,
|
||||||
|
AnnotateBack,
|
||||||
|
AnnotateSelected
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RefDesChange
|
||||||
|
{
|
||||||
|
KIID Uuid;
|
||||||
|
wxString NewRefDes; //The new reference designation (F_U21)
|
||||||
|
wxString OldRefDesString; //What the old refdes preamble + number was
|
||||||
|
bool Front; //True if on the front of the board
|
||||||
|
ActionCode Action; //Used to skip (if #, etc)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RefDesInfo
|
||||||
|
{
|
||||||
|
KIID Uuid;
|
||||||
|
bool Front; //True if on the front of the board
|
||||||
|
wxString RefDesString; //What its refdes is R1, C2
|
||||||
|
wxString RefDesType; //ie R, C, etc
|
||||||
|
int x, y; //The coordinates
|
||||||
|
int roundedx, roundedy; //The coordinates after rounding.
|
||||||
|
ActionCode Action; //Used to skip (if #, etc)
|
||||||
|
LIB_ID FPID;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RefDesTypeStr
|
||||||
|
{
|
||||||
|
wxString RefDesType;
|
||||||
|
unsigned int RefDesCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class DIALOG_BOARD_REANNOTATE : public DIALOG_BOARD_REANNOTATE_BASE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DIALOG_BOARD_REANNOTATE( PCB_EDIT_FRAME* aParentFrame );
|
||||||
|
~DIALOG_BOARD_REANNOTATE();
|
||||||
|
|
||||||
|
private:
|
||||||
|
PCB_EDIT_FRAME* m_frame;
|
||||||
|
MODULES m_modules;
|
||||||
|
PCB_SCREEN* m_screen;
|
||||||
|
PCBNEW_SELECTION m_selection;
|
||||||
|
|
||||||
|
std::vector<RefDesChange> m_ChangeArray;
|
||||||
|
std::vector<RefDesInfo> m_FrontModules;
|
||||||
|
std::vector<RefDesInfo> m_BackModules;
|
||||||
|
std::vector<RefDesTypeStr> m_RefDesTypes;
|
||||||
|
std::vector<wxString> m_ExcludeArray;
|
||||||
|
|
||||||
|
EDA_UNITS m_Units;
|
||||||
|
|
||||||
|
bool m_Standalone;
|
||||||
|
|
||||||
|
int m_SortCode;
|
||||||
|
int m_GridIndex;
|
||||||
|
int m_AnnotationChoice;
|
||||||
|
int m_Severity;
|
||||||
|
|
||||||
|
double m_SortGridx;
|
||||||
|
double m_SortGridy;
|
||||||
|
|
||||||
|
wxString m_FrontPrefixString;
|
||||||
|
wxString m_BackPrefixString;
|
||||||
|
wxString m_ValidPrefixes;
|
||||||
|
|
||||||
|
APP_SETTINGS_BASE* m_Settings;
|
||||||
|
|
||||||
|
std::vector<wxRadioButton*> m_sortButtons = { m_Down_Right, m_Right_Down, m_Down_Left,
|
||||||
|
m_Left_Down, m_Up_Right, m_Right_Up, m_Up_Left, m_Left_Up };
|
||||||
|
|
||||||
|
std::vector<wxRadioButton*> AnnotateWhat = { m_AnnotateAll, m_AnnotateFront, m_AnnotateBack,
|
||||||
|
m_AnnotateSelection };
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<wxStaticBitmap*> Bitmaps = { reannotate_down_right_bitmap, reannotate_right_down_bitmap,
|
||||||
|
reannotate_down_left_bitmap, reannotate_left_down_bitmap, reannotate_up_right_bitmap,
|
||||||
|
reannotate_right_up_bitmap, reannotate_up_left_bitmap, reannotate_left_up_bitmap };
|
||||||
|
|
||||||
|
APP_SETTINGS_BASE* m_Config;
|
||||||
|
|
||||||
|
|
||||||
|
void GetParameters( void );
|
||||||
|
void InitValues( void );
|
||||||
|
|
||||||
|
void OnApplyClick( wxCommandEvent& event ) override;
|
||||||
|
void OnCloseClick( wxCommandEvent& event ) override;
|
||||||
|
void FilterFrontPrefix( wxCommandEvent& event ) override;
|
||||||
|
void FilterBackPrefix( wxCommandEvent& event ) override;
|
||||||
|
|
||||||
|
void ShowReport( wxString aMessage, SEVERITY aSeverity );
|
||||||
|
void LogModules( wxString& aMessage, std::vector<RefDesInfo>& aModules );
|
||||||
|
void LogChangePlan( void );
|
||||||
|
|
||||||
|
bool ReannotateBoard( void );
|
||||||
|
bool BuildModuleList( std::vector<RefDesInfo>& aBadRefDes );
|
||||||
|
void BuildChangeArray( std::vector<RefDesInfo>& aModules, unsigned int aStartRefDes,
|
||||||
|
wxString aPrefix, bool aRemovePrefix, std::vector<RefDesInfo>& aBadRefDes );
|
||||||
|
|
||||||
|
RefDesChange* GetNewRefDes( MODULE* aMod );
|
||||||
|
|
||||||
|
int RoundToGrid( int aCoord, int aGrid );
|
||||||
|
wxString CoordTowxString( int aX, int aY );
|
||||||
|
void MakeSampleText( wxString& aMessage );
|
||||||
|
void FilterPrefix( wxTextCtrl* aPrefix );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DIALOG_BOARD_REANNOTATECLASSES_H_ */
|
|
@ -0,0 +1,408 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Oct 21 2019)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx_html_report_panel.h"
|
||||||
|
|
||||||
|
#include "dialog_board_reannotate_base.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
DIALOG_BOARD_REANNOTATE_BASE::DIALOG_BOARD_REANNOTATE_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||||
|
{
|
||||||
|
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||||
|
this->SetToolTip( _("OK saves change or log files and exits.\nCancel exits without saving change or log files.") );
|
||||||
|
|
||||||
|
wxBoxSizer* bmainSizer;
|
||||||
|
bmainSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxBoxSizer* bupperSizer;
|
||||||
|
bupperSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer31;
|
||||||
|
fgSizer31 = new wxFlexGridSizer( 2, 2, 0, 0 );
|
||||||
|
fgSizer31->AddGrowableCol( 0 );
|
||||||
|
fgSizer31->AddGrowableCol( 1 );
|
||||||
|
fgSizer31->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer31->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
|
||||||
|
bupperSizer->Add( fgSizer31, 0, wxBOTTOM|wxEXPAND, 0 );
|
||||||
|
|
||||||
|
m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_StandardOptions = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTAB_TRAVERSAL );
|
||||||
|
wxBoxSizer* bSizer4;
|
||||||
|
bSizer4 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxStaticBoxSizer* sbSizer3;
|
||||||
|
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_StandardOptions, wxID_ANY, _("Sorting") ), wxHORIZONTAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer5;
|
||||||
|
fgSizer5 = new wxFlexGridSizer( 2, 11, 0, 0 );
|
||||||
|
fgSizer5->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_Down_Right = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_Down_Right->SetValue( true );
|
||||||
|
fgSizer5->Add( m_Down_Right, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_down_right_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_down_right_bitmap->SetToolTip( _("Horizontally: top left to bottom right") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_down_right_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 80, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Right_Down = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Right_Down, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_right_down_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_right_down_bitmap->SetToolTip( _("Horizontally: top right to bottom left") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_right_down_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 80, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Down_Left = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Down_Left, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_down_left_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_down_left_bitmap->SetToolTip( _("Horizontally: bottom left to top right") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_down_left_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 80, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Left_Down = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Left_Down, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_left_down_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_left_down_bitmap->SetToolTip( _("Horizontally:: bottom right to top left") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_left_down_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_Up_Right = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Up_Right, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_up_right_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_up_right_bitmap->SetToolTip( _("Vertically: top left to bottom right") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_up_right_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 50, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Right_Up = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Right_Up, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_right_up_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_right_up_bitmap->SetToolTip( _("Vertically: top right to bottom left") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_right_up_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 50, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Up_Left = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Up_Left, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_up_left_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_up_left_bitmap->SetToolTip( _("Vertically: bottom left to top right") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_up_left_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer5->Add( 50, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_Left_Up = new wxRadioButton( sbSizer3->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer5->Add( m_Left_Up, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
reannotate_left_up_bitmap = new wxStaticBitmap( sbSizer3->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
|
||||||
|
reannotate_left_up_bitmap->SetToolTip( _("Vertically: bottom right to top left") );
|
||||||
|
|
||||||
|
fgSizer5->Add( reannotate_left_up_bitmap, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
sbSizer3->Add( fgSizer5, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer4->Add( sbSizer3, 0, wxALL|wxEXPAND, 0 );
|
||||||
|
|
||||||
|
wxStaticBoxSizer* sbSizer4;
|
||||||
|
sbSizer4 = new wxStaticBoxSizer( new wxStaticBox( m_StandardOptions, wxID_ANY, wxEmptyString ), wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer11;
|
||||||
|
fgSizer11 = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||||
|
fgSizer11->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_UpdateSchematic = new wxCheckBox( sbSizer4->GetStaticBox(), wxID_ANY, _("Update schematic"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_UpdateSchematic->SetValue(true);
|
||||||
|
fgSizer11->Add( m_UpdateSchematic, 0, wxALIGN_CENTER|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer11->Add( 100, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_SortGridText = new wxStaticText( sbSizer4->GetStaticBox(), wxID_ANY, _("Round to:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_SortGridText->Wrap( -1 );
|
||||||
|
m_SortGridText->SetToolTip( _("Component position will be rounded\nto this grid before sorting.\nThis helps with misaligned parts.") );
|
||||||
|
|
||||||
|
fgSizer11->Add( m_SortGridText, 0, wxALIGN_CENTER|wxALL, 5 );
|
||||||
|
|
||||||
|
wxArrayString m_GridChoiceChoices;
|
||||||
|
m_GridChoice = new wxChoice( sbSizer4->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_GridChoiceChoices, 0 );
|
||||||
|
m_GridChoice->SetSelection( 0 );
|
||||||
|
m_GridChoice->SetToolTip( _("Component position will be rounded\nto this grid before sorting.\nThis helps with misaligned parts.") );
|
||||||
|
m_GridChoice->SetMinSize( wxSize( 300,-1 ) );
|
||||||
|
|
||||||
|
fgSizer11->Add( m_GridChoice, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
sbSizer4->Add( fgSizer11, 0, wxEXPAND|wxALL, 0 );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer331;
|
||||||
|
fgSizer331 = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||||
|
fgSizer331->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer331->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_SortOn = new wxStaticText( sbSizer4->GetStaticBox(), wxID_ANY, _("Sort on: "), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_SortOn->Wrap( -1 );
|
||||||
|
m_SortOn->SetMinSize( wxSize( 100,-1 ) );
|
||||||
|
|
||||||
|
fgSizer331->Add( m_SortOn, 0, wxALIGN_BOTTOM|wxALIGN_CENTER_VERTICAL, 0 );
|
||||||
|
|
||||||
|
m_SortOnModules = new wxRadioButton( sbSizer4->GetStaticBox(), wxID_ANY, _("Footprints"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
|
||||||
|
m_SortOnModules->SetValue( true );
|
||||||
|
m_SortOnModules->SetToolTip( _("Annotation based on footprint coordinates") );
|
||||||
|
|
||||||
|
fgSizer331->Add( m_SortOnModules, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_SortOnReference = new wxRadioButton( sbSizer4->GetStaticBox(), wxID_ANY, _("References"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
|
||||||
|
m_SortOnReference->SetToolTip( _("Annotation based on reference coordinates") );
|
||||||
|
m_SortOnReference->SetMinSize( wxSize( 130,-1 ) );
|
||||||
|
|
||||||
|
fgSizer331->Add( m_SortOnReference, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
sbSizer4->Add( fgSizer331, 1, wxEXPAND, 0 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer4->Add( sbSizer4, 0, wxEXPAND, 0 );
|
||||||
|
|
||||||
|
wxStaticBoxSizer* sbSizer31;
|
||||||
|
sbSizer31 = new wxStaticBoxSizer( new wxStaticBox( m_StandardOptions, wxID_ANY, wxEmptyString ), wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer6111;
|
||||||
|
fgSizer6111 = new wxFlexGridSizer( 0, 7, 0, 0 );
|
||||||
|
fgSizer6111->SetFlexibleDirection( wxHORIZONTAL );
|
||||||
|
fgSizer6111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
|
||||||
|
|
||||||
|
AnnotateLabel = new wxStaticText( sbSizer31->GetStaticBox(), wxID_ANY, _("Annotate:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
AnnotateLabel->Wrap( -1 );
|
||||||
|
AnnotateLabel->SetMinSize( wxSize( 100,-1 ) );
|
||||||
|
|
||||||
|
fgSizer6111->Add( AnnotateLabel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_AnnotateAll = new wxRadioButton( sbSizer31->GetStaticBox(), wxID_ANY, _("All"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_AnnotateAll->SetValue( true );
|
||||||
|
fgSizer6111->Add( m_AnnotateAll, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_AnnotateFront = new wxRadioButton( sbSizer31->GetStaticBox(), wxID_ANY, _("Front"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer6111->Add( m_AnnotateFront, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_AnnotateBack = new wxRadioButton( sbSizer31->GetStaticBox(), wxID_ANY, _("Back"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer6111->Add( m_AnnotateBack, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_AnnotateSelection = new wxRadioButton( sbSizer31->GetStaticBox(), wxID_ANY, _("Selection"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer6111->Add( m_AnnotateSelection, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
sbSizer31->Add( fgSizer6111, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer4->Add( sbSizer31, 0, wxEXPAND, 0 );
|
||||||
|
|
||||||
|
|
||||||
|
m_StandardOptions->SetSizer( bSizer4 );
|
||||||
|
m_StandardOptions->Layout();
|
||||||
|
bSizer4->Fit( m_StandardOptions );
|
||||||
|
m_notebook->AddPage( m_StandardOptions, _("Standard Options"), true );
|
||||||
|
m_Advanced = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
|
wxBoxSizer* bSizer5;
|
||||||
|
bSizer5 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer3;
|
||||||
|
fgSizer3 = new wxFlexGridSizer( 3, 6, 0, 0 );
|
||||||
|
fgSizer3->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_FrontRefDesStartText = new wxStaticText( m_Advanced, wxID_ANY, _("Front reference start:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_FrontRefDesStartText->Wrap( -1 );
|
||||||
|
m_FrontRefDesStartText->SetToolTip( _("Starting reference designation for front.") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_FrontRefDesStartText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_FrontRefDesStart = new wxTextCtrl( m_Advanced, wxID_ANY, _("1"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_FrontRefDesStart->SetToolTip( _("Default is 1") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_FrontRefDesStart, 0, wxALL|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 48, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_BottomRefDesStartText = new wxStaticText( m_Advanced, wxID_ANY, _("Back reference start:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_BottomRefDesStartText->Wrap( -1 );
|
||||||
|
m_BottomRefDesStartText->SetToolTip( _("Blank continues from front or enter a number greater than the highest reference designation on the front.") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_BottomRefDesStartText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_BackRefDesStart = new wxTextCtrl( m_Advanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_BackRefDesStart->SetToolTip( _("Leave blank or zero, or enter a number greater than the highest reference designation on the front.") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_BackRefDesStart, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_FrontPrefixText = new wxStaticText( m_Advanced, wxID_ANY, _("Front prefix:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_FrontPrefixText->Wrap( -1 );
|
||||||
|
m_FrontPrefixText->SetToolTip( _("Optional prefix for component side reference designations (i.e. F_)") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_FrontPrefixText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_FrontPrefix = new wxTextCtrl( m_Advanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_FrontPrefix->SetToolTip( _("Optional prefix for component side reference designations (i.e. F_)") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_FrontPrefix, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_BackPrefixText = new wxStaticText( m_Advanced, wxID_ANY, _("Back prefix:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_BackPrefixText->Wrap( -1 );
|
||||||
|
m_BackPrefixText->SetToolTip( _("Optional prefix for solder side reference designations (i.e. B_)") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_BackPrefixText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_BackPrefix = new wxTextCtrl( m_Advanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_BackPrefix->SetToolTip( _("Optional prefix for solder side reference designations (i.e. B_)") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_BackPrefix, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_RemoveFrontPrefix = new wxCheckBox( m_Advanced, wxID_ANY, _("Remove front prefix"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_RemoveFrontPrefix->SetToolTip( _("If checked will remove the front side prefix\nin the front prefix box if present") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_RemoveFrontPrefix, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_RemoveBackPrefix = new wxCheckBox( m_Advanced, wxID_ANY, _("Remove back prefix"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_RemoveBackPrefix->SetToolTip( _("If checked will remove the Back side prefix\nin the back prefix box if present") );
|
||||||
|
|
||||||
|
fgSizer3->Add( m_RemoveBackPrefix, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer5->Add( fgSizer3, 0, wxEXPAND, 0 );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer351;
|
||||||
|
fgSizer351 = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||||
|
fgSizer351->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer351->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_ExcludeListText = new wxStaticText( m_Advanced, wxID_ANY, _("Exclude references:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_ExcludeListText->Wrap( -1 );
|
||||||
|
m_ExcludeListText->SetToolTip( _("Do not re-annotate this type \nof reference (R means R*)") );
|
||||||
|
m_ExcludeListText->SetMinSize( wxSize( 150,-1 ) );
|
||||||
|
|
||||||
|
fgSizer351->Add( m_ExcludeListText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_ExcludeList = new wxTextCtrl( m_Advanced, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_ExcludeList->SetMinSize( wxSize( 153,-1 ) );
|
||||||
|
|
||||||
|
fgSizer351->Add( m_ExcludeList, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgSizer351->Add( 50, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_ExcludeLocked = new wxCheckBox( m_Advanced, wxID_ANY, _("Exclude locked footprints"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_ExcludeLocked->SetToolTip( _("Locked footprints will not be reannotated") );
|
||||||
|
|
||||||
|
fgSizer351->Add( m_ExcludeLocked, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer5->Add( fgSizer351, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
m_Advanced->SetSizer( bSizer5 );
|
||||||
|
m_Advanced->Layout();
|
||||||
|
bSizer5->Fit( m_Advanced );
|
||||||
|
m_notebook->AddPage( m_Advanced, _("Reference Designators"), false );
|
||||||
|
|
||||||
|
bupperSizer->Add( m_notebook, 1, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer36;
|
||||||
|
fgSizer36 = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||||
|
fgSizer36->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer36->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
|
||||||
|
bupperSizer->Add( fgSizer36, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_MessageWindow = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxVSCROLL );
|
||||||
|
m_MessageWindow->SetMinSize( wxSize( -1,150 ) );
|
||||||
|
|
||||||
|
bupperSizer->Add( m_MessageWindow, 1, wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bmainSizer->Add( bupperSizer, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 6 );
|
||||||
|
|
||||||
|
wxBoxSizer* m_buttonsSizer;
|
||||||
|
m_buttonsSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
m_sdbSizer = new wxStdDialogButtonSizer();
|
||||||
|
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
||||||
|
m_sdbSizer->AddButton( m_sdbSizerOK );
|
||||||
|
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
|
||||||
|
m_sdbSizer->AddButton( m_sdbSizerCancel );
|
||||||
|
m_sdbSizer->Realize();
|
||||||
|
|
||||||
|
m_buttonsSizer->Add( m_sdbSizer, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bmainSizer->Add( m_buttonsSizer, 0, wxEXPAND|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( bmainSizer );
|
||||||
|
this->Layout();
|
||||||
|
|
||||||
|
// Connect Events
|
||||||
|
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnClose ) );
|
||||||
|
m_FrontPrefix->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::FilterFrontPrefix ), NULL, this );
|
||||||
|
m_BackPrefix->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::FilterBackPrefix ), NULL, this );
|
||||||
|
m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnCloseClick ), NULL, this );
|
||||||
|
m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnApplyClick ), NULL, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
DIALOG_BOARD_REANNOTATE_BASE::~DIALOG_BOARD_REANNOTATE_BASE()
|
||||||
|
{
|
||||||
|
// Disconnect Events
|
||||||
|
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnClose ) );
|
||||||
|
m_FrontPrefix->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::FilterFrontPrefix ), NULL, this );
|
||||||
|
m_BackPrefix->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::FilterBackPrefix ), NULL, this );
|
||||||
|
m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnCloseClick ), NULL, this );
|
||||||
|
m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BOARD_REANNOTATE_BASE::OnApplyClick ), NULL, this );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Oct 21 2019)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
class WX_HTML_REPORT_PANEL;
|
||||||
|
|
||||||
|
#include "dialog_shim.h"
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/radiobut.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/bitmap.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
#include <wx/statbmp.h>
|
||||||
|
#include <wx/statbox.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/choice.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/valgen.h>
|
||||||
|
#include <wx/notebook.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Class DIALOG_BOARD_REANNOTATE_BASE
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
class DIALOG_BOARD_REANNOTATE_BASE : public DIALOG_SHIM
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxNotebook* m_notebook;
|
||||||
|
wxPanel* m_StandardOptions;
|
||||||
|
wxRadioButton* m_Down_Right;
|
||||||
|
wxStaticBitmap* reannotate_down_right_bitmap;
|
||||||
|
wxRadioButton* m_Right_Down;
|
||||||
|
wxStaticBitmap* reannotate_right_down_bitmap;
|
||||||
|
wxRadioButton* m_Down_Left;
|
||||||
|
wxStaticBitmap* reannotate_down_left_bitmap;
|
||||||
|
wxRadioButton* m_Left_Down;
|
||||||
|
wxStaticBitmap* reannotate_left_down_bitmap;
|
||||||
|
wxRadioButton* m_Up_Right;
|
||||||
|
wxStaticBitmap* reannotate_up_right_bitmap;
|
||||||
|
wxRadioButton* m_Right_Up;
|
||||||
|
wxStaticBitmap* reannotate_right_up_bitmap;
|
||||||
|
wxRadioButton* m_Up_Left;
|
||||||
|
wxStaticBitmap* reannotate_up_left_bitmap;
|
||||||
|
wxRadioButton* m_Left_Up;
|
||||||
|
wxStaticBitmap* reannotate_left_up_bitmap;
|
||||||
|
wxCheckBox* m_UpdateSchematic;
|
||||||
|
wxStaticText* m_SortGridText;
|
||||||
|
wxChoice* m_GridChoice;
|
||||||
|
wxStaticText* m_SortOn;
|
||||||
|
wxRadioButton* m_SortOnModules;
|
||||||
|
wxRadioButton* m_SortOnReference;
|
||||||
|
wxStaticText* AnnotateLabel;
|
||||||
|
wxRadioButton* m_AnnotateAll;
|
||||||
|
wxRadioButton* m_AnnotateFront;
|
||||||
|
wxRadioButton* m_AnnotateBack;
|
||||||
|
wxRadioButton* m_AnnotateSelection;
|
||||||
|
wxPanel* m_Advanced;
|
||||||
|
wxStaticText* m_FrontRefDesStartText;
|
||||||
|
wxTextCtrl* m_FrontRefDesStart;
|
||||||
|
wxStaticText* m_BottomRefDesStartText;
|
||||||
|
wxTextCtrl* m_BackRefDesStart;
|
||||||
|
wxStaticText* m_FrontPrefixText;
|
||||||
|
wxTextCtrl* m_FrontPrefix;
|
||||||
|
wxStaticText* m_BackPrefixText;
|
||||||
|
wxTextCtrl* m_BackPrefix;
|
||||||
|
wxCheckBox* m_RemoveFrontPrefix;
|
||||||
|
wxCheckBox* m_RemoveBackPrefix;
|
||||||
|
wxStaticText* m_ExcludeListText;
|
||||||
|
wxTextCtrl* m_ExcludeList;
|
||||||
|
wxCheckBox* m_ExcludeLocked;
|
||||||
|
WX_HTML_REPORT_PANEL* m_MessageWindow;
|
||||||
|
wxStdDialogButtonSizer* m_sdbSizer;
|
||||||
|
wxButton* m_sdbSizerOK;
|
||||||
|
wxButton* m_sdbSizerCancel;
|
||||||
|
|
||||||
|
// Virtual event handlers, overide them in your derived class
|
||||||
|
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||||
|
virtual void FilterFrontPrefix( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void FilterBackPrefix( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnCloseClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnApplyClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
DIALOG_BOARD_REANNOTATE_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Annotate PCB Geographically"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 745,760 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||||
|
~DIALOG_BOARD_REANNOTATE_BASE();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -482,6 +482,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
|
||||||
toolsMenu->AddSeparator();
|
toolsMenu->AddSeparator();
|
||||||
toolsMenu->AddItem( ACTIONS::showFootprintEditor, SELECTION_CONDITIONS::ShowAlways );
|
toolsMenu->AddItem( ACTIONS::showFootprintEditor, SELECTION_CONDITIONS::ShowAlways );
|
||||||
toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways );
|
toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways );
|
||||||
|
toolsMenu->AddItem( PCB_ACTIONS::boardReannotate, SELECTION_CONDITIONS::ShowAlways );
|
||||||
|
|
||||||
#if defined(KICAD_SCRIPTING_WXPYTHON)
|
#if defined(KICAD_SCRIPTING_WXPYTHON)
|
||||||
auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) {
|
auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
* Free Software Foundation, either version 3 of the License, or (at your
|
* Free Software Foundation, either version 3 reannof the License, or (at your
|
||||||
* option) any later version.
|
* option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
@ -68,6 +68,7 @@
|
||||||
#include <tools/pcb_editor_control.h>
|
#include <tools/pcb_editor_control.h>
|
||||||
#include <tools/pcb_inspection_tool.h>
|
#include <tools/pcb_inspection_tool.h>
|
||||||
#include <tools/pcb_viewer_tools.h>
|
#include <tools/pcb_viewer_tools.h>
|
||||||
|
#include <tools/pcb_reannotate_tool.h>
|
||||||
#include <tools/placement_tool.h>
|
#include <tools/placement_tool.h>
|
||||||
#include <tools/pad_tool.h>
|
#include <tools/pad_tool.h>
|
||||||
#include <microwave/microwave_tool.h>
|
#include <microwave/microwave_tool.h>
|
||||||
|
@ -452,6 +453,7 @@ void PCB_EDIT_FRAME::setupTools()
|
||||||
m_toolManager->RegisterTool( new PCBNEW_CONTROL );
|
m_toolManager->RegisterTool( new PCBNEW_CONTROL );
|
||||||
m_toolManager->RegisterTool( new PCB_EDITOR_CONTROL );
|
m_toolManager->RegisterTool( new PCB_EDITOR_CONTROL );
|
||||||
m_toolManager->RegisterTool( new PCB_INSPECTION_TOOL );
|
m_toolManager->RegisterTool( new PCB_INSPECTION_TOOL );
|
||||||
|
m_toolManager->RegisterTool( new PCB_REANNOTATE_TOOL );
|
||||||
m_toolManager->RegisterTool( new ALIGN_DISTRIBUTE_TOOL );
|
m_toolManager->RegisterTool( new ALIGN_DISTRIBUTE_TOOL );
|
||||||
m_toolManager->RegisterTool( new MICROWAVE_TOOL );
|
m_toolManager->RegisterTool( new MICROWAVE_TOOL );
|
||||||
m_toolManager->RegisterTool( new POSITION_RELATIVE_TOOL );
|
m_toolManager->RegisterTool( new POSITION_RELATIVE_TOOL );
|
||||||
|
@ -1057,15 +1059,10 @@ bool PCB_EDIT_FRAME::SetCurrentNetClass( const wxString& aNetClassName )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PCB_EDIT_FRAME::FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST_MODE aMode )
|
bool PCB_EDIT_FRAME::TestStandalone( void )
|
||||||
{
|
{
|
||||||
if( Kiface().IsSingle() )
|
if( Kiface().IsSingle() )
|
||||||
{
|
|
||||||
DisplayError( this, _( "Cannot update the PCB because Pcbnew is opened in stand-alone "
|
|
||||||
"mode. In order to create or update PCBs from schematics, you "
|
|
||||||
"must launch the KiCad project manager and create a project." ) );
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
// Update PCB requires a netlist. Therefore the schematic editor must be running
|
// Update PCB requires a netlist. Therefore the schematic editor must be running
|
||||||
// If this is not the case, open the schematic editor
|
// If this is not the case, open the schematic editor
|
||||||
|
@ -1096,9 +1093,32 @@ bool PCB_EDIT_FRAME::FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST
|
||||||
frame->Show( true );
|
frame->Show( true );
|
||||||
|
|
||||||
// bring ourselves back to the front
|
// bring ourselves back to the front
|
||||||
Raise();
|
}
|
||||||
|
return true; //Success!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sends a Netlist packet to eeSchema.
|
||||||
|
// The reply is in aNetlist so it is destroyed by this
|
||||||
|
//
|
||||||
|
bool PCB_EDIT_FRAME::ReannotateSchematic( std::string& aNetlist )
|
||||||
|
{
|
||||||
|
Kiway().ExpressMail( FRAME_SCH, MAIL_REANNOTATE, aNetlist, this );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PCB_EDIT_FRAME::FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST_MODE aMode )
|
||||||
|
{
|
||||||
|
if( !TestStandalone( )) {
|
||||||
|
DisplayError( this, _( "Cannot update the PCB because Pcbnew is opened in stand-alone "
|
||||||
|
"mode. In order to create or update PCBs from schematics, you "
|
||||||
|
"must launch the KiCad project manager and create a project." ) );
|
||||||
|
return false; //Not in standalone mode
|
||||||
|
}
|
||||||
|
|
||||||
|
Raise(); //Show
|
||||||
std::string payload;
|
std::string payload;
|
||||||
|
|
||||||
if( aMode == NO_ANNOTATION )
|
if( aMode == NO_ANNOTATION )
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
#include "pcb_base_edit_frame.h"
|
#include "pcb_base_edit_frame.h"
|
||||||
#include "undo_redo_container.h"
|
#include "undo_redo_container.h"
|
||||||
#include "zones.h"
|
#include "zones.h"
|
||||||
|
#include <mail_type.h>
|
||||||
|
#include <map>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
/* Forward declarations of classes. */
|
/* Forward declarations of classes. */
|
||||||
class ACTION_PLUGIN;
|
class ACTION_PLUGIN;
|
||||||
|
@ -853,6 +856,24 @@ public:
|
||||||
enum FETCH_NETLIST_MODE { NO_ANNOTATION, QUIET_ANNOTATION, ANNOTATION_DIALOG };
|
enum FETCH_NETLIST_MODE { NO_ANNOTATION, QUIET_ANNOTATION, ANNOTATION_DIALOG };
|
||||||
bool FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST_MODE aMode );
|
bool FetchNetlistFromSchematic( NETLIST& aNetlist, FETCH_NETLIST_MODE aMode );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ReannotateSchematic
|
||||||
|
* @param aNetlist a NETLIST filled in by the caller.
|
||||||
|
* aMessage is the error message from eeSchem
|
||||||
|
* if aCommit is false it just test, if true it updates the schematic
|
||||||
|
* @return false if failed due to standalone mode, true if a reply.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Sends a Netlist packet to eeSchema.
|
||||||
|
/// @return true if success
|
||||||
|
bool ReannotateSchematic( std::string& aNetlist );
|
||||||
|
|
||||||
|
|
||||||
|
/// Test if standalone mode.
|
||||||
|
/// @ return false if not in standalone.
|
||||||
|
/// @return true if in standalone, opens eeSchema, and opens the schematic for this project
|
||||||
|
bool TestStandalone( void );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function DoUpdatePCBFromNetlist
|
* Function DoUpdatePCBFromNetlist
|
||||||
* An automated version of UpdatePCBFromNetlist which skips the UI dialog.
|
* An automated version of UpdatePCBFromNetlist which skips the UI dialog.
|
||||||
|
|
|
@ -377,6 +377,39 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
|
||||||
m_params.emplace_back( new PARAM<int>( "footprint_wizard_list.height",
|
m_params.emplace_back( new PARAM<int>( "footprint_wizard_list.height",
|
||||||
&m_FootprintWizardList.height, -1 ) );
|
&m_FootprintWizardList.height, -1 ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM<bool>(
|
||||||
|
"reannotate_dialog.annotate_sort_on_modules", &m_Reannotate.sort_on_modules, true ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>(
|
||||||
|
"reannotate_dialog.annotate_remove_front_prefix", &m_Reannotate.remove_front_prefix, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>(
|
||||||
|
"reannotate_dialog.annotate_remove_back_prefix", &m_Reannotate.remove_back_prefix, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>(
|
||||||
|
"reannotate_dialog.annotate_update_schematic", &m_Reannotate.update_schematic, true ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>(
|
||||||
|
"reannotate_dialog.annotate_exclude_locked", &m_Reannotate.exclude_locked, false ) );
|
||||||
|
|
||||||
|
m_params.emplace_back(
|
||||||
|
new PARAM<int>( "reannotate_dialog.annotate_grid_index", &m_Reannotate.grid_index, 0 ) );
|
||||||
|
m_params.emplace_back(
|
||||||
|
new PARAM<int>( "reannotate_dialog.annotate_sort_code", &m_Reannotate.sort_code, 0 ) );
|
||||||
|
m_params.emplace_back(
|
||||||
|
new PARAM<int>( "reannotate_dialog.annotate_choice", &m_Reannotate.annotation_choice, 0 ) );
|
||||||
|
m_params.emplace_back( new PARAM<int>(
|
||||||
|
"reannotate_dialog.annotate_report_severity", &m_Reannotate.report_severity, 0 ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM<wxString>(
|
||||||
|
"reannotate_dialog.annotate_front_refdes_start", &m_Reannotate.front_refdes_start, "1" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>(
|
||||||
|
"reannotate_dialog.annotate_back_refdes_start", &m_Reannotate.back_refdes_start, "" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>(
|
||||||
|
"reannotate_dialog.annotate_front_prefix", &m_Reannotate.front_prefix, "" ) );
|
||||||
|
m_params.emplace_back(
|
||||||
|
new PARAM<wxString>( "reannotate_dialog.annotate_back_prefix", &m_Reannotate.back_prefix, "" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>(
|
||||||
|
"reannotate_dialog.annotate_exclude_list", &m_Reannotate.exclude_list, "" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>(
|
||||||
|
"reannotate_dialog.annotate_report_file_name", &m_Reannotate.report_file_name, "" ) );
|
||||||
|
|
||||||
#if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU)
|
#if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU)
|
||||||
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "action_plugins",
|
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "action_plugins",
|
||||||
[&]() -> nlohmann::json
|
[&]() -> nlohmann::json
|
||||||
|
|
|
@ -187,6 +187,25 @@ public:
|
||||||
bool check_zones_before_plotting;
|
bool check_zones_before_plotting;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DIALOG_REANNOTATE
|
||||||
|
{
|
||||||
|
bool sort_on_modules;
|
||||||
|
bool remove_front_prefix;
|
||||||
|
bool remove_back_prefix;
|
||||||
|
bool update_schematic;
|
||||||
|
bool exclude_locked;
|
||||||
|
int grid_index;
|
||||||
|
int sort_code;
|
||||||
|
int annotation_choice;
|
||||||
|
int report_severity;
|
||||||
|
wxString front_refdes_start;
|
||||||
|
wxString back_refdes_start;
|
||||||
|
wxString front_prefix;
|
||||||
|
wxString back_prefix;
|
||||||
|
wxString exclude_list;
|
||||||
|
wxString report_file_name;
|
||||||
|
};
|
||||||
|
|
||||||
struct FOOTPRINT_CHOOSER
|
struct FOOTPRINT_CHOOSER
|
||||||
{
|
{
|
||||||
int width;
|
int width;
|
||||||
|
@ -238,6 +257,8 @@ public:
|
||||||
|
|
||||||
DIALOG_PLOT m_Plot;
|
DIALOG_PLOT m_Plot;
|
||||||
|
|
||||||
|
DIALOG_REANNOTATE m_Reannotate;
|
||||||
|
|
||||||
FOOTPRINT_CHOOSER m_FootprintChooser;
|
FOOTPRINT_CHOOSER m_FootprintChooser;
|
||||||
|
|
||||||
ZONES m_Zones;
|
ZONES m_Zones;
|
||||||
|
|
|
@ -960,6 +960,12 @@ TOOL_ACTION PCB_ACTIONS::boardStatistics( "pcbnew.InspectionTool.ShowStatisticsD
|
||||||
_( "Shows board statistics" ), pcbnew_xpm );
|
_( "Shows board statistics" ), pcbnew_xpm );
|
||||||
|
|
||||||
|
|
||||||
|
//Geographic re-annotation tool
|
||||||
|
TOOL_ACTION PCB_ACTIONS::boardReannotate( "pcbnew.ReannotateTool.ShowReannotateDialog", AS_GLOBAL, 0,
|
||||||
|
_( "Reannotate PCB" ), _( "Reannotate PCB" ), _( "Reannotate PCB" ),
|
||||||
|
pcbnew_xpm );
|
||||||
|
|
||||||
|
|
||||||
// PLACEMENT_TOOL
|
// PLACEMENT_TOOL
|
||||||
//
|
//
|
||||||
TOOL_ACTION PCB_ACTIONS::alignTop( "pcbnew.AlignAndDistribute.alignTop",
|
TOOL_ACTION PCB_ACTIONS::alignTop( "pcbnew.AlignAndDistribute.alignTop",
|
||||||
|
|
|
@ -406,6 +406,7 @@ public:
|
||||||
static TOOL_ACTION appendBoard;
|
static TOOL_ACTION appendBoard;
|
||||||
static TOOL_ACTION showEeschema;
|
static TOOL_ACTION showEeschema;
|
||||||
static TOOL_ACTION boardStatistics;
|
static TOOL_ACTION boardStatistics;
|
||||||
|
static TOOL_ACTION boardReannotate;
|
||||||
|
|
||||||
// Appearance controls
|
// Appearance controls
|
||||||
static TOOL_ACTION clearHighlight;
|
static TOOL_ACTION clearHighlight;
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
* @author Brian Piccioni <brian@documenteddesigns.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <wx/filedlg.h>
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <tools/pcb_reannotate_tool.h>
|
||||||
|
|
||||||
|
|
||||||
|
PCB_REANNOTATE_TOOL::PCB_REANNOTATE_TOOL() :
|
||||||
|
PCB_TOOL_BASE( "pcbnew.ReannotateTool" ),
|
||||||
|
m_frame( nullptr )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PCB_REANNOTATE_TOOL::Init()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_REANNOTATE_TOOL::Reset( RESET_REASON aReason )
|
||||||
|
{
|
||||||
|
m_frame = getEditFrame<PCB_EDIT_FRAME>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PCB_REANNOTATE_TOOL::ShowReannotateDialog( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
DIALOG_BOARD_REANNOTATE dialog( m_frame );
|
||||||
|
dialog.ShowModal();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_REANNOTATE_TOOL::setTransitions()
|
||||||
|
{
|
||||||
|
Go( &PCB_REANNOTATE_TOOL::ShowReannotateDialog, PCB_ACTIONS::boardReannotate.MakeEvent() );
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
|
||||||
|
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
* @author Brian Piccioni <brian@documenteddesigns.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PCBREANNOTATETOOL_H_
|
||||||
|
#define PCBREANNOTATETOOL_H_
|
||||||
|
|
||||||
|
#include <dialogs/dialog_board_reannotate.h>
|
||||||
|
#include <pcb_edit_frame.h>
|
||||||
|
#include <tools/pcb_actions.h>
|
||||||
|
#include <tools/pcb_tool_base.h>
|
||||||
|
|
||||||
|
|
||||||
|
class PCB_REANNOTATE_TOOL : public wxEvtHandler, public PCB_TOOL_BASE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PCB_REANNOTATE_TOOL();
|
||||||
|
|
||||||
|
bool Init() override;
|
||||||
|
void Reset( RESET_REASON aReason ) override;
|
||||||
|
int ShowReannotateDialog( const TOOL_EVENT& aEvent );
|
||||||
|
//
|
||||||
|
private:
|
||||||
|
void setTransitions() override; //> Bind handlers to corresponding TOOL_ACTIONs
|
||||||
|
|
||||||
|
private:
|
||||||
|
PCB_EDIT_FRAME* m_frame; // Pointer to the currently used edit frame.
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* PCBREANNOTATETOOL_H_ */
|