ADDED: Geographic Reannotation

This commit is contained in:
bjpiccioni 2020-04-20 21:44:17 -04:00 committed by Jon Evans
parent 2d84092457
commit d08bf90576
40 changed files with 6544 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}
}

View File

@ -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__

View File

@ -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

View File

@ -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:;
} }
} }

View File

@ -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();
}

View File

@ -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_ */

View File

@ -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
}; };

View File

@ -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

View File

@ -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
}

View File

@ -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_ */

View File

@ -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 );
}

File diff suppressed because it is too large Load Diff

View File

@ -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();
};

View File

@ -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 ) {

View File

@ -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 )

View File

@ -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.

View File

@ -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

View File

@ -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;

View File

@ -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",

View File

@ -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;

View File

@ -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() );
}

View File

@ -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_ */