From d08bf90576b21476a69f4a0809f7933c88f9d0fa Mon Sep 17 00:00:00 2001 From: bjpiccioni Date: Mon, 20 Apr 2020 21:44:17 -0400 Subject: [PATCH] ADDED: Geographic Reannotation --- bitmaps_png/CMakeLists.txt | 8 + bitmaps_png/cpp_48/reannotate_down_left.cpp | 55 + bitmaps_png/cpp_48/reannotate_down_right.cpp | 55 + bitmaps_png/cpp_48/reannotate_left_down.cpp | 48 + bitmaps_png/cpp_48/reannotate_left_up.cpp | 48 + bitmaps_png/cpp_48/reannotate_right_down.cpp | 48 + bitmaps_png/cpp_48/reannotate_right_up.cpp | 48 + bitmaps_png/cpp_48/reannotate_up_left.cpp | 55 + bitmaps_png/cpp_48/reannotate_up_right.cpp | 55 + .../include/bitmaps_png/bitmaps_list.h | 8 + bitmaps_png/sources/reannotate_down_left.svg | 118 + bitmaps_png/sources/reannotate_down_right.svg | 109 + bitmaps_png/sources/reannotate_left_down.svg | 109 + bitmaps_png/sources/reannotate_left_up.svg | 109 + bitmaps_png/sources/reannotate_right_down.svg | 109 + bitmaps_png/sources/reannotate_right_up.svg | 109 + bitmaps_png/sources/reannotate_up_left.svg | 109 + bitmaps_png/sources/reannotate_up_right.svg | 109 + common/dialogs/wx_html_report_panel.cpp | 63 +- common/dialogs/wx_html_report_panel.h | 20 + eeschema/CMakeLists.txt | 1 + eeschema/cross-probing.cpp | 10 +- eeschema/tools/reannotate.cpp | 90 + eeschema/tools/reannotate.h | 50 + include/mail_type.h | 2 +- pcbnew/CMakeLists.txt | 3 + pcbnew/dialogs/dialog_board_reannotate.cpp | 919 +++++ pcbnew/dialogs/dialog_board_reannotate.h | 178 + .../dialogs/dialog_board_reannotate_base.cpp | 408 +++ .../dialogs/dialog_board_reannotate_base.fbp | 3167 +++++++++++++++++ pcbnew/dialogs/dialog_board_reannotate_base.h | 111 + pcbnew/menubar_pcb_editor.cpp | 1 + pcbnew/pcb_edit_frame.cpp | 36 +- pcbnew/pcb_edit_frame.h | 21 + pcbnew/pcbnew_settings.cpp | 33 + pcbnew/pcbnew_settings.h | 21 + pcbnew/tools/pcb_actions.cpp | 6 + pcbnew/tools/pcb_actions.h | 1 + pcbnew/tools/pcb_reannotate_tool.cpp | 62 + pcbnew/tools/pcb_reannotate_tool.h | 51 + 40 files changed, 6544 insertions(+), 19 deletions(-) create mode 100644 bitmaps_png/cpp_48/reannotate_down_left.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_down_right.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_left_down.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_left_up.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_right_down.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_right_up.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_up_left.cpp create mode 100644 bitmaps_png/cpp_48/reannotate_up_right.cpp create mode 100644 bitmaps_png/sources/reannotate_down_left.svg create mode 100644 bitmaps_png/sources/reannotate_down_right.svg create mode 100644 bitmaps_png/sources/reannotate_left_down.svg create mode 100644 bitmaps_png/sources/reannotate_left_up.svg create mode 100644 bitmaps_png/sources/reannotate_right_down.svg create mode 100644 bitmaps_png/sources/reannotate_right_up.svg create mode 100644 bitmaps_png/sources/reannotate_up_left.svg create mode 100644 bitmaps_png/sources/reannotate_up_right.svg create mode 100644 eeschema/tools/reannotate.cpp create mode 100644 eeschema/tools/reannotate.h create mode 100644 pcbnew/dialogs/dialog_board_reannotate.cpp create mode 100644 pcbnew/dialogs/dialog_board_reannotate.h create mode 100644 pcbnew/dialogs/dialog_board_reannotate_base.cpp create mode 100644 pcbnew/dialogs/dialog_board_reannotate_base.fbp create mode 100644 pcbnew/dialogs/dialog_board_reannotate_base.h create mode 100644 pcbnew/tools/pcb_reannotate_tool.cpp create mode 100644 pcbnew/tools/pcb_reannotate_tool.h diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt index 3be8eb6e59..79d2b3118e 100644 --- a/bitmaps_png/CMakeLists.txt +++ b/bitmaps_png/CMakeLists.txt @@ -542,6 +542,14 @@ set( BMAPS_BIG icon_pcbnew icon_bitmap2component 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 icon_pagelayout_editor wizard_add_fplib_icon diff --git a/bitmaps_png/cpp_48/reannotate_down_left.cpp b/bitmaps_png/cpp_48/reannotate_down_left.cpp new file mode 100644 index 0000000000..4bed55414d --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_down_left.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_down_right.cpp b/bitmaps_png/cpp_48/reannotate_down_right.cpp new file mode 100644 index 0000000000..65a228dc51 --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_down_right.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_left_down.cpp b/bitmaps_png/cpp_48/reannotate_left_down.cpp new file mode 100644 index 0000000000..cf4bdd9ea8 --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_left_down.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_left_up.cpp b/bitmaps_png/cpp_48/reannotate_left_up.cpp new file mode 100644 index 0000000000..7eaa15e348 --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_left_up.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_right_down.cpp b/bitmaps_png/cpp_48/reannotate_right_down.cpp new file mode 100644 index 0000000000..b69b5397ad --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_right_down.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_right_up.cpp b/bitmaps_png/cpp_48/reannotate_right_up.cpp new file mode 100644 index 0000000000..5eafc0a2ec --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_right_up.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_up_left.cpp b/bitmaps_png/cpp_48/reannotate_up_left.cpp new file mode 100644 index 0000000000..ef49b2e87e --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_up_left.cpp @@ -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 + +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 diff --git a/bitmaps_png/cpp_48/reannotate_up_right.cpp b/bitmaps_png/cpp_48/reannotate_up_right.cpp new file mode 100644 index 0000000000..c7e58c7422 --- /dev/null +++ b/bitmaps_png/cpp_48/reannotate_up_right.cpp @@ -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 + +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 diff --git a/bitmaps_png/include/bitmaps_png/bitmaps_list.h b/bitmaps_png/include/bitmaps_png/bitmaps_list.h index 9b908b9f13..b221d919e8 100644 --- a/bitmaps_png/include/bitmaps_png/bitmaps_list.h +++ b/bitmaps_png/include/bitmaps_png/bitmaps_list.h @@ -383,6 +383,14 @@ EXTERN_BITMAP( py_script_xpm ) EXTERN_BITMAP( question_mark_xpm ) EXTERN_BITMAP( ratsnest_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( redo_xpm ) EXTERN_BITMAP( red_xpm ) diff --git a/bitmaps_png/sources/reannotate_down_left.svg b/bitmaps_png/sources/reannotate_down_left.svg new file mode 100644 index 0000000000..b0536dc215 --- /dev/null +++ b/bitmaps_png/sources/reannotate_down_left.svg @@ -0,0 +1,118 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_down_right.svg b/bitmaps_png/sources/reannotate_down_right.svg new file mode 100644 index 0000000000..ab0fd5b53a --- /dev/null +++ b/bitmaps_png/sources/reannotate_down_right.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_left_down.svg b/bitmaps_png/sources/reannotate_left_down.svg new file mode 100644 index 0000000000..12187d79eb --- /dev/null +++ b/bitmaps_png/sources/reannotate_left_down.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_left_up.svg b/bitmaps_png/sources/reannotate_left_up.svg new file mode 100644 index 0000000000..605d704ce9 --- /dev/null +++ b/bitmaps_png/sources/reannotate_left_up.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_right_down.svg b/bitmaps_png/sources/reannotate_right_down.svg new file mode 100644 index 0000000000..d140a74b2d --- /dev/null +++ b/bitmaps_png/sources/reannotate_right_down.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_right_up.svg b/bitmaps_png/sources/reannotate_right_up.svg new file mode 100644 index 0000000000..73777e22a1 --- /dev/null +++ b/bitmaps_png/sources/reannotate_right_up.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_up_left.svg b/bitmaps_png/sources/reannotate_up_left.svg new file mode 100644 index 0000000000..e0500d59ce --- /dev/null +++ b/bitmaps_png/sources/reannotate_up_left.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/reannotate_up_right.svg b/bitmaps_png/sources/reannotate_up_right.svg new file mode 100644 index 0000000000..3e90e65711 --- /dev/null +++ b/bitmaps_png/sources/reannotate_up_right.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/dialogs/wx_html_report_panel.cpp b/common/dialogs/wx_html_report_panel.cpp index 2680587b1d..eb8910a26a 100644 --- a/common/dialogs/wx_html_report_panel.cpp +++ b/common/dialogs/wx_html_report_panel.cpp @@ -27,15 +27,16 @@ #include #include -WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - long style ) : +WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style ) : WX_HTML_REPORT_PANEL_BASE( parent, id, pos, size, style ), m_reporter( this ), m_severities( -1 ), - m_lazyUpdate( false ) + m_lazyUpdate( false ), + m_PrintInfo( true ) { syncCheckboxes(); m_htmlView->SetPage( addHeader( "" ) ); @@ -310,7 +311,12 @@ void WX_HTML_REPORT_PANEL::onCheckBoxShowActions( 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(), TextFileWildcard(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); @@ -339,7 +345,7 @@ void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event ) { f.Write( generatePlainText( l ) ); } - + m_ReportFileName = fn.GetFullPath(); f.Close(); } @@ -373,3 +379,44 @@ int WX_HTML_REPORT_PANEL::GetVisibleSeverities() { 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; + } +} diff --git a/common/dialogs/wx_html_report_panel.h b/common/dialogs/wx_html_report_panel.h index 96cc18ddc5..8982174fae 100644 --- a/common/dialogs/wx_html_report_panel.h +++ b/common/dialogs/wx_html_report_panel.h @@ -87,6 +87,20 @@ public: ///> If the m_showAll option is set, the mask is < 0 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: struct REPORT_LINE { @@ -130,6 +144,12 @@ private: int m_severities; 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__ diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 73d52fa0ba..afc0b72e60 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -247,6 +247,7 @@ set( EESCHEMA_SRCS tools/lib_edit_tool.cpp tools/lib_move_tool.cpp tools/lib_pin_tool.cpp + tools/reannotate.cpp tools/sch_drawing_tools.cpp tools/sch_edit_tool.cpp tools/sch_editor_control.cpp diff --git a/eeschema/cross-probing.cpp b/eeschema/cross-probing.cpp index c2c0b13752..48b2ce1d42 100644 --- a/eeschema/cross-probing.cpp +++ b/eeschema/cross-probing.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -576,7 +577,12 @@ void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail ) m_toolManager->RunAction( ACTIONS::updateSchematicFromPcb, true ); break; - default: - ; + case MAIL_REANNOTATE: + { //Reannotate the schematic as per the netlist. + ReannotateFromPCBNew( this, payload ); + break; + } + default:; + } } diff --git a/eeschema/tools/reannotate.cpp b/eeschema/tools/reannotate.cpp new file mode 100644 index 0000000000..f0340c51d1 --- /dev/null +++ b/eeschema/tools/reannotate.cpp @@ -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 +#include +#include + + +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(); +} diff --git a/eeschema/tools/reannotate.h b/eeschema/tools/reannotate.h new file mode 100644 index 0000000000..c76d2315f5 --- /dev/null +++ b/eeschema/tools/reannotate.h @@ -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 +/** + * 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_ */ diff --git a/include/mail_type.h b/include/mail_type.h index e50caecc41..60dda1bdc4 100644 --- a/include/mail_type.h +++ b/include/mail_type.h @@ -47,9 +47,9 @@ enum MAIL_T 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_SCH_REFRESH, // Tell the schematic editor to refresh the display. - MAIL_SCH_CLEAN_NETCLASSES, // Tell the schematic editor to clean stale nets out of // the netclass membership lists + MAIL_REANNOTATE, // Reannotate eeSchema MAIL_LIB_EDIT, MAIL_FP_EDIT }; diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 827f70e163..9f564c898b 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -54,6 +54,8 @@ set( PCBNEW_DIALOGS dialogs/dialog_board_setup.cpp dialogs/dialog_board_statistics.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_cleanup_graphics.cpp dialogs/dialog_cleanup_graphics_base.cpp @@ -317,6 +319,7 @@ set( PCBNEW_CLASS_SRCS tools/pcb_bright_box.cpp tools/pcb_editor_control.cpp tools/pcb_inspection_tool.cpp + tools/pcb_reannotate_tool.cpp tools/pcb_selection_conditions.cpp tools/pcb_tool_base.cpp tools/pcbnew_control.cpp diff --git a/pcbnew/dialogs/dialog_board_reannotate.cpp b/pcbnew/dialogs/dialog_board_reannotate.cpp new file mode 100644 index 0000000000..21921d81aa --- /dev/null +++ b/pcbnew/dialogs/dialog_board_reannotate.cpp @@ -0,0 +1,919 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com + * Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors. + * @author Brian Piccioni + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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()->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& 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 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& 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 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& aModules, + unsigned int aStartRefDes, wxString aPrefix, bool aRemovePrefix, + std::vector& 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 +} diff --git a/pcbnew/dialogs/dialog_board_reannotate.h b/pcbnew/dialogs/dialog_board_reannotate.h new file mode 100644 index 0000000000..7b4dbcec21 --- /dev/null +++ b/pcbnew/dialogs/dialog_board_reannotate.h @@ -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 + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#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 m_ChangeArray; + std::vector m_FrontModules; + std::vector m_BackModules; + std::vector m_RefDesTypes; + std::vector 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 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 AnnotateWhat = { m_AnnotateAll, m_AnnotateFront, m_AnnotateBack, + m_AnnotateSelection }; + + + std::vector 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& aModules ); + void LogChangePlan( void ); + + bool ReannotateBoard( void ); + bool BuildModuleList( std::vector& aBadRefDes ); + void BuildChangeArray( std::vector& aModules, unsigned int aStartRefDes, + wxString aPrefix, bool aRemovePrefix, std::vector& 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_ */ diff --git a/pcbnew/dialogs/dialog_board_reannotate_base.cpp b/pcbnew/dialogs/dialog_board_reannotate_base.cpp new file mode 100644 index 0000000000..da828a6b31 --- /dev/null +++ b/pcbnew/dialogs/dialog_board_reannotate_base.cpp @@ -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 ); + +} diff --git a/pcbnew/dialogs/dialog_board_reannotate_base.fbp b/pcbnew/dialogs/dialog_board_reannotate_base.fbp new file mode 100644 index 0000000000..ae785642a6 --- /dev/null +++ b/pcbnew/dialogs/dialog_board_reannotate_base.fbp @@ -0,0 +1,3167 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + dialog_board_reannotate_base + 1000 + none + + + 1 + dialog_board_reannotate_base + + . + + 1 + 1 + 1 + 1 + UI + 0 + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + DIALOG_BOARD_REANNOTATE_BASE + + 745,760 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + DIALOG_SHIM; dialog_shim.h + Annotate PCB Geographically + OK saves change or log files and exits. Cancel exits without saving change or log files. + + + + OnClose + + + bmainSizer + wxVERTICAL + none + + 6 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 1 + + + bupperSizer + wxVERTICAL + none + + 0 + wxBOTTOM|wxEXPAND + 0 + + 2 + wxBOTH + 0,1 + + 0 + + fgSizer31 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + + + 5 + wxALL|wxEXPAND|wxLEFT|wxRIGHT + 1 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_notebook + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + + + Standard Options + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + -1,-1 + + 0 + -1,-1 + 1 + m_StandardOptions + 1 + + + protected + 0 + + Resizable + 1 + -1,-1 + ; ; forward_declare + 0 + + + + wxTAB_TRAVERSAL + + + bSizer4 + wxVERTICAL + none + + 0 + wxALL|wxEXPAND + 0 + + wxID_ANY + Sorting + + sbSizer3 + wxHORIZONTAL + 1 + none + + 5 + wxEXPAND + 1 + + 11 + wxBOTH + + + 0 + + fgSizer5 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Down_Right + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_down_right_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Horizontally: top left to bottom right + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 80 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Right_Down + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_right_down_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Horizontally: top right to bottom left + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 80 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Down_Left + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_down_left_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Horizontally: bottom left to top right + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 80 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Left_Down + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_left_down_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Horizontally:: bottom right to top left + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Up_Right + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_up_right_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Vertically: top left to bottom right + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 50 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Right_Up + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_right_up_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Vertically: top right to bottom left + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 50 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Up_Left + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_up_left_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Vertically: bottom left to top right + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 50 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_Left_Up + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + reannotate_left_up_bitmap + 1 + + + protected + 1 + + Resizable + 1 + 48,48 + ; ; forward_declare + 0 + Vertically: bottom right to top left + + + + + + + + + + + 0 + wxEXPAND + 0 + + wxID_ANY + + + sbSizer4 + wxVERTICAL + 1 + none + + 0 + wxEXPAND|wxALL + 0 + + 4 + wxBOTH + + + 0 + + fgSizer11 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Update schematic + + 0 + + + 0 + + 1 + m_UpdateSchematic + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 100 + + + + 5 + wxALIGN_CENTER|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Round to: + 0 + + 0 + + + 0 + + 1 + m_SortGridText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Component position will be rounded to this grid before sorting. This helps with misaligned parts. + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + 300,-1 + 1 + m_GridChoice + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + ; ; forward_declare + 0 + Component position will be rounded to this grid before sorting. This helps with misaligned parts. + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + 0 + wxEXPAND + 1 + + 3 + wxBOTH + + + 0 + + fgSizer331 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 0 + wxALIGN_BOTTOM|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Sort on: + 0 + + 0 + + + 0 + 100,-1 + 1 + m_SortOn + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Footprints + + 0 + + + 0 + + 1 + m_SortOnModules + 1 + + + protected + 1 + + Resizable + 1 + + wxRB_GROUP + ; ; forward_declare + 0 + Annotation based on footprint coordinates + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + References + + 0 + + + 0 + 130,-1 + 1 + m_SortOnReference + 1 + + + protected + 1 + + Resizable + 1 + -1,-1 + + ; ; forward_declare + 0 + Annotation based on reference coordinates + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + 0 + wxEXPAND + 0 + + wxID_ANY + + + sbSizer31 + wxVERTICAL + 1 + none + + 5 + wxEXPAND + 1 + + 7 + wxHORIZONTAL + + + 0 + -1,-1 + fgSizer6111 + wxFLEX_GROWMODE_NONE + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Annotate: + 0 + + 0 + + + 0 + 100,-1 + 1 + AnnotateLabel + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + All + + 0 + + + 0 + + 1 + m_AnnotateAll + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Front + + 0 + + + 0 + + 1 + m_AnnotateFront + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Back + + 0 + + + 0 + + 1 + m_AnnotateBack + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Selection + + 0 + + + 0 + + 1 + m_AnnotateSelection + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + Reference Designators + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_Advanced + 1 + + + protected + 1 + + Resizable + 1 + + ; ; forward_declare + 0 + + + + wxTAB_TRAVERSAL + + + bSizer5 + wxVERTICAL + none + + 0 + wxEXPAND + 0 + + 6 + wxBOTH + + + 0 + -1,-1 + fgSizer3 + wxFLEX_GROWMODE_SPECIFIED + none + 3 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Front reference start: + 0 + + 0 + + + 0 + + 1 + m_FrontRefDesStartText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Starting reference designation for front. + + + + -1 + + + + 5 + wxALL|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_FrontRefDesStart + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Default is 1 + + wxFILTER_NUMERIC + wxDefaultValidator + + 1 + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 48 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Back reference start: + 0 + + 0 + + + 0 + + 1 + m_BottomRefDesStartText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Blank continues from front or enter a number greater than the highest reference designation on the front. + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_BackRefDesStart + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Leave blank or zero, or enter a number greater than the highest reference designation on the front. + + wxFILTER_NUMERIC + wxGenericValidator + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Front prefix: + 0 + + 0 + + + 0 + + 1 + m_FrontPrefixText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Optional prefix for component side reference designations (i.e. F_) + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_FrontPrefix + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Optional prefix for component side reference designations (i.e. F_) + + wxFILTER_ALPHA + wxGenericValidator + + + + + + FilterFrontPrefix + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Back prefix: + 0 + + 0 + + + 0 + + 1 + m_BackPrefixText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Optional prefix for solder side reference designations (i.e. B_) + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_BackPrefix + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Optional prefix for solder side reference designations (i.e. B_) + + wxFILTER_ALPHA|wxFILTER_NONE + wxGenericValidator + + + + + + FilterBackPrefix + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Remove front prefix + + 0 + + + 0 + + 1 + m_RemoveFrontPrefix + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + If checked will remove the front side prefix in the front prefix box if present + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Remove back prefix + + 0 + + + 0 + + 1 + m_RemoveBackPrefix + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + If checked will remove the Back side prefix in the back prefix box if present + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + 5 + wxEXPAND + 1 + + 4 + wxBOTH + + + 0 + + fgSizer351 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Exclude references: + 0 + + 0 + + + 0 + 150,-1 + 1 + m_ExcludeListText + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Do not re-annotate this type of reference (R means R*) + + + + -1 + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + 153,-1 + 1 + m_ExcludeList + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_ALPHA + wxDefaultValidator + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 50 + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Exclude locked footprints + + 0 + + + 0 + + 1 + m_ExcludeLocked + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + Locked footprints will not be reannotated + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + + + 0 + + fgSizer36 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + + + 5 + wxEXPAND|wxLEFT|wxRIGHT + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + -1,150 + 1 + m_MessageWindow + 1 + + + protected + 1 + + Resizable + 1 + + WX_HTML_REPORT_PANEL; wx_html_report_panel.h; forward_declare + 0 + + + + wxTAB_TRAVERSAL|wxVSCROLL + + + + + + 5 + wxEXPAND|wxLEFT + 0 + + + m_buttonsSizer + wxHORIZONTAL + none + + 5 + wxALL|wxEXPAND + 1 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_sdbSizer + protected + OnCloseClick + OnApplyClick + + + + + + + + diff --git a/pcbnew/dialogs/dialog_board_reannotate_base.h b/pcbnew/dialogs/dialog_board_reannotate_base.h new file mode 100644 index 0000000000..bd72095215 --- /dev/null +++ b/pcbnew/dialogs/dialog_board_reannotate_base.h @@ -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 +#include +#include +class WX_HTML_REPORT_PANEL; + +#include "dialog_shim.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// 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(); + +}; + diff --git a/pcbnew/menubar_pcb_editor.cpp b/pcbnew/menubar_pcb_editor.cpp index 1a807b4877..92638ab596 100644 --- a/pcbnew/menubar_pcb_editor.cpp +++ b/pcbnew/menubar_pcb_editor.cpp @@ -482,6 +482,7 @@ void PCB_EDIT_FRAME::ReCreateMenuBar() toolsMenu->AddSeparator(); toolsMenu->AddItem( ACTIONS::showFootprintEditor, SELECTION_CONDITIONS::ShowAlways ); toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways ); + toolsMenu->AddItem( PCB_ACTIONS::boardReannotate, SELECTION_CONDITIONS::ShowAlways ); #if defined(KICAD_SCRIPTING_WXPYTHON) auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) { diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 2c5a39041c..9ac4077c7e 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -8,7 +8,7 @@ * * 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 3 of the License, or (at your + * Free Software Foundation, either version 3 reannof the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -452,6 +453,7 @@ void PCB_EDIT_FRAME::setupTools() m_toolManager->RegisterTool( new PCBNEW_CONTROL ); m_toolManager->RegisterTool( new PCB_EDITOR_CONTROL ); 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 MICROWAVE_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() ) - { - 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; - } // Update PCB requires a netlist. Therefore the schematic editor must be running // 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 ); // 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; if( aMode == NO_ANNOTATION ) diff --git a/pcbnew/pcb_edit_frame.h b/pcbnew/pcb_edit_frame.h index 5a02439780..28f3c7116e 100644 --- a/pcbnew/pcb_edit_frame.h +++ b/pcbnew/pcb_edit_frame.h @@ -26,6 +26,9 @@ #include "pcb_base_edit_frame.h" #include "undo_redo_container.h" #include "zones.h" +#include +#include +#include /* Forward declarations of classes. */ class ACTION_PLUGIN; @@ -853,6 +856,24 @@ public: enum FETCH_NETLIST_MODE { NO_ANNOTATION, QUIET_ANNOTATION, ANNOTATION_DIALOG }; 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 * An automated version of UpdatePCBFromNetlist which skips the UI dialog. diff --git a/pcbnew/pcbnew_settings.cpp b/pcbnew/pcbnew_settings.cpp index 61be6f28f3..80d901925c 100644 --- a/pcbnew/pcbnew_settings.cpp +++ b/pcbnew/pcbnew_settings.cpp @@ -377,6 +377,39 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS() m_params.emplace_back( new PARAM( "footprint_wizard_list.height", &m_FootprintWizardList.height, -1 ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_sort_on_modules", &m_Reannotate.sort_on_modules, true ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_remove_front_prefix", &m_Reannotate.remove_front_prefix, false ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_remove_back_prefix", &m_Reannotate.remove_back_prefix, false ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_update_schematic", &m_Reannotate.update_schematic, true ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_exclude_locked", &m_Reannotate.exclude_locked, false ) ); + + m_params.emplace_back( + new PARAM( "reannotate_dialog.annotate_grid_index", &m_Reannotate.grid_index, 0 ) ); + m_params.emplace_back( + new PARAM( "reannotate_dialog.annotate_sort_code", &m_Reannotate.sort_code, 0 ) ); + m_params.emplace_back( + new PARAM( "reannotate_dialog.annotate_choice", &m_Reannotate.annotation_choice, 0 ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_report_severity", &m_Reannotate.report_severity, 0 ) ); + + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_front_refdes_start", &m_Reannotate.front_refdes_start, "1" ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_back_refdes_start", &m_Reannotate.back_refdes_start, "" ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_front_prefix", &m_Reannotate.front_prefix, "" ) ); + m_params.emplace_back( + new PARAM( "reannotate_dialog.annotate_back_prefix", &m_Reannotate.back_prefix, "" ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_exclude_list", &m_Reannotate.exclude_list, "" ) ); + m_params.emplace_back( new PARAM( + "reannotate_dialog.annotate_report_file_name", &m_Reannotate.report_file_name, "" ) ); + #if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU) m_params.emplace_back( new PARAM_LAMBDA( "action_plugins", [&]() -> nlohmann::json diff --git a/pcbnew/pcbnew_settings.h b/pcbnew/pcbnew_settings.h index ea5f45819c..968056480f 100644 --- a/pcbnew/pcbnew_settings.h +++ b/pcbnew/pcbnew_settings.h @@ -187,6 +187,25 @@ public: 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 { int width; @@ -238,6 +257,8 @@ public: DIALOG_PLOT m_Plot; + DIALOG_REANNOTATE m_Reannotate; + FOOTPRINT_CHOOSER m_FootprintChooser; ZONES m_Zones; diff --git a/pcbnew/tools/pcb_actions.cpp b/pcbnew/tools/pcb_actions.cpp index 807ca7dec9..4517300a24 100644 --- a/pcbnew/tools/pcb_actions.cpp +++ b/pcbnew/tools/pcb_actions.cpp @@ -960,6 +960,12 @@ TOOL_ACTION PCB_ACTIONS::boardStatistics( "pcbnew.InspectionTool.ShowStatisticsD _( "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 // TOOL_ACTION PCB_ACTIONS::alignTop( "pcbnew.AlignAndDistribute.alignTop", diff --git a/pcbnew/tools/pcb_actions.h b/pcbnew/tools/pcb_actions.h index f8798dcb8c..2e4b97ca46 100644 --- a/pcbnew/tools/pcb_actions.h +++ b/pcbnew/tools/pcb_actions.h @@ -406,6 +406,7 @@ public: static TOOL_ACTION appendBoard; static TOOL_ACTION showEeschema; static TOOL_ACTION boardStatistics; + static TOOL_ACTION boardReannotate; // Appearance controls static TOOL_ACTION clearHighlight; diff --git a/pcbnew/tools/pcb_reannotate_tool.cpp b/pcbnew/tools/pcb_reannotate_tool.cpp new file mode 100644 index 0000000000..10e402a8eb --- /dev/null +++ b/pcbnew/tools/pcb_reannotate_tool.cpp @@ -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 + * + * 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 +#include +#include +#include + + +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(); +} + + +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() ); +} diff --git a/pcbnew/tools/pcb_reannotate_tool.h b/pcbnew/tools/pcb_reannotate_tool.h new file mode 100644 index 0000000000..8baae6c53a --- /dev/null +++ b/pcbnew/tools/pcb_reannotate_tool.h @@ -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 + * + * 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 +#include +#include +#include + + +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_ */