Merged lp:~john-j-beard/kicad/moveexact.
|
@ -151,6 +151,12 @@ set( BMAPS_MID
|
||||||
annotate_down_right
|
annotate_down_right
|
||||||
annotate_right_down
|
annotate_right_down
|
||||||
annotate
|
annotate
|
||||||
|
array_line
|
||||||
|
array_module
|
||||||
|
array_pad
|
||||||
|
array_text
|
||||||
|
array_target
|
||||||
|
array_zone
|
||||||
auto_associe
|
auto_associe
|
||||||
auto_delete_track
|
auto_delete_track
|
||||||
auto_track_width
|
auto_track_width
|
||||||
|
@ -217,6 +223,12 @@ set( BMAPS_MID
|
||||||
drag_track_segment
|
drag_track_segment
|
||||||
drc_off
|
drc_off
|
||||||
drc
|
drc
|
||||||
|
duplicate_line
|
||||||
|
duplicate_module
|
||||||
|
duplicate_pad
|
||||||
|
duplicate_target
|
||||||
|
duplicate_text
|
||||||
|
duplicate_zone
|
||||||
edges_sketch
|
edges_sketch
|
||||||
edit_comp_footprint
|
edit_comp_footprint
|
||||||
edit_component
|
edit_component
|
||||||
|
@ -363,9 +375,11 @@ set( BMAPS_MID
|
||||||
move_polygon
|
move_polygon
|
||||||
move_rectangle
|
move_rectangle
|
||||||
move_sheet
|
move_sheet
|
||||||
|
move_target
|
||||||
move_text
|
move_text
|
||||||
move_track_segment
|
move_track_segment
|
||||||
move_track
|
move_track
|
||||||
|
move_zone
|
||||||
move
|
move
|
||||||
mw_add_gap
|
mw_add_gap
|
||||||
mw_add_line
|
mw_add_line
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x00, 0x79, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x94, 0x41, 0x0a, 0x00,
|
||||||
|
0x31, 0x08, 0x03, 0xfd, 0x4a, 0xff, 0x94, 0xff, 0xf6, 0xdc, 0xfd, 0x94, 0x7b, 0xda, 0x43, 0x65,
|
||||||
|
0x41, 0xad, 0x90, 0x82, 0x07, 0xc1, 0x8b, 0x0e, 0xc4, 0x18, 0x51, 0x55, 0x61, 0x94, 0xd0, 0x41,
|
||||||
|
0x00, 0xd4, 0x2b, 0x3b, 0x0c, 0x60, 0x7a, 0xb5, 0x81, 0xbe, 0x45, 0xb2, 0x86, 0x7a, 0xbd, 0x85,
|
||||||
|
0xc8, 0x33, 0xa6, 0xd7, 0xdf, 0x03, 0x65, 0xe4, 0x8b, 0xc8, 0xf6, 0x0b, 0x8a, 0x1c, 0xd4, 0x82,
|
||||||
|
0x82, 0x33, 0x97, 0x40, 0x34, 0xe9, 0x7a, 0xb9, 0x8e, 0xf6, 0xb0, 0x6d, 0xb3, 0x2e, 0x2c, 0x43,
|
||||||
|
0x25, 0xeb, 0x52, 0x87, 0xad, 0xb8, 0x8e, 0x0b, 0xca, 0x48, 0x71, 0xfa, 0xb0, 0xa9, 0x38, 0xa9,
|
||||||
|
0x44, 0x10, 0x0f, 0x44, 0x93, 0xae, 0x97, 0xeb, 0x68, 0x0f, 0xdb, 0x2a, 0xeb, 0x5e, 0x8c, 0x95,
|
||||||
|
0x3c, 0x73, 0x5c, 0xe2, 0x55, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||||
|
0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_footprint_xpm[1] = {{ png, sizeof( png ), "array_footprint_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0x51, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x96, 0x4f, 0x6c, 0x4c,
|
||||||
|
0x51, 0x14, 0xc6, 0x7f, 0xa3, 0xff, 0xa4, 0xd5, 0x4a, 0x34, 0xb5, 0x20, 0x4d, 0xc5, 0x42, 0x5a,
|
||||||
|
0x74, 0xa9, 0x34, 0x44, 0x42, 0x10, 0x82, 0x48, 0x2c, 0x84, 0x88, 0x58, 0x58, 0xd0, 0x8d, 0xda,
|
||||||
|
0x48, 0x49, 0xa4, 0xe9, 0x06, 0x8b, 0x62, 0x31, 0xb4, 0xe3, 0xdd, 0x73, 0xdf, 0x8c, 0x69, 0xaa,
|
||||||
|
0x99, 0x94, 0x11, 0xed, 0x58, 0xb1, 0x60, 0x67, 0x6d, 0x65, 0x6b, 0x63, 0x67, 0x61, 0x23, 0xb1,
|
||||||
|
0x20, 0xd7, 0xe6, 0x78, 0xf3, 0x5a, 0x33, 0xef, 0xde, 0xc6, 0xe2, 0x25, 0x2f, 0x99, 0xef, 0xe4,
|
||||||
|
0x77, 0xee, 0x79, 0xe7, 0xfb, 0xee, 0xe0, 0x9c, 0x23, 0xf4, 0x61, 0x8a, 0x75, 0x6b, 0xd2, 0x43,
|
||||||
|
0x2e, 0x79, 0x0f, 0x2e, 0x12, 0xc6, 0x10, 0xde, 0x11, 0xd3, 0x1d, 0xa4, 0x37, 0x5c, 0xc4, 0x30,
|
||||||
|
0xc1, 0x7b, 0x5a, 0x83, 0x41, 0x08, 0x67, 0x11, 0x7e, 0x23, 0x38, 0x84, 0x9b, 0x01, 0x90, 0x13,
|
||||||
|
0x08, 0x35, 0x84, 0x1a, 0x31, 0x87, 0x82, 0x40, 0x58, 0x0e, 0x22, 0xfc, 0x54, 0xc8, 0x0b, 0xdf,
|
||||||
|
0xf8, 0x88, 0x19, 0x45, 0x58, 0x56, 0xd0, 0x58, 0xd0, 0xe8, 0x88, 0x18, 0x46, 0xf8, 0xae, 0x90,
|
||||||
|
0x0f, 0xe4, 0xe9, 0xf0, 0x9c, 0x64, 0x17, 0x42, 0x15, 0xa1, 0x86, 0xe5, 0x36, 0x2e, 0xe0, 0x1b,
|
||||||
|
0x61, 0x19, 0x40, 0xf8, 0xaa, 0x90, 0x4f, 0x44, 0x6c, 0xf4, 0x9c, 0x7c, 0x00, 0xa1, 0xa2, 0x27,
|
||||||
|
0xb9, 0x4f, 0x44, 0xdb, 0x8a, 0xdf, 0x1b, 0x16, 0x95, 0xe9, 0x45, 0xf8, 0xac, 0x90, 0x2f, 0xc4,
|
||||||
|
0x6c, 0xc9, 0x84, 0x14, 0xe9, 0x43, 0x78, 0xa6, 0x90, 0x27, 0xcc, 0xd1, 0xf5, 0x8f, 0xa6, 0xc1,
|
||||||
|
0xb8, 0x3a, 0x11, 0x3e, 0x2a, 0xe4, 0x1b, 0x11, 0x83, 0x9e, 0x6f, 0xd2, 0x8d, 0x50, 0x50, 0x48,
|
||||||
|
0x91, 0x32, 0xbd, 0x0d, 0x75, 0xab, 0x7c, 0xd2, 0x8a, 0xe1, 0x8d, 0x42, 0x7e, 0x10, 0x33, 0x9a,
|
||||||
|
0x09, 0xc9, 0xd3, 0x81, 0x61, 0x5a, 0x21, 0x0b, 0xcc, 0xd0, 0xdf, 0x54, 0xbb, 0x6a, 0xce, 0x25,
|
||||||
|
0x85, 0xfc, 0xc2, 0x70, 0x2a, 0x13, 0xb2, 0x48, 0x0b, 0x86, 0x49, 0x85, 0x54, 0x11, 0x86, 0x32,
|
||||||
|
0xf5, 0xa9, 0x8d, 0xb9, 0xa7, 0x10, 0x87, 0x70, 0x25, 0xc0, 0x5b, 0xd7, 0x75, 0xbb, 0x96, 0x88,
|
||||||
|
0xd8, 0xeb, 0xd5, 0x6b, 0xd1, 0x85, 0x04, 0x62, 0xb8, 0x13, 0x00, 0x39, 0x93, 0x32, 0xe4, 0xb1,
|
||||||
|
0x20, 0xd3, 0x3b, 0xe7, 0x60, 0x86, 0x0d, 0x08, 0x6f, 0x11, 0x66, 0x9b, 0x0a, 0x0b, 0x6c, 0x45,
|
||||||
|
0x38, 0xec, 0x9c, 0x83, 0x79, 0x7a, 0x30, 0x3c, 0xc2, 0x72, 0x3e, 0xc3, 0x53, 0x3b, 0xd2, 0x27,
|
||||||
|
0x4d, 0xcf, 0xbc, 0xbd, 0x99, 0xeb, 0xb1, 0x6c, 0xc2, 0x10, 0xeb, 0xa8, 0x8e, 0xeb, 0xe2, 0xb4,
|
||||||
|
0x7b, 0x9a, 0x7a, 0x8e, 0x65, 0x09, 0x61, 0x5f, 0x58, 0x04, 0x4d, 0xd3, 0x85, 0xe1, 0xb1, 0x8e,
|
||||||
|
0xaa, 0x4c, 0x91, 0x3e, 0x8f, 0x71, 0xeb, 0x4d, 0x19, 0x9e, 0xfe, 0x0d, 0x61, 0x5f, 0x04, 0xb5,
|
||||||
|
0xe9, 0x92, 0xd4, 0x10, 0x2a, 0x14, 0xd8, 0xe6, 0xd1, 0x77, 0x22, 0xe4, 0x93, 0xa6, 0x0a, 0x6c,
|
||||||
|
0xf6, 0x47, 0x90, 0x23, 0x87, 0x70, 0x4b, 0x8b, 0x5e, 0x61, 0xd9, 0xed, 0x6d, 0x4a, 0xb8, 0x9b,
|
||||||
|
0x34, 0x55, 0x5a, 0xd9, 0x54, 0x56, 0x40, 0x5e, 0xd3, 0xa2, 0x65, 0x2c, 0xfb, 0xb3, 0x37, 0x8a,
|
||||||
|
0x1c, 0x96, 0x89, 0xa4, 0xa9, 0x88, 0x61, 0x6f, 0x04, 0x29, 0xe4, 0x5c, 0xb2, 0xbe, 0x96, 0x93,
|
||||||
|
0x01, 0x57, 0xc9, 0xd5, 0xa4, 0xa9, 0x88, 0x03, 0xde, 0x64, 0x50, 0x8f, 0x1c, 0x4d, 0x41, 0x2e,
|
||||||
|
0x05, 0x5c, 0x72, 0xe9, 0xa6, 0x4e, 0x87, 0x46, 0xd0, 0x88, 0xae, 0x64, 0x0d, 0xc3, 0x78, 0x00,
|
||||||
|
0xe4, 0x48, 0x0a, 0x72, 0x39, 0x2c, 0x82, 0x22, 0x06, 0x53, 0x97, 0xd6, 0x24, 0x8b, 0xb4, 0x78,
|
||||||
|
0x20, 0x7b, 0x10, 0x5e, 0x2b, 0xe8, 0x46, 0x68, 0x32, 0xf4, 0x23, 0x2c, 0x68, 0xd1, 0x03, 0xef,
|
||||||
|
0x4d, 0x1a, 0x31, 0x88, 0xe5, 0xa5, 0xea, 0xa7, 0x7c, 0x4d, 0xd5, 0x41, 0x45, 0x76, 0x22, 0x54,
|
||||||
|
0xd2, 0x06, 0xf3, 0x7c, 0xfc, 0x11, 0x84, 0x2a, 0x96, 0x87, 0x94, 0x58, 0x1f, 0x9c, 0x75, 0xce,
|
||||||
|
0x39, 0x98, 0x65, 0x3b, 0x73, 0x75, 0x83, 0x05, 0x04, 0xeb, 0x10, 0xf3, 0xf4, 0x04, 0xeb, 0xd7,
|
||||||
|
0xf2, 0x87, 0xf0, 0x7f, 0x9e, 0x3f, 0x6d, 0x57, 0x45, 0xa7, 0xea, 0xac, 0xbd, 0xc8, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_line_xpm[1] = {{ png, sizeof( png ), "array_line_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x00, 0x79, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x94, 0x41, 0x0a, 0x00,
|
||||||
|
0x31, 0x08, 0x03, 0xfd, 0x4a, 0xff, 0x94, 0xff, 0xf6, 0xdc, 0xfd, 0x94, 0x7b, 0xda, 0x43, 0x65,
|
||||||
|
0x41, 0xad, 0x90, 0x82, 0x07, 0xc1, 0x8b, 0x0e, 0xc4, 0x18, 0x51, 0x55, 0x61, 0x94, 0xd0, 0x41,
|
||||||
|
0x00, 0xd4, 0x2b, 0x3b, 0x0c, 0x60, 0x7a, 0xb5, 0x81, 0xbe, 0x45, 0xb2, 0x86, 0x7a, 0xbd, 0x85,
|
||||||
|
0xc8, 0x33, 0xa6, 0xd7, 0xdf, 0x03, 0x65, 0xe4, 0x8b, 0xc8, 0xf6, 0x0b, 0x8a, 0x1c, 0xd4, 0x82,
|
||||||
|
0x82, 0x33, 0x97, 0x40, 0x34, 0xe9, 0x7a, 0xb9, 0x8e, 0xf6, 0xb0, 0x6d, 0xb3, 0x2e, 0x2c, 0x43,
|
||||||
|
0x25, 0xeb, 0x52, 0x87, 0xad, 0xb8, 0x8e, 0x0b, 0xca, 0x48, 0x71, 0xfa, 0xb0, 0xa9, 0x38, 0xa9,
|
||||||
|
0x44, 0x10, 0x0f, 0x44, 0x93, 0xae, 0x97, 0xeb, 0x68, 0x0f, 0xdb, 0x2a, 0xeb, 0x5e, 0x8c, 0x95,
|
||||||
|
0x3c, 0x73, 0x5c, 0xe2, 0x55, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||||
|
0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_module_xpm[1] = {{ png, sizeof( png ), "array_module_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,77 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x03, 0xbd, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0xdd, 0x4b, 0x54,
|
||||||
|
0x41, 0x18, 0xc6, 0x67, 0x3f, 0xdc, 0x2b, 0x53, 0x28, 0x93, 0xa0, 0x08, 0xef, 0x14, 0x8a, 0x4c,
|
||||||
|
0x44, 0x2c, 0x8c, 0x2d, 0xcb, 0x4a, 0xc1, 0x7f, 0xa0, 0x8b, 0xfe, 0x82, 0xa0, 0x8b, 0x8c, 0x22,
|
||||||
|
0xf2, 0x63, 0x3d, 0x47, 0x57, 0x4b, 0xca, 0x42, 0xd4, 0xf5, 0xb3, 0x14, 0xf3, 0x83, 0x5c, 0x95,
|
||||||
|
0x45, 0x02, 0x15, 0x0c, 0xfb, 0x07, 0x8a, 0x84, 0x10, 0x25, 0x23, 0x24, 0x24, 0xa2, 0x8b, 0x6e,
|
||||||
|
0x82, 0xbc, 0xc8, 0xde, 0xdf, 0x38, 0x47, 0x8f, 0xeb, 0x6e, 0x7a, 0x61, 0x5d, 0x3c, 0x9c, 0x61,
|
||||||
|
0xce, 0xcc, 0x3c, 0xf3, 0x3e, 0xef, 0x33, 0xef, 0x8c, 0x5a, 0x5f, 0x5f, 0x57, 0xff, 0x03, 0x89,
|
||||||
|
0x3b, 0x43, 0xea, 0xa0, 0xa0, 0x54, 0x50, 0xae, 0xc2, 0xea, 0xf0, 0xae, 0x8b, 0x34, 0xaa, 0x74,
|
||||||
|
0x65, 0xa9, 0x02, 0x55, 0xa5, 0xf2, 0xd5, 0x1d, 0x75, 0x60, 0x57, 0x22, 0x59, 0x38, 0x43, 0x30,
|
||||||
|
0xa1, 0x6a, 0xd5, 0x6f, 0xf9, 0x7e, 0xd7, 0xd8, 0x68, 0xcf, 0xaa, 0x3a, 0x75, 0x74, 0xc7, 0xe4,
|
||||||
|
0xb0, 0x3a, 0x14, 0xa8, 0x0b, 0xd4, 0xcb, 0x98, 0x58, 0xea, 0x83, 0xd4, 0xc1, 0xd4, 0x86, 0xd4,
|
||||||
|
0x41, 0xda, 0x7e, 0xcb, 0x5f, 0x29, 0x73, 0xd2, 0x12, 0x12, 0x19, 0x92, 0xaf, 0x82, 0xcf, 0x82,
|
||||||
|
0x69, 0x41, 0x4c, 0xa3, 0x46, 0x4d, 0xc9, 0xf7, 0x93, 0xe0, 0x87, 0x20, 0xcb, 0x35, 0x3e, 0xd3,
|
||||||
|
0x67, 0xfb, 0x86, 0x73, 0x9f, 0x9d, 0xea, 0x6e, 0x5d, 0x7e, 0x64, 0x8d, 0x7c, 0xeb, 0xab, 0x02,
|
||||||
|
0x4f, 0x16, 0x1f, 0xda, 0x39, 0x1d, 0xd9, 0xbd, 0xf2, 0x6f, 0xc0, 0x4d, 0xe6, 0x26, 0x9a, 0x30,
|
||||||
|
0x24, 0x31, 0x43, 0xf4, 0x41, 0xb0, 0x20, 0x98, 0x31, 0x7d, 0x1f, 0x65, 0xb7, 0x6f, 0x9c, 0xf1,
|
||||||
|
0x01, 0x3b, 0xd0, 0x58, 0x34, 0x50, 0x18, 0x61, 0xf1, 0xc7, 0x8b, 0x61, 0xfb, 0xd2, 0xc8, 0x85,
|
||||||
|
0x48, 0x59, 0xf4, 0x4a, 0x5b, 0xcb, 0x72, 0x93, 0x26, 0x85, 0x8c, 0xc8, 0xb6, 0x11, 0xe9, 0x9c,
|
||||||
|
0x6c, 0x48, 0x34, 0x6d, 0xf0, 0xcb, 0x7c, 0xa3, 0x82, 0x35, 0xc1, 0x6b, 0xc1, 0x2b, 0xdd, 0xb6,
|
||||||
|
0x55, 0x36, 0x32, 0xfa, 0x2c, 0xdf, 0x78, 0xdf, 0x97, 0x8e, 0x1a, 0x7b, 0xbe, 0x3a, 0x4c, 0xdb,
|
||||||
|
0x6f, 0xfb, 0xab, 0x64, 0xe1, 0x7a, 0xc1, 0x18, 0x64, 0x44, 0x86, 0x8c, 0x4e, 0xce, 0x1c, 0xa2,
|
||||||
|
0x52, 0x93, 0x93, 0x98, 0x89, 0x64, 0xca, 0x15, 0x29, 0x12, 0x2c, 0x99, 0x7f, 0xab, 0x32, 0xf9,
|
||||||
|
0x9a, 0x10, 0x05, 0x33, 0x9b, 0x33, 0xfa, 0xd9, 0xf9, 0x99, 0xfe, 0x82, 0x4e, 0xaf, 0xe5, 0xbd,
|
||||||
|
0xe5, 0x8c, 0x87, 0x8c, 0xc8, 0xf8, 0xa7, 0x73, 0x26, 0x06, 0x71, 0x13, 0x95, 0xbb, 0x88, 0x90,
|
||||||
|
0x2b, 0xea, 0x22, 0x8a, 0x68, 0xd9, 0xb6, 0x88, 0xae, 0x0b, 0x8a, 0x8f, 0x34, 0x67, 0x6a, 0xa2,
|
||||||
|
0xfc, 0xe7, 0xa7, 0xbb, 0xbc, 0xb6, 0xf7, 0xc6, 0x26, 0x91, 0x44, 0x86, 0x8c, 0x9a, 0x48, 0x0c,
|
||||||
|
0x82, 0x1b, 0xb7, 0x88, 0xc4, 0xc2, 0x5a, 0xba, 0x8d, 0xc4, 0xcf, 0x18, 0xb9, 0x06, 0x0c, 0x09,
|
||||||
|
0x32, 0xce, 0x09, 0x26, 0x75, 0xbf, 0xa5, 0x4e, 0xc8, 0xf7, 0xb8, 0xcf, 0xf2, 0x8c, 0x0f, 0xac,
|
||||||
|
0x76, 0x57, 0x57, 0xbd, 0xbb, 0xdb, 0x40, 0x1b, 0x32, 0x41, 0x05, 0x32, 0x92, 0x33, 0x0c, 0xa2,
|
||||||
|
0xa5, 0x13, 0xeb, 0xc7, 0x9b, 0x61, 0xd6, 0xb8, 0x2b, 0x66, 0x72, 0xb2, 0x64, 0x22, 0x99, 0xd3,
|
||||||
|
0x7d, 0xb5, 0x6a, 0x51, 0xbe, 0x6f, 0xd5, 0xba, 0xf2, 0x80, 0x94, 0xba, 0x94, 0xa7, 0xc5, 0xc3,
|
||||||
|
0x41, 0xbd, 0x73, 0xc8, 0x88, 0x0c, 0x19, 0xc9, 0x19, 0x7d, 0xb8, 0x11, 0xeb, 0xef, 0x74, 0x9d,
|
||||||
|
0x24, 0xd8, 0x58, 0xf8, 0xa3, 0x49, 0x7c, 0xcc, 0x60, 0x52, 0x93, 0xd4, 0xaa, 0x9f, 0xd2, 0xce,
|
||||||
|
0x71, 0x6d, 0xec, 0x98, 0xa7, 0xd6, 0x33, 0x0a, 0x19, 0x91, 0x39, 0xf6, 0xc6, 0x20, 0xb8, 0x11,
|
||||||
|
0xeb, 0x73, 0xce, 0x92, 0x1d, 0xd8, 0x2c, 0x2c, 0x6c, 0xa4, 0x5b, 0x35, 0x58, 0xd3, 0x91, 0xb8,
|
||||||
|
0x48, 0xdc, 0x64, 0x44, 0x86, 0x74, 0xe4, 0x0c, 0x83, 0x20, 0x1d, 0xd6, 0xe7, 0x9c, 0xed, 0x5e,
|
||||||
|
0x82, 0xb0, 0x30, 0xee, 0x22, 0xf1, 0xe4, 0x44, 0xa4, 0x4a, 0x5e, 0xc3, 0x44, 0x4a, 0xc9, 0x19,
|
||||||
|
0x06, 0xc1, 0x8d, 0x89, 0x2a, 0x48, 0x72, 0x22, 0x64, 0x64, 0x12, 0x93, 0x59, 0x64, 0xbf, 0x89,
|
||||||
|
0x08, 0x97, 0xb0, 0x3d, 0x22, 0x05, 0x32, 0x20, 0x07, 0xb2, 0x20, 0x0f, 0x32, 0xed, 0x45, 0x3a,
|
||||||
|
0xe6, 0xfe, 0x55, 0x3a, 0x12, 0x27, 0xfa, 0x8e, 0x14, 0xf4, 0xe5, 0x75, 0xf5, 0xac, 0xb4, 0x86,
|
||||||
|
0x9c, 0xe4, 0xf6, 0xaf, 0x76, 0x56, 0x07, 0x87, 0xce, 0x76, 0xc8, 0x02, 0x51, 0x37, 0x99, 0x36,
|
||||||
|
0x83, 0xe5, 0x19, 0x0d, 0x0e, 0x17, 0x45, 0x18, 0xe3, 0x8c, 0x67, 0x2e, 0x6b, 0xb0, 0x56, 0x42,
|
||||||
|
0x33, 0x60, 0xc5, 0xdc, 0xde, 0x93, 0x3d, 0x0c, 0xb6, 0xe7, 0x2b, 0xc3, 0x85, 0x62, 0x55, 0x2c,
|
||||||
|
0x8b, 0x75, 0xe9, 0x83, 0x4c, 0x47, 0xe6, 0xb2, 0xf7, 0xc5, 0x91, 0x60, 0x7b, 0x52, 0x7b, 0xcb,
|
||||||
|
0x5a, 0x3b, 0xec, 0xad, 0xef, 0x13, 0x39, 0x5c, 0x1c, 0x32, 0x0e, 0x9b, 0x39, 0x80, 0x15, 0x1c,
|
||||||
|
0x42, 0xda, 0x2c, 0xc4, 0xae, 0x69, 0xeb, 0x7c, 0xc4, 0x1d, 0x58, 0x8f, 0x73, 0x60, 0x2d, 0xef,
|
||||||
|
0x6d, 0xda, 0x49, 0x0f, 0x2c, 0x65, 0x82, 0x72, 0xc1, 0x4e, 0x28, 0x1f, 0x52, 0x46, 0xee, 0x39,
|
||||||
|
0x3b, 0x61, 0x01, 0x76, 0xcb, 0x3f, 0xf2, 0xa0, 0x93, 0x1e, 0x5f, 0x82, 0x2c, 0xef, 0x4d, 0x57,
|
||||||
|
0x09, 0x0a, 0x25, 0x2f, 0x41, 0x52, 0xf8, 0x28, 0x80, 0xfc, 0x2c, 0x8b, 0x96, 0xb4, 0x49, 0x32,
|
||||||
|
0x2d, 0x17, 0x51, 0x05, 0x32, 0xf2, 0x8f, 0x64, 0x1b, 0x67, 0x6d, 0x16, 0xd5, 0xc2, 0xfe, 0xfc,
|
||||||
|
0xf8, 0xa2, 0x6a, 0x5f, 0x1d, 0x2d, 0x69, 0x4f, 0x5c, 0x54, 0xa5, 0x94, 0x13, 0x26, 0xa5, 0x1d,
|
||||||
|
0xe8, 0x43, 0x67, 0x05, 0x6c, 0x22, 0x43, 0x22, 0x72, 0x46, 0x92, 0x91, 0xc5, 0x58, 0x7f, 0xf3,
|
||||||
|
0x9a, 0x08, 0xbd, 0xbf, 0xaf, 0x6b, 0x1d, 0x63, 0xd9, 0xa0, 0xdf, 0xf2, 0x8d, 0x39, 0xeb, 0xec,
|
||||||
|
0xb8, 0x26, 0xcc, 0x4e, 0x2a, 0xb9, 0xac, 0x9c, 0x5b, 0x92, 0xc8, 0x90, 0x00, 0xbd, 0xe9, 0xc3,
|
||||||
|
0x49, 0xd8, 0x36, 0xd1, 0xc5, 0xd7, 0xb4, 0x50, 0x5f, 0x77, 0x7e, 0xe8, 0x5c, 0xc7, 0xe5, 0x97,
|
||||||
|
0xc5, 0x11, 0xe6, 0x26, 0xbd, 0xf8, 0x8c, 0x5d, 0xd3, 0xb8, 0x7e, 0x19, 0xe0, 0x0c, 0x06, 0x24,
|
||||||
|
0x15, 0x07, 0x69, 0xbb, 0xba, 0xce, 0x86, 0x73, 0x95, 0xe7, 0x49, 0x8e, 0xba, 0x56, 0x5a, 0x42,
|
||||||
|
0x7b, 0xbe, 0xca, 0x1d, 0x32, 0xfd, 0xb0, 0xe0, 0xb1, 0x21, 0xfa, 0xea, 0x64, 0x4a, 0x5b, 0x3f,
|
||||||
|
0x40, 0x5c, 0x67, 0x22, 0xfe, 0x71, 0x22, 0xc5, 0x35, 0x96, 0xde, 0x98, 0xf6, 0x62, 0x4f, 0x8f,
|
||||||
|
0x93, 0x6d, 0x9d, 0xe4, 0x8c, 0xa7, 0x13, 0x4f, 0x28, 0x63, 0xcf, 0x7d, 0x7d, 0x6e, 0xfd, 0x4b,
|
||||||
|
0xfc, 0x01, 0x33, 0x8a, 0x28, 0x8c, 0xb5, 0xeb, 0xec, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||||
|
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_pad_xpm[1] = {{ png, sizeof( png ), "array_pad_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,51 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0x22, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x94, 0x4f, 0x4b, 0x1b,
|
||||||
|
0x41, 0x18, 0x87, 0x67, 0xc1, 0x59, 0xdd, 0x4d, 0xb6, 0x69, 0x24, 0xb6, 0xb6, 0x62, 0xbd, 0x0a,
|
||||||
|
0x31, 0x15, 0x94, 0x5d, 0x12, 0x6a, 0xbd, 0xd9, 0xcf, 0xe1, 0xb9, 0x58, 0xe8, 0x27, 0x29, 0x3d,
|
||||||
|
0xf5, 0xd8, 0x4b, 0xa1, 0xe0, 0x45, 0xb1, 0xc1, 0x4b, 0xa1, 0x9d, 0x0f, 0xe0, 0xd5, 0x8b, 0x8a,
|
||||||
|
0x87, 0xf6, 0xa4, 0xa0, 0x87, 0xf6, 0x94, 0x16, 0xe9, 0x74, 0x9e, 0x25, 0x23, 0x13, 0x49, 0xc2,
|
||||||
|
0xfe, 0x09, 0x2e, 0xbc, 0x2c, 0x3b, 0xb3, 0xef, 0x3e, 0xf3, 0xbe, 0xbf, 0x77, 0x7f, 0x42, 0x6b,
|
||||||
|
0x2d, 0x86, 0x85, 0xb9, 0xf4, 0xa8, 0xbd, 0x31, 0x39, 0x6a, 0xe4, 0xde, 0x9d, 0x17, 0xa3, 0xa8,
|
||||||
|
0x22, 0xde, 0x35, 0x1e, 0xca, 0x73, 0x40, 0x73, 0xb3, 0xf2, 0x84, 0x67, 0xd6, 0xc7, 0x7c, 0x3c,
|
||||||
|
0xac, 0x86, 0xe2, 0x75, 0xa3, 0x26, 0x3f, 0x03, 0x6a, 0xd4, 0xe5, 0x27, 0x9e, 0x59, 0x1f, 0x0a,
|
||||||
|
0x32, 0x57, 0x1c, 0xcc, 0x78, 0x57, 0xeb, 0xab, 0xf3, 0x37, 0x9d, 0x76, 0xc2, 0x82, 0x3e, 0xea,
|
||||||
|
0x6e, 0xea, 0x37, 0xdb, 0x8b, 0xbd, 0x30, 0xf0, 0x2e, 0xd9, 0x1f, 0x02, 0x59, 0x0e, 0xa6, 0xbd,
|
||||||
|
0x83, 0xb5, 0xe7, 0xf3, 0xdf, 0x3a, 0xed, 0x58, 0x01, 0x3a, 0xea, 0xbe, 0x54, 0x3b, 0xdb, 0x8b,
|
||||||
|
0x5f, 0x4d, 0xce, 0x3e, 0xfb, 0x03, 0x20, 0x4e, 0x3c, 0xe3, 0x7b, 0xd7, 0xed, 0x64, 0x45, 0xb7,
|
||||||
|
0x5a, 0x2d, 0xbd, 0xb1, 0xf1, 0x22, 0x05, 0xf5, 0xce, 0x5e, 0xe9, 0x3f, 0x27, 0x1d, 0xdd, 0xfd,
|
||||||
|
0xb8, 0xae, 0xfb, 0xb0, 0xc8, 0xad, 0x64, 0xda, 0xf7, 0xbe, 0xb4, 0xe3, 0x15, 0x65, 0x72, 0x94,
|
||||||
|
0xc9, 0x49, 0x41, 0xbd, 0xb3, 0x2d, 0xf5, 0xf7, 0xb4, 0xa3, 0x4c, 0x8e, 0xea, 0xc3, 0xc2, 0x5b,
|
||||||
|
0x10, 0xed, 0x59, 0x7a, 0xf6, 0xf8, 0x1f, 0x10, 0x00, 0x2e, 0xe8, 0xe6, 0xb8, 0x96, 0xc2, 0xa8,
|
||||||
|
0x8c, 0xf7, 0x2c, 0x88, 0xf6, 0x98, 0x9c, 0xef, 0x40, 0x00, 0xb8, 0x20, 0x93, 0x93, 0xc2, 0xa8,
|
||||||
|
0x8c, 0xf7, 0x6e, 0x41, 0xf5, 0x9a, 0xfc, 0x91, 0x24, 0x49, 0x0a, 0xb0, 0x61, 0x41, 0x36, 0x68,
|
||||||
|
0x23, 0x9a, 0x59, 0x90, 0xc9, 0xd9, 0x8d, 0xe3, 0x38, 0x05, 0xd8, 0xb0, 0x20, 0x1b, 0xb4, 0x11,
|
||||||
|
0xcd, 0xfa, 0x1d, 0x10, 0xba, 0x40, 0xa8, 0xdc, 0x01, 0x8d, 0x93, 0x72, 0x62, 0xb7, 0x02, 0xdb,
|
||||||
|
0x42, 0x1b, 0x54, 0x1c, 0x55, 0xa6, 0x2e, 0x6c, 0x45, 0x9c, 0x94, 0x13, 0xbb, 0x15, 0xd8, 0x16,
|
||||||
|
0xda, 0xa0, 0xe2, 0x28, 0x9c, 0xda, 0x1b, 0xd0, 0x08, 0x0d, 0xd0, 0x02, 0x4d, 0x5c, 0x10, 0x77,
|
||||||
|
0xb4, 0x5b, 0x78, 0xfa, 0x48, 0x87, 0xa1, 0xf8, 0xe0, 0x6a, 0x84, 0x06, 0x68, 0x81, 0x26, 0x2e,
|
||||||
|
0x88, 0x3b, 0xda, 0x2d, 0x3c, 0x99, 0x53, 0x41, 0x20, 0xde, 0x0e, 0x4c, 0x1d, 0x53, 0xc5, 0x74,
|
||||||
|
0x01, 0x73, 0x41, 0x40, 0x9a, 0xcd, 0xa6, 0x96, 0xd2, 0xfb, 0x7d, 0x77, 0xea, 0x98, 0x2a, 0xa6,
|
||||||
|
0x0b, 0x98, 0x0b, 0x02, 0x62, 0x72, 0x94, 0xef, 0x7b, 0x87, 0x03, 0x53, 0x67, 0xff, 0x23, 0x60,
|
||||||
|
0x54, 0x46, 0x1b, 0x01, 0xd1, 0x2e, 0x2a, 0xf1, 0xa5, 0xf7, 0x6b, 0xd4, 0x7f, 0x04, 0x8c, 0xca,
|
||||||
|
0x68, 0x23, 0x20, 0xda, 0x45, 0x25, 0x7d, 0xc8, 0xf2, 0x58, 0x67, 0x40, 0x33, 0x40, 0xf5, 0x07,
|
||||||
|
0xf2, 0x67, 0xb5, 0x22, 0xde, 0x67, 0x72, 0x06, 0xa3, 0x19, 0x20, 0x93, 0xb3, 0x5b, 0x0d, 0xc4,
|
||||||
|
0xce, 0x48, 0x67, 0xb8, 0x57, 0xaf, 0xcb, 0x9a, 0x34, 0x09, 0x53, 0xcd, 0x64, 0x90, 0x65, 0x4d,
|
||||||
|
0x35, 0xb3, 0x41, 0x96, 0x31, 0xd5, 0x5c, 0x06, 0x59, 0xd8, 0x54, 0xf3, 0x1a, 0x64, 0x19, 0x53,
|
||||||
|
0xcd, 0x65, 0x90, 0x45, 0x4d, 0x55, 0xdd, 0x4b, 0x14, 0x31, 0xc8, 0xc2, 0xa6, 0x9a, 0xd7, 0x20,
|
||||||
|
0xcb, 0x98, 0x6a, 0x2e, 0x83, 0x2c, 0x6b, 0xaa, 0x99, 0x0d, 0x72, 0x12, 0xa6, 0x9a, 0xc9, 0x20,
|
||||||
|
0x27, 0x6d, 0xaa, 0x13, 0xf5, 0xba, 0xff, 0x0c, 0x96, 0xd3, 0x5f, 0x78, 0x1d, 0xd5, 0x5b, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_target_xpm[1] = {{ png, sizeof( png ), "array_target_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,39 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x01, 0x59, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xb1, 0x6a, 0x02,
|
||||||
|
0x41, 0x10, 0x86, 0x07, 0x7c, 0x06, 0xad, 0x0c, 0xd8, 0x48, 0xb0, 0x31, 0x36, 0xd6, 0x22, 0x58,
|
||||||
|
0x5a, 0xa4, 0xb8, 0x4a, 0xc8, 0x1b, 0x58, 0xa5, 0xca, 0x95, 0xa9, 0x7c, 0x82, 0x20, 0xec, 0xed,
|
||||||
|
0xa9, 0x98, 0xce, 0xca, 0x60, 0x93, 0xd6, 0x77, 0xb1, 0xf0, 0x1d, 0x0c, 0x5c, 0x66, 0x6f, 0xe6,
|
||||||
|
0xbc, 0xec, 0xe6, 0x76, 0xdd, 0x1c, 0x41, 0x10, 0xee, 0xe0, 0x67, 0x6f, 0x66, 0xff, 0xe1, 0x63,
|
||||||
|
0xef, 0x98, 0x61, 0x21, 0x49, 0x12, 0xb8, 0x86, 0xf0, 0x91, 0x53, 0x80, 0xe8, 0xe8, 0x2f, 0xe5,
|
||||||
|
0x17, 0x63, 0x7c, 0x7f, 0xf7, 0x97, 0xf2, 0x43, 0xf4, 0x82, 0x42, 0x64, 0x74, 0x40, 0x7d, 0xa2,
|
||||||
|
0xf6, 0x1c, 0x67, 0xda, 0x73, 0xfe, 0xc0, 0xb1, 0xf2, 0x07, 0xa8, 0x1d, 0x6a, 0x85, 0xe0, 0x57,
|
||||||
|
0x5c, 0x67, 0x1c, 0x67, 0x9a, 0x71, 0x7e, 0xc5, 0x71, 0x90, 0x81, 0xbe, 0x90, 0xda, 0xa7, 0x23,
|
||||||
|
0xce, 0x5b, 0x3a, 0x68, 0xde, 0xa2, 0xbc, 0xe8, 0x93, 0x2f, 0x03, 0xc9, 0x0f, 0x80, 0x65, 0x9b,
|
||||||
|
0xf6, 0xd6, 0x0d, 0x1d, 0xb4, 0x6e, 0x50, 0x7e, 0xd9, 0x26, 0x1f, 0x81, 0x3a, 0x00, 0xf1, 0x30,
|
||||||
|
0xff, 0x96, 0xc5, 0x20, 0xda, 0x8b, 0x87, 0xe4, 0x7f, 0xbb, 0xc3, 0xb5, 0x9b, 0xe7, 0x8b, 0x41,
|
||||||
|
0xb4, 0x17, 0x75, 0x53, 0xff, 0xef, 0x9f, 0x66, 0x07, 0xd9, 0x7f, 0xb4, 0x1d, 0x74, 0xf6, 0x54,
|
||||||
|
0xa0, 0x5b, 0x04, 0x89, 0x91, 0x0e, 0x12, 0xa3, 0xcb, 0x20, 0xd1, 0xd3, 0x41, 0xa2, 0xe7, 0x04,
|
||||||
|
0xa1, 0xe1, 0x19, 0x8d, 0x27, 0xa3, 0x61, 0x4f, 0x2a, 0x6f, 0x87, 0xc8, 0x47, 0xf4, 0x6c, 0x8d,
|
||||||
|
0x86, 0xdd, 0xaa, 0xbc, 0x03, 0x24, 0x27, 0xdc, 0x90, 0x86, 0xe4, 0xc4, 0x71, 0x9a, 0x01, 0x4f,
|
||||||
|
0x0a, 0x43, 0x62, 0x60, 0xcc, 0xba, 0xf8, 0xbe, 0xd8, 0x68, 0x93, 0xf2, 0x97, 0xa9, 0xc9, 0xe7,
|
||||||
|
0x96, 0xaf, 0x82, 0x72, 0x35, 0xe7, 0x22, 0xf9, 0x84, 0x6b, 0x13, 0xe9, 0x0f, 0xba, 0x29, 0x8d,
|
||||||
|
0x9b, 0xbc, 0x6f, 0x80, 0xfe, 0x52, 0x93, 0xce, 0x2f, 0x19, 0x02, 0x6c, 0x6a, 0xee, 0x01, 0xb9,
|
||||||
|
0xa9, 0x91, 0x4f, 0xf9, 0x4b, 0xd4, 0x94, 0xe9, 0x89, 0x7f, 0xea, 0xa3, 0x0a, 0x54, 0x81, 0xd2,
|
||||||
|
0x82, 0x45, 0x9d, 0x2f, 0x15, 0x3f, 0x8a, 0x54, 0xbc, 0xa8, 0xdb, 0x21, 0x7e, 0x35, 0xe6, 0xdc,
|
||||||
|
0x0a, 0x2d, 0xd7, 0xa5, 0xd0, 0x31, 0xeb, 0xbc, 0x6a, 0xe0, 0x5a, 0x17, 0xc8, 0x6f, 0x28, 0x7d,
|
||||||
|
0x35, 0x0d, 0xec, 0xf1, 0xfb, 0x82, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||||
|
0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_text_xpm[1] = {{ png, sizeof( png ), "array_text_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,51 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0x1a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x94, 0x3d, 0x88, 0x13,
|
||||||
|
0x41, 0x18, 0x86, 0xe7, 0x40, 0xbb, 0x20, 0xe1, 0x1a, 0x13, 0x3b, 0xb1, 0xb3, 0xb0, 0xbf, 0x43,
|
||||||
|
0x0e, 0xe5, 0x38, 0xbd, 0xd2, 0x46, 0x10, 0x04, 0x0b, 0x0b, 0x4b, 0xb9, 0xce, 0x9f, 0xc2, 0xcc,
|
||||||
|
0x9a, 0x9d, 0x9d, 0x9f, 0x6c, 0x22, 0xc1, 0x22, 0x6a, 0x27, 0x07, 0x5a, 0x18, 0xb2, 0xe4, 0xe4,
|
||||||
|
0x20, 0x46, 0x4c, 0x8a, 0x6b, 0x6c, 0xc5, 0xeb, 0x4e, 0x2c, 0x6c, 0x44, 0x39, 0x72, 0x57, 0xa8,
|
||||||
|
0xa0, 0x98, 0x1b, 0xdf, 0xec, 0xae, 0x49, 0x30, 0xeb, 0xdd, 0x8e, 0x03, 0xc1, 0xe2, 0xdd, 0x6f,
|
||||||
|
0x77, 0x66, 0xbe, 0x79, 0xe7, 0xe7, 0xdb, 0x87, 0x68, 0xad, 0xc9, 0x34, 0x14, 0x3d, 0x1c, 0xf2,
|
||||||
|
0x93, 0x50, 0xa2, 0x0f, 0x14, 0xc6, 0x0d, 0x13, 0x29, 0xa9, 0x43, 0xdd, 0x14, 0xaa, 0x8f, 0x8c,
|
||||||
|
0xa2, 0x89, 0xde, 0x61, 0xa2, 0xf7, 0x88, 0x3b, 0xd0, 0xd7, 0x38, 0x7e, 0x08, 0xdb, 0x47, 0xd2,
|
||||||
|
0x63, 0x46, 0x83, 0x49, 0x6e, 0x42, 0xb7, 0xa1, 0x0a, 0x29, 0x90, 0x87, 0x61, 0xa4, 0xe4, 0x4e,
|
||||||
|
0xdc, 0xfe, 0x5b, 0xdd, 0x3f, 0x8d, 0x3e, 0x42, 0x7d, 0x98, 0xed, 0x22, 0x6e, 0x86, 0xd1, 0x21,
|
||||||
|
0x7b, 0x78, 0xff, 0x1c, 0x2f, 0x60, 0xd2, 0xa8, 0x40, 0x18, 0x62, 0x00, 0x55, 0xa1, 0x95, 0x38,
|
||||||
|
0xae, 0x43, 0x22, 0x5c, 0x80, 0x43, 0x6e, 0x25, 0x19, 0xf5, 0xa1, 0xfb, 0x9e, 0xef, 0x5d, 0x10,
|
||||||
|
0x92, 0xb5, 0xa5, 0x64, 0x67, 0xf1, 0xcd, 0x63, 0xb3, 0x41, 0xff, 0x5e, 0xc2, 0x8e, 0x02, 0xf4,
|
||||||
|
0x2f, 0x16, 0x4b, 0xc5, 0xe3, 0x52, 0xf2, 0xcb, 0x52, 0xd2, 0x63, 0x68, 0x3b, 0x1d, 0x9b, 0xbd,
|
||||||
|
0x84, 0xd6, 0x26, 0x8d, 0xb0, 0x03, 0xae, 0xf8, 0xc5, 0x52, 0x59, 0xe8, 0x46, 0xf0, 0x4c, 0x2b,
|
||||||
|
0x9f, 0x6b, 0xe1, 0xbb, 0x0b, 0x63, 0x13, 0xef, 0x26, 0x18, 0x55, 0x95, 0x52, 0x27, 0x54, 0x59,
|
||||||
|
0xb4, 0x91, 0xf3, 0x42, 0xfa, 0x5e, 0x9b, 0x31, 0x96, 0x1f, 0x1b, 0x53, 0x4d, 0xda, 0xd1, 0x5b,
|
||||||
|
0xe9, 0xf3, 0x8d, 0xe6, 0x5a, 0xa0, 0x7b, 0xbd, 0x6d, 0xfd, 0xe4, 0xe9, 0xaa, 0x16, 0x8a, 0x0d,
|
||||||
|
0x95, 0xbf, 0x7b, 0xf4, 0x5e, 0x82, 0xd1, 0x8a, 0x2a, 0xf3, 0xab, 0xcd, 0xe7, 0x8d, 0x0e, 0x72,
|
||||||
|
0xba, 0xc8, 0xe9, 0x0a, 0xe5, 0x45, 0x2a, 0xb1, 0x56, 0xae, 0x98, 0x3b, 0x93, 0x7a, 0x47, 0xe8,
|
||||||
|
0x3b, 0x82, 0xa3, 0xdc, 0x12, 0xca, 0x7d, 0x85, 0xf7, 0x53, 0x69, 0x76, 0x84, 0xb2, 0x38, 0x8c,
|
||||||
|
0xa3, 0xbf, 0x81, 0x05, 0x5e, 0xc1, 0x98, 0xd9, 0x34, 0x77, 0x34, 0x38, 0x6b, 0x7d, 0xde, 0x5b,
|
||||||
|
0x72, 0x90, 0xd4, 0xa7, 0x94, 0x66, 0x52, 0xdc, 0xd1, 0x25, 0xa8, 0xb3, 0xec, 0x2d, 0xcf, 0x21,
|
||||||
|
0xa7, 0x8e, 0x9c, 0x43, 0xc9, 0x55, 0x17, 0xdd, 0xc5, 0x1b, 0xe8, 0x7b, 0x5c, 0x85, 0x3f, 0x10,
|
||||||
|
0x5f, 0x23, 0xa9, 0x87, 0x23, 0x79, 0xb0, 0x4f, 0xd5, 0x5d, 0x87, 0x1e, 0xc7, 0xdf, 0xab, 0xd0,
|
||||||
|
0x35, 0x21, 0x58, 0x85, 0x73, 0x7e, 0x6e, 0xbf, 0xff, 0xe8, 0x0b, 0xf4, 0x29, 0x6c, 0x2b, 0x44,
|
||||||
|
0x0b, 0x28, 0x96, 0x1c, 0x17, 0x66, 0xdf, 0xfe, 0xfa, 0x1f, 0x51, 0x52, 0x0b, 0xcb, 0x3a, 0x2a,
|
||||||
|
0x69, 0x77, 0x60, 0x28, 0x84, 0x3b, 0x2f, 0xa4, 0xfb, 0xc8, 0x88, 0x0c, 0x19, 0x9a, 0x39, 0xc9,
|
||||||
|
0x15, 0xab, 0x0d, 0x8f, 0xe2, 0x20, 0x32, 0x38, 0xa4, 0x95, 0xa5, 0xd9, 0x2c, 0xae, 0x60, 0x09,
|
||||||
|
0xe3, 0x67, 0xc8, 0x54, 0x59, 0x37, 0x3d, 0xa8, 0x1a, 0x02, 0xd2, 0x06, 0xaa, 0x46, 0x80, 0xb4,
|
||||||
|
0x81, 0xaa, 0x11, 0x20, 0x6d, 0xa0, 0x6a, 0x04, 0x48, 0x1b, 0xa8, 0x1a, 0x01, 0xd2, 0x06, 0xaa,
|
||||||
|
0x46, 0x80, 0xb4, 0x81, 0xaa, 0x11, 0x20, 0x6d, 0xa0, 0x6a, 0x04, 0x48, 0x1b, 0xa8, 0x1a, 0x01,
|
||||||
|
0xd2, 0x06, 0xaa, 0x46, 0x80, 0xfc, 0x77, 0xa8, 0x1a, 0x02, 0xf2, 0xbf, 0x86, 0xea, 0x2f, 0x73,
|
||||||
|
0x29, 0x07, 0xb2, 0xe7, 0xc3, 0x61, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||||
|
0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE array_zone_xpm[1] = {{ png, sizeof( png ), "array_zone_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,43 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x01, 0xa4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||||
|
0x03, 0x3d, 0x30, 0x0a, 0x27, 0x24, 0x24, 0xe4, 0x3f, 0x0c, 0x13, 0xc3, 0xa7, 0xc8, 0x22, 0x86,
|
||||||
|
0x93, 0x8a, 0x28, 0x06, 0xe3, 0xe2, 0x2f, 0x61, 0x60, 0xe0, 0x03, 0x62, 0x4f, 0x20, 0xae, 0x58,
|
||||||
|
0xcc, 0xc0, 0x10, 0xbc, 0x9c, 0x81, 0x41, 0x96, 0xa0, 0x45, 0xc8, 0x2e, 0x85, 0x19, 0x84, 0x8f,
|
||||||
|
0x9f, 0x65, 0x67, 0xf7, 0x7f, 0x31, 0x23, 0x23, 0xc8, 0x32, 0x30, 0x5e, 0xc3, 0xc2, 0xf2, 0x73,
|
||||||
|
0x19, 0x23, 0xe3, 0xb7, 0xa5, 0x0c, 0x0c, 0x76, 0x04, 0x2d, 0x22, 0x25, 0xe8, 0xc2, 0x03, 0x03,
|
||||||
|
0xff, 0x2f, 0x62, 0x60, 0xd0, 0xc9, 0xb0, 0xb7, 0xff, 0xbf, 0x8c, 0x89, 0xa9, 0x72, 0x39, 0x23,
|
||||||
|
0xe3, 0xe7, 0x63, 0x42, 0x42, 0x20, 0xf6, 0x27, 0xa0, 0xcf, 0x14, 0x08, 0xf9, 0x28, 0x28, 0x3a,
|
||||||
|
0x3a, 0x9a, 0x8f, 0x94, 0x70, 0x87, 0x39, 0x00, 0xe8, 0xab, 0xc0, 0x4d, 0xec, 0xec, 0x9f, 0x80,
|
||||||
|
0x96, 0xfd, 0x02, 0x5a, 0xd6, 0x45, 0xc8, 0xa2, 0x43, 0x40, 0xbc, 0x81, 0x1c, 0x8b, 0x80, 0xc6,
|
||||||
|
0x30, 0x02, 0x83, 0xee, 0xfb, 0x1d, 0x79, 0xf9, 0xff, 0x2b, 0x99, 0x98, 0x9e, 0xe1, 0xb5, 0xc8,
|
||||||
|
0xd7, 0xd7, 0x97, 0x0b, 0x48, 0xff, 0x26, 0xc5, 0x57, 0x20, 0x7d, 0xf3, 0x19, 0x18, 0x38, 0x40,
|
||||||
|
0xc1, 0xb8, 0x9c, 0x89, 0xe9, 0xe9, 0x5d, 0xa0, 0x45, 0xc0, 0xf8, 0xfa, 0xb2, 0x8a, 0x89, 0xe9,
|
||||||
|
0x0a, 0x30, 0xbe, 0x6e, 0xac, 0x62, 0x60, 0x10, 0xc2, 0xe6, 0xa3, 0xc3, 0x40, 0x7c, 0x80, 0x54,
|
||||||
|
0x1f, 0x01, 0x53, 0x5c, 0x0a, 0x30, 0xe8, 0xfe, 0xad, 0x63, 0x63, 0xfb, 0x71, 0x4f, 0x41, 0xe1,
|
||||||
|
0x3f, 0x08, 0xaf, 0x66, 0x61, 0xf9, 0x05, 0x14, 0xcb, 0xc6, 0x15, 0x74, 0x89, 0x0e, 0x0e, 0x0e,
|
||||||
|
0x2c, 0x64, 0xc6, 0x51, 0xf8, 0x0a, 0x26, 0xa6, 0x6f, 0x20, 0x4b, 0xae, 0x4a, 0x4b, 0xff, 0x07,
|
||||||
|
0xb2, 0x6f, 0x03, 0x7d, 0xc3, 0x4c, 0x71, 0xaa, 0x43, 0xe6, 0xc3, 0x0c, 0x02, 0x06, 0x95, 0x3b,
|
||||||
|
0x30, 0xf8, 0xbe, 0xac, 0x60, 0x66, 0xfe, 0x0e, 0xf4, 0xa5, 0x2d, 0x55, 0xf2, 0x11, 0xae, 0x12,
|
||||||
|
0x02, 0x68, 0x81, 0xd5, 0x32, 0x06, 0x86, 0x59, 0x54, 0x2d, 0x19, 0x80, 0x78, 0x3f, 0x54, 0x6c,
|
||||||
|
0x3f, 0x0c, 0x63, 0xe3, 0x53, 0x5c, 0xd6, 0x21, 0x1b, 0xcc, 0x70, 0x4a, 0x71, 0x3f, 0x2e, 0x3e,
|
||||||
|
0x56, 0x8b, 0x08, 0x44, 0x3c, 0xdc, 0xa5, 0x30, 0x83, 0x88, 0xe5, 0x93, 0x6c, 0x11, 0x31, 0x41,
|
||||||
|
0x85, 0x8d, 0x4f, 0x8e, 0x8f, 0x6c, 0xd3, 0xd2, 0xd2, 0xb8, 0x48, 0xcc, 0x02, 0x64, 0x59, 0x34,
|
||||||
|
0x31, 0x38, 0x38, 0xb8, 0x85, 0xe6, 0x16, 0x79, 0x7a, 0x7a, 0xb2, 0x03, 0xe9, 0x3d, 0xa4, 0xf8,
|
||||||
|
0x8a, 0x5c, 0x1f, 0x4d, 0x02, 0xfa, 0x68, 0x02, 0x3d, 0x82, 0xce, 0x33, 0x34, 0x34, 0x94, 0x99,
|
||||||
|
0xe6, 0x16, 0xd1, 0x33, 0xd5, 0xd1, 0x3e, 0x1f, 0x21, 0x5b, 0x88, 0xaf, 0x24, 0xa0, 0xb8, 0x64,
|
||||||
|
0xc0, 0xe6, 0x33, 0xb2, 0xcb, 0x3a, 0x5a, 0x62, 0x00, 0x66, 0x05, 0x94, 0x24, 0x1f, 0x97, 0xfe,
|
||||||
|
0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_footprint_xpm[1] = {{ png, sizeof( png ), "duplicate_footprint_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x01, 0x41, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xb1, 0x4a, 0x03,
|
||||||
|
0x41, 0x14, 0x45, 0xcf, 0xbc, 0x59, 0x0d, 0xc4, 0x08, 0xb1, 0x90, 0x4d, 0x0c, 0x6c, 0x61, 0xb0,
|
||||||
|
0x88, 0xda, 0xa7, 0x16, 0x0b, 0xc1, 0xc2, 0x0f, 0xf0, 0x23, 0xfc, 0x06, 0xbb, 0x94, 0xd6, 0x62,
|
||||||
|
0x21, 0x6c, 0x76, 0x9d, 0xd5, 0x14, 0x42, 0x2c, 0x2c, 0x44, 0x44, 0xd2, 0x07, 0x2b, 0x2d, 0x52,
|
||||||
|
0x08, 0x62, 0x61, 0x11, 0x14, 0x4c, 0xc2, 0x82, 0x1a, 0xc7, 0x4f, 0x50, 0x21, 0x93, 0xc2, 0x58,
|
||||||
|
0x9c, 0xfa, 0xf0, 0x86, 0xfb, 0xde, 0x1d, 0xac, 0xb5, 0x8c, 0x03, 0xc6, 0x2e, 0xe2, 0x00, 0xeb,
|
||||||
|
0x82, 0x09, 0x10, 0x7d, 0xc7, 0x15, 0x78, 0x11, 0x6c, 0x1b, 0x58, 0x70, 0x1a, 0x86, 0x18, 0x96,
|
||||||
|
0x62, 0xa5, 0xd2, 0x08, 0x6c, 0x22, 0x72, 0x1f, 0xc3, 0x86, 0xb3, 0xd4, 0x85, 0x50, 0x35, 0x4a,
|
||||||
|
0xf5, 0xae, 0xf3, 0xf9, 0xcf, 0x86, 0xe7, 0xf5, 0x13, 0xad, 0xc3, 0x10, 0x66, 0x9c, 0xc4, 0x3b,
|
||||||
|
0x84, 0x55, 0x23, 0xf2, 0xdc, 0xf6, 0xfd, 0xe1, 0x45, 0x2e, 0x97, 0x26, 0x4a, 0x35, 0x9d, 0xed,
|
||||||
|
0x51, 0x02, 0x65, 0x23, 0xf2, 0xd4, 0xf6, 0xfd, 0x8f, 0xd3, 0xe9, 0xe9, 0xbe, 0x11, 0xd9, 0x71,
|
||||||
|
0xb6, 0xb0, 0x47, 0xb0, 0x72, 0x2c, 0x32, 0x78, 0x58, 0x5c, 0xb4, 0x46, 0xa9, 0xc1, 0x09, 0xcc,
|
||||||
|
0x3b, 0xbb, 0x0c, 0x89, 0xd6, 0x57, 0x37, 0x85, 0xc2, 0x67, 0x6b, 0x6e, 0x2e, 0x4d, 0x44, 0x6a,
|
||||||
|
0xce, 0x44, 0x31, 0xac, 0x35, 0x3c, 0xaf, 0xff, 0x58, 0x2e, 0x5b, 0x23, 0xd2, 0x8b, 0x61, 0x33,
|
||||||
|
0x82, 0xbd, 0x43, 0xc8, 0x8f, 0x54, 0x54, 0x87, 0x62, 0xac, 0x54, 0xf7, 0xb6, 0x54, 0xb2, 0x97,
|
||||||
|
0xb3, 0xb3, 0x69, 0x22, 0xf2, 0x76, 0xac, 0x75, 0x6b, 0xa4, 0x13, 0x45, 0xb0, 0x1e, 0x43, 0xda,
|
||||||
|
0xd0, 0xfa, 0xbd, 0x13, 0x04, 0xf6, 0xa5, 0x52, 0xb1, 0xcd, 0x4c, 0xe6, 0xb5, 0x0e, 0x5b, 0x23,
|
||||||
|
0x7f, 0xba, 0x08, 0x96, 0x8d, 0xc8, 0xdd, 0x79, 0x36, 0xdb, 0xef, 0x04, 0x81, 0x35, 0x22, 0xdd,
|
||||||
|
0x13, 0xd0, 0x4e, 0x6a, 0x62, 0x1f, 0xa6, 0x8e, 0x44, 0x6a, 0x11, 0x0c, 0x63, 0x91, 0x5d, 0xe7,
|
||||||
|
0x7d, 0x14, 0x42, 0xb5, 0x0e, 0xc5, 0x9f, 0xf4, 0xd1, 0x99, 0x0b, 0x26, 0x40, 0xf4, 0xf7, 0x3e,
|
||||||
|
0x27, 0xff, 0xa2, 0xdf, 0xf2, 0x05, 0x63, 0x00, 0xb0, 0xc1, 0xf1, 0xcc, 0x65, 0x5d, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_line_xpm[1] = {{ png, sizeof( png ), "duplicate_line_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,43 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x01, 0xa4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||||
|
0x03, 0x3d, 0x30, 0x0a, 0x27, 0x24, 0x24, 0xe4, 0x3f, 0x0c, 0x13, 0xc3, 0xa7, 0xc8, 0x22, 0x86,
|
||||||
|
0x93, 0x8a, 0x28, 0x06, 0xe3, 0xe2, 0x2f, 0x61, 0x60, 0xe0, 0x03, 0x62, 0x4f, 0x20, 0xae, 0x58,
|
||||||
|
0xcc, 0xc0, 0x10, 0xbc, 0x9c, 0x81, 0x41, 0x96, 0xa0, 0x45, 0xc8, 0x2e, 0x85, 0x19, 0x84, 0x8f,
|
||||||
|
0x9f, 0x65, 0x67, 0xf7, 0x7f, 0x31, 0x23, 0x23, 0xc8, 0x32, 0x30, 0x5e, 0xc3, 0xc2, 0xf2, 0x73,
|
||||||
|
0x19, 0x23, 0xe3, 0xb7, 0xa5, 0x0c, 0x0c, 0x76, 0x04, 0x2d, 0x22, 0x25, 0xe8, 0xc2, 0x03, 0x03,
|
||||||
|
0xff, 0x2f, 0x62, 0x60, 0xd0, 0xc9, 0xb0, 0xb7, 0xff, 0xbf, 0x8c, 0x89, 0xa9, 0x72, 0x39, 0x23,
|
||||||
|
0xe3, 0xe7, 0x63, 0x42, 0x42, 0x20, 0xf6, 0x27, 0xa0, 0xcf, 0x14, 0x08, 0xf9, 0x28, 0x28, 0x3a,
|
||||||
|
0x3a, 0x9a, 0x8f, 0x94, 0x70, 0x87, 0x39, 0x00, 0xe8, 0xab, 0xc0, 0x4d, 0xec, 0xec, 0x9f, 0x80,
|
||||||
|
0x96, 0xfd, 0x02, 0x5a, 0xd6, 0x45, 0xc8, 0xa2, 0x43, 0x40, 0xbc, 0x81, 0x1c, 0x8b, 0x80, 0xc6,
|
||||||
|
0x30, 0x02, 0x83, 0xee, 0xfb, 0x1d, 0x79, 0xf9, 0xff, 0x2b, 0x99, 0x98, 0x9e, 0xe1, 0xb5, 0xc8,
|
||||||
|
0xd7, 0xd7, 0x97, 0x0b, 0x48, 0xff, 0x26, 0xc5, 0x57, 0x20, 0x7d, 0xf3, 0x19, 0x18, 0x38, 0x40,
|
||||||
|
0xc1, 0xb8, 0x9c, 0x89, 0xe9, 0xe9, 0x5d, 0xa0, 0x45, 0xc0, 0xf8, 0xfa, 0xb2, 0x8a, 0x89, 0xe9,
|
||||||
|
0x0a, 0x30, 0xbe, 0x6e, 0xac, 0x62, 0x60, 0x10, 0xc2, 0xe6, 0xa3, 0xc3, 0x40, 0x7c, 0x80, 0x54,
|
||||||
|
0x1f, 0x01, 0x53, 0x5c, 0x0a, 0x30, 0xe8, 0xfe, 0xad, 0x63, 0x63, 0xfb, 0x71, 0x4f, 0x41, 0xe1,
|
||||||
|
0x3f, 0x08, 0xaf, 0x66, 0x61, 0xf9, 0x05, 0x14, 0xcb, 0xc6, 0x15, 0x74, 0x89, 0x0e, 0x0e, 0x0e,
|
||||||
|
0x2c, 0x64, 0xc6, 0x51, 0xf8, 0x0a, 0x26, 0xa6, 0x6f, 0x20, 0x4b, 0xae, 0x4a, 0x4b, 0xff, 0x07,
|
||||||
|
0xb2, 0x6f, 0x03, 0x7d, 0xc3, 0x4c, 0x71, 0xaa, 0x43, 0xe6, 0xc3, 0x0c, 0x02, 0x06, 0x95, 0x3b,
|
||||||
|
0x30, 0xf8, 0xbe, 0xac, 0x60, 0x66, 0xfe, 0x0e, 0xf4, 0xa5, 0x2d, 0x55, 0xf2, 0x11, 0xae, 0x12,
|
||||||
|
0x02, 0x68, 0x81, 0xd5, 0x32, 0x06, 0x86, 0x59, 0x54, 0x2d, 0x19, 0x80, 0x78, 0x3f, 0x54, 0x6c,
|
||||||
|
0x3f, 0x0c, 0x63, 0xe3, 0x53, 0x5c, 0xd6, 0x21, 0x1b, 0xcc, 0x70, 0x4a, 0x71, 0x3f, 0x2e, 0x3e,
|
||||||
|
0x56, 0x8b, 0x08, 0x44, 0x3c, 0xdc, 0xa5, 0x30, 0x83, 0x88, 0xe5, 0x93, 0x6c, 0x11, 0x31, 0x41,
|
||||||
|
0x85, 0x8d, 0x4f, 0x8e, 0x8f, 0x6c, 0xd3, 0xd2, 0xd2, 0xb8, 0x48, 0xcc, 0x02, 0x64, 0x59, 0x34,
|
||||||
|
0x31, 0x38, 0x38, 0xb8, 0x85, 0xe6, 0x16, 0x79, 0x7a, 0x7a, 0xb2, 0x03, 0xe9, 0x3d, 0xa4, 0xf8,
|
||||||
|
0x8a, 0x5c, 0x1f, 0x4d, 0x02, 0xfa, 0x68, 0x02, 0x3d, 0x82, 0xce, 0x33, 0x34, 0x34, 0x94, 0x99,
|
||||||
|
0xe6, 0x16, 0xd1, 0x33, 0xd5, 0xd1, 0x3e, 0x1f, 0x21, 0x5b, 0x88, 0xaf, 0x24, 0xa0, 0xb8, 0x64,
|
||||||
|
0xc0, 0xe6, 0x33, 0xb2, 0xcb, 0x3a, 0x5a, 0x62, 0x00, 0x66, 0x05, 0x94, 0x24, 0x1f, 0x97, 0xfe,
|
||||||
|
0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_module_xpm[1] = {{ png, sizeof( png ), "duplicate_module_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,50 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0x12, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0x54, 0x4d, 0x48, 0x54,
|
||||||
|
0x51, 0x18, 0x3d, 0xef, 0x4e, 0xf8, 0x83, 0x0c, 0x31, 0x9a, 0x1b, 0x45, 0x66, 0xd1, 0x6a, 0x60,
|
||||||
|
0xda, 0xb6, 0x69, 0xe1, 0xaa, 0x89, 0x36, 0x41, 0x20, 0x41, 0xab, 0x20, 0xc6, 0xa5, 0xd0, 0xc2,
|
||||||
|
0xad, 0x36, 0x69, 0x30, 0xd0, 0x66, 0x08, 0x5d, 0xd8, 0x22, 0x06, 0x52, 0xf3, 0xe9, 0x4a, 0x26,
|
||||||
|
0xa9, 0x45, 0x42, 0x09, 0xea, 0xea, 0x6d, 0x24, 0x10, 0x8d, 0x76, 0x12, 0x21, 0x44, 0x8c, 0xe2,
|
||||||
|
0x28, 0xa2, 0xf5, 0x3a, 0xdf, 0x7d, 0xdf, 0x44, 0x0c, 0x09, 0xce, 0xcc, 0xf3, 0x41, 0x8b, 0xc3,
|
||||||
|
0x7d, 0xef, 0xfb, 0xee, 0x3d, 0xe7, 0x9e, 0xef, 0xbb, 0xf7, 0xc2, 0xf7, 0x7d, 0x44, 0x81, 0x9a,
|
||||||
|
0x1f, 0x38, 0xc8, 0x21, 0x8b, 0x27, 0xf8, 0xc8, 0xb1, 0x6c, 0x11, 0x7c, 0x67, 0x25, 0x17, 0x8a,
|
||||||
|
0x10, 0xc9, 0x7a, 0x88, 0x35, 0x62, 0x87, 0xf0, 0x88, 0x65, 0x85, 0xa7, 0x31, 0xc9, 0xf5, 0x34,
|
||||||
|
0x25, 0xa4, 0x4e, 0x84, 0x68, 0x8b, 0x28, 0x9d, 0x81, 0x2d, 0x3b, 0xa7, 0x41, 0x67, 0x55, 0x37,
|
||||||
|
0x59, 0xdd, 0x75, 0x09, 0x8f, 0xf1, 0x86, 0xe3, 0x06, 0xb1, 0xab, 0xd8, 0xd0, 0x98, 0x88, 0xed,
|
||||||
|
0xc4, 0x46, 0x31, 0xf8, 0x0a, 0x48, 0xb9, 0xc0, 0xd5, 0x05, 0xe0, 0x72, 0x7d, 0x42, 0x41, 0x1f,
|
||||||
|
0x3c, 0x25, 0x13, 0x91, 0x4f, 0x18, 0x43, 0xbf, 0x85, 0x7c, 0x33, 0x96, 0x18, 0xc6, 0xbb, 0xfb,
|
||||||
|
0x37, 0x9c, 0xaf, 0x2f, 0x3b, 0xcc, 0xf1, 0x0c, 0x97, 0xb9, 0xc6, 0x1c, 0xbd, 0x76, 0x9c, 0xc3,
|
||||||
|
0x69, 0xe0, 0x4e, 0x3d, 0x8e, 0xca, 0xda, 0x8f, 0x92, 0x75, 0x41, 0x81, 0x3f, 0x13, 0x02, 0xb1,
|
||||||
|
0xdd, 0xf4, 0x03, 0xac, 0x3c, 0xef, 0x32, 0x07, 0xe3, 0x49, 0x73, 0xb2, 0x10, 0x8b, 0xad, 0xce,
|
||||||
|
0x39, 0xce, 0xd1, 0x6a, 0x22, 0xf1, 0x6b, 0xde, 0x98, 0x43, 0x0a, 0x0f, 0x84, 0x26, 0xa4, 0x39,
|
||||||
|
0x99, 0x53, 0x96, 0x38, 0xc9, 0xaf, 0xd1, 0x55, 0x65, 0xb3, 0xb7, 0x57, 0xdc, 0x7d, 0xfb, 0x00,
|
||||||
|
0x5c, 0x0a, 0xa5, 0x74, 0x9a, 0xf3, 0x64, 0x6e, 0x75, 0x31, 0x05, 0x8a, 0x5e, 0x77, 0xf7, 0xcf,
|
||||||
|
0xa5, 0xf6, 0xf6, 0x03, 0x0a, 0x0f, 0xb1, 0x8c, 0xf7, 0x38, 0xde, 0x0d, 0xe5, 0x30, 0xc8, 0xdc,
|
||||||
|
0xea, 0x62, 0x92, 0x3e, 0x5c, 0x6c, 0x69, 0xd9, 0xfb, 0x92, 0x4c, 0xfa, 0xec, 0xd7, 0xa9, 0xf4,
|
||||||
|
0x6e, 0x16, 0xb8, 0x1e, 0xda, 0xf1, 0x7e, 0x0b, 0xb4, 0x92, 0x74, 0x49, 0x88, 0x97, 0xe3, 0xf1,
|
||||||
|
0xe3, 0x1f, 0xa9, 0x94, 0xbf, 0xdd, 0xd7, 0x27, 0x25, 0xfc, 0x1c, 0xfa, 0x85, 0x2d, 0x02, 0x6d,
|
||||||
|
0x24, 0x7e, 0xc1, 0x83, 0x51, 0x11, 0x47, 0xef, 0xe3, 0xf1, 0x7d, 0x0a, 0x0f, 0x5e, 0xd8, 0x13,
|
||||||
|
0xc4, 0xbe, 0xdc, 0x9c, 0x33, 0xe6, 0xfb, 0xac, 0xe3, 0x54, 0x78, 0xbf, 0x3a, 0xce, 0x25, 0x54,
|
||||||
|
0xff, 0x6d, 0xb7, 0x1b, 0xcb, 0x5c, 0x79, 0x84, 0xc2, 0xed, 0x5b, 0x58, 0xe7, 0xb7, 0x4b, 0xe4,
|
||||||
|
0x25, 0x56, 0xbb, 0xb1, 0xc6, 0x45, 0x72, 0xe8, 0x24, 0x9e, 0x11, 0x45, 0xa2, 0x40, 0x3c, 0x55,
|
||||||
|
0x14, 0x34, 0x26, 0xb9, 0xce, 0xa6, 0x84, 0xd4, 0x89, 0x10, 0x4d, 0x61, 0x14, 0x23, 0xff, 0x84,
|
||||||
|
0xe4, 0x64, 0x8e, 0x3a, 0x6b, 0xd4, 0x4d, 0xc6, 0xee, 0x5a, 0x08, 0x85, 0x36, 0x87, 0x09, 0x62,
|
||||||
|
0x46, 0x31, 0x61, 0x63, 0x81, 0x98, 0x38, 0xcb, 0x34, 0x23, 0x94, 0xb7, 0x25, 0x0a, 0xc8, 0x44,
|
||||||
|
0x64, 0x92, 0x48, 0x2b, 0x26, 0x6d, 0x2c, 0xc8, 0x49, 0x19, 0xf3, 0xcd, 0x08, 0xb9, 0xb6, 0x1f,
|
||||||
|
0x01, 0x99, 0xb8, 0x48, 0xff, 0x95, 0x4b, 0xdb, 0x58, 0x90, 0x93, 0x9e, 0xb9, 0xff, 0x85, 0x50,
|
||||||
|
0x64, 0xa5, 0x8b, 0xe8, 0x30, 0x44, 0x75, 0xbc, 0x23, 0xbb, 0xb0, 0xb5, 0x4f, 0x90, 0xf6, 0xcc,
|
||||||
|
0xbd, 0x90, 0x27, 0xa8, 0x5e, 0xfc, 0x06, 0x78, 0x64, 0xb7, 0x0e, 0x00, 0x4c, 0xaa, 0xda, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_pad_xpm[1] = {{ png, sizeof( png ), "duplicate_pad_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,63 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0xda, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0xcf, 0x6b, 0x13,
|
||||||
|
0x41, 0x14, 0xc7, 0x67, 0x7f, 0x25, 0xdd, 0x4d, 0xb6, 0x69, 0x24, 0xd5, 0x26, 0xa5, 0x49, 0x0f,
|
||||||
|
0x1e, 0x5a, 0xd3, 0x58, 0xb0, 0x6c, 0x4c, 0xb0, 0xea, 0x41, 0xf4, 0xe0, 0xc1, 0xbf, 0xa1, 0x67,
|
||||||
|
0xa9, 0xe0, 0xdd, 0x8b, 0xb7, 0xde, 0xd4, 0x53, 0xd1, 0x83, 0x0a, 0xd6, 0xa6, 0x4d, 0x0a, 0x8a,
|
||||||
|
0x8d, 0x22, 0x28, 0xed, 0x1e, 0x7a, 0xb3, 0x37, 0x29, 0x6a, 0x8d, 0x0a, 0x7a, 0xb2, 0x50, 0x91,
|
||||||
|
0x16, 0x63, 0x62, 0x5b, 0x3b, 0xbe, 0xef, 0x92, 0x85, 0x6d, 0xd8, 0xfc, 0x16, 0x71, 0xe0, 0xb1,
|
||||||
|
0xd9, 0x99, 0x65, 0x3e, 0xf3, 0xfd, 0xbe, 0xf7, 0x86, 0x30, 0xce, 0x39, 0xfb, 0x17, 0x51, 0x7f,
|
||||||
|
0xd1, 0x5a, 0x76, 0x5f, 0x9b, 0x61, 0xec, 0x68, 0x86, 0xb1, 0xb3, 0xf4, 0x1c, 0xcd, 0x31, 0xa6,
|
||||||
|
0xfe, 0x75, 0xd0, 0x2c, 0x63, 0x17, 0xb3, 0x92, 0xf4, 0xea, 0x21, 0xad, 0xd1, 0xef, 0xfd, 0x05,
|
||||||
|
0x59, 0x2e, 0xce, 0x8b, 0xe2, 0x3b, 0x02, 0x86, 0x5b, 0x02, 0xd1, 0xd0, 0x75, 0x1f, 0xbb, 0x11,
|
||||||
|
0xea, 0x51, 0x3e, 0x02, 0xd4, 0x7b, 0x48, 0x59, 0xc7, 0x3b, 0xe6, 0xb1, 0x3e, 0x2f, 0xcb, 0x53,
|
||||||
|
0x39, 0x49, 0x7a, 0x4a, 0x9b, 0xdf, 0xce, 0x8a, 0xe2, 0xeb, 0x9c, 0x2c, 0x97, 0x56, 0x82, 0xc1,
|
||||||
|
0xdd, 0x8c, 0x20, 0x6c, 0xdc, 0xad, 0x7c, 0xd3, 0x10, 0x44, 0xc3, 0x50, 0xbb, 0x84, 0xcd, 0xb1,
|
||||||
|
0xd1, 0xbe, 0xbd, 0x74, 0x2a, 0x89, 0x09, 0xbe, 0x9a, 0x3f, 0xc3, 0xaf, 0x4c, 0x0c, 0x94, 0x35,
|
||||||
|
0x55, 0xd8, 0xc0, 0x7a, 0xf5, 0x06, 0x04, 0x9c, 0x5e, 0x0e, 0x04, 0x8a, 0x2f, 0xfd, 0xfe, 0x62,
|
||||||
|
0x46, 0x14, 0xaf, 0x35, 0x04, 0xe1, 0xc4, 0x5d, 0x1e, 0xe1, 0x5b, 0x2a, 0x39, 0xc2, 0x13, 0x89,
|
||||||
|
0x04, 0x1f, 0x1f, 0x3f, 0x65, 0x81, 0xca, 0x85, 0x0b, 0xfc, 0xd7, 0x7a, 0x9a, 0xe7, 0xef, 0x8d,
|
||||||
|
0xf1, 0x0a, 0xec, 0xc0, 0xa9, 0xc9, 0xc2, 0x6e, 0x52, 0x53, 0xfa, 0x34, 0x38, 0xc8, 0xe7, 0x44,
|
||||||
|
0x71, 0x0b, 0xd6, 0xd2, 0xdc, 0xcd, 0xfb, 0x8c, 0xf5, 0xb8, 0x82, 0x60, 0x4f, 0x2c, 0x7a, 0x64,
|
||||||
|
0x1f, 0x10, 0x00, 0x9c, 0xa0, 0xbd, 0xb5, 0x80, 0x05, 0x83, 0x32, 0x7c, 0x57, 0x55, 0x14, 0xe1,
|
||||||
|
0x39, 0x41, 0x78, 0xb3, 0x16, 0x89, 0xf0, 0x25, 0x5d, 0xff, 0x49, 0x0a, 0x77, 0x28, 0x87, 0x2b,
|
||||||
|
0x35, 0x15, 0x05, 0x03, 0xca, 0xe7, 0x64, 0x32, 0x69, 0x01, 0xec, 0xb0, 0x41, 0x76, 0xc0, 0x46,
|
||||||
|
0xe4, 0xcc, 0xa1, 0xe6, 0x1c, 0x29, 0x28, 0x2d, 0x48, 0xd2, 0xee, 0x87, 0x58, 0x8c, 0x7f, 0x1f,
|
||||||
|
0x1e, 0xe6, 0x8b, 0x5e, 0xef, 0x36, 0xc1, 0x2f, 0xb9, 0xe4, 0x9e, 0xf1, 0x76, 0xa3, 0x02, 0x3b,
|
||||||
|
0x46, 0x96, 0xbd, 0x7d, 0xae, 0x69, 0x3f, 0x0a, 0xd1, 0x28, 0xec, 0xdb, 0xa4, 0x72, 0x97, 0x6a,
|
||||||
|
0x2a, 0xc2, 0x49, 0x71, 0x62, 0xa7, 0x02, 0xdb, 0x42, 0x3b, 0xa0, 0x58, 0xf7, 0xc9, 0x5f, 0xab,
|
||||||
|
0x37, 0xb9, 0xc3, 0x98, 0x42, 0x85, 0x30, 0x45, 0xd0, 0xdf, 0xb3, 0xa2, 0x78, 0xbd, 0x6e, 0x31,
|
||||||
|
0xc0, 0x7b, 0xe4, 0x00, 0xb9, 0x40, 0x4e, 0x9c, 0x20, 0x3c, 0x91, 0xbb, 0xfe, 0xc8, 0x61, 0xae,
|
||||||
|
0x69, 0x6c, 0xda, 0xc5, 0x16, 0x13, 0xcf, 0x07, 0x8c, 0x9d, 0xac, 0xd5, 0x4f, 0x07, 0xaa, 0x0e,
|
||||||
|
0x55, 0x85, 0xea, 0x02, 0xcc, 0x09, 0x02, 0x24, 0x1e, 0x8f, 0x73, 0x45, 0x11, 0xb6, 0x99, 0x4b,
|
||||||
|
0xaf, 0xd8, 0xa0, 0xa6, 0x1b, 0x16, 0x7d, 0x02, 0x18, 0x94, 0xc1, 0x46, 0x80, 0x60, 0x17, 0x94,
|
||||||
|
0x78, 0x14, 0x61, 0xcb, 0xd9, 0x47, 0x34, 0x34, 0xbf, 0xc6, 0x2e, 0x87, 0x02, 0x4a, 0x06, 0xa0,
|
||||||
|
0x50, 0x50, 0x99, 0xc1, 0x3b, 0xe6, 0x5b, 0xba, 0x19, 0x90, 0x33, 0x80, 0x82, 0xdd, 0xca, 0x17,
|
||||||
|
0xbf, 0x8f, 0xdd, 0x72, 0x2a, 0xa1, 0x31, 0xa4, 0x7a, 0x85, 0x27, 0x27, 0x8e, 0xf7, 0x2d, 0xa5,
|
||||||
|
0x53, 0x86, 0x09, 0xd0, 0x6a, 0xfe, 0xb4, 0x39, 0x39, 0x31, 0xf0, 0x82, 0x0e, 0xfa, 0x18, 0xeb,
|
||||||
|
0x1d, 0xdf, 0x75, 0x38, 0xb1, 0xd7, 0x23, 0x2c, 0xa6, 0x8c, 0x11, 0x93, 0x2c, 0x35, 0xc9, 0x5a,
|
||||||
|
0x0b, 0x54, 0x2e, 0x9c, 0x37, 0x77, 0xde, 0xa7, 0x4d, 0xb2, 0xde, 0xac, 0xc0, 0xb4, 0x8e, 0x40,
|
||||||
|
0xb0, 0x87, 0x1a, 0x7b, 0x19, 0x10, 0x00, 0x9c, 0x20, 0x2a, 0x22, 0x0b, 0x06, 0x65, 0xf8, 0xae,
|
||||||
|
0x69, 0x90, 0x5b, 0x50, 0x63, 0x67, 0x0d, 0xc3, 0xb0, 0x00, 0x76, 0xd8, 0x20, 0x3b, 0x60, 0x23,
|
||||||
|
0x72, 0xd6, 0x16, 0x08, 0x9b, 0xb5, 0x1b, 0x6d, 0x29, 0xc2, 0x49, 0x71, 0x62, 0xa7, 0x02, 0xdb,
|
||||||
|
0x42, 0x3b, 0xa0, 0x58, 0xd7, 0xe4, 0x47, 0x1d, 0x59, 0x07, 0xef, 0x91, 0x03, 0xe4, 0x02, 0x39,
|
||||||
|
0x71, 0x82, 0xf0, 0x44, 0xee, 0xfa, 0xc3, 0xbd, 0xa6, 0xaa, 0xb2, 0xab, 0x1d, 0x81, 0x50, 0x4d,
|
||||||
|
0xa8, 0x2a, 0x54, 0x17, 0x60, 0x4e, 0x10, 0x20, 0xd4, 0xd8, 0xa6, 0xc7, 0x23, 0x3c, 0x6b, 0xa9,
|
||||||
|
0xea, 0xea, 0xc0, 0x86, 0x00, 0x83, 0x32, 0xd8, 0x08, 0x10, 0xec, 0x82, 0x92, 0x0a, 0xa4, 0xb5,
|
||||||
|
0x3e, 0x6a, 0xa4, 0xcc, 0xba, 0x19, 0x28, 0x67, 0x00, 0x51, 0x63, 0x67, 0xfd, 0x2a, 0x9b, 0x6c,
|
||||||
|
0xfa, 0x66, 0x68, 0x13, 0x6a, 0x76, 0xf4, 0x2f, 0xe8, 0xbf, 0x03, 0x35, 0x13, 0x7f, 0x00, 0x00,
|
||||||
|
0x4f, 0xfc, 0x7e, 0x5d, 0x89, 0x9f, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||||
|
0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_target_xpm[1] = {{ png, sizeof( png ), "duplicate_target_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x01, 0x6e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||||
|
0x03, 0x3d, 0x30, 0x84, 0x60, 0x98, 0xfd, 0x9f, 0x54, 0xbc, 0x98, 0x81, 0x41, 0x65, 0x19, 0x03,
|
||||||
|
0x83, 0x3d, 0x90, 0xd6, 0x5f, 0xc5, 0xc0, 0xc0, 0x49, 0x75, 0x8b, 0x0c, 0x18, 0xf2, 0xfe, 0xb7,
|
||||||
|
0x31, 0x29, 0xfd, 0x5f, 0x02, 0xd4, 0xba, 0x94, 0x81, 0xe1, 0xdf, 0x6a, 0x16, 0x96, 0xaf, 0x2b,
|
||||||
|
0x98, 0x98, 0x6e, 0x00, 0x2d, 0x94, 0x24, 0xc5, 0xa2, 0x06, 0xb8, 0x04, 0x92, 0xe1, 0x48, 0x62,
|
||||||
|
0x0d, 0x91, 0x4c, 0x5e, 0xff, 0x2b, 0x98, 0x0c, 0xfe, 0x03, 0x0d, 0x9f, 0xb1, 0x92, 0x89, 0xe9,
|
||||||
|
0xd2, 0x2a, 0x16, 0x96, 0xef, 0x87, 0x05, 0x05, 0x7f, 0x2f, 0x63, 0x64, 0x7c, 0x39, 0x97, 0x81,
|
||||||
|
0x81, 0x97, 0x18, 0x8b, 0x1a, 0x50, 0x24, 0xb0, 0x58, 0x04, 0xb3, 0x0c, 0x59, 0x0c, 0x68, 0xe1,
|
||||||
|
0xb4, 0x7d, 0xfc, 0xfc, 0x5f, 0x77, 0xf3, 0xf0, 0x7c, 0x5d, 0xc6, 0xc4, 0x54, 0x8d, 0xd7, 0x22,
|
||||||
|
0xac, 0x12, 0x38, 0x2c, 0x42, 0xc7, 0xc0, 0x20, 0xe4, 0x03, 0xfa, 0xe6, 0xfb, 0x3d, 0x05, 0x85,
|
||||||
|
0xff, 0xcb, 0x99, 0x98, 0x3e, 0x02, 0x83, 0xd3, 0x0b, 0x28, 0xd6, 0x3f, 0x9f, 0x81, 0x41, 0x80,
|
||||||
|
0xaa, 0x16, 0x81, 0xe2, 0x66, 0x39, 0x23, 0xe3, 0xb5, 0x2b, 0x52, 0x52, 0xff, 0xf7, 0xf2, 0xf2,
|
||||||
|
0x7e, 0x03, 0xfa, 0xf0, 0xd7, 0x4a, 0x66, 0xe6, 0xc3, 0x54, 0xf5, 0x11, 0xd0, 0xe5, 0xce, 0x40,
|
||||||
|
0x1f, 0x7c, 0x5f, 0xcd, 0xcc, 0xfc, 0xfb, 0x8e, 0xbc, 0xfc, 0xff, 0xf7, 0x9a, 0x9a, 0xff, 0x37,
|
||||||
|
0xb1, 0xb3, 0x7f, 0x02, 0x5a, 0xee, 0x47, 0x8b, 0xa0, 0xd3, 0x02, 0x06, 0xd9, 0xf5, 0xed, 0x5c,
|
||||||
|
0x5c, 0x5f, 0x6e, 0xcb, 0xc9, 0x81, 0x82, 0xef, 0x0d, 0x30, 0xb9, 0x33, 0x53, 0xdd, 0x22, 0x10,
|
||||||
|
0x9e, 0xc9, 0xc0, 0xc0, 0x0a, 0x4c, 0x08, 0xed, 0x40, 0x4b, 0xff, 0x2e, 0x65, 0x62, 0x6a, 0xa0,
|
||||||
|
0x49, 0x62, 0x40, 0xc6, 0x8b, 0x18, 0x18, 0xcc, 0x71, 0xe5, 0x27, 0x92, 0x2d, 0x02, 0xf2, 0x37,
|
||||||
|
0x93, 0x8a, 0x07, 0xd6, 0x22, 0xa0, 0x84, 0x03, 0x10, 0x1f, 0x40, 0x2b, 0x7a, 0x40, 0x7c, 0x07,
|
||||||
|
0x54, 0x8b, 0xe6, 0x44, 0x61, 0xb3, 0x1c, 0x21, 0x36, 0x27, 0x8a, 0x90, 0x45, 0x38, 0xcb, 0x39,
|
||||||
|
0x84, 0xa1, 0x08, 0x4b, 0x70, 0x59, 0x84, 0x6c, 0x19, 0xde, 0xa0, 0x23, 0xa9, 0x0a, 0xc0, 0x61,
|
||||||
|
0x11, 0x51, 0x89, 0x61, 0xd4, 0xa2, 0x51, 0x8b, 0x46, 0xb8, 0x45, 0x0c, 0x0c, 0x33, 0x75, 0x81,
|
||||||
|
0x86, 0xb7, 0xa3, 0x15, 0x39, 0xed, 0x20, 0x71, 0x2a, 0x5b, 0x84, 0xbf, 0x7c, 0xa3, 0x7a, 0xd0,
|
||||||
|
0x11, 0x83, 0x01, 0xfa, 0xc4, 0x94, 0x7d, 0x09, 0xb7, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||||
|
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_text_xpm[1] = {{ png, sizeof( png ), "duplicate_text_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,63 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0xde, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x94, 0x5d, 0x48, 0x14,
|
||||||
|
0x51, 0x14, 0xc7, 0xcf, 0xce, 0x8c, 0x48, 0xe2, 0x47, 0x42, 0x09, 0xfa, 0xa0, 0x46, 0xbd, 0xd8,
|
||||||
|
0x4b, 0xbd, 0x05, 0x51, 0x46, 0x4a, 0x06, 0x3e, 0x54, 0x2f, 0x41, 0x21, 0x14, 0xf4, 0x18, 0x61,
|
||||||
|
0x3e, 0x04, 0x69, 0x5f, 0xde, 0xd5, 0x9d, 0x9d, 0x3b, 0xe3, 0x6a, 0x48, 0x91, 0x59, 0x44, 0xe5,
|
||||||
|
0xc7, 0x6e, 0x7e, 0xa4, 0x68, 0x45, 0xa5, 0xe8, 0x3e, 0xf8, 0x16, 0xf4, 0x60, 0x49, 0x09, 0x9a,
|
||||||
|
0x0f, 0x11, 0x84, 0x21, 0x6a, 0xe2, 0x2a, 0x69, 0xeb, 0xed, 0x3f, 0xeb, 0x20, 0xeb, 0x92, 0xb9,
|
||||||
|
0xee, 0x68, 0x0f, 0xff, 0x39, 0x73, 0xef, 0x3d, 0x73, 0x7f, 0x73, 0xce, 0x3d, 0xf7, 0x90, 0x10,
|
||||||
|
0x82, 0xfe, 0x87, 0x96, 0x1f, 0x4e, 0xfa, 0x4d, 0x8c, 0x44, 0x54, 0x82, 0x6f, 0xec, 0xa0, 0xe5,
|
||||||
|
0x4d, 0x46, 0xb1, 0xc9, 0x18, 0xec, 0x14, 0x14, 0xb0, 0xec, 0xd7, 0xd0, 0xfc, 0x6a, 0x09, 0xbb,
|
||||||
|
0xa0, 0xef, 0x50, 0x10, 0xb0, 0x69, 0xd8, 0xa1, 0x90, 0x75, 0xd2, 0x12, 0xde, 0x7f, 0x58, 0x3f,
|
||||||
|
0xb0, 0x0a, 0xd4, 0x48, 0xb4, 0xc7, 0x4b, 0x74, 0x04, 0x76, 0x5f, 0x2b, 0xd1, 0xb6, 0x8d, 0x80,
|
||||||
|
0x82, 0xd0, 0x1d, 0xb7, 0xc7, 0x7d, 0x8a, 0xeb, 0x6a, 0x8f, 0xae, 0xab, 0x47, 0x31, 0xd6, 0x2c,
|
||||||
|
0x98, 0xb9, 0xbe, 0x44, 0xe5, 0xf4, 0x65, 0x7f, 0x11, 0x89, 0x16, 0x59, 0x7e, 0xd7, 0x84, 0x4f,
|
||||||
|
0x9b, 0x89, 0x96, 0xda, 0x14, 0x25, 0xf0, 0x4c, 0x92, 0x86, 0x01, 0x4c, 0x8f, 0x0e, 0x84, 0x08,
|
||||||
|
0x34, 0x43, 0x3b, 0x5d, 0x55, 0xcd, 0x45, 0x47, 0x67, 0x9b, 0x30, 0x3c, 0x9a, 0xe0, 0x1e, 0x57,
|
||||||
|
0xee, 0x8a, 0x23, 0xa3, 0x19, 0x68, 0xfa, 0x6c, 0xae, 0x24, 0x5a, 0x65, 0xf9, 0x25, 0x36, 0xbf,
|
||||||
|
0xdf, 0x22, 0x49, 0x1f, 0x5a, 0x15, 0x65, 0x7e, 0x20, 0x35, 0x75, 0xd1, 0xeb, 0x70, 0x8c, 0x3f,
|
||||||
|
0x22, 0x4a, 0x8a, 0x26, 0xa2, 0x8f, 0xba, 0x47, 0x1b, 0xe8, 0xea, 0xee, 0x14, 0x93, 0x93, 0x13,
|
||||||
|
0xc2, 0xeb, 0x6b, 0x14, 0xdc, 0x50, 0x57, 0xb4, 0x93, 0xed, 0x78, 0x08, 0x9f, 0xc5, 0xc8, 0x33,
|
||||||
|
0x02, 0xf0, 0x5e, 0x7f, 0x4a, 0x4a, 0xa0, 0x37, 0x31, 0x31, 0xe0, 0x95, 0xa4, 0xeb, 0x31, 0x47,
|
||||||
|
0x84, 0xb5, 0x64, 0xa4, 0x72, 0xc4, 0x65, 0x54, 0xf8, 0xad, 0xf4, 0xae, 0x02, 0x21, 0x85, 0xc9,
|
||||||
|
0x88, 0x66, 0x7e, 0x2c, 0x3b, 0x5b, 0xf8, 0x24, 0xe9, 0x27, 0xd2, 0x59, 0x88, 0xb9, 0xdb, 0x8f,
|
||||||
|
0x89, 0xb6, 0x6f, 0xe4, 0x8c, 0x5e, 0x99, 0x6b, 0x05, 0x6a, 0x9e, 0x0b, 0x51, 0x05, 0x15, 0xa6,
|
||||||
|
0xf4, 0x45, 0x82, 0xcc, 0xb3, 0xf1, 0x39, 0x1c, 0x9f, 0x86, 0x32, 0x32, 0x44, 0x5f, 0x52, 0xd2,
|
||||||
|
0x1c, 0x22, 0x5c, 0xc0, 0x19, 0x0e, 0xac, 0x5f, 0x75, 0x2c, 0x54, 0x75, 0x83, 0xd0, 0x2f, 0x6b,
|
||||||
|
0x6c, 0xda, 0x41, 0x80, 0x26, 0x2f, 0xf3, 0x4b, 0x3e, 0x44, 0x3e, 0x1c, 0x16, 0x4d, 0x3e, 0x22,
|
||||||
|
0x98, 0x6f, 0x93, 0xe5, 0xc5, 0xd1, 0xac, 0x2c, 0x31, 0x95, 0x93, 0x23, 0xba, 0xe3, 0xe3, 0x67,
|
||||||
|
0x00, 0x3f, 0x11, 0xed, 0x3d, 0x9a, 0x85, 0xc6, 0xad, 0x72, 0xfe, 0x66, 0x56, 0xde, 0x0d, 0xbd,
|
||||||
|
0xd4, 0x00, 0x6c, 0x2e, 0x72, 0x03, 0xc0, 0xf6, 0x22, 0x65, 0x9f, 0x5f, 0x27, 0x24, 0xcc, 0x8e,
|
||||||
|
0x64, 0x66, 0x9a, 0xe9, 0x9b, 0x40, 0xb9, 0xcb, 0xff, 0x06, 0xad, 0xad, 0x05, 0x89, 0x49, 0x4f,
|
||||||
|
0x34, 0x43, 0xad, 0x63, 0x8c, 0x29, 0x91, 0x9b, 0xd4, 0x13, 0xc5, 0xa1, 0x10, 0x34, 0x40, 0x83,
|
||||||
|
0xcd, 0x92, 0xc4, 0xec, 0xb6, 0xa0, 0xf7, 0xeb, 0x5d, 0xca, 0x06, 0xa2, 0x03, 0x6b, 0xdd, 0xa7,
|
||||||
|
0xd8, 0x1a, 0x24, 0xa3, 0x76, 0xc8, 0x1f, 0xa5, 0xda, 0xed, 0x80, 0xcc, 0x0d, 0x4a, 0xa1, 0x6b,
|
||||||
|
0x50, 0x0d, 0x3a, 0x46, 0x7d, 0xc8, 0x32, 0xba, 0x65, 0xcd, 0x87, 0xcb, 0x6f, 0x0f, 0x54, 0x4e,
|
||||||
|
0x2a, 0x6c, 0x27, 0x54, 0x0b, 0x95, 0x58, 0xd6, 0xbc, 0x0e, 0x3c, 0xf4, 0x03, 0x4e, 0x2a, 0xdb,
|
||||||
|
0x1c, 0x90, 0x09, 0x71, 0x52, 0x7e, 0x65, 0x55, 0xe5, 0x2e, 0x5d, 0xd7, 0x8a, 0x74, 0x9d, 0x65,
|
||||||
|
0x60, 0xee, 0x90, 0x05, 0xeb, 0x85, 0xba, 0x2d, 0x98, 0x6d, 0x50, 0xad, 0x61, 0x18, 0xbb, 0x8d,
|
||||||
|
0x6a, 0xde, 0x83, 0x4e, 0xf2, 0x56, 0xf7, 0xb8, 0x7b, 0x54, 0x55, 0x4d, 0x0f, 0xf3, 0xb9, 0x6b,
|
||||||
|
0x45, 0x69, 0x1b, 0x54, 0x62, 0x54, 0x6b, 0x17, 0xba, 0x5e, 0x74, 0xf4, 0xa3, 0x37, 0xfa, 0xd1,
|
||||||
|
0x1b, 0xfd, 0xdc, 0x70, 0x2f, 0xab, 0x4a, 0x7d, 0x93, 0xe6, 0x4c, 0x3b, 0x0e, 0x9f, 0x96, 0x2d,
|
||||||
|
0x8b, 0x08, 0x65, 0x11, 0x87, 0xf6, 0x75, 0xd5, 0xe5, 0x71, 0x9e, 0x87, 0xcf, 0xf3, 0xad, 0x3a,
|
||||||
|
0xa3, 0x33, 0x50, 0x7f, 0x01, 0xcf, 0x3b, 0x88, 0x2e, 0xd2, 0x2e, 0x33, 0xf9, 0xdc, 0x66, 0x57,
|
||||||
|
0x5d, 0x31, 0xf4, 0xd4, 0x82, 0x37, 0x98, 0x63, 0xce, 0xd5, 0x9a, 0x62, 0x5e, 0x7c, 0x12, 0xef,
|
||||||
|
0x57, 0x36, 0xef, 0x1e, 0x31, 0xaa, 0x0b, 0x95, 0xb5, 0x59, 0x65, 0xe5, 0x78, 0xa2, 0xf2, 0x6e,
|
||||||
|
0x1a, 0x65, 0x87, 0xb9, 0xee, 0x7a, 0x60, 0xb7, 0x33, 0xf8, 0xff, 0x72, 0x31, 0xc3, 0xd5, 0x84,
|
||||||
|
0xb4, 0x15, 0xe2, 0xac, 0x8e, 0xc1, 0xdf, 0xb1, 0xb5, 0x2d, 0xa8, 0x82, 0x2e, 0xda, 0xee, 0x75,
|
||||||
|
0xb1, 0xe8, 0x0f, 0xc0, 0x74, 0xed, 0xb7, 0x43, 0x22, 0xa0, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||||
|
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE duplicate_zone_xpm[1] = {{ png, sizeof( png ), "duplicate_zone_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,67 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x03, 0x21, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x94, 0x4b, 0x4c, 0x13,
|
||||||
|
0x51, 0x14, 0x86, 0x6f, 0xdb, 0x81, 0x96, 0xb6, 0xd8, 0x97, 0x7d, 0x4c, 0xa7, 0x9d, 0x3e, 0x10,
|
||||||
|
0x6c, 0x30, 0x02, 0x0b, 0x7c, 0xe0, 0x13, 0xad, 0xb4, 0x18, 0x4c, 0x04, 0x12, 0xa5, 0xc4, 0x85,
|
||||||
|
0x21, 0xb8, 0x75, 0x67, 0x5c, 0xb0, 0x76, 0x6f, 0x5c, 0xf9, 0x88, 0x89, 0xc1, 0x40, 0x81, 0xc6,
|
||||||
|
0x40, 0x14, 0x62, 0x5c, 0x01, 0x01, 0x0c, 0x0b, 0x13, 0x62, 0x10, 0x0d, 0x89, 0xdd, 0xb8, 0x37,
|
||||||
|
0x90, 0xa0, 0x96, 0x87, 0x8d, 0xc7, 0xfb, 0x8f, 0x14, 0x8b, 0xb1, 0xb1, 0xa5, 0xc8, 0x24, 0x7f,
|
||||||
|
0x32, 0x3d, 0x9d, 0x3b, 0xdf, 0x3d, 0xe7, 0xff, 0xef, 0x30, 0x22, 0x62, 0x7b, 0xa1, 0x7f, 0x3f,
|
||||||
|
0xc0, 0xd8, 0x65, 0xae, 0xe1, 0xbd, 0x00, 0xc5, 0xb8, 0x26, 0xff, 0x1b, 0x88, 0x5f, 0x36, 0xae,
|
||||||
|
0xae, 0x12, 0x81, 0x4d, 0x6b, 0xd4, 0x6c, 0x99, 0xdf, 0xf7, 0x70, 0xd5, 0xef, 0x2a, 0x88, 0x5f,
|
||||||
|
0x4d, 0xda, 0x12, 0xb6, 0xec, 0xf7, 0x6a, 0x37, 0x24, 0xc9, 0x41, 0x55, 0x41, 0x03, 0xdd, 0x88,
|
||||||
|
0xb9, 0xd6, 0xcb, 0x74, 0xaa, 0x35, 0x5e, 0xbf, 0xc7, 0xff, 0xd7, 0x16, 0x0d, 0x02, 0x44, 0xa7,
|
||||||
|
0x55, 0xaf, 0x57, 0x04, 0x25, 0xf2, 0xf9, 0x7c, 0x14, 0x0c, 0x06, 0xe8, 0x5c, 0x83, 0x95, 0x36,
|
||||||
|
0x16, 0x6b, 0xe8, 0xd3, 0x4c, 0x2d, 0x9d, 0x39, 0x66, 0x4a, 0xe9, 0x75, 0xec, 0x55, 0x51, 0x20,
|
||||||
|
0x8c, 0xab, 0x54, 0x60, 0x2b, 0x07, 0x2a, 0x7c, 0x64, 0x30, 0xe8, 0x51, 0x20, 0xbf, 0xdf, 0x4f,
|
||||||
|
0xe1, 0x13, 0x56, 0xfa, 0xfe, 0xc1, 0x47, 0xe9, 0x05, 0x33, 0x2d, 0xcd, 0xd5, 0x92, 0x68, 0x17,
|
||||||
|
0x56, 0x35, 0x1a, 0xd6, 0x5d, 0x0c, 0xa8, 0xcb, 0x69, 0xd7, 0xa5, 0x65, 0xd9, 0xab, 0x40, 0xb6,
|
||||||
|
0x40, 0x27, 0x33, 0x20, 0x13, 0xa5, 0xdf, 0x3b, 0x69, 0xe4, 0x41, 0x25, 0xed, 0x33, 0xaa, 0x92,
|
||||||
|
0x05, 0x83, 0x36, 0x23, 0x1c, 0xe3, 0xc6, 0xbf, 0x76, 0xb9, 0xec, 0x14, 0x08, 0x04, 0x14, 0x00,
|
||||||
|
0x24, 0x8a, 0x22, 0x1d, 0x0e, 0x19, 0x69, 0xe4, 0x61, 0x35, 0x07, 0x84, 0x14, 0xf5, 0xdd, 0xad,
|
||||||
|
0x26, 0xb5, 0x5a, 0xf5, 0x83, 0xaf, 0xb9, 0xbe, 0x99, 0x4a, 0x39, 0x5f, 0xd0, 0x30, 0x22, 0x8c,
|
||||||
|
0x74, 0x55, 0x72, 0xe3, 0xcf, 0x1e, 0xb5, 0x6e, 0x29, 0x54, 0x61, 0x24, 0x6d, 0xa9, 0x40, 0xa2,
|
||||||
|
0xcb, 0xfc, 0x5b, 0x4e, 0x33, 0xa9, 0x54, 0x2a, 0x2c, 0x9c, 0xc5, 0x3a, 0xae, 0xf3, 0x85, 0x8e,
|
||||||
|
0xae, 0xa7, 0xbb, 0xc3, 0xb9, 0xbe, 0xb1, 0x58, 0xa7, 0x8c, 0x0a, 0x7a, 0x76, 0xbf, 0x9a, 0x4c,
|
||||||
|
0x26, 0x13, 0x79, 0xbd, 0x5e, 0xb2, 0x58, 0x2c, 0x64, 0xb3, 0x71, 0x78, 0x28, 0x44, 0x82, 0xc0,
|
||||||
|
0x56, 0x8b, 0xf1, 0xa8, 0x1e, 0x11, 0x46, 0xba, 0xd2, 0x0b, 0x16, 0xc5, 0x13, 0x8c, 0xca, 0x6c,
|
||||||
|
0x36, 0x29, 0x10, 0x78, 0x26, 0x49, 0x12, 0x19, 0x8d, 0x7a, 0xd2, 0x6b, 0xd9, 0x48, 0x66, 0x5d,
|
||||||
|
0x34, 0x2e, 0x1f, 0xba, 0x38, 0xe8, 0xbe, 0x59, 0x50, 0xbc, 0x71, 0x4e, 0x4e, 0x1f, 0x31, 0xa4,
|
||||||
|
0x96, 0xe6, 0xea, 0xb8, 0xf1, 0x0e, 0x05, 0xb4, 0xdf, 0x66, 0x22, 0xab, 0xd5, 0x4a, 0x2e, 0x97,
|
||||||
|
0x93, 0x3c, 0x1e, 0x89, 0x04, 0x0d, 0x4b, 0x21, 0xa1, 0x78, 0xbe, 0x39, 0xee, 0xa9, 0x69, 0x19,
|
||||||
|
0x95, 0x92, 0xad, 0xe3, 0xde, 0xcf, 0x91, 0x21, 0xf7, 0xad, 0x42, 0xce, 0x91, 0x16, 0xe7, 0x04,
|
||||||
|
0x11, 0x46, 0xba, 0x60, 0xbc, 0xc3, 0x6e, 0xe2, 0xe3, 0x3a, 0x48, 0xe5, 0xe5, 0x06, 0x8c, 0xec,
|
||||||
|
0x2b, 0x7f, 0xe6, 0x14, 0x9e, 0x6d, 0xea, 0x97, 0xea, 0x5a, 0x46, 0x3d, 0xc9, 0xce, 0x77, 0x01,
|
||||||
|
0xea, 0x5c, 0x08, 0x50, 0xeb, 0x44, 0x6e, 0x58, 0xce, 0x56, 0x71, 0x4e, 0x10, 0x61, 0xa4, 0x0b,
|
||||||
|
0xc6, 0x97, 0x96, 0xb0, 0x2f, 0xc6, 0x32, 0x36, 0x94, 0xe9, 0xa4, 0x31, 0x61, 0x37, 0x46, 0xe2,
|
||||||
|
0xe2, 0xa3, 0xe6, 0x84, 0x38, 0xd9, 0x3e, 0xe3, 0x5b, 0x8b, 0x71, 0x58, 0x74, 0xc8, 0xfd, 0x31,
|
||||||
|
0x3a, 0xe0, 0x7e, 0x1e, 0xee, 0x95, 0xaa, 0x76, 0xf2, 0x51, 0x45, 0x84, 0x67, 0xb3, 0x6b, 0xe8,
|
||||||
|
0x04, 0x10, 0xdc, 0x5f, 0x78, 0xe2, 0x3c, 0xde, 0x36, 0x2d, 0x7f, 0x8b, 0xcd, 0x07, 0xa8, 0x39,
|
||||||
|
0xe1, 0x7e, 0x8c, 0x5a, 0xa4, 0x5f, 0xbc, 0xc6, 0xa1, 0xb7, 0x8b, 0xfa, 0x7a, 0xff, 0xf2, 0xc4,
|
||||||
|
0x93, 0x44, 0x27, 0x80, 0x84, 0x9f, 0x3a, 0xbb, 0x33, 0xa0, 0xc8, 0xa0, 0xeb, 0x05, 0x6a, 0x91,
|
||||||
|
0x3e, 0xf1, 0xce, 0xa5, 0x31, 0x69, 0x25, 0x7b, 0x8c, 0xf9, 0x80, 0xe4, 0xcc, 0x39, 0x41, 0xba,
|
||||||
|
0x60, 0x3c, 0x3c, 0xc1, 0xb8, 0x00, 0x80, 0x3a, 0xe6, 0xfc, 0x8a, 0x47, 0xed, 0x53, 0xf2, 0xaa,
|
||||||
|
0x52, 0x9b, 0x92, 0x53, 0x1d, 0x6f, 0xfd, 0xdb, 0x3c, 0x2b, 0xe8, 0xc3, 0x88, 0x08, 0x23, 0x5d,
|
||||||
|
0x78, 0x29, 0x3c, 0x41, 0x17, 0x10, 0x7e, 0x2b, 0xb5, 0xf9, 0xed, 0xb5, 0xab, 0x6f, 0x7c, 0xe9,
|
||||||
|
0x68, 0x42, 0x7c, 0x59, 0x30, 0x48, 0x99, 0x3f, 0xdf, 0x21, 0x76, 0x0a, 0xe3, 0xe1, 0x09, 0xc6,
|
||||||
|
0x85, 0x4e, 0xf0, 0xf2, 0x68, 0x5c, 0x5c, 0x44, 0x2d, 0x3a, 0x20, 0x4e, 0xb5, 0x4d, 0x7a, 0xd3,
|
||||||
|
0xfc, 0x7e, 0xac, 0x71, 0x82, 0x09, 0x3b, 0x02, 0x65, 0x60, 0x48, 0x57, 0xae, 0x30, 0x44, 0xe3,
|
||||||
|
0xee, 0x2e, 0xbe, 0x91, 0xf1, 0x2b, 0x09, 0xa6, 0xc9, 0xdb, 0xa3, 0x5c, 0x42, 0x84, 0x91, 0x2e,
|
||||||
|
0x18, 0x0f, 0x4f, 0x94, 0x8e, 0x78, 0x27, 0x80, 0x84, 0x7b, 0x1d, 0x0d, 0xd9, 0x90, 0xa2, 0x40,
|
||||||
|
0xca, 0xce, 0x79, 0x84, 0x91, 0x2e, 0x18, 0x0f, 0x4f, 0x30, 0xae, 0x3f, 0x3b, 0xd9, 0x15, 0x50,
|
||||||
|
0xb6, 0x67, 0x30, 0x1e, 0x9e, 0xfc, 0x0d, 0xb2, 0x2b, 0xa0, 0x2d, 0xcf, 0x78, 0xba, 0x32, 0xc6,
|
||||||
|
0xff, 0x37, 0x50, 0x3e, 0xfa, 0x09, 0x65, 0x16, 0x60, 0xbf, 0x0d, 0xb1, 0xac, 0x3b, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE move_target_xpm[1] = {{ png, sizeof( png ), "move_target_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
/* Do not modify this file, it was automatically generated by the
|
||||||
|
* PNG2cpp CMake script, using a *.png file as input.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitmaps.h>
|
||||||
|
|
||||||
|
static const unsigned char png[] = {
|
||||||
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||||
|
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||||
|
0xce, 0x00, 0x00, 0x02, 0xcf, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x95, 0xcb, 0x4f, 0x13,
|
||||||
|
0x51, 0x14, 0xc6, 0x6f, 0xa2, 0x74, 0xd1, 0x44, 0x8c, 0x1b, 0x71, 0xa6, 0x50, 0x68, 0x54, 0x8c,
|
||||||
|
0xb2, 0x70, 0xa1, 0x46, 0xdc, 0x35, 0xa9, 0x76, 0x30, 0x43, 0x42, 0x21, 0xe1, 0x15, 0x56, 0x4d,
|
||||||
|
0x17, 0xd6, 0x08, 0xb2, 0x31, 0x04, 0x31, 0xd8, 0x19, 0xe2, 0x3f, 0x60, 0x7c, 0x2c, 0x94, 0x68,
|
||||||
|
0x6b, 0xa0, 0x85, 0x06, 0x5f, 0x05, 0x4d, 0x11, 0xd3, 0xd6, 0xc2, 0x46, 0x4c, 0x8c, 0x01, 0x8d,
|
||||||
|
0x24, 0xa2, 0xae, 0x74, 0x85, 0x1b, 0x12, 0x10, 0x23, 0xc9, 0xf8, 0x9d, 0xe1, 0x42, 0x0a, 0x42,
|
||||||
|
0xd2, 0x99, 0x41, 0x17, 0xbf, 0xde, 0x3b, 0xa7, 0x33, 0xe7, 0xbb, 0xe7, 0x7c, 0x67, 0x5a, 0xa6,
|
||||||
|
0x69, 0x1a, 0xfb, 0x1f, 0xac, 0x7c, 0x28, 0x4c, 0x64, 0x2a, 0x3b, 0x6f, 0x18, 0x85, 0x05, 0x41,
|
||||||
|
0x61, 0xfe, 0x42, 0x2b, 0x0f, 0x8d, 0x81, 0xc7, 0x06, 0x19, 0x07, 0x6e, 0xa3, 0x42, 0xf4, 0x60,
|
||||||
|
0x78, 0x8d, 0x10, 0x7b, 0x88, 0xb5, 0x6f, 0x5d, 0xec, 0x6f, 0x92, 0x56, 0x84, 0x5e, 0x82, 0x41,
|
||||||
|
0x70, 0x11, 0xdc, 0xe4, 0x95, 0xc6, 0xb7, 0x5b, 0x68, 0xcc, 0xae, 0xda, 0x6b, 0x54, 0x55, 0xf5,
|
||||||
|
0x2b, 0x8a, 0x32, 0x09, 0xee, 0xb6, 0x2a, 0xad, 0xc7, 0x11, 0x1f, 0xe6, 0x07, 0x20, 0xd1, 0x51,
|
||||||
|
0xab, 0x42, 0x94, 0x2c, 0x8c, 0xe4, 0x41, 0xa0, 0x81, 0x79, 0xbe, 0xfe, 0x90, 0x3b, 0xe5, 0x3d,
|
||||||
|
0xac, 0x87, 0x9d, 0xc4, 0xf7, 0x95, 0xb8, 0xb7, 0x1d, 0xeb, 0x33, 0x2b, 0x42, 0xe3, 0x58, 0xeb,
|
||||||
|
0x91, 0x78, 0x06, 0x7c, 0x03, 0xf6, 0x1c, 0xd1, 0xdf, 0x60, 0x09, 0x2c, 0x80, 0x03, 0x5c, 0xc0,
|
||||||
|
0xa4, 0x50, 0x88, 0xa5, 0xb1, 0x9e, 0x43, 0xa2, 0x31, 0xb0, 0x88, 0xf6, 0x9d, 0xc1, 0x7a, 0x8f,
|
||||||
|
0x0b, 0x65, 0xc0, 0x23, 0xbe, 0xbf, 0x85, 0xfb, 0xfc, 0xbc, 0x03, 0xa6, 0x2a, 0x7a, 0x02, 0x12,
|
||||||
|
0x10, 0xf0, 0x20, 0xd9, 0x2f, 0x9e, 0x94, 0x98, 0xb4, 0x75, 0xd8, 0x0e, 0xb3, 0xcb, 0xac, 0x1c,
|
||||||
|
0xfb, 0x09, 0x3a, 0x44, 0x57, 0x57, 0x57, 0x11, 0x9e, 0x49, 0x5a, 0x19, 0x86, 0x04, 0xb8, 0xde,
|
||||||
|
0xae, 0xb4, 0x3b, 0x91, 0xf0, 0x2a, 0xf0, 0x15, 0x74, 0x17, 0x1c, 0x45, 0xec, 0x15, 0x18, 0xc2,
|
||||||
|
0x21, 0x6a, 0xb8, 0xb8, 0x8a, 0xeb, 0x56, 0xf0, 0xda, 0xfc, 0x78, 0xab, 0x6c, 0x08, 0xeb, 0x0b,
|
||||||
|
0x30, 0xc0, 0xdb, 0x43, 0x93, 0x16, 0x01, 0x29, 0x9b, 0x62, 0x3b, 0x02, 0x91, 0x8f, 0x60, 0xae,
|
||||||
|
0x45, 0x69, 0x29, 0x44, 0xec, 0x0b, 0x09, 0x49, 0x51, 0x67, 0xc5, 0xd9, 0x01, 0xb1, 0xcd, 0xdc,
|
||||||
|
0x0b, 0xbb, 0x91, 0x10, 0xeb, 0xc7, 0x7d, 0x51, 0x54, 0x15, 0xa0, 0xaa, 0xb0, 0xb6, 0xe1, 0xfa,
|
||||||
|
0xc2, 0xa1, 0xdb, 0xbb, 0xeb, 0xe5, 0x61, 0xc7, 0xac, 0x2f, 0x55, 0x32, 0xe7, 0x1d, 0x14, 0x2f,
|
||||||
|
0x59, 0x17, 0x5a, 0x21, 0xed, 0x50, 0x1c, 0xe4, 0xd5, 0x77, 0xf0, 0x55, 0xee, 0xdf, 0x7f, 0x4c,
|
||||||
|
0x1e, 0x2e, 0x9e, 0x6d, 0x9e, 0x76, 0x69, 0xcd, 0xef, 0x5d, 0x9a, 0x2f, 0xbd, 0xb5, 0x98, 0x31,
|
||||||
|
0xa1, 0x10, 0x8b, 0xf1, 0x77, 0xad, 0xb3, 0xbb, 0xe7, 0x8a, 0xe6, 0x0b, 0x57, 0x8c, 0x56, 0xc5,
|
||||||
|
0x85, 0x4c, 0xdd, 0x44, 0xe9, 0x52, 0x13, 0xc4, 0xa4, 0x41, 0xf1, 0x93, 0x14, 0x13, 0x9f, 0x7a,
|
||||||
|
0x22, 0x8e, 0xf2, 0xad, 0x7e, 0xbd, 0x83, 0xfc, 0x07, 0x32, 0x99, 0x07, 0x1f, 0xdc, 0x77, 0x0e,
|
||||||
|
0x56, 0x37, 0xf4, 0x9e, 0x98, 0xa6, 0x77, 0xea, 0xf4, 0xfd, 0xa2, 0xca, 0xda, 0x71, 0xe7, 0x42,
|
||||||
|
0xd3, 0x94, 0x4b, 0xab, 0x8a, 0x8b, 0xbd, 0x94, 0xcf, 0xdb, 0x2f, 0xb4, 0x40, 0xb4, 0x63, 0x33,
|
||||||
|
0x21, 0x32, 0xd6, 0x9d, 0x0f, 0xae, 0x1b, 0xbb, 0x02, 0x72, 0xa2, 0xf8, 0x33, 0x55, 0x42, 0x22,
|
||||||
|
0x9e, 0x07, 0x45, 0x81, 0x55, 0x21, 0xef, 0xc0, 0xbe, 0x04, 0xc5, 0xbc, 0x7d, 0xc2, 0xb5, 0xea,
|
||||||
|
0x11, 0xc7, 0x7c, 0x6e, 0x1b, 0x0d, 0xfd, 0x79, 0xd1, 0x74, 0x91, 0xf1, 0xe4, 0x09, 0xb5, 0x8b,
|
||||||
|
0x04, 0x88, 0xc6, 0xb7, 0x65, 0xba, 0x47, 0x75, 0x59, 0xe7, 0x4f, 0x3d, 0x96, 0x75, 0x2e, 0x36,
|
||||||
|
0xbe, 0x2b, 0x5b, 0xe7, 0x99, 0x21, 0x21, 0x1a, 0x61, 0x9a, 0x2e, 0x4a, 0x4a, 0x9e, 0x50, 0x15,
|
||||||
|
0x04, 0x5d, 0xeb, 0xb1, 0xa9, 0xf5, 0xb1, 0x86, 0x37, 0xa5, 0xcb, 0x52, 0x5c, 0x78, 0x6e, 0x58,
|
||||||
|
0x48, 0xef, 0x3f, 0x4e, 0x48, 0x27, 0x25, 0xe3, 0xc9, 0x13, 0x6a, 0x17, 0x55, 0x42, 0xc9, 0xa5,
|
||||||
|
0xa8, 0x30, 0x43, 0x31, 0x29, 0x26, 0x64, 0x6b, 0x33, 0x25, 0xcb, 0xd8, 0x8f, 0xb8, 0xd3, 0x6c,
|
||||||
|
0xa7, 0x29, 0xa1, 0x55, 0x31, 0x9a, 0x2e, 0xda, 0x6f, 0x36, 0x0c, 0x52, 0x54, 0xf4, 0xe3, 0x20,
|
||||||
|
0xa9, 0xfa, 0x38, 0xdb, 0x61, 0xca, 0xa3, 0x5c, 0x68, 0x84, 0x69, 0xba, 0xc8, 0x78, 0xf2, 0x44,
|
||||||
|
0xaf, 0x08, 0x95, 0x90, 0x88, 0x27, 0xb2, 0xf7, 0x54, 0xae, 0x88, 0x25, 0x21, 0xfd, 0xe4, 0x18,
|
||||||
|
0x61, 0x9a, 0x2e, 0x32, 0x9e, 0x3c, 0xa1, 0x76, 0x6d, 0xac, 0x64, 0x5b, 0x84, 0x72, 0x3d, 0x23,
|
||||||
|
0xe3, 0xc9, 0x93, 0xcd, 0x44, 0xb6, 0x45, 0x68, 0xcd, 0x33, 0x4c, 0xd7, 0xaa, 0xf1, 0xff, 0x4c,
|
||||||
|
0x28, 0x1f, 0xfe, 0x00, 0x7b, 0xdc, 0xc2, 0x19, 0xcd, 0xc3, 0x9e, 0x72, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||||
|
};
|
||||||
|
|
||||||
|
const BITMAP_OPAQUE move_zone_xpm[1] = {{ png, sizeof( png ), "move_zone_xpm" }};
|
||||||
|
|
||||||
|
//EOF
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg18859">
|
||||||
|
<metadata
|
||||||
|
id="metadata18886">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18861" />
|
||||||
|
<path
|
||||||
|
d="M 4,23 22,3"
|
||||||
|
id="path3376"
|
||||||
|
style="fill:none;stroke:#009b00;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 26,23 44,3"
|
||||||
|
id="path3378"
|
||||||
|
style="opacity:0.7;fill:none;stroke:#009b00;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 4,44 22,24"
|
||||||
|
id="path3380"
|
||||||
|
style="opacity:0.7;fill:none;stroke:#009b00;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 26,44 44,24"
|
||||||
|
id="path3382"
|
||||||
|
style="opacity:0.7;fill:none;stroke:#009b00;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,141 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
version="1.1"
|
||||||
|
id="svg18970"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="duplicate_footprint.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1005"
|
||||||
|
id="namedview18985"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="18.169469"
|
||||||
|
inkscape:cy="8.9416575"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg18970"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:object-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3029"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs18972" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#g3527"
|
||||||
|
id="use3537"
|
||||||
|
transform="translate(0,12)"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
style="opacity:0.75" />
|
||||||
|
<g
|
||||||
|
id="g3527"
|
||||||
|
transform="translate(-1,1)">
|
||||||
|
<rect
|
||||||
|
y="2.499999"
|
||||||
|
x="2.5"
|
||||||
|
height="7"
|
||||||
|
width="10"
|
||||||
|
id="rect3503"
|
||||||
|
style="fill:none;stroke:#545454;stroke-width:1;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1.5"
|
||||||
|
x="3.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3505"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1.5"
|
||||||
|
x="6.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3509"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3514"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="9.5"
|
||||||
|
y="1.5" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3516"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="3.5"
|
||||||
|
y="7.5" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3518"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="6.5"
|
||||||
|
y="7.5" />
|
||||||
|
<rect
|
||||||
|
y="7.5"
|
||||||
|
x="9.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3520"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
style="opacity:0.75"
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
transform="translate(13,12)"
|
||||||
|
id="use3539"
|
||||||
|
xlink:href="#g3527"
|
||||||
|
y="0"
|
||||||
|
x="0" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#g3527"
|
||||||
|
id="use3559"
|
||||||
|
transform="translate(13,0)"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
style="opacity:0.75" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg8431">
|
||||||
|
<metadata
|
||||||
|
id="metadata8454">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8433" />
|
||||||
|
<path
|
||||||
|
d="m 13,4.03125 c -4.95522,0 -8.96875,4.0135285 -8.96875,8.96875 0,4.955221 4.01353,8.96875 8.96875,8.96875 4.955222,0 8.96875,-4.013529 8.96875,-8.96875 C 21.96875,8.0447785 17.955222,4.03125 13,4.03125 z M 13,9 c 2.209139,0 4,1.790861 4,4 0,2.209139 -1.790861,4 -4,4 -2.209139,0 -4,-1.790861 -4,-4 0,-2.209139 1.790861,-4 4,-4 z"
|
||||||
|
id="path3763"
|
||||||
|
style="fill:#008000;fill-opacity:0.69803922;stroke:#008000;stroke-width:2.05555582;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 34.996528,4.034722 c -4.95522,0 -8.96875,4.013529 -8.96875,8.96875 0,4.955221 4.01353,8.968749 8.96875,8.968749 4.955223,0 8.968751,-4.013528 8.968751,-8.968749 0,-4.955221 -4.013528,-8.96875 -8.968751,-8.96875 z m 0,4.96875 c 2.209139,0 4.000001,1.790861 4.000001,4 0,2.209139 -1.790862,4 -4.000001,4 -2.209139,0 -4,-1.790861 -4,-4 0,-2.209139 1.790861,-4 4,-4 z"
|
||||||
|
id="path9686"
|
||||||
|
style="opacity:0.7;fill:#a9eba1;fill-opacity:0.69803922;stroke:#008000;stroke-width:2.05555582;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 13,26.03125 c -4.95522,0 -8.96875,4.013529 -8.96875,8.96875 0,4.955221 4.01353,8.96875 8.96875,8.96875 4.955222,0 8.96875,-4.013529 8.96875,-8.96875 0,-4.955221 -4.013528,-8.96875 -8.96875,-8.96875 z M 13,31 c 2.209139,0 4,1.790861 4,4 0,2.209139 -1.790861,4 -4,4 -2.209139,0 -4,-1.790861 -4,-4 0,-2.209139 1.790861,-4 4,-4 z"
|
||||||
|
id="path3230"
|
||||||
|
style="opacity:0.7;fill:#a9eba1;fill-opacity:0.69803922;stroke:#008000;stroke-width:2.05555582;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 34.996528,26.034722 c -4.95522,0 -8.96875,4.013529 -8.96875,8.96875 0,4.955221 4.01353,8.968749 8.96875,8.968749 4.955223,0 8.968751,-4.013528 8.968751,-8.968749 0,-4.955221 -4.013528,-8.96875 -8.968751,-8.96875 z m 0,4.96875 c 2.209139,0 4.000001,1.790861 4.000001,4 0,2.209139 -1.790862,4 -4.000001,4 -2.209139,0 -4,-1.790861 -4,-4 0,-2.209139 1.790861,-4 4,-4 z"
|
||||||
|
id="path3232"
|
||||||
|
style="opacity:0.7;fill:#a9eba1;fill-opacity:0.69803922;stroke:#008000;stroke-width:2.05555582;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,174 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
id="svg18970">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18972">
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3301"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3304"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3307"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3310"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3313"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3316"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3319"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3322"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="translate(-1,-2)"
|
||||||
|
id="g3744">
|
||||||
|
<path
|
||||||
|
d="M 12,10 A 5,5 0 1 1 2,10 5,5 0 1 1 12,10 z"
|
||||||
|
transform="translate(0.5,-1.5)"
|
||||||
|
id="path3680"
|
||||||
|
style="fill:#fcd40f;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 12.488902,8.4889022 -5.1095923,0 0.1095925,-5 c 0,0 -5.09534,1.1698255 -5,5 3.454097,-0.014719 4.7357278,0 4.7357278,0 L 7.4889022,13.488902 C 11.423077,13.335543 12.708024,9.9574012 12.488902,8.4889022"
|
||||||
|
id="path3736"
|
||||||
|
style="fill:#000000;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 7.5,2 0,13"
|
||||||
|
id="path3676"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 14,8.5 1,8.5"
|
||||||
|
id="path3678"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 6.5,4.625 C 5.0912245,4.9882125 3.9882125,6.0912245 3.625,7.5 l 2.375,0 0.5,0 0,-0.5 0,-2.375 z"
|
||||||
|
id="path3733"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="M 11.375,7.5 C 11.011788,6.0912245 9.908776,4.9882125 8.5,4.625 l 0,2.375 0,0.5 0.5,0 2.375,0 z"
|
||||||
|
id="path3738"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="M 8.5,12.375 C 9.908776,12.011788 11.011788,10.908776 11.375,9.5 L 9,9.5 l -0.5,0 0,0.5 0,2.375 z"
|
||||||
|
id="path3740"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="m 3.625,9.5 c 0.363212,1.408776 1.466224,2.511788 2.875,2.875 L 6.5,10 6.5,9.5 6,9.5 3.625,9.5 z"
|
||||||
|
id="path3742"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
transform="translate(13,0)"
|
||||||
|
id="use3755"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3744" />
|
||||||
|
<use
|
||||||
|
transform="translate(13,13)"
|
||||||
|
id="use3670"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3744" />
|
||||||
|
<use
|
||||||
|
transform="translate(0,13)"
|
||||||
|
id="use3672"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3744" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg18970">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18972" />
|
||||||
|
<path
|
||||||
|
d="m 1,2 0,6 2,0 2,-3 4,0 0,14.5 -3,2 0,1.5 6,0 6,0 0,-1.5 -3,-2 0,-14.5 4,0 2,3 2,0 0,-6 -11,0 z"
|
||||||
|
id="path19013"
|
||||||
|
style="fill:#00009b;fill-rule:evenodd" />
|
||||||
|
<path
|
||||||
|
d="m 25,2 0,6 2,0 2,-3 4,0 0,14.5 -3,2 0,1.5 6,0 6,0 0,-1.5 -3,-2 0,-14.5 4,0 2,3 2,0 0,-6 -11,0 z"
|
||||||
|
id="path3308"
|
||||||
|
style="opacity:0.7;fill:#00009b;fill-rule:evenodd" />
|
||||||
|
<path
|
||||||
|
d="m 1,25 0,6 2,0 2,-3 4,0 0,14.5 -3,2 0,1.5 6,0 6,0 0,-1.5 -3,-2 0,-14.5 4,0 2,3 2,0 0,-6 -11,0 z"
|
||||||
|
id="path3310"
|
||||||
|
style="opacity:0.7;fill:#00009b;fill-rule:evenodd" />
|
||||||
|
<path
|
||||||
|
d="m 25,25 0,6 2,0 2,-3 4,0 0,14.5 -3,2 0,1.5 6,0 6,0 0,-1.5 -3,-2 0,-14.5 4,0 2,3 2,0 0,-6 -11,0 z"
|
||||||
|
id="path3312"
|
||||||
|
style="opacity:0.7;fill:#00009b;fill-rule:evenodd" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,161 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
id="svg18970">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18972">
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3301"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3304"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3307"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3310"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3313"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3316"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3319"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3322"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="translate(20,-1.5)"
|
||||||
|
id="g3939">
|
||||||
|
<path
|
||||||
|
d="m -15.5,8 5,0 2.1269625,4.84375"
|
||||||
|
id="path3917"
|
||||||
|
style="fill:none;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m -18.5,3 0,10 8.25,0 -1.25,-3.25 c -0.781147,0.971226 -1.5,1.75 -3,1.75 -1.932997,0 -3.5,-1.5670035 -3.5,-3.5 0,-1.9329967 1.567003,-3.5 3.5,-3.5 1.295542,0 2.33235,0.4225334 2.9375,1.46875 l 1.9375,0 L -8.5,8.5 -8.5,3 z"
|
||||||
|
id="rect3811"
|
||||||
|
style="fill:#008000;fill-opacity:0.62745098;stroke:#008000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m -13.46875,7 a 1.53125,1.53125 0 1 1 -3.0625,0 1.53125,1.53125 0 1 1 3.0625,0 z"
|
||||||
|
transform="matrix(1.0081529,0,0,1.0081529,0.57855937,0.9429297)"
|
||||||
|
id="path3915"
|
||||||
|
style="fill:#eeeeec;stroke:#888a85;stroke-width:0.99191302;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
id="use4178"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3939" />
|
||||||
|
<use
|
||||||
|
transform="translate(13,0)"
|
||||||
|
id="use4180"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3939" />
|
||||||
|
<use
|
||||||
|
transform="translate(13,13)"
|
||||||
|
id="use4182"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3939" />
|
||||||
|
<use
|
||||||
|
transform="translate(0,13)"
|
||||||
|
id="use4184"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3939" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
|
@ -0,0 +1,95 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
version="1.1"
|
||||||
|
id="svg18970"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="duplicate_line.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="996"
|
||||||
|
id="namedview18985"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="21.793817"
|
||||||
|
inkscape:cy="19.733911"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="28"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg18970"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:object-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3029"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs18972" />
|
||||||
|
<g
|
||||||
|
id="g18103"
|
||||||
|
transform="matrix(0.92021476,-0.39141384,0.39141384,0.92021476,-3.5098229,-2.4696189)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 14.365778,23.401859 c 0.202438,-4.960549 -0.864872,-7.852869 -4.328751,-9.928645 2.506618,4.326299 2.740146,6.262366 2.389978,9.710201 l -1.626346,-0.20242 2.198044,3.513613 2.945419,-2.915713 z"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1"
|
||||||
|
id="path17320" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.92443,0,0,1,54.5375,-34.419499)"
|
||||||
|
id="g18878">
|
||||||
|
<rect
|
||||||
|
width="23.798449"
|
||||||
|
height="3.0000014"
|
||||||
|
ry="0"
|
||||||
|
x="-56.832317"
|
||||||
|
y="36.419498"
|
||||||
|
id="rect18882"
|
||||||
|
style="fill:#009b00" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g3096"
|
||||||
|
transform="matrix(0.92443,0,0,1,54.5375,-18.419498)"
|
||||||
|
style="opacity:0.7">
|
||||||
|
<rect
|
||||||
|
style="fill:#009b00"
|
||||||
|
id="rect3098"
|
||||||
|
y="36.419498"
|
||||||
|
x="-56.832317"
|
||||||
|
ry="0"
|
||||||
|
height="3.0000014"
|
||||||
|
width="23.798449" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1,145 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
version="1.1"
|
||||||
|
id="svg18970"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="duplicate_footprint.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1005"
|
||||||
|
id="namedview18985"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="8"
|
||||||
|
inkscape:cx="17.037549"
|
||||||
|
inkscape:cy="12.025341"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg18970"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:object-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3029"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs18972" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#g3527"
|
||||||
|
id="use3537"
|
||||||
|
transform="translate(9,11)"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
style="opacity:0.75" />
|
||||||
|
<g
|
||||||
|
id="g3527">
|
||||||
|
<path
|
||||||
|
transform="matrix(2.5100458,0,0,2.3016337,-3.0200916,-8.6115753)"
|
||||||
|
sodipodi:open="true"
|
||||||
|
sodipodi:end="8.3331823"
|
||||||
|
sodipodi:start="4.5226534"
|
||||||
|
d="M 1.8770992,6.360044 A 0.65165043,0.65165043 0 1 1 1.6995435,7.578251"
|
||||||
|
sodipodi:ry="0.65165043"
|
||||||
|
sodipodi:rx="0.65165043"
|
||||||
|
sodipodi:cy="7"
|
||||||
|
sodipodi:cx="2"
|
||||||
|
id="path3525"
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#545454;stroke-width:0.41604573000000000;stroke-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<rect
|
||||||
|
y="3.4999998"
|
||||||
|
x="1.5"
|
||||||
|
height="7.9999995"
|
||||||
|
width="14"
|
||||||
|
id="rect3503"
|
||||||
|
style="fill:none;stroke:#545454;stroke-width:1;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1.5"
|
||||||
|
x="3.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3505"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
y="1.5"
|
||||||
|
x="7.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3509"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3514"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="11.5"
|
||||||
|
y="1.5" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3516"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="3.5"
|
||||||
|
y="10.5" />
|
||||||
|
<rect
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1"
|
||||||
|
id="rect3518"
|
||||||
|
width="2"
|
||||||
|
height="3"
|
||||||
|
x="7.5"
|
||||||
|
y="10.5" />
|
||||||
|
<rect
|
||||||
|
y="10.5"
|
||||||
|
x="11.5"
|
||||||
|
height="3"
|
||||||
|
width="2"
|
||||||
|
id="rect3520"
|
||||||
|
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g18103"
|
||||||
|
transform="matrix(0.96595582,-0.25870707,0.25870707,0.96595582,0.84350936,-11.031754)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 14.365778,23.401859 c 0.202438,-4.960549 -1.242615,-6.237163 -5.6595543,-5.884794 4.3461583,1.028691 4.0709493,2.218515 3.7207813,5.66635 l -1.626346,-0.20242 2.198044,3.513613 2.945419,-2.915713 z"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1"
|
||||||
|
id="path17320" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
|
@ -0,0 +1,70 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
id="svg8431"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="duplicate_pad.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="640"
|
||||||
|
inkscape:window-height="480"
|
||||||
|
id="namedview3013"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="9.0769231"
|
||||||
|
inkscape:cx="13"
|
||||||
|
inkscape:cy="12.173729"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="28"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg8431" />
|
||||||
|
<metadata
|
||||||
|
id="metadata8454">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8433" />
|
||||||
|
<path
|
||||||
|
d="m 7.0000002,1.4999999 c -3.0387414,0 -5.5000003,2.4612576 -5.5000003,5.4999999 C 1.4999999,10.038741 3.9612588,12.5 7.0000002,12.5 10.038743,12.5 12.5,10.038741 12.5,6.9999998 12.5,3.9612575 10.038743,1.4999999 7.0000002,1.4999999 z m 0,3.0000001 C 8.354733,4.5 9.5,5.6452668 9.5,7 9.5,8.3547332 8.354733,9.5 7.0000002,9.5 5.6452663,9.5 4.5,8.354733 4.5,6.9999998 4.5,5.6452666 5.6452663,4.5 7.0000002,4.5 z"
|
||||||
|
id="path3763"
|
||||||
|
style="fill:#008000;fill-opacity:0.69803922;stroke:#008000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<use
|
||||||
|
transform="translate(12,12)"
|
||||||
|
id="use3206"
|
||||||
|
style="opacity:0.7"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#path3763" />
|
||||||
|
<path
|
||||||
|
d="M 18.334055,9.5305414 C 16.578714,4.886534 14.749271,4.2773887 10.82266,6.330495 c 4.402043,-0.7545299 4.614505,0.4480843 5.641806,3.757893 l -1.575818,0.450305 3.397949,2.372933 1.569168,-3.8359591 z"
|
||||||
|
id="path17320"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1,164 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
id="svg18970">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18972">
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3301"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3304"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3307"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3310"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3313"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3316"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3319"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3322"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.92021476,-0.39141384,0.39141384,0.92021476,-2.5098229,-9.469619)"
|
||||||
|
id="g18103">
|
||||||
|
<path
|
||||||
|
d="m 14.365778,23.401859 c 0.202438,-4.960549 -1.242615,-6.237163 -5.6595543,-5.884794 4.3461583,1.028691 4.0709493,2.218515 3.7207813,5.66635 l -1.626346,-0.20242 2.198044,3.513613 2.945419,-2.915713 z"
|
||||||
|
id="path17320"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(-1,0)"
|
||||||
|
id="g3744">
|
||||||
|
<path
|
||||||
|
d="M 12,10 A 5,5 0 1 1 2,10 5,5 0 1 1 12,10 z"
|
||||||
|
transform="translate(1.5,-1.5)"
|
||||||
|
id="path3680"
|
||||||
|
style="fill:#fcd40f;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 13.488902,8.4889022 -5.1095923,0 0.1095925,-5 c 0,0 -5.09534,1.1698255 -5,5 3.454097,-0.014719 4.7357278,0 4.7357278,0 L 8.4889022,13.488902 C 12.423077,13.335543 13.708024,9.9574012 13.488902,8.4889022"
|
||||||
|
id="path3736"
|
||||||
|
style="fill:#000000;stroke:none" />
|
||||||
|
<path
|
||||||
|
d="m 8.5,1 0,15"
|
||||||
|
id="path3676"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 16,8.5 1,8.5"
|
||||||
|
id="path3678"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M 7.5,4.625 C 6.0912245,4.9882125 4.9882125,6.0912245 4.625,7.5 l 2.375,0 0.5,0 0,-0.5 0,-2.375 z"
|
||||||
|
id="path3733"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="M 12.375,7.5 C 12.011788,6.0912245 10.908776,4.9882125 9.5,4.625 l 0,2.375 0,0.5 0.5,0 2.375,0 z"
|
||||||
|
id="path3738"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="m 9.5,12.375 c 1.408776,-0.363212 2.511788,-1.466224 2.875,-2.875 l -2.375,0 -0.5,0 0,0.5 0,2.375 z"
|
||||||
|
id="path3740"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
<path
|
||||||
|
d="m 4.625,9.5 c 0.363212,1.408776 1.466224,2.511788 2.875,2.875 L 7.5,10 7.5,9.5 7,9.5 4.625,9.5 z"
|
||||||
|
id="path3742"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
transform="translate(10,9)"
|
||||||
|
id="use3755"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g3744" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
|
@ -0,0 +1,90 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="26"
|
||||||
|
width="26"
|
||||||
|
version="1.1"
|
||||||
|
id="svg18970"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="duplicate_text.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="996"
|
||||||
|
id="namedview18985"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="13.659451"
|
||||||
|
inkscape:cy="12.783886"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="28"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="g18103"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:object-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3029"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs18972" />
|
||||||
|
<g
|
||||||
|
style="fill-rule:evenodd"
|
||||||
|
transform="matrix(1.1098933,0,0,1.075965,-25.392974,-45.041873)"
|
||||||
|
id="g19009">
|
||||||
|
<path
|
||||||
|
style="fill:#00009b"
|
||||||
|
d="M 1 1 L 1 5 L 2 5 L 4 3 L 6 3 L 6 13 L 4 14 L 4 15 L 7 15 L 8 15 L 11 15 L 11 14 L 9 13 L 9 3 L 11 3 L 13 5 L 14 5 L 14 1 L 8 1 L 7 1 L 1 1 z "
|
||||||
|
transform="matrix(0.90098751,0,0,0.92939826,22.878752,41.861838)"
|
||||||
|
id="path19013" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g18103"
|
||||||
|
transform="matrix(0.92021476,-0.39141384,0.39141384,0.92021476,-2.5098229,-9.469619)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 14.365778,23.401859 c 0.202438,-4.960549 -1.242615,-6.237163 -5.6595543,-5.884794 4.3461583,1.028691 4.0709493,2.218515 3.7207813,5.66635 l -1.626346,-0.20242 2.198044,3.513613 2.945419,-2.915713 z"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1"
|
||||||
|
id="path17320" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#g19009"
|
||||||
|
id="use3037"
|
||||||
|
transform="translate(11,10)"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
style="opacity:0.7" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,161 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
version="1.1"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
id="svg18970">
|
||||||
|
<metadata
|
||||||
|
id="metadata18987">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18972">
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3301"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3304"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3307"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3310"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3313"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3316"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3319"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3322"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="translate(20,-1.5)"
|
||||||
|
id="g3939">
|
||||||
|
<path
|
||||||
|
d="m -15.5,8 5,0 2.1269625,4.84375"
|
||||||
|
id="path3917"
|
||||||
|
style="fill:none;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m -18.5,3 0,11 8.75,0 -1.75,-4.25 c -0.781147,0.971226 -1.5,1.75 -3,1.75 -1.932997,0 -3.5,-1.5670035 -3.5,-3.5 0,-1.9329967 1.567003,-3.5 3.5,-3.5 1.295542,0 2.33235,0.4225334 2.9375,1.46875 l 1.9375,0 L -7.5,11 l 0,-8 z"
|
||||||
|
id="rect3811"
|
||||||
|
style="fill:#008000;fill-opacity:0.62745098;stroke:#008000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m -13.46875,7 a 1.53125,1.53125 0 1 1 -3.0625,0 1.53125,1.53125 0 1 1 3.0625,0 z"
|
||||||
|
transform="matrix(1.0081529,0,0,1.0081529,0.57855937,0.9429297)"
|
||||||
|
id="path3915"
|
||||||
|
style="fill:#eeeeec;stroke:#888a85;stroke-width:0.99191302;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(20,-1.5)"
|
||||||
|
id="g4253">
|
||||||
|
<path
|
||||||
|
d="m -15.5,8 5,0 2.1269625,4.84375"
|
||||||
|
id="path4255"
|
||||||
|
style="fill:none;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m -18.5,3 0,11 8.75,0 -1.75,-4.25 c -0.781147,0.971226 -1.5,1.75 -3,1.75 -1.932997,0 -3.5,-1.5670035 -3.5,-3.5 0,-1.9329967 1.567003,-3.5 3.5,-3.5 1.295542,0 2.33235,0.4225334 2.9375,1.46875 l 1.9375,0 L -7.5,11 l 0,-8 z"
|
||||||
|
id="path4257"
|
||||||
|
style="fill:#008000;fill-opacity:0.62745098;stroke:#008000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m -13.46875,7 a 1.53125,1.53125 0 1 1 -3.0625,0 1.53125,1.53125 0 1 1 3.0625,0 z"
|
||||||
|
transform="matrix(1.0081529,0,0,1.0081529,0.57855937,0.9429297)"
|
||||||
|
id="path4259"
|
||||||
|
style="fill:#eeeeec;stroke:#888a85;stroke-width:0.99191302;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
transform="translate(12,12)"
|
||||||
|
id="use4261"
|
||||||
|
style="opacity:0.75"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
width="26"
|
||||||
|
height="26"
|
||||||
|
xlink:href="#g4253" />
|
||||||
|
<g
|
||||||
|
transform="matrix(0.92021476,-0.39141384,0.39141384,0.92021476,-2.5098229,-7.469619)"
|
||||||
|
id="g18103">
|
||||||
|
<path
|
||||||
|
d="m 14.365778,23.401859 c 0.202438,-4.960549 -1.242615,-6.237163 -5.6595543,-5.884794 4.3461583,1.028691 4.0709493,2.218515 3.7207813,5.66635 l -1.626346,-0.20242 2.198044,3.513613 2.945419,-2.915713 z"
|
||||||
|
id="path17320"
|
||||||
|
style="fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:1" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.0 KiB |
|
@ -0,0 +1,227 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="48"
|
||||||
|
width="48"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="move_zone.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata66">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1005"
|
||||||
|
id="namedview64"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="10.835114"
|
||||||
|
inkscape:cy="24.527054"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3043" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
id="c"
|
||||||
|
height="1.2585"
|
||||||
|
width="1.2406"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
y="-.12927"
|
||||||
|
x="-.12029">
|
||||||
|
<feGaussianBlur
|
||||||
|
stdDeviation="1.6250782"
|
||||||
|
id="feGaussianBlur7" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
id="d"
|
||||||
|
y2="36.848"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="41.355"
|
||||||
|
gradientTransform="matrix(1.4411,0,0,2.9984,-102.04,-72.032)"
|
||||||
|
y1="32.207"
|
||||||
|
x1="39.182">
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
offset="0"
|
||||||
|
id="stop10" />
|
||||||
|
<stop
|
||||||
|
stop-color="#afadff"
|
||||||
|
offset="1"
|
||||||
|
id="stop12" />
|
||||||
|
</linearGradient>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3322"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3319"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3316"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3313"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3310"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3307"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3304"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd"
|
||||||
|
id="rect3301"
|
||||||
|
y="-3.7337"
|
||||||
|
x="-4.6403999"
|
||||||
|
height="26.091999"
|
||||||
|
width="25.032" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
style="fill:#59d421;fill-opacity:1;stroke:#44a118;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 33.5,21.5 -5,5 3,0 0,5 -5,0 0,-3 -5,5 5,5 0,-3 5,0 0,5 -3,0 5,5 5,-5 -3,0 0,-5 5,0 0,3 5,-5 -5,-5 0,3 -5,0 0,-5 3,0 z"
|
||||||
|
id="path3045"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccccccccccccccccccccccccc" />
|
||||||
|
<g
|
||||||
|
id="g3128"
|
||||||
|
transform="translate(6.75,4)">
|
||||||
|
<g
|
||||||
|
id="g3744"
|
||||||
|
transform="matrix(2,0,0,2,-6.75,-4)">
|
||||||
|
<path
|
||||||
|
style="fill:#fcd40f;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:1"
|
||||||
|
id="path3680"
|
||||||
|
transform="translate(1.5,-1.5)"
|
||||||
|
d="M 12,10 A 5,5 0 1 1 2,10 5,5 0 1 1 12,10 z"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;stroke:none"
|
||||||
|
id="path3736"
|
||||||
|
d="m 13.488902,8.4889022 -5.1095923,0 0.1095925,-5 c 0,0 -5.09534,1.1698255 -5,5 3.454097,-0.014719 4.7357278,0 4.7357278,0 L 8.4889022,13.488902 C 12.423077,13.335543 13.708024,9.9574012 13.488902,8.4889022"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3676"
|
||||||
|
d="m 8.5,1 0,15"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3678"
|
||||||
|
d="M 16,8.5 1,8.5"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:0.5px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
||||||
|
id="path3738"
|
||||||
|
d="M 12.625,7.75 C 12.361225,6.2859818 11,4.7050669 9.25,4.375 l 0,3.375 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:0.5px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
||||||
|
id="path3742"
|
||||||
|
d="M 4.375,9.25 C 4.7271635,11 6.5,12.5 7.75,12.625 l 0,-3.375 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<g
|
||||||
|
id="g3147"
|
||||||
|
transform="matrix(0,1,-1,0,17,0)">
|
||||||
|
<path
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:0.5px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
||||||
|
id="path3143"
|
||||||
|
d="M 12.625,7.75 C 12.361225,6.2859818 11,4.7050669 9.25,4.375 l 0,3.375 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.25;color:#000000;fill:none;stroke:#eeeeec;stroke-width:0.5px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
|
||||||
|
id="path3145"
|
||||||
|
d="M 4.375,9.25 C 4.7271635,11 6.5,12.5 7.75,12.625 l 0,-3.375 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.5 KiB |
|
@ -0,0 +1,169 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
id="svg2">
|
||||||
|
<metadata
|
||||||
|
id="metadata66">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<filter
|
||||||
|
x="-0.12029"
|
||||||
|
y="-0.12927"
|
||||||
|
width="1.2406"
|
||||||
|
height="1.2585"
|
||||||
|
color-interpolation-filters="sRGB"
|
||||||
|
id="c">
|
||||||
|
<feGaussianBlur
|
||||||
|
id="feGaussianBlur7"
|
||||||
|
stdDeviation="1.6250782" />
|
||||||
|
</filter>
|
||||||
|
<linearGradient
|
||||||
|
x1="39.181999"
|
||||||
|
y1="32.207001"
|
||||||
|
x2="41.355"
|
||||||
|
y2="36.848"
|
||||||
|
id="d"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.4411,0,0,2.9984,-102.04,-72.032)">
|
||||||
|
<stop
|
||||||
|
id="stop10"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop12"
|
||||||
|
style="stop-color:#afadff;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<mask
|
||||||
|
id="t">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3322"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="s">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3319"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="u">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3316"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="r">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3313"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="v">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3310"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="q">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3307"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="x">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3304"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
<mask
|
||||||
|
id="w">
|
||||||
|
<rect
|
||||||
|
width="25.032"
|
||||||
|
height="26.091999"
|
||||||
|
x="-4.6403999"
|
||||||
|
y="-3.7337"
|
||||||
|
id="rect3301"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd" />
|
||||||
|
</mask>
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="translate(3.5,3.5)"
|
||||||
|
id="g3063">
|
||||||
|
<path
|
||||||
|
d="m 0,0 0,26 20.5,0 -5.5,-11.5 0.0625,0 C 13.8522,16.592433 11.591084,18 9,18 5.1340066,18 2,14.865993 2,11 2,7.1340066 5.1340066,4 9,4 c 2.591084,0 4.8522,1.4075669 6.0625,3.5 L 20,7.5 26,20 26,0 z"
|
||||||
|
id="rect3811"
|
||||||
|
style="fill:#008000;fill-opacity:0.62745098;stroke:#008000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<g
|
||||||
|
transform="matrix(1.6382539,0,0,1.5572263,1.2572207,0.36314149)"
|
||||||
|
id="g16">
|
||||||
|
<rect
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
id="rect18"
|
||||||
|
style="fill-opacity:0" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 13,11 4.5,0 6,13"
|
||||||
|
id="path3765"
|
||||||
|
style="fill:none;stroke:#808080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
d="m 12.5,10 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
|
||||||
|
transform="translate(0,1)"
|
||||||
|
id="path3815"
|
||||||
|
style="fill:none;stroke:#808080;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 33.5,21.5 -5,5 3,0 0,5 -5,0 0,-3 -5,5 5,5 0,-3 5,0 0,5 -3,0 5,5 5,-5 -3,0 0,-5 5,0 0,3 5,-5 -5,-5 0,3 -5,0 0,-5 3,0 z"
|
||||||
|
id="path3045"
|
||||||
|
style="fill:#59d421;fill-opacity:1;stroke:#44a118;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
|
@ -97,6 +97,9 @@ double To_User_Unit( EDA_UNITS_T aUnit, double aValue )
|
||||||
case INCHES:
|
case INCHES:
|
||||||
return IU_TO_IN( aValue );
|
return IU_TO_IN( aValue );
|
||||||
|
|
||||||
|
case DEGREES:
|
||||||
|
return aValue / 10.0f;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return aValue;
|
return aValue;
|
||||||
}
|
}
|
||||||
|
@ -246,6 +249,10 @@ wxString StringFromValue( EDA_UNITS_T aUnit, int aValue, bool aAddUnitSymbol )
|
||||||
stringValue += _( " mm" );
|
stringValue += _( " mm" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DEGREES:
|
||||||
|
stringValue += _( " deg" );
|
||||||
|
break;
|
||||||
|
|
||||||
case UNSCALED_UNITS:
|
case UNSCALED_UNITS:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -277,6 +284,11 @@ double From_User_Unit( EDA_UNITS_T aUnit, double aValue )
|
||||||
value = IN_TO_IU( aValue );
|
value = IN_TO_IU( aValue );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DEGREES:
|
||||||
|
// Convert to "decidegrees"
|
||||||
|
value = aValue * 10;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case UNSCALED_UNITS:
|
case UNSCALED_UNITS:
|
||||||
value = aValue;
|
value = aValue;
|
||||||
|
@ -286,7 +298,7 @@ double From_User_Unit( EDA_UNITS_T aUnit, double aValue )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int ValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
double DoubleValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
||||||
{
|
{
|
||||||
double value;
|
double value;
|
||||||
double dtmp = 0;
|
double dtmp = 0;
|
||||||
|
@ -328,22 +340,39 @@ int ValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
||||||
// Check the optional unit designator (2 ch significant)
|
// Check the optional unit designator (2 ch significant)
|
||||||
wxString unit( buf.Mid( brk_point ).Strip( wxString::leading ).Left( 2 ).Lower() );
|
wxString unit( buf.Mid( brk_point ).Strip( wxString::leading ).Left( 2 ).Lower() );
|
||||||
|
|
||||||
if( unit == wxT( "in" ) || unit == wxT( "\"" ) )
|
if( aUnits == INCHES || aUnits == MILLIMETRES )
|
||||||
{
|
{
|
||||||
aUnits = INCHES;
|
if( unit == wxT( "in" ) || unit == wxT( "\"" ) )
|
||||||
|
{
|
||||||
|
aUnits = INCHES;
|
||||||
|
}
|
||||||
|
else if( unit == wxT( "mm" ) )
|
||||||
|
{
|
||||||
|
aUnits = MILLIMETRES;
|
||||||
|
}
|
||||||
|
else if( unit == wxT( "mi" ) || unit == wxT( "th" ) ) // Mils or thous
|
||||||
|
{
|
||||||
|
aUnits = INCHES;
|
||||||
|
dtmp /= 1000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if( unit == wxT( "mm" ) )
|
else if( aUnits == DEGREES )
|
||||||
{
|
{
|
||||||
aUnits = MILLIMETRES;
|
if( unit == wxT( "ra" ) ) // Radians
|
||||||
}
|
{
|
||||||
else if( unit == wxT( "mi" ) || unit == wxT( "th" ) ) // Mils or thous
|
dtmp *= 180.0f / M_PI;
|
||||||
{
|
}
|
||||||
aUnits = INCHES;
|
|
||||||
dtmp /= 1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
value = From_User_Unit( aUnits, dtmp );
|
value = From_User_Unit( aUnits, dtmp );
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
||||||
|
{
|
||||||
|
double value = DoubleValueFromString( aUnits, aTextValue );
|
||||||
return KiROUND( value );
|
return KiROUND( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ void BLOCK_SELECTOR::SetMessageBlock( EDA_DRAW_FRAME* frame )
|
||||||
|
|
||||||
case BLOCK_MOVE: // Move
|
case BLOCK_MOVE: // Move
|
||||||
case BLOCK_PRESELECT_MOVE: // Move with preselection list
|
case BLOCK_PRESELECT_MOVE: // Move with preselection list
|
||||||
|
case BLOCK_MOVE_EXACT:
|
||||||
msg = _( "Block Move" );
|
msg = _( "Block Move" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -195,7 +195,8 @@ private:
|
||||||
|
|
||||||
|
|
||||||
TOOL_MANAGER::TOOL_MANAGER() :
|
TOOL_MANAGER::TOOL_MANAGER() :
|
||||||
m_model( NULL ), m_view( NULL ), m_viewControls( NULL ), m_editFrame( NULL )
|
m_model( NULL ), m_view( NULL ), m_viewControls( NULL ), m_editFrame( NULL ),
|
||||||
|
m_undoInhibit( false )
|
||||||
{
|
{
|
||||||
m_actionMgr = new ACTION_MANAGER( this );
|
m_actionMgr = new ACTION_MANAGER( this );
|
||||||
|
|
||||||
|
@ -713,3 +714,23 @@ bool TOOL_MANAGER::isActive( TOOL_BASE* aTool )
|
||||||
// Just check if the tool is on the active tools stack
|
// Just check if the tool is on the active tools stack
|
||||||
return std::find( m_activeTools.begin(), m_activeTools.end(), aTool->GetId() ) != m_activeTools.end();
|
return std::find( m_activeTools.begin(), m_activeTools.end(), aTool->GetId() ) != m_activeTools.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TOOL_MANAGER::IncUndoInhibit()
|
||||||
|
{
|
||||||
|
m_undoInhibit++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TOOL_MANAGER::DecUndoInhibit()
|
||||||
|
{
|
||||||
|
m_undoInhibit--;
|
||||||
|
|
||||||
|
wxASSERT_MSG( m_undoInhibit >= 0, wxT( "Undo inhibit count decremented past zero" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TOOL_MANAGER::IsUndoInhibited() const
|
||||||
|
{
|
||||||
|
return m_undoInhibit > 0;
|
||||||
|
}
|
||||||
|
|
|
@ -197,6 +197,9 @@ bool LIB_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
|
||||||
|
|
||||||
case BLOCK_SELECT_ITEMS_ONLY:
|
case BLOCK_SELECT_ITEMS_ONLY:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BLOCK_MOVE_EXACT:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !nextCmd )
|
if( !nextCmd )
|
||||||
|
|
|
@ -148,10 +148,21 @@ wxString& operator <<( wxString& aString, const wxPoint& aPoint );
|
||||||
void PutValueInLocalUnits( wxTextCtrl& aTextCtr, int aValue );
|
void PutValueInLocalUnits( wxTextCtrl& aTextCtr, int aValue );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return in internal units the value "val" given in inch or mm
|
* Return in internal units the value "val" given in a real unit
|
||||||
|
* such as "in", "mm" or "deg"
|
||||||
*/
|
*/
|
||||||
double From_User_Unit( EDA_UNITS_T aUnit, double aValue );
|
double From_User_Unit( EDA_UNITS_T aUnit, double aValue );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function DoubleValueFromString
|
||||||
|
* converts \a aTextValue to a double
|
||||||
|
* @param aUnits The units of \a aTextValue.
|
||||||
|
* @param aTextValue A reference to a wxString object containing the string to convert.
|
||||||
|
* @return A double representing that value in internal units
|
||||||
|
*/
|
||||||
|
double DoubleValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ValueFromString
|
* Function ValueFromString
|
||||||
* converts \a aTextValue in \a aUnits to internal units used by the application.
|
* converts \a aTextValue in \a aUnits to internal units used by the application.
|
||||||
|
|
|
@ -102,6 +102,12 @@ EXTERN_BITMAP( anchor_xpm )
|
||||||
EXTERN_BITMAP( annotate_down_right_xpm )
|
EXTERN_BITMAP( annotate_down_right_xpm )
|
||||||
EXTERN_BITMAP( annotate_right_down_xpm )
|
EXTERN_BITMAP( annotate_right_down_xpm )
|
||||||
EXTERN_BITMAP( annotate_xpm )
|
EXTERN_BITMAP( annotate_xpm )
|
||||||
|
EXTERN_BITMAP( array_line_xpm )
|
||||||
|
EXTERN_BITMAP( array_module_xpm )
|
||||||
|
EXTERN_BITMAP( array_pad_xpm )
|
||||||
|
EXTERN_BITMAP( array_target_xpm )
|
||||||
|
EXTERN_BITMAP( array_text_xpm )
|
||||||
|
EXTERN_BITMAP( array_zone_xpm )
|
||||||
EXTERN_BITMAP( auto_associe_xpm )
|
EXTERN_BITMAP( auto_associe_xpm )
|
||||||
EXTERN_BITMAP( auto_delete_track_xpm )
|
EXTERN_BITMAP( auto_delete_track_xpm )
|
||||||
EXTERN_BITMAP( auto_track_width_xpm )
|
EXTERN_BITMAP( auto_track_width_xpm )
|
||||||
|
@ -174,6 +180,12 @@ EXTERN_BITMAP( drag_segment_withslope_xpm )
|
||||||
EXTERN_BITMAP( drag_track_segment_xpm )
|
EXTERN_BITMAP( drag_track_segment_xpm )
|
||||||
EXTERN_BITMAP( drc_off_xpm )
|
EXTERN_BITMAP( drc_off_xpm )
|
||||||
EXTERN_BITMAP( drc_xpm )
|
EXTERN_BITMAP( drc_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_line_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_module_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_pad_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_target_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_text_xpm )
|
||||||
|
EXTERN_BITMAP( duplicate_zone_xpm )
|
||||||
EXTERN_BITMAP( edges_sketch_xpm )
|
EXTERN_BITMAP( edges_sketch_xpm )
|
||||||
EXTERN_BITMAP( edit_comp_footprint_xpm )
|
EXTERN_BITMAP( edit_comp_footprint_xpm )
|
||||||
EXTERN_BITMAP( edit_component_xpm )
|
EXTERN_BITMAP( edit_component_xpm )
|
||||||
|
@ -332,8 +344,10 @@ EXTERN_BITMAP( move_polygon_xpm )
|
||||||
EXTERN_BITMAP( move_rectangle_xpm )
|
EXTERN_BITMAP( move_rectangle_xpm )
|
||||||
EXTERN_BITMAP( move_sheet_xpm )
|
EXTERN_BITMAP( move_sheet_xpm )
|
||||||
EXTERN_BITMAP( move_text_xpm )
|
EXTERN_BITMAP( move_text_xpm )
|
||||||
|
EXTERN_BITMAP( move_target_xpm )
|
||||||
EXTERN_BITMAP( move_track_segment_xpm )
|
EXTERN_BITMAP( move_track_segment_xpm )
|
||||||
EXTERN_BITMAP( move_track_xpm )
|
EXTERN_BITMAP( move_track_xpm )
|
||||||
|
EXTERN_BITMAP( move_zone_xpm )
|
||||||
EXTERN_BITMAP( move_xpm )
|
EXTERN_BITMAP( move_xpm )
|
||||||
EXTERN_BITMAP( mw_add_gap_xpm )
|
EXTERN_BITMAP( mw_add_gap_xpm )
|
||||||
EXTERN_BITMAP( mw_add_line_xpm )
|
EXTERN_BITMAP( mw_add_line_xpm )
|
||||||
|
|
|
@ -62,6 +62,7 @@ typedef enum {
|
||||||
BLOCK_ZOOM,
|
BLOCK_ZOOM,
|
||||||
BLOCK_ABORT,
|
BLOCK_ABORT,
|
||||||
BLOCK_PRESELECT_MOVE,
|
BLOCK_PRESELECT_MOVE,
|
||||||
|
BLOCK_MOVE_EXACT,
|
||||||
BLOCK_SELECT_ITEMS_ONLY,
|
BLOCK_SELECT_ITEMS_ONLY,
|
||||||
BLOCK_MIRROR_X,
|
BLOCK_MIRROR_X,
|
||||||
BLOCK_MIRROR_Y
|
BLOCK_MIRROR_Y
|
||||||
|
|
|
@ -78,6 +78,9 @@ class BOARD_ITEM : public EDA_ITEM
|
||||||
protected:
|
protected:
|
||||||
LAYER_ID m_Layer;
|
LAYER_ID m_Layer;
|
||||||
|
|
||||||
|
static int getTrailingInt( wxString aStr );
|
||||||
|
static int getNextNumberInSequence( std::set<int> aSeq, bool aFillSequenceGaps);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BOARD_ITEM( BOARD_ITEM* aParent, KICAD_T idtype ) :
|
BOARD_ITEM( BOARD_ITEM* aParent, KICAD_T idtype ) :
|
||||||
|
@ -89,6 +92,16 @@ public:
|
||||||
|
|
||||||
virtual const wxPoint& GetPosition() const = 0;
|
virtual const wxPoint& GetPosition() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetCenter()
|
||||||
|
*
|
||||||
|
* This defaults to the same point as returned by GetPosition(), unless
|
||||||
|
* overridden
|
||||||
|
*
|
||||||
|
* @return centre point of the item
|
||||||
|
*/
|
||||||
|
virtual const wxPoint GetCenter() const { return GetPosition(); }
|
||||||
|
|
||||||
virtual void SetPosition( const wxPoint& aPos ) = 0;
|
virtual void SetPosition( const wxPoint& aPos ) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -166,7 +166,8 @@ inline int Mils2mm( double x ) { return KiROUND( x * 25.4 / 1000. ); }
|
||||||
enum EDA_UNITS_T {
|
enum EDA_UNITS_T {
|
||||||
INCHES = 0,
|
INCHES = 0,
|
||||||
MILLIMETRES = 1,
|
MILLIMETRES = 1,
|
||||||
UNSCALED_UNITS = 2
|
UNSCALED_UNITS = 2,
|
||||||
|
DEGREES = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,7 @@ enum main_id
|
||||||
ID_POPUP_CANCEL_CURRENT_COMMAND,
|
ID_POPUP_CANCEL_CURRENT_COMMAND,
|
||||||
ID_POPUP_CLOSE_CURRENT_TOOL,
|
ID_POPUP_CLOSE_CURRENT_TOOL,
|
||||||
ID_POPUP_MOVE_BLOCK,
|
ID_POPUP_MOVE_BLOCK,
|
||||||
|
ID_POPUP_MOVE_BLOCK_EXACT,
|
||||||
ID_POPUP_DRAG_BLOCK,
|
ID_POPUP_DRAG_BLOCK,
|
||||||
ID_POPUP_COPY_BLOCK,
|
ID_POPUP_COPY_BLOCK,
|
||||||
ID_POPUP_ROTATE_BLOCK,
|
ID_POPUP_ROTATE_BLOCK,
|
||||||
|
|
|
@ -301,6 +301,29 @@ public:
|
||||||
return actionList;
|
return actionList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increments the undo inhibit counter. This will indicate that tools
|
||||||
|
* should not create an undo point, as another tool is doing it already,
|
||||||
|
* and considers that its operation is atomic, even if it calls another one
|
||||||
|
* (for example a duplicate calls a move)
|
||||||
|
*/
|
||||||
|
void IncUndoInhibit();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decrements the inhibit counter. An assert is raised if the counter drops
|
||||||
|
* below zero
|
||||||
|
*/
|
||||||
|
void DecUndoInhibit();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report if the tool manager has been told at least once that undo
|
||||||
|
* points should not be created. This can be ignored if the undo point
|
||||||
|
* is still required.
|
||||||
|
*
|
||||||
|
* @return true if undo are inhibited
|
||||||
|
*/
|
||||||
|
bool IsUndoInhibited() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct TOOL_STATE;
|
struct TOOL_STATE;
|
||||||
typedef std::pair<TOOL_EVENT_LIST, TOOL_STATE_FUNC> TRANSITION;
|
typedef std::pair<TOOL_EVENT_LIST, TOOL_STATE_FUNC> TRANSITION;
|
||||||
|
@ -428,6 +451,9 @@ private:
|
||||||
|
|
||||||
/// Flag saying if the currently processed event should be passed to other tools.
|
/// Flag saying if the currently processed event should be passed to other tools.
|
||||||
bool m_passEvent;
|
bool m_passEvent;
|
||||||
|
|
||||||
|
/// Counter of undo inhibitions. When zero, undo is not inhibited
|
||||||
|
int m_undoInhibit;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -193,6 +193,19 @@ protected:
|
||||||
*/
|
*/
|
||||||
void duplicateZone( wxDC* aDC, ZONE_CONTAINER* aZone );
|
void duplicateZone( wxDC* aDC, ZONE_CONTAINER* aZone );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function moveExact
|
||||||
|
* Move the selected item exactly
|
||||||
|
*/
|
||||||
|
void moveExact();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function duplicateItems
|
||||||
|
* Duplicate selected item if possible and start a move
|
||||||
|
* @param aIncrement increment the item number if appropriate
|
||||||
|
*/
|
||||||
|
void duplicateItem( bool aIncrement );
|
||||||
|
|
||||||
// protected so that PCB::IFACE::CreateWindow() is the only factory.
|
// protected so that PCB::IFACE::CreateWindow() is the only factory.
|
||||||
PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||||
|
|
||||||
|
@ -459,6 +472,15 @@ public:
|
||||||
*/
|
*/
|
||||||
int OnHotkeyCopyItem();
|
int OnHotkeyCopyItem();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function OnHotkeyDuplicateOrArrayItem
|
||||||
|
* Duplicate an item (optionally incrementing if necessary and possible)
|
||||||
|
* or invoke array dialog and create an array
|
||||||
|
* @param aIdCommand = the hotkey command id
|
||||||
|
* @return true if item duplicated or arrayed
|
||||||
|
*/
|
||||||
|
bool OnHotkeyDuplicateOrArrayItem( int aIdCommand );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function OnHotkeyMoveItem
|
* Function OnHotkeyMoveItem
|
||||||
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
|
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
|
||||||
|
|
|
@ -46,6 +46,8 @@ set( PCBNEW_DIALOGS
|
||||||
dialogs/dialog_cleaning_options.cpp
|
dialogs/dialog_cleaning_options.cpp
|
||||||
dialogs/dialog_copper_zones.cpp
|
dialogs/dialog_copper_zones.cpp
|
||||||
dialogs/dialog_copper_zones_base.cpp
|
dialogs/dialog_copper_zones_base.cpp
|
||||||
|
dialogs/dialog_create_array.cpp
|
||||||
|
dialogs/dialog_create_array_base.cpp
|
||||||
dialogs/dialog_design_rules.cpp
|
dialogs/dialog_design_rules.cpp
|
||||||
dialogs/dialog_design_rules_base.cpp
|
dialogs/dialog_design_rules_base.cpp
|
||||||
dialogs/dialog_dimension_editor_base.cpp
|
dialogs/dialog_dimension_editor_base.cpp
|
||||||
|
@ -104,6 +106,8 @@ set( PCBNEW_DIALOGS
|
||||||
dialogs/dialog_pcb_text_properties_base.cpp
|
dialogs/dialog_pcb_text_properties_base.cpp
|
||||||
dialogs/dialog_pns_settings.cpp
|
dialogs/dialog_pns_settings.cpp
|
||||||
dialogs/dialog_pns_settings_base.cpp
|
dialogs/dialog_pns_settings_base.cpp
|
||||||
|
dialogs/dialog_move_exact.cpp
|
||||||
|
dialogs/dialog_move_exact_base.cpp
|
||||||
dialogs/dialog_non_copper_zones_properties.cpp
|
dialogs/dialog_non_copper_zones_properties.cpp
|
||||||
dialogs/dialog_non_copper_zones_properties_base.cpp
|
dialogs/dialog_non_copper_zones_properties_base.cpp
|
||||||
dialogs/dialog_pad_properties.cpp
|
dialogs/dialog_pad_properties.cpp
|
||||||
|
|
|
@ -53,14 +53,19 @@
|
||||||
#include <class_dimension.h>
|
#include <class_dimension.h>
|
||||||
#include <class_edge_mod.h>
|
#include <class_edge_mod.h>
|
||||||
|
|
||||||
|
#include <dialogs/dialog_move_exact.h>
|
||||||
|
|
||||||
|
|
||||||
#define BLOCK_COLOR BROWN
|
#define BLOCK_COLOR BROWN
|
||||||
|
|
||||||
// Functions defined here, but used also in other files
|
// Functions defined here, but used also in other files
|
||||||
// These 2 functions are used in modedit to rotate or mirror the whole footprint
|
// These 3 functions are used in modedit to rotate, mirror or move the
|
||||||
// so they are called with force_all = true
|
// whole footprint so they are called with force_all = true
|
||||||
void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
||||||
void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
||||||
|
void MoveMarkedItemsExactly( MODULE* module, const wxPoint& centre,
|
||||||
|
const wxPoint& translation, double rotation,
|
||||||
|
bool force_all = false );
|
||||||
|
|
||||||
// Local functions:
|
// Local functions:
|
||||||
static void DrawMovingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition,
|
static void DrawMovingBlockOutlines( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition,
|
||||||
|
@ -166,6 +171,26 @@ bool FOOTPRINT_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BLOCK_MOVE_EXACT:
|
||||||
|
itemsCount = MarkItemsInBloc( currentModule, GetScreen()->m_BlockLocate );
|
||||||
|
|
||||||
|
if( itemsCount )
|
||||||
|
{
|
||||||
|
wxPoint translation;
|
||||||
|
double rotation = 0;
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT dialog( this, translation, rotation );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_MOVE_EXACT::MOVE_OK )
|
||||||
|
{
|
||||||
|
SaveCopyInUndoList( currentModule, UR_MODEDIT );
|
||||||
|
const wxPoint blockCentre = GetScreen()->m_BlockLocate.Centre();
|
||||||
|
MoveMarkedItemsExactly( currentModule, blockCentre, translation, rotation );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case BLOCK_PRESELECT_MOVE: // Move with preselection list
|
case BLOCK_PRESELECT_MOVE: // Move with preselection list
|
||||||
nextcmd = true;
|
nextcmd = true;
|
||||||
m_canvas->SetMouseCaptureCallback( DrawMovingBlockOutlines );
|
m_canvas->SetMouseCaptureCallback( DrawMovingBlockOutlines );
|
||||||
|
@ -194,7 +219,6 @@ bool FOOTPRINT_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
|
||||||
RotateMarkedItems( currentModule, GetScreen()->m_BlockLocate.Centre() );
|
RotateMarkedItems( currentModule, GetScreen()->m_BlockLocate.Centre() );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case BLOCK_MIRROR_X:
|
case BLOCK_MIRROR_X:
|
||||||
case BLOCK_MIRROR_Y:
|
case BLOCK_MIRROR_Y:
|
||||||
case BLOCK_FLIP: // mirror
|
case BLOCK_FLIP: // mirror
|
||||||
|
@ -706,6 +730,78 @@ void ClearMarkItems( MODULE* module )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MoveMarkedItemsExactly( MODULE* module, const wxPoint& centre,
|
||||||
|
const wxPoint& translation,
|
||||||
|
double rotation, bool force_all )
|
||||||
|
{
|
||||||
|
if( module == NULL )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( module->Reference().IsSelected() || force_all )
|
||||||
|
{
|
||||||
|
module->Reference().RotateTransformWithModule( centre, rotation );
|
||||||
|
module->Reference().MoveTransformWithModule( translation );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( module->Value().IsSelected() || force_all )
|
||||||
|
{
|
||||||
|
module->Value().RotateTransformWithModule( centre, rotation );
|
||||||
|
module->Value().MoveTransformWithModule( translation );
|
||||||
|
}
|
||||||
|
|
||||||
|
D_PAD* pad = module->Pads();
|
||||||
|
|
||||||
|
for( ; pad != NULL; pad = pad->Next() )
|
||||||
|
{
|
||||||
|
if( !pad->IsSelected() && !force_all )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// rotate about centre point,
|
||||||
|
wxPoint newPos = pad->GetPosition();
|
||||||
|
RotatePoint( &newPos, centre, rotation );
|
||||||
|
|
||||||
|
// shift and update
|
||||||
|
newPos += translation;
|
||||||
|
pad->SetPosition( newPos );
|
||||||
|
pad->SetPos0( newPos );
|
||||||
|
|
||||||
|
// finally apply rotation to the pad itself
|
||||||
|
pad->Rotate( newPos, rotation );
|
||||||
|
}
|
||||||
|
|
||||||
|
EDA_ITEM* item = module->GraphicalItems();
|
||||||
|
|
||||||
|
for( ; item != NULL; item = item->Next() )
|
||||||
|
{
|
||||||
|
if( !item->IsSelected() && !force_all )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch( item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
{
|
||||||
|
TEXTE_MODULE* text = static_cast<TEXTE_MODULE*>( item );
|
||||||
|
|
||||||
|
text->RotateTransformWithModule( centre, rotation );
|
||||||
|
text->MoveTransformWithModule( translation );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_EDGE_T:
|
||||||
|
{
|
||||||
|
EDGE_MODULE* em = static_cast<EDGE_MODULE*>( item );
|
||||||
|
em->Rotate( centre, rotation );
|
||||||
|
em->Move( translation );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ClearMarkItems( module );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Mark items inside rect.
|
/* Mark items inside rect.
|
||||||
* Items are inside rect when an end point is inside rect
|
* Items are inside rect when an end point is inside rect
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -54,6 +54,10 @@
|
||||||
#include <class_track.h>
|
#include <class_track.h>
|
||||||
#include <class_zone.h>
|
#include <class_zone.h>
|
||||||
#include <class_marker_pcb.h>
|
#include <class_marker_pcb.h>
|
||||||
|
#include <class_drawsegment.h>
|
||||||
|
#include <class_pcb_text.h>
|
||||||
|
#include <class_mire.h>
|
||||||
|
#include <class_dimension.h>
|
||||||
|
|
||||||
|
|
||||||
/* This is an odd place for this, but CvPcb won't link if it is
|
/* This is an odd place for this, but CvPcb won't link if it is
|
||||||
|
@ -2614,6 +2618,131 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOARD_ITEM* BOARD::DuplicateAndAddItem( const BOARD_ITEM* aItem,
|
||||||
|
bool aIncrementReferences )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* new_item = NULL;
|
||||||
|
|
||||||
|
switch( aItem->Type() )
|
||||||
|
{
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
{
|
||||||
|
MODULE* new_module = new MODULE( *static_cast<const MODULE*>( aItem ) );
|
||||||
|
|
||||||
|
if( aIncrementReferences )
|
||||||
|
{
|
||||||
|
// Take the next available module number
|
||||||
|
new_module->IncrementReference( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Modules.PushBack( new_module );
|
||||||
|
new_item = new_module;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_TEXT_T:
|
||||||
|
{
|
||||||
|
const TEXTE_PCB* old_text = static_cast<const TEXTE_PCB*>( aItem );
|
||||||
|
|
||||||
|
TEXTE_PCB* new_text = new TEXTE_PCB( *old_text );
|
||||||
|
|
||||||
|
m_Drawings.PushBack( new_text );
|
||||||
|
new_item = new_text;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_LINE_T:
|
||||||
|
{
|
||||||
|
DRAWSEGMENT* new_edge = new DRAWSEGMENT(
|
||||||
|
*static_cast<const DRAWSEGMENT*>(aItem) );
|
||||||
|
|
||||||
|
m_Drawings.PushBack( new_edge );
|
||||||
|
new_item = new_edge;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_TRACE_T:
|
||||||
|
{
|
||||||
|
TRACK* new_track = new TRACK(
|
||||||
|
*static_cast<const TRACK*>(aItem) );
|
||||||
|
|
||||||
|
m_Track.PushBack( new_track );
|
||||||
|
new_item = new_track;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_ZONE_AREA_T:
|
||||||
|
{
|
||||||
|
ZONE_CONTAINER* new_zone = new ZONE_CONTAINER(
|
||||||
|
*static_cast<const ZONE_CONTAINER*>(aItem) );
|
||||||
|
|
||||||
|
m_ZoneDescriptorList.push_back( new_zone );
|
||||||
|
new_item = new_zone;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_TARGET_T:
|
||||||
|
{
|
||||||
|
PCB_TARGET* new_target = new PCB_TARGET(
|
||||||
|
*static_cast<const PCB_TARGET*>(aItem) );
|
||||||
|
|
||||||
|
m_Drawings.PushBack( new_target );
|
||||||
|
new_item = new_target;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_DIMENSION_T:
|
||||||
|
{
|
||||||
|
DIMENSION* new_dim = new DIMENSION(
|
||||||
|
*static_cast<const DIMENSION*>(aItem) );
|
||||||
|
|
||||||
|
m_Drawings.PushBack( new_dim );
|
||||||
|
new_item = new_dim;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// Un-handled item for duplication
|
||||||
|
wxASSERT_MSG( false, "Duplication not supported for items of class "
|
||||||
|
+ aItem->GetClass() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString BOARD::GetNextModuleReferenceWithPrefix( const wxString& aPrefix,
|
||||||
|
bool aFillSequenceGaps )
|
||||||
|
{
|
||||||
|
wxString nextRef;
|
||||||
|
|
||||||
|
std::set<int> usedNumbers;
|
||||||
|
|
||||||
|
for( MODULE* module = m_Modules; module; module = module->Next() )
|
||||||
|
{
|
||||||
|
const wxString ref = module->GetReference();
|
||||||
|
wxString remainder;
|
||||||
|
|
||||||
|
// ONly interested in modules with the right prefix
|
||||||
|
if( !ref.StartsWith( aPrefix, &remainder ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// the suffix must be a number
|
||||||
|
if ( !remainder.IsNumber() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
long number;
|
||||||
|
if( remainder.ToCLong( &number ) )
|
||||||
|
usedNumbers.insert( number );
|
||||||
|
}
|
||||||
|
|
||||||
|
int nextNum = 1;
|
||||||
|
|
||||||
|
if( usedNumbers.size() )
|
||||||
|
{
|
||||||
|
nextNum = getNextNumberInSequence( usedNumbers, aFillSequenceGaps );
|
||||||
|
nextRef = wxString::Format( wxT( "%s%i" ), aPrefix, nextNum );
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextRef;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Extracts the board outlines and build a closed polygon
|
/* Extracts the board outlines and build a closed polygon
|
||||||
* from lines, arcs and circle items on edge cut layer
|
* from lines, arcs and circle items on edge cut layer
|
||||||
* Any closed outline inside the main outline is a hole
|
* Any closed outline inside the main outline is a hole
|
||||||
|
|
|
@ -301,6 +301,16 @@ public:
|
||||||
*/
|
*/
|
||||||
BOARD_ITEM* Remove( BOARD_ITEM* aBoardItem );
|
BOARD_ITEM* Remove( BOARD_ITEM* aBoardItem );
|
||||||
|
|
||||||
|
BOARD_ITEM* DuplicateAndAddItem( const BOARD_ITEM* aItem,
|
||||||
|
bool aIncrementReferences );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetNextModuleReferenceWithPrefix
|
||||||
|
* Get the next available module reference with this prefix
|
||||||
|
*/
|
||||||
|
wxString GetNextModuleReferenceWithPrefix( const wxString& aPrefix,
|
||||||
|
bool aFillSequenceGaps );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetRatsnest()
|
* Function GetRatsnest()
|
||||||
* returns list of missing connections between components/tracks.
|
* returns list of missing connections between components/tracks.
|
||||||
|
|
|
@ -195,3 +195,51 @@ void BOARD_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
|
||||||
aCount = 1;
|
aCount = 1;
|
||||||
aLayers[0] = m_Layer;
|
aLayers[0] = m_Layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int BOARD_ITEM::getTrailingInt( wxString aStr )
|
||||||
|
{
|
||||||
|
int number = 0;
|
||||||
|
int base = 1;
|
||||||
|
|
||||||
|
// Trim and extract the trailing numeric part
|
||||||
|
int index = aStr.Len() - 1;
|
||||||
|
while( index >= 0 )
|
||||||
|
{
|
||||||
|
const char chr = aStr.GetChar( index );
|
||||||
|
|
||||||
|
if( chr < '0' || chr > '9' )
|
||||||
|
break;
|
||||||
|
|
||||||
|
number += ( chr - '0' ) * base;
|
||||||
|
base *= 10;
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
int BOARD_ITEM::getNextNumberInSequence( std::set<int> aSeq, bool aFillSequenceGaps)
|
||||||
|
{
|
||||||
|
// By default go to the end of the sequence
|
||||||
|
int candidate = *aSeq.end();
|
||||||
|
|
||||||
|
// Filling in gaps in pad numbering
|
||||||
|
if( aFillSequenceGaps )
|
||||||
|
{
|
||||||
|
// start at the beginning
|
||||||
|
candidate = *aSeq.begin();
|
||||||
|
|
||||||
|
for( std::set<int>::iterator it = aSeq.begin(),
|
||||||
|
itEnd = aSeq.end(); it != itEnd; ++it )
|
||||||
|
{
|
||||||
|
if( *it - candidate > 1 )
|
||||||
|
break;
|
||||||
|
|
||||||
|
candidate = *it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
candidate++;
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
|
|
@ -94,10 +94,41 @@ void DRAWSEGMENT::Copy( DRAWSEGMENT* source )
|
||||||
|
|
||||||
void DRAWSEGMENT::Rotate( const wxPoint& aRotCentre, double aAngle )
|
void DRAWSEGMENT::Rotate( const wxPoint& aRotCentre, double aAngle )
|
||||||
{
|
{
|
||||||
RotatePoint( &m_Start, aRotCentre, aAngle );
|
switch( m_Shape )
|
||||||
RotatePoint( &m_End, aRotCentre, aAngle );
|
{
|
||||||
}
|
case S_ARC:
|
||||||
|
case S_SEGMENT:
|
||||||
|
case S_CIRCLE:
|
||||||
|
// these can all be done by just rotating the start and end points
|
||||||
|
RotatePoint( &m_Start, aRotCentre, aAngle);
|
||||||
|
RotatePoint( &m_End, aRotCentre, aAngle);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_POLYGON:
|
||||||
|
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
|
||||||
|
{
|
||||||
|
RotatePoint( &m_PolyPoints[ii], aRotCentre, aAngle);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_CURVE:
|
||||||
|
RotatePoint( &m_Start, aRotCentre, aAngle);
|
||||||
|
RotatePoint( &m_End, aRotCentre, aAngle);
|
||||||
|
|
||||||
|
for( unsigned int ii = 0; ii < m_BezierPoints.size(); ii++ )
|
||||||
|
{
|
||||||
|
RotatePoint( &m_BezierPoints[ii], aRotCentre, aAngle);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_RECT:
|
||||||
|
default:
|
||||||
|
// un-handled edge transform
|
||||||
|
wxASSERT_MSG( false, wxT( "DRAWSEGMENT::Rotate not implemented for "
|
||||||
|
+ ShowShape( m_Shape ) ) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void DRAWSEGMENT::Flip( const wxPoint& aCentre )
|
void DRAWSEGMENT::Flip( const wxPoint& aCentre )
|
||||||
{
|
{
|
||||||
|
@ -112,6 +143,37 @@ void DRAWSEGMENT::Flip( const wxPoint& aCentre )
|
||||||
SetLayer( FlipLayer( GetLayer() ) );
|
SetLayer( FlipLayer( GetLayer() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const wxPoint DRAWSEGMENT::GetCenter() const
|
||||||
|
{
|
||||||
|
wxPoint c;
|
||||||
|
|
||||||
|
switch( m_Shape )
|
||||||
|
{
|
||||||
|
case S_ARC:
|
||||||
|
case S_CIRCLE:
|
||||||
|
c = m_Start;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_SEGMENT:
|
||||||
|
// Midpoint of the line
|
||||||
|
c = ( GetStart() + GetEnd() ) / 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_POLYGON:
|
||||||
|
case S_RECT:
|
||||||
|
case S_CURVE:
|
||||||
|
c = GetBoundingBox().Centre();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxASSERT_MSG( false, "DRAWSEGMENT::GetCentre not implemented for shape"
|
||||||
|
+ ShowShape( GetShape() ) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
const wxPoint DRAWSEGMENT::GetArcEnd() const
|
const wxPoint DRAWSEGMENT::GetArcEnd() const
|
||||||
{
|
{
|
||||||
wxPoint endPoint; // start of arc
|
wxPoint endPoint; // start of arc
|
||||||
|
|
|
@ -117,7 +117,7 @@ public:
|
||||||
// m_Start, m_End, and m_Angle.
|
// m_Start, m_End, and m_Angle.
|
||||||
// No Set...() function for these attributes.
|
// No Set...() function for these attributes.
|
||||||
|
|
||||||
const wxPoint& GetCenter() const { return m_Start; }
|
const wxPoint GetCenter() const; //override
|
||||||
const wxPoint& GetArcStart() const { return m_End; }
|
const wxPoint& GetArcStart() const { return m_End; }
|
||||||
const wxPoint GetArcEnd() const;
|
const wxPoint GetArcEnd() const;
|
||||||
|
|
||||||
|
|
|
@ -1131,3 +1131,122 @@ void MODULE::SetOrientation( double newangle )
|
||||||
CalculateBoundingBox();
|
CalculateBoundingBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOARD_ITEM* MODULE::DuplicateAndAddItem( const BOARD_ITEM* aItem,
|
||||||
|
bool aIncrementPadNumbers )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* new_item = NULL;
|
||||||
|
|
||||||
|
switch( aItem->Type() )
|
||||||
|
{
|
||||||
|
case PCB_PAD_T:
|
||||||
|
{
|
||||||
|
D_PAD* new_pad = new D_PAD( *static_cast<const D_PAD*>( aItem ) );
|
||||||
|
|
||||||
|
if( aIncrementPadNumbers )
|
||||||
|
{
|
||||||
|
// Take the next available pad number
|
||||||
|
new_pad->IncrementPadName( true, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
Pads().PushBack( new_pad );
|
||||||
|
new_item = new_pad;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
{
|
||||||
|
const TEXTE_MODULE* old_text = static_cast<const TEXTE_MODULE*>( aItem );
|
||||||
|
|
||||||
|
// do not duplicate value or reference fields
|
||||||
|
// (there can only be one of each)
|
||||||
|
if( old_text->GetType() == TEXTE_MODULE::TEXT_is_DIVERS )
|
||||||
|
{
|
||||||
|
TEXTE_MODULE* new_text = new TEXTE_MODULE( *old_text );
|
||||||
|
|
||||||
|
GraphicalItems().PushBack( new_text );
|
||||||
|
new_item = new_text;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_EDGE_T:
|
||||||
|
{
|
||||||
|
EDGE_MODULE* new_edge = new EDGE_MODULE(
|
||||||
|
*static_cast<const EDGE_MODULE*>(aItem) );
|
||||||
|
|
||||||
|
GraphicalItems().PushBack( new_edge );
|
||||||
|
new_item = new_edge;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
// Ignore the module itself
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Un-handled item for duplication
|
||||||
|
wxASSERT_MSG( false, "Duplication not supported for items of class "
|
||||||
|
+ aItem->GetClass() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString MODULE::GetNextPadName( bool aFillSequenceGaps ) const
|
||||||
|
{
|
||||||
|
std::set<int> usedNumbers;
|
||||||
|
|
||||||
|
// Create a set of used pad numbers
|
||||||
|
for( D_PAD* pad = Pads(); pad; pad = pad->Next() )
|
||||||
|
{
|
||||||
|
int padNumber = getTrailingInt( pad->GetPadName() );
|
||||||
|
usedNumbers.insert( padNumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
const int nextNum = getNextNumberInSequence( usedNumbers, aFillSequenceGaps );
|
||||||
|
|
||||||
|
return wxString::Format( wxT( "%i" ), nextNum );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString MODULE::GetReferencePrefix() const
|
||||||
|
{
|
||||||
|
wxString prefix = GetReference();
|
||||||
|
|
||||||
|
int strIndex = prefix.length() - 1;
|
||||||
|
while( strIndex >= 0 )
|
||||||
|
{
|
||||||
|
const wxUniChar chr = prefix.GetChar( strIndex );
|
||||||
|
|
||||||
|
// numeric suffix
|
||||||
|
if( chr >= '0' && chr <= '9' )
|
||||||
|
break;
|
||||||
|
|
||||||
|
strIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix = prefix.Mid( 0, strIndex );
|
||||||
|
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool MODULE::IncrementReference( bool aFillSequenceGaps )
|
||||||
|
{
|
||||||
|
BOARD* board = GetBoard();
|
||||||
|
|
||||||
|
if( !board )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool success = false;
|
||||||
|
const wxString prefix = GetReferencePrefix();
|
||||||
|
const wxString newReference = board->GetNextModuleReferenceWithPrefix(
|
||||||
|
prefix, aFillSequenceGaps );
|
||||||
|
|
||||||
|
if( !newReference.IsEmpty() )
|
||||||
|
{
|
||||||
|
SetReference( newReference );
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
|
@ -405,6 +405,15 @@ public:
|
||||||
m_Reference->SetText( aReference );
|
m_Reference->SetText( aReference );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetReference prefix
|
||||||
|
* Gets the alphabetic prefix of the module reference - e.g.
|
||||||
|
* R1 -> R
|
||||||
|
* IC34 -> IC
|
||||||
|
* @return the reference prefix (may be empty)
|
||||||
|
*/
|
||||||
|
wxString GetReferencePrefix() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetValue
|
* Function GetValue
|
||||||
* @return const wxString& - the value text.
|
* @return const wxString& - the value text.
|
||||||
|
@ -431,6 +440,17 @@ public:
|
||||||
TEXTE_MODULE& Value() const { return *m_Value; }
|
TEXTE_MODULE& Value() const { return *m_Value; }
|
||||||
TEXTE_MODULE& Reference() const { return *m_Reference; }
|
TEXTE_MODULE& Reference() const { return *m_Reference; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function INcrementReference
|
||||||
|
* Increments the module's reference, if possible. A reference with
|
||||||
|
* a numerical suffix and an optional alphabetical prefix can be
|
||||||
|
* incremented: "A1" and "1" can be, "B" can't.
|
||||||
|
*
|
||||||
|
* @param aFillSequenceGaps if true, the next reference in a sequence
|
||||||
|
* like A1,A3,A4 will be A2. If false, it will be A5.
|
||||||
|
* @return true if the reference was incremented.
|
||||||
|
*/
|
||||||
|
bool IncrementReference( bool aFillSequenceGaps );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function FindPadByName
|
* Function FindPadByName
|
||||||
|
@ -462,6 +482,16 @@ public:
|
||||||
*/
|
*/
|
||||||
unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T( INCLUDE_NPTH ) ) const;
|
unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T( INCLUDE_NPTH ) ) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetNextPadName
|
||||||
|
* returns the next available pad name in the module
|
||||||
|
*
|
||||||
|
* @param aFillSequenceGaps true if the numbering should "fill in" gaps in
|
||||||
|
* the sequence, else return the highest value + 1
|
||||||
|
* @return the next available pad name
|
||||||
|
*/
|
||||||
|
wxString GetNextPadName( bool aFillSequenceGaps ) const;
|
||||||
|
|
||||||
double GetArea() const { return m_Surface; }
|
double GetArea() const { return m_Surface; }
|
||||||
|
|
||||||
time_t GetLink() const { return m_Link; }
|
time_t GetLink() const { return m_Link; }
|
||||||
|
@ -473,6 +503,14 @@ public:
|
||||||
int GetPlacementCost90() const { return m_CntRot90; }
|
int GetPlacementCost90() const { return m_CntRot90; }
|
||||||
void SetPlacementCost90( int aCost ) { m_CntRot90 = aCost; }
|
void SetPlacementCost90( int aCost ) { m_CntRot90 = aCost; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function DuplicateAndAddItem
|
||||||
|
* Duplicate a given item within the module
|
||||||
|
* @return the new item, or NULL if the item could not be duplicated
|
||||||
|
*/
|
||||||
|
BOARD_ITEM* DuplicateAndAddItem( const BOARD_ITEM* item,
|
||||||
|
bool aIncrementPadNumbers );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Add3DModel
|
* Function Add3DModel
|
||||||
* adds \a a3DModel definition to the end of the 3D model list.
|
* adds \a a3DModel definition to the end of the 3D model list.
|
||||||
|
|
|
@ -408,6 +408,15 @@ void D_PAD::SetPadName( const wxString& name )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void D_PAD::IncrementPadName( bool aSkipUnconnectable, bool aFillSequenceGaps )
|
||||||
|
{
|
||||||
|
bool skip = aSkipUnconnectable && ( GetAttribute() == PAD_HOLE_NOT_PLATED );
|
||||||
|
|
||||||
|
if( !skip )
|
||||||
|
SetPadName( GetParent()->GetNextPadName( aFillSequenceGaps ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void D_PAD::Copy( D_PAD* source )
|
void D_PAD::Copy( D_PAD* source )
|
||||||
{
|
{
|
||||||
if( source == NULL )
|
if( source == NULL )
|
||||||
|
|
|
@ -103,6 +103,15 @@ public:
|
||||||
void SetPadName( const wxString& name ); // Change pad name
|
void SetPadName( const wxString& name ); // Change pad name
|
||||||
const wxString GetPadName() const;
|
const wxString GetPadName() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function IncrementPadName
|
||||||
|
*
|
||||||
|
* Increments the pad name to the next available name in the module.
|
||||||
|
*
|
||||||
|
* @param aSkipUnconnectable skips any pads that are not connectable (for example NPTH)
|
||||||
|
*/
|
||||||
|
void IncrementPadName( bool aSkipUnconnectable, bool aFillSequenceGaps );
|
||||||
|
|
||||||
bool PadNameEqual( const D_PAD* other ) const
|
bool PadNameEqual( const D_PAD* other ) const
|
||||||
{
|
{
|
||||||
return m_NumPadName == other->m_NumPadName; // hide tricks behind sensible API
|
return m_NumPadName == other->m_NumPadName; // hide tricks behind sensible API
|
||||||
|
|
|
@ -0,0 +1,512 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 John Beard, john.j.beard@gmail.com
|
||||||
|
* Copyright (C) 1992-2014 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 <wxPcbStruct.h>
|
||||||
|
#include <base_units.h>
|
||||||
|
|
||||||
|
#include <class_drawpanel.h>
|
||||||
|
#include <class_board.h>
|
||||||
|
#include <class_module.h>
|
||||||
|
|
||||||
|
#include "dialog_create_array.h"
|
||||||
|
|
||||||
|
|
||||||
|
// initialise statics
|
||||||
|
DIALOG_CREATE_ARRAY::CREATE_ARRAY_DIALOG_ENTRIES DIALOG_CREATE_ARRAY::m_options;
|
||||||
|
|
||||||
|
// character set
|
||||||
|
// NOTE: do not change the order of this relative to the ARRAY_NUMBERING_TYPE_T enum
|
||||||
|
static const wxString charSetDescriptions[] =
|
||||||
|
{
|
||||||
|
"Numerals (0,1,2,...,9,10)",
|
||||||
|
"Hexadecimal (0,1,...,F,10,...)",
|
||||||
|
"Alphabet, minus IOSQXZ",
|
||||||
|
"Alphabet, full 26 characters"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY::DIALOG_CREATE_ARRAY( PCB_BASE_FRAME* aParent, wxPoint aOrigPos,
|
||||||
|
ARRAY_OPTIONS** aSettings ) :
|
||||||
|
DIALOG_CREATE_ARRAY_BASE( aParent ),
|
||||||
|
CONFIG_SAVE_RESTORE_WINDOW( m_options.m_optionsSet ),
|
||||||
|
m_settings( aSettings ),
|
||||||
|
m_originalItemPosition( aOrigPos )
|
||||||
|
{
|
||||||
|
// Set up numbering scheme drop downs
|
||||||
|
m_choicePriAxisNumbering->Set( boost::size( charSetDescriptions ), charSetDescriptions );
|
||||||
|
m_choiceSecAxisNumbering->Set( boost::size( charSetDescriptions ), charSetDescriptions );
|
||||||
|
m_choiceCircNumberingType->Set( boost::size( charSetDescriptions ), charSetDescriptions );;
|
||||||
|
|
||||||
|
m_choicePriAxisNumbering->SetSelection( 0 );
|
||||||
|
m_choiceSecAxisNumbering->SetSelection( 0 );
|
||||||
|
m_choiceCircNumberingType->SetSelection( 0 );
|
||||||
|
|
||||||
|
Add( m_entryNx, m_options.m_gridNx );
|
||||||
|
Add( m_entryNy, m_options.m_gridNy );
|
||||||
|
Add( m_entryDx, m_options.m_gridDx );
|
||||||
|
Add( m_entryDy, m_options.m_gridDy );
|
||||||
|
|
||||||
|
Add( m_entryOffsetX, m_options.m_gridOffsetX );
|
||||||
|
Add( m_entryOffsetY, m_options.m_gridOffsetY );
|
||||||
|
Add( m_entryStagger, m_options.m_gridStagger );
|
||||||
|
|
||||||
|
Add( m_radioBoxGridStaggerType, m_options.m_gridStaggerType );
|
||||||
|
|
||||||
|
Add( m_radioBoxGridNumberingAxis, m_options.m_gridNumberingAxis );
|
||||||
|
Add( m_checkBoxGridReverseNumbering, m_options.m_gridNumberingReverseAlternate );
|
||||||
|
|
||||||
|
Add( m_entryCentreX, m_options.m_circCentreX );
|
||||||
|
Add( m_entryCentreY, m_options.m_circCentreY );
|
||||||
|
Add( m_entryCircAngle, m_options.m_circAngle );
|
||||||
|
Add( m_entryCircCount, m_options.m_circCount );
|
||||||
|
Add( m_entryRotateItemsCb, m_options.m_circRotate );
|
||||||
|
Add( m_entryCircNumberingStart, m_options.m_circNumberingOffset );
|
||||||
|
|
||||||
|
Add( m_gridTypeNotebook, m_options.m_arrayTypeTab );
|
||||||
|
|
||||||
|
Add( m_radioBoxGridNumberingScheme, m_options.m_grid2dArrayNumbering );
|
||||||
|
Add( m_choicePriAxisNumbering, m_options.m_gridPriAxisNumScheme );
|
||||||
|
Add( m_choiceSecAxisNumbering, m_options.m_gridSecAxisNumScheme );
|
||||||
|
|
||||||
|
Add( m_entryGridPriNumberingOffset, m_options.m_gridPriNumberingOffset );
|
||||||
|
Add( m_entryGridSecNumberingOffset, m_options.m_gridSecNumberingOffset );
|
||||||
|
|
||||||
|
|
||||||
|
RestoreConfigToControls();
|
||||||
|
|
||||||
|
// Load units into labels
|
||||||
|
{
|
||||||
|
const wxString lengthUnit = GetAbbreviatedUnitsLabel( g_UserUnit );
|
||||||
|
|
||||||
|
m_unitLabelCentreX->SetLabelText( lengthUnit );
|
||||||
|
m_unitLabelCentreY->SetLabelText( lengthUnit );
|
||||||
|
m_unitLabelDx->SetLabelText( lengthUnit );
|
||||||
|
m_unitLabelDy->SetLabelText( lengthUnit );
|
||||||
|
m_unitLabelOffsetX->SetLabelText( lengthUnit );
|
||||||
|
m_unitLabelOffsetY->SetLabelText( lengthUnit );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run the callbacks once to process the dialog contents
|
||||||
|
setControlEnablement();
|
||||||
|
calculateCircularArrayProperties();
|
||||||
|
|
||||||
|
Fit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::OnParameterChanged( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
const wxObject* evObj = event.GetEventObject();
|
||||||
|
|
||||||
|
// some controls result in a change of enablement
|
||||||
|
if( evObj == m_radioBoxGridNumberingScheme
|
||||||
|
|| evObj == m_checkBoxGridRestartNumbering )
|
||||||
|
{
|
||||||
|
setControlEnablement();
|
||||||
|
}
|
||||||
|
if( evObj == m_entryCentreX || evObj == m_entryCentreY )
|
||||||
|
{
|
||||||
|
calculateCircularArrayProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::OnCancelClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
EndModal( CREATE_ARRAY_ABORT );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const std::string& alphabetFromNumberingScheme(
|
||||||
|
DIALOG_CREATE_ARRAY::ARRAY_NUMBERING_TYPE_T type )
|
||||||
|
{
|
||||||
|
static const std::string alphaNumeric = "0123456789";
|
||||||
|
static const std::string alphaHex = "0123456789ABCDEF";
|
||||||
|
static const std::string alphaFull = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
static const std::string alphaNoIOSQXZ = "ABCDEFGHJKLNMPRTUVWY";
|
||||||
|
static const std::string alphaEmpty = "";
|
||||||
|
|
||||||
|
switch( type )
|
||||||
|
{
|
||||||
|
case DIALOG_CREATE_ARRAY::NUMBERING_NUMERIC:
|
||||||
|
return alphaNumeric;
|
||||||
|
|
||||||
|
case DIALOG_CREATE_ARRAY::NUMBERING_HEX:
|
||||||
|
return alphaHex;
|
||||||
|
|
||||||
|
case DIALOG_CREATE_ARRAY::NUMBERING_ALPHA_NO_IOSQXZ:
|
||||||
|
return alphaNoIOSQXZ;
|
||||||
|
|
||||||
|
case DIALOG_CREATE_ARRAY::NUMBERING_ALPHA_FULL:
|
||||||
|
return alphaFull;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxASSERT_MSG( false, wxString( "Un-handled numbering scheme: " ) << type );
|
||||||
|
}
|
||||||
|
|
||||||
|
return alphaEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return False for schemes like 0,1...9,10
|
||||||
|
* True for schemes like A,B..Z,AA (where the tens column starts with char 0)
|
||||||
|
*/
|
||||||
|
static bool schemeNonUnitColsStartAt0( DIALOG_CREATE_ARRAY::ARRAY_NUMBERING_TYPE_T type )
|
||||||
|
{
|
||||||
|
return type == DIALOG_CREATE_ARRAY::NUMBERING_ALPHA_FULL
|
||||||
|
|| type == DIALOG_CREATE_ARRAY::NUMBERING_ALPHA_NO_IOSQXZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool getNumberingOffset( const std::string& str,
|
||||||
|
DIALOG_CREATE_ARRAY::ARRAY_NUMBERING_TYPE_T type,
|
||||||
|
int& offsetToFill )
|
||||||
|
{
|
||||||
|
const std::string alphabet = alphabetFromNumberingScheme( type );
|
||||||
|
|
||||||
|
wxASSERT_MSG( !alphabet.empty(), wxString(
|
||||||
|
"Unable to determine alphabet for numbering scheme: " ) << type );
|
||||||
|
|
||||||
|
int offset = 0;
|
||||||
|
const int radix = alphabet.length();
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < str.length(); i++ )
|
||||||
|
{
|
||||||
|
int chIndex = alphabet.find( str[i], 0 );
|
||||||
|
|
||||||
|
if( chIndex == wxNOT_FOUND )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const bool start0 = schemeNonUnitColsStartAt0( type );
|
||||||
|
|
||||||
|
// eg "AA" is actually index 27, not 26
|
||||||
|
if( start0 && i < str.length() - 1 )
|
||||||
|
chIndex++;
|
||||||
|
|
||||||
|
offset *= radix;
|
||||||
|
offset += chIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
offsetToFill = offset;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::OnOkClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
ARRAY_OPTIONS* newSettings = NULL;
|
||||||
|
|
||||||
|
const wxWindow* page = m_gridTypeNotebook->GetCurrentPage();
|
||||||
|
|
||||||
|
if( page == m_gridPanel )
|
||||||
|
{
|
||||||
|
ARRAY_GRID_OPTIONS* newGrid = new ARRAY_GRID_OPTIONS();
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
// ints
|
||||||
|
ok = ok && m_entryNx->GetValue().ToLong( &newGrid->m_nx );
|
||||||
|
ok = ok && m_entryNy->GetValue().ToLong( &newGrid->m_ny );
|
||||||
|
|
||||||
|
newGrid->m_delta.x = DoubleValueFromString( g_UserUnit, m_entryDx->GetValue() );
|
||||||
|
newGrid->m_delta.y = DoubleValueFromString( g_UserUnit, m_entryDy->GetValue() );
|
||||||
|
|
||||||
|
newGrid->m_offset.x = DoubleValueFromString( g_UserUnit, m_entryOffsetX->GetValue() );
|
||||||
|
newGrid->m_offset.y = DoubleValueFromString( g_UserUnit, m_entryOffsetY->GetValue() );
|
||||||
|
|
||||||
|
ok = ok && m_entryStagger->GetValue().ToLong( &newGrid->m_stagger );
|
||||||
|
|
||||||
|
newGrid->m_stagger_rows = m_radioBoxGridStaggerType->GetSelection() == 0;
|
||||||
|
|
||||||
|
newGrid->m_horizontalThenVertical = m_radioBoxGridNumberingAxis->GetSelection() == 0;
|
||||||
|
newGrid->m_reverseNumberingAlternate = m_checkBoxGridReverseNumbering->GetValue();
|
||||||
|
|
||||||
|
newGrid->m_2dArrayNumbering = m_radioBoxGridNumberingScheme->GetSelection() != 0;
|
||||||
|
|
||||||
|
// this is only correct if you set the choice up according to the enum size and order
|
||||||
|
ok = ok && m_choicePriAxisNumbering->GetSelection() < NUMBERING_TYPE_Max
|
||||||
|
&& m_choiceSecAxisNumbering->GetSelection() < NUMBERING_TYPE_Max;
|
||||||
|
|
||||||
|
// mind undefined casts to enums (should not be able to happen)
|
||||||
|
if( ok )
|
||||||
|
{
|
||||||
|
newGrid->m_priAxisNumType =
|
||||||
|
(ARRAY_NUMBERING_TYPE_T) m_choicePriAxisNumbering->GetSelection();
|
||||||
|
newGrid->m_secAxisNumType =
|
||||||
|
(ARRAY_NUMBERING_TYPE_T) m_choiceSecAxisNumbering->GetSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Work out the offsets for the numbering
|
||||||
|
ok = ok && getNumberingOffset(
|
||||||
|
m_entryGridPriNumberingOffset->GetValue().ToStdString(),
|
||||||
|
newGrid->m_priAxisNumType, newGrid->m_numberingOffsetX );
|
||||||
|
|
||||||
|
if( newGrid->m_2dArrayNumbering )
|
||||||
|
ok = ok && getNumberingOffset(
|
||||||
|
m_entryGridSecNumberingOffset->GetValue().ToStdString(),
|
||||||
|
newGrid->m_secAxisNumType, newGrid->m_numberingOffsetY );
|
||||||
|
|
||||||
|
newGrid->m_shouldRenumber = m_checkBoxGridRestartNumbering->GetValue();
|
||||||
|
|
||||||
|
// Only use settings if all values are good
|
||||||
|
if( ok )
|
||||||
|
newSettings = newGrid;
|
||||||
|
}
|
||||||
|
else if( page == m_circularPanel )
|
||||||
|
{
|
||||||
|
ARRAY_CIRCULAR_OPTIONS* newCirc = new ARRAY_CIRCULAR_OPTIONS();
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
newCirc->m_centre.x = DoubleValueFromString( g_UserUnit, m_entryCentreX->GetValue() );
|
||||||
|
newCirc->m_centre.y = DoubleValueFromString( g_UserUnit, m_entryCentreY->GetValue() );
|
||||||
|
|
||||||
|
newCirc->m_angle = DoubleValueFromString( DEGREES, m_entryCircAngle->GetValue() );
|
||||||
|
ok = ok && m_entryCircCount->GetValue().ToLong( &newCirc->m_nPts );
|
||||||
|
|
||||||
|
newCirc->m_rotateItems = m_entryRotateItemsCb->GetValue();
|
||||||
|
|
||||||
|
newCirc->m_shouldRenumber = m_checkBoxCircRestartNumbering->GetValue();
|
||||||
|
|
||||||
|
// This is only correct if you set the choice up according to the enum size and order
|
||||||
|
ok = ok && m_choiceCircNumberingType->GetSelection() < NUMBERING_TYPE_Max;
|
||||||
|
|
||||||
|
// Mind undefined casts to enums (should not be able to happen)
|
||||||
|
if( ok )
|
||||||
|
newCirc->m_numberingType =
|
||||||
|
(ARRAY_NUMBERING_TYPE_T) m_choiceCircNumberingType->GetSelection();
|
||||||
|
|
||||||
|
ok = ok && m_entryCircNumberingStart->GetValue().ToLong( &newCirc->m_numberingOffset );
|
||||||
|
|
||||||
|
// Only use settings if all values are good
|
||||||
|
if( ok )
|
||||||
|
newSettings = newCirc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we got good settings, send them out and finish
|
||||||
|
if( newSettings )
|
||||||
|
{
|
||||||
|
delete *m_settings;
|
||||||
|
|
||||||
|
// assign pointer and ownership here
|
||||||
|
*m_settings = newSettings;
|
||||||
|
|
||||||
|
ReadConfigFromControls();
|
||||||
|
|
||||||
|
EndModal( CREATE_ARRAY_OK );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::setControlEnablement()
|
||||||
|
{
|
||||||
|
const bool renumber = m_checkBoxGridRestartNumbering->GetValue();
|
||||||
|
|
||||||
|
// If we're not renumbering, we can't set the numbering scheme
|
||||||
|
// or axis numbering types
|
||||||
|
m_radioBoxGridNumberingScheme->Enable( renumber );
|
||||||
|
m_labelPriAxisNumbering->Enable( renumber );
|
||||||
|
m_choicePriAxisNumbering->Enable( renumber );
|
||||||
|
|
||||||
|
// Disable the secondary axis numbering option if the
|
||||||
|
// numbering scheme doesn't have two axes
|
||||||
|
const bool num2d = m_radioBoxGridNumberingScheme->GetSelection() != 0;
|
||||||
|
|
||||||
|
m_labelSecAxisNumbering->Enable( renumber && num2d );
|
||||||
|
m_choiceSecAxisNumbering->Enable( renumber && num2d );
|
||||||
|
|
||||||
|
// We can only set an offset if we renumber
|
||||||
|
m_labelGridNumberingOffset->Enable( renumber );
|
||||||
|
m_entryGridPriNumberingOffset->Enable( renumber );
|
||||||
|
m_entryGridSecNumberingOffset->Enable( renumber && num2d );
|
||||||
|
|
||||||
|
|
||||||
|
// Circular array options
|
||||||
|
const bool circRenumber = m_checkBoxCircRestartNumbering->GetValue();
|
||||||
|
m_choiceCircNumberingType->Enable( circRenumber );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::calculateCircularArrayProperties()
|
||||||
|
{
|
||||||
|
wxPoint centre;
|
||||||
|
|
||||||
|
centre.x = DoubleValueFromString( g_UserUnit, m_entryCentreX->GetValue() );
|
||||||
|
centre.y = DoubleValueFromString( g_UserUnit, m_entryCentreY->GetValue() );
|
||||||
|
|
||||||
|
// FInd the radius, etc of the circle
|
||||||
|
centre -= m_originalItemPosition;
|
||||||
|
|
||||||
|
const double radius = VECTOR2I(centre.x, centre.y).EuclideanNorm();
|
||||||
|
|
||||||
|
m_labelCircRadiusValue->SetLabelText( StringFromValue( g_UserUnit, int(radius), true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ARRAY OPTION implementation functions --------------------------------------
|
||||||
|
|
||||||
|
std::string DIALOG_CREATE_ARRAY::ARRAY_OPTIONS::getCoordinateNumber( int n,
|
||||||
|
ARRAY_NUMBERING_TYPE_T type )
|
||||||
|
{
|
||||||
|
std::string itemNum;
|
||||||
|
const std::string& alphabet = alphabetFromNumberingScheme( type );
|
||||||
|
|
||||||
|
if( !alphabet.empty() )
|
||||||
|
{
|
||||||
|
const bool nonUnitColsStartAt0 = schemeNonUnitColsStartAt0( type );
|
||||||
|
|
||||||
|
bool firstRound = true;
|
||||||
|
int radix = alphabet.length();
|
||||||
|
|
||||||
|
do {
|
||||||
|
int modN = n % radix;
|
||||||
|
|
||||||
|
if( nonUnitColsStartAt0 && !firstRound )
|
||||||
|
modN--; // Start the "tens/hundreds/etc column" at "Ax", not "Bx"
|
||||||
|
|
||||||
|
itemNum.insert( 0, 1, alphabet[modN] );
|
||||||
|
|
||||||
|
n /= radix;
|
||||||
|
firstRound = false;
|
||||||
|
} while( n );
|
||||||
|
}
|
||||||
|
|
||||||
|
return itemNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString DIALOG_CREATE_ARRAY::ARRAY_OPTIONS::InterpolateNumberIntoString(
|
||||||
|
int aN, const wxString& aPattern ) const
|
||||||
|
{
|
||||||
|
wxString newStr( aPattern );
|
||||||
|
newStr.Replace( "%s", GetItemNumber( aN ), false );
|
||||||
|
|
||||||
|
return newStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int DIALOG_CREATE_ARRAY::ARRAY_GRID_OPTIONS::GetArraySize() const
|
||||||
|
{
|
||||||
|
return m_nx * m_ny;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxPoint DIALOG_CREATE_ARRAY::ARRAY_GRID_OPTIONS::getGridCoords( int n ) const
|
||||||
|
{
|
||||||
|
const int axisSize = m_horizontalThenVertical ? m_nx : m_ny;
|
||||||
|
|
||||||
|
int x = n % axisSize;
|
||||||
|
int y = n / axisSize;
|
||||||
|
|
||||||
|
// reverse on this row/col?
|
||||||
|
if( m_reverseNumberingAlternate && ( y % 2 ) )
|
||||||
|
x = axisSize - x - 1;
|
||||||
|
|
||||||
|
wxPoint coords( x, y );
|
||||||
|
|
||||||
|
return coords;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::ARRAY_GRID_OPTIONS::TransformItem( int n, BOARD_ITEM* item,
|
||||||
|
const wxPoint& rotPoint ) const
|
||||||
|
{
|
||||||
|
wxPoint point;
|
||||||
|
|
||||||
|
wxPoint coords = getGridCoords( n );
|
||||||
|
|
||||||
|
// swap axes if needed
|
||||||
|
if( !m_horizontalThenVertical )
|
||||||
|
std::swap( coords.x, coords.y );
|
||||||
|
|
||||||
|
point.x = coords.x * m_delta.x + coords.y * m_offset.x;
|
||||||
|
point.y = coords.y * m_delta.y + coords.x * m_offset.y;
|
||||||
|
|
||||||
|
if( abs( m_stagger ) > 1 )
|
||||||
|
{
|
||||||
|
const int stagger = abs( m_stagger );
|
||||||
|
const bool sr = m_stagger_rows;
|
||||||
|
const int stagger_idx = ( ( sr ? coords.y : coords.x ) % stagger );
|
||||||
|
|
||||||
|
wxPoint stagger_delta( ( sr ? m_delta.x : m_offset.x ),
|
||||||
|
( sr ? m_offset.y : m_delta.y ) );
|
||||||
|
|
||||||
|
// Stagger to the left/up if the sign of the stagger is negative
|
||||||
|
point += stagger_delta * copysign( stagger_idx, m_stagger ) / stagger;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is already relative to the first array entry
|
||||||
|
item->Move( point );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString DIALOG_CREATE_ARRAY::ARRAY_GRID_OPTIONS::GetItemNumber( int n ) const
|
||||||
|
{
|
||||||
|
wxString itemNum;
|
||||||
|
|
||||||
|
if( m_2dArrayNumbering )
|
||||||
|
{
|
||||||
|
wxPoint coords = getGridCoords( n );
|
||||||
|
|
||||||
|
itemNum += getCoordinateNumber( coords.x + m_numberingOffsetX, m_priAxisNumType );
|
||||||
|
itemNum += getCoordinateNumber( coords.y + m_numberingOffsetY, m_secAxisNumType );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
itemNum += getCoordinateNumber( n + m_numberingOffsetX, m_priAxisNumType );
|
||||||
|
}
|
||||||
|
|
||||||
|
return itemNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int DIALOG_CREATE_ARRAY::ARRAY_CIRCULAR_OPTIONS::GetArraySize() const
|
||||||
|
{
|
||||||
|
return m_nPts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CREATE_ARRAY::ARRAY_CIRCULAR_OPTIONS::TransformItem( int n, BOARD_ITEM* item,
|
||||||
|
const wxPoint& rotPoint ) const
|
||||||
|
{
|
||||||
|
double angle;
|
||||||
|
|
||||||
|
if( m_angle == 0 )
|
||||||
|
// angle is zero, divide evenly into m_nPts
|
||||||
|
angle = 3600.0 * n / float(m_nPts);
|
||||||
|
else
|
||||||
|
// n'th step
|
||||||
|
angle = m_angle * n;
|
||||||
|
|
||||||
|
item->Rotate( m_centre, angle );
|
||||||
|
|
||||||
|
// take off the rotation (but not the translation) if needed
|
||||||
|
if( !m_rotateItems )
|
||||||
|
item->Rotate( item->GetCenter(), -angle );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString DIALOG_CREATE_ARRAY::ARRAY_CIRCULAR_OPTIONS::GetItemNumber( int aN ) const
|
||||||
|
{
|
||||||
|
return getCoordinateNumber( aN + m_numberingOffset, m_numberingType );
|
||||||
|
}
|
|
@ -0,0 +1,360 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 John Beard, john.j.beard@gmail.com
|
||||||
|
* Copyright (C) 1992-2014 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 __DIALOG_CREATE_ARRAY__
|
||||||
|
#define __DIALOG_CREATE_ARRAY__
|
||||||
|
|
||||||
|
// Include the wxFormBuider header base:
|
||||||
|
#include <dialog_create_array_base.h>
|
||||||
|
|
||||||
|
#include <boost/bimap.hpp>
|
||||||
|
|
||||||
|
class CONFIG_SAVE_RESTORE_WINDOW
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
enum CONFIG_CTRL_TYPE_T
|
||||||
|
{
|
||||||
|
CFG_CTRL_TEXT,
|
||||||
|
CFG_CTRL_CHECKBOX,
|
||||||
|
CFG_CTRL_RADIOBOX,
|
||||||
|
CFG_CTRL_CHOICE,
|
||||||
|
CFG_CTRL_TAB
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CONFIG_CTRL_T
|
||||||
|
{
|
||||||
|
wxControl* control;
|
||||||
|
CONFIG_CTRL_TYPE_T type;
|
||||||
|
void* dest;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<CONFIG_CTRL_T> ctrls;
|
||||||
|
bool& valid;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CONFIG_SAVE_RESTORE_WINDOW( bool& validFlag ) :
|
||||||
|
valid( validFlag )
|
||||||
|
{}
|
||||||
|
|
||||||
|
void Add( wxRadioBox* ctrl, int& dest )
|
||||||
|
{
|
||||||
|
CONFIG_CTRL_T ctrlInfo = { ctrl, CFG_CTRL_RADIOBOX, (void*) &dest };
|
||||||
|
|
||||||
|
ctrls.push_back( ctrlInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add( wxCheckBox* ctrl, bool& dest )
|
||||||
|
{
|
||||||
|
CONFIG_CTRL_T ctrlInfo = { ctrl, CFG_CTRL_CHECKBOX, (void*) &dest };
|
||||||
|
|
||||||
|
ctrls.push_back( ctrlInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add( wxTextCtrl* ctrl, std::string& dest )
|
||||||
|
{
|
||||||
|
CONFIG_CTRL_T ctrlInfo = { ctrl, CFG_CTRL_TEXT, (void*) &dest };
|
||||||
|
|
||||||
|
ctrls.push_back( ctrlInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add( wxChoice* ctrl, int& dest )
|
||||||
|
{
|
||||||
|
CONFIG_CTRL_T ctrlInfo = { ctrl, CFG_CTRL_CHOICE, (void*) &dest };
|
||||||
|
|
||||||
|
ctrls.push_back( ctrlInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add( wxNotebook* ctrl, int& dest )
|
||||||
|
{
|
||||||
|
CONFIG_CTRL_T ctrlInfo = { ctrl, CFG_CTRL_TAB, (void*) &dest };
|
||||||
|
|
||||||
|
ctrls.push_back( ctrlInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadConfigFromControls()
|
||||||
|
{
|
||||||
|
for( std::vector<CONFIG_CTRL_T>::const_iterator iter = ctrls.begin(), iend = ctrls.end();
|
||||||
|
iter != iend; ++iter )
|
||||||
|
{
|
||||||
|
switch( iter->type )
|
||||||
|
{
|
||||||
|
case CFG_CTRL_CHECKBOX:
|
||||||
|
*(bool*) iter->dest = static_cast<wxCheckBox*>( iter->control )->GetValue();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_TEXT:
|
||||||
|
*(std::string*) iter->dest = static_cast<wxTextCtrl*>( iter->control )->GetValue();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_CHOICE:
|
||||||
|
*(int*) iter->dest = static_cast<wxChoice*>( iter->control )->GetSelection();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_RADIOBOX:
|
||||||
|
*(int*) iter->dest = static_cast<wxRadioBox*>( iter->control )->GetSelection();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_TAB:
|
||||||
|
*(int*) iter->dest = static_cast<wxNotebook*>( iter->control )->GetSelection();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxASSERT_MSG( false, wxString(
|
||||||
|
"Unhandled control type for config store: " ) << iter->type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
valid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RestoreConfigToControls()
|
||||||
|
{
|
||||||
|
if( !valid )
|
||||||
|
return;
|
||||||
|
|
||||||
|
for( std::vector<CONFIG_CTRL_T>::const_iterator iter = ctrls.begin(), iend = ctrls.end();
|
||||||
|
iter != iend; ++iter )
|
||||||
|
{
|
||||||
|
switch( iter->type )
|
||||||
|
{
|
||||||
|
case CFG_CTRL_CHECKBOX:
|
||||||
|
static_cast<wxCheckBox*>( iter->control )->SetValue( *(bool*) iter->dest );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_TEXT:
|
||||||
|
static_cast<wxTextCtrl*>( iter->control )->SetValue( *(std::string*) iter->dest );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_CHOICE:
|
||||||
|
static_cast<wxChoice*>( iter->control )->SetSelection( *(int*) iter->dest );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_RADIOBOX:
|
||||||
|
static_cast<wxRadioBox*>( iter->control )->SetSelection( *(int*) iter->dest );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CFG_CTRL_TAB:
|
||||||
|
static_cast<wxNotebook*>( iter->control )->SetSelection( *(int*) iter->dest );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxASSERT_MSG( false, wxString(
|
||||||
|
"Unhandled control type for config restore: " ) << iter->type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class DIALOG_CREATE_ARRAY : public DIALOG_CREATE_ARRAY_BASE,
|
||||||
|
public CONFIG_SAVE_RESTORE_WINDOW
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum CREATE_ARRAY_EDIT_T
|
||||||
|
{
|
||||||
|
CREATE_ARRAY_ABORT, ///< if not changed or error
|
||||||
|
CREATE_ARRAY_OK, ///< if successfully changed
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ARRAY_TYPE_T
|
||||||
|
{
|
||||||
|
ARRAY_GRID, ///< A grid (x*y) array
|
||||||
|
ARRAY_CIRCULAR, ///< A circular array
|
||||||
|
};
|
||||||
|
|
||||||
|
// NOTE: do not change order relative to charSetDescriptions
|
||||||
|
enum ARRAY_NUMBERING_TYPE_T
|
||||||
|
{
|
||||||
|
NUMBERING_NUMERIC = 0, ///< Arabic numerals: 0,1,2,3,4,5,6,7,8,9,10,11...
|
||||||
|
NUMBERING_HEX,
|
||||||
|
NUMBERING_ALPHA_NO_IOSQXZ, /*!< Alphabet, excluding IOSQXZ
|
||||||
|
*
|
||||||
|
* Per ASME Y14.35M-1997 sec. 5.2 (previously MIL-STD-100 sec. 406.5)
|
||||||
|
* as these can be confused with numerals and are often not used
|
||||||
|
* for pin numbering on BGAs, etc
|
||||||
|
*/
|
||||||
|
NUMBERING_ALPHA_FULL, ///< Full 26-character alphabet
|
||||||
|
NUMBERING_TYPE_Max ///< Invalid maximum value, insert above here
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persistent dialog options
|
||||||
|
*/
|
||||||
|
struct ARRAY_OPTIONS
|
||||||
|
{
|
||||||
|
ARRAY_OPTIONS( ARRAY_TYPE_T aType ) :
|
||||||
|
m_type( aType ),
|
||||||
|
m_shouldRenumber( false )
|
||||||
|
{}
|
||||||
|
|
||||||
|
virtual ~ARRAY_OPTIONS() {};
|
||||||
|
|
||||||
|
ARRAY_TYPE_T m_type;
|
||||||
|
bool m_shouldRenumber;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Function GetArrayPositions
|
||||||
|
* Returns the set of points that represent the array
|
||||||
|
* in order, if that is important
|
||||||
|
*
|
||||||
|
* TODO: Can/should this be done with some sort of iterator?
|
||||||
|
*/
|
||||||
|
virtual void TransformItem( int n, BOARD_ITEM* item,
|
||||||
|
const wxPoint& rotPoint ) const = 0;
|
||||||
|
virtual int GetArraySize() const = 0;
|
||||||
|
virtual wxString GetItemNumber( int n ) const = 0;
|
||||||
|
virtual wxString InterpolateNumberIntoString( int n, const wxString& pattern ) const;
|
||||||
|
|
||||||
|
bool ShouldRenumberItems() const
|
||||||
|
{
|
||||||
|
return m_shouldRenumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static std::string getCoordinateNumber( int n, ARRAY_NUMBERING_TYPE_T type );
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ARRAY_GRID_OPTIONS : public ARRAY_OPTIONS
|
||||||
|
{
|
||||||
|
ARRAY_GRID_OPTIONS() :
|
||||||
|
ARRAY_OPTIONS( ARRAY_GRID ),
|
||||||
|
m_nx( 0 ), m_ny( 0 ),
|
||||||
|
m_horizontalThenVertical( true ),
|
||||||
|
m_reverseNumberingAlternate( false ),
|
||||||
|
m_stagger( 0 ),
|
||||||
|
m_stagger_rows( true ),
|
||||||
|
m_2dArrayNumbering( false ),
|
||||||
|
m_numberingOffsetX( 0 ),
|
||||||
|
m_numberingOffsetY( 0 ),
|
||||||
|
m_priAxisNumType( NUMBERING_NUMERIC ),
|
||||||
|
m_secAxisNumType( NUMBERING_NUMERIC )
|
||||||
|
{}
|
||||||
|
|
||||||
|
long m_nx, m_ny;
|
||||||
|
bool m_horizontalThenVertical, m_reverseNumberingAlternate;
|
||||||
|
wxPoint m_delta;
|
||||||
|
wxPoint m_offset;
|
||||||
|
long m_stagger;
|
||||||
|
bool m_stagger_rows;
|
||||||
|
bool m_2dArrayNumbering;
|
||||||
|
int m_numberingOffsetX, m_numberingOffsetY;
|
||||||
|
ARRAY_NUMBERING_TYPE_T m_priAxisNumType, m_secAxisNumType;
|
||||||
|
|
||||||
|
void TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const; // override virtual
|
||||||
|
int GetArraySize() const; // override virtual
|
||||||
|
wxString GetItemNumber( int n ) const; // override virtual
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxPoint getGridCoords( int n ) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ARRAY_CIRCULAR_OPTIONS : public ARRAY_OPTIONS
|
||||||
|
{
|
||||||
|
ARRAY_CIRCULAR_OPTIONS() :
|
||||||
|
ARRAY_OPTIONS( ARRAY_CIRCULAR ),
|
||||||
|
m_nPts( 0 ),
|
||||||
|
m_angle( 0.0f ),
|
||||||
|
m_rotateItems( false ),
|
||||||
|
m_numberingType( NUMBERING_NUMERIC ),
|
||||||
|
m_numberingOffset( 0 )
|
||||||
|
{}
|
||||||
|
|
||||||
|
long m_nPts;
|
||||||
|
double m_angle;
|
||||||
|
wxPoint m_centre;
|
||||||
|
bool m_rotateItems;
|
||||||
|
ARRAY_NUMBERING_TYPE_T m_numberingType;
|
||||||
|
long m_numberingOffset;
|
||||||
|
|
||||||
|
void TransformItem( int n, BOARD_ITEM* item, const wxPoint& rotPoint ) const; // override virtual
|
||||||
|
int GetArraySize() const; // override virtual
|
||||||
|
wxString GetItemNumber( int n ) const; // override virtual
|
||||||
|
};
|
||||||
|
|
||||||
|
// Constructor and destructor
|
||||||
|
DIALOG_CREATE_ARRAY( PCB_BASE_FRAME* aParent, wxPoint aOrigPos, ARRAY_OPTIONS** settings );
|
||||||
|
virtual ~DIALOG_CREATE_ARRAY() {};
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The settings object returned to the caller.
|
||||||
|
* We update the caller's object and never have ownership
|
||||||
|
*/
|
||||||
|
ARRAY_OPTIONS** m_settings;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The position of the original item(s), used for finding radius, etc
|
||||||
|
*/
|
||||||
|
const wxPoint m_originalItemPosition;
|
||||||
|
|
||||||
|
// Event callbacks
|
||||||
|
void OnParameterChanged( wxCommandEvent& event );
|
||||||
|
void OnCancelClick( wxCommandEvent& event );
|
||||||
|
void OnOkClick( wxCommandEvent& event );
|
||||||
|
|
||||||
|
// Internal callback handlers
|
||||||
|
void setControlEnablement();
|
||||||
|
void calculateCircularArrayProperties();
|
||||||
|
|
||||||
|
struct CREATE_ARRAY_DIALOG_ENTRIES
|
||||||
|
{
|
||||||
|
CREATE_ARRAY_DIALOG_ENTRIES() :
|
||||||
|
m_optionsSet( false ),
|
||||||
|
m_gridStaggerType( 0 ),
|
||||||
|
m_gridNumberingAxis( 0 ),
|
||||||
|
m_gridNumberingReverseAlternate( false ),
|
||||||
|
m_grid2dArrayNumbering( 0 ),
|
||||||
|
m_gridPriAxisNumScheme( 0 ),
|
||||||
|
m_gridSecAxisNumScheme( 0 ),
|
||||||
|
m_circRotate( false ),
|
||||||
|
m_arrayTypeTab( 0 )
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool m_optionsSet;
|
||||||
|
|
||||||
|
std::string m_gridNx, m_gridNy,
|
||||||
|
m_gridDx, m_gridDy,
|
||||||
|
m_gridOffsetX, m_gridOffsetY,
|
||||||
|
m_gridStagger;
|
||||||
|
|
||||||
|
int m_gridStaggerType, m_gridNumberingAxis;
|
||||||
|
bool m_gridNumberingReverseAlternate;
|
||||||
|
int m_grid2dArrayNumbering;
|
||||||
|
int m_gridPriAxisNumScheme, m_gridSecAxisNumScheme;
|
||||||
|
std::string m_gridPriNumberingOffset, m_gridSecNumberingOffset;
|
||||||
|
|
||||||
|
std::string m_circCentreX, m_circCentreY,
|
||||||
|
m_circAngle, m_circCount, m_circNumberingOffset;
|
||||||
|
bool m_circRotate;
|
||||||
|
|
||||||
|
int m_arrayTypeTab;
|
||||||
|
};
|
||||||
|
|
||||||
|
static CREATE_ARRAY_DIALOG_ENTRIES m_options;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __DIALOG_CREATE_ARRAY__
|
|
@ -0,0 +1,341 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Jun 6 2014)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "dialog_create_array_base.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY_BASE::DIALOG_CREATE_ARRAY_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( wxSize( -1,-1 ), wxDefaultSize );
|
||||||
|
|
||||||
|
wxBoxSizer* bMainSizer;
|
||||||
|
bMainSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_gridTypeNotebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_gridPanel = new wxPanel( m_gridTypeNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
|
wxBoxSizer* bSizer2;
|
||||||
|
bSizer2 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
wxGridBagSizer* gbSizer1;
|
||||||
|
gbSizer1 = new wxGridBagSizer( 0, 0 );
|
||||||
|
gbSizer1->SetFlexibleDirection( wxBOTH );
|
||||||
|
gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_labelNx = new wxStaticText( m_gridPanel, wxID_ANY, _("x Count:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelNx->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelNx, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryNx = new wxTextCtrl( m_gridPanel, wxID_ANY, _("5"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryNx, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelNy = new wxStaticText( m_gridPanel, wxID_ANY, _("y Count:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelNy->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelNy, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryNy = new wxTextCtrl( m_gridPanel, wxID_ANY, _("5"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryNy, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelDx = new wxStaticText( m_gridPanel, wxID_ANY, _("x Spacing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelDx->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelDx, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryDx = new wxTextCtrl( m_gridPanel, wxID_ANY, _("5"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryDx, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelDx = new wxStaticText( m_gridPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelDx->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_unitLabelDx, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelDy = new wxStaticText( m_gridPanel, wxID_ANY, _("y Spacing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelDy->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelDy, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryDy = new wxTextCtrl( m_gridPanel, wxID_ANY, _("5"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryDy, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelDy = new wxStaticText( m_gridPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelDy->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_unitLabelDy, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelOffsetX = new wxStaticText( m_gridPanel, wxID_ANY, _("x Offset:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelOffsetX->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelOffsetX, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryOffsetX = new wxTextCtrl( m_gridPanel, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryOffsetX, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelOffsetX = new wxStaticText( m_gridPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelOffsetX->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_unitLabelOffsetX, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelOffsetY = new wxStaticText( m_gridPanel, wxID_ANY, _("y Offset:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelOffsetY->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelOffsetY, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryOffsetY = new wxTextCtrl( m_gridPanel, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryOffsetY, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelOffsetY = new wxStaticText( m_gridPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelOffsetY->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_unitLabelOffsetY, wxGBPosition( 5, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelStagger = new wxStaticText( m_gridPanel, wxID_ANY, _("Stagger:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelStagger->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelStagger, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_entryStagger = new wxTextCtrl( m_gridPanel, wxID_ANY, _("1"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer1->Add( m_entryStagger, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
wxString m_radioBoxGridStaggerTypeChoices[] = { _("Rows"), _("Columns") };
|
||||||
|
int m_radioBoxGridStaggerTypeNChoices = sizeof( m_radioBoxGridStaggerTypeChoices ) / sizeof( wxString );
|
||||||
|
m_radioBoxGridStaggerType = new wxRadioBox( m_gridPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, m_radioBoxGridStaggerTypeNChoices, m_radioBoxGridStaggerTypeChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
|
m_radioBoxGridStaggerType->SetSelection( 0 );
|
||||||
|
gbSizer1->Add( m_radioBoxGridStaggerType, wxGBPosition( 7, 1 ), wxGBSpan( 1, 2 ), wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_labelGridStaggerType = new wxStaticText( m_gridPanel, wxID_ANY, _("Stagger type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelGridStaggerType->Wrap( -1 );
|
||||||
|
gbSizer1->Add( m_labelGridStaggerType, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer2->Add( gbSizer1, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer3;
|
||||||
|
bSizer3 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
wxString m_radioBoxGridNumberingAxisChoices[] = { _("Horizontal, then vertical"), _("Vertical, then horizontal") };
|
||||||
|
int m_radioBoxGridNumberingAxisNChoices = sizeof( m_radioBoxGridNumberingAxisChoices ) / sizeof( wxString );
|
||||||
|
m_radioBoxGridNumberingAxis = new wxRadioBox( m_gridPanel, wxID_ANY, _("Numbering direction:"), wxDefaultPosition, wxDefaultSize, m_radioBoxGridNumberingAxisNChoices, m_radioBoxGridNumberingAxisChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
|
m_radioBoxGridNumberingAxis->SetSelection( 0 );
|
||||||
|
bSizer3->Add( m_radioBoxGridNumberingAxis, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_checkBoxGridReverseNumbering = new wxCheckBox( m_gridPanel, wxID_ANY, _("Reverse numbering on \nalternate rows/columns"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizer3->Add( m_checkBoxGridReverseNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_checkBoxGridRestartNumbering = new wxCheckBox( m_gridPanel, wxID_ANY, _("Restart numbering"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_checkBoxGridRestartNumbering->SetValue(true);
|
||||||
|
bSizer3->Add( m_checkBoxGridRestartNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
wxString m_radioBoxGridNumberingSchemeChoices[] = { _("Continuous (1, 2, 3...)"), _("Co-ordinate (A1, A2, ... B1, ...)") };
|
||||||
|
int m_radioBoxGridNumberingSchemeNChoices = sizeof( m_radioBoxGridNumberingSchemeChoices ) / sizeof( wxString );
|
||||||
|
m_radioBoxGridNumberingScheme = new wxRadioBox( m_gridPanel, wxID_ANY, _("Numbering scheme:"), wxDefaultPosition, wxDefaultSize, m_radioBoxGridNumberingSchemeNChoices, m_radioBoxGridNumberingSchemeChoices, 1, wxRA_SPECIFY_COLS );
|
||||||
|
m_radioBoxGridNumberingScheme->SetSelection( 0 );
|
||||||
|
bSizer3->Add( m_radioBoxGridNumberingScheme, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_labelPriAxisNumbering = new wxStaticText( m_gridPanel, wxID_ANY, _("Primary axis numbering:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelPriAxisNumbering->Wrap( -1 );
|
||||||
|
bSizer3->Add( m_labelPriAxisNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
wxArrayString m_choicePriAxisNumberingChoices;
|
||||||
|
m_choicePriAxisNumbering = new wxChoice( m_gridPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePriAxisNumberingChoices, 0 );
|
||||||
|
m_choicePriAxisNumbering->SetSelection( 0 );
|
||||||
|
bSizer3->Add( m_choicePriAxisNumbering, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_labelSecAxisNumbering = new wxStaticText( m_gridPanel, wxID_ANY, _("Secondary axis numbering:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelSecAxisNumbering->Wrap( -1 );
|
||||||
|
m_labelSecAxisNumbering->Enable( false );
|
||||||
|
|
||||||
|
bSizer3->Add( m_labelSecAxisNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
wxArrayString m_choiceSecAxisNumberingChoices;
|
||||||
|
m_choiceSecAxisNumbering = new wxChoice( m_gridPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceSecAxisNumberingChoices, 0 );
|
||||||
|
m_choiceSecAxisNumbering->SetSelection( 0 );
|
||||||
|
m_choiceSecAxisNumbering->Enable( false );
|
||||||
|
|
||||||
|
bSizer3->Add( m_choiceSecAxisNumbering, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer5;
|
||||||
|
bSizer5 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
m_labelGridNumberingOffset = new wxStaticText( m_gridPanel, wxID_ANY, _("Numbering start:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelGridNumberingOffset->Wrap( -1 );
|
||||||
|
bSizer5->Add( m_labelGridNumberingOffset, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_entryGridPriNumberingOffset = new wxTextCtrl( m_gridPanel, wxID_ANY, _("1"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizer5->Add( m_entryGridPriNumberingOffset, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_entryGridSecNumberingOffset = new wxTextCtrl( m_gridPanel, wxID_ANY, _("1"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizer5->Add( m_entryGridSecNumberingOffset, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer3->Add( bSizer5, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer2->Add( bSizer3, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
m_gridPanel->SetSizer( bSizer2 );
|
||||||
|
m_gridPanel->Layout();
|
||||||
|
bSizer2->Fit( m_gridPanel );
|
||||||
|
m_gridTypeNotebook->AddPage( m_gridPanel, _("Grid"), true );
|
||||||
|
m_circularPanel = new wxPanel( m_gridTypeNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
|
wxBoxSizer* bSizer4;
|
||||||
|
bSizer4 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
wxGridBagSizer* gbSizer2;
|
||||||
|
gbSizer2 = new wxGridBagSizer( 0, 0 );
|
||||||
|
gbSizer2->SetFlexibleDirection( wxBOTH );
|
||||||
|
gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_labelCentreX = new wxStaticText( m_circularPanel, wxID_ANY, _("x Centre:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCentreX->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCentreX, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_entryCentreX = new wxTextCtrl( m_circularPanel, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer2->Add( m_entryCentreX, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelCentreX = new wxStaticText( m_circularPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelCentreX->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_unitLabelCentreX, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelCentreY = new wxStaticText( m_circularPanel, wxID_ANY, _("y Centre:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCentreY->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCentreY, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_entryCentreY = new wxTextCtrl( m_circularPanel, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
gbSizer2->Add( m_entryCentreY, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelCentreY = new wxStaticText( m_circularPanel, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelCentreY->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_unitLabelCentreY, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelCircRadius = new wxStaticText( m_circularPanel, wxID_ANY, _("Radius:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircRadius->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCircRadius, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelCircRadiusValue = new wxStaticText( m_circularPanel, wxID_ANY, _("0 mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircRadiusValue->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCircRadiusValue, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelCircAngle = new wxStaticText( m_circularPanel, wxID_ANY, _("Angle:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircAngle->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCircAngle, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_entryCircAngle = new wxTextCtrl( m_circularPanel, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_entryCircAngle->SetToolTip( _("Positive angles represent an anti-clockwise rotation. An angle of 0 will produce a full circle divided evenly into \"Count\" portions.") );
|
||||||
|
|
||||||
|
gbSizer2->Add( m_entryCircAngle, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_unitLabelCircAngle = new wxStaticText( m_circularPanel, wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_unitLabelCircAngle->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_unitLabelCircAngle, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_labelCircCount = new wxStaticText( m_circularPanel, wxID_ANY, _("Count:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircCount->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCircCount, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_entryCircCount = new wxTextCtrl( m_circularPanel, wxID_ANY, _("4"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_entryCircCount->SetToolTip( _("How many items in the array.") );
|
||||||
|
|
||||||
|
gbSizer2->Add( m_entryCircCount, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelCircRotate = new wxStaticText( m_circularPanel, wxID_ANY, _("Rotate:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircRotate->Wrap( -1 );
|
||||||
|
gbSizer2->Add( m_labelCircRotate, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_entryRotateItemsCb = new wxCheckBox( m_circularPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_entryRotateItemsCb->SetValue(true);
|
||||||
|
m_entryRotateItemsCb->SetToolTip( _("Rotate the item as well as move it - multi-selections will be rotated together") );
|
||||||
|
|
||||||
|
gbSizer2->Add( m_entryRotateItemsCb, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer4->Add( gbSizer2, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer6;
|
||||||
|
bSizer6 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_checkBoxCircRestartNumbering = new wxCheckBox( m_circularPanel, wxID_ANY, _("Restart numbering"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_checkBoxCircRestartNumbering->SetValue(true);
|
||||||
|
bSizer6->Add( m_checkBoxCircRestartNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_labelCircNumbering = new wxStaticText( m_circularPanel, wxID_ANY, _("Numbering type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircNumbering->Wrap( -1 );
|
||||||
|
bSizer6->Add( m_labelCircNumbering, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
wxArrayString m_choiceCircNumberingTypeChoices;
|
||||||
|
m_choiceCircNumberingType = new wxChoice( m_circularPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCircNumberingTypeChoices, 0 );
|
||||||
|
m_choiceCircNumberingType->SetSelection( 0 );
|
||||||
|
bSizer6->Add( m_choiceCircNumberingType, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer7;
|
||||||
|
bSizer7 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
m_labelCircNumStart = new wxStaticText( m_circularPanel, wxID_ANY, _("Numbering start:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_labelCircNumStart->Wrap( -1 );
|
||||||
|
bSizer7->Add( m_labelCircNumStart, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_entryCircNumberingStart = new wxTextCtrl( m_circularPanel, wxID_ANY, _("1"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizer7->Add( m_entryCircNumberingStart, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer6->Add( bSizer7, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer4->Add( bSizer6, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
m_circularPanel->SetSizer( bSizer4 );
|
||||||
|
m_circularPanel->Layout();
|
||||||
|
bSizer4->Fit( m_circularPanel );
|
||||||
|
m_gridTypeNotebook->AddPage( m_circularPanel, _("Circular"), false );
|
||||||
|
|
||||||
|
bMainSizer->Add( m_gridTypeNotebook, 1, wxEXPAND | wxALL, 5 );
|
||||||
|
|
||||||
|
m_stdButtons = new wxStdDialogButtonSizer();
|
||||||
|
m_stdButtonsOK = new wxButton( this, wxID_OK );
|
||||||
|
m_stdButtons->AddButton( m_stdButtonsOK );
|
||||||
|
m_stdButtonsCancel = new wxButton( this, wxID_CANCEL );
|
||||||
|
m_stdButtons->AddButton( m_stdButtonsCancel );
|
||||||
|
m_stdButtons->Realize();
|
||||||
|
|
||||||
|
bMainSizer->Add( m_stdButtons, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( bMainSizer );
|
||||||
|
this->Layout();
|
||||||
|
|
||||||
|
// Connect Events
|
||||||
|
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_CREATE_ARRAY_BASE::OnClose ) );
|
||||||
|
m_entryNx->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryNy->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryDx->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryDy->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryOffsetX->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryOffsetY->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryStagger->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_checkBoxGridRestartNumbering->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_radioBoxGridNumberingScheme->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCentreX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCentreY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCircAngle->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCircCount->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnCancelClick ), NULL, this );
|
||||||
|
m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnOkClick ), NULL, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY_BASE::~DIALOG_CREATE_ARRAY_BASE()
|
||||||
|
{
|
||||||
|
// Disconnect Events
|
||||||
|
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_CREATE_ARRAY_BASE::OnClose ) );
|
||||||
|
m_entryNx->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryNy->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryDx->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryDy->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryOffsetX->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryOffsetY->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryStagger->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_checkBoxGridRestartNumbering->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_radioBoxGridNumberingScheme->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCentreX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCentreY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCircAngle->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_entryCircCount->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnParameterChanged ), NULL, this );
|
||||||
|
m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnCancelClick ), NULL, this );
|
||||||
|
m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CREATE_ARRAY_BASE::OnOkClick ), NULL, this );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,121 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Jun 6 2014)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __DIALOG_CREATE_ARRAY_BASE_H__
|
||||||
|
#define __DIALOG_CREATE_ARRAY_BASE_H__
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
class DIALOG_SHIM;
|
||||||
|
|
||||||
|
#include "dialog_shim.h"
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/radiobox.h>
|
||||||
|
#include <wx/gbsizer.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
|
#include <wx/choice.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/bitmap.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
#include <wx/notebook.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define wxID_DIALOG_CREATE_ARRAY 1000
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Class DIALOG_CREATE_ARRAY_BASE
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
class DIALOG_CREATE_ARRAY_BASE : public DIALOG_SHIM
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxNotebook* m_gridTypeNotebook;
|
||||||
|
wxPanel* m_gridPanel;
|
||||||
|
wxStaticText* m_labelNx;
|
||||||
|
wxTextCtrl* m_entryNx;
|
||||||
|
wxStaticText* m_labelNy;
|
||||||
|
wxTextCtrl* m_entryNy;
|
||||||
|
wxStaticText* m_labelDx;
|
||||||
|
wxTextCtrl* m_entryDx;
|
||||||
|
wxStaticText* m_unitLabelDx;
|
||||||
|
wxStaticText* m_labelDy;
|
||||||
|
wxTextCtrl* m_entryDy;
|
||||||
|
wxStaticText* m_unitLabelDy;
|
||||||
|
wxStaticText* m_labelOffsetX;
|
||||||
|
wxTextCtrl* m_entryOffsetX;
|
||||||
|
wxStaticText* m_unitLabelOffsetX;
|
||||||
|
wxStaticText* m_labelOffsetY;
|
||||||
|
wxTextCtrl* m_entryOffsetY;
|
||||||
|
wxStaticText* m_unitLabelOffsetY;
|
||||||
|
wxStaticText* m_labelStagger;
|
||||||
|
wxTextCtrl* m_entryStagger;
|
||||||
|
wxRadioBox* m_radioBoxGridStaggerType;
|
||||||
|
wxStaticText* m_labelGridStaggerType;
|
||||||
|
wxRadioBox* m_radioBoxGridNumberingAxis;
|
||||||
|
wxCheckBox* m_checkBoxGridReverseNumbering;
|
||||||
|
wxCheckBox* m_checkBoxGridRestartNumbering;
|
||||||
|
wxRadioBox* m_radioBoxGridNumberingScheme;
|
||||||
|
wxStaticText* m_labelPriAxisNumbering;
|
||||||
|
wxChoice* m_choicePriAxisNumbering;
|
||||||
|
wxStaticText* m_labelSecAxisNumbering;
|
||||||
|
wxChoice* m_choiceSecAxisNumbering;
|
||||||
|
wxStaticText* m_labelGridNumberingOffset;
|
||||||
|
wxTextCtrl* m_entryGridPriNumberingOffset;
|
||||||
|
wxTextCtrl* m_entryGridSecNumberingOffset;
|
||||||
|
wxPanel* m_circularPanel;
|
||||||
|
wxStaticText* m_labelCentreX;
|
||||||
|
wxTextCtrl* m_entryCentreX;
|
||||||
|
wxStaticText* m_unitLabelCentreX;
|
||||||
|
wxStaticText* m_labelCentreY;
|
||||||
|
wxTextCtrl* m_entryCentreY;
|
||||||
|
wxStaticText* m_unitLabelCentreY;
|
||||||
|
wxStaticText* m_labelCircRadius;
|
||||||
|
wxStaticText* m_labelCircRadiusValue;
|
||||||
|
wxStaticText* m_labelCircAngle;
|
||||||
|
wxTextCtrl* m_entryCircAngle;
|
||||||
|
wxStaticText* m_unitLabelCircAngle;
|
||||||
|
wxStaticText* m_labelCircCount;
|
||||||
|
wxTextCtrl* m_entryCircCount;
|
||||||
|
wxStaticText* m_labelCircRotate;
|
||||||
|
wxCheckBox* m_entryRotateItemsCb;
|
||||||
|
wxCheckBox* m_checkBoxCircRestartNumbering;
|
||||||
|
wxStaticText* m_labelCircNumbering;
|
||||||
|
wxChoice* m_choiceCircNumberingType;
|
||||||
|
wxStaticText* m_labelCircNumStart;
|
||||||
|
wxTextCtrl* m_entryCircNumberingStart;
|
||||||
|
wxStdDialogButtonSizer* m_stdButtons;
|
||||||
|
wxButton* m_stdButtonsOK;
|
||||||
|
wxButton* m_stdButtonsCancel;
|
||||||
|
|
||||||
|
// Virtual event handlers, overide them in your derived class
|
||||||
|
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnParameterChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY_BASE( wxWindow* parent, wxWindowID id = wxID_DIALOG_CREATE_ARRAY, const wxString& title = _("Create array"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 576,528 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||||
|
~DIALOG_CREATE_ARRAY_BASE();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //__DIALOG_CREATE_ARRAY_BASE_H__
|
|
@ -0,0 +1,210 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 John Beard, john.j.beard@gmail.com
|
||||||
|
* Copyright (C) 1992-2014 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 <wxPcbStruct.h>
|
||||||
|
#include <base_units.h>
|
||||||
|
|
||||||
|
#include <module_editor_frame.h>
|
||||||
|
|
||||||
|
#include "dialog_move_exact.h"
|
||||||
|
|
||||||
|
// initialise statics
|
||||||
|
DIALOG_MOVE_EXACT::MOVE_EXACT_OPTIONS DIALOG_MOVE_EXACT::m_options;
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent,
|
||||||
|
wxPoint& translation, double& rotation ):
|
||||||
|
DIALOG_MOVE_EXACT_BASE( aParent ),
|
||||||
|
m_translation( translation ),
|
||||||
|
m_rotation( rotation )
|
||||||
|
{
|
||||||
|
// set the unit labels
|
||||||
|
m_xUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) );
|
||||||
|
m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) );
|
||||||
|
// rotation is always degrees
|
||||||
|
m_rotUnit->SetLabelText( _( "deg" ) );
|
||||||
|
|
||||||
|
// tabbing goes through the entries in sequence
|
||||||
|
m_yEntry->MoveAfterInTabOrder( m_xEntry );
|
||||||
|
m_rotEntry->MoveAfterInTabOrder( m_yEntry );
|
||||||
|
|
||||||
|
// and set up the entries according to the saved options
|
||||||
|
m_polarCoords->SetValue( m_options.polarCoords );
|
||||||
|
m_xEntry->SetValue( wxString::FromDouble( m_options.entry1 ) );
|
||||||
|
m_yEntry->SetValue( wxString::FromDouble( m_options.entry2 ) );
|
||||||
|
m_rotEntry->SetValue( wxString::FromDouble( m_options.entryRotation ) );
|
||||||
|
|
||||||
|
Fit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT::~DIALOG_MOVE_EXACT()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Convert a given Cartesian point into a polar representation.
|
||||||
|
*
|
||||||
|
* Linear units are not considered, the answer is in the same units as given
|
||||||
|
* Angle is returned in degrees
|
||||||
|
*/
|
||||||
|
void DIALOG_MOVE_EXACT::ToPolarDeg( double x, double y, double& r, double& q )
|
||||||
|
{
|
||||||
|
// convert to polar coordinates
|
||||||
|
r = hypot ( x, y );
|
||||||
|
|
||||||
|
q = ( r != 0) ? RAD2DEG( atan2( y, x ) ) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Get the (Cartesian) translation described by the text entries
|
||||||
|
* @param val output translation vector
|
||||||
|
* @param polar interpret as polar coords
|
||||||
|
* @return false if error (though the text conversion functions don't report errors)
|
||||||
|
*/
|
||||||
|
bool DIALOG_MOVE_EXACT::GetTranslationInIU ( wxPoint& val, bool polar )
|
||||||
|
{
|
||||||
|
if( polar )
|
||||||
|
{
|
||||||
|
const int r = ValueFromTextCtrl( *m_xEntry );
|
||||||
|
const double q = DoubleValueFromString( DEGREES, m_yEntry->GetValue() );
|
||||||
|
|
||||||
|
val.x = r * cos( DEG2RAD( q / 10.0 ) );
|
||||||
|
val.y = r * sin( DEG2RAD( q / 10.0 ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// direct read
|
||||||
|
val.x = ValueFromTextCtrl( *m_xEntry );
|
||||||
|
val.y = ValueFromTextCtrl( *m_yEntry );
|
||||||
|
}
|
||||||
|
|
||||||
|
// no validation to do here, but in future, you could return false here
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_MOVE_EXACT::OnPolarChanged( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
bool newPolar = m_polarCoords->IsChecked();
|
||||||
|
wxPoint val;
|
||||||
|
|
||||||
|
// get the value as previously stored
|
||||||
|
GetTranslationInIU( val, !newPolar );
|
||||||
|
|
||||||
|
if( newPolar )
|
||||||
|
{
|
||||||
|
// convert to polar coordinates
|
||||||
|
double r, q;
|
||||||
|
ToPolarDeg( val.x, val.y, r, q);
|
||||||
|
|
||||||
|
PutValueInLocalUnits( *m_xEntry, round( r / 10.0) * 10 );
|
||||||
|
m_xLabel->SetLabelText( wxT( "r:" ) );
|
||||||
|
|
||||||
|
m_yEntry->SetValue( wxString::FromDouble( q ) );
|
||||||
|
m_yLabel->SetLabelText( wxT( "\u03b8:" ) ); // theta
|
||||||
|
|
||||||
|
m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( DEGREES ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// vector is already in Cartesian, so just render out
|
||||||
|
|
||||||
|
// note - round off the last decimal place (10nm) to prevent
|
||||||
|
// (some) rounding causing errors when round-tripping
|
||||||
|
// you can never eliminate entirely, however
|
||||||
|
PutValueInLocalUnits( *m_xEntry, round( val.x / 10.0) * 10 );
|
||||||
|
m_xLabel->SetLabelText( wxT( "x:" ) );
|
||||||
|
|
||||||
|
PutValueInLocalUnits( *m_yEntry, round( val.y / 10.0) * 10 );
|
||||||
|
m_yLabel->SetLabelText( wxT( "y:" ) );
|
||||||
|
|
||||||
|
m_yUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_MOVE_EXACT::OnClear( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
wxObject* obj = event.GetEventObject();
|
||||||
|
wxTextCtrl* entry = NULL;
|
||||||
|
|
||||||
|
if( obj == m_clearX )
|
||||||
|
{
|
||||||
|
entry = m_xEntry;
|
||||||
|
}
|
||||||
|
else if( obj == m_clearY )
|
||||||
|
{
|
||||||
|
entry = m_yEntry;
|
||||||
|
}
|
||||||
|
else if( obj == m_clearRot )
|
||||||
|
{
|
||||||
|
entry = m_rotEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( entry )
|
||||||
|
entry->SetValue( "0" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_MOVE_EXACT::OnCancelClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
EndModal( MOVE_ABORT );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_MOVE_EXACT::OnOkClick( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
m_rotation = DoubleValueFromString( DEGREES, m_rotEntry->GetValue() );
|
||||||
|
|
||||||
|
// for the output, we only deliver a Cartesian vector
|
||||||
|
bool ok = GetTranslationInIU( m_translation, m_polarCoords->IsChecked() );
|
||||||
|
|
||||||
|
if ( ok )
|
||||||
|
{
|
||||||
|
// save the settings
|
||||||
|
m_options.polarCoords = m_polarCoords->GetValue();
|
||||||
|
m_xEntry->GetValue().ToDouble( &m_options.entry1 );
|
||||||
|
m_yEntry->GetValue().ToDouble( &m_options.entry2 );
|
||||||
|
m_rotEntry->GetValue().ToDouble( &m_options.entryRotation );
|
||||||
|
|
||||||
|
EndModal( MOVE_OK );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Reset a text field to be 0 if it was exited while blank
|
||||||
|
*/
|
||||||
|
void DIALOG_MOVE_EXACT::OnTextFocusLost( wxFocusEvent& event )
|
||||||
|
{
|
||||||
|
wxTextCtrl* obj = static_cast<wxTextCtrl*>( event.GetEventObject() );
|
||||||
|
|
||||||
|
if( obj->GetValue().IsEmpty() )
|
||||||
|
{
|
||||||
|
obj->SetValue("0");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 John Beard, john.j.beard@gmail.com
|
||||||
|
* Copyright (C) 1992-2014 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 __DIALOG_MOVE_EXACT__
|
||||||
|
#define __DIALOG_MOVE_EXACT__
|
||||||
|
|
||||||
|
// Include the wxFormBuider header base:
|
||||||
|
#include <vector>
|
||||||
|
#include <dialog_move_exact_base.h>
|
||||||
|
|
||||||
|
class DIALOG_MOVE_EXACT : public DIALOG_MOVE_EXACT_BASE
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
wxPoint& m_translation;
|
||||||
|
double& m_rotation;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum MOVE_EDIT_T
|
||||||
|
{
|
||||||
|
MOVE_ABORT, ///< if not changed or error
|
||||||
|
MOVE_OK, ///< if successfully changed
|
||||||
|
};
|
||||||
|
|
||||||
|
// Constructor and destructor
|
||||||
|
DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent, wxPoint& translation,
|
||||||
|
double& rotation );
|
||||||
|
~DIALOG_MOVE_EXACT();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void OnTextFocusLost( wxFocusEvent& event );
|
||||||
|
void OnPolarChanged( wxCommandEvent& event );
|
||||||
|
void OnClear( wxCommandEvent& event );
|
||||||
|
|
||||||
|
void OnCancelClick( wxCommandEvent& event );
|
||||||
|
void OnOkClick( wxCommandEvent& event );
|
||||||
|
|
||||||
|
void ToPolarDeg( double x, double y, double& r, double& q );
|
||||||
|
bool GetTranslationInIU ( wxPoint& val, bool polar );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persistent dialog options
|
||||||
|
*/
|
||||||
|
struct MOVE_EXACT_OPTIONS
|
||||||
|
{
|
||||||
|
bool polarCoords;
|
||||||
|
double entry1;
|
||||||
|
double entry2;
|
||||||
|
double entryRotation;
|
||||||
|
|
||||||
|
MOVE_EXACT_OPTIONS():
|
||||||
|
polarCoords(false),
|
||||||
|
entry1(0),
|
||||||
|
entry2(0),
|
||||||
|
entryRotation(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// persistent settings
|
||||||
|
static MOVE_EXACT_OPTIONS m_options;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __DIALOG_MOVE_EXACT__
|
|
@ -0,0 +1,114 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Jun 6 2014)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "dialog_move_exact_base.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT_BASE::DIALOG_MOVE_EXACT_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( wxSize( -1,-1 ), wxDefaultSize );
|
||||||
|
|
||||||
|
wxBoxSizer* bMainSizer;
|
||||||
|
bMainSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_polarCoords = new wxCheckBox( this, wxID_ANY, _("Polar coordinates"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bMainSizer->Add( m_polarCoords, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgSizer2;
|
||||||
|
fgSizer2 = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||||
|
fgSizer2->AddGrowableCol( 1 );
|
||||||
|
fgSizer2->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_xLabel = new wxStaticText( this, wxID_ANY, _("x:"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
|
||||||
|
m_xLabel->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_xLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_xEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer2->Add( m_xEntry, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_xUnit = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_xUnit->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_xUnit, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_clearX = new wxBitmapButton( this, wxID_CLEAR, wxArtProvider::GetBitmap( wxART_DELETE, wxART_BUTTON ), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
|
||||||
|
fgSizer2->Add( m_clearX, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_yLabel = new wxStaticText( this, wxID_ANY, _("y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_yLabel->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_yLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_yEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer2->Add( m_yEntry, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_yUnit = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_yUnit->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_yUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_clearY = new wxBitmapButton( this, wxID_CLEAR, wxArtProvider::GetBitmap( wxART_DELETE, wxART_BUTTON ), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
|
||||||
|
fgSizer2->Add( m_clearY, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
m_rotLabel = new wxStaticText( this, wxID_ANY, _("Rotate:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_rotLabel->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_rotLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
m_rotEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgSizer2->Add( m_rotEntry, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_rotUnit = new wxStaticText( this, wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_rotUnit->Wrap( -1 );
|
||||||
|
fgSizer2->Add( m_rotUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||||
|
|
||||||
|
m_clearRot = new wxBitmapButton( this, wxID_CLEAR, wxArtProvider::GetBitmap( wxART_DELETE, wxART_BUTTON ), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
|
||||||
|
fgSizer2->Add( m_clearRot, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bMainSizer->Add( fgSizer2, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_stdButtons = new wxStdDialogButtonSizer();
|
||||||
|
m_stdButtonsOK = new wxButton( this, wxID_OK );
|
||||||
|
m_stdButtons->AddButton( m_stdButtonsOK );
|
||||||
|
m_stdButtonsCancel = new wxButton( this, wxID_CANCEL );
|
||||||
|
m_stdButtons->AddButton( m_stdButtonsCancel );
|
||||||
|
m_stdButtons->Realize();
|
||||||
|
|
||||||
|
bMainSizer->Add( m_stdButtons, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( bMainSizer );
|
||||||
|
this->Layout();
|
||||||
|
bMainSizer->Fit( this );
|
||||||
|
|
||||||
|
// Connect Events
|
||||||
|
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_MOVE_EXACT_BASE::OnClose ) );
|
||||||
|
m_polarCoords->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnPolarChanged ), NULL, this );
|
||||||
|
m_xEntry->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearX->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_yEntry->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearY->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_rotEntry->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearRot->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnCancelClick ), NULL, this );
|
||||||
|
m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOkClick ), NULL, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT_BASE::~DIALOG_MOVE_EXACT_BASE()
|
||||||
|
{
|
||||||
|
// Disconnect Events
|
||||||
|
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_MOVE_EXACT_BASE::OnClose ) );
|
||||||
|
m_polarCoords->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnPolarChanged ), NULL, this );
|
||||||
|
m_xEntry->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearX->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_yEntry->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearY->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_rotEntry->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
|
||||||
|
m_clearRot->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
|
||||||
|
m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnCancelClick ), NULL, this );
|
||||||
|
m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOkClick ), NULL, this );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Jun 6 2014)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __DIALOG_MOVE_EXACT_BASE_H__
|
||||||
|
#define __DIALOG_MOVE_EXACT_BASE_H__
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
class DIALOG_SHIM;
|
||||||
|
|
||||||
|
#include "dialog_shim.h"
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/bitmap.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
#include <wx/bmpbuttn.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Class DIALOG_MOVE_EXACT_BASE
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
class DIALOG_MOVE_EXACT_BASE : public DIALOG_SHIM
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxCheckBox* m_polarCoords;
|
||||||
|
wxStaticText* m_xLabel;
|
||||||
|
wxTextCtrl* m_xEntry;
|
||||||
|
wxStaticText* m_xUnit;
|
||||||
|
wxBitmapButton* m_clearX;
|
||||||
|
wxStaticText* m_yLabel;
|
||||||
|
wxTextCtrl* m_yEntry;
|
||||||
|
wxStaticText* m_yUnit;
|
||||||
|
wxBitmapButton* m_clearY;
|
||||||
|
wxStaticText* m_rotLabel;
|
||||||
|
wxTextCtrl* m_rotEntry;
|
||||||
|
wxStaticText* m_rotUnit;
|
||||||
|
wxBitmapButton* m_clearRot;
|
||||||
|
wxStdDialogButtonSizer* m_stdButtons;
|
||||||
|
wxButton* m_stdButtonsOK;
|
||||||
|
wxButton* m_stdButtonsCancel;
|
||||||
|
|
||||||
|
// Virtual event handlers, overide them in your derived class
|
||||||
|
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnPolarChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnTextFocusLost( wxFocusEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnClear( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Move item"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||||
|
~DIALOG_MOVE_EXACT_BASE();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //__DIALOG_MOVE_EXACT_BASE_H__
|
209
pcbnew/edit.cpp
|
@ -54,6 +54,9 @@
|
||||||
#include <dialog_global_edit_tracks_and_vias.h>
|
#include <dialog_global_edit_tracks_and_vias.h>
|
||||||
#include <invoke_pcb_dialog.h>
|
#include <invoke_pcb_dialog.h>
|
||||||
|
|
||||||
|
#include <dialog_move_exact.h>
|
||||||
|
#include <dialog_create_array.h>
|
||||||
|
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
#include <tools/common_actions.h>
|
#include <tools/common_actions.h>
|
||||||
|
|
||||||
|
@ -1188,6 +1191,19 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_MOVE_EXACT:
|
||||||
|
moveExact();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_DUPLICATE_ITEM:
|
||||||
|
case ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT:
|
||||||
|
duplicateItem( id == ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_CREATE_ARRAY:
|
||||||
|
createArray();
|
||||||
|
break;
|
||||||
|
|
||||||
case ID_MENU_PCB_CLEAN:
|
case ID_MENU_PCB_CLEAN:
|
||||||
Clean_Pcb();
|
Clean_Pcb();
|
||||||
break;
|
break;
|
||||||
|
@ -1486,3 +1502,196 @@ void PCB_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_EDIT_FRAME::moveExact()
|
||||||
|
{
|
||||||
|
wxPoint translation;
|
||||||
|
double rotation = 0;
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT dialog( this, translation, rotation );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_MOVE_EXACT::MOVE_OK )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = GetScreen()->GetCurItem();
|
||||||
|
|
||||||
|
// Could be moved or rotated
|
||||||
|
SaveCopyInUndoList( item, UR_CHANGED );
|
||||||
|
|
||||||
|
item->Move( translation );
|
||||||
|
item->Rotate( item->GetPosition(), rotation );
|
||||||
|
m_canvas->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_canvas->MoveCursorToCrossHair();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_EDIT_FRAME::duplicateItem( bool aIncrement )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = GetScreen()->GetCurItem();
|
||||||
|
|
||||||
|
int move_cmd = 0;
|
||||||
|
|
||||||
|
BOARD_ITEM* new_item = GetBoard()->DuplicateAndAddItem(
|
||||||
|
item, aIncrement );
|
||||||
|
|
||||||
|
SaveCopyInUndoList( new_item, UR_NEW );
|
||||||
|
|
||||||
|
if( new_item )
|
||||||
|
{
|
||||||
|
switch( new_item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_MODULE_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_TEXT_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_LINE_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_DRAWING_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_ZONE_AREA_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_ZONE_OUTLINES;
|
||||||
|
break;
|
||||||
|
case PCB_TRACE_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_TRACK_SEGMENT;
|
||||||
|
break;
|
||||||
|
case PCB_TARGET_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_MIRE_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_DIMENSION_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_TEXT_DIMENSION_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_PAD_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_PAD_REQUEST;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( move_cmd )
|
||||||
|
{
|
||||||
|
SetMsgPanel( new_item );
|
||||||
|
SetCurItem( new_item );
|
||||||
|
|
||||||
|
m_canvas->MoveCursorToCrossHair();
|
||||||
|
|
||||||
|
// pick up the item and start moving
|
||||||
|
PostCommandMenuEvent( move_cmd );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_BASE_EDIT_FRAME::createArray()
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = GetScreen()->GetCurItem();
|
||||||
|
|
||||||
|
if( !item )
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool editingModule = NULL != dynamic_cast<FOOTPRINT_EDIT_FRAME*>( this );
|
||||||
|
|
||||||
|
BOARD* board = GetBoard();
|
||||||
|
MODULE* module = static_cast<MODULE*>( item->GetParent() );
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY::ARRAY_OPTIONS* array_opts = NULL;
|
||||||
|
|
||||||
|
const wxPoint rotPoint = item->GetCenter();
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY dialog( this, rotPoint, &array_opts );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_CREATE_ARRAY::CREATE_ARRAY_OK && array_opts != NULL )
|
||||||
|
{
|
||||||
|
PICKED_ITEMS_LIST newItemsList;
|
||||||
|
|
||||||
|
if( editingModule )
|
||||||
|
{
|
||||||
|
// modedit saves everything upfront
|
||||||
|
SaveCopyInUndoList( board->m_Modules, UR_MODEDIT );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We may also change the original item
|
||||||
|
SaveCopyInUndoList( item, UR_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString cachedString;
|
||||||
|
|
||||||
|
if( item->Type() == PCB_MODULE_T )
|
||||||
|
{
|
||||||
|
cachedString = static_cast<MODULE*>( item )->GetReferencePrefix();
|
||||||
|
}
|
||||||
|
else if( EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( item ) )
|
||||||
|
{
|
||||||
|
// Copy the text (not just take a reference
|
||||||
|
cachedString = text->GetText();
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int ptN = 0; ptN < array_opts->GetArraySize(); ptN++)
|
||||||
|
{
|
||||||
|
BOARD_ITEM* new_item = NULL;
|
||||||
|
|
||||||
|
if( ptN == 0 )
|
||||||
|
{
|
||||||
|
new_item = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( editingModule )
|
||||||
|
new_item = module->DuplicateAndAddItem( item, true );
|
||||||
|
else
|
||||||
|
new_item = board->DuplicateAndAddItem( item, true );
|
||||||
|
|
||||||
|
if( new_item )
|
||||||
|
{
|
||||||
|
array_opts->TransformItem( ptN, new_item, rotPoint );
|
||||||
|
newItemsList.PushItem( new_item );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !new_item || !array_opts->ShouldRenumberItems() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Renumber items
|
||||||
|
switch( new_item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
case PCB_TEXT_T:
|
||||||
|
{
|
||||||
|
EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( new_item );
|
||||||
|
text->SetText( array_opts->InterpolateNumberIntoString( ptN, cachedString ) );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
{
|
||||||
|
const wxString padName = array_opts->GetItemNumber( ptN );
|
||||||
|
static_cast<MODULE*>( new_item )->SetReference( cachedString + padName );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_PAD_T:
|
||||||
|
{
|
||||||
|
const wxString padName = array_opts->GetItemNumber( ptN );
|
||||||
|
static_cast<D_PAD*>( new_item )->SetPadName( padName );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !editingModule )
|
||||||
|
{
|
||||||
|
// pcbnew saves the new items like this
|
||||||
|
SaveCopyInUndoList( newItemsList, UR_NEW );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_canvas->Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -108,6 +108,11 @@ static EDA_HOTKEY HkEditBoardItem( wxT( "Edit Item" ), HK_EDIT_ITEM, 'E' );
|
||||||
static EDA_HOTKEY HkFlipItem( wxT( "Flip Item" ), HK_FLIP_ITEM, 'F' );
|
static EDA_HOTKEY HkFlipItem( wxT( "Flip Item" ), HK_FLIP_ITEM, 'F' );
|
||||||
static EDA_HOTKEY HkRotateItem( wxT( "Rotate Item" ), HK_ROTATE_ITEM, 'R' );
|
static EDA_HOTKEY HkRotateItem( wxT( "Rotate Item" ), HK_ROTATE_ITEM, 'R' );
|
||||||
static EDA_HOTKEY HkMoveItem( wxT( "Move Item" ), HK_MOVE_ITEM, 'M' );
|
static EDA_HOTKEY HkMoveItem( wxT( "Move Item" ), HK_MOVE_ITEM, 'M' );
|
||||||
|
static EDA_HOTKEY HkMoveItemExact( wxT( "Move Item Exactly" ), HK_MOVE_ITEM_EXACT, 'M' + GR_KB_CTRL );
|
||||||
|
static EDA_HOTKEY HkDuplicateItem( wxT( "Duplicate Item" ), HK_DUPLICATE_ITEM, 'D' + GR_KB_CTRL );
|
||||||
|
static EDA_HOTKEY HkDuplicateItemAndIncrement( wxT( "Duplicate Item and Increment" ),
|
||||||
|
HK_DUPLICATE_ITEM_AND_INCREMENT, 'D' + GR_KB_SHIFTCTRL );
|
||||||
|
static EDA_HOTKEY HkCreateArray( wxT( "Create Array" ), HK_CREATE_ARRAY, 'N' + GR_KB_CTRL );
|
||||||
static EDA_HOTKEY HkCopyItem( wxT( "Copy Item" ), HK_COPY_ITEM, 'C' );
|
static EDA_HOTKEY HkCopyItem( wxT( "Copy Item" ), HK_COPY_ITEM, 'C' );
|
||||||
static EDA_HOTKEY HkDragFootprint( wxT( "Drag Item" ), HK_DRAG_ITEM, 'G' );
|
static EDA_HOTKEY HkDragFootprint( wxT( "Drag Item" ), HK_DRAG_ITEM, 'G' );
|
||||||
static EDA_HOTKEY HkGetAndMoveFootprint( wxT( "Get and Move Footprint" ), HK_GET_AND_MOVE_FOOTPRINT, 'T' );
|
static EDA_HOTKEY HkGetAndMoveFootprint( wxT( "Get and Move Footprint" ), HK_GET_AND_MOVE_FOOTPRINT, 'T' );
|
||||||
|
@ -277,7 +282,9 @@ EDA_HOTKEY* board_edit_Hotkey_List[] =
|
||||||
&HkPlaceItem, &HkCopyItem,
|
&HkPlaceItem, &HkCopyItem,
|
||||||
&HkMoveItem,
|
&HkMoveItem,
|
||||||
&HkFlipItem,
|
&HkFlipItem,
|
||||||
&HkRotateItem, &HkDragFootprint,
|
&HkRotateItem, &HkMoveItemExact,
|
||||||
|
&HkDuplicateItem, &HkDuplicateItemAndIncrement, &HkCreateArray,
|
||||||
|
&HkDragFootprint,
|
||||||
&HkGetAndMoveFootprint, &HkLock_Unlock_Footprint, &HkSavefile, &HkSavefileAs,
|
&HkGetAndMoveFootprint, &HkLock_Unlock_Footprint, &HkSavefile, &HkSavefileAs,
|
||||||
&HkLoadfile, &HkFindItem, &HkEditBoardItem,
|
&HkLoadfile, &HkFindItem, &HkEditBoardItem,
|
||||||
&HkSwitch2CopperLayer, &HkSwitch2InnerLayer1,
|
&HkSwitch2CopperLayer, &HkSwitch2InnerLayer1,
|
||||||
|
@ -300,8 +307,8 @@ EDA_HOTKEY* board_edit_Hotkey_List[] =
|
||||||
// List of hotkey descriptors for the module editor
|
// List of hotkey descriptors for the module editor
|
||||||
EDA_HOTKEY* module_edit_Hotkey_List[] = {
|
EDA_HOTKEY* module_edit_Hotkey_List[] = {
|
||||||
&HkMoveItem, &HkRotateItem, &HkEditBoardItem,
|
&HkMoveItem, &HkRotateItem, &HkEditBoardItem,
|
||||||
&HkDelete,
|
&HkMoveItemExact, &HkDuplicateItem, &HkDuplicateItemAndIncrement,
|
||||||
&HkSaveModule,
|
&HkCreateArray, &HkDelete, &HkSaveModule,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ enum hotkey_id_commnand {
|
||||||
HK_FLIP_ITEM,
|
HK_FLIP_ITEM,
|
||||||
HK_COPY_ITEM,
|
HK_COPY_ITEM,
|
||||||
HK_MOVE_ITEM,
|
HK_MOVE_ITEM,
|
||||||
|
HK_MOVE_ITEM_EXACT,
|
||||||
HK_DRAG_ITEM,
|
HK_DRAG_ITEM,
|
||||||
HK_GET_AND_MOVE_FOOTPRINT,
|
HK_GET_AND_MOVE_FOOTPRINT,
|
||||||
HK_LOCK_UNLOCK_FOOTPRINT,
|
HK_LOCK_UNLOCK_FOOTPRINT,
|
||||||
|
@ -60,6 +61,9 @@ enum hotkey_id_commnand {
|
||||||
HK_SWITCH_TRACK_DISPLAY_MODE,
|
HK_SWITCH_TRACK_DISPLAY_MODE,
|
||||||
HK_FIND_ITEM,
|
HK_FIND_ITEM,
|
||||||
HK_EDIT_ITEM,
|
HK_EDIT_ITEM,
|
||||||
|
HK_DUPLICATE_ITEM,
|
||||||
|
HK_DUPLICATE_ITEM_AND_INCREMENT,
|
||||||
|
HK_CREATE_ARRAY,
|
||||||
HK_PLACE_ITEM,
|
HK_PLACE_ITEM,
|
||||||
HK_SWITCH_TRACK_WIDTH_TO_NEXT,
|
HK_SWITCH_TRACK_WIDTH_TO_NEXT,
|
||||||
HK_SWITCH_TRACK_WIDTH_TO_PREVIOUS,
|
HK_SWITCH_TRACK_WIDTH_TO_PREVIOUS,
|
||||||
|
|
|
@ -551,6 +551,13 @@ bool PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
|
||||||
OnHotkeyRotateItem( HK_FLIP_ITEM );
|
OnHotkeyRotateItem( HK_FLIP_ITEM );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HK_MOVE_ITEM_EXACT:
|
||||||
|
case HK_DUPLICATE_ITEM:
|
||||||
|
case HK_DUPLICATE_ITEM_AND_INCREMENT:
|
||||||
|
case HK_CREATE_ARRAY:
|
||||||
|
OnHotkeyDuplicateOrArrayItem( HK_Descr->m_Idcommand );
|
||||||
|
break;
|
||||||
|
|
||||||
case HK_SWITCH_HIGHCONTRAST_MODE: // switch to high contrast mode and refresh the canvas
|
case HK_SWITCH_HIGHCONTRAST_MODE: // switch to high contrast mode and refresh the canvas
|
||||||
displ_opts->m_ContrastModeDisplay = !displ_opts->m_ContrastModeDisplay;
|
displ_opts->m_ContrastModeDisplay = !displ_opts->m_ContrastModeDisplay;
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
|
@ -896,7 +903,6 @@ bool PCB_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PCB_EDIT_FRAME::OnHotkeyPlaceItem( wxDC* aDC )
|
bool PCB_EDIT_FRAME::OnHotkeyPlaceItem( wxDC* aDC )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = GetCurItem();
|
BOARD_ITEM* item = GetCurItem();
|
||||||
|
@ -1064,3 +1070,71 @@ bool PCB_EDIT_FRAME::OnHotkeyRotateItem( int aIdCommand )
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PCB_EDIT_FRAME::OnHotkeyDuplicateOrArrayItem( int aIdCommand )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = GetCurItem();
|
||||||
|
bool itemCurrentlyEdited = item && item->GetFlags();
|
||||||
|
|
||||||
|
if( itemCurrentlyEdited )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
item = PcbGeneralLocateAndDisplay();
|
||||||
|
|
||||||
|
if( item == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SetCurItem( item );
|
||||||
|
|
||||||
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
|
bool canDuplicate = true;
|
||||||
|
|
||||||
|
switch( item->Type() )
|
||||||
|
{
|
||||||
|
// Only handle items we know we can handle
|
||||||
|
case PCB_PAD_T:
|
||||||
|
canDuplicate = false;
|
||||||
|
// no break
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
case PCB_LINE_T:
|
||||||
|
case PCB_TEXT_T:
|
||||||
|
case PCB_TRACE_T:
|
||||||
|
case PCB_ZONE_AREA_T:
|
||||||
|
case PCB_TARGET_T:
|
||||||
|
case PCB_DIMENSION_T:
|
||||||
|
switch( aIdCommand )
|
||||||
|
{
|
||||||
|
case HK_CREATE_ARRAY:
|
||||||
|
if( canDuplicate )
|
||||||
|
evt_type = ID_POPUP_PCB_CREATE_ARRAY;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HK_DUPLICATE_ITEM_AND_INCREMENT:
|
||||||
|
if( canDuplicate )
|
||||||
|
evt_type = ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HK_DUPLICATE_ITEM:
|
||||||
|
if( canDuplicate )
|
||||||
|
evt_type = ID_POPUP_PCB_DUPLICATE_ITEM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HK_MOVE_ITEM_EXACT:
|
||||||
|
evt_type = ID_POPUP_PCB_MOVE_EXACT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// We don't handle other commands here
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxASSERT_MSG( false, "Unhandled move, duplicate or array for "
|
||||||
|
"object type " + item->Type() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PostCommandMenuEvent( evt_type );
|
||||||
|
}
|
||||||
|
|
|
@ -152,31 +152,72 @@ bool FOOTPRINT_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPos
|
||||||
OnHotkeyMoveItem( HK_MOVE_ITEM );
|
OnHotkeyMoveItem( HK_MOVE_ITEM );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HK_MOVE_ITEM_EXACT:
|
||||||
|
if( blockActive )
|
||||||
|
{
|
||||||
|
cmd.SetId( ID_POPUP_MOVE_BLOCK_EXACT );
|
||||||
|
GetEventHandler()->ProcessEvent( cmd );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OnHotkeyMoveItemExact();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case HK_ROTATE_ITEM:
|
case HK_ROTATE_ITEM:
|
||||||
OnHotkeyRotateItem( HK_ROTATE_ITEM );
|
OnHotkeyRotateItem( HK_ROTATE_ITEM );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HK_DUPLICATE_ITEM:
|
||||||
|
case HK_DUPLICATE_ITEM_AND_INCREMENT:
|
||||||
|
OnHotkeyDuplicateItem( HK_Descr->m_Idcommand );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HK_CREATE_ARRAY:
|
||||||
|
PostCommandMenuEvent( ID_POPUP_PCB_CREATE_ARRAY );
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
|
BOARD_ITEM* FOOTPRINT_EDIT_FRAME::PrepareItemForHotkey( bool aFailIfCurrentlyEdited )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = GetCurItem();
|
BOARD_ITEM* item = GetCurItem();
|
||||||
bool itemCurrentlyEdited = item && item->GetFlags();
|
bool itemCurrentlyEdited = item && item->GetFlags();
|
||||||
bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE;
|
bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE;
|
||||||
|
|
||||||
if( itemCurrentlyEdited || blockActive )
|
if( aFailIfCurrentlyEdited )
|
||||||
return false;
|
{
|
||||||
|
if( itemCurrentlyEdited || blockActive )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
item = ModeditLocateAndDisplay();
|
item = ModeditLocateAndDisplay();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( blockActive )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if( !itemCurrentlyEdited )
|
||||||
|
item = ModeditLocateAndDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// set item if we can, but don't clear if not
|
||||||
|
if( item )
|
||||||
|
SetCurItem( item );
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = PrepareItemForHotkey( true );
|
||||||
|
|
||||||
if( item == NULL )
|
if( item == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SetCurItem( item );
|
|
||||||
|
|
||||||
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
|
@ -209,35 +250,17 @@ bool FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( evt_type != 0 )
|
return PostCommandMenuEvent( evt_type );
|
||||||
{
|
|
||||||
wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
|
|
||||||
evt.SetEventObject( this );
|
|
||||||
evt.SetId( evt_type );
|
|
||||||
wxPostEvent( this, evt );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FOOTPRINT_EDIT_FRAME::OnHotkeyDeleteItem( int aIdCommand )
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyDeleteItem( int aIdCommand )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = GetCurItem();
|
BOARD_ITEM* item = PrepareItemForHotkey( true );
|
||||||
bool itemCurrentlyEdited = item && item->GetFlags();
|
|
||||||
bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE;
|
|
||||||
|
|
||||||
if( itemCurrentlyEdited || blockActive )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
item = ModeditLocateAndDisplay();
|
|
||||||
|
|
||||||
if( item == NULL )
|
if( item == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SetCurItem( item );
|
|
||||||
|
|
||||||
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
|
@ -264,35 +287,17 @@ bool FOOTPRINT_EDIT_FRAME::OnHotkeyDeleteItem( int aIdCommand )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( evt_type != 0 )
|
return PostCommandMenuEvent( evt_type );
|
||||||
{
|
|
||||||
wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
|
|
||||||
evt.SetEventObject( this );
|
|
||||||
evt.SetId( evt_type );
|
|
||||||
wxPostEvent( this, evt );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand )
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = GetCurItem();
|
BOARD_ITEM* item = PrepareItemForHotkey( true );
|
||||||
bool itemCurrentlyEdited = item && item->GetFlags();
|
|
||||||
bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE;
|
|
||||||
|
|
||||||
if( itemCurrentlyEdited || blockActive )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
item = ModeditLocateAndDisplay();
|
|
||||||
|
|
||||||
if( item == NULL )
|
if( item == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SetCurItem( item );
|
|
||||||
|
|
||||||
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
|
@ -319,36 +324,71 @@ bool FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( evt_type != 0 )
|
return PostCommandMenuEvent( evt_type );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItemExact()
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = PrepareItemForHotkey( false );
|
||||||
|
|
||||||
|
if( item == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
|
case PCB_PAD_T:
|
||||||
evt.SetEventObject( this );
|
case PCB_MODULE_EDGE_T:
|
||||||
evt.SetId( evt_type );
|
case PCB_MODULE_TEXT_T:
|
||||||
wxPostEvent( this, evt );
|
evt_type = ID_POPUP_PCB_MOVE_EXACT;
|
||||||
return true;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return PostCommandMenuEvent( evt_type );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyDuplicateItem( int aIdCommand )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = PrepareItemForHotkey( true );
|
||||||
|
|
||||||
|
if( item == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
|
switch( item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_PAD_T:
|
||||||
|
case PCB_MODULE_EDGE_T:
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
if( aIdCommand == HK_DUPLICATE_ITEM )
|
||||||
|
evt_type = ID_POPUP_PCB_DUPLICATE_ITEM;
|
||||||
|
else
|
||||||
|
evt_type = ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PostCommandMenuEvent( evt_type );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool FOOTPRINT_EDIT_FRAME::OnHotkeyRotateItem( int aIdCommand )
|
bool FOOTPRINT_EDIT_FRAME::OnHotkeyRotateItem( int aIdCommand )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item = GetCurItem();
|
BOARD_ITEM* item = PrepareItemForHotkey( false );
|
||||||
bool itemCurrentlyEdited = item && item->GetFlags();
|
|
||||||
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
|
||||||
bool blockActive = GetScreen()->m_BlockLocate.GetCommand() != BLOCK_IDLE;
|
|
||||||
|
|
||||||
if( blockActive )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if( !itemCurrentlyEdited )
|
|
||||||
item = ModeditLocateAndDisplay();
|
|
||||||
|
|
||||||
if( item == NULL )
|
if( item == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SetCurItem( item );
|
int evt_type = 0; // Used to post a wxCommandEvent on demand
|
||||||
|
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
|
@ -362,14 +402,5 @@ bool FOOTPRINT_EDIT_FRAME::OnHotkeyRotateItem( int aIdCommand )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( evt_type != 0 )
|
return PostCommandMenuEvent( evt_type );
|
||||||
{
|
|
||||||
wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
|
|
||||||
evt.SetEventObject( this );
|
|
||||||
evt.SetId( evt_type );
|
|
||||||
wxPostEvent( this, evt );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,8 @@
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
|
||||||
#include <dialog_edit_module_for_Modedit.h>
|
#include <dialog_edit_module_for_Modedit.h>
|
||||||
|
#include <dialog_move_exact.h>
|
||||||
|
#include <dialog_create_array.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
#include <menus_helpers.h>
|
#include <menus_helpers.h>
|
||||||
#include <footprint_wizard_frame.h>
|
#include <footprint_wizard_frame.h>
|
||||||
|
@ -64,10 +66,13 @@
|
||||||
|
|
||||||
|
|
||||||
// Functions defined in block_module_editor, but used here
|
// Functions defined in block_module_editor, but used here
|
||||||
// These 2 functions are used in modedit to rotate or mirror the whole footprint
|
// These 3 functions are used in modedit to rotate, mirror or move the
|
||||||
// so they are called with force_all = true
|
// whole footprint so they are called with force_all = true
|
||||||
void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
||||||
void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all = false );
|
||||||
|
void MoveMarkedItemsExactly( MODULE* module, const wxPoint& centre,
|
||||||
|
const wxPoint& translation, double rotation,
|
||||||
|
bool force_all = false );
|
||||||
|
|
||||||
|
|
||||||
BOARD_ITEM* FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay( int aHotKeyCode )
|
BOARD_ITEM* FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay( int aHotKeyCode )
|
||||||
|
@ -635,6 +640,22 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
m_canvas->MoveCursorToCrossHair();
|
m_canvas->MoveCursorToCrossHair();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_DUPLICATE_ITEM:
|
||||||
|
duplicateItems( false );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT:
|
||||||
|
duplicateItems( true );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_MOVE_EXACT:
|
||||||
|
moveExact();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_PCB_CREATE_ARRAY:
|
||||||
|
createArray();
|
||||||
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_IMPORT_PAD_SETTINGS:
|
case ID_POPUP_PCB_IMPORT_PAD_SETTINGS:
|
||||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||||
m_canvas->MoveCursorToCrossHair();
|
m_canvas->MoveCursorToCrossHair();
|
||||||
|
@ -735,6 +756,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
|
|
||||||
case ID_MODEDIT_MODULE_ROTATE:
|
case ID_MODEDIT_MODULE_ROTATE:
|
||||||
case ID_MODEDIT_MODULE_MIRROR:
|
case ID_MODEDIT_MODULE_MIRROR:
|
||||||
|
case ID_MODEDIT_MODULE_MOVE_EXACT:
|
||||||
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||||
Transform( (MODULE*) GetScreen()->GetCurItem(), id );
|
Transform( (MODULE*) GetScreen()->GetCurItem(), id );
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
|
@ -799,6 +821,12 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
HandleBlockEnd( &dc );
|
HandleBlockEnd( &dc );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_POPUP_MOVE_BLOCK_EXACT:
|
||||||
|
GetScreen()->m_BlockLocate.SetCommand( BLOCK_MOVE_EXACT );
|
||||||
|
GetScreen()->m_BlockLocate.SetMessageBlock( this );
|
||||||
|
HandleBlockEnd( &dc );
|
||||||
|
break;
|
||||||
|
|
||||||
case ID_GEN_IMPORT_DXF_FILE:
|
case ID_GEN_IMPORT_DXF_FILE:
|
||||||
InvokeDXFDialogModuleImport( this, GetBoard()->m_Modules );
|
InvokeDXFDialogModuleImport( this, GetBoard()->m_Modules );
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
|
@ -812,6 +840,72 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FOOTPRINT_EDIT_FRAME::moveExact()
|
||||||
|
{
|
||||||
|
wxPoint translation;
|
||||||
|
double rotation = 0;
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT dialog( this, translation, rotation );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_MOVE_EXACT::MOVE_OK )
|
||||||
|
{
|
||||||
|
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||||
|
|
||||||
|
BOARD_ITEM* item = GetScreen()->GetCurItem();
|
||||||
|
|
||||||
|
item->Move( translation );
|
||||||
|
item->Rotate( item->GetPosition(), rotation );
|
||||||
|
m_canvas->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_canvas->MoveCursorToCrossHair();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FOOTPRINT_EDIT_FRAME::duplicateItems( bool aIncrement )
|
||||||
|
{
|
||||||
|
SaveCopyInUndoList( GetBoard()->m_Modules, UR_MODEDIT );
|
||||||
|
|
||||||
|
BOARD_ITEM* item = GetScreen()->GetCurItem();
|
||||||
|
MODULE* module = static_cast<MODULE*>( item->GetParent() );
|
||||||
|
|
||||||
|
int move_cmd = 0;
|
||||||
|
|
||||||
|
BOARD_ITEM* new_item = module->DuplicateAndAddItem(
|
||||||
|
item, aIncrement );
|
||||||
|
|
||||||
|
if( new_item )
|
||||||
|
{
|
||||||
|
switch( new_item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_PAD_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_PAD_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST;
|
||||||
|
break;
|
||||||
|
case PCB_MODULE_EDGE_T:
|
||||||
|
move_cmd = ID_POPUP_PCB_MOVE_EDGE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( move_cmd )
|
||||||
|
{
|
||||||
|
SetMsgPanel( new_item );
|
||||||
|
SetCurItem( new_item );
|
||||||
|
|
||||||
|
m_canvas->MoveCursorToCrossHair();
|
||||||
|
|
||||||
|
// pick up the item and start moving
|
||||||
|
PostCommandMenuEvent( move_cmd );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
|
void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
|
||||||
{
|
{
|
||||||
switch( transform )
|
switch( transform )
|
||||||
|
@ -824,6 +918,23 @@ void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
|
||||||
MirrorMarkedItems( module, wxPoint(0,0), true );
|
MirrorMarkedItems( module, wxPoint(0,0), true );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_MODEDIT_MODULE_MOVE_EXACT:
|
||||||
|
{
|
||||||
|
wxPoint translation;
|
||||||
|
double rotation = 0;
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT dialog( this, translation, rotation );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_MOVE_EXACT::MOVE_OK )
|
||||||
|
{
|
||||||
|
MoveMarkedItemsExactly( module, wxPoint(0, 0),
|
||||||
|
translation, rotation, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DisplayInfoMessage( this, wxT( "Not available" ) );
|
DisplayInfoMessage( this, wxT( "Not available" ) );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -173,7 +173,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
// so deselect the active tool
|
// so deselect the active tool
|
||||||
SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString );
|
SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString );
|
||||||
SetCurItem( NULL );
|
SetCurItem( NULL );
|
||||||
m_canvas->Refresh();
|
m_canvas->Refresh();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -260,6 +260,11 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen
|
||||||
AddMenuItem( PopMenu, ID_POPUP_DELETE_BLOCK,
|
AddMenuItem( PopMenu, ID_POPUP_DELETE_BLOCK,
|
||||||
_( "Delete Block (shift+ctrl + drag mouse)" ),
|
_( "Delete Block (shift+ctrl + drag mouse)" ),
|
||||||
KiBitmap( delete_xpm ) );
|
KiBitmap( delete_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Block Exactly" ),
|
||||||
|
g_Module_Editor_Hokeys_Descr, HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_MOVE_BLOCK_EXACT,
|
||||||
|
msg, KiBitmap( move_xpm ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -286,10 +291,14 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen
|
||||||
KiBitmap( rotate_module_ccw_xpm ) );
|
KiBitmap( rotate_module_ccw_xpm ) );
|
||||||
AddMenuItem( transform_choice, ID_MODEDIT_MODULE_MIRROR, _( "Mirror" ),
|
AddMenuItem( transform_choice, ID_MODEDIT_MODULE_MIRROR, _( "Mirror" ),
|
||||||
KiBitmap( mirror_footprint_axisY_xpm ) );
|
KiBitmap( mirror_footprint_axisY_xpm ) );
|
||||||
|
AddMenuItem( transform_choice, ID_MODEDIT_MODULE_MOVE_EXACT, _( "Move Exactly" ),
|
||||||
|
KiBitmap( move_module_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Edit Footprint" ), g_Module_Editor_Hokeys_Descr, HK_EDIT_ITEM );
|
msg = AddHotkeyName( _( "Edit Footprint" ), g_Module_Editor_Hokeys_Descr, HK_EDIT_ITEM );
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_EDIT_MODULE_PRMS, msg, KiBitmap( edit_module_xpm ) );
|
AddMenuItem( PopMenu, ID_POPUP_PCB_EDIT_MODULE_PRMS, msg, KiBitmap( edit_module_xpm ) );
|
||||||
AddMenuItem( PopMenu, transform_choice, ID_MODEDIT_TRANSFORM_MODULE,
|
AddMenuItem( PopMenu, transform_choice, ID_MODEDIT_TRANSFORM_MODULE,
|
||||||
_( "Transform Footprint" ), KiBitmap( edit_xpm ) );
|
_( "Transform Footprint" ), KiBitmap( edit_xpm ) );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,6 +318,16 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen
|
||||||
msg = AddHotkeyName( _("Delete Pad" ), g_Module_Editor_Hokeys_Descr, HK_DELETE );
|
msg = AddHotkeyName( _("Delete Pad" ), g_Module_Editor_Hokeys_Descr, HK_DELETE );
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_DELETE_PAD, msg, KiBitmap( delete_pad_xpm ) );
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DELETE_PAD, msg, KiBitmap( delete_pad_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Pad" ), g_Module_Editor_Hokeys_Descr, HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DUPLICATE_ITEM, msg, KiBitmap( duplicate_pad_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Pad Exactly" ), g_Module_Editor_Hokeys_Descr, HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EXACT, msg, KiBitmap( move_pad_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Pad Array" ), g_Module_Editor_Hokeys_Descr, HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_CREATE_ARRAY, msg, KiBitmap( array_pad_xpm ) );
|
||||||
|
|
||||||
|
|
||||||
if( !flags )
|
if( !flags )
|
||||||
{
|
{
|
||||||
PopMenu->AppendSeparator();
|
PopMenu->AppendSeparator();
|
||||||
|
@ -331,6 +350,30 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen
|
||||||
HK_ROTATE_ITEM );
|
HK_ROTATE_ITEM );
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_ROTATE_TEXTMODULE, msg, KiBitmap( rotate_field_xpm ) );
|
AddMenuItem( PopMenu, ID_POPUP_PCB_ROTATE_TEXTMODULE, msg, KiBitmap( rotate_field_xpm ) );
|
||||||
|
|
||||||
|
{
|
||||||
|
// Do not show option to replicate value or reference fields
|
||||||
|
// (there can only be one of each)
|
||||||
|
|
||||||
|
const MODULE* module = static_cast<MODULE*>( item->GetParent() );
|
||||||
|
const TEXTE_MODULE* text = static_cast<TEXTE_MODULE*>( item );
|
||||||
|
|
||||||
|
if( &module->Reference() != text && &module->Value() != text )
|
||||||
|
{
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Text" ),
|
||||||
|
g_Module_Editor_Hokeys_Descr, HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Text Array" ),
|
||||||
|
g_Module_Editor_Hokeys_Descr, HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_text_xpm ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Text Exactly" ), g_Module_Editor_Hokeys_Descr, HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EXACT, msg, KiBitmap( move_field_xpm ) );
|
||||||
|
|
||||||
if( !flags )
|
if( !flags )
|
||||||
{
|
{
|
||||||
msg = AddHotkeyName( _("Edit Text" ), g_Module_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _("Edit Text" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
@ -359,6 +402,15 @@ bool FOOTPRINT_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMen
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EDGE, msg, KiBitmap( move_line_xpm ) );
|
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EDGE, msg, KiBitmap( move_line_xpm ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Edge" ), g_Module_Editor_Hokeys_Descr, HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DUPLICATE_ITEM, msg, KiBitmap( duplicate_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Edge Exactly" ), g_Module_Editor_Hokeys_Descr, HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EXACT, msg, KiBitmap( move_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Edge Array" ), g_Module_Editor_Hokeys_Descr, HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_CREATE_ARRAY, msg, KiBitmap( array_line_xpm ) );
|
||||||
|
|
||||||
if( ( flags & (IS_NEW | IS_MOVED) ) == IS_MOVED )
|
if( ( flags & (IS_NEW | IS_MOVED) ) == IS_MOVED )
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_PLACE_EDGE, _( "Place edge" ),
|
AddMenuItem( PopMenu, ID_POPUP_PCB_PLACE_EDGE, _( "Place edge" ),
|
||||||
KiBitmap( checked_ok_xpm ) );
|
KiBitmap( checked_ok_xpm ) );
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include <pcb_base_edit_frame.h>
|
#include <pcb_base_edit_frame.h>
|
||||||
#include <io_mgr.h>
|
#include <io_mgr.h>
|
||||||
|
|
||||||
|
class PCB_LAYER_WIDGET;
|
||||||
class FP_LIB_TABLE;
|
class FP_LIB_TABLE;
|
||||||
|
|
||||||
namespace PCB { struct IFACE; } // A KIFACE_I coded in pcbnew.c
|
namespace PCB { struct IFACE; } // A KIFACE_I coded in pcbnew.c
|
||||||
|
@ -145,10 +145,14 @@ public:
|
||||||
*/
|
*/
|
||||||
bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
|
bool OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL );
|
||||||
|
|
||||||
|
BOARD_ITEM* PrepareItemForHotkey( bool failIfCurrentlyEdited );
|
||||||
|
|
||||||
bool OnHotkeyEditItem( int aIdCommand );
|
bool OnHotkeyEditItem( int aIdCommand );
|
||||||
bool OnHotkeyDeleteItem( int aIdCommand );
|
bool OnHotkeyDeleteItem( int aIdCommand );
|
||||||
bool OnHotkeyMoveItem( int aIdCommand );
|
bool OnHotkeyMoveItem( int aIdCommand );
|
||||||
|
bool OnHotkeyMoveItemExact();
|
||||||
bool OnHotkeyRotateItem( int aIdCommand );
|
bool OnHotkeyRotateItem( int aIdCommand );
|
||||||
|
bool OnHotkeyDuplicateItem( int aIdCommand );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Show3D_Frame
|
* Function Show3D_Frame
|
||||||
|
@ -530,6 +534,22 @@ protected:
|
||||||
* @return a pointer to the new text, or NULL if aborted
|
* @return a pointer to the new text, or NULL if aborted
|
||||||
*/
|
*/
|
||||||
TEXTE_MODULE* CreateTextModule( MODULE* aModule, wxDC* aDC );
|
TEXTE_MODULE* CreateTextModule( MODULE* aModule, wxDC* aDC );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function moveExact
|
||||||
|
* Move the selected item exactly, popping up a dialog to allow the
|
||||||
|
* user the enter the move delta
|
||||||
|
*/
|
||||||
|
void moveExact();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function duplicateItems
|
||||||
|
* Duplicate the item under the cursor
|
||||||
|
* @param aIncrement increment the number of pad (if that is what is selected)
|
||||||
|
*/
|
||||||
|
void duplicateItems( bool aIncrement );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MODULE_EDITOR_FRAME_H_
|
#endif // MODULE_EDITOR_FRAME_H_
|
||||||
|
|
|
@ -148,6 +148,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_EDIT_FRAME, PCB_BASE_FRAME )
|
||||||
// Module transformations
|
// Module transformations
|
||||||
EVT_MENU( ID_MODEDIT_MODULE_ROTATE, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
EVT_MENU( ID_MODEDIT_MODULE_ROTATE, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
||||||
EVT_MENU( ID_MODEDIT_MODULE_MIRROR, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
EVT_MENU( ID_MODEDIT_MODULE_MIRROR, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
||||||
|
EVT_MENU( ID_MODEDIT_MODULE_MOVE_EXACT, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
||||||
|
|
||||||
EVT_MENU( ID_PCB_DRAWINGS_WIDTHS_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
EVT_MENU( ID_PCB_DRAWINGS_WIDTHS_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
||||||
EVT_MENU( ID_PCB_PAD_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
EVT_MENU( ID_PCB_PAD_SETUP, FOOTPRINT_EDIT_FRAME::Process_Special_Functions )
|
||||||
|
|
|
@ -200,8 +200,27 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
||||||
HK_MOVE_ITEM );
|
HK_MOVE_ITEM );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_DRAWING_REQUEST,
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_DRAWING_REQUEST,
|
||||||
msg, KiBitmap( move_xpm ) );
|
msg, KiBitmap( move_xpm ) );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_DRAWING, _( "Edit Drawing" ),
|
|
||||||
KiBitmap( edit_xpm ) );
|
msg = AddHotkeyName( _( "Duplicate Drawing" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Drawing Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Drawing Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Edit Drawing" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_EDIT_ITEM );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_DRAWING,
|
||||||
|
msg, KiBitmap( edit_xpm ) );
|
||||||
|
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_DRAWING,
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_DRAWING,
|
||||||
_( "Delete Drawing" ), KiBitmap( delete_xpm ) );
|
_( "Delete Drawing" ), KiBitmap( delete_xpm ) );
|
||||||
|
|
||||||
|
@ -252,12 +271,30 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
||||||
msg = AddHotkeyName( _( "Edit Dimension" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Edit Dimension" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_EDIT_ITEM );
|
HK_EDIT_ITEM );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_DIMENSION, msg, KiBitmap( edit_xpm ) );
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_DIMENSION, msg, KiBitmap( edit_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Move Dimension Text" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Move Dimension Text" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_MOVE_ITEM );
|
HK_MOVE_ITEM );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_TEXT_DIMENSION_REQUEST,
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_TEXT_DIMENSION_REQUEST,
|
||||||
msg, KiBitmap( move_text_xpm ) );
|
msg, KiBitmap( move_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Dimension" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Dimension Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Dimension Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_text_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Delete Dimension" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Delete Dimension" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_DELETE );
|
HK_DELETE );
|
||||||
|
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_DIMENSION,
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_DIMENSION,
|
||||||
msg, KiBitmap( delete_xpm ) );
|
msg, KiBitmap( delete_xpm ) );
|
||||||
}
|
}
|
||||||
|
@ -268,10 +305,28 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
||||||
{
|
{
|
||||||
msg = AddHotkeyName( _( "Move Target" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Move Target" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_MOVE_ITEM );
|
HK_MOVE_ITEM );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_MIRE_REQUEST, msg, KiBitmap( move_xpm ) );
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_MIRE_REQUEST,
|
||||||
|
msg, KiBitmap( move_target_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Target Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_target_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Target" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_target_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Target Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_target_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Edit Target" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Edit Target" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_EDIT_ITEM );
|
HK_EDIT_ITEM );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_MIRE, msg, KiBitmap( edit_xpm ) );
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_EDIT_MIRE, msg, KiBitmap( edit_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Delete Target" ), g_Board_Editor_Hokeys_Descr, HK_DELETE );
|
msg = AddHotkeyName( _( "Delete Target" ), g_Board_Editor_Hokeys_Descr, HK_DELETE );
|
||||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_MIRE,
|
AddMenuItem( aPopMenu, ID_POPUP_PCB_DELETE_MIRE,
|
||||||
msg, KiBitmap( delete_xpm ) );
|
msg, KiBitmap( delete_xpm ) );
|
||||||
|
@ -500,10 +555,27 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
|
||||||
HK_DRAG_TRACK_KEEP_SLOPE );
|
HK_DRAG_TRACK_KEEP_SLOPE );
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE,
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT_KEEP_SLOPE,
|
||||||
msg, KiBitmap( drag_segment_withslope_xpm ) );
|
msg, KiBitmap( drag_segment_withslope_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Drag Segment" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Drag Segment" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_DRAG_ITEM );
|
HK_DRAG_ITEM );
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT,
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DRAG_TRACK_SEGMENT,
|
||||||
msg, KiBitmap( drag_track_segment_xpm ) );
|
msg, KiBitmap( drag_track_segment_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Track" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Track Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_line_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Track Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( PopMenu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_line_xpm ) );
|
||||||
|
|
||||||
AddMenuItem( PopMenu, ID_POPUP_PCB_BREAK_TRACK,
|
AddMenuItem( PopMenu, ID_POPUP_PCB_BREAK_TRACK,
|
||||||
_( "Break Track" ), KiBitmap( break_line_xpm ) );
|
_( "Break Track" ), KiBitmap( break_line_xpm ) );
|
||||||
}
|
}
|
||||||
|
@ -688,7 +760,17 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu*
|
||||||
_( "Add Cutout Area" ), KiBitmap( add_zone_cutout_xpm ) );
|
_( "Add Cutout Area" ), KiBitmap( add_zone_cutout_xpm ) );
|
||||||
|
|
||||||
AddMenuItem( zones_menu, ID_POPUP_PCB_ZONE_DUPLICATE,
|
AddMenuItem( zones_menu, ID_POPUP_PCB_ZONE_DUPLICATE,
|
||||||
_( "Duplicate Zone" ), KiBitmap( zone_duplicate_xpm ) );
|
_( "Duplicate Zone Onto Layer" ), KiBitmap( zone_duplicate_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate Zone" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( zones_menu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( zone_duplicate_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Zone Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( zones_menu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_zone_xpm ) );
|
||||||
|
|
||||||
zones_menu->AppendSeparator();
|
zones_menu->AppendSeparator();
|
||||||
|
|
||||||
|
@ -705,6 +787,11 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu*
|
||||||
msg = AddHotkeyName( _( "Move Zone" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
msg = AddHotkeyName( _( "Move Zone" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
||||||
AddMenuItem( zones_menu, ID_POPUP_PCB_MOVE_ZONE_OUTLINES, msg, KiBitmap( move_xpm ) );
|
AddMenuItem( zones_menu, ID_POPUP_PCB_MOVE_ZONE_OUTLINES, msg, KiBitmap( move_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Zone Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( zones_menu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_zone_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Edit Zone Properties" ), g_Board_Editor_Hokeys_Descr,
|
msg = AddHotkeyName( _( "Edit Zone Properties" ), g_Board_Editor_Hokeys_Descr,
|
||||||
HK_EDIT_ITEM );
|
HK_EDIT_ITEM );
|
||||||
AddMenuItem( zones_menu, ID_POPUP_PCB_EDIT_ZONE_PARAMS,
|
AddMenuItem( zones_menu, ID_POPUP_PCB_EDIT_ZONE_PARAMS,
|
||||||
|
@ -741,6 +828,22 @@ void PCB_EDIT_FRAME::createPopUpMenuForFootprints( MODULE* aModule, wxMenu* menu
|
||||||
msg = AddHotkeyName( _( "Move" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
msg = AddHotkeyName( _( "Move" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
||||||
AddMenuItem( sub_menu_footprint, ID_POPUP_PCB_MOVE_MODULE_REQUEST,
|
AddMenuItem( sub_menu_footprint, ID_POPUP_PCB_MOVE_MODULE_REQUEST,
|
||||||
msg, KiBitmap( move_module_xpm ) );
|
msg, KiBitmap( move_module_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_module_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_module_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_module_xpm ) );
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Drag" ), g_Board_Editor_Hokeys_Descr, HK_DRAG_ITEM );
|
msg = AddHotkeyName( _( "Drag" ), g_Board_Editor_Hokeys_Descr, HK_DRAG_ITEM );
|
||||||
AddMenuItem( sub_menu_footprint, ID_POPUP_PCB_DRAG_MODULE_REQUEST,
|
AddMenuItem( sub_menu_footprint, ID_POPUP_PCB_DRAG_MODULE_REQUEST,
|
||||||
msg, KiBitmap( drag_module_xpm ) );
|
msg, KiBitmap( drag_module_xpm ) );
|
||||||
|
@ -791,6 +894,21 @@ void PCB_EDIT_FRAME::createPopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* me
|
||||||
msg = AddHotkeyName( _( "Move" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
msg = AddHotkeyName( _( "Move" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
||||||
AddMenuItem( sub_menu_Fp_text, ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST,
|
AddMenuItem( sub_menu_Fp_text, ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST,
|
||||||
msg, KiBitmap( move_field_xpm ) );
|
msg, KiBitmap( move_field_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _( "Duplicate" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_DUPLICATE_ITEM );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
msg, KiBitmap( duplicate_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Move Exactly" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_MOVE_ITEM_EXACT );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
msg, KiBitmap( move_text_xpm ) );
|
||||||
|
|
||||||
|
msg = AddHotkeyName( _("Create Array" ), g_Module_Editor_Hokeys_Descr,
|
||||||
|
HK_CREATE_ARRAY );
|
||||||
|
AddMenuItem( menu, ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
msg, KiBitmap( array_text_xpm ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = AddHotkeyName( _( "Rotate" ), g_Board_Editor_Hokeys_Descr, HK_ROTATE_ITEM );
|
msg = AddHotkeyName( _( "Rotate" ), g_Board_Editor_Hokeys_Descr, HK_ROTATE_ITEM );
|
||||||
|
|
|
@ -31,3 +31,18 @@ void PCB_BASE_EDIT_FRAME::SetRotationAngle( int aRotationAngle )
|
||||||
|
|
||||||
m_rotationAngle = aRotationAngle;
|
m_rotationAngle = aRotationAngle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PCB_BASE_EDIT_FRAME::PostCommandMenuEvent( int evt_type )
|
||||||
|
{
|
||||||
|
if( evt_type != 0 )
|
||||||
|
{
|
||||||
|
wxCommandEvent evt( wxEVT_COMMAND_MENU_SELECTED );
|
||||||
|
evt.SetEventObject( this );
|
||||||
|
evt.SetId( evt_type );
|
||||||
|
wxPostEvent( this, evt );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -69,9 +69,19 @@ public:
|
||||||
int GetRotationAngle() const { return m_rotationAngle; }
|
int GetRotationAngle() const { return m_rotationAngle; }
|
||||||
void SetRotationAngle( int aRotationAngle );
|
void SetRotationAngle( int aRotationAngle );
|
||||||
|
|
||||||
|
bool PostCommandMenuEvent( int evt_type );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// User defined rotation angle (in tenths of a degree).
|
/// User defined rotation angle (in tenths of a degree).
|
||||||
int m_rotationAngle;
|
int m_rotationAngle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function createArray
|
||||||
|
* Create an array of the selected item (invokes the dialogue)
|
||||||
|
* This function is shared between pcbnew and modedit, as it is virtually
|
||||||
|
* the same
|
||||||
|
*/
|
||||||
|
void createArray();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -62,6 +62,10 @@ enum pcbnew_ids
|
||||||
ID_POPUP_PCB_ROTATE_PAD,
|
ID_POPUP_PCB_ROTATE_PAD,
|
||||||
ID_POPUP_PCB_MOVE_PAD_REQUEST,
|
ID_POPUP_PCB_MOVE_PAD_REQUEST,
|
||||||
ID_POPUP_PCB_DRAG_PAD_REQUEST,
|
ID_POPUP_PCB_DRAG_PAD_REQUEST,
|
||||||
|
ID_POPUP_PCB_DUPLICATE_ITEM,
|
||||||
|
ID_POPUP_PCB_DUPLICATE_ITEM_AND_INCREMENT,
|
||||||
|
ID_POPUP_PCB_MOVE_EXACT,
|
||||||
|
ID_POPUP_PCB_CREATE_ARRAY,
|
||||||
|
|
||||||
ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST,
|
ID_POPUP_PCB_MOVE_TEXTMODULE_REQUEST,
|
||||||
ID_POPUP_PCB_ROTATE_TEXTMODULE,
|
ID_POPUP_PCB_ROTATE_TEXTMODULE,
|
||||||
|
@ -347,6 +351,7 @@ enum pcbnew_ids
|
||||||
ID_MODEDIT_TRANSFORM_MODULE,
|
ID_MODEDIT_TRANSFORM_MODULE,
|
||||||
ID_MODEDIT_MODULE_ROTATE,
|
ID_MODEDIT_MODULE_ROTATE,
|
||||||
ID_MODEDIT_MODULE_MIRROR,
|
ID_MODEDIT_MODULE_MIRROR,
|
||||||
|
ID_MODEDIT_MODULE_MOVE_EXACT,
|
||||||
ID_MODEDIT_IMPORT_PART,
|
ID_MODEDIT_IMPORT_PART,
|
||||||
ID_MODEDIT_EXPORT_PART,
|
ID_MODEDIT_EXPORT_PART,
|
||||||
ID_MODEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,
|
ID_MODEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,
|
||||||
|
|
|
@ -64,6 +64,22 @@ TOOL_ACTION COMMON_ACTIONS::editActivate( "pcbnew.InteractiveEdit",
|
||||||
AS_GLOBAL, 'M',
|
AS_GLOBAL, 'M',
|
||||||
"Move", "Moves the selected item(s)", AF_ACTIVATE );
|
"Move", "Moves the selected item(s)", AF_ACTIVATE );
|
||||||
|
|
||||||
|
TOOL_ACTION COMMON_ACTIONS::duplicate( "pcbnew.InteractiveEdit.duplicate",
|
||||||
|
AS_GLOBAL, MD_CTRL + int( 'D' ),
|
||||||
|
"Duplicate", "Duplicates the selected item(s)" );
|
||||||
|
|
||||||
|
TOOL_ACTION COMMON_ACTIONS::duplicateIncrement( "pcbnew.InteractiveEdit.duplicateIncrementPads",
|
||||||
|
AS_GLOBAL, MD_CTRL + MD_SHIFT + int( 'D' ),
|
||||||
|
"Duplicate", "Duplicates the selected item(s), incrementing pad numbers" );
|
||||||
|
|
||||||
|
TOOL_ACTION COMMON_ACTIONS::moveExact( "pcbnew.InteractiveEdit.moveExact",
|
||||||
|
AS_GLOBAL, MD_CTRL + int( 'M' ),
|
||||||
|
"Move Exactly...", "Moves the selected item(s) by an exact amount" );
|
||||||
|
|
||||||
|
TOOL_ACTION COMMON_ACTIONS::createArray( "pcbnew.InteractiveEdit.createArray",
|
||||||
|
AS_GLOBAL, MD_CTRL + int('N'),
|
||||||
|
"Create array", "Create array", AF_ACTIVATE );
|
||||||
|
|
||||||
TOOL_ACTION COMMON_ACTIONS::rotate( "pcbnew.InteractiveEdit.rotate",
|
TOOL_ACTION COMMON_ACTIONS::rotate( "pcbnew.InteractiveEdit.rotate",
|
||||||
AS_GLOBAL, 'R',
|
AS_GLOBAL, 'R',
|
||||||
"Rotate", "Rotates selected item(s)" );
|
"Rotate", "Rotates selected item(s)" );
|
||||||
|
|
|
@ -65,6 +65,15 @@ public:
|
||||||
/// Activation of the edit tool
|
/// Activation of the edit tool
|
||||||
static TOOL_ACTION properties;
|
static TOOL_ACTION properties;
|
||||||
|
|
||||||
|
/// Activation of the exact move tool
|
||||||
|
static TOOL_ACTION moveExact;
|
||||||
|
|
||||||
|
/// Activation of the duplication tool
|
||||||
|
static TOOL_ACTION duplicate;
|
||||||
|
|
||||||
|
/// Activation of the duplication tool with incrementing (e.g. pad number)
|
||||||
|
static TOOL_ACTION duplicateIncrement;
|
||||||
|
|
||||||
/// Deleting a BOARD_ITEM
|
/// Deleting a BOARD_ITEM
|
||||||
static TOOL_ACTION remove;
|
static TOOL_ACTION remove;
|
||||||
|
|
||||||
|
@ -204,6 +213,9 @@ public:
|
||||||
/// Tool for quick pad enumeration
|
/// Tool for quick pad enumeration
|
||||||
static TOOL_ACTION enumeratePads;
|
static TOOL_ACTION enumeratePads;
|
||||||
|
|
||||||
|
/// Tool for creating an array of objects
|
||||||
|
static TOOL_ACTION createArray;
|
||||||
|
|
||||||
/// Copying module items to clipboard
|
/// Copying module items to clipboard
|
||||||
static TOOL_ACTION copyItems;
|
static TOOL_ACTION copyItems;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <class_module.h>
|
#include <class_module.h>
|
||||||
#include <class_edge_mod.h>
|
#include <class_edge_mod.h>
|
||||||
#include <class_zone.h>
|
#include <class_zone.h>
|
||||||
|
#include <class_draw_panel_gal.h>
|
||||||
|
#include <module_editor_frame.h>
|
||||||
#include <wxPcbStruct.h>
|
#include <wxPcbStruct.h>
|
||||||
|
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
@ -42,6 +44,9 @@
|
||||||
#include "selection_tool.h"
|
#include "selection_tool.h"
|
||||||
#include "edit_tool.h"
|
#include "edit_tool.h"
|
||||||
|
|
||||||
|
#include <dialogs/dialog_create_array.h>
|
||||||
|
#include <dialogs/dialog_move_exact.h>
|
||||||
|
|
||||||
EDIT_TOOL::EDIT_TOOL() :
|
EDIT_TOOL::EDIT_TOOL() :
|
||||||
TOOL_INTERACTIVE( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ),
|
TOOL_INTERACTIVE( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ),
|
||||||
m_dragging( false ), m_editModules( false ), m_updateFlag( KIGFX::VIEW_ITEM::NONE )
|
m_dragging( false ), m_editModules( false ), m_updateFlag( KIGFX::VIEW_ITEM::NONE )
|
||||||
|
@ -73,6 +78,9 @@ bool EDIT_TOOL::Init()
|
||||||
m_selectionTool->AddMenuItem( COMMON_ACTIONS::flip, SELECTION_CONDITIONS::NotEmpty );
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::flip, SELECTION_CONDITIONS::NotEmpty );
|
||||||
m_selectionTool->AddMenuItem( COMMON_ACTIONS::remove, SELECTION_CONDITIONS::NotEmpty );
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::remove, SELECTION_CONDITIONS::NotEmpty );
|
||||||
m_selectionTool->AddMenuItem( COMMON_ACTIONS::properties, SELECTION_CONDITIONS::NotEmpty );
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::properties, SELECTION_CONDITIONS::NotEmpty );
|
||||||
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::moveExact, SELECTION_CONDITIONS::NotEmpty );
|
||||||
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::duplicate, SELECTION_CONDITIONS::NotEmpty );
|
||||||
|
m_selectionTool->AddMenuItem( COMMON_ACTIONS::createArray, SELECTION_CONDITIONS::NotEmpty );
|
||||||
|
|
||||||
m_offset.x = 0;
|
m_offset.x = 0;
|
||||||
m_offset.y = 0;
|
m_offset.y = 0;
|
||||||
|
@ -112,6 +120,12 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
controls->SetSnapping( true );
|
controls->SetSnapping( true );
|
||||||
controls->ForceCursorPosition( false );
|
controls->ForceCursorPosition( false );
|
||||||
|
|
||||||
|
// cumulative translation
|
||||||
|
wxPoint totalMovement( 0, 0 );
|
||||||
|
|
||||||
|
// make sure nothing is inhibiting undo points
|
||||||
|
bool inhibitUndo = m_toolMgr->IsUndoInhibited();
|
||||||
|
|
||||||
// Main loop: keep receiving events
|
// Main loop: keep receiving events
|
||||||
while( OPT_TOOL_EVENT evt = Wait() )
|
while( OPT_TOOL_EVENT evt = Wait() )
|
||||||
{
|
{
|
||||||
|
@ -147,9 +161,41 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
break; // exit the loop, as there is no further processing for removed items
|
break; // exit the loop, as there is no further processing for removed items
|
||||||
}
|
}
|
||||||
|
else if( evt->IsAction( &COMMON_ACTIONS::duplicate ) )
|
||||||
|
{
|
||||||
|
// On duplicate, stop moving this item
|
||||||
|
// The duplicate tool should then select the new item and start
|
||||||
|
// a new move procedure
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if( evt->IsAction( &COMMON_ACTIONS::moveExact ) )
|
||||||
|
{
|
||||||
|
// Can't do this, because the selection will then contain
|
||||||
|
// stale pointers and it will all go horribly wrong...
|
||||||
|
//editFrame->RestoreCopyFromUndoList( dummy );
|
||||||
|
//
|
||||||
|
// So, instead, reset the position manually
|
||||||
|
for( unsigned int i = 0; i < selection.items.GetCount(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = selection.Item<BOARD_ITEM>( i );
|
||||||
|
item->SetPosition( item->GetPosition() - totalMovement );
|
||||||
|
|
||||||
|
// And what about flipping and rotation?
|
||||||
|
// for now, they won't be undone, but maybe that is how
|
||||||
|
// it should be, so you can flip and move exact in the
|
||||||
|
// same action?
|
||||||
|
}
|
||||||
|
|
||||||
|
// This causes a double event, so we will get the dialogue
|
||||||
|
// correctly, somehow - why does Rotate not?
|
||||||
|
//MoveExact( aEvent );
|
||||||
|
break; // exit the loop - we move exactly, so we have
|
||||||
|
// finished moving
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
|
else if( evt->IsAction( &COMMON_ACTIONS::editActivate )
|
||||||
|
|| evt->IsMotion() || evt->IsDrag( BUT_LEFT ) )
|
||||||
{
|
{
|
||||||
m_cursor = controls->GetCursorPosition();
|
m_cursor = controls->GetCursorPosition();
|
||||||
|
|
||||||
|
@ -158,6 +204,8 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
wxPoint movement = wxPoint( m_cursor.x, m_cursor.y ) -
|
wxPoint movement = wxPoint( m_cursor.x, m_cursor.y ) -
|
||||||
selection.Item<BOARD_ITEM>( 0 )->GetPosition();
|
selection.Item<BOARD_ITEM>( 0 )->GetPosition();
|
||||||
|
|
||||||
|
totalMovement += movement;
|
||||||
|
|
||||||
// Drag items to the current cursor position
|
// Drag items to the current cursor position
|
||||||
for( unsigned int i = 0; i < selection.items.GetCount(); ++i )
|
for( unsigned int i = 0; i < selection.items.GetCount(); ++i )
|
||||||
selection.Item<BOARD_ITEM>( i )->Move( movement + m_offset );
|
selection.Item<BOARD_ITEM>( i )->Move( movement + m_offset );
|
||||||
|
@ -170,8 +218,11 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Save items, so changes can be undone
|
// Save items, so changes can be undone
|
||||||
editFrame->OnModify();
|
if( !inhibitUndo )
|
||||||
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
{
|
||||||
|
editFrame->OnModify();
|
||||||
|
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
if( selection.Size() == 1 )
|
if( selection.Size() == 1 )
|
||||||
{
|
{
|
||||||
|
@ -197,6 +248,7 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
controls->SetAutoPan( true );
|
controls->SetAutoPan( true );
|
||||||
m_dragging = true;
|
m_dragging = true;
|
||||||
|
m_toolMgr->IncUndoInhibit();
|
||||||
}
|
}
|
||||||
|
|
||||||
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
|
@ -207,6 +259,9 @@ int EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
break; // Finish
|
break; // Finish
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( m_dragging )
|
||||||
|
m_toolMgr->DecUndoInhibit();
|
||||||
|
|
||||||
m_dragging = false;
|
m_dragging = false;
|
||||||
m_offset.x = 0;
|
m_offset.x = 0;
|
||||||
m_offset.y = 0;
|
m_offset.y = 0;
|
||||||
|
@ -326,7 +381,8 @@ int EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
wxPoint rotatePoint = getModificationPoint( selection );
|
wxPoint rotatePoint = getModificationPoint( selection );
|
||||||
|
|
||||||
if( !m_dragging ) // If it is being dragged, then it is already saved with UR_CHANGED flag
|
// If it is being dragged, then it is already saved with UR_CHANGED flag
|
||||||
|
if( !m_toolMgr->IsUndoInhibited() )
|
||||||
{
|
{
|
||||||
editFrame->OnModify();
|
editFrame->OnModify();
|
||||||
editFrame->SaveCopyInUndoList( selection.items, UR_ROTATED, rotatePoint );
|
editFrame->SaveCopyInUndoList( selection.items, UR_ROTATED, rotatePoint );
|
||||||
|
@ -380,7 +436,7 @@ int EDIT_TOOL::Flip( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
wxPoint flipPoint = getModificationPoint( selection );
|
wxPoint flipPoint = getModificationPoint( selection );
|
||||||
|
|
||||||
if( !m_dragging ) // If it is being dragged, then it is already saved with UR_CHANGED flag
|
if( !m_toolMgr->IsUndoInhibited() ) // If it is being dragged, then it is already saved with UR_CHANGED flag
|
||||||
{
|
{
|
||||||
editFrame->OnModify();
|
editFrame->OnModify();
|
||||||
editFrame->SaveCopyInUndoList( selection.items, UR_FLIPPED, flipPoint );
|
editFrame->SaveCopyInUndoList( selection.items, UR_FLIPPED, flipPoint );
|
||||||
|
@ -534,6 +590,318 @@ void EDIT_TOOL::remove( BOARD_ITEM* aItem )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
const SELECTION& selection = m_selectionTool->GetSelection();
|
||||||
|
|
||||||
|
// Shall the selection be cleared at the end?
|
||||||
|
bool unselect = selection.Empty();
|
||||||
|
|
||||||
|
if( !makeSelection( selection ) || m_selectionTool->CheckLock() )
|
||||||
|
{
|
||||||
|
setTransitions();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxPoint translation;
|
||||||
|
double rotation = 0;
|
||||||
|
|
||||||
|
PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
|
||||||
|
|
||||||
|
DIALOG_MOVE_EXACT dialog( editFrame, translation, rotation );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_MOVE_EXACT::MOVE_OK )
|
||||||
|
{
|
||||||
|
if( !m_toolMgr->IsUndoInhibited() )
|
||||||
|
{
|
||||||
|
editFrame->OnModify();
|
||||||
|
// Record an action of move and rotate
|
||||||
|
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxPoint rotPoint = selection.GetCenter();
|
||||||
|
|
||||||
|
for( unsigned int i = 0; i < selection.items.GetCount(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = selection.Item<BOARD_ITEM>( i );
|
||||||
|
|
||||||
|
item->Move( translation );
|
||||||
|
item->Rotate( rotPoint, rotation );
|
||||||
|
|
||||||
|
if( !m_dragging )
|
||||||
|
item->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRatsnest( m_dragging );
|
||||||
|
|
||||||
|
if( m_dragging )
|
||||||
|
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
|
else
|
||||||
|
getModel<BOARD>()->GetRatsnest()->Recalculate();
|
||||||
|
|
||||||
|
if( unselect )
|
||||||
|
m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear, true );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( COMMON_ACTIONS::pointEditorUpdate, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
setTransitions();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
bool increment = aEvent.IsAction( &COMMON_ACTIONS::duplicateIncrement );
|
||||||
|
|
||||||
|
// first, check if we have a selection, or try to get one
|
||||||
|
SELECTION_TOOL* selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
|
||||||
|
const SELECTION& selection = selTool->GetSelection();
|
||||||
|
|
||||||
|
// Be sure that there is at least one item that we can modify
|
||||||
|
if( !makeSelection( selection ) || selTool->CheckLock() )
|
||||||
|
{
|
||||||
|
setTransitions();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// we have a selection to work on now, so start the tool process
|
||||||
|
|
||||||
|
PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
|
||||||
|
editFrame->OnModify();
|
||||||
|
|
||||||
|
// prevent other tools making undo points while the duplicate is going on
|
||||||
|
// so that if you cancel, you don't get a duplicate object hiding over
|
||||||
|
// the original
|
||||||
|
m_toolMgr->IncUndoInhibit();
|
||||||
|
|
||||||
|
std::vector<BOARD_ITEM*> old_items;
|
||||||
|
|
||||||
|
for( int i = 0; i < selection.Size(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = selection.Item<BOARD_ITEM>( i );
|
||||||
|
|
||||||
|
if( item )
|
||||||
|
old_items.push_back( item );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < old_items.size(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = old_items[i];
|
||||||
|
|
||||||
|
// Unselect the item, so we won't pick it up again
|
||||||
|
// Do this first, so a single-item duplicate will correctly call
|
||||||
|
// SetCurItem and show the item properties
|
||||||
|
m_toolMgr->RunAction( COMMON_ACTIONS::unselectItem, true, item );
|
||||||
|
|
||||||
|
BOARD_ITEM* new_item = NULL;
|
||||||
|
|
||||||
|
if ( PCB_EDIT_FRAME* frame = dynamic_cast<PCB_EDIT_FRAME*>( editFrame ) )
|
||||||
|
new_item = frame->GetBoard()->DuplicateAndAddItem( item, increment );
|
||||||
|
else if ( FOOTPRINT_EDIT_FRAME* frame = dynamic_cast<FOOTPRINT_EDIT_FRAME*>( editFrame ) )
|
||||||
|
new_item = frame->GetBoard()->m_Modules->DuplicateAndAddItem( item, increment );
|
||||||
|
|
||||||
|
if( new_item )
|
||||||
|
{
|
||||||
|
if( new_item->Type() == PCB_MODULE_T )
|
||||||
|
{
|
||||||
|
static_cast<MODULE*>( new_item )->RunOnChildren( boost::bind( &KIGFX::VIEW::Add,
|
||||||
|
getView(), _1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
editFrame->GetGalCanvas()->GetView()->Add( new_item );
|
||||||
|
|
||||||
|
// Select the new item, so we can pick it up
|
||||||
|
m_toolMgr->RunAction( COMMON_ACTIONS::selectItem, true, new_item );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// record the new items as added
|
||||||
|
editFrame->SaveCopyInUndoList( selection.items, UR_NEW );
|
||||||
|
|
||||||
|
editFrame->DisplayToolMsg( wxString::Format( _( "Duplicated %d item(s)" ),
|
||||||
|
(int) old_items.size() ) );
|
||||||
|
|
||||||
|
// pick up the selected item(s) and start moving
|
||||||
|
// this works well for "dropping" copies around
|
||||||
|
TOOL_EVENT evt = COMMON_ACTIONS::editActivate.MakeEvent();
|
||||||
|
Main( evt );
|
||||||
|
|
||||||
|
// and re-enable undos
|
||||||
|
m_toolMgr->DecUndoInhibit();
|
||||||
|
|
||||||
|
setTransitions();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int EDIT_TOOL::CreateArray( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
// first, check if we have a selection, or try to get one
|
||||||
|
SELECTION_TOOL* selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
|
||||||
|
const SELECTION& selection = selTool->GetSelection();
|
||||||
|
|
||||||
|
// Be sure that there is at least one item that we can modify
|
||||||
|
if( !makeSelection( selection ) || selTool->CheckLock() )
|
||||||
|
{
|
||||||
|
setTransitions();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool originalItemsModified = false;
|
||||||
|
|
||||||
|
// we have a selection to work on now, so start the tool process
|
||||||
|
|
||||||
|
PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
|
||||||
|
editFrame->OnModify();
|
||||||
|
|
||||||
|
const bool editingModule = NULL != dynamic_cast<FOOTPRINT_EDIT_FRAME*>( editFrame );
|
||||||
|
|
||||||
|
if( editingModule )
|
||||||
|
{
|
||||||
|
// Module editors do their undo point upfront for the whole module
|
||||||
|
editFrame->SaveCopyInUndoList( editFrame->GetBoard()->m_Modules, UR_MODEDIT );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We may also change the original item
|
||||||
|
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY::ARRAY_OPTIONS* array_opts = NULL;
|
||||||
|
|
||||||
|
const wxPoint rotPoint = selection.GetCenter();
|
||||||
|
|
||||||
|
DIALOG_CREATE_ARRAY dialog( editFrame, rotPoint, &array_opts );
|
||||||
|
int ret = dialog.ShowModal();
|
||||||
|
|
||||||
|
if( ret == DIALOG_CREATE_ARRAY::CREATE_ARRAY_OK && array_opts != NULL )
|
||||||
|
{
|
||||||
|
PICKED_ITEMS_LIST newItemList;
|
||||||
|
|
||||||
|
for( int i = 0; i < selection.Size(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = selection.Item<BOARD_ITEM>( i );
|
||||||
|
|
||||||
|
if( !item )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
wxString cachedString;
|
||||||
|
|
||||||
|
if( item->Type() == PCB_MODULE_T )
|
||||||
|
{
|
||||||
|
cachedString = static_cast<MODULE*>( item )->GetReferencePrefix();
|
||||||
|
}
|
||||||
|
else if( EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( item ) )
|
||||||
|
{
|
||||||
|
// Copy the text (not just take a reference
|
||||||
|
cachedString = text->GetText();
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate across the array, laying out the item at the
|
||||||
|
// correct position
|
||||||
|
const unsigned nPoints = array_opts->GetArraySize();
|
||||||
|
|
||||||
|
for( unsigned ptN = 0; ptN < nPoints; ++ptN )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* newItem = NULL;
|
||||||
|
|
||||||
|
if( ptN == 0 )
|
||||||
|
{
|
||||||
|
newItem = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if renumbering, no need to increment
|
||||||
|
const bool increment = !array_opts->ShouldRenumberItems();
|
||||||
|
|
||||||
|
if ( PCB_EDIT_FRAME* frame = dynamic_cast<PCB_EDIT_FRAME*>( editFrame ) )
|
||||||
|
newItem = frame->GetBoard()->DuplicateAndAddItem( item, increment );
|
||||||
|
else if ( FOOTPRINT_EDIT_FRAME* frame = dynamic_cast<FOOTPRINT_EDIT_FRAME*>( editFrame ) )
|
||||||
|
newItem = frame->GetBoard()->m_Modules->DuplicateAndAddItem( item, increment );
|
||||||
|
|
||||||
|
if( newItem )
|
||||||
|
{
|
||||||
|
array_opts->TransformItem( ptN, newItem, rotPoint );
|
||||||
|
|
||||||
|
m_toolMgr->RunAction( COMMON_ACTIONS::unselectItem, true, newItem );
|
||||||
|
|
||||||
|
newItemList.PushItem( newItem );
|
||||||
|
|
||||||
|
if( newItem->Type() == PCB_MODULE_T)
|
||||||
|
{
|
||||||
|
static_cast<MODULE*>( newItem )->RunOnChildren( boost::bind( &KIGFX::VIEW::Add,
|
||||||
|
getView(), _1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
editFrame->GetGalCanvas()->GetView()->Add( newItem );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the number if needed:
|
||||||
|
if( array_opts->ShouldRenumberItems() )
|
||||||
|
{
|
||||||
|
switch( newItem->Type() )
|
||||||
|
{
|
||||||
|
case PCB_PAD_T:
|
||||||
|
{
|
||||||
|
const wxString padName = array_opts->GetItemNumber( ptN );
|
||||||
|
static_cast<D_PAD*>( newItem )->SetPadName( padName );
|
||||||
|
|
||||||
|
originalItemsModified = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_T:
|
||||||
|
{
|
||||||
|
const wxString moduleName = array_opts->GetItemNumber( ptN );
|
||||||
|
MODULE* module = static_cast<MODULE*>( newItem );
|
||||||
|
module->SetReference( cachedString + moduleName );
|
||||||
|
|
||||||
|
originalItemsModified = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCB_MODULE_TEXT_T:
|
||||||
|
case PCB_TEXT_T:
|
||||||
|
{
|
||||||
|
EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( newItem );
|
||||||
|
text->SetText( array_opts->InterpolateNumberIntoString( ptN, cachedString ) );
|
||||||
|
|
||||||
|
originalItemsModified = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// no renumbering of other items
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !editingModule )
|
||||||
|
{
|
||||||
|
if( originalItemsModified )
|
||||||
|
{
|
||||||
|
// Update the appearance of the original items
|
||||||
|
selection.group->ItemsViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add all items as a single undo point for PCB editors
|
||||||
|
// TODO: Can this be merged into the previous undo point (where
|
||||||
|
// we saved the original items)
|
||||||
|
editFrame->SaveCopyInUndoList( newItemList, UR_NEW );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setTransitions();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIT_TOOL::setTransitions()
|
void EDIT_TOOL::setTransitions()
|
||||||
{
|
{
|
||||||
Go( &EDIT_TOOL::Main, COMMON_ACTIONS::editActivate.MakeEvent() );
|
Go( &EDIT_TOOL::Main, COMMON_ACTIONS::editActivate.MakeEvent() );
|
||||||
|
@ -541,6 +909,10 @@ void EDIT_TOOL::setTransitions()
|
||||||
Go( &EDIT_TOOL::Flip, COMMON_ACTIONS::flip.MakeEvent() );
|
Go( &EDIT_TOOL::Flip, COMMON_ACTIONS::flip.MakeEvent() );
|
||||||
Go( &EDIT_TOOL::Remove, COMMON_ACTIONS::remove.MakeEvent() );
|
Go( &EDIT_TOOL::Remove, COMMON_ACTIONS::remove.MakeEvent() );
|
||||||
Go( &EDIT_TOOL::Properties, COMMON_ACTIONS::properties.MakeEvent() );
|
Go( &EDIT_TOOL::Properties, COMMON_ACTIONS::properties.MakeEvent() );
|
||||||
|
Go( &EDIT_TOOL::MoveExact, COMMON_ACTIONS::moveExact.MakeEvent() );
|
||||||
|
Go( &EDIT_TOOL::Duplicate, COMMON_ACTIONS::duplicate.MakeEvent() );
|
||||||
|
Go( &EDIT_TOOL::Duplicate, COMMON_ACTIONS::duplicateIncrement.MakeEvent() );
|
||||||
|
Go( &EDIT_TOOL::CreateArray,COMMON_ACTIONS::createArray.MakeEvent() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,28 @@ public:
|
||||||
*/
|
*/
|
||||||
int Remove( const TOOL_EVENT& aEvent );
|
int Remove( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function Duplicate()
|
||||||
|
*
|
||||||
|
* Duplicates a selection and starts a move action
|
||||||
|
*/
|
||||||
|
int Duplicate( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function MoveExact()
|
||||||
|
*
|
||||||
|
* Invokes a dialog box to allow moving of the item by an exact amount.
|
||||||
|
*/
|
||||||
|
int MoveExact( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function CreateArray()
|
||||||
|
*
|
||||||
|
* Creates an array of the selected items, invoking the array editor dialog
|
||||||
|
* to set the array options
|
||||||
|
*/
|
||||||
|
int CreateArray( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function EditModules()
|
* Function EditModules()
|
||||||
*
|
*
|
||||||
|
|
|
@ -82,44 +82,6 @@ bool MODULE_TOOLS::Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static wxString getNextPadName( MODULE* aModule )
|
|
||||||
{
|
|
||||||
std::set<int> usedNumbers;
|
|
||||||
|
|
||||||
// Create a set of used pad numbers
|
|
||||||
for( D_PAD* pad = aModule->Pads(); pad; pad = pad->Next() )
|
|
||||||
{
|
|
||||||
wxString padName = pad->GetPadName();
|
|
||||||
int padNumber = 0;
|
|
||||||
int base = 1;
|
|
||||||
|
|
||||||
// Trim and extract the trailing numeric part
|
|
||||||
while( padName.Len() && padName.Last() >= '0' && padName.Last() <= '9' )
|
|
||||||
{
|
|
||||||
padNumber += ( padName.Last() - '0' ) * base;
|
|
||||||
padName.RemoveLast();
|
|
||||||
base *= 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
usedNumbers.insert( padNumber );
|
|
||||||
}
|
|
||||||
|
|
||||||
int candidate = *usedNumbers.begin();
|
|
||||||
|
|
||||||
// Look for a gap in pad numbering
|
|
||||||
for( std::set<int>::iterator it = usedNumbers.begin(),
|
|
||||||
itEnd = usedNumbers.end(); it != itEnd; ++it )
|
|
||||||
{
|
|
||||||
if( *it - candidate > 1 )
|
|
||||||
break;
|
|
||||||
|
|
||||||
candidate = *it;
|
|
||||||
}
|
|
||||||
|
|
||||||
return wxString::Format( wxT( "%i" ), ++candidate );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int MODULE_TOOLS::PlacePad( const TOOL_EVENT& aEvent )
|
int MODULE_TOOLS::PlacePad( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
m_frame->SetToolID( ID_MODEDIT_PAD_TOOL, wxCURSOR_PENCIL, _( "Add pads" ) );
|
m_frame->SetToolID( ID_MODEDIT_PAD_TOOL, wxCURSOR_PENCIL, _( "Add pads" ) );
|
||||||
|
@ -190,14 +152,8 @@ int MODULE_TOOLS::PlacePad( const TOOL_EVENT& aEvent )
|
||||||
// ( pad position for module orient, 0, and relative to the module position)
|
// ( pad position for module orient, 0, and relative to the module position)
|
||||||
pad->SetLocalCoord();
|
pad->SetLocalCoord();
|
||||||
|
|
||||||
/* NPTH pads take empty pad number (since they can't be connected),
|
// Take the next available pad number
|
||||||
* other pads get incremented from the last one edited */
|
pad->IncrementPadName( true, true );
|
||||||
wxString padName;
|
|
||||||
|
|
||||||
if( pad->GetAttribute() != PAD_HOLE_NOT_PLATED )
|
|
||||||
padName = getNextPadName( module );
|
|
||||||
|
|
||||||
pad->SetPadName( padName );
|
|
||||||
|
|
||||||
// Handle the view aspect
|
// Handle the view aspect
|
||||||
preview.Remove( pad );
|
preview.Remove( pad );
|
||||||
|
|
|
@ -77,6 +77,13 @@ public:
|
||||||
*/
|
*/
|
||||||
int PasteItems( const TOOL_EVENT& aEvent );
|
int PasteItems( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function CreateArray
|
||||||
|
*
|
||||||
|
* Creates an array of objects using settings from a dialog
|
||||||
|
*/
|
||||||
|
int CreateArray( TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ModuleTextOutlines()
|
* Function ModuleTextOutlines()
|
||||||
*
|
*
|
||||||
|
|
|
@ -931,6 +931,30 @@ void SELECTION::clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxPoint SELECTION::GetCenter() const
|
||||||
|
{
|
||||||
|
wxPoint centre;
|
||||||
|
|
||||||
|
if( Size() == 1 )
|
||||||
|
{
|
||||||
|
centre = Item<BOARD_ITEM>( 0 )->GetCenter();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EDA_RECT bbox = Item<BOARD_ITEM>( 0 )->GetBoundingBox();
|
||||||
|
for( unsigned int i = 1; i < items.GetCount(); ++i )
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = Item<BOARD_ITEM>( i );
|
||||||
|
bbox.Merge( item->GetBoundingBox() );
|
||||||
|
}
|
||||||
|
|
||||||
|
centre = bbox.Centre();
|
||||||
|
}
|
||||||
|
|
||||||
|
return centre;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const TOOL_EVENT SELECTION_TOOL::SelectedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.selected" );
|
const TOOL_EVENT SELECTION_TOOL::SelectedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.selected" );
|
||||||
const TOOL_EVENT SELECTION_TOOL::UnselectedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.unselected" );
|
const TOOL_EVENT SELECTION_TOOL::UnselectedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.unselected" );
|
||||||
const TOOL_EVENT SELECTION_TOOL::ClearedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.cleared" );
|
const TOOL_EVENT SELECTION_TOOL::ClearedEvent( TC_MESSAGE, TA_ACTION, "pcbnew.InteractiveSelection.cleared" );
|
||||||
|
|
|
@ -70,6 +70,8 @@ struct SELECTION
|
||||||
return static_cast<T*>( items.GetPickedItem( aIndex ) );
|
return static_cast<T*>( items.GetPickedItem( aIndex ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxPoint GetCenter() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Clears both the VIEW_GROUP and set of selected items. Please note that it does not
|
/// Clears both the VIEW_GROUP and set of selected items. Please note that it does not
|
||||||
/// change properties of selected items (e.g. selection flag).
|
/// change properties of selected items (e.g. selection flag).
|
||||||
|
|