From 50743cf3ba5d8206ea461e62f864dce367224d2d Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Fri, 19 Jul 2013 20:27:22 +0200 Subject: [PATCH] Initial release of pl_editor, the page layout and title block editor. --- CMakeLists.txt | 2 + Doxyfile | 5 +- bitmaps_png/CMakeLists.txt | 44 +- bitmaps_png/cpp_26/icon_gerbview_small.cpp | 236 +- bitmaps_png/cpp_26/pagelayout_load.cpp | 74 + .../cpp_26/pagelayout_load_default.cpp | 100 + bitmaps_png/cpp_26/pagelayout_new.cpp | 103 + .../cpp_26/pagelayout_normal_view_mode.cpp | 98 + bitmaps_png/cpp_26/pagelayout_recent.cpp | 105 + .../cpp_26/pagelayout_special_view_mode.cpp | 98 + bitmaps_png/cpp_48/icon_gerbview.cpp | 628 +- bitmaps_png/cpp_48/icon_kicad.cpp | 286 +- bitmaps_png/cpp_48/icon_pagelayout_editor.cpp | 198 + bitmaps_png/icons/icon_pagelayout_editor.ico | Bin 0 -> 7358 bytes bitmaps_png/icons/mk_icn.sh | 1 + bitmaps_png/sources/icon_gerbview.svg | 866 ++- bitmaps_png/sources/icon_gerbview_small.svg | 866 ++- bitmaps_png/sources/icon_kicad.svg | 181 +- .../sources/icon_pagelayout_editor.svg | 833 +++ bitmaps_png/sources/kicad_logo_for_patch.svg | 131 + bitmaps_png/sources/pagelayout_load.svg | 389 + .../sources/pagelayout_load_default.svg | 583 ++ bitmaps_png/sources/pagelayout_new.svg | 411 ++ .../sources/pagelayout_normal_view_mode.svg | 414 ++ bitmaps_png/sources/pagelayout_recent.svg | 621 ++ .../sources/pagelayout_special_view_mode.svg | 449 ++ common/CMakeLists.txt | 19 +- common/base_screen.cpp | 2 + common/base_units.cpp | 38 +- common/build_version.cpp | 6 +- common/class_bitmap_base.cpp | 3 - common/common.cpp | 10 - common/common_plot_functions.cpp | 12 +- common/dialogs/dialog_page_settings.cpp | 117 +- common/dialogs/dialog_page_settings.h | 82 +- common/dialogs/dialog_page_settings_base.cpp | 37 +- common/dialogs/dialog_page_settings_base.fbp | 220 +- common/dialogs/dialog_page_settings_base.h | 7 +- common/edaappl.cpp | 1 - .../class_worksheet_dataitem.cpp} | 541 +- common/page_layout/class_worksheet_layout.cpp | 174 + .../page_layout_default_description.cpp | 201 + .../page_layout/page_layout_graphic_items.cpp | 382 + common/page_layout/page_layout_reader.cpp | 684 ++ .../page_layout/page_layout_reader.keywords | 40 + common/page_layout/title_block_shapes.cpp | 232 + .../title_block_shapes_gost.cpp | 74 +- common/wildcards_and_files_ext.cpp | 3 +- common/worksheet.cpp | 69 +- eeschema/class_libentry.cpp | 22 + eeschema/class_libentry.h | 30 +- eeschema/dialogs/dialog_eeschema_config.cpp | 4 +- eeschema/dialogs/dialog_eeschema_options.cpp | 51 +- eeschema/dialogs/dialog_eeschema_options.h | 1 + .../dialogs/dialog_eeschema_options_base.cpp | 21 +- .../dialogs/dialog_eeschema_options_base.fbp | 207 +- .../dialogs/dialog_eeschema_options_base.h | 8 +- eeschema/eeschema.cpp | 15 - eeschema/eeschema_config.cpp | 58 +- eeschema/sch_screen.cpp | 3 +- eeschema/schframe.cpp | 2 +- include/base_units.h | 10 + include/bitmaps.h | 9 +- include/class_base_screen.h | 6 +- include/class_worksheet_dataitem.h | 441 ++ include/common.h | 14 +- include/convert_to_biu.h | 19 +- include/wildcards_and_files_ext.h | 2 + include/worksheet_shape_builder.h | 524 +- include/wxEeschemaStruct.h | 11 +- include/wxPcbStruct.h | 7 +- include/wxstruct.h | 12 +- kicad/class_treeproject_item.cpp | 4 + kicad/class_treeprojectfiles.cpp | 3 +- kicad/commandframe.cpp | 3 + kicad/files-io.cpp | 4 +- kicad/kicad.h | 27 +- kicad/mainframe.cpp | 5 + kicad/menubar.cpp | 1 + kicad/tree_project_frame.cpp | 9 + pagelayout_editor/CMakeLists.txt | 107 + pagelayout_editor/class_pl_editor_layout.cpp | 30 + pagelayout_editor/class_pl_editor_layout.h | 74 + pagelayout_editor/class_pl_editor_screen.cpp | 94 + pagelayout_editor/class_pl_editor_screen.h | 56 + pagelayout_editor/controle.cpp | 112 + pagelayout_editor/design_tree_frame.cpp | 266 + pagelayout_editor/design_tree_frame.h | 108 + .../dialogs/dialog_new_dataitem.cpp | 177 + .../dialogs/dialog_new_dataitem_base.cpp | 155 + .../dialogs/dialog_new_dataitem_base.fbp | 1666 +++++ .../dialogs/dialog_new_dataitem_base.h | 76 + .../dialogs/dialogs_for_printing.cpp | 237 + .../dialogs/properties_frame_base.cpp | 532 ++ .../dialogs/properties_frame_base.fbp | 6374 +++++++++++++++++ .../dialogs/properties_frame_base.h | 124 + pagelayout_editor/events_functions.cpp | 419 ++ pagelayout_editor/files.cpp | 254 + pagelayout_editor/hotkeys.cpp | 132 + pagelayout_editor/hotkeys.h | 23 + pagelayout_editor/invoke_pl_editor_dialog.h | 65 + pagelayout_editor/menubar.cpp | 179 + pagelayout_editor/onleftclick.cpp | 79 + pagelayout_editor/onrightclick.cpp | 106 + pagelayout_editor/page_layout_writer.cpp | 411 ++ pagelayout_editor/pl_editor.cpp | 120 + pagelayout_editor/pl_editor.rc | 3 + pagelayout_editor/pl_editor_config.cpp | 69 + pagelayout_editor/pl_editor_frame.cpp | 636 ++ pagelayout_editor/pl_editor_frame.h | 335 + pagelayout_editor/pl_editor_id.h | 47 + pagelayout_editor/properties_frame.cpp | 385 + pagelayout_editor/properties_frame.h | 62 + pagelayout_editor/toolbars_pl_editor.cpp | 166 + .../dialog_pcbnew_config_libs_and_paths.cpp | 2 +- pcbnew/kicad_plugin.cpp | 62 +- pcbnew/pcbnew.cpp | 24 +- pcbnew/pcbnew_config.cpp | 40 +- polygon/polygon_test_point_inside.h | 2 + scripting/kicadplugins.i | 6 +- scripting/python_scripting.cpp | 20 +- scripting/python_scripting.h | 2 +- template/pagelayout_default.kicad_wks | 33 + 123 files changed, 24073 insertions(+), 2006 deletions(-) create mode 100644 bitmaps_png/cpp_26/pagelayout_load.cpp create mode 100644 bitmaps_png/cpp_26/pagelayout_load_default.cpp create mode 100644 bitmaps_png/cpp_26/pagelayout_new.cpp create mode 100644 bitmaps_png/cpp_26/pagelayout_normal_view_mode.cpp create mode 100644 bitmaps_png/cpp_26/pagelayout_recent.cpp create mode 100644 bitmaps_png/cpp_26/pagelayout_special_view_mode.cpp create mode 100644 bitmaps_png/cpp_48/icon_pagelayout_editor.cpp create mode 100644 bitmaps_png/icons/icon_pagelayout_editor.ico create mode 100644 bitmaps_png/sources/icon_pagelayout_editor.svg create mode 100644 bitmaps_png/sources/kicad_logo_for_patch.svg create mode 100644 bitmaps_png/sources/pagelayout_load.svg create mode 100644 bitmaps_png/sources/pagelayout_load_default.svg create mode 100644 bitmaps_png/sources/pagelayout_new.svg create mode 100644 bitmaps_png/sources/pagelayout_normal_view_mode.svg create mode 100644 bitmaps_png/sources/pagelayout_recent.svg create mode 100644 bitmaps_png/sources/pagelayout_special_view_mode.svg rename common/{title_block_shapes.cpp => page_layout/class_worksheet_dataitem.cpp} (55%) create mode 100644 common/page_layout/class_worksheet_layout.cpp create mode 100644 common/page_layout/page_layout_default_description.cpp create mode 100644 common/page_layout/page_layout_graphic_items.cpp create mode 100644 common/page_layout/page_layout_reader.cpp create mode 100644 common/page_layout/page_layout_reader.keywords create mode 100644 common/page_layout/title_block_shapes.cpp rename common/{ => page_layout}/title_block_shapes_gost.cpp (94%) create mode 100644 include/class_worksheet_dataitem.h create mode 100644 pagelayout_editor/CMakeLists.txt create mode 100644 pagelayout_editor/class_pl_editor_layout.cpp create mode 100644 pagelayout_editor/class_pl_editor_layout.h create mode 100644 pagelayout_editor/class_pl_editor_screen.cpp create mode 100644 pagelayout_editor/class_pl_editor_screen.h create mode 100644 pagelayout_editor/controle.cpp create mode 100644 pagelayout_editor/design_tree_frame.cpp create mode 100644 pagelayout_editor/design_tree_frame.h create mode 100644 pagelayout_editor/dialogs/dialog_new_dataitem.cpp create mode 100644 pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp create mode 100644 pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp create mode 100644 pagelayout_editor/dialogs/dialog_new_dataitem_base.h create mode 100644 pagelayout_editor/dialogs/dialogs_for_printing.cpp create mode 100644 pagelayout_editor/dialogs/properties_frame_base.cpp create mode 100644 pagelayout_editor/dialogs/properties_frame_base.fbp create mode 100644 pagelayout_editor/dialogs/properties_frame_base.h create mode 100644 pagelayout_editor/events_functions.cpp create mode 100644 pagelayout_editor/files.cpp create mode 100644 pagelayout_editor/hotkeys.cpp create mode 100644 pagelayout_editor/hotkeys.h create mode 100644 pagelayout_editor/invoke_pl_editor_dialog.h create mode 100644 pagelayout_editor/menubar.cpp create mode 100644 pagelayout_editor/onleftclick.cpp create mode 100644 pagelayout_editor/onrightclick.cpp create mode 100644 pagelayout_editor/page_layout_writer.cpp create mode 100644 pagelayout_editor/pl_editor.cpp create mode 100644 pagelayout_editor/pl_editor.rc create mode 100644 pagelayout_editor/pl_editor_config.cpp create mode 100644 pagelayout_editor/pl_editor_frame.cpp create mode 100644 pagelayout_editor/pl_editor_frame.h create mode 100644 pagelayout_editor/pl_editor_id.h create mode 100644 pagelayout_editor/properties_frame.cpp create mode 100644 pagelayout_editor/properties_frame.h create mode 100644 pagelayout_editor/toolbars_pl_editor.cpp create mode 100644 template/pagelayout_default.kicad_wks diff --git a/CMakeLists.txt b/CMakeLists.txt index e3eebbbc7d..559397b60b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -375,6 +375,7 @@ add_subdirectory(kicad) add_subdirectory(pcbnew) add_subdirectory(pcbnew/pcad2kicadpcb_plugin) add_subdirectory(polygon) +add_subdirectory(pagelayout_editor) add_subdirectory(potrace) add_subdirectory(bitmap2component) add_subdirectory(pcb_calculator) @@ -392,6 +393,7 @@ add_dependencies( pcbcommon boost ) add_dependencies( 3d-viewer boost ) add_dependencies( pcad2kicadpcb boost ) add_dependencies( polygon boost ) +add_dependencies( pl_editor boost ) ############# diff --git a/Doxyfile b/Doxyfile index 3cf8189132..eb1f77c06c 100644 --- a/Doxyfile +++ b/Doxyfile @@ -668,6 +668,7 @@ INPUT = kicad \ 3d-viewer \ common \ gerbview \ + pagelayout_editor \ include \ polygon \ potrace @@ -703,8 +704,8 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = include/boost \ - polygon/kbool +EXCLUDE = include/boost + # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt index 741cc9c7ed..3999822f4e 100644 --- a/bitmaps_png/CMakeLists.txt +++ b/bitmaps_png/CMakeLists.txt @@ -43,9 +43,6 @@ # # 1) inkscape - command line mode is used, must be on your PATH # 2) pngcrush - this program must be on your PATH -# 3) Under Windows only: -# dos2unix - to convert End Of Lines to unix EOL (CRLF to LF) -# this program must be on your PATH # # lower case is used for local variables, uppercase for global variables @@ -71,21 +68,8 @@ option( MAINTAIN_PNGS "Set to true if you are a PNG maintainer and have the required tools given in the bitmaps_png/CMakeLists.txt file (default OFF)." OFF) - # Used Only to maintain PNG files (and therefore to recreate .cpp files) # The png2cpp creates files with native End of Line format. -# To avoid mixed EOF formats in these .cpp files, it is good to -# convert them in Unix EOL format (LF) -# Under Windows, the well known dos2unix.exe does the conversion -# It is installed with MinGW and MSYS. -# It is very easy to install (just an executable to copy in a known path) if it is missing - -if( WIN32 ) - set( CONVERT_EOL true ) - set( eol2unix_converter dos2unix ) -else() - set( CONVERT_EOL false ) -endif( WIN32 ) include_directories(BEFORE ${INC_BEFORE}) include_directories( @@ -431,6 +415,12 @@ set( BMAPS_MID pad pad_dimensions pads_mask_layers + pagelayout_load + pagelayout_load_default + pagelayout_new + pagelayout_recent + pagelayout_normal_view_mode + pagelayout_special_view_mode palette part_properties paste @@ -555,6 +545,7 @@ set( BMAPS_BIG icon_pcbcalculator libedit_icon viewlibs_icon + icon_pagelayout_editor ) @@ -596,25 +587,6 @@ endfunction() # Function png2cpp # converts a single *.png to *.cpp -if( CONVERT_EOL ) -function( png2cpp inputFile outFile ) - add_custom_command( - OUTPUT ${outFile} - - COMMAND rm -f ${outFile}.tmp - COMMAND ${CMAKE_COMMAND} -DinputFile=${inputFile} -DoutCppFile=${outFile} - -P ${CMAKE_MODULE_PATH}/PNG2cpp.cmake - - DEPENDS ${inputFile} ${CMAKE_MODULE_PATH}/PNG2cpp.cmake - - POST_BUILD - COMMAND ${eol2unix_EXECUTABLE} ${outFile} - - COMMENT "Creating (with unix eol) ${outFile}" - ) -endfunction() - -else( CONVERT_EOL ) function( png2cpp inputFile outFile ) add_custom_command( OUTPUT ${outFile} @@ -627,8 +599,6 @@ function( png2cpp inputFile outFile ) ) endfunction() -endif(CONVERT_EOL) - # Function bitmap_dir # converts all the basenames in bmapList found in hardcoded 'sources' dir diff --git a/bitmaps_png/cpp_26/icon_gerbview_small.cpp b/bitmaps_png/cpp_26/icon_gerbview_small.cpp index bdc739724f..723b29ffcd 100644 --- a/bitmaps_png/cpp_26/icon_gerbview_small.cpp +++ b/bitmaps_png/cpp_26/icon_gerbview_small.cpp @@ -8,124 +8,124 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, - 0xce, 0x00, 0x00, 0x07, 0x39, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7b, 0x4c, 0x53, - 0x79, 0x16, 0xc7, 0xbb, 0x8e, 0x3b, 0x31, 0x71, 0xb2, 0xf3, 0xcf, 0x26, 0xbb, 0x26, 0x33, 0x09, - 0x4e, 0x8c, 0xbb, 0x59, 0x35, 0xbe, 0xe2, 0x38, 0x31, 0x71, 0xc6, 0xa8, 0x19, 0x75, 0x13, 0xcd, - 0x4e, 0x5c, 0x8d, 0x6f, 0x0d, 0xa2, 0x46, 0xa3, 0x6b, 0xcc, 0xaa, 0xa3, 0xa2, 0xc0, 0xaa, 0xa8, - 0xc4, 0xc0, 0x28, 0x3b, 0xc8, 0x5b, 0x1e, 0x03, 0x15, 0x28, 0xef, 0x37, 0x7d, 0xd9, 0x22, 0x2d, - 0x85, 0x02, 0xad, 0xa5, 0x2f, 0x4a, 0x29, 0xa5, 0x2d, 0x8f, 0xb6, 0x20, 0xb4, 0xe5, 0xd2, 0xc7, - 0xbd, 0xf7, 0x77, 0xf6, 0x5c, 0x22, 0x04, 0xd6, 0xcd, 0x66, 0x77, 0x27, 0xd9, 0x9b, 0x7c, 0x93, - 0x7b, 0xfb, 0xbb, 0xf9, 0x7d, 0x7a, 0xce, 0xf9, 0x9e, 0x73, 0x7f, 0x3c, 0x00, 0xe0, 0xfd, 0x3f, - 0xf4, 0xc1, 0x0f, 0xe7, 0xcf, 0x9f, 0x4f, 0xba, 0x75, 0xeb, 0x56, 0xfd, 0xb1, 0x63, 0xc7, 0x12, - 0xf6, 0xec, 0xd9, 0xf3, 0xe5, 0xe6, 0xcd, 0x9b, 0x7f, 0xb9, 0x63, 0xc7, 0x8e, 0xa5, 0x97, 0x2f, - 0x5f, 0xe6, 0x9f, 0x39, 0x73, 0xe6, 0xd9, 0xee, 0xdd, 0xbb, 0x3f, 0xfd, 0xd9, 0x20, 0xdc, 0xf0, - 0x93, 0xba, 0xba, 0x3a, 0x13, 0xde, 0x77, 0xf8, 0xfd, 0x7e, 0xbd, 0xd1, 0x68, 0xb4, 0x94, 0x95, - 0x95, 0xf5, 0xde, 0xbb, 0x77, 0xaf, 0xef, 0xf9, 0xf3, 0xe7, 0x53, 0x62, 0xb1, 0xd8, 0x5e, 0x5a, - 0x5d, 0x6b, 0xaf, 0x94, 0x76, 0x9a, 0xa4, 0xbd, 0x76, 0x91, 0x50, 0x67, 0x7f, 0x29, 0xd6, 0x5a, - 0x2f, 0xe0, 0x3b, 0x1f, 0xfd, 0x57, 0xa0, 0xfd, 0xfb, 0xf7, 0x7f, 0xdb, 0xdf, 0xdf, 0x6f, 0xc1, - 0xfb, 0x82, 0x98, 0x98, 0x18, 0xcd, 0xb9, 0x73, 0xe7, 0xb4, 0xe5, 0xe5, 0xe5, 0x8a, 0x91, 0x91, - 0x91, 0x69, 0xa7, 0x7b, 0x22, 0xa8, 0x32, 0x0f, 0x91, 0x26, 0xfd, 0x28, 0xe1, 0xab, 0x47, 0x49, - 0xa6, 0x6c, 0x80, 0xc9, 0x91, 0x5b, 0x7d, 0x95, 0x5d, 0x4e, 0xb7, 0xa4, 0xbb, 0xcf, 0x53, 0xad, - 0x32, 0xfd, 0xed, 0x3f, 0x06, 0x61, 0xba, 0x52, 0x28, 0x8a, 0x7a, 0xdb, 0xd3, 0xd3, 0x53, 0x81, - 0xd1, 0xd9, 0xe2, 0xe2, 0xe2, 0x94, 0xf1, 0xf1, 0xf1, 0x43, 0xb9, 0x7c, 0x01, 0x23, 0x33, 0x0d, - 0xb3, 0xf9, 0xea, 0x71, 0xba, 0x54, 0xe7, 0x8b, 0x54, 0x19, 0x02, 0xb4, 0x64, 0x90, 0xa5, 0x9b, - 0xfb, 0x29, 0x36, 0xff, 0x8d, 0x83, 0x49, 0x69, 0xd0, 0x4f, 0x0b, 0xde, 0x18, 0x83, 0x3f, 0xd5, - 0xbe, 0x36, 0xec, 0xda, 0xb5, 0x6b, 0xf5, 0xbf, 0x04, 0x9d, 0x3d, 0x7b, 0xf6, 0xfb, 0xac, 0xac, - 0xac, 0xae, 0x9c, 0x9c, 0x1c, 0x75, 0x7a, 0x7a, 0xba, 0x0f, 0x23, 0xf0, 0xa7, 0xa6, 0xa6, 0x52, - 0xb1, 0xb1, 0xb1, 0x70, 0xf7, 0xee, 0x5d, 0x48, 0x4e, 0x79, 0x46, 0x5a, 0xd4, 0x66, 0x48, 0x93, - 0x39, 0xc9, 0x0b, 0xa1, 0x09, 0x32, 0xa5, 0x56, 0x92, 0x21, 0x34, 0x92, 0x7c, 0x59, 0x1f, 0xe1, - 0x2b, 0x6c, 0x4c, 0x49, 0xbb, 0x8d, 0xcd, 0x68, 0xe9, 0x25, 0xf5, 0x86, 0x49, 0xba, 0x56, 0xd5, - 0xc7, 0xd4, 0x8a, 0x94, 0xfe, 0xc3, 0x87, 0x0f, 0xff, 0xe5, 0x03, 0xd0, 0x93, 0x27, 0x4f, 0xc4, - 0x78, 0x63, 0xf4, 0xf9, 0x7c, 0x7a, 0x93, 0xc9, 0x14, 0x72, 0xb9, 0x5c, 0x81, 0xae, 0xae, 0x2e, - 0x5a, 0xab, 0xd5, 0x02, 0x27, 0x91, 0xb2, 0x07, 0x2a, 0x7b, 0xfd, 0xa4, 0xc6, 0x18, 0x80, 0xe6, - 0x81, 0x10, 0x34, 0x9b, 0x7d, 0xf0, 0xc6, 0x1e, 0x84, 0x56, 0xab, 0x1f, 0xba, 0xdd, 0xc0, 0x74, - 0x0d, 0x87, 0x48, 0xbd, 0xc6, 0xc5, 0x0a, 0x4d, 0xef, 0x82, 0x52, 0x2b, 0x15, 0xa9, 0x14, 0x2a, - 0xc9, 0xd1, 0xa3, 0x47, 0x0b, 0x3e, 0x00, 0x3d, 0x7e, 0xfc, 0x58, 0x82, 0x37, 0x3a, 0x04, 0xd8, - 0x3b, 0x3a, 0x3a, 0xe8, 0xce, 0xce, 0x4e, 0x4a, 0x20, 0x10, 0x90, 0xfa, 0xfa, 0x7a, 0x68, 0x6b, - 0x6b, 0x83, 0x86, 0xd6, 0x6e, 0x28, 0x33, 0x04, 0x49, 0xae, 0x6c, 0x00, 0x64, 0x03, 0x14, 0x08, - 0x4d, 0x93, 0x20, 0x34, 0x78, 0xa0, 0x45, 0x37, 0x02, 0x6f, 0x3d, 0x84, 0xe9, 0x1c, 0x0a, 0x80, - 0x58, 0x3f, 0xca, 0x56, 0xa9, 0x2c, 0xc1, 0x1e, 0x37, 0xf8, 0x6a, 0x5a, 0x7b, 0xc9, 0x4f, 0x82, - 0xba, 0xc9, 0xab, 0x57, 0xaf, 0xd6, 0xed, 0xdb, 0xb7, 0xef, 0x0f, 0xf3, 0xa0, 0x47, 0x8f, 0x1e, - 0xcd, 0x82, 0x6a, 0x6b, 0x6b, 0xa7, 0xd1, 0x59, 0x04, 0xc5, 0x66, 0x67, 0x67, 0x43, 0x55, 0x55, - 0x15, 0xe0, 0x6f, 0x50, 0x27, 0xeb, 0x82, 0x97, 0x8a, 0x61, 0x68, 0x30, 0xf9, 0xa1, 0x50, 0xa2, - 0x07, 0x85, 0xcd, 0x0f, 0x62, 0x83, 0x9b, 0x08, 0x75, 0x2e, 0xe8, 0x9f, 0x04, 0xa6, 0x7b, 0xc8, - 0x07, 0x9d, 0x03, 0xe3, 0x6c, 0x73, 0xa7, 0x25, 0x82, 0xcf, 0xfe, 0x06, 0x95, 0x89, 0x29, 0x6f, - 0x90, 0x8f, 0xd1, 0x34, 0xdd, 0xd9, 0xda, 0xda, 0x6a, 0xbe, 0x78, 0xf1, 0x62, 0x09, 0xd6, 0xfb, - 0xb3, 0x79, 0x10, 0x5a, 0x34, 0xf2, 0xf0, 0xe1, 0x43, 0xe0, 0x94, 0x98, 0x98, 0x38, 0x0b, 0xca, - 0xcf, 0xcf, 0x87, 0x1a, 0x71, 0x3b, 0xe4, 0xb5, 0x39, 0xa0, 0xc9, 0xe4, 0x83, 0xa2, 0xd7, 0x06, - 0x50, 0x0c, 0x06, 0xc8, 0x6b, 0xc3, 0x28, 0x51, 0xf4, 0xb9, 0xc9, 0xe0, 0x14, 0x30, 0xc6, 0x11, - 0x3f, 0x18, 0x9c, 0x93, 0x6c, 0xbb, 0xc1, 0x11, 0x71, 0x06, 0xd8, 0x99, 0xc6, 0x36, 0x2d, 0x9d, - 0xf8, 0x34, 0xdd, 0xcf, 0x39, 0x17, 0x55, 0x16, 0x0a, 0x85, 0x74, 0x0f, 0x1e, 0x3c, 0xe8, 0xe4, - 0xe1, 0xc6, 0xb3, 0xa0, 0x8a, 0x8a, 0x0a, 0x66, 0x0e, 0xc4, 0x09, 0xd3, 0x07, 0xc5, 0xc5, 0xc5, - 0x50, 0x51, 0x2f, 0x81, 0x32, 0x95, 0x1d, 0xe4, 0x83, 0x41, 0xe0, 0xcb, 0xf4, 0xa0, 0xb4, 0x4e, - 0x82, 0x54, 0x37, 0x04, 0x6a, 0xeb, 0x18, 0x0c, 0x78, 0x67, 0xc8, 0xd0, 0xc4, 0x0c, 0xb1, 0xb9, - 0xfd, 0xac, 0x6e, 0xc0, 0x45, 0x7b, 0x28, 0x36, 0x5c, 0x23, 0x52, 0x30, 0x99, 0xb9, 0xfc, 0x81, - 0xf7, 0xa0, 0x82, 0x70, 0x38, 0xdc, 0x75, 0xe1, 0xc2, 0x85, 0xea, 0x59, 0x50, 0x24, 0x12, 0x31, - 0x57, 0x56, 0x56, 0xb2, 0xff, 0x0c, 0xe2, 0xf3, 0xf9, 0x50, 0x5b, 0xd7, 0x08, 0xaf, 0x1a, 0xda, - 0x40, 0xd2, 0xef, 0x07, 0xfe, 0xeb, 0x5e, 0xd0, 0x38, 0xfd, 0xd0, 0xa6, 0x1f, 0x02, 0xf3, 0xc8, - 0x14, 0xb1, 0x7b, 0xa7, 0xc1, 0x35, 0x49, 0x81, 0x6b, 0x22, 0x40, 0x5c, 0x13, 0xfe, 0xf0, 0xd8, - 0xd4, 0x0c, 0x93, 0x96, 0x51, 0x44, 0x02, 0x81, 0x00, 0xff, 0x3d, 0x48, 0x20, 0x12, 0x89, 0x4c, - 0x98, 0xba, 0xdf, 0xcf, 0x82, 0x70, 0xc1, 0x59, 0x5d, 0x5d, 0xcd, 0x5e, 0xb9, 0x72, 0x05, 0x4e, - 0x9f, 0x3e, 0x0d, 0xd8, 0x4f, 0x70, 0xff, 0xfe, 0x7d, 0x48, 0x4b, 0x4b, 0x03, 0xce, 0x14, 0x29, - 0xa9, 0x59, 0x50, 0x2e, 0x52, 0x43, 0x99, 0xdc, 0x08, 0x72, 0x1d, 0x46, 0xa7, 0xb1, 0x80, 0xda, - 0x38, 0x08, 0x0e, 0xaf, 0x1f, 0xbc, 0x81, 0x10, 0xb8, 0x7d, 0xd3, 0x30, 0x1e, 0x98, 0xa1, 0x6b, - 0x9a, 0x64, 0xe4, 0xc7, 0xb4, 0x3c, 0xc7, 0x5c, 0x34, 0xd8, 0x93, 0x1a, 0x1c, 0x5b, 0x25, 0xb3, - 0x66, 0xe0, 0x40, 0xd8, 0xf9, 0xe3, 0x38, 0xcb, 0xc2, 0x3c, 0xec, 0xdf, 0x39, 0xad, 0x5c, 0xb9, - 0x12, 0x56, 0xaf, 0x5e, 0x0d, 0x68, 0x79, 0xc0, 0x26, 0x84, 0xd2, 0x8a, 0x06, 0xc8, 0x7b, 0x55, - 0x0f, 0x0a, 0xa3, 0x8b, 0x74, 0x5b, 0x5c, 0xa0, 0xb7, 0x0d, 0x23, 0x68, 0x12, 0x26, 0xa8, 0x10, - 0xd8, 0x47, 0x3c, 0x50, 0x58, 0x54, 0x85, 0x99, 0x48, 0x26, 0x2c, 0xcb, 0x16, 0xbc, 0x07, 0x55, - 0xe2, 0x38, 0x33, 0x62, 0x34, 0x51, 0xf3, 0xa0, 0xe1, 0xe1, 0x61, 0xdf, 0xc9, 0x93, 0x27, 0xa9, - 0x85, 0x20, 0x0e, 0xb2, 0x71, 0xe3, 0x46, 0x28, 0x2a, 0x2a, 0x82, 0xa8, 0xa8, 0x28, 0x68, 0x69, - 0x69, 0x61, 0xf6, 0xee, 0xfd, 0x23, 0x9b, 0x95, 0xfb, 0x8a, 0x49, 0xcf, 0x29, 0x21, 0x99, 0x39, - 0xa5, 0x50, 0x50, 0x54, 0x4d, 0x5e, 0x64, 0x14, 0x43, 0x56, 0xf6, 0x2b, 0x68, 0x12, 0xca, 0x21, - 0xe5, 0x59, 0x26, 0x6b, 0xb3, 0xd9, 0xca, 0x38, 0x10, 0x66, 0x49, 0x87, 0xfd, 0x94, 0x3f, 0x6f, - 0x6f, 0x4c, 0x91, 0x6c, 0x62, 0x62, 0x82, 0x3a, 0x71, 0xe2, 0xc4, 0x22, 0xd0, 0xa6, 0x4d, 0x9b, - 0x00, 0xd3, 0x39, 0x2b, 0x8c, 0x8a, 0x14, 0x16, 0x16, 0xc2, 0xd4, 0xd4, 0x54, 0x10, 0xdd, 0xc9, - 0xea, 0x74, 0xba, 0x10, 0x1a, 0x25, 0x14, 0x77, 0x37, 0x3e, 0x52, 0xdf, 0xd0, 0x1c, 0x91, 0x29, - 0xd4, 0xd0, 0xdd, 0x6b, 0x80, 0x94, 0x1f, 0xb2, 0xd9, 0x7e, 0x7d, 0x47, 0x53, 0xc8, 0xab, 0x11, - 0x97, 0x96, 0x96, 0x1a, 0xb6, 0x6f, 0xdf, 0xbe, 0x62, 0x1e, 0x84, 0xf3, 0x4c, 0x33, 0x83, 0xd7, - 0xf1, 0xe3, 0xc7, 0xe9, 0x85, 0xa0, 0x2d, 0x5b, 0xb6, 0x90, 0xcc, 0xcc, 0x4c, 0x22, 0x14, 0x0a, - 0x09, 0x3a, 0x92, 0x6d, 0x6c, 0x6c, 0x24, 0x16, 0x8b, 0x85, 0xca, 0xcb, 0xcb, 0x03, 0xb3, 0xd9, - 0x1c, 0x4e, 0x4a, 0x4a, 0x62, 0xef, 0xdc, 0xb9, 0xc3, 0xda, 0xed, 0x76, 0x0a, 0x1b, 0x3b, 0x52, - 0x5c, 0x54, 0x0c, 0x4a, 0xfe, 0x25, 0x70, 0xe6, 0x7c, 0x0e, 0x7d, 0xcf, 0x7e, 0xc3, 0x1c, 0xfa, - 0xf3, 0x9f, 0x32, 0x17, 0x4d, 0x06, 0x7c, 0xd9, 0x89, 0x79, 0x0d, 0x20, 0x28, 0xb2, 0x10, 0xb4, - 0x76, 0xed, 0x5a, 0xc2, 0xa5, 0xaf, 0xaf, 0xaf, 0x2f, 0xbc, 0x64, 0xc9, 0x12, 0x2e, 0x32, 0x76, - 0xd5, 0xaa, 0x55, 0xdc, 0xfc, 0x23, 0x18, 0x3d, 0xa6, 0x71, 0x2f, 0x5c, 0xbb, 0x76, 0x8d, 0x60, - 0xc1, 0x29, 0x95, 0xbc, 0x81, 0xd1, 0x65, 0x6f, 0x04, 0x26, 0x60, 0x07, 0xd0, 0x46, 0xc3, 0xbb, - 0x8c, 0x5f, 0x83, 0x2a, 0x61, 0xe9, 0xfd, 0x45, 0x20, 0xfc, 0xd6, 0x78, 0x11, 0x44, 0x61, 0x8d, - 0x66, 0x16, 0x82, 0xd6, 0xad, 0x5b, 0x47, 0xb6, 0x6e, 0xdd, 0xca, 0x4c, 0xe3, 0xb5, 0x62, 0xc5, - 0x0a, 0xce, 0xb2, 0x01, 0xac, 0x19, 0x41, 0x27, 0x72, 0xee, 0x64, 0xd7, 0xaf, 0x5f, 0x4f, 0xb0, - 0xbe, 0x8c, 0x5a, 0xad, 0x26, 0x4a, 0xa5, 0x92, 0x54, 0xc4, 0x7e, 0xc1, 0x86, 0x1c, 0x02, 0x00, - 0x4f, 0x0b, 0xd0, 0x92, 0x1d, 0x60, 0x4b, 0xe4, 0x45, 0xde, 0x26, 0xf1, 0x3e, 0x9b, 0x07, 0x25, - 0x24, 0x24, 0xb4, 0x39, 0x9d, 0x4e, 0xc7, 0x81, 0x03, 0x07, 0xe6, 0x6b, 0xb4, 0x6c, 0xd9, 0x32, - 0x72, 0xf0, 0xe0, 0x41, 0x16, 0xeb, 0x44, 0x70, 0x53, 0x1a, 0x37, 0x65, 0x38, 0x57, 0x6e, 0xd8, - 0xb0, 0x81, 0x3d, 0x72, 0xe4, 0x08, 0x83, 0x6b, 0x04, 0xdd, 0x44, 0xf0, 0xcf, 0x31, 0xed, 0xed, - 0xed, 0xac, 0x46, 0xa3, 0x21, 0x37, 0xaf, 0x9e, 0xb5, 0x99, 0x5f, 0xae, 0x65, 0xd9, 0x90, 0x07, - 0xa0, 0x3f, 0x11, 0x66, 0x4a, 0x7e, 0x07, 0x9a, 0x04, 0x9e, 0x7c, 0xa1, 0x19, 0xb8, 0xc9, 0x20, - 0x91, 0xc9, 0x64, 0x35, 0x38, 0x97, 0x7a, 0xb0, 0x8b, 0xcd, 0x37, 0x6e, 0xdc, 0x70, 0xe2, 0xe7, - 0xc3, 0x57, 0x50, 0x50, 0x10, 0x72, 0xbb, 0xdd, 0xcc, 0xa5, 0x4b, 0x97, 0x08, 0xbe, 0x13, 0x96, - 0x48, 0x24, 0x21, 0x4c, 0x5d, 0x18, 0xeb, 0x12, 0xe2, 0x0c, 0x81, 0xb3, 0x2c, 0x6c, 0xb5, 0x5a, - 0x69, 0x9c, 0xf6, 0x04, 0xc7, 0xd5, 0x9b, 0xa6, 0x8c, 0x98, 0xf1, 0x77, 0xaa, 0xeb, 0x00, 0x14, - 0x0e, 0x06, 0xf5, 0x77, 0x30, 0x9a, 0xb2, 0x1c, 0x94, 0x71, 0xbc, 0xef, 0x16, 0x81, 0x0c, 0x06, - 0x83, 0x20, 0x3a, 0x3a, 0x5a, 0x3b, 0x27, 0x74, 0x4d, 0x33, 0x67, 0x53, 0xaf, 0xd7, 0x5b, 0x87, - 0x73, 0x6f, 0x0c, 0x37, 0xe3, 0x36, 0x65, 0xb0, 0x56, 0xcc, 0xed, 0xdb, 0xb7, 0x59, 0x3c, 0x57, - 0x10, 0x14, 0x67, 0x86, 0xa0, 0x4a, 0xa5, 0x62, 0x71, 0xbd, 0x23, 0x3e, 0x2e, 0xae, 0x57, 0x7c, - 0x6f, 0xb9, 0x9d, 0xf6, 0x60, 0x20, 0xc3, 0x25, 0x10, 0x6e, 0xdc, 0x0a, 0xbd, 0x71, 0xbf, 0xf0, - 0xb5, 0x5c, 0xe7, 0x2d, 0xe7, 0x6a, 0x24, 0xc5, 0x0d, 0x35, 0x1c, 0xec, 0xdf, 0x09, 0xa7, 0xb1, - 0x1c, 0x53, 0xec, 0x1c, 0x1b, 0x1b, 0xa3, 0x10, 0x1e, 0x74, 0x38, 0x1c, 0x41, 0x7c, 0x8c, 0x8c, - 0x8e, 0x8e, 0x12, 0x74, 0x1d, 0x2d, 0x95, 0x4a, 0xed, 0x68, 0x90, 0x5b, 0xe7, 0xbe, 0xe1, 0xed, - 0xeb, 0x2f, 0xf9, 0x9a, 0xcb, 0x00, 0x80, 0xe1, 0xaf, 0x30, 0xf2, 0xe2, 0xb7, 0x50, 0x75, 0xf3, - 0xd3, 0x47, 0x3c, 0xcc, 0x77, 0x34, 0x46, 0x25, 0xc2, 0x89, 0x2d, 0xe4, 0x84, 0x05, 0x5e, 0x24, - 0x5c, 0x5b, 0x24, 0x6c, 0x07, 0x19, 0x46, 0x34, 0x9c, 0x9c, 0x9c, 0x3c, 0x9d, 0x9b, 0x9b, 0xeb, - 0xc3, 0xaf, 0xb2, 0xfb, 0xe9, 0xd3, 0xa7, 0x1e, 0xfc, 0x22, 0x6b, 0xd7, 0xac, 0x59, 0xf3, 0x31, - 0xd6, 0xf8, 0xe3, 0x97, 0x31, 0xbc, 0xd2, 0x31, 0x45, 0x2c, 0xa8, 0x0b, 0x4f, 0x42, 0xc9, 0xdf, - 0x6f, 0x42, 0xec, 0xcd, 0xd8, 0xf3, 0xff, 0xf3, 0x39, 0x0d, 0xfb, 0xec, 0x8b, 0x53, 0xa7, 0x4e, - 0x09, 0xe4, 0x72, 0xb9, 0x09, 0xeb, 0x65, 0xc5, 0x63, 0xd8, 0xe5, 0xb9, 0xb5, 0xaf, 0xa2, 0x78, - 0x51, 0x3f, 0x5e, 0xff, 0xba, 0xbc, 0x49, 0x28, 0x9c, 0xf8, 0x21, 0x35, 0xad, 0x1b, 0x0d, 0xb7, - 0xec, 0x67, 0x1f, 0x0c, 0xb7, 0x6d, 0xdb, 0xb6, 0x61, 0xe7, 0xce, 0x9d, 0x31, 0x87, 0x0e, 0x1d, - 0x5a, 0x74, 0xe4, 0xc2, 0xeb, 0x23, 0xd4, 0xaf, 0x50, 0x4b, 0xb9, 0xe7, 0x7f, 0x00, 0x20, 0xc3, - 0x6d, 0x47, 0xb5, 0x30, 0xbb, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, - 0x60, 0x82, + 0xce, 0x00, 0x00, 0x07, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7d, 0x4c, 0x53, + 0xfb, 0x19, 0xc7, 0x3b, 0xaf, 0xbb, 0x31, 0xbb, 0xcb, 0xee, 0x3f, 0xcb, 0x32, 0x93, 0xbb, 0x04, + 0x17, 0xe3, 0x96, 0xa9, 0xf1, 0x2d, 0xce, 0xc5, 0xc4, 0x3b, 0xa3, 0x66, 0x4a, 0x16, 0xcd, 0x6e, + 0x8c, 0xc6, 0x77, 0x0d, 0xa2, 0x46, 0xa3, 0x33, 0x66, 0xea, 0x54, 0x04, 0x99, 0x8a, 0x4a, 0x9c, + 0x78, 0xf5, 0x5e, 0x94, 0x37, 0x11, 0xb8, 0x50, 0x0b, 0xe5, 0xbd, 0x50, 0x69, 0x69, 0xa1, 0x45, + 0xda, 0x02, 0x05, 0x5a, 0x5a, 0xfa, 0x42, 0x29, 0xd0, 0x17, 0x0a, 0x6d, 0x01, 0x69, 0x4f, 0x5b, + 0xfa, 0x76, 0xce, 0xef, 0xd9, 0x73, 0x88, 0x10, 0x98, 0xcb, 0xb2, 0xed, 0x26, 0x3b, 0xc9, 0x37, + 0x39, 0xa7, 0xe7, 0xe4, 0xf7, 0xe9, 0xf3, 0x3c, 0xdf, 0xe7, 0xf9, 0xfd, 0x38, 0x00, 0xc0, 0xf9, + 0x7f, 0xe8, 0xa3, 0x1f, 0xce, 0x9e, 0x3d, 0x9b, 0x79, 0xe3, 0xc6, 0x8d, 0x86, 0x23, 0x47, 0x8e, + 0xa4, 0xef, 0xde, 0xbd, 0xfb, 0xb7, 0x9b, 0x36, 0x6d, 0xfa, 0xe1, 0xf6, 0xed, 0xdb, 0x97, 0x5e, + 0xbc, 0x78, 0x91, 0x7b, 0xea, 0xd4, 0xa9, 0xaf, 0x77, 0xed, 0xda, 0xf5, 0xf9, 0xf7, 0x06, 0xe1, + 0x82, 0x3f, 0x16, 0x08, 0x04, 0x26, 0xbc, 0xef, 0xa4, 0x28, 0xaa, 0xdf, 0x68, 0x34, 0x5a, 0x2a, + 0x2a, 0x2a, 0xf4, 0xa9, 0xa9, 0xa9, 0x03, 0xcf, 0x9e, 0x3d, 0xf3, 0x49, 0x24, 0x12, 0x5b, 0x45, + 0x8d, 0xc0, 0x56, 0xd5, 0xda, 0x65, 0x6a, 0xd5, 0xdb, 0x9b, 0xc5, 0x3a, 0x5b, 0xa1, 0x44, 0x6b, + 0x3d, 0x87, 0xdf, 0x7c, 0xf2, 0x5f, 0x81, 0xf6, 0xee, 0xdd, 0xfb, 0x87, 0xc1, 0xc1, 0x41, 0x0b, + 0xde, 0x17, 0x27, 0x27, 0x27, 0x6b, 0xce, 0x9c, 0x39, 0xa3, 0xad, 0xac, 0xac, 0x54, 0x8c, 0x8d, + 0x8d, 0x05, 0x9d, 0x9e, 0xc9, 0x70, 0x87, 0x69, 0x84, 0x34, 0xe9, 0xdd, 0x84, 0xdb, 0xed, 0x66, + 0xf2, 0xe4, 0x43, 0xf1, 0x7c, 0xd9, 0x20, 0x55, 0xdd, 0x3d, 0xea, 0x91, 0xf6, 0x0c, 0x78, 0x6b, + 0x3b, 0x4c, 0x7f, 0xfb, 0x8f, 0x41, 0x98, 0xae, 0xac, 0x50, 0x28, 0xd4, 0xd7, 0xdb, 0xdb, 0x5b, + 0x85, 0xd1, 0x0d, 0xa7, 0xa5, 0xa5, 0x29, 0xef, 0xdc, 0xb9, 0x63, 0x2f, 0x7c, 0x53, 0x49, 0xcb, + 0x8c, 0xa3, 0x4c, 0x89, 0x7a, 0x2a, 0xce, 0xd7, 0xf9, 0x63, 0x75, 0x86, 0x60, 0x5c, 0x62, 0xa3, + 0xe3, 0x4d, 0xd6, 0x10, 0x5d, 0xd4, 0xee, 0xa0, 0xb3, 0x1a, 0xfb, 0x83, 0xfc, 0x77, 0xa6, 0x70, + 0x49, 0x6d, 0xab, 0x71, 0xe7, 0xce, 0x9d, 0xab, 0xfe, 0x25, 0xe8, 0xf4, 0xe9, 0xd3, 0x7f, 0xcd, + 0xcb, 0xcb, 0xeb, 0x2e, 0x28, 0x28, 0x50, 0xbf, 0x7c, 0xf9, 0xd2, 0x8f, 0x11, 0x50, 0xcf, 0x9f, + 0x3f, 0x0f, 0xa5, 0xa4, 0xa4, 0xc0, 0xed, 0xdb, 0xb7, 0xe1, 0xef, 0x59, 0x59, 0x44, 0xdc, 0x6d, + 0x86, 0x17, 0xf2, 0x51, 0x92, 0x2d, 0x36, 0x43, 0x5e, 0xcb, 0x10, 0xc9, 0x11, 0x1b, 0x49, 0x91, + 0xcc, 0x42, 0xde, 0x28, 0x46, 0xe8, 0x72, 0xd5, 0x30, 0x93, 0xd3, 0xa4, 0x27, 0x0d, 0x06, 0x5f, + 0xac, 0x5e, 0x65, 0xa1, 0xeb, 0x9a, 0x95, 0xd4, 0xc1, 0x83, 0x07, 0xff, 0xfc, 0x11, 0xe8, 0xd1, + 0xa3, 0x47, 0x12, 0xbc, 0x31, 0xfa, 0xfd, 0xfe, 0x7e, 0x93, 0xc9, 0x14, 0x19, 0x1d, 0x1d, 0x0d, + 0x74, 0x77, 0x77, 0xc7, 0xb5, 0x5a, 0x2d, 0xb0, 0x6a, 0x56, 0xf6, 0x42, 0xb5, 0x9e, 0x22, 0xf5, + 0xc6, 0x20, 0x11, 0x0d, 0x85, 0xa1, 0xc9, 0xe4, 0x83, 0x76, 0x7b, 0x98, 0xb4, 0x59, 0x29, 0xd2, + 0xeb, 0x01, 0xba, 0x67, 0x2c, 0xca, 0x08, 0xb4, 0x2e, 0x46, 0x64, 0x7a, 0x1f, 0x6e, 0xb5, 0x86, + 0x62, 0xd5, 0x62, 0x15, 0x39, 0x7c, 0xf8, 0x70, 0xd1, 0x47, 0xa0, 0x87, 0x0f, 0x1f, 0x4a, 0xf1, + 0x46, 0x87, 0x00, 0x5b, 0x67, 0x67, 0x67, 0xbc, 0xab, 0xab, 0x2b, 0xc4, 0xe7, 0xf3, 0x49, 0x43, + 0x43, 0x03, 0xb4, 0xb7, 0xb7, 0x43, 0x63, 0x5b, 0x0f, 0xf0, 0x8d, 0x11, 0x52, 0x20, 0xb3, 0x82, + 0x6c, 0x38, 0x04, 0x62, 0xf3, 0x34, 0x88, 0x0d, 0x5e, 0x10, 0xe9, 0xc7, 0x49, 0x9f, 0x97, 0xd0, + 0x6a, 0x47, 0x90, 0x48, 0xfa, 0xdd, 0x4c, 0xb5, 0xca, 0x12, 0xd6, 0x78, 0xc1, 0x57, 0xf7, 0x4e, + 0x4f, 0xbe, 0xe3, 0x0b, 0xa6, 0x2f, 0x5f, 0xbe, 0x2c, 0x48, 0x4c, 0x4c, 0xfc, 0xcd, 0x3c, 0xe8, + 0xc1, 0x83, 0x07, 0xb3, 0xa0, 0xfa, 0xfa, 0xfa, 0x20, 0x3a, 0x8b, 0xa0, 0x98, 0xfc, 0xfc, 0x7c, + 0xa8, 0xa9, 0xa9, 0x01, 0x74, 0x20, 0x08, 0x64, 0x3d, 0x50, 0xa8, 0x74, 0x41, 0xa3, 0x89, 0x82, + 0x12, 0x69, 0x3f, 0x28, 0x47, 0x28, 0x90, 0x1a, 0x3d, 0xa4, 0x59, 0x37, 0x0a, 0xd6, 0x69, 0xa0, + 0x7b, 0x1d, 0x7e, 0xa2, 0x1e, 0x9a, 0x62, 0x44, 0x5d, 0x03, 0xb1, 0xc1, 0x69, 0xa0, 0x1a, 0x55, + 0x26, 0x9a, 0xdf, 0x20, 0x77, 0xc7, 0xe3, 0xf1, 0xae, 0xb6, 0xb6, 0x36, 0xf3, 0xf9, 0xf3, 0xe7, + 0x79, 0x58, 0xef, 0x2f, 0xe6, 0x41, 0x68, 0xd1, 0xd8, 0xfd, 0xfb, 0xf7, 0x81, 0x55, 0x46, 0x46, + 0xc6, 0x2c, 0xa8, 0xa8, 0xa8, 0x08, 0xea, 0x24, 0x1d, 0x50, 0xd8, 0xee, 0x80, 0x26, 0x33, 0x05, + 0xa5, 0xad, 0x06, 0x50, 0xd9, 0x82, 0xa4, 0xc5, 0x30, 0x4e, 0x14, 0x03, 0x1e, 0x62, 0xf3, 0x03, + 0x6d, 0x1a, 0xa7, 0x88, 0x71, 0xd4, 0xc7, 0xa8, 0x8c, 0xf6, 0x98, 0x93, 0x62, 0xc2, 0xc2, 0xf6, + 0xbe, 0x78, 0xc6, 0xe3, 0x97, 0x14, 0xeb, 0x5c, 0x54, 0x45, 0x24, 0x12, 0xd1, 0xdd, 0xbb, 0x77, + 0xaf, 0x8b, 0x83, 0x0b, 0xcf, 0x82, 0xaa, 0xaa, 0xaa, 0xe8, 0x39, 0x10, 0x2b, 0x4c, 0x1f, 0x94, + 0x95, 0x95, 0x01, 0x5f, 0x20, 0x81, 0x8a, 0x0e, 0x1b, 0xc8, 0x46, 0xc2, 0xc0, 0x95, 0xf5, 0x83, + 0x62, 0xe8, 0x3d, 0xb4, 0xea, 0xec, 0xd0, 0x6d, 0x75, 0x93, 0xa1, 0x89, 0x19, 0x62, 0x9f, 0x9a, + 0x21, 0x23, 0x5e, 0x8a, 0xe9, 0x1b, 0x72, 0xc5, 0x27, 0x66, 0x98, 0x68, 0xad, 0x48, 0xc1, 0xe4, + 0x16, 0x94, 0x0d, 0x7f, 0x00, 0x15, 0x47, 0xa3, 0xd1, 0xee, 0x73, 0xe7, 0xce, 0xd5, 0xce, 0x82, + 0x62, 0xb1, 0x98, 0xb9, 0xba, 0xba, 0x9a, 0xf9, 0x67, 0x10, 0x97, 0xcb, 0x05, 0x41, 0xc3, 0x5b, + 0xe0, 0x09, 0x15, 0x20, 0xb5, 0x04, 0x80, 0xdb, 0xaa, 0x03, 0x8d, 0x93, 0x22, 0xed, 0xfd, 0x76, + 0x30, 0x8f, 0xf9, 0x88, 0x7d, 0x32, 0x08, 0xae, 0xe9, 0x10, 0x19, 0x9d, 0x0a, 0xa0, 0xa8, 0xa8, + 0xdb, 0x3f, 0x43, 0x67, 0xe7, 0x96, 0x31, 0x7e, 0x7f, 0x80, 0xfb, 0x01, 0xc4, 0x6f, 0x6e, 0x6e, + 0x36, 0x61, 0xea, 0x7e, 0x3d, 0x0b, 0x0a, 0x04, 0x02, 0xce, 0xda, 0xda, 0x5a, 0xe6, 0xd2, 0xa5, + 0x4b, 0x70, 0xf2, 0xe4, 0x49, 0xc0, 0x7e, 0x82, 0xbb, 0x77, 0xef, 0x42, 0x76, 0x76, 0x36, 0xb0, + 0xa6, 0x78, 0xfa, 0x4d, 0x3e, 0x54, 0x36, 0xab, 0xa1, 0x42, 0x6e, 0x00, 0x99, 0xce, 0x06, 0x72, + 0x8d, 0x05, 0xba, 0x8c, 0x23, 0xe0, 0x98, 0xa4, 0x60, 0x22, 0x10, 0x06, 0x8f, 0x2f, 0x00, 0x93, + 0x81, 0x99, 0xb8, 0xa0, 0x49, 0x46, 0xbe, 0xcd, 0x2e, 0x72, 0xce, 0x45, 0x83, 0x3d, 0xa9, 0xc1, + 0xb1, 0xc5, 0x9b, 0x35, 0x03, 0x0b, 0xc2, 0xce, 0x9f, 0xc4, 0x59, 0x16, 0xe5, 0x60, 0xff, 0xce, + 0x69, 0xc5, 0x8a, 0x15, 0xb0, 0x6a, 0xd5, 0x2a, 0x40, 0xcb, 0x03, 0x36, 0x21, 0x54, 0x54, 0x09, + 0xc9, 0x2b, 0x6e, 0x03, 0x28, 0xb1, 0x71, 0x7b, 0x2c, 0x2e, 0xd2, 0x3f, 0xe2, 0x02, 0x87, 0x77, + 0x1a, 0xa6, 0x42, 0x61, 0x18, 0x19, 0xf3, 0x92, 0xef, 0x4a, 0x6b, 0xe0, 0x7e, 0x46, 0x16, 0x83, + 0x57, 0xf1, 0x07, 0x50, 0x35, 0x9a, 0xc9, 0x88, 0xd1, 0x24, 0xcc, 0x83, 0x5c, 0x2e, 0x97, 0xff, + 0xf8, 0xf1, 0xe3, 0xa1, 0x85, 0x20, 0x16, 0xb2, 0x61, 0xc3, 0x06, 0x28, 0x2d, 0x2d, 0x85, 0x84, + 0x84, 0x04, 0x10, 0x89, 0x44, 0x74, 0x62, 0xe2, 0x1f, 0xe9, 0xbc, 0x02, 0x1e, 0x9d, 0x53, 0xc0, + 0x23, 0xb9, 0x05, 0xe5, 0x50, 0x54, 0x5a, 0x0b, 0x2f, 0x72, 0xcb, 0x20, 0x2f, 0xff, 0x0d, 0x08, + 0x45, 0x72, 0x78, 0xfa, 0x75, 0x0e, 0x33, 0x3c, 0x3c, 0x5c, 0xc1, 0x82, 0x30, 0x4b, 0xba, 0x85, + 0xfd, 0xc4, 0xc1, 0x14, 0xc9, 0xa6, 0xa6, 0xa6, 0x42, 0xc7, 0x8e, 0x1d, 0x5b, 0x04, 0xda, 0xb8, + 0x71, 0x23, 0x60, 0x3a, 0x67, 0x85, 0x51, 0x91, 0x92, 0x92, 0x12, 0xf0, 0xf9, 0x7c, 0x61, 0x74, + 0x27, 0xd3, 0xd7, 0xd7, 0x17, 0xe1, 0x72, 0xdf, 0x44, 0x52, 0x53, 0xd3, 0x62, 0x8d, 0x42, 0x51, + 0x4c, 0xae, 0x54, 0x93, 0x1e, 0xbd, 0x11, 0x41, 0x79, 0xcc, 0x60, 0x7f, 0xd7, 0xdb, 0x88, 0x47, + 0x2b, 0x29, 0x2f, 0x2f, 0x37, 0x6c, 0xdb, 0xb6, 0x6d, 0xf9, 0x3c, 0x08, 0xe7, 0x99, 0x66, 0x06, + 0xaf, 0xa3, 0x47, 0x8f, 0xc6, 0x17, 0x82, 0x36, 0x6f, 0xde, 0x4c, 0x72, 0x73, 0x73, 0x89, 0x58, + 0x2c, 0x26, 0xe8, 0x48, 0x46, 0x28, 0x14, 0x12, 0x8b, 0xc5, 0x12, 0x7a, 0xfd, 0xfa, 0x35, 0x98, + 0xcd, 0xe6, 0x68, 0x66, 0x66, 0x26, 0x73, 0xeb, 0xd6, 0x2d, 0xc6, 0x6e, 0xb7, 0x87, 0x14, 0x0a, + 0x45, 0xac, 0xb4, 0xb4, 0x8c, 0x28, 0xb9, 0x17, 0xc0, 0x59, 0xf0, 0x0b, 0x18, 0xc8, 0xfa, 0x19, + 0x7d, 0x60, 0xff, 0x9f, 0x72, 0x17, 0x4d, 0x06, 0xfc, 0xd8, 0x89, 0x79, 0x0d, 0x20, 0x28, 0xb6, + 0x10, 0xb4, 0x66, 0xcd, 0x1a, 0xc2, 0xa6, 0x6f, 0x60, 0x60, 0x20, 0xba, 0x64, 0xc9, 0x12, 0x36, + 0x32, 0x66, 0xe5, 0xca, 0x95, 0xec, 0xfc, 0x23, 0x18, 0x3d, 0xbd, 0x67, 0xcf, 0x1e, 0xb8, 0x72, + 0xe5, 0x0a, 0xc1, 0x82, 0x87, 0x3a, 0xdb, 0x84, 0xb4, 0x2e, 0x7f, 0x03, 0xd0, 0x01, 0x1b, 0x80, + 0x36, 0x09, 0xde, 0xe7, 0xfc, 0x14, 0x94, 0xe9, 0x4b, 0xef, 0x2e, 0x02, 0xe1, 0x5e, 0x33, 0x81, + 0xa0, 0x10, 0xd6, 0x68, 0x66, 0x21, 0x68, 0xed, 0xda, 0xb5, 0x64, 0xcb, 0x96, 0x2d, 0x74, 0x10, + 0xaf, 0xe5, 0xcb, 0x97, 0x13, 0xcc, 0x79, 0x00, 0x6b, 0x46, 0xd0, 0x89, 0xac, 0x3b, 0x99, 0x75, + 0xeb, 0xd6, 0x11, 0xac, 0x2f, 0xad, 0x56, 0xab, 0x89, 0x52, 0xa9, 0x24, 0x95, 0x29, 0x2b, 0x98, + 0x88, 0x83, 0x0f, 0xe0, 0x15, 0x41, 0x5c, 0xba, 0x1d, 0x86, 0x33, 0x38, 0xb1, 0xbe, 0x4c, 0xce, + 0x17, 0xf3, 0xa0, 0xf4, 0xf4, 0xf4, 0x76, 0xa7, 0xd3, 0xe9, 0xd8, 0xb7, 0x6f, 0xdf, 0x7c, 0x8d, + 0x96, 0x2d, 0x5b, 0x46, 0xf6, 0xef, 0xdf, 0xcf, 0x60, 0x9d, 0x08, 0x2e, 0x1a, 0xc7, 0x45, 0x69, + 0xd6, 0x95, 0xeb, 0xd7, 0xaf, 0x67, 0x0e, 0x1d, 0x3a, 0x44, 0xe3, 0x3b, 0x82, 0x6e, 0x22, 0xf8, + 0xe7, 0x68, 0x95, 0x4a, 0xc5, 0x68, 0x34, 0x1a, 0x72, 0xf5, 0xd2, 0xe9, 0x61, 0x73, 0xe1, 0x6a, + 0x86, 0x89, 0x78, 0x01, 0x06, 0x33, 0x60, 0x86, 0xf7, 0x2b, 0xd0, 0xa4, 0x73, 0xe4, 0x0b, 0xcd, + 0xc0, 0x4e, 0x06, 0xa9, 0x4c, 0x26, 0xab, 0xc3, 0xb9, 0xd4, 0x8b, 0x5d, 0x6c, 0xbe, 0x76, 0xed, + 0x9a, 0x13, 0xb7, 0x0f, 0x7f, 0x71, 0x71, 0x71, 0xc4, 0xe3, 0xf1, 0xd0, 0x17, 0x2e, 0x5c, 0x20, + 0xf8, 0x4d, 0x54, 0x2a, 0x95, 0x46, 0x30, 0x75, 0x51, 0x9b, 0xcd, 0x16, 0xd1, 0xe9, 0x74, 0x11, + 0x9c, 0x65, 0x51, 0xab, 0xd5, 0x1a, 0xc7, 0x69, 0x4f, 0xf0, 0xdb, 0x77, 0x4d, 0x39, 0xc9, 0x93, + 0xef, 0x3b, 0xae, 0x02, 0x84, 0x86, 0x00, 0xd4, 0x5f, 0xc1, 0x78, 0xd6, 0x67, 0xa0, 0x4c, 0xe3, + 0x7c, 0xb5, 0x08, 0x64, 0x30, 0x18, 0xf8, 0x49, 0x49, 0x49, 0xda, 0x39, 0xa1, 0x6b, 0x9a, 0x58, + 0x9b, 0x4e, 0x4c, 0x4c, 0x08, 0x70, 0xee, 0xb9, 0x71, 0x31, 0x76, 0x51, 0x1a, 0x6b, 0x45, 0xdf, + 0xbc, 0x79, 0x93, 0xc1, 0x73, 0x05, 0x41, 0x31, 0x08, 0x0d, 0x77, 0x74, 0x74, 0x30, 0xf8, 0xbe, + 0x13, 0x37, 0x49, 0xbd, 0x24, 0xf5, 0x47, 0xb6, 0xb8, 0x17, 0x03, 0x71, 0xf1, 0x20, 0x2a, 0xdc, + 0x02, 0xfa, 0xb4, 0x1f, 0xf8, 0x45, 0x57, 0x39, 0x9f, 0xb1, 0x35, 0x6a, 0xc1, 0x05, 0x35, 0x2c, + 0xec, 0xdf, 0x09, 0xa7, 0xb1, 0x1c, 0x53, 0xec, 0x74, 0xbb, 0xdd, 0x21, 0x84, 0x87, 0x1d, 0x0e, + 0x47, 0x18, 0x1f, 0x63, 0xe3, 0xe3, 0xe3, 0x04, 0xb7, 0x93, 0x78, 0x4b, 0x4b, 0x8b, 0x0d, 0x0d, + 0x72, 0xe3, 0xcc, 0xef, 0x39, 0x89, 0x83, 0xbc, 0x2f, 0xd9, 0x0c, 0x00, 0x18, 0xfe, 0x02, 0x63, + 0x2f, 0x7e, 0x0e, 0x35, 0xd7, 0x3f, 0x7f, 0xc0, 0xc1, 0x7c, 0x27, 0x61, 0x54, 0xcd, 0x38, 0xb1, + 0xc5, 0xac, 0xb0, 0xc0, 0x8b, 0x84, 0xef, 0x16, 0x09, 0xdb, 0x41, 0x86, 0x11, 0xb9, 0x9e, 0x3c, + 0x79, 0x12, 0x7c, 0xf5, 0xea, 0x95, 0x1f, 0x77, 0x65, 0xcf, 0xe3, 0xc7, 0x8f, 0xbd, 0xb8, 0x23, + 0x6b, 0x57, 0xaf, 0x5e, 0xfd, 0x29, 0xd6, 0xf8, 0xd3, 0xc2, 0x64, 0x4e, 0xb9, 0x5b, 0x91, 0x02, + 0xea, 0x92, 0xe3, 0xc0, 0xfb, 0xe6, 0x3a, 0xa4, 0x5c, 0x4f, 0x39, 0xfb, 0x3f, 0x9f, 0xd3, 0xb0, + 0xcf, 0x7e, 0x79, 0xe2, 0xc4, 0x09, 0xbe, 0x5c, 0x2e, 0x37, 0x61, 0xbd, 0xac, 0x78, 0x0c, 0xbb, + 0x38, 0xf7, 0xee, 0x77, 0x09, 0x9c, 0x84, 0x6f, 0xaf, 0x7e, 0x59, 0xf9, 0x56, 0x2c, 0x9e, 0x7a, + 0xfa, 0x3c, 0xbb, 0x07, 0x0d, 0xb7, 0xec, 0x7b, 0x1f, 0x0c, 0xb7, 0x6e, 0xdd, 0xba, 0x7e, 0xc7, + 0x8e, 0x1d, 0xc9, 0x07, 0x0e, 0x1c, 0x58, 0x74, 0xe4, 0xc2, 0xeb, 0x13, 0xd4, 0x4f, 0x50, 0x4b, + 0xd9, 0xe7, 0x7f, 0x00, 0xb6, 0xba, 0x6d, 0x7f, 0x53, 0x45, 0x95, 0x9a, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_gerbview_small_xpm[1] = {{ png, sizeof( png ), "icon_gerbview_small_xpm" }}; diff --git a/bitmaps_png/cpp_26/pagelayout_load.cpp b/bitmaps_png/cpp_26/pagelayout_load.cpp new file mode 100644 index 0000000000..28addf3fd7 --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_load.cpp @@ -0,0 +1,74 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x03, 0x96, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x56, 0xdf, 0x6b, 0x1c, + 0x55, 0x14, 0xfe, 0xce, 0x99, 0x99, 0xed, 0x6e, 0x36, 0xd3, 0x75, 0xd7, 0x92, 0x44, 0x30, 0xa5, + 0xd5, 0x56, 0x93, 0x56, 0xa1, 0x6d, 0x04, 0x45, 0x14, 0x8b, 0x10, 0x1a, 0x29, 0x52, 0x91, 0xa2, + 0xf5, 0x4d, 0xf0, 0x55, 0xec, 0x8f, 0x07, 0x97, 0x40, 0xeb, 0x8f, 0x8a, 0xa4, 0x55, 0x5f, 0x7c, + 0x12, 0x14, 0x91, 0x42, 0x44, 0x7d, 0x51, 0xf0, 0x49, 0xa1, 0xfe, 0x07, 0x62, 0x25, 0x8a, 0x68, + 0x43, 0x5b, 0xb6, 0x94, 0x40, 0xd2, 0x26, 0x99, 0x6d, 0x76, 0x76, 0x67, 0x33, 0xb3, 0xf7, 0xf8, + 0xb0, 0x33, 0xb3, 0x77, 0x67, 0x67, 0xd7, 0xd4, 0x0b, 0x97, 0x33, 0x73, 0xb9, 0xdc, 0xef, 0x7e, + 0xdf, 0xf9, 0xce, 0xbd, 0x97, 0x00, 0xcc, 0x00, 0x98, 0x04, 0xc0, 0x00, 0x14, 0xee, 0xad, 0x51, + 0xd8, 0x97, 0x00, 0x5c, 0x16, 0x91, 0xdb, 0x83, 0x26, 0x9f, 0x9a, 0x9f, 0x9f, 0xbf, 0xe6, 0x54, + 0xab, 0xea, 0xee, 0xc6, 0x46, 0xab, 0x56, 0xab, 0xa9, 0x9a, 0xeb, 0xaa, 0x7a, 0xbd, 0xae, 0x3c, + 0xcf, 0x53, 0x9e, 0xe7, 0xa9, 0x66, 0xb3, 0x19, 0xf7, 0xcd, 0xcd, 0x4d, 0xe5, 0xfb, 0xbe, 0xf2, + 0x7d, 0x5f, 0x05, 0x41, 0xa0, 0x1a, 0x8d, 0x86, 0xba, 0xb5, 0xb4, 0xe4, 0x1f, 0x7f, 0xe5, 0xc4, + 0x1c, 0x80, 0xed, 0x22, 0x82, 0xb4, 0x6e, 0x02, 0xe0, 0x62, 0xa9, 0x94, 0x63, 0x8a, 0x1b, 0x88, + 0x19, 0x4c, 0x04, 0x66, 0x06, 0x11, 0xb5, 0xb7, 0xae, 0xc5, 0xe8, 0x3b, 0xfa, 0x37, 0x88, 0xcc, + 0xd9, 0xd9, 0x72, 0xf9, 0x7a, 0xa5, 0x72, 0x83, 0x88, 0x2e, 0x89, 0x48, 0x33, 0xc9, 0x86, 0x01, + 0x28, 0x22, 0x92, 0x2d, 0xe9, 0xa4, 0x01, 0xe8, 0x4d, 0x29, 0x05, 0x06, 0xd1, 0x85, 0xb9, 0x0f, + 0x3f, 0xdb, 0x3d, 0xb1, 0x7f, 0x9a, 0x88, 0x8c, 0x34, 0xa0, 0x2d, 0x37, 0x91, 0xf4, 0xfd, 0x30, + 0x33, 0x36, 0x6a, 0x1b, 0x78, 0x72, 0xea, 0x10, 0xbf, 0xfb, 0xce, 0xb9, 0xef, 0xef, 0x1f, 0x7d, + 0x70, 0x2a, 0x1d, 0x48, 0x04, 0x72, 0x8f, 0x8b, 0x47, 0x0c, 0x99, 0x19, 0x99, 0x4c, 0x06, 0x96, + 0x69, 0xa1, 0xd1, 0xf0, 0xf0, 0xe2, 0x91, 0x69, 0xeb, 0xf4, 0xec, 0xdb, 0x97, 0xb3, 0x85, 0xc2, + 0x5e, 0x7d, 0xae, 0x99, 0x58, 0x15, 0x20, 0x8a, 0xa3, 0x88, 0xf4, 0x95, 0x4b, 0x07, 0x33, 0x4d, + 0x13, 0x85, 0xc2, 0x76, 0xdc, 0x59, 0x5d, 0xc5, 0xe4, 0xc4, 0x04, 0x5e, 0x3f, 0xfe, 0xb2, 0xed, + 0xf9, 0xf4, 0x13, 0x11, 0x3d, 0x2d, 0x22, 0xcb, 0xbd, 0x40, 0x00, 0x24, 0xf4, 0x6b, 0x14, 0xfb, + 0xb1, 0x8c, 0x36, 0xc0, 0xcc, 0xb0, 0x2c, 0x0b, 0xa5, 0x52, 0x09, 0x57, 0xaf, 0x2e, 0x62, 0x61, + 0xe1, 0x0f, 0x8c, 0x8e, 0x8e, 0xe0, 0xb5, 0xa3, 0xcf, 0x3f, 0x94, 0xcd, 0x7d, 0xf1, 0x2d, 0x11, + 0x1d, 0x13, 0x91, 0xbb, 0xac, 0xb3, 0x91, 0x88, 0x95, 0x1e, 0x07, 0x48, 0x28, 0x22, 0x31, 0xd0, + 0xd0, 0xd0, 0x10, 0xc6, 0x77, 0x8e, 0xa3, 0xd9, 0xf4, 0xf0, 0xdb, 0x95, 0xdf, 0xb1, 0xbe, 0xe6, + 0xe0, 0xf0, 0x13, 0x8f, 0x1f, 0xfe, 0xf4, 0xf3, 0x4b, 0x1f, 0x13, 0x51, 0xde, 0x4c, 0xdd, 0xf1, + 0x00, 0x56, 0x69, 0x72, 0x32, 0x33, 0xb2, 0xd9, 0x2c, 0x4a, 0xc5, 0x22, 0x2c, 0xd3, 0x84, 0x6d, + 0xdb, 0x68, 0x34, 0x3c, 0x10, 0x11, 0xa6, 0x1e, 0x7b, 0xf4, 0x55, 0x00, 0x73, 0x66, 0xd7, 0xe2, + 0x22, 0x10, 0xa2, 0xae, 0xd8, 0x2f, 0x57, 0xd1, 0x58, 0xc4, 0x0a, 0x00, 0x72, 0xb9, 0x1c, 0x0c, + 0xc3, 0x40, 0x3e, 0x9f, 0x47, 0x10, 0x04, 0x50, 0x4a, 0xa1, 0x5e, 0x6f, 0x58, 0x00, 0xb2, 0x66, + 0x0f, 0x93, 0x04, 0x98, 0x0e, 0xa2, 0x2f, 0x9e, 0x8c, 0x51, 0x71, 0x47, 0x2e, 0x6c, 0xb5, 0x5a, + 0xba, 0xe4, 0x62, 0xf6, 0xec, 0x30, 0x09, 0x36, 0xa0, 0x50, 0xd3, 0x18, 0x1a, 0x86, 0x01, 0x66, + 0x86, 0x61, 0xb4, 0x6b, 0xd6, 0xb2, 0xac, 0x4e, 0x1d, 0x89, 0x9e, 0x70, 0xcd, 0x14, 0xfa, 0x78, + 0x64, 0x86, 0x7e, 0x51, 0x9f, 0x17, 0x31, 0xd3, 0x8f, 0x30, 0x4e, 0xba, 0x4a, 0x12, 0x0e, 0x94, + 0x04, 0x60, 0xbf, 0x98, 0x06, 0xa8, 0x8f, 0xb3, 0x6e, 0xe5, 0x1e, 0x46, 0x89, 0xef, 0xff, 0x3a, + 0x39, 0x64, 0xc0, 0xbc, 0xee, 0x1c, 0x01, 0x90, 0xf0, 0x64, 0x90, 0x76, 0xd9, 0xc7, 0x79, 0x4a, + 0x9e, 0x06, 0xd1, 0x82, 0xc9, 0xef, 0x7e, 0x35, 0x67, 0x76, 0xc9, 0x15, 0x82, 0xe8, 0x80, 0x3f, + 0x5c, 0xfc, 0x04, 0x37, 0x17, 0xfe, 0xfc, 0x5f, 0xa7, 0x3a, 0x00, 0xec, 0x3a, 0x74, 0x20, 0xd3, + 0x61, 0xa4, 0x49, 0xa4, 0x83, 0x10, 0x80, 0xea, 0xf2, 0x6d, 0xec, 0xd8, 0x39, 0x8e, 0xc9, 0x67, + 0x9f, 0x01, 0x31, 0xb7, 0xaf, 0xd4, 0xc4, 0x1d, 0x35, 0xa8, 0x59, 0xf6, 0x70, 0x10, 0x03, 0xa9, + 0x14, 0xe9, 0x74, 0x37, 0x8e, 0xed, 0xdd, 0x83, 0x83, 0x47, 0x67, 0xe2, 0x4b, 0x8f, 0x88, 0xb6, + 0x0c, 0xe8, 0x38, 0x8e, 0xea, 0x30, 0x52, 0x61, 0x22, 0x35, 0x90, 0xe8, 0x08, 0x8a, 0xbb, 0x08, + 0xbe, 0x39, 0x5f, 0xc6, 0xf5, 0x2b, 0xbf, 0xf6, 0xbe, 0x05, 0xbe, 0xfc, 0x0e, 0xf7, 0x8d, 0x8c, + 0x81, 0x88, 0xf0, 0xd5, 0xc9, 0x37, 0xb0, 0x76, 0xeb, 0x26, 0x00, 0xe0, 0x58, 0xf9, 0x7d, 0xec, + 0x78, 0x64, 0x9f, 0x9e, 0x23, 0xd5, 0x6b, 0xd1, 0xd0, 0x0c, 0x88, 0x9c, 0x28, 0x82, 0x6d, 0x43, + 0x79, 0xe4, 0x6c, 0xbb, 0x27, 0x3f, 0xba, 0x09, 0x46, 0x76, 0xef, 0x41, 0x36, 0xdf, 0x9e, 0x93, + 0x1d, 0x1e, 0xee, 0x36, 0xc3, 0xda, 0xea, 0x7a, 0x53, 0x07, 0x4a, 0x93, 0x50, 0x44, 0xf0, 0xd2, + 0x99, 0xb3, 0x5d, 0xb2, 0xe9, 0xd2, 0xa9, 0x50, 0xfa, 0x17, 0xde, 0x2a, 0x77, 0xc9, 0x59, 0xa9, + 0x54, 0xbc, 0x08, 0x88, 0x16, 0x17, 0xff, 0x71, 0x67, 0xe4, 0x48, 0xa7, 0x00, 0x35, 0x10, 0x68, + 0x75, 0xf4, 0xf3, 0x8f, 0x1f, 0x60, 0x75, 0xe5, 0x5a, 0x6a, 0x5e, 0x76, 0x3d, 0xfc, 0x14, 0x9e, + 0x9b, 0x7e, 0x13, 0xbf, 0x7c, 0xf4, 0x1e, 0x56, 0xfe, 0xfe, 0x2b, 0x1e, 0x0f, 0x0a, 0x45, 0x8e, + 0x80, 0x0c, 0xc7, 0x71, 0x94, 0xeb, 0xba, 0x01, 0x11, 0x83, 0xb9, 0xf3, 0xfa, 0x21, 0x22, 0x14, + 0x1e, 0x18, 0xe3, 0x6d, 0xb6, 0x0d, 0xd7, 0x75, 0x55, 0xd5, 0x59, 0xe6, 0xf5, 0xf5, 0x25, 0xd2, + 0x5f, 0x75, 0x21, 0x27, 0x14, 0xab, 0x2b, 0x52, 0xab, 0xd5, 0x54, 0x4b, 0x84, 0x61, 0x18, 0xf1, + 0x9c, 0xa6, 0x1f, 0x04, 0x61, 0x12, 0x70, 0x02, 0xc0, 0x41, 0x00, 0x46, 0xca, 0x03, 0xb2, 0xef, + 0x53, 0x62, 0x8b, 0x63, 0x19, 0x00, 0x77, 0x00, 0x7c, 0xfd, 0x2f, 0xaa, 0x54, 0x34, 0x60, 0xb0, + 0x2e, 0xe7, 0xea, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_load_xpm[1] = {{ png, sizeof( png ), "pagelayout_load_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_26/pagelayout_load_default.cpp b/bitmaps_png/cpp_26/pagelayout_load_default.cpp new file mode 100644 index 0000000000..987766dc1b --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_load_default.cpp @@ -0,0 +1,100 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x29, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x95, 0x95, 0x6b, 0x6c, 0x53, + 0x65, 0x18, 0xc7, 0x97, 0x60, 0x42, 0x22, 0x09, 0x5f, 0x8c, 0xf2, 0xc5, 0x20, 0x7e, 0x30, 0x92, + 0x18, 0x82, 0xd1, 0xc8, 0x18, 0x06, 0x37, 0x25, 0x8c, 0x99, 0x2c, 0x30, 0x22, 0x43, 0x40, 0x81, + 0xc4, 0x08, 0x04, 0x50, 0x23, 0x53, 0x26, 0x0c, 0xd8, 0x64, 0x1d, 0xdb, 0xb8, 0x18, 0xd8, 0xd8, + 0x50, 0xdc, 0x8d, 0x4b, 0x51, 0xe2, 0x94, 0x4b, 0x69, 0x3b, 0x04, 0xc5, 0xb0, 0x8d, 0x51, 0x75, + 0x63, 0x12, 0xd8, 0x00, 0xa1, 0xeb, 0x2e, 0xbd, 0xad, 0xf7, 0x7b, 0xd7, 0x9d, 0xf6, 0xfc, 0x7d, + 0xde, 0xd7, 0x9d, 0xae, 0xa7, 0xeb, 0x88, 0x9e, 0xe4, 0x97, 0x73, 0xd2, 0xad, 0xcf, 0xef, 0x3c, + 0xff, 0xf7, 0x79, 0xdf, 0xa6, 0xa5, 0xa5, 0xa5, 0xe5, 0x10, 0xdb, 0x88, 0xcf, 0xc6, 0xee, 0xff, + 0x87, 0x82, 0xb1, 0xef, 0xad, 0x26, 0x9e, 0x06, 0x90, 0x36, 0x19, 0xec, 0xfa, 0x54, 0xa9, 0x54, + 0xea, 0x3d, 0x5e, 0xaf, 0xe8, 0xf3, 0xfb, 0x63, 0x81, 0x40, 0x40, 0x0c, 0x04, 0x83, 0x62, 0x28, + 0x14, 0x12, 0x47, 0x46, 0x46, 0x38, 0x91, 0x48, 0x84, 0xee, 0x03, 0xfc, 0x3e, 0x3a, 0x3a, 0x2a, + 0x0a, 0x82, 0xc0, 0x89, 0x46, 0xa3, 0x62, 0x38, 0x1c, 0x16, 0x8d, 0x66, 0xb3, 0xb0, 0x62, 0xe5, + 0xaa, 0x0a, 0xaa, 0x35, 0xfd, 0x71, 0xa2, 0x02, 0x8d, 0x56, 0x6b, 0xf6, 0xf9, 0x7c, 0xf0, 0x07, + 0x02, 0x08, 0x06, 0x83, 0x08, 0x85, 0xc3, 0x20, 0x01, 0xa8, 0x28, 0xa8, 0x20, 0x3d, 0xff, 0x09, + 0x97, 0x2b, 0x1d, 0x54, 0x18, 0xb1, 0x58, 0x0c, 0xa2, 0x28, 0xc6, 0x61, 0xff, 0x67, 0xb1, 0x58, + 0xd0, 0xd5, 0xdd, 0x2d, 0xbe, 0x92, 0x9e, 0xb1, 0x91, 0xea, 0x4d, 0x9d, 0xb4, 0x23, 0x6d, 0x4b, + 0x8b, 0xe9, 0x71, 0x22, 0x8f, 0x67, 0x09, 0xec, 0xf6, 0x34, 0xfa, 0x4c, 0x9d, 0x52, 0x64, 0x32, + 0x99, 0xd0, 0xdd, 0xfd, 0x17, 0xae, 0x5c, 0xbb, 0x16, 0x7b, 0x7e, 0xf6, 0x4b, 0xb9, 0x54, 0x73, + 0xca, 0x7f, 0x12, 0x05, 0x43, 0x2e, 0x6c, 0x58, 0x37, 0x17, 0xfd, 0xf7, 0xca, 0xe1, 0xf7, 0x2b, + 0xb8, 0x84, 0xe1, 0x72, 0xcd, 0xa1, 0xc2, 0xe7, 0x49, 0x7e, 0x97, 0x84, 0x21, 0x59, 0x47, 0xad, + 0x6d, 0x6d, 0xf0, 0x7a, 0x3d, 0x38, 0xf1, 0xdd, 0xd9, 0xd1, 0xa7, 0x66, 0x3c, 0x3b, 0x2f, 0xb5, + 0x48, 0xab, 0x35, 0x79, 0x13, 0x44, 0xfe, 0x80, 0x16, 0x16, 0xf3, 0x13, 0x71, 0x41, 0x2a, 0xdc, + 0xee, 0xf9, 0x24, 0xf2, 0xf1, 0xae, 0x9d, 0x4e, 0x27, 0x6e, 0xde, 0xd4, 0xc1, 0x6a, 0xb5, 0xf2, + 0xe7, 0xb2, 0x23, 0xd5, 0xbe, 0xa9, 0xd3, 0xa7, 0xbf, 0x30, 0xb9, 0xc8, 0xef, 0xff, 0x37, 0xba, + 0x50, 0x08, 0xd6, 0x8e, 0x8d, 0xb0, 0xdb, 0xa6, 0xa5, 0x94, 0x78, 0x3c, 0xd9, 0xd4, 0x91, 0x0f, + 0xec, 0x62, 0xd1, 0x7a, 0xbd, 0x5e, 0xf4, 0xf6, 0xf6, 0xe2, 0x6e, 0x4f, 0x0f, 0x8f, 0xd6, 0x68, + 0x34, 0x62, 0xf7, 0xc1, 0xa3, 0x7a, 0xaa, 0x3d, 0x63, 0x52, 0x51, 0x60, 0x4c, 0x64, 0xff, 0xbd, + 0x09, 0xb6, 0x3f, 0xde, 0x9e, 0x20, 0x71, 0x3a, 0x9f, 0xa3, 0x62, 0x23, 0x3c, 0x36, 0x76, 0xb1, + 0xc2, 0xfc, 0xc5, 0xa8, 0x9b, 0xd6, 0xd6, 0x36, 0xbe, 0x56, 0x66, 0xb3, 0x19, 0x3d, 0xbd, 0x3d, + 0x28, 0xab, 0xa9, 0xfb, 0x4d, 0x9a, 0xc4, 0x71, 0x11, 0xbd, 0x95, 0x8f, 0x89, 0x28, 0x3e, 0xf6, + 0x45, 0x9f, 0xf9, 0x01, 0x06, 0xd5, 0x33, 0x27, 0x88, 0x1c, 0x8e, 0x27, 0xa9, 0xb8, 0x10, 0x1f, + 0x06, 0xa9, 0x2b, 0xb6, 0xc6, 0x86, 0xfe, 0x7e, 0xe8, 0x74, 0x3a, 0xa8, 0x35, 0x5a, 0xb4, 0xb7, + 0xdf, 0x40, 0x3b, 0x3d, 0x57, 0x7d, 0x7b, 0xf2, 0x38, 0x39, 0xa6, 0xa5, 0x14, 0x05, 0x49, 0x44, + 0xfb, 0x03, 0xf6, 0xfe, 0xd7, 0x61, 0x33, 0x4e, 0x81, 0xa3, 0x7d, 0x16, 0x42, 0xd7, 0xe7, 0xc2, + 0xa9, 0x7f, 0x86, 0xcb, 0x46, 0x47, 0xff, 0x96, 0x89, 0x58, 0x57, 0x6c, 0xad, 0x58, 0x0d, 0x16, + 0x5b, 0x0f, 0x45, 0xd8, 0xd9, 0xd9, 0x85, 0xae, 0xae, 0x5b, 0x68, 0xef, 0xd0, 0x79, 0xc8, 0x31, + 0x2b, 0x2e, 0xf2, 0x30, 0x51, 0xd2, 0x88, 0xfb, 0xfd, 0xa7, 0x60, 0x3a, 0x57, 0x08, 0xc3, 0xc1, + 0x2c, 0xb8, 0x1a, 0x32, 0x10, 0xbd, 0x94, 0x03, 0xcf, 0xd5, 0x37, 0x61, 0xd1, 0x7c, 0x20, 0x1b, + 0xf3, 0x44, 0x19, 0x7b, 0x51, 0xb7, 0xdb, 0x4d, 0x2f, 0x64, 0xc7, 0xf0, 0xf0, 0x30, 0x0c, 0x86, + 0xfe, 0x20, 0x39, 0x66, 0xcb, 0x44, 0xc9, 0xeb, 0x14, 0xa6, 0xd1, 0xa5, 0xd3, 0x00, 0x8f, 0x0e, + 0xe7, 0x61, 0xa8, 0x6a, 0x11, 0xbc, 0x8d, 0xf3, 0x10, 0x6d, 0xc9, 0xc3, 0x70, 0x43, 0x2e, 0xdc, + 0xba, 0xef, 0x27, 0xc8, 0xd8, 0x9d, 0x6d, 0x6a, 0x26, 0x64, 0x89, 0x30, 0x68, 0xed, 0x98, 0xe8, + 0xc5, 0xb8, 0xc8, 0xed, 0xf1, 0x70, 0x51, 0x72, 0x7c, 0x6c, 0x9f, 0x44, 0x42, 0x01, 0xdc, 0x2f, + 0x49, 0x87, 0xf9, 0x58, 0x36, 0xfc, 0x27, 0x5e, 0x43, 0xf4, 0xca, 0x1a, 0x0c, 0x1d, 0xc9, 0x44, + 0xd0, 0x70, 0x4b, 0xb6, 0x79, 0xa5, 0x8b, 0x3d, 0xb3, 0x97, 0x60, 0xd0, 0xb8, 0x8f, 0x8b, 0x34, + 0x63, 0xa2, 0x54, 0xf1, 0x8d, 0x8c, 0x75, 0x15, 0x72, 0x9a, 0xd0, 0xbb, 0x73, 0x0e, 0x86, 0xeb, + 0x72, 0x10, 0x52, 0xa6, 0x43, 0xb8, 0xba, 0x1e, 0x7d, 0x95, 0xf3, 0x11, 0xf1, 0x58, 0x65, 0xb2, + 0x44, 0x21, 0xbb, 0x5c, 0x2e, 0x97, 0x5c, 0xe4, 0xa2, 0x5c, 0x53, 0xc6, 0xc7, 0x64, 0x24, 0x62, + 0x71, 0xf8, 0xf4, 0x9d, 0x78, 0xb0, 0xe7, 0x65, 0x38, 0x1a, 0x16, 0x23, 0xd2, 0xbc, 0x10, 0x91, + 0xcb, 0xeb, 0x60, 0x38, 0x90, 0x89, 0x68, 0x24, 0x3c, 0xe1, 0x68, 0x92, 0x90, 0x77, 0xa4, 0xd1, + 0x70, 0x11, 0x8f, 0x2f, 0x71, 0xfa, 0x92, 0xba, 0x62, 0x32, 0x5b, 0xdb, 0x69, 0x3c, 0x2a, 0x4b, + 0x87, 0xb3, 0x81, 0x04, 0xaa, 0xc5, 0x08, 0x5c, 0x58, 0x83, 0xdb, 0xb5, 0xeb, 0xf8, 0xdf, 0xa4, + 0xb8, 0x1e, 0x2b, 0x72, 0xba, 0x5c, 0x7c, 0x5a, 0x26, 0xed, 0x2a, 0x41, 0x36, 0xa8, 0x2c, 0xa0, + 0x49, 0x7c, 0x03, 0xee, 0x86, 0x05, 0x88, 0x6a, 0x72, 0xf1, 0x6b, 0x63, 0x21, 0x9a, 0xeb, 0x0f, + 0xc6, 0x45, 0x89, 0xc8, 0x44, 0x6a, 0x26, 0xa2, 0x33, 0x2a, 0xb9, 0x2b, 0xb6, 0x56, 0x67, 0x8a, + 0xf7, 0xa2, 0x22, 0x2f, 0x7f, 0x02, 0x8a, 0xcc, 0x05, 0x28, 0xcb, 0xca, 0xc0, 0xbe, 0xb7, 0xe6, + 0x63, 0xd7, 0xa2, 0xc5, 0x28, 0xc9, 0xc9, 0x45, 0x49, 0xd6, 0x22, 0x54, 0x2e, 0x5f, 0x29, 0xe3, + 0xac, 0xa2, 0x5c, 0x18, 0x17, 0xa9, 0xd5, 0x26, 0x07, 0x89, 0x52, 0x75, 0x75, 0x6c, 0xd3, 0x47, + 0xa8, 0xfb, 0xa4, 0x00, 0xed, 0xcd, 0xe7, 0x70, 0xe3, 0xa7, 0x0b, 0xe8, 0x20, 0x6e, 0x9e, 0xbb, + 0x88, 0x8e, 0xe6, 0x1f, 0x51, 0xb5, 0x69, 0x35, 0xca, 0x37, 0x6f, 0x40, 0xcd, 0xae, 0x3d, 0x68, + 0x69, 0x68, 0x42, 0x63, 0x7e, 0x3e, 0x5a, 0x4b, 0x8b, 0xa1, 0x3b, 0xaf, 0x8a, 0xd3, 0xf5, 0xcb, + 0xb5, 0x70, 0x5c, 0xa4, 0x22, 0x91, 0xdd, 0xe1, 0x40, 0x62, 0x57, 0xd2, 0x04, 0x32, 0xd1, 0xa5, + 0xa3, 0xc7, 0xf8, 0xb8, 0xb3, 0xf5, 0x62, 0x7b, 0x8b, 0x0d, 0x07, 0x8b, 0xd1, 0x36, 0x70, 0x1f, + 0xf5, 0x87, 0x15, 0x50, 0x94, 0x7e, 0x89, 0xc6, 0x8a, 0x52, 0xdc, 0xd9, 0xb7, 0x0f, 0xf6, 0x77, + 0x97, 0xf1, 0x23, 0x49, 0x82, 0x36, 0xee, 0x78, 0x74, 0x2a, 0x95, 0xda, 0x64, 0xa3, 0x9d, 0x2c, + 0x75, 0xc5, 0x27, 0x70, 0x2c, 0xc2, 0x5a, 0x12, 0xa9, 0x48, 0xc4, 0xd6, 0xab, 0x7e, 0xc7, 0xc7, + 0x28, 0x5a, 0x92, 0x21, 0xa3, 0x70, 0xe1, 0x1c, 0x68, 0x56, 0x2d, 0x43, 0x67, 0x49, 0x31, 0x1c, + 0xd5, 0xd5, 0xf8, 0x3a, 0xf3, 0x55, 0x54, 0x2e, 0xcd, 0xe2, 0xdc, 0xbb, 0x71, 0x5d, 0x2e, 0xba, + 0xa8, 0x52, 0x99, 0x86, 0x6d, 0x36, 0xb0, 0xae, 0x92, 0x23, 0xac, 0xdd, 0xb8, 0x15, 0xaa, 0xea, + 0x5a, 0xbe, 0x5e, 0xa7, 0x4b, 0x77, 0x40, 0xb1, 0x22, 0x5b, 0x46, 0x59, 0xfe, 0x12, 0xe8, 0x8f, + 0xee, 0x86, 0x75, 0x69, 0x36, 0xdc, 0x6b, 0xdf, 0xc7, 0xf9, 0xe2, 0xed, 0x38, 0xb5, 0x7d, 0x2b, + 0xc7, 0x70, 0xbb, 0x4b, 0x2e, 0x6a, 0x6a, 0x3a, 0xd9, 0x67, 0xa5, 0x73, 0x89, 0x75, 0x95, 0x1c, + 0x21, 0x13, 0x5d, 0x24, 0x91, 0x34, 0x1c, 0xac, 0xb3, 0x60, 0xc2, 0x34, 0x4a, 0x13, 0x29, 0xc5, + 0x29, 0xc1, 0xa6, 0x93, 0xf1, 0xf0, 0xe1, 0x43, 0xa7, 0x24, 0xda, 0x56, 0x54, 0x54, 0x74, 0xc7, + 0x42, 0xbf, 0x27, 0xac, 0xab, 0xe4, 0x08, 0xb9, 0xa8, 0xaa, 0x86, 0x0f, 0x47, 0xf3, 0x99, 0x42, + 0x7c, 0x73, 0xf8, 0x1d, 0xce, 0xf1, 0x23, 0x2b, 0x64, 0xfc, 0x7c, 0xe9, 0x10, 0x17, 0x6a, 0xa8, + 0xeb, 0xa6, 0x35, 0x4b, 0xe3, 0xd4, 0x6d, 0x5e, 0xef, 0x96, 0x44, 0x9f, 0x6f, 0xd9, 0xb2, 0xe5, + 0xf6, 0x23, 0xbd, 0x5e, 0xd0, 0xf7, 0x19, 0x04, 0xfa, 0x4d, 0x11, 0x06, 0x06, 0x07, 0x85, 0xc1, + 0xa1, 0x21, 0x61, 0xc8, 0x68, 0x14, 0x94, 0x25, 0x8a, 0xd8, 0xe5, 0xc6, 0x93, 0x31, 0xb3, 0xc5, + 0x22, 0xd4, 0xd7, 0xae, 0x8f, 0x55, 0x14, 0x67, 0x88, 0x71, 0x4a, 0x32, 0xc4, 0x4a, 0xce, 0x02, + 0xf1, 0x07, 0x65, 0x61, 0xcc, 0xe1, 0x70, 0x08, 0xaa, 0xbd, 0x5f, 0xc4, 0x9a, 0xd6, 0x2e, 0x17, + 0x25, 0x6a, 0x3e, 0x7c, 0xcf, 0x2e, 0x9d, 0xde, 0xab, 0x88, 0xfd, 0xc4, 0x21, 0xe2, 0x40, 0x12, + 0xfb, 0x27, 0xa1, 0x32, 0x05, 0x15, 0x29, 0xf8, 0x8a, 0xd8, 0x49, 0xcc, 0xfc, 0x07, 0x82, 0xed, + 0xc0, 0x33, 0xfd, 0xb3, 0x30, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_load_default_xpm[1] = {{ png, sizeof( png ), "pagelayout_load_default_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_26/pagelayout_new.cpp b/bitmaps_png/cpp_26/pagelayout_new.cpp new file mode 100644 index 0000000000..cae6e4611a --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_new.cpp @@ -0,0 +1,103 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x5c, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x95, 0x96, 0x69, 0x6c, 0x54, + 0x55, 0x14, 0xc7, 0x6f, 0xd0, 0x04, 0x0d, 0x8a, 0x46, 0x6d, 0x48, 0xd4, 0xa0, 0xc6, 0x18, 0x30, + 0x24, 0x7c, 0xe0, 0x83, 0x58, 0x3f, 0x99, 0x98, 0x88, 0x26, 0x86, 0xb4, 0x61, 0x09, 0x4a, 0x94, + 0x2f, 0x04, 0x63, 0x11, 0x43, 0x51, 0x11, 0x1b, 0xc3, 0xd2, 0x36, 0xb6, 0x6c, 0x11, 0x68, 0xcb, + 0x1e, 0x4b, 0xb5, 0x28, 0x29, 0xd2, 0xe5, 0x75, 0x96, 0xce, 0x14, 0x5a, 0xec, 0x46, 0x93, 0x52, + 0x4b, 0x29, 0x5d, 0xa0, 0x33, 0x5d, 0xa6, 0xb3, 0xb4, 0x9d, 0xe9, 0x74, 0x66, 0x3a, 0xfb, 0x9b, + 0x79, 0xc7, 0x73, 0xee, 0xeb, 0x7b, 0x74, 0xa6, 0x33, 0x26, 0xbe, 0xe4, 0x9f, 0xf7, 0xfa, 0xfa, + 0xee, 0xfd, 0xdd, 0xf3, 0x3f, 0xe7, 0x9e, 0x3b, 0x8c, 0x31, 0xf6, 0x11, 0x2a, 0x17, 0xf5, 0xed, + 0xfc, 0x3d, 0xa5, 0x32, 0x32, 0xd8, 0x8f, 0x29, 0xde, 0xef, 0x9b, 0x1f, 0xf7, 0x29, 0x2a, 0x03, + 0x00, 0x58, 0x3a, 0xd1, 0xb5, 0xb7, 0xb2, 0xb2, 0xd2, 0xec, 0xf1, 0x7a, 0x25, 0xdf, 0xdc, 0x5c, + 0xdc, 0xef, 0xf7, 0x4b, 0xfe, 0x40, 0x40, 0x0a, 0x06, 0x83, 0x52, 0x38, 0x1c, 0xe6, 0x0a, 0x85, + 0xfc, 0xd2, 0xed, 0xdb, 0xeb, 0x21, 0x18, 0xf4, 0x4a, 0xd1, 0x68, 0x54, 0x12, 0x45, 0x91, 0x2b, + 0x16, 0x8b, 0xe1, 0xff, 0x42, 0x92, 0xd5, 0x6e, 0x17, 0x37, 0x6f, 0xdd, 0x56, 0x84, 0x73, 0x2d, + 0xff, 0x2f, 0xd0, 0x3e, 0xad, 0x4e, 0x67, 0xf7, 0xf9, 0x7c, 0x30, 0xe7, 0xf7, 0x43, 0x20, 0x10, + 0x80, 0x60, 0x28, 0x04, 0x08, 0x00, 0x9c, 0x14, 0x70, 0x42, 0x30, 0x9b, 0xcf, 0x41, 0x4d, 0x0d, + 0x03, 0x93, 0xa9, 0x04, 0xe2, 0xf1, 0x38, 0x48, 0x92, 0xa4, 0x8a, 0xbe, 0x73, 0x38, 0x1c, 0xd0, + 0xdd, 0xd3, 0x23, 0xad, 0x5b, 0x9f, 0xb9, 0x0b, 0xe7, 0x5b, 0x9a, 0x36, 0x22, 0x9d, 0x5e, 0x6f, + 0x4b, 0x07, 0x8a, 0x44, 0x02, 0xd0, 0xd0, 0xb0, 0x12, 0x9a, 0x9a, 0x18, 0x18, 0x0c, 0xaf, 0x41, + 0x2c, 0x16, 0x59, 0x04, 0xb2, 0xd9, 0x6c, 0xd0, 0xd3, 0x73, 0x0f, 0x8c, 0x4d, 0x4d, 0xf1, 0x37, + 0x56, 0xaf, 0xf9, 0x04, 0xe7, 0x7c, 0xe2, 0x7f, 0x83, 0x4c, 0xa6, 0x52, 0xd0, 0xeb, 0x19, 0x4c, + 0x4d, 0x31, 0xd0, 0xe9, 0x18, 0x8c, 0x8d, 0x95, 0xa7, 0x8c, 0xa8, 0xa5, 0xb5, 0x15, 0xbc, 0x5e, + 0x0f, 0x5c, 0xf9, 0xe3, 0x5a, 0xf4, 0xc5, 0x15, 0xaf, 0xbe, 0x93, 0x1a, 0xa4, 0xd3, 0xd9, 0xbc, + 0x29, 0x40, 0xe1, 0xf0, 0x1c, 0x42, 0x5e, 0x81, 0x07, 0x0f, 0x18, 0x38, 0x9d, 0x0c, 0xee, 0xdf, + 0x67, 0xd0, 0xd8, 0xb8, 0x0a, 0xed, 0x8b, 0x71, 0x08, 0x5d, 0xb4, 0x98, 0x99, 0x99, 0x19, 0xb8, + 0x73, 0xa7, 0x13, 0x26, 0x27, 0x27, 0xf9, 0x73, 0xe1, 0xa9, 0x33, 0xbe, 0xa5, 0xcb, 0x97, 0xbf, + 0x95, 0x1e, 0x34, 0x37, 0xc7, 0x41, 0x3e, 0x9f, 0x1d, 0x23, 0x68, 0x87, 0x7b, 0xf7, 0x72, 0x79, + 0x34, 0xd3, 0xd3, 0x0c, 0x2d, 0x94, 0xa3, 0xd2, 0x6a, 0x19, 0x3c, 0x7a, 0x74, 0x02, 0xbf, 0x1b, + 0xc3, 0xf1, 0x12, 0xcf, 0xa1, 0xd7, 0xeb, 0x85, 0x81, 0x81, 0x01, 0x78, 0xd0, 0xdf, 0xcf, 0x73, + 0x68, 0xb5, 0x5a, 0xe1, 0xa7, 0xe3, 0x25, 0x66, 0x9c, 0x7b, 0x85, 0x0a, 0x5a, 0xb2, 0x84, 0xe5, + 0x0a, 0xc2, 0x76, 0x6f, 0x7b, 0xc7, 0x26, 0xb8, 0x75, 0x6b, 0x1d, 0xd4, 0xd7, 0x3f, 0x0f, 0x82, + 0xc0, 0xc0, 0x68, 0x64, 0xd0, 0xd2, 0x42, 0x93, 0x32, 0x04, 0xcb, 0x0b, 0xf3, 0x7a, 0x19, 0x0c, + 0x0e, 0x32, 0x68, 0x6e, 0x96, 0x81, 0x82, 0xf0, 0x34, 0x8e, 0x59, 0x0b, 0x1d, 0x1d, 0xd9, 0xd0, + 0xd5, 0xb5, 0x17, 0x6e, 0xde, 0x3c, 0xcc, 0x73, 0x65, 0xb7, 0xdb, 0xa1, 0x7f, 0xa0, 0x1f, 0x0a, + 0x4b, 0x2f, 0x35, 0x2b, 0x95, 0xc8, 0x23, 0xd2, 0x68, 0x8a, 0x9d, 0x82, 0xb0, 0x0c, 0x34, 0x1a, + 0xca, 0x81, 0x6c, 0x93, 0xdb, 0x2d, 0x03, 0xfc, 0x7e, 0x86, 0xab, 0x94, 0x41, 0xb1, 0x18, 0xc3, + 0xa8, 0x19, 0x78, 0x3c, 0x0c, 0x2d, 0x62, 0x68, 0x95, 0xbc, 0x10, 0x5a, 0x98, 0x20, 0x3c, 0x05, + 0xbd, 0xf7, 0x2b, 0xa0, 0xb3, 0xb3, 0x13, 0x34, 0x5a, 0x1d, 0xb4, 0xb5, 0xb5, 0x43, 0x1b, 0x3e, + 0x9f, 0xbe, 0x58, 0x71, 0x01, 0x19, 0xcb, 0x54, 0xeb, 0xc6, 0xc7, 0x1b, 0x80, 0x60, 0x06, 0x03, + 0xc3, 0x15, 0x31, 0x98, 0x9d, 0x65, 0x98, 0x87, 0xd4, 0xfb, 0x8f, 0xc0, 0xb4, 0x10, 0xfa, 0x8e, + 0x22, 0xa7, 0x71, 0x0e, 0x87, 0x91, 0x5b, 0x48, 0xb6, 0xf5, 0xa3, 0x85, 0x77, 0xef, 0x76, 0x43, + 0x77, 0xf7, 0x3f, 0xd0, 0xd6, 0xd1, 0xe9, 0x41, 0xc6, 0xeb, 0x2a, 0x08, 0x37, 0x2c, 0x58, 0x2c, + 0x86, 0x45, 0x30, 0x25, 0x9a, 0x64, 0x88, 0xcd, 0xc6, 0xb0, 0xec, 0x19, 0xba, 0xf0, 0x1c, 0x46, + 0xd7, 0xce, 0x73, 0x43, 0x85, 0x81, 0x1b, 0x1e, 0xc7, 0xcd, 0xa2, 0x2b, 0x4e, 0xcc, 0xe9, 0x14, + 0x8c, 0x8e, 0x8e, 0x05, 0x90, 0xb1, 0x3a, 0x01, 0x44, 0x05, 0x31, 0x31, 0x61, 0x04, 0xa1, 0xfe, + 0x19, 0x0e, 0x23, 0x0b, 0xa3, 0xd1, 0x44, 0x50, 0x38, 0x2c, 0x5b, 0x46, 0x45, 0xa2, 0xd5, 0xbe, + 0x80, 0xd0, 0x2e, 0xb5, 0x02, 0xe9, 0x8e, 0xdd, 0x82, 0x03, 0xb1, 0x63, 0x70, 0x61, 0x25, 0x12, + 0x68, 0x95, 0x0a, 0x9a, 0xf5, 0x78, 0x38, 0x08, 0xdb, 0x10, 0x96, 0x73, 0x3e, 0x9f, 0x88, 0x40, + 0x64, 0x1f, 0x89, 0x00, 0x74, 0x17, 0x45, 0xb9, 0xfa, 0x6a, 0x6b, 0x19, 0xda, 0xf4, 0x57, 0xc2, + 0x9e, 0x52, 0x2e, 0x7a, 0xa6, 0x08, 0x49, 0x58, 0xee, 0x8f, 0x41, 0xda, 0x79, 0x10, 0x45, 0x45, + 0x1b, 0xb7, 0xab, 0x6b, 0x27, 0xaf, 0x38, 0x4a, 0x78, 0x20, 0xc0, 0xc0, 0xe5, 0x92, 0xa1, 0xf4, + 0x77, 0x28, 0x24, 0x3f, 0x93, 0x6d, 0x23, 0x23, 0xe7, 0x16, 0xb5, 0xa4, 0x85, 0x40, 0xba, 0xdc, + 0x6e, 0x77, 0x22, 0xc8, 0x8d, 0xbe, 0x2a, 0xf6, 0x35, 0x37, 0xbf, 0x8b, 0x89, 0x94, 0x27, 0xa4, + 0x3d, 0xd4, 0xd7, 0x27, 0x97, 0x34, 0x55, 0x18, 0xbd, 0x23, 0xd1, 0x42, 0x7a, 0x7b, 0xf7, 0xa8, + 0x2b, 0x4f, 0x05, 0x24, 0x25, 0x46, 0xa4, 0xd5, 0x72, 0x10, 0xb7, 0x0f, 0x61, 0x82, 0xf0, 0x2c, + 0x0c, 0x0d, 0x31, 0xde, 0x11, 0xc8, 0x42, 0x6a, 0xa8, 0x54, 0x24, 0x74, 0xa7, 0x9e, 0x67, 0x36, + 0x33, 0xac, 0x2a, 0x06, 0xad, 0xad, 0x1f, 0xf0, 0x9c, 0x2c, 0x84, 0x25, 0x03, 0x17, 0x81, 0x66, + 0xdc, 0x6e, 0x5e, 0x2d, 0x93, 0x53, 0x7d, 0x7c, 0x42, 0xda, 0x53, 0x74, 0x6f, 0x6c, 0x5c, 0x03, + 0xe3, 0xe3, 0x55, 0x74, 0x44, 0xc0, 0xc3, 0x87, 0x27, 0xb1, 0x00, 0x5e, 0xe2, 0xef, 0xa9, 0xef, + 0xe9, 0xf5, 0x2f, 0x73, 0x90, 0xa2, 0x64, 0xe0, 0xa2, 0x1c, 0x69, 0x08, 0x84, 0x3d, 0x8a, 0xa2, + 0x32, 0x99, 0xff, 0xe4, 0x13, 0x19, 0x0c, 0x6f, 0xc2, 0xb0, 0xa9, 0x1c, 0xae, 0x1e, 0x3c, 0x0c, + 0x45, 0x59, 0x5b, 0x54, 0x1d, 0xdb, 0x9a, 0x05, 0x97, 0x8f, 0xbc, 0x0d, 0x37, 0xaa, 0x9e, 0xe4, + 0xdf, 0x1d, 0xdd, 0x92, 0x05, 0xc5, 0xd9, 0x5b, 0xd3, 0xea, 0x5a, 0xc1, 0xcf, 0xe2, 0x63, 0x90, + 0x46, 0x63, 0x73, 0x21, 0x88, 0xa2, 0x1a, 0x1a, 0x3a, 0x8f, 0x6d, 0xa6, 0x04, 0xf3, 0xe5, 0xe6, + 0xbd, 0xef, 0xec, 0x97, 0x5f, 0xc3, 0xa5, 0x6f, 0xf6, 0x41, 0xdb, 0xf5, 0x6a, 0x68, 0xbf, 0x51, + 0x0b, 0x1d, 0xa8, 0x3b, 0xd5, 0x75, 0xd0, 0x56, 0x7d, 0x05, 0x8c, 0x35, 0x1f, 0x43, 0x4b, 0xcd, + 0x49, 0xe8, 0xac, 0x11, 0xd2, 0xaa, 0xfb, 0x66, 0x53, 0x48, 0x05, 0x09, 0x08, 0x72, 0xba, 0x5c, + 0xa0, 0x44, 0xb5, 0xb0, 0x02, 0x09, 0x54, 0x5f, 0x72, 0x16, 0x02, 0xc1, 0x20, 0xef, 0xea, 0x21, + 0xea, 0xea, 0x91, 0x08, 0x36, 0xd9, 0x08, 0xdf, 0x2f, 0xca, 0xe1, 0x98, 0x4e, 0xb8, 0x71, 0x1f, + 0x5b, 0x27, 0x08, 0x1a, 0xdb, 0x34, 0xee, 0x64, 0x25, 0x2a, 0x5e, 0x81, 0xf3, 0x85, 0x51, 0x86, + 0x20, 0x01, 0x41, 0x78, 0xbc, 0xc3, 0xe5, 0x03, 0x7b, 0x20, 0x6f, 0x43, 0xe6, 0x22, 0x4d, 0x5b, + 0x2d, 0x2a, 0xf0, 0x62, 0xce, 0x17, 0x50, 0xbc, 0xf1, 0x7d, 0xae, 0xc1, 0xf6, 0xbf, 0x13, 0x41, + 0x75, 0x82, 0x60, 0x9b, 0x9a, 0x9e, 0x06, 0x8a, 0x4a, 0x81, 0xcd, 0xce, 0x97, 0x7b, 0xd9, 0xae, + 0xdd, 0x20, 0x9c, 0x29, 0xe3, 0x67, 0xd5, 0xef, 0xf9, 0x07, 0xa0, 0x60, 0xf3, 0x87, 0x09, 0x2a, + 0xdc, 0xb2, 0x01, 0x9c, 0xb6, 0x09, 0x35, 0xba, 0xda, 0xe3, 0xf9, 0xf0, 0xdb, 0xf7, 0xbb, 0xb9, + 0x46, 0x7b, 0xbb, 0x13, 0x41, 0xe5, 0xe5, 0x15, 0x23, 0x93, 0xd8, 0x97, 0x28, 0xaa, 0x64, 0x0b, + 0x09, 0x54, 0x87, 0x20, 0xea, 0x18, 0x04, 0xa3, 0xc8, 0xf8, 0xe1, 0x88, 0x56, 0x2a, 0x6d, 0x26, + 0xbc, 0xc0, 0xce, 0x48, 0x92, 0xad, 0xc3, 0xc3, 0xc3, 0x33, 0x0a, 0x28, 0x37, 0x2f, 0x2f, 0xaf, + 0xcf, 0x81, 0xa7, 0x23, 0x45, 0x95, 0x6c, 0x21, 0x07, 0x9d, 0x2e, 0xe5, 0x1b, 0xf9, 0xfa, 0xd5, + 0xfd, 0x70, 0xfe, 0x97, 0x4d, 0x5c, 0x17, 0x4e, 0x6d, 0x4e, 0x90, 0xa1, 0xfe, 0x04, 0x07, 0x6a, + 0x31, 0xea, 0xf2, 0xcf, 0x36, 0xaa, 0xba, 0xf4, 0xd5, 0x8e, 0x59, 0x05, 0xf4, 0x5d, 0x4e, 0x4e, + 0x4e, 0xaf, 0xc9, 0x6c, 0x16, 0xcd, 0x23, 0xa3, 0xe2, 0xe8, 0xd8, 0x98, 0x38, 0x6e, 0xb1, 0x88, + 0x96, 0x89, 0x09, 0x71, 0xc2, 0x6a, 0x15, 0x2b, 0x0f, 0x15, 0xc4, 0x1b, 0x7e, 0xad, 0x88, 0xdb, + 0x1d, 0x0e, 0xf1, 0x72, 0xd9, 0x8e, 0x78, 0xd1, 0xc1, 0x4c, 0x49, 0xd5, 0xa1, 0x4c, 0xa9, 0x98, + 0xeb, 0x3d, 0xa9, 0xaa, 0x72, 0x7f, 0xdc, 0xe5, 0x72, 0x89, 0xc2, 0x91, 0x1f, 0xe2, 0xe5, 0x9f, + 0x67, 0x4b, 0x8a, 0x4a, 0x77, 0x6e, 0x77, 0x2a, 0xdd, 0x7b, 0x1b, 0xea, 0x28, 0xea, 0x04, 0xea, + 0x58, 0x92, 0x8e, 0xa6, 0x51, 0x71, 0x0a, 0x15, 0xa5, 0xd0, 0x49, 0x14, 0xfd, 0xf0, 0x5c, 0xf9, + 0x2f, 0xb1, 0x1e, 0x76, 0x45, 0x80, 0x57, 0x13, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_new_xpm[1] = {{ png, sizeof( png ), "pagelayout_new_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_26/pagelayout_normal_view_mode.cpp b/bitmaps_png/cpp_26/pagelayout_normal_view_mode.cpp new file mode 100644 index 0000000000..9d619877ad --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_normal_view_mode.cpp @@ -0,0 +1,98 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x17, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x95, 0x6d, 0x4c, 0x53, + 0x57, 0x18, 0xc7, 0xc1, 0x99, 0x98, 0x48, 0xe2, 0x07, 0x01, 0x35, 0xb0, 0xe0, 0x46, 0xf6, 0x62, + 0x34, 0x86, 0x6c, 0x99, 0x53, 0x98, 0x1f, 0x4c, 0x36, 0xc7, 0x88, 0x44, 0x66, 0xa8, 0x46, 0x24, + 0x9b, 0x7c, 0x58, 0x5c, 0x28, 0x1b, 0x99, 0x6e, 0x38, 0x25, 0x46, 0xa3, 0x25, 0xf2, 0xe6, 0xa2, + 0x22, 0xb0, 0x09, 0x0c, 0x86, 0x56, 0x34, 0x12, 0x1c, 0x56, 0x8a, 0x83, 0x38, 0xb6, 0x55, 0x2a, + 0x5d, 0x02, 0x43, 0x44, 0x98, 0x0b, 0x50, 0x2a, 0xf4, 0x05, 0xda, 0x52, 0x5a, 0x68, 0x29, 0x70, + 0xe9, 0xfd, 0xef, 0x9c, 0x03, 0xf7, 0x42, 0x4b, 0x61, 0x2f, 0x27, 0xf9, 0xa5, 0xcd, 0xbd, 0xe7, + 0x9c, 0x5f, 0x9f, 0xe7, 0x3c, 0xe7, 0x69, 0x40, 0x40, 0x40, 0xc0, 0x07, 0x84, 0xa3, 0x84, 0x2f, + 0xe7, 0x3e, 0xff, 0x0b, 0xc7, 0xe6, 0xd6, 0x25, 0x11, 0x42, 0x01, 0x04, 0x2c, 0x05, 0x1d, 0x5f, + 0xc8, 0xe5, 0xf2, 0x3e, 0xbb, 0xc3, 0xc1, 0x8f, 0x8d, 0x8f, 0x7b, 0x9c, 0x4e, 0x27, 0xef, 0x74, + 0xb9, 0xf8, 0x89, 0x89, 0x09, 0x7e, 0x72, 0x72, 0x92, 0x31, 0x35, 0x35, 0x25, 0x32, 0x3d, 0x3d, + 0xcd, 0x73, 0x1c, 0xc7, 0x98, 0x99, 0x99, 0xe1, 0xdd, 0x6e, 0x37, 0xaf, 0x37, 0x1a, 0x39, 0xc9, + 0x81, 0x83, 0xd9, 0x64, 0xaf, 0x35, 0xcb, 0x89, 0x8e, 0x29, 0xeb, 0xeb, 0x8d, 0x63, 0x63, 0x63, + 0x18, 0x77, 0x3a, 0xe1, 0x72, 0xb9, 0x30, 0xe1, 0x76, 0x83, 0x08, 0x40, 0x36, 0x05, 0xd9, 0x90, + 0x41, 0x36, 0x65, 0x78, 0x3c, 0x1e, 0xf0, 0x3c, 0x2f, 0x42, 0xe7, 0x99, 0x4c, 0x26, 0xb4, 0xb5, + 0xb7, 0xf3, 0x6f, 0x6e, 0x8f, 0x3e, 0x42, 0xf6, 0x5b, 0xb5, 0x64, 0x44, 0xf5, 0xf7, 0xef, 0x1b, + 0xfe, 0x8d, 0x88, 0x4a, 0xfc, 0x89, 0x0c, 0x06, 0x03, 0xda, 0xdb, 0x1f, 0xa3, 0xb1, 0xa9, 0xc9, + 0xf3, 0xf2, 0xa6, 0x2d, 0xf1, 0x64, 0xcf, 0x17, 0xfe, 0x97, 0xc8, 0x62, 0xb1, 0x80, 0xa4, 0x17, + 0xa9, 0xa9, 0xa9, 0xc8, 0xc8, 0xc8, 0x40, 0x5e, 0x5e, 0x1e, 0x6a, 0x6a, 0x6a, 0x98, 0x5c, 0x88, + 0x48, 0xf5, 0xf0, 0x21, 0x1c, 0x0e, 0x3b, 0x7e, 0xa8, 0xba, 0x35, 0x1d, 0xbc, 0xfe, 0xc5, 0xb7, + 0xfd, 0x8b, 0xea, 0xeb, 0x0d, 0x0e, 0x3f, 0xa2, 0xde, 0xde, 0x5e, 0x24, 0x24, 0x24, 0x60, 0xe5, + 0xca, 0x95, 0x74, 0xe6, 0x22, 0x36, 0x6f, 0xde, 0x8c, 0xea, 0xea, 0x6a, 0x8c, 0x8c, 0x8c, 0xa0, + 0xa5, 0x45, 0x83, 0xa1, 0xa1, 0x21, 0xf6, 0x3d, 0xeb, 0x52, 0xc1, 0xd8, 0xaa, 0x35, 0x6b, 0x5e, + 0x5d, 0x5a, 0x34, 0x3e, 0x3e, 0x2b, 0x9a, 0x98, 0x40, 0x6e, 0x6e, 0x2e, 0x56, 0xaf, 0x5e, 0xcd, + 0x36, 0x8c, 0x8c, 0x8c, 0x44, 0xee, 0xf9, 0x1a, 0xdc, 0xbe, 0x6e, 0xc1, 0xad, 0x6b, 0x66, 0x54, + 0x7e, 0xdf, 0x82, 0xe8, 0xe8, 0x18, 0x51, 0xb8, 0x6d, 0xdb, 0x36, 0xa8, 0xd5, 0x6a, 0x3c, 0xed, + 0xea, 0x62, 0xa9, 0xd5, 0xeb, 0xf5, 0x38, 0x95, 0x7f, 0xa5, 0x8f, 0xbc, 0x5b, 0xbf, 0xa4, 0xc8, + 0x36, 0x3a, 0x8a, 0xa4, 0xa4, 0x24, 0xb6, 0x41, 0x60, 0x60, 0x20, 0xd2, 0xd3, 0xd3, 0xa1, 0xfa, + 0x79, 0x06, 0xd7, 0x4b, 0xe0, 0x85, 0xea, 0x01, 0xa0, 0x54, 0x2a, 0x11, 0x1e, 0x1e, 0xce, 0xe6, + 0x46, 0x45, 0x45, 0xa1, 0xa1, 0xa1, 0x91, 0x9d, 0x95, 0xd1, 0x68, 0x44, 0x57, 0x77, 0x17, 0xb2, + 0x0a, 0x4b, 0x7f, 0x11, 0x2a, 0x71, 0x5e, 0xe4, 0x70, 0x30, 0xc9, 0xee, 0xdd, 0xbb, 0xd9, 0xc2, + 0x0d, 0x1b, 0x36, 0xa0, 0xb1, 0xb1, 0x11, 0xfa, 0xe7, 0xb3, 0x1b, 0xe7, 0xcb, 0xfe, 0xc2, 0x96, + 0x4d, 0xef, 0xe2, 0xb5, 0x57, 0x76, 0xe2, 0xfc, 0xe9, 0x0e, 0xf6, 0xec, 0xb9, 0x16, 0x78, 0xf6, + 0xec, 0x19, 0xd6, 0xad, 0x5b, 0xc7, 0xd6, 0xbc, 0xb3, 0x73, 0x27, 0x1e, 0x92, 0xb3, 0xaa, 0x53, + 0xd6, 0xa3, 0xb9, 0x59, 0x8d, 0x66, 0x8d, 0x06, 0x97, 0x4b, 0x2a, 0xaf, 0x92, 0x77, 0x41, 0x5e, + 0xa2, 0x94, 0x94, 0x14, 0xb6, 0x20, 0x38, 0x38, 0x18, 0xdd, 0xdd, 0xdd, 0xa0, 0xa3, 0x55, 0x33, + 0x2b, 0x8a, 0xd9, 0x9e, 0x2c, 0xa6, 0xea, 0xad, 0x37, 0xf6, 0xb1, 0x67, 0x1a, 0x15, 0x9b, 0x82, + 0x27, 0x4f, 0x9e, 0x60, 0xed, 0xda, 0xb5, 0xec, 0x5d, 0x7c, 0x7c, 0x3c, 0x3a, 0x3b, 0x3b, 0xd1, + 0xda, 0xda, 0x86, 0xb6, 0xb6, 0x3f, 0xd0, 0xfc, 0x48, 0x63, 0x27, 0xcf, 0x5f, 0x12, 0x45, 0xe4, + 0xc2, 0x8a, 0x29, 0xa3, 0x22, 0x3a, 0x99, 0x8e, 0x8e, 0xd6, 0x59, 0xd1, 0x9e, 0xd8, 0xe3, 0xa2, + 0xe8, 0xbd, 0x5d, 0x52, 0xf6, 0x8c, 0xfe, 0x08, 0x3a, 0x68, 0xd1, 0x44, 0x44, 0x44, 0xb0, 0x77, + 0x3b, 0x76, 0xec, 0x60, 0xa9, 0xa3, 0x95, 0x3a, 0x3c, 0x3c, 0x8c, 0xfe, 0x7e, 0x9d, 0x8b, 0x3c, + 0xdf, 0xe4, 0x25, 0x1a, 0xb1, 0xd9, 0x10, 0x17, 0x17, 0xc7, 0x16, 0x84, 0x84, 0x84, 0xb0, 0x8a, + 0xb2, 0x59, 0x01, 0x79, 0x19, 0x50, 0x52, 0xe0, 0x80, 0x24, 0x41, 0x86, 0x84, 0x3d, 0xa7, 0xf0, + 0xed, 0x45, 0x2b, 0xe4, 0xa5, 0x80, 0xd5, 0x0c, 0x16, 0x79, 0x58, 0x58, 0x18, 0x5b, 0x13, 0x13, + 0x13, 0x83, 0x51, 0x92, 0x7e, 0x7a, 0x2d, 0x48, 0xc7, 0x60, 0x90, 0x4a, 0xa4, 0xa2, 0xd7, 0x45, + 0xd1, 0xa8, 0xdd, 0x0e, 0x5a, 0x10, 0xf4, 0x33, 0x2d, 0x2d, 0x4d, 0xfc, 0xf5, 0x89, 0x89, 0x89, + 0x68, 0xfd, 0xdd, 0x81, 0x1b, 0x65, 0xf3, 0x85, 0x40, 0xc5, 0x4f, 0x1f, 0xcf, 0xa0, 0xbc, 0xbc, + 0x1c, 0xa1, 0xa1, 0xa1, 0x62, 0x24, 0x34, 0xfd, 0x74, 0xd0, 0x8b, 0x2c, 0x5c, 0x6e, 0x52, 0xee, + 0xf3, 0x22, 0xe5, 0x9c, 0x88, 0x46, 0x25, 0x5c, 0xdc, 0x9b, 0x37, 0x6f, 0x62, 0xe3, 0xc6, 0x8d, + 0x6c, 0x93, 0xa0, 0xa0, 0x20, 0x24, 0x1f, 0x92, 0xa2, 0xb8, 0xe0, 0x57, 0x14, 0x5e, 0x6c, 0xc2, + 0xc9, 0x13, 0x79, 0x62, 0x14, 0xb4, 0x32, 0xe9, 0x8f, 0xb1, 0x93, 0xf5, 0x42, 0xb7, 0x58, 0x38, + 0x6c, 0x36, 0x9b, 0xb7, 0x88, 0x56, 0x1c, 0x15, 0x09, 0x65, 0x4e, 0x1a, 0x2b, 0x9d, 0x04, 0x99, + 0x4c, 0x86, 0xad, 0x5b, 0xb7, 0x2e, 0xba, 0xac, 0x2b, 0x56, 0xac, 0x80, 0x44, 0x22, 0x21, 0xe5, + 0xdc, 0xee, 0xb7, 0x35, 0x09, 0x78, 0x47, 0xa4, 0x54, 0x32, 0x11, 0x4b, 0x1f, 0x8d, 0x8a, 0x8a, + 0x7c, 0xba, 0x84, 0x56, 0xab, 0x45, 0x55, 0x55, 0x15, 0x6a, 0x6b, 0x6b, 0xa1, 0x52, 0xa9, 0xa0, + 0xd3, 0xe9, 0xbc, 0x1a, 0xed, 0x42, 0x96, 0x15, 0xd1, 0x42, 0x18, 0xf5, 0x13, 0x15, 0xed, 0x12, + 0xee, 0x39, 0x19, 0xf9, 0x9b, 0xf0, 0x6a, 0xb4, 0x0b, 0xbb, 0xba, 0x3f, 0xe1, 0xa2, 0x33, 0xaa, + 0xa3, 0x22, 0xd2, 0xa3, 0x7c, 0xa3, 0xa2, 0x67, 0x75, 0xe3, 0xf4, 0x59, 0x64, 0x7f, 0xb8, 0x7f, + 0x59, 0x72, 0xf6, 0x1d, 0x58, 0x92, 0x5b, 0xb2, 0xf3, 0xdc, 0xbc, 0xa8, 0xae, 0xce, 0x60, 0x25, + 0x22, 0x7f, 0x51, 0x15, 0x7f, 0xfa, 0x19, 0x4a, 0xd3, 0x8f, 0xa1, 0xb9, 0xfa, 0x0e, 0xd4, 0x35, + 0xb5, 0x78, 0x44, 0x68, 0xb9, 0x73, 0x97, 0xa1, 0xf9, 0x51, 0xf1, 0x8f, 0xb4, 0x3d, 0x68, 0x72, + 0x8b, 0x22, 0x05, 0x11, 0x59, 0xac, 0x56, 0x2c, 0x8c, 0x4a, 0xa8, 0x40, 0x2a, 0xba, 0x77, 0xa5, + 0x18, 0x2e, 0x92, 0x42, 0x7a, 0x5e, 0x6e, 0x92, 0xc2, 0x49, 0x92, 0x42, 0x21, 0x8d, 0xbe, 0xa9, + 0xf4, 0x85, 0x5c, 0xdc, 0xf9, 0xd4, 0x29, 0x14, 0x75, 0x06, 0x33, 0xb9, 0xc9, 0x42, 0x54, 0xac, + 0x02, 0xe7, 0x52, 0x58, 0x44, 0x44, 0x0a, 0x22, 0xa2, 0xe7, 0x55, 0x76, 0xe2, 0x73, 0x64, 0xc6, + 0x46, 0x2f, 0xc2, 0xac, 0x1f, 0x10, 0x85, 0x25, 0xd2, 0x8f, 0x91, 0xb3, 0x77, 0x17, 0xe3, 0x4f, + 0xf5, 0x6f, 0xde, 0xa2, 0xbb, 0x0a, 0x85, 0x61, 0xd8, 0x6c, 0x06, 0x8d, 0xca, 0x37, 0x85, 0x45, + 0x47, 0xd2, 0xa0, 0x28, 0x28, 0x62, 0xe7, 0x75, 0xfd, 0xdc, 0x09, 0xc8, 0x24, 0xef, 0x7b, 0x91, + 0xb5, 0x3f, 0x16, 0x16, 0xc3, 0xa0, 0x18, 0x5d, 0x6d, 0xfe, 0x39, 0x5c, 0xcb, 0x48, 0x63, 0xf4, + 0x77, 0xb4, 0x79, 0x8b, 0x2a, 0x2a, 0x2a, 0xb5, 0x43, 0xa4, 0x2f, 0xd1, 0xa8, 0x7c, 0x53, 0x48, + 0x45, 0x77, 0x89, 0x48, 0x28, 0x0e, 0x1a, 0x99, 0x6b, 0x41, 0x35, 0x0a, 0x15, 0x29, 0xa4, 0x73, + 0xca, 0x27, 0xad, 0x3d, 0x3d, 0x3d, 0x23, 0x82, 0xe8, 0x68, 0x66, 0x66, 0x66, 0xa7, 0x89, 0xfc, + 0x3b, 0xd2, 0xa8, 0x7c, 0x53, 0xc8, 0x44, 0x97, 0x0b, 0x59, 0x71, 0x54, 0xdf, 0x38, 0x8e, 0xef, + 0x2e, 0x26, 0x32, 0xae, 0x5e, 0x92, 0x78, 0xd1, 0x70, 0xef, 0x02, 0x13, 0x2a, 0x49, 0xd4, 0x15, + 0x87, 0xf6, 0x8a, 0x94, 0xa6, 0x1e, 0x1e, 0x15, 0x44, 0x5f, 0x49, 0xa5, 0xd2, 0x8e, 0xde, 0xbe, + 0x3e, 0xae, 0x4f, 0xdb, 0xcf, 0xf5, 0xeb, 0x74, 0xdc, 0xf3, 0x81, 0x01, 0x6e, 0x60, 0x70, 0x90, + 0x1b, 0xd4, 0xeb, 0x39, 0xf9, 0x19, 0x99, 0xe7, 0xa7, 0xf2, 0x4a, 0x8f, 0xd1, 0x64, 0xe2, 0xca, + 0x8a, 0x0e, 0x7b, 0xb2, 0x4f, 0x47, 0xf3, 0x22, 0x67, 0xa2, 0xf9, 0x1c, 0x46, 0x0c, 0x7f, 0x5b, + 0x7e, 0xdc, 0x63, 0xb5, 0x5a, 0x39, 0xc5, 0xd9, 0xaf, 0x3d, 0x15, 0x1f, 0xed, 0xe3, 0x05, 0x0a, + 0x3f, 0x49, 0xb6, 0x08, 0xdd, 0xfb, 0x20, 0x21, 0x97, 0x70, 0x81, 0x90, 0xe7, 0x43, 0xee, 0x12, + 0xe4, 0xf8, 0x21, 0xdb, 0x0f, 0xdf, 0x10, 0x4e, 0x12, 0x22, 0xfe, 0x06, 0x07, 0xf6, 0x34, 0x4a, + 0xcd, 0xd3, 0x93, 0xba, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_normal_view_mode_xpm[1] = {{ png, sizeof( png ), "pagelayout_normal_view_mode_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_26/pagelayout_recent.cpp b/bitmaps_png/cpp_26/pagelayout_recent.cpp new file mode 100644 index 0000000000..9467e16ef1 --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_recent.cpp @@ -0,0 +1,105 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x80, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x95, 0x96, 0x5b, 0x6c, 0x1c, + 0x57, 0x19, 0xc7, 0x7f, 0xdf, 0x99, 0xcb, 0xce, 0x78, 0x77, 0xbc, 0xf6, 0xc6, 0xf1, 0x26, 0xce, + 0x85, 0x86, 0x5c, 0x6a, 0xb7, 0x05, 0xd1, 0x1a, 0x91, 0x10, 0x40, 0xa4, 0x0d, 0x26, 0xa9, 0x42, + 0x14, 0x54, 0x2a, 0x01, 0x12, 0x0f, 0xa8, 0xf0, 0x02, 0x4a, 0x21, 0x44, 0x04, 0x2b, 0x08, 0x08, + 0xb4, 0x42, 0xe1, 0xd2, 0x17, 0x44, 0xa1, 0x15, 0x08, 0x55, 0x95, 0x82, 0x80, 0x17, 0x90, 0x40, + 0xa2, 0xa9, 0x48, 0xc5, 0x43, 0xda, 0xaa, 0x95, 0x22, 0x92, 0x86, 0x16, 0x99, 0x24, 0x4d, 0xf1, + 0xd2, 0x38, 0x5e, 0x5f, 0x76, 0xd7, 0xeb, 0xbd, 0xef, 0xcc, 0x1c, 0x1e, 0x66, 0x3d, 0xd9, 0x4d, + 0x9d, 0xa8, 0x7c, 0xd2, 0x48, 0x33, 0x73, 0x8e, 0xce, 0xef, 0x7c, 0xff, 0xef, 0x7f, 0xbe, 0x19, + 0x01, 0xf6, 0x03, 0x63, 0x80, 0x02, 0x42, 0xfe, 0xbf, 0x90, 0xce, 0x35, 0x03, 0x9c, 0xd1, 0x5a, + 0xcf, 0xdf, 0x6a, 0xa2, 0x09, 0x8c, 0x9e, 0x3a, 0x75, 0xea, 0xf0, 0xa7, 0x0e, 0x1e, 0xdc, 0xa2, + 0x94, 0xd2, 0x4a, 0x44, 0x10, 0x81, 0x5a, 0x89, 0xe6, 0xa5, 0x33, 0x50, 0xf9, 0xaf, 0x88, 0x32, + 0x08, 0x13, 0x6b, 0xb4, 0xbb, 0x63, 0x2f, 0x56, 0x66, 0x13, 0x22, 0x12, 0x51, 0x44, 0x68, 0xb7, + 0xdb, 0x2c, 0x16, 0x8b, 0xc1, 0x91, 0x23, 0x47, 0x9f, 0x10, 0x91, 0x93, 0x5a, 0xeb, 0xf2, 0xad, + 0x40, 0x6a, 0x30, 0x93, 0x71, 0x95, 0x44, 0x41, 0x18, 0x50, 0x7b, 0xe9, 0x49, 0xdc, 0xfa, 0x14, + 0x9e, 0x59, 0xa5, 0x55, 0x2e, 0x42, 0x18, 0x62, 0x0f, 0xac, 0x91, 0xd6, 0xcb, 0x7f, 0x67, 0xd9, + 0xde, 0x46, 0xfa, 0x81, 0x6f, 0xa2, 0x1c, 0x2f, 0x86, 0x19, 0x22, 0xe6, 0xf1, 0xe3, 0x93, 0x93, + 0x57, 0xa7, 0xa7, 0xdf, 0x12, 0x91, 0x67, 0xb5, 0xd6, 0xcd, 0x9b, 0x41, 0x0a, 0x08, 0x45, 0x44, + 0x03, 0x84, 0xf5, 0x12, 0xcd, 0x33, 0xdf, 0x26, 0x5d, 0x7d, 0x91, 0xb9, 0x6b, 0xd7, 0xb9, 0x90, + 0x5f, 0xc7, 0xc5, 0xc1, 0x2f, 0xf0, 0xda, 0xd0, 0x23, 0xbc, 0xb6, 0xb0, 0x99, 0xd9, 0xd9, 0x65, + 0x92, 0xb5, 0x57, 0x59, 0x3e, 0x7d, 0x8c, 0xe6, 0xec, 0x54, 0xbc, 0x48, 0x18, 0x86, 0x28, 0x44, + 0x7e, 0x74, 0xf2, 0x87, 0x4f, 0x6d, 0x19, 0xbd, 0x7b, 0x42, 0x44, 0x8c, 0xd5, 0x40, 0x71, 0x34, + 0x5f, 0x7e, 0x92, 0xdc, 0x7c, 0x9e, 0x73, 0xd7, 0x86, 0x98, 0xda, 0xfa, 0x28, 0xd9, 0x4f, 0x1e, + 0x23, 0x57, 0x4b, 0x42, 0x66, 0x2b, 0x03, 0xf7, 0x7f, 0x85, 0xda, 0x9e, 0xc7, 0x79, 0xa3, 0x76, + 0x37, 0x56, 0xed, 0x0a, 0xb5, 0x57, 0x9f, 0x06, 0x1d, 0x95, 0x54, 0x29, 0xc5, 0x72, 0x65, 0x99, + 0x9d, 0xe3, 0xf7, 0xa9, 0x13, 0xdf, 0xfb, 0xee, 0x1f, 0xd7, 0x64, 0x37, 0x8e, 0xaf, 0x0e, 0xd2, + 0x9a, 0xd6, 0xd4, 0x69, 0x3c, 0xfe, 0x43, 0x65, 0xf8, 0x13, 0xf4, 0xef, 0x3d, 0xc6, 0xae, 0x9d, + 0xbb, 0x99, 0x9d, 0xcb, 0x33, 0x3f, 0xbf, 0x40, 0xb1, 0x58, 0xa2, 0xcf, 0xe9, 0x23, 0x95, 0xf4, + 0x70, 0x77, 0x3f, 0x42, 0xae, 0xbe, 0x91, 0xa4, 0xbc, 0xcd, 0xd2, 0xd9, 0x5f, 0xa2, 0x94, 0xc2, + 0xb6, 0x6d, 0x2c, 0xd3, 0xa2, 0x5e, 0x6f, 0x70, 0x70, 0xdf, 0x84, 0xf5, 0x8d, 0xe3, 0xdf, 0x3a, + 0xe3, 0xa4, 0xd3, 0xdb, 0x6f, 0xae, 0x51, 0x14, 0x85, 0x29, 0xda, 0x0b, 0x6f, 0x91, 0xb8, 0xeb, + 0xab, 0x6c, 0x18, 0x19, 0x61, 0x66, 0xe6, 0x3a, 0x6b, 0x87, 0x86, 0x10, 0x51, 0x94, 0x4a, 0x65, + 0x9c, 0x84, 0x83, 0x46, 0x13, 0x04, 0x3e, 0xe5, 0xf1, 0x2f, 0x53, 0x39, 0xff, 0x18, 0xa6, 0x93, + 0x47, 0x44, 0x30, 0x4d, 0x93, 0x74, 0xba, 0x9f, 0x85, 0xc5, 0x45, 0xc6, 0x46, 0x47, 0xf9, 0xe2, + 0xc3, 0x0f, 0x79, 0x8d, 0xb6, 0x9c, 0x16, 0x91, 0xdd, 0x5a, 0xeb, 0x7c, 0x0f, 0x48, 0x5a, 0x45, + 0xca, 0x75, 0x93, 0xf9, 0x52, 0x19, 0x79, 0xf3, 0x0a, 0x7e, 0x10, 0xd0, 0x68, 0x35, 0x68, 0x34, + 0x1a, 0x34, 0x9b, 0x4d, 0x4c, 0xd3, 0xc4, 0x68, 0x1b, 0x51, 0x06, 0xae, 0x47, 0xd3, 0xca, 0x62, + 0xd6, 0xae, 0xa3, 0x94, 0xc2, 0xb2, 0x2c, 0x32, 0x99, 0x0c, 0x97, 0x2e, 0x5d, 0xe6, 0xe2, 0xc5, + 0x7f, 0x92, 0xcd, 0x0e, 0xf3, 0xf9, 0x03, 0x0f, 0xbc, 0xd7, 0x71, 0x7f, 0xfd, 0x7b, 0x11, 0x39, + 0xa4, 0xb5, 0x2e, 0x77, 0x81, 0xca, 0x68, 0xcb, 0x63, 0x28, 0x9b, 0x21, 0xe5, 0xa5, 0xf0, 0x92, + 0xfd, 0xb8, 0xae, 0xcb, 0xcf, 0x7f, 0xf1, 0x14, 0x85, 0x42, 0x01, 0x1d, 0x86, 0x8c, 0x6c, 0x58, + 0xcf, 0xfa, 0x0d, 0x59, 0x0c, 0x25, 0xf8, 0x76, 0x1a, 0x69, 0xcf, 0x43, 0xab, 0x86, 0x65, 0x39, + 0xf4, 0xf5, 0xf5, 0xb1, 0x69, 0xf3, 0x26, 0xf2, 0xb3, 0xb3, 0xfc, 0xe3, 0xfc, 0x05, 0x06, 0xd2, + 0x69, 0xf6, 0x7c, 0xf0, 0x7d, 0x7b, 0x7e, 0xf6, 0xab, 0x67, 0x7f, 0x2a, 0x22, 0x47, 0x63, 0x50, + 0x68, 0x0f, 0x60, 0x07, 0x6f, 0x60, 0x2a, 0xd0, 0x5a, 0xd3, 0xf6, 0x5b, 0x48, 0x43, 0x50, 0xa2, + 0xb0, 0xed, 0x04, 0x73, 0xf3, 0x73, 0xe4, 0x17, 0xe6, 0x28, 0x2e, 0x6d, 0x66, 0x6c, 0x6c, 0x3b, + 0x2e, 0x35, 0xb4, 0x95, 0x46, 0x39, 0x29, 0x08, 0x43, 0x1c, 0xc7, 0x21, 0x33, 0x38, 0x88, 0x65, + 0x9a, 0x78, 0x9e, 0x47, 0xbd, 0xde, 0x40, 0x44, 0x18, 0xbf, 0xe7, 0xce, 0xcf, 0x02, 0x27, 0x63, + 0x90, 0xb6, 0x06, 0xf0, 0x06, 0x2c, 0xb8, 0x7a, 0x96, 0xd6, 0x9d, 0x7b, 0x11, 0x11, 0xc2, 0x30, + 0xe4, 0xc4, 0x89, 0xe3, 0x80, 0x10, 0x84, 0x01, 0xed, 0x76, 0x8b, 0x66, 0xab, 0x41, 0x6b, 0xf6, + 0x12, 0xae, 0xd9, 0xc0, 0x4f, 0xbc, 0x07, 0xad, 0x35, 0x4a, 0x45, 0x9e, 0x72, 0x5d, 0x17, 0xc3, + 0x30, 0x48, 0x26, 0x93, 0xf8, 0xbe, 0x4f, 0x18, 0x86, 0xd4, 0x6a, 0x75, 0x0b, 0x70, 0x6e, 0x48, + 0xb7, 0x75, 0x1f, 0xed, 0xf3, 0x17, 0x18, 0x29, 0x9e, 0x25, 0x57, 0x19, 0x47, 0xf7, 0xa5, 0xf1, + 0x7d, 0x1f, 0xc3, 0x50, 0xf1, 0x59, 0x69, 0xfb, 0x6d, 0xda, 0xad, 0x06, 0x23, 0x33, 0x7f, 0xc3, + 0x70, 0x5a, 0xe8, 0x8d, 0x1f, 0xe9, 0x98, 0x36, 0x82, 0x89, 0x48, 0xec, 0xc2, 0x20, 0x08, 0xe2, + 0x31, 0x40, 0xc7, 0x20, 0x63, 0x78, 0x07, 0x8d, 0xcc, 0x6e, 0x32, 0xd6, 0x0b, 0xb4, 0x5e, 0x7f, + 0x9a, 0xd9, 0x0d, 0x0f, 0xd2, 0x1a, 0x1e, 0x8d, 0x77, 0xab, 0x75, 0x48, 0x58, 0xbe, 0x4e, 0x36, + 0xf7, 0x1c, 0x6b, 0xbd, 0x02, 0x65, 0xbd, 0x8d, 0xcc, 0x3d, 0x07, 0x62, 0xd3, 0x6a, 0xad, 0xa3, + 0x2e, 0x61, 0x44, 0x86, 0x31, 0x8c, 0xe8, 0xcc, 0x5a, 0x96, 0x75, 0xc3, 0xde, 0xba, 0x33, 0xb9, + 0xb1, 0xe3, 0x61, 0x72, 0x2f, 0xe6, 0x58, 0x9b, 0x98, 0xa2, 0xbf, 0xf0, 0x17, 0x16, 0x17, 0x5e, + 0xa1, 0x11, 0x24, 0x08, 0x34, 0xa4, 0xac, 0x80, 0x7e, 0x29, 0xd0, 0x97, 0x58, 0x26, 0xbf, 0x3c, + 0x82, 0x7d, 0xff, 0xa3, 0x51, 0x47, 0xe8, 0x64, 0xd2, 0xb5, 0x7b, 0xa2, 0x76, 0x79, 0xa3, 0x1f, + 0xf6, 0xd8, 0x5b, 0x6b, 0x4d, 0x22, 0x91, 0xa0, 0xf9, 0xa1, 0xc3, 0xe4, 0xae, 0x9c, 0x25, 0x75, + 0xed, 0xaf, 0x24, 0x83, 0xcb, 0x8c, 0x0c, 0x26, 0x50, 0xa6, 0x49, 0x79, 0xb1, 0x42, 0x55, 0x06, + 0x59, 0x1c, 0x9e, 0xc0, 0xdd, 0xf9, 0x10, 0x4e, 0x2a, 0xbd, 0x2a, 0xa0, 0xfb, 0xb9, 0xfb, 0xde, + 0x5c, 0xe9, 0x0c, 0x00, 0x09, 0xc7, 0x21, 0xeb, 0xba, 0xe8, 0xe1, 0xcf, 0x10, 0xf8, 0x87, 0xf0, + 0x5b, 0x0d, 0x16, 0xa6, 0xcf, 0x41, 0xd0, 0xc4, 0xd9, 0xf5, 0x61, 0x32, 0xa9, 0x34, 0xb6, 0x6d, + 0x63, 0x18, 0x46, 0xcf, 0xa2, 0xb7, 0x02, 0xae, 0xda, 0x19, 0xb4, 0xd6, 0x08, 0xa0, 0x3b, 0x69, + 0xdb, 0xb6, 0x4d, 0xc2, 0x71, 0xf0, 0xde, 0x3f, 0x11, 0x4b, 0xd1, 0x2d, 0x49, 0xf7, 0xa2, 0xb7, + 0xcb, 0xa8, 0x07, 0xa4, 0x3b, 0x59, 0x69, 0x11, 0xe8, 0x02, 0xa2, 0x35, 0x7f, 0xfa, 0xf1, 0x13, + 0xe4, 0x2e, 0xbe, 0x7e, 0xfb, 0xaf, 0xdf, 0x2a, 0x19, 0xac, 0xc4, 0x1d, 0xf7, 0x7d, 0xc0, 0xee, + 0x91, 0x6e, 0x05, 0xd6, 0x0d, 0x11, 0x60, 0x29, 0x3f, 0xcf, 0xd0, 0xe6, 0x4d, 0x8c, 0x7d, 0xec, + 0xa3, 0x88, 0x52, 0xd1, 0x27, 0xf5, 0xa6, 0x42, 0xdf, 0x2e, 0x2c, 0x2f, 0xe5, 0xc7, 0xa0, 0xf0, + 0x26, 0xe9, 0x56, 0x6a, 0xb6, 0x22, 0xc0, 0xba, 0xed, 0xdb, 0xb8, 0xf7, 0xc0, 0xfe, 0x5e, 0x09, + 0xdf, 0x25, 0xb0, 0x54, 0x2a, 0x85, 0x37, 0x32, 0x0a, 0x23, 0x50, 0x37, 0x44, 0x3a, 0xa0, 0xf8, + 0xd2, 0x9a, 0xdf, 0x3d, 0x36, 0xc9, 0xd5, 0xf3, 0xe7, 0xde, 0xb1, 0xd8, 0x91, 0xdf, 0xfc, 0x81, + 0x81, 0xe1, 0x75, 0x88, 0x08, 0xcf, 0x7c, 0xfd, 0x4b, 0x14, 0xde, 0xce, 0x01, 0x70, 0x68, 0xf2, + 0x07, 0x0c, 0xed, 0xb8, 0xab, 0xbb, 0x46, 0x61, 0x04, 0xea, 0xb6, 0x65, 0xb4, 0xd5, 0x08, 0xdc, + 0x19, 0x4b, 0xf4, 0x25, 0x71, 0x3d, 0xef, 0x1d, 0xf5, 0xe9, 0x36, 0xc1, 0xf0, 0x96, 0x6d, 0x38, + 0xc9, 0x68, 0x8e, 0x93, 0x4a, 0xf5, 0x9a, 0xa1, 0xb0, 0x58, 0x6c, 0x76, 0x83, 0x56, 0x93, 0x50, + 0x6b, 0xcd, 0xa7, 0x8f, 0x7e, 0xa7, 0x47, 0xb6, 0x6e, 0xe9, 0xc2, 0x8e, 0xf4, 0x0f, 0x7e, 0x6d, + 0xb2, 0x47, 0xce, 0xe9, 0xe9, 0xe9, 0xc6, 0x0a, 0x48, 0x2e, 0x5f, 0xfe, 0x77, 0x75, 0xbf, 0xde, + 0x17, 0x83, 0xba, 0x21, 0xb1, 0x59, 0xb4, 0xe6, 0xf9, 0x3f, 0x3f, 0xce, 0xe2, 0xdc, 0x9b, 0xab, + 0xd6, 0xe5, 0x8e, 0xad, 0xbb, 0xf8, 0xf8, 0xc4, 0x61, 0x5e, 0xf8, 0xc9, 0xf7, 0x99, 0x9b, 0xfa, + 0x57, 0xfc, 0xde, 0x4f, 0x0f, 0xaa, 0x15, 0x90, 0x51, 0x2a, 0x95, 0xc2, 0x6a, 0xb5, 0xea, 0x8b, + 0x28, 0x94, 0x92, 0xb8, 0xad, 0x88, 0x08, 0xe9, 0xf5, 0xeb, 0x54, 0xc2, 0xf3, 0xa8, 0x56, 0xab, + 0xe1, 0x52, 0x29, 0xaf, 0x8a, 0xc5, 0x19, 0xe9, 0xfe, 0xab, 0xeb, 0xe4, 0xc4, 0xe0, 0xd2, 0x9c, + 0xae, 0x54, 0x2a, 0x61, 0xa0, 0xb5, 0xc2, 0x30, 0xe2, 0x39, 0xcd, 0xb6, 0xef, 0x77, 0x8a, 0xc0, + 0xe7, 0x80, 0x7b, 0x01, 0x63, 0x95, 0x1f, 0x48, 0x7d, 0x0b, 0x33, 0xe9, 0x77, 0xf9, 0xce, 0x06, + 0x16, 0x80, 0xdf, 0xfe, 0x0f, 0x57, 0x06, 0x6f, 0x93, 0x73, 0x44, 0x23, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_recent_xpm[1] = {{ png, sizeof( png ), "pagelayout_recent_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_26/pagelayout_special_view_mode.cpp b/bitmaps_png/cpp_26/pagelayout_special_view_mode.cpp new file mode 100644 index 0000000000..0f1d6ac274 --- /dev/null +++ b/bitmaps_png/cpp_26/pagelayout_special_view_mode.cpp @@ -0,0 +1,98 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c, + 0xce, 0x00, 0x00, 0x05, 0x09, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x95, 0x96, 0x6b, 0x4c, 0x53, + 0x67, 0x18, 0xc7, 0x49, 0xf6, 0xc1, 0x98, 0x25, 0x7c, 0x99, 0x06, 0x63, 0xa6, 0x32, 0xaf, 0x78, + 0xd7, 0x29, 0x20, 0x68, 0x70, 0x6a, 0x82, 0xc4, 0x2c, 0x64, 0x64, 0x60, 0x74, 0xc6, 0x19, 0x93, + 0x21, 0x19, 0x6c, 0x66, 0xa0, 0x20, 0xa0, 0xc1, 0x4d, 0xae, 0x4e, 0x88, 0x20, 0xe0, 0x54, 0xc8, + 0x3a, 0x26, 0x1a, 0x33, 0x23, 0x8c, 0x03, 0x2d, 0xbb, 0x18, 0xb6, 0x21, 0x1d, 0x24, 0x6b, 0xc7, + 0xe4, 0xb6, 0x0f, 0x8a, 0x38, 0x68, 0xcb, 0xbd, 0x14, 0x68, 0x29, 0x70, 0xe8, 0xf9, 0xef, 0x79, + 0xdf, 0xd0, 0x03, 0xa7, 0x58, 0xc6, 0x4e, 0xf2, 0x4b, 0x0f, 0x70, 0xfa, 0xfe, 0xce, 0x73, 0x79, + 0x9f, 0x17, 0x0f, 0x0f, 0x0f, 0x8f, 0x10, 0x22, 0x96, 0x38, 0x37, 0xfd, 0xf9, 0x7f, 0x88, 0x9b, + 0xfe, 0xde, 0x71, 0x62, 0x29, 0x00, 0x0f, 0x77, 0xb0, 0xeb, 0xb3, 0xd2, 0xd2, 0xd2, 0x76, 0xcb, + 0xf0, 0xb0, 0x34, 0x32, 0x3a, 0xea, 0xb0, 0x5a, 0xad, 0x92, 0xd5, 0x66, 0x93, 0xc6, 0xc6, 0xc6, + 0xa4, 0xf1, 0xf1, 0x71, 0x49, 0xa7, 0xd3, 0x49, 0x17, 0x63, 0x62, 0x10, 0x1b, 0x12, 0x82, 0x73, + 0xc4, 0xd9, 0xd3, 0xa7, 0x51, 0x59, 0x59, 0x29, 0x89, 0xa2, 0x28, 0x4d, 0x4d, 0x4d, 0x49, 0x76, + 0xbb, 0x5d, 0x32, 0x98, 0x4c, 0x62, 0xf8, 0xd1, 0x63, 0x99, 0xb4, 0x96, 0xe7, 0x7c, 0xa2, 0x38, + 0xb5, 0x46, 0x63, 0x1a, 0x19, 0x19, 0xc1, 0xa8, 0xd5, 0x0a, 0x9b, 0xcd, 0x86, 0x31, 0xbb, 0x1d, + 0x24, 0x41, 0x7a, 0x62, 0x22, 0x72, 0x03, 0x03, 0x31, 0xb6, 0x69, 0x13, 0x30, 0x8d, 0x44, 0x94, + 0xed, 0xde, 0x8d, 0xf8, 0xa8, 0x28, 0x38, 0x1c, 0x0e, 0xfe, 0x5c, 0x77, 0x77, 0x37, 0xf4, 0x8d, + 0x8d, 0xd2, 0xdb, 0xfe, 0x01, 0x67, 0x68, 0xbd, 0x45, 0x6e, 0x23, 0xd2, 0x54, 0x57, 0x1b, 0x5d, + 0x45, 0x79, 0x19, 0x19, 0xf8, 0xd5, 0xdf, 0x5f, 0x16, 0xb8, 0xa2, 0xdd, 0xb7, 0x0f, 0xf9, 0x39, + 0x39, 0x5c, 0x64, 0x34, 0x1a, 0xd1, 0xd8, 0xf8, 0x17, 0x7e, 0xaa, 0xa9, 0x71, 0xbc, 0xe5, 0xb3, + 0xf9, 0x5d, 0x5a, 0xf3, 0xb5, 0x05, 0x89, 0x3a, 0x5e, 0xbe, 0x44, 0xfa, 0xfe, 0xfd, 0x6e, 0x25, + 0x4e, 0x92, 0x82, 0x82, 0x30, 0x30, 0x30, 0xc0, 0x23, 0xaa, 0x7d, 0xf2, 0x04, 0xc3, 0xc3, 0x16, + 0x7c, 0x73, 0xff, 0xc1, 0xe4, 0x1b, 0x5e, 0x6f, 0xfa, 0xbd, 0x5a, 0xa4, 0xd1, 0x18, 0x87, 0x67, + 0x89, 0xd2, 0x2e, 0x5d, 0xc2, 0xc0, 0xd6, 0xad, 0x8a, 0x45, 0x9f, 0xaf, 0x5d, 0x8b, 0x3d, 0x8b, + 0x17, 0xa3, 0x65, 0xcd, 0x1a, 0xd8, 0x7c, 0x7c, 0x50, 0xb5, 0x72, 0x25, 0x9a, 0x7d, 0x7d, 0xa1, + 0x52, 0xa9, 0x30, 0x38, 0x38, 0x88, 0xfa, 0xfa, 0x06, 0xf4, 0xf4, 0xf4, 0xf0, 0xfb, 0xb4, 0xdc, + 0x1b, 0x23, 0x8b, 0x3c, 0x3d, 0xd7, 0xb9, 0x17, 0x8d, 0x8e, 0x72, 0x51, 0xc2, 0x91, 0x23, 0x73, + 0xde, 0x9e, 0x2d, 0x4c, 0xcf, 0xe2, 0xc6, 0xb2, 0x65, 0x78, 0xb1, 0x6e, 0x1d, 0x92, 0x97, 0x2c, + 0xe1, 0xbf, 0x8f, 0x8f, 0x8c, 0xa4, 0x48, 0x86, 0xd1, 0xd6, 0xd6, 0x86, 0x96, 0xd6, 0x56, 0x5e, + 0x37, 0x83, 0xc1, 0x80, 0x4b, 0xd7, 0xf2, 0xdb, 0xe9, 0x79, 0x2f, 0xb7, 0xa2, 0xa6, 0xa6, 0x26, + 0x14, 0xed, 0xd9, 0x33, 0x47, 0x34, 0xb9, 0x71, 0x23, 0xae, 0x7a, 0x79, 0xa1, 0x6f, 0xc3, 0x06, + 0x65, 0xfa, 0x42, 0x43, 0x41, 0x1d, 0xca, 0xa3, 0xa9, 0xad, 0x7d, 0xc2, 0x6b, 0x65, 0x32, 0x99, + 0xd0, 0xda, 0xd6, 0x8a, 0xb4, 0x82, 0xa2, 0x5f, 0x9c, 0x9d, 0x38, 0x23, 0xa2, 0xb7, 0xa2, 0xf6, + 0x46, 0x5e, 0x6e, 0x2e, 0x3a, 0x5c, 0xd2, 0x36, 0x1f, 0x19, 0x7b, 0xf7, 0xf2, 0x74, 0xb1, 0x1a, + 0xb3, 0xda, 0x36, 0x34, 0x34, 0xa0, 0x4a, 0xad, 0x41, 0x5d, 0x9d, 0x16, 0x75, 0x74, 0x9f, 0x77, + 0xa7, 0xe4, 0x36, 0x39, 0x5e, 0x9f, 0x23, 0x4a, 0xa0, 0xb6, 0x5d, 0xa8, 0x84, 0x71, 0x8f, 0x5e, + 0xaa, 0xb9, 0xb9, 0x19, 0x93, 0x93, 0x93, 0x3c, 0x85, 0x2c, 0x6d, 0xad, 0x94, 0x42, 0x9d, 0x4e, + 0x0f, 0xbd, 0xfe, 0x4f, 0xd4, 0xfd, 0xde, 0x60, 0x21, 0x87, 0xb7, 0x2c, 0xb2, 0x30, 0x11, 0xbd, + 0x55, 0x62, 0x44, 0x84, 0x62, 0x21, 0xc3, 0xfa, 0xf5, 0x73, 0xd2, 0x35, 0x9b, 0x7a, 0x6a, 0x0e, + 0xa1, 0xbc, 0x9c, 0xd7, 0x86, 0xc9, 0x68, 0xc3, 0x63, 0x68, 0x68, 0x08, 0xfd, 0xfd, 0xfd, 0xe8, + 0xed, 0xed, 0x45, 0x47, 0xc7, 0x4b, 0x1b, 0x39, 0x7c, 0x14, 0x22, 0x56, 0xa7, 0x0b, 0x07, 0x0e, + 0xc8, 0x8b, 0xa4, 0x2c, 0x5d, 0x8a, 0xf2, 0x15, 0x2b, 0xa0, 0x5f, 0xbd, 0xda, 0xad, 0xc8, 0x4c, + 0x2f, 0x71, 0x2d, 0x29, 0x09, 0xec, 0x92, 0x24, 0x09, 0x34, 0x2d, 0xb8, 0x90, 0x26, 0x06, 0x87, + 0x6a, 0xc7, 0x44, 0x1b, 0x64, 0xd1, 0x90, 0xc5, 0x82, 0x6e, 0x2a, 0x68, 0x3a, 0xb5, 0xac, 0x73, + 0x91, 0xe2, 0xe5, 0xcb, 0x11, 0xee, 0xe9, 0xc9, 0x17, 0x9b, 0x77, 0x3f, 0x85, 0x87, 0x73, 0x89, + 0xf3, 0x62, 0xf7, 0x2c, 0x42, 0x06, 0xd5, 0x6f, 0x46, 0xa4, 0x9e, 0x16, 0xb5, 0x52, 0x8b, 0xde, + 0xda, 0xb9, 0x53, 0x31, 0x6e, 0x74, 0xf3, 0x44, 0x23, 0x8b, 0xa8, 0x21, 0x68, 0xf6, 0x71, 0xc1, + 0x6c, 0x21, 0xbb, 0xcc, 0x66, 0xb3, 0x52, 0x64, 0xa6, 0xbc, 0xaa, 0xd5, 0x6a, 0x68, 0x16, 0xd8, + 0x04, 0x0e, 0xf6, 0x39, 0xdd, 0x9d, 0x15, 0x3b, 0x76, 0x40, 0xab, 0xd5, 0xca, 0xa2, 0xd9, 0x28, + 0x23, 0x52, 0xab, 0xb9, 0x28, 0x3b, 0x25, 0x05, 0x5d, 0xb4, 0x19, 0x17, 0x22, 0xaa, 0xf6, 0xf6, + 0x46, 0x6f, 0x70, 0x30, 0xbf, 0x67, 0x1b, 0xb8, 0x38, 0x3f, 0x5f, 0x4e, 0xd7, 0xbc, 0x22, 0x56, + 0x9f, 0xa8, 0x83, 0x07, 0x15, 0x8b, 0xb1, 0xd4, 0xb5, 0x6c, 0xdf, 0x8e, 0xec, 0xcd, 0x9b, 0x61, + 0xdd, 0xb5, 0x4b, 0xf1, 0xb7, 0x9a, 0x55, 0xab, 0xa0, 0xa5, 0xc6, 0x99, 0xda, 0xb6, 0x0d, 0x3f, + 0xb3, 0xa8, 0x1e, 0x3d, 0x92, 0x45, 0xb3, 0x51, 0x88, 0xaa, 0x48, 0x74, 0xf2, 0xf8, 0x71, 0x5c, + 0xf7, 0xf3, 0x83, 0x69, 0xcb, 0x16, 0xb4, 0xd3, 0xd1, 0x90, 0x4f, 0x63, 0x28, 0x32, 0x2c, 0x0c, + 0x9f, 0x1f, 0x3b, 0x81, 0x8b, 0x87, 0xe8, 0x2c, 0x0a, 0x08, 0xc2, 0x79, 0xbf, 0xbd, 0x48, 0xf2, + 0x0d, 0x44, 0x1c, 0xc1, 0x7e, 0xbe, 0x10, 0x74, 0x08, 0xe7, 0x02, 0xf7, 0x23, 0x9e, 0x3e, 0x33, + 0xdf, 0x8b, 0x40, 0x56, 0xd8, 0xd1, 0x39, 0x3c, 0x48, 0xcd, 0x10, 0x67, 0x44, 0x55, 0x55, 0xc6, + 0xde, 0xbe, 0x3e, 0x08, 0x82, 0x80, 0xf4, 0xf4, 0x74, 0x5c, 0xa7, 0xe9, 0xf0, 0x87, 0x4e, 0xc7, + 0x47, 0xd2, 0xcd, 0xa8, 0x4f, 0x50, 0x74, 0x36, 0x0e, 0x75, 0x0f, 0xcb, 0xf0, 0xf8, 0xee, 0x7d, + 0x3c, 0x2a, 0xf8, 0x8a, 0xdf, 0xd7, 0x97, 0x55, 0xa0, 0xa1, 0x5c, 0xf8, 0x4f, 0xf4, 0x8f, 0x6b, + 0xec, 0xb2, 0x48, 0x20, 0x51, 0x3f, 0x8d, 0x7b, 0x36, 0x4a, 0x58, 0xad, 0x58, 0x07, 0x3a, 0x37, + 0x30, 0x13, 0x55, 0xe6, 0xdf, 0x84, 0x8d, 0xe6, 0x19, 0x3b, 0xa7, 0xec, 0x74, 0xfe, 0x8c, 0x4f, + 0x4c, 0x60, 0x82, 0x60, 0xfb, 0x85, 0xc1, 0x3a, 0xce, 0x1d, 0xb4, 0x71, 0x67, 0x52, 0x27, 0x08, + 0x55, 0xc6, 0x3e, 0xda, 0xc9, 0x03, 0x24, 0x1a, 0x34, 0x9b, 0xb9, 0xcc, 0x42, 0x32, 0x36, 0x52, + 0x0a, 0x49, 0x24, 0x90, 0x88, 0x8e, 0x77, 0x14, 0x27, 0x7e, 0x8a, 0xe4, 0xc3, 0x01, 0x73, 0xe8, + 0x33, 0x74, 0xca, 0xc2, 0x3b, 0xd1, 0x1f, 0x22, 0x2b, 0xf4, 0x1d, 0xce, 0xdf, 0xda, 0xdf, 0x94, + 0xa2, 0x0a, 0x41, 0xe0, 0xa9, 0x63, 0x51, 0x39, 0x65, 0x6c, 0x8c, 0xb0, 0xa8, 0x0a, 0xcf, 0xc4, + 0x40, 0xb8, 0x51, 0xc8, 0xcf, 0xaa, 0xbb, 0x57, 0x12, 0x91, 0x1a, 0x1e, 0xac, 0x20, 0x2d, 0xe2, + 0x30, 0xfa, 0x8d, 0x5d, 0x72, 0x74, 0xdf, 0x5f, 0xbb, 0x82, 0x6f, 0xe3, 0x63, 0x38, 0x1d, 0x4f, + 0xf5, 0x4a, 0x91, 0x4a, 0x55, 0xf2, 0xa2, 0x87, 0xe6, 0x12, 0x8b, 0xca, 0x35, 0x85, 0x4c, 0x54, + 0x41, 0x22, 0x36, 0x70, 0x99, 0x8c, 0x45, 0xc6, 0x8f, 0x7b, 0x4a, 0xa5, 0x73, 0xcc, 0x8c, 0xcf, + 0x4a, 0xe7, 0x84, 0x4b, 0x5a, 0x9f, 0x3d, 0x7b, 0x36, 0xe8, 0x14, 0xc5, 0x26, 0x27, 0x27, 0x37, + 0xb3, 0xf6, 0x66, 0x51, 0xb9, 0xa6, 0x90, 0x8b, 0xf2, 0x0a, 0xf8, 0x1c, 0x7c, 0x78, 0x2f, 0x01, + 0xb7, 0xae, 0xbf, 0xcf, 0xb9, 0x9d, 0x1b, 0xae, 0xe0, 0xc7, 0xca, 0x6c, 0x2e, 0x54, 0x53, 0xd4, + 0xaa, 0x0f, 0x42, 0x65, 0x8a, 0x3e, 0x3e, 0x35, 0xe4, 0x14, 0x9d, 0x8f, 0x8e, 0x8e, 0x7e, 0xfa, + 0xbc, 0xbd, 0x5d, 0x6c, 0x7f, 0xd1, 0x21, 0xd2, 0x99, 0x22, 0xfe, 0xd3, 0xd9, 0x29, 0x76, 0x76, + 0x75, 0x89, 0x5d, 0x06, 0x83, 0x58, 0x7a, 0x39, 0xd5, 0xf1, 0xc3, 0xd7, 0x25, 0x0e, 0x53, 0x77, + 0xb7, 0x58, 0x5c, 0x78, 0xca, 0x91, 0x99, 0x12, 0x20, 0xc9, 0x5c, 0x0e, 0x90, 0xb2, 0x38, 0x81, + 0xd2, 0x77, 0xa5, 0x09, 0x0e, 0xfa, 0xff, 0x41, 0x14, 0xbe, 0xb8, 0xe0, 0x50, 0x9d, 0x0c, 0x93, + 0x9c, 0x14, 0x7c, 0x74, 0xa2, 0xdf, 0x39, 0xbd, 0x8f, 0x11, 0x57, 0x89, 0x6c, 0xe2, 0x4b, 0x17, + 0xae, 0xba, 0x21, 0xeb, 0x15, 0x64, 0xbe, 0x82, 0x1c, 0x22, 0x89, 0x58, 0xf9, 0x2f, 0xfa, 0x67, + 0xd2, 0x81, 0xc6, 0xe4, 0x27, 0x77, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82, +}; + +const BITMAP_OPAQUE pagelayout_special_view_mode_xpm[1] = {{ png, sizeof( png ), "pagelayout_special_view_mode_xpm" }}; + +//EOF diff --git a/bitmaps_png/cpp_48/icon_gerbview.cpp b/bitmaps_png/cpp_48/icon_gerbview.cpp index f4fb4ffa1b..a286c88e44 100644 --- a/bitmaps_png/cpp_48/icon_gerbview.cpp +++ b/bitmaps_png/cpp_48/icon_gerbview.cpp @@ -8,320 +8,320 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, - 0x87, 0x00, 0x00, 0x13, 0x83, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x5a, 0x09, 0x78, 0x5b, - 0xe5, 0x95, 0x15, 0x5b, 0x18, 0x42, 0xf9, 0x12, 0xca, 0xb4, 0x53, 0x92, 0xf6, 0xa3, 0x30, 0xe9, - 0x74, 0x01, 0x66, 0x4a, 0x42, 0x58, 0xcb, 0xd0, 0x00, 0x01, 0x12, 0x48, 0x3e, 0x48, 0x87, 0xad, - 0xd0, 0x0e, 0x6b, 0xd8, 0x97, 0x00, 0x49, 0x48, 0x08, 0xd9, 0x57, 0x92, 0x38, 0x31, 0x59, 0xec, - 0x90, 0x85, 0x24, 0x76, 0xbc, 0xc6, 0xf1, 0xbe, 0xc4, 0x96, 0x77, 0xcb, 0x96, 0x37, 0xc9, 0xbb, - 0x56, 0x4b, 0xb6, 0x24, 0x5b, 0x96, 0x2c, 0x5b, 0xd6, 0xbe, 0xbc, 0xf7, 0xfe, 0x33, 0xf7, 0xd7, - 0x34, 0x69, 0x42, 0xec, 0x94, 0xce, 0xd0, 0x65, 0x46, 0xdf, 0x77, 0xad, 0xf7, 0xac, 0x27, 0xe9, - 0x9e, 0xff, 0xbf, 0xf7, 0x9c, 0x73, 0x25, 0xc9, 0x00, 0xc8, 0xfe, 0x2f, 0x87, 0xec, 0xff, 0x35, - 0x80, 0x59, 0xb3, 0x66, 0x5d, 0xb1, 0x70, 0xe1, 0xc2, 0xa3, 0x4f, 0x3c, 0xf1, 0x44, 0xf9, 0xa3, - 0x8f, 0x3e, 0xba, 0x6a, 0xde, 0xbc, 0x79, 0xf7, 0x3f, 0xf5, 0xd4, 0x53, 0x57, 0x8d, 0x77, 0x2d, - 0x3d, 0xf6, 0x43, 0xba, 0x36, 0x77, 0xc1, 0x82, 0x05, 0x47, 0x1e, 0x7a, 0xe8, 0xa1, 0x9b, 0xfe, - 0x2e, 0x00, 0x3c, 0xfc, 0xf0, 0xc3, 0x8b, 0x57, 0xad, 0x5a, 0x65, 0xd7, 0xeb, 0xf5, 0xfd, 0xd9, - 0xd9, 0xd9, 0x96, 0x25, 0x4b, 0x96, 0x38, 0x29, 0xd1, 0x08, 0x25, 0xaa, 0x9e, 0x3f, 0x7f, 0xfe, - 0x4e, 0x7a, 0x7c, 0xc1, 0x23, 0x8f, 0x3c, 0xf2, 0x5d, 0x7e, 0x2d, 0x25, 0x2e, 0x4f, 0x4f, 0x4f, - 0xb7, 0x14, 0x15, 0x15, 0x59, 0x08, 0x70, 0x90, 0xce, 0x0f, 0xd0, 0x35, 0x3f, 0xf8, 0x9b, 0x02, - 0xa0, 0x44, 0xb3, 0xd4, 0x6a, 0x75, 0x3f, 0x1d, 0x77, 0x53, 0xb4, 0x53, 0x58, 0x44, 0x51, 0x74, - 0x0c, 0x0c, 0x0c, 0x58, 0xca, 0xca, 0xca, 0x2c, 0x6b, 0xd7, 0xae, 0x1d, 0xa4, 0x44, 0x23, 0x8f, - 0x3f, 0xfe, 0xb8, 0x6d, 0xd1, 0xa2, 0x45, 0x91, 0x92, 0x92, 0x92, 0x31, 0x9b, 0xcd, 0x66, 0x88, - 0x44, 0x22, 0x83, 0x19, 0x19, 0x19, 0xd6, 0x27, 0x17, 0x2d, 0x0a, 0x6c, 0xdb, 0xb5, 0x3b, 0xbb, - 0xae, 0x4b, 0x7f, 0x5c, 0xa9, 0x31, 0x6d, 0x6f, 0xd0, 0x9a, 0xdf, 0x53, 0x75, 0x1b, 0x16, 0xaa, - 0x3a, 0xb5, 0xb7, 0xd7, 0x77, 0x77, 0x7f, 0xf7, 0x2f, 0x0e, 0xe0, 0xb1, 0xc7, 0x1e, 0x1b, 0xf2, - 0x7a, 0xbd, 0x56, 0x3a, 0xce, 0xa7, 0x38, 0xe6, 0xf3, 0xf9, 0x92, 0xe9, 0x3e, 0x9d, 0xa2, 0x8c, - 0xa2, 0x95, 0xc2, 0xc4, 0x18, 0x73, 0x9a, 0x4c, 0xa6, 0x48, 0x43, 0x43, 0x83, 0x78, 0xe0, 0xc0, - 0x81, 0xe8, 0x2b, 0xaf, 0xbc, 0x22, 0xec, 0xda, 0x97, 0x28, 0x94, 0x2b, 0x5b, 0xa5, 0x36, 0xad, - 0x0e, 0x6d, 0x06, 0x13, 0x6a, 0xbb, 0xcd, 0xa8, 0xd3, 0x58, 0x04, 0xa5, 0xc6, 0x1c, 0x6d, 0xd6, - 0x18, 0x85, 0x16, 0x8d, 0x5e, 0x6c, 0x6a, 0xef, 0x16, 0xcb, 0x5b, 0xb5, 0x45, 0xd5, 0x8d, 0xed, - 0x37, 0xfe, 0x45, 0x00, 0xf0, 0x9a, 0x7e, 0xf2, 0xc9, 0x27, 0x43, 0x74, 0xec, 0xa0, 0x48, 0x1e, - 0x1d, 0x1d, 0x3d, 0x31, 0x79, 0xf2, 0xe4, 0xc8, 0xb4, 0x69, 0xd3, 0x3c, 0x04, 0x4c, 0xb7, 0x6d, - 0xdb, 0xb6, 0x1a, 0x8d, 0x46, 0x93, 0x69, 0xb7, 0xdb, 0x2b, 0xba, 0xbb, 0xbb, 0xa3, 0x74, 0x4d, - 0x34, 0x10, 0x0c, 0x05, 0xda, 0x74, 0x46, 0xa8, 0x8d, 0xfd, 0xa8, 0xd5, 0xd9, 0x51, 0xd4, 0xe5, - 0xc2, 0x81, 0x06, 0x27, 0xb6, 0x9f, 0x36, 0x62, 0x5b, 0x81, 0x96, 0xad, 0x3d, 0xd5, 0x21, 0x6d, - 0x2c, 0xb1, 0x38, 0xe3, 0x14, 0x5e, 0x7d, 0x86, 0x6a, 0x78, 0xb8, 0xba, 0xa3, 0x37, 0x5c, 0xd7, - 0xa4, 0x62, 0xa7, 0x95, 0x1d, 0xd5, 0x65, 0xd5, 0x0d, 0x3f, 0xff, 0x56, 0x01, 0x50, 0x7d, 0x3f, - 0xbb, 0x75, 0xeb, 0x56, 0x1b, 0x1d, 0x1b, 0xf8, 0xea, 0xf3, 0xa0, 0xd2, 0x38, 0x9e, 0x9f, 0x9f, - 0x5f, 0xf8, 0xde, 0x7b, 0xef, 0xb5, 0xdc, 0x79, 0xe7, 0x9d, 0xd6, 0xab, 0xaf, 0xbe, 0x3a, 0x32, - 0x7d, 0xfa, 0x74, 0xa9, 0xa6, 0xa6, 0x26, 0x38, 0xe0, 0x1c, 0x09, 0xa8, 0x7b, 0x74, 0x68, 0x30, - 0xda, 0x59, 0x52, 0x47, 0x88, 0x25, 0xa9, 0x3d, 0xc8, 0xd5, 0x85, 0xa5, 0xb2, 0x3e, 0x26, 0xc9, - 0xfb, 0x24, 0xa9, 0x48, 0x1f, 0x60, 0x69, 0xcd, 0x83, 0x6c, 0x47, 0x76, 0x33, 0xfb, 0x60, 0x6f, - 0x3e, 0x96, 0x1c, 0x28, 0xf1, 0xae, 0xc9, 0xee, 0xee, 0x4f, 0x6d, 0x1e, 0x1c, 0xad, 0x68, 0xd5, - 0x85, 0xca, 0xeb, 0x1a, 0xa5, 0xc2, 0xca, 0xe6, 0xd7, 0xbf, 0x35, 0x00, 0xd4, 0x80, 0x09, 0x55, - 0x55, 0x55, 0x16, 0x3a, 0x6e, 0xe2, 0xc9, 0x53, 0x4d, 0x17, 0x5f, 0x7b, 0xed, 0xb5, 0x81, 0xd9, - 0xb3, 0x67, 0x5b, 0x97, 0x2e, 0x5d, 0xda, 0x48, 0xf5, 0x9e, 0x6f, 0x30, 0x18, 0xaa, 0x3f, 0xf8, - 0xe0, 0x03, 0x61, 0xef, 0xa1, 0xa3, 0x4c, 0xd5, 0xa3, 0x45, 0xb9, 0xd6, 0x29, 0xed, 0xa9, 0x73, - 0x48, 0xc7, 0x9a, 0x9c, 0x91, 0x42, 0xa3, 0x10, 0x48, 0x6e, 0x71, 0x0a, 0x5f, 0x56, 0xf7, 0xb1, - 0x8c, 0x0e, 0x4f, 0xa4, 0xd4, 0xcc, 0x42, 0x55, 0x36, 0x08, 0x8a, 0x41, 0xb0, 0x1a, 0xab, 0xc4, - 0x4e, 0xb5, 0xbb, 0xd9, 0xe1, 0x6a, 0x93, 0xb4, 0x29, 0x43, 0x19, 0x5e, 0x95, 0x54, 0x27, 0x65, - 0xd5, 0x6b, 0xa4, 0x92, 0xf2, 0x5a, 0xb6, 0xe1, 0xf3, 0x7d, 0x5f, 0x3c, 0xf0, 0xc0, 0x03, 0xd3, - 0xbf, 0x31, 0x00, 0xa2, 0xc5, 0xcb, 0x88, 0x49, 0x5e, 0xa2, 0xd8, 0x7a, 0x26, 0xe6, 0xce, 0x9d, - 0xbb, 0x95, 0x68, 0xd3, 0xb5, 0x73, 0xe7, 0x4e, 0x4f, 0x5c, 0x5c, 0x9c, 0x69, 0xcb, 0x96, 0x2d, - 0x9d, 0x54, 0x36, 0xae, 0x9f, 0xfc, 0xe4, 0x27, 0x98, 0x31, 0x63, 0x06, 0x7e, 0xfa, 0xd3, 0x9f, - 0xb2, 0x9f, 0xfd, 0xec, 0x67, 0xd2, 0xcc, 0x99, 0x33, 0x59, 0x4a, 0xc6, 0x49, 0x51, 0xa9, 0xee, - 0xc4, 0x49, 0xd5, 0x00, 0xdb, 0x53, 0x37, 0x2c, 0xae, 0x4f, 0x53, 0x60, 0xe5, 0x57, 0x72, 0x6c, - 0xcb, 0x51, 0xb3, 0x3d, 0xa5, 0xda, 0xe8, 0xda, 0x13, 0x35, 0xd2, 0xe6, 0x4c, 0x25, 0xdb, 0x9d, - 0xa7, 0x66, 0x07, 0xcb, 0xf5, 0x91, 0xc3, 0x15, 0x86, 0x48, 0x52, 0x8d, 0x41, 0x3c, 0x52, 0xa1, - 0x65, 0xfb, 0x4a, 0xba, 0xd8, 0xe1, 0x4a, 0x03, 0xca, 0x7a, 0xc3, 0x12, 0x95, 0x54, 0xb8, 0xb8, - 0x59, 0x2f, 0xe5, 0x16, 0x57, 0x62, 0xf1, 0x5b, 0xef, 0x86, 0x29, 0x87, 0x81, 0x39, 0x73, 0xe6, - 0x3c, 0xf6, 0x27, 0x01, 0x50, 0xa2, 0x2f, 0x2e, 0x5e, 0xbc, 0xd8, 0x79, 0xfa, 0xf4, 0x69, 0x6b, - 0x69, 0x69, 0xa9, 0x95, 0xdf, 0x53, 0x0c, 0x9c, 0x3a, 0x75, 0x8a, 0xd1, 0x0e, 0x88, 0x15, 0x15, - 0x15, 0xc1, 0xf2, 0xf2, 0xf2, 0x00, 0x51, 0xa4, 0x74, 0xe2, 0xc4, 0x09, 0x9c, 0x1b, 0x29, 0xa9, - 0xa9, 0xa8, 0x6b, 0x56, 0xa1, 0xaa, 0xab, 0x0f, 0x7b, 0x1b, 0xc6, 0x70, 0xb4, 0xde, 0x86, 0x13, - 0x8d, 0x03, 0x38, 0x5c, 0xdb, 0x8f, 0xa3, 0x75, 0x16, 0x24, 0x2b, 0x07, 0x70, 0xa2, 0xc1, 0x8a, - 0xa4, 0x5a, 0x23, 0x52, 0xeb, 0xcd, 0x38, 0xd9, 0x64, 0x61, 0xa7, 0x9a, 0xad, 0x52, 0x56, 0x93, - 0x45, 0xca, 0x57, 0x0f, 0x48, 0x69, 0x4a, 0x0b, 0xfb, 0x3c, 0xa3, 0x0e, 0x5f, 0x55, 0x52, 0xe2, - 0xed, 0xc3, 0x52, 0xa6, 0xca, 0x11, 0x2d, 0x69, 0xd4, 0xb0, 0x53, 0xf9, 0x72, 0xa6, 0x52, 0xb5, - 0x59, 0x69, 0x31, 0xbb, 0xfe, 0x24, 0x00, 0xbe, 0xe2, 0x3c, 0x69, 0x3a, 0xe9, 0xa3, 0xd0, 0xf0, - 0x08, 0x06, 0x83, 0x96, 0xe1, 0xe1, 0x61, 0x91, 0x37, 0x26, 0xc5, 0x18, 0x31, 0x8d, 0x47, 0xab, - 0xd5, 0x82, 0x9a, 0xf6, 0xbc, 0xa8, 0x56, 0x28, 0x51, 0xdb, 0xac, 0x46, 0x6e, 0x8f, 0x17, 0x29, - 0x9d, 0x41, 0x56, 0xa0, 0x0d, 0xa0, 0xdc, 0x1c, 0x45, 0xa1, 0x3e, 0x8c, 0xdc, 0x2e, 0x0f, 0x2a, - 0x4c, 0x21, 0x54, 0xf7, 0x85, 0x51, 0x61, 0xf0, 0xb1, 0x6a, 0x93, 0x1f, 0x4d, 0x83, 0x22, 0x53, - 0x39, 0x20, 0x29, 0x6d, 0x02, 0x6b, 0x77, 0x8a, 0xac, 0xca, 0xe8, 0x65, 0xa7, 0x9a, 0xfa, 0x58, - 0x62, 0x91, 0x5a, 0xac, 0x1f, 0x64, 0x62, 0x45, 0x6f, 0x50, 0x48, 0x56, 0x98, 0x59, 0xbe, 0xbc, - 0x1e, 0xc5, 0x15, 0x0d, 0x01, 0xca, 0xad, 0xf2, 0xcf, 0x01, 0xc0, 0x93, 0xef, 0xe8, 0xeb, 0xeb, - 0x33, 0xd2, 0x8a, 0x7b, 0xa9, 0x31, 0xc5, 0xa6, 0xa6, 0xa6, 0x28, 0x45, 0xa0, 0xb6, 0xb6, 0x36, - 0x4c, 0x3b, 0x81, 0x8e, 0x8e, 0x8e, 0xb3, 0x41, 0x3a, 0x00, 0x6a, 0x3c, 0x54, 0xb4, 0x9b, 0x71, - 0xa2, 0x47, 0x62, 0x47, 0x95, 0x76, 0x14, 0xeb, 0x02, 0xa8, 0x30, 0x47, 0x70, 0xda, 0x10, 0x46, - 0x89, 0x76, 0x0c, 0xe5, 0x7a, 0x2f, 0x14, 0x96, 0x30, 0xaa, 0x0c, 0x1e, 0x56, 0xda, 0xed, 0x84, - 0xd2, 0x1a, 0x82, 0xda, 0x09, 0xb1, 0x65, 0x50, 0x94, 0xda, 0x06, 0x23, 0x28, 0xa3, 0xff, 0xe5, - 0xb5, 0x5a, 0xa4, 0x7d, 0x39, 0x8a, 0x70, 0x93, 0x1d, 0x9e, 0xe6, 0x21, 0x84, 0xeb, 0xad, 0x82, - 0x50, 0xa8, 0xe8, 0xc2, 0xf1, 0xb4, 0x3c, 0x3c, 0xf8, 0xe0, 0x83, 0x4d, 0x14, 0xff, 0x74, 0x51, - 0x00, 0xbc, 0xde, 0xcf, 0x05, 0xd0, 0xda, 0xda, 0x6a, 0x49, 0x4d, 0x4d, 0x15, 0xa8, 0x84, 0x24, - 0x52, 0x5f, 0x7e, 0x1f, 0x49, 0x49, 0x49, 0x11, 0xb7, 0x6f, 0xdf, 0x8e, 0xbc, 0xbc, 0xbc, 0x58, - 0xf2, 0xed, 0xed, 0xed, 0xd8, 0x19, 0xb7, 0x0b, 0x65, 0x55, 0x0a, 0x14, 0x76, 0x39, 0x91, 0x63, - 0x90, 0x58, 0x7c, 0x51, 0x37, 0x0e, 0x55, 0x1a, 0x51, 0xd3, 0x1f, 0x41, 0xa5, 0x39, 0x44, 0xff, - 0x77, 0xa1, 0xd2, 0xe8, 0x43, 0x7d, 0x7f, 0x08, 0xa9, 0x35, 0x3d, 0x28, 0x69, 0x1f, 0x40, 0x8d, - 0x61, 0x2c, 0x06, 0xa0, 0xcd, 0xc9, 0xc4, 0x56, 0x9b, 0x1f, 0xd5, 0xba, 0x11, 0x56, 0xa4, 0xb6, - 0x48, 0x5b, 0x8f, 0x15, 0xb0, 0x46, 0x6b, 0x78, 0xac, 0xd5, 0x81, 0xb1, 0x96, 0x21, 0xf8, 0xca, - 0x34, 0x2e, 0xea, 0xad, 0x7c, 0xec, 0xda, 0xbd, 0xd7, 0x4d, 0x0b, 0xec, 0xa7, 0x1c, 0x37, 0x91, - 0x3d, 0x99, 0xf2, 0x8d, 0x00, 0x48, 0x92, 0xd4, 0x59, 0x57, 0x57, 0xc7, 0xa8, 0x64, 0xc4, 0x9e, - 0x9e, 0x9e, 0x00, 0x95, 0x8a, 0xaf, 0xb9, 0xb9, 0x59, 0x54, 0x28, 0x14, 0x38, 0x17, 0x44, 0x61, - 0x51, 0x09, 0x8a, 0xe5, 0xd5, 0xc8, 0x69, 0xb3, 0x23, 0xbb, 0x27, 0x84, 0x74, 0x95, 0x0b, 0x09, - 0x65, 0x1a, 0xa4, 0x29, 0x8c, 0xa8, 0xb7, 0x84, 0x90, 0xdf, 0x36, 0x84, 0x1a, 0x53, 0x20, 0x06, - 0xe0, 0x58, 0x59, 0x3b, 0xcb, 0x69, 0x34, 0x41, 0x61, 0xf6, 0xb1, 0x8e, 0x61, 0x88, 0x9a, 0x51, - 0x88, 0x8d, 0x66, 0x0f, 0x94, 0x66, 0x2f, 0x2b, 0x6b, 0xb7, 0x4a, 0x7b, 0xd2, 0x4a, 0xa5, 0xaa, - 0x1e, 0x47, 0xb0, 0x67, 0x04, 0xa3, 0x6d, 0x4e, 0xf8, 0x94, 0xfd, 0x01, 0x31, 0x2d, 0xaf, 0x12, - 0xd9, 0x05, 0x95, 0xc1, 0x40, 0x20, 0x60, 0x23, 0x81, 0xec, 0x27, 0x00, 0x63, 0xd4, 0xd4, 0x4b, - 0x7f, 0xfd, 0xeb, 0x5f, 0xff, 0xc3, 0x45, 0x01, 0x50, 0xb2, 0x76, 0x62, 0x9d, 0x58, 0xb2, 0x14, - 0x8c, 0x07, 0x3f, 0xa7, 0x06, 0xc7, 0xb9, 0x20, 0x0a, 0x0a, 0x8b, 0x91, 0x5f, 0x5c, 0x81, 0x53, - 0x2a, 0x3b, 0x0e, 0xd5, 0xf4, 0x23, 0x87, 0x6a, 0xbe, 0xc4, 0x10, 0x44, 0x62, 0x51, 0x2b, 0x32, - 0x6b, 0xb5, 0xa8, 0xd4, 0xb9, 0x28, 0xf9, 0x20, 0x94, 0x04, 0xe6, 0xb8, 0x9c, 0x00, 0x28, 0x8d, - 0x68, 0x1b, 0x12, 0x24, 0x9d, 0x1b, 0xa2, 0x81, 0xa2, 0xc9, 0x34, 0x8a, 0x8e, 0xc1, 0x20, 0xab, - 0xe9, 0x19, 0x90, 0x92, 0x8a, 0x14, 0x51, 0xb9, 0xaa, 0x57, 0x30, 0xba, 0xe1, 0xa6, 0xc7, 0x02, - 0xaa, 0x81, 0x80, 0x90, 0x56, 0x50, 0xc5, 0xbe, 0x3c, 0x92, 0x19, 0xa6, 0x9c, 0x8a, 0xb9, 0xe2, - 0x8f, 0x8d, 0x8d, 0x59, 0x28, 0x0f, 0x2b, 0xe5, 0xeb, 0xb8, 0xff, 0xfe, 0xfb, 0x5f, 0x23, 0x20, - 0x97, 0x8f, 0x0b, 0x80, 0x56, 0xdf, 0x4d, 0x02, 0x86, 0x8d, 0x1b, 0x37, 0x9e, 0x17, 0x9b, 0x37, - 0x6f, 0x8e, 0x81, 0x20, 0x66, 0xc2, 0x8e, 0x1d, 0x3b, 0x90, 0x9b, 0x57, 0x88, 0xdc, 0x42, 0x39, - 0xf2, 0x7a, 0x3c, 0xd8, 0x99, 0xa3, 0x46, 0x3e, 0x35, 0x72, 0xb9, 0x89, 0xea, 0xdd, 0xe8, 0x47, - 0xfc, 0xa9, 0x3a, 0x94, 0x76, 0xda, 0xd1, 0x66, 0x0f, 0xa3, 0x6b, 0x58, 0x94, 0xb2, 0xea, 0xba, - 0x21, 0xef, 0xb0, 0xa0, 0x77, 0x0c, 0xa2, 0xc9, 0x0b, 0x91, 0x12, 0x15, 0x9b, 0x8d, 0xc3, 0x30, - 0x8e, 0x08, 0xac, 0x51, 0x6f, 0x97, 0x72, 0xaa, 0x55, 0x91, 0xb2, 0x56, 0x1d, 0x7a, 0xdd, 0xa2, - 0xa7, 0xcf, 0x8b, 0x70, 0x83, 0xc1, 0x29, 0x64, 0xe4, 0x57, 0x4b, 0xbb, 0xf7, 0x1c, 0x15, 0x89, - 0xed, 0x4e, 0x53, 0x5e, 0xc7, 0x29, 0xe4, 0xdc, 0x8b, 0x39, 0x1c, 0x8e, 0xfe, 0xe5, 0xcb, 0x97, - 0x0f, 0x52, 0xde, 0xe6, 0x7f, 0xa7, 0xdb, 0x05, 0x00, 0xaa, 0xab, 0xab, 0x83, 0x64, 0x13, 0x2e, - 0x00, 0xc0, 0x83, 0x74, 0x01, 0x4a, 0xa5, 0x32, 0xb6, 0x0b, 0x39, 0xb9, 0xf9, 0x38, 0x99, 0x5d, - 0x82, 0xfc, 0xce, 0x61, 0xec, 0xca, 0x53, 0x21, 0xbb, 0xdd, 0x85, 0x12, 0x8d, 0x07, 0x95, 0x06, - 0x2f, 0xf6, 0xe7, 0x36, 0xa0, 0xa4, 0xc3, 0x8e, 0x26, 0x6a, 0xda, 0xce, 0x61, 0x26, 0xa6, 0x57, - 0xb6, 0xa1, 0xb2, 0xd3, 0x1a, 0x03, 0x60, 0xa6, 0x30, 0xb8, 0x22, 0xac, 0xc3, 0x32, 0x0a, 0x9b, - 0x0f, 0x92, 0xba, 0xd7, 0x21, 0x9d, 0x6e, 0xe8, 0x8c, 0x34, 0x6a, 0x2c, 0xa2, 0x6e, 0xc8, 0x17, - 0x1c, 0xf4, 0x23, 0x2a, 0x6f, 0xd1, 0x8b, 0xe9, 0xb9, 0x15, 0xd2, 0x96, 0x6d, 0xfb, 0xc1, 0x05, - 0xf3, 0x8c, 0x13, 0xf8, 0x03, 0x90, 0x2a, 0x0a, 0x1b, 0xd9, 0x17, 0x13, 0x95, 0x95, 0x43, 0x46, - 0x7f, 0xce, 0x03, 0x20, 0x97, 0xcb, 0xa5, 0x89, 0x00, 0xf0, 0x95, 0x3f, 0x03, 0x80, 0x5e, 0x18, - 0xe9, 0x59, 0x85, 0x28, 0x68, 0xd0, 0x60, 0x7f, 0x99, 0x0e, 0xc5, 0x5a, 0x2f, 0x4a, 0xb5, 0x1e, - 0x94, 0x76, 0x0f, 0x23, 0x21, 0xb7, 0x1e, 0x85, 0x2a, 0x0b, 0xea, 0x8c, 0x63, 0xac, 0xc5, 0xe2, - 0x47, 0x56, 0x75, 0x3b, 0x1a, 0x74, 0x43, 0xac, 0x9f, 0x56, 0xdf, 0xea, 0x87, 0xa4, 0x1f, 0xf2, - 0xc3, 0xe0, 0xf0, 0x61, 0x28, 0x00, 0xa9, 0xdb, 0x32, 0xcc, 0xaa, 0x5a, 0xba, 0x85, 0x66, 0x6d, - 0x3f, 0xb3, 0xfb, 0x25, 0xff, 0x70, 0x10, 0x62, 0x5e, 0x55, 0x13, 0x3b, 0x91, 0x59, 0xcc, 0xd6, - 0x6e, 0xd8, 0x1d, 0x3d, 0x27, 0xf9, 0x73, 0xa3, 0x81, 0x5c, 0x00, 0xef, 0x8b, 0xee, 0xf3, 0x00, - 0x44, 0xa3, 0x51, 0x0d, 0xd1, 0x25, 0xfb, 0x26, 0x00, 0xea, 0xeb, 0xeb, 0x91, 0x71, 0x32, 0x07, - 0x99, 0x05, 0x15, 0x48, 0x6a, 0xb0, 0xa1, 0x54, 0xef, 0x8f, 0x71, 0x7e, 0x6d, 0xaf, 0x17, 0x89, - 0x79, 0xf5, 0xa8, 0xe8, 0x71, 0x80, 0x37, 0x2a, 0xaf, 0xf5, 0xbc, 0xda, 0x0e, 0xd4, 0xf7, 0x58, - 0xa1, 0xb5, 0xfb, 0x98, 0xc9, 0x15, 0x62, 0x46, 0x87, 0x17, 0xd6, 0xb1, 0x30, 0xa3, 0x64, 0x25, - 0xfd, 0xe0, 0x08, 0xab, 0x6e, 0xee, 0x64, 0x66, 0x87, 0x27, 0x32, 0x12, 0x46, 0x70, 0xc8, 0x17, - 0x15, 0xe5, 0xca, 0x0e, 0xe9, 0xe0, 0x91, 0x0c, 0x24, 0x24, 0x26, 0xf5, 0x8f, 0x93, 0x7c, 0x2a, - 0xe9, 0x92, 0xfd, 0xe5, 0x97, 0x5f, 0x76, 0x51, 0x05, 0x2d, 0x3a, 0x0f, 0x80, 0xc7, 0xe3, 0xb1, - 0x50, 0x0f, 0x88, 0xdf, 0x04, 0x00, 0xa7, 0xd2, 0xc2, 0xc2, 0x22, 0x1c, 0xfe, 0x2a, 0x1d, 0xd9, - 0x0a, 0x3d, 0xca, 0x8d, 0x41, 0xd4, 0x10, 0x00, 0xce, 0xed, 0x5f, 0xe6, 0xd7, 0x43, 0x61, 0x70, - 0xb3, 0xae, 0x21, 0xea, 0x81, 0xc1, 0x00, 0x8a, 0x1b, 0xba, 0xd0, 0x66, 0x72, 0xa2, 0x77, 0x38, - 0x00, 0x93, 0xd3, 0x87, 0xde, 0xa1, 0x31, 0x58, 0x47, 0x03, 0x6c, 0x34, 0xc4, 0x24, 0xd3, 0xd0, - 0x28, 0xab, 0x6f, 0xeb, 0xc6, 0x68, 0x84, 0x05, 0xdd, 0x11, 0x44, 0xac, 0x23, 0x5e, 0x31, 0xb7, - 0xa4, 0x86, 0xad, 0x5b, 0xb7, 0x9b, 0xc4, 0xd2, 0x58, 0x30, 0x0e, 0x80, 0x26, 0x2a, 0x9f, 0x3e, - 0xf2, 0x4b, 0x9d, 0xb1, 0x26, 0x3e, 0x17, 0x00, 0x35, 0xc8, 0x08, 0x09, 0xd7, 0x37, 0x02, 0xc0, - 0xa9, 0xb4, 0xa5, 0xa5, 0x05, 0xc7, 0x92, 0x4e, 0x22, 0x25, 0xbb, 0x8c, 0xca, 0x67, 0x0c, 0xb5, - 0x7d, 0xa1, 0x58, 0x09, 0x1d, 0x22, 0x00, 0x8d, 0xbd, 0x6e, 0x74, 0x0f, 0x91, 0x70, 0xf5, 0x8d, - 0x40, 0xde, 0x4c, 0xca, 0x3d, 0xe0, 0x66, 0x83, 0x5e, 0x81, 0xd9, 0xdc, 0x21, 0xf4, 0x0f, 0x7b, - 0x31, 0x30, 0x1a, 0xc0, 0xb0, 0x3f, 0xca, 0xfa, 0x9d, 0x6e, 0x74, 0xe8, 0xcd, 0x92, 0x57, 0x40, - 0x90, 0x42, 0xd4, 0xf6, 0x0f, 0x48, 0xfb, 0x12, 0x92, 0xb1, 0x79, 0xcb, 0xbe, 0xc0, 0x38, 0xc9, - 0xa7, 0xf3, 0xd5, 0xff, 0xed, 0x6f, 0x7f, 0xeb, 0xbe, 0xef, 0xbe, 0xfb, 0x1e, 0xb9, 0x00, 0x80, - 0xc5, 0x62, 0x09, 0x93, 0x90, 0x4d, 0x08, 0xe0, 0xf3, 0xcf, 0x3f, 0xc7, 0xc1, 0x83, 0x07, 0xcf, - 0x9e, 0xd3, 0x44, 0x86, 0xf7, 0xdf, 0xff, 0x00, 0xf1, 0x7b, 0x8e, 0xe0, 0x44, 0x4e, 0x39, 0x52, - 0x6b, 0xf5, 0x38, 0x54, 0xd4, 0x82, 0xc3, 0x05, 0xf5, 0x38, 0x5e, 0xa4, 0x40, 0x46, 0x59, 0x23, - 0x72, 0xaa, 0x5b, 0x50, 0xac, 0x68, 0x83, 0xa2, 0x4d, 0x0f, 0xd3, 0x90, 0x07, 0x16, 0x4a, 0x9e, - 0x56, 0x19, 0x0e, 0x6f, 0x08, 0x2e, 0x7f, 0x18, 0x03, 0x23, 0x1e, 0x18, 0x6d, 0x76, 0xd1, 0x2f, - 0x22, 0xec, 0x13, 0x20, 0xe5, 0x14, 0x56, 0x60, 0xe5, 0x8a, 0xcf, 0xd1, 0xd8, 0xd8, 0x7a, 0x7a, - 0x1c, 0x00, 0xad, 0x44, 0xf3, 0xbc, 0xf6, 0x95, 0x67, 0x75, 0x80, 0x03, 0xa0, 0x86, 0xb4, 0x12, - 0x32, 0x9d, 0xd9, 0x6c, 0x66, 0x6d, 0x6d, 0x6d, 0xd2, 0xba, 0x75, 0xeb, 0xd8, 0x6f, 0x7e, 0xf3, - 0x1b, 0x90, 0x0a, 0x82, 0xf8, 0x16, 0x77, 0xdd, 0x75, 0x17, 0xee, 0xb8, 0xe3, 0x0e, 0xd0, 0xe8, - 0x08, 0xae, 0x09, 0x2b, 0x57, 0xae, 0x8c, 0x95, 0x10, 0xf9, 0x25, 0xe8, 0x74, 0x3a, 0x2c, 0x59, - 0xf2, 0x11, 0xf6, 0x25, 0x24, 0x21, 0xb3, 0x58, 0x81, 0x6a, 0x83, 0x07, 0x19, 0xd5, 0x9d, 0xb4, - 0x03, 0x2e, 0xe8, 0x1c, 0x41, 0xd6, 0xd1, 0xe7, 0x42, 0x8d, 0x5a, 0x0b, 0xb5, 0xde, 0x8a, 0xe6, - 0x6e, 0x63, 0x2c, 0x79, 0xbb, 0xdb, 0x8f, 0x91, 0x60, 0x94, 0x8d, 0x06, 0x23, 0x18, 0x72, 0x7b, - 0xd1, 0x3b, 0x60, 0x67, 0xbe, 0x88, 0x28, 0x94, 0x56, 0x2a, 0xb1, 0x66, 0x75, 0x1c, 0xe2, 0xe3, - 0x0f, 0xe9, 0xc7, 0x49, 0x3e, 0x93, 0x44, 0x76, 0x88, 0x86, 0x2c, 0xcf, 0xaf, 0xe8, 0x76, 0x16, - 0x00, 0xd5, 0x52, 0x0c, 0x00, 0x37, 0x70, 0xfd, 0xfd, 0xfd, 0x51, 0xb2, 0x0f, 0x91, 0x6b, 0xae, - 0xb9, 0x86, 0xc9, 0x68, 0x54, 0xf8, 0x7a, 0x5c, 0x72, 0xc9, 0x25, 0xa0, 0xad, 0x8b, 0x1d, 0xd3, - 0xb0, 0x0f, 0xab, 0xd5, 0x0a, 0xb2, 0x1d, 0xa0, 0x99, 0x00, 0xfb, 0xf7, 0x27, 0x92, 0xf4, 0x1f, - 0x41, 0x4a, 0x4e, 0x05, 0xb2, 0x89, 0x75, 0x2a, 0x3a, 0xfb, 0x39, 0xeb, 0x48, 0x3a, 0xbb, 0x87, - 0x55, 0x36, 0x77, 0xa1, 0xa5, 0xc7, 0x84, 0x4e, 0xa3, 0x05, 0xe6, 0xa1, 0x11, 0x0c, 0xfb, 0xf8, - 0xea, 0x87, 0xe0, 0x0e, 0x45, 0x31, 0xe2, 0x0f, 0x32, 0x93, 0xd5, 0xce, 0xd2, 0x4f, 0x16, 0x63, - 0xc5, 0xf2, 0x6d, 0x58, 0xb4, 0xe8, 0xb9, 0x08, 0x1f, 0x9c, 0xc6, 0x01, 0xd0, 0x46, 0xfd, 0xc9, - 0x6b, 0xbf, 0xfc, 0x3c, 0x25, 0x3e, 0x03, 0x80, 0xea, 0x7f, 0x90, 0x06, 0x72, 0x3f, 0x95, 0x88, - 0xff, 0xaa, 0xab, 0xae, 0x1a, 0x17, 0xc0, 0xa5, 0x97, 0x5e, 0x0a, 0x0e, 0x9e, 0x1f, 0x7f, 0xf8, - 0xe1, 0x87, 0xa0, 0x81, 0x1f, 0x34, 0x9d, 0xc5, 0x80, 0xbd, 0xfe, 0xfa, 0xeb, 0x44, 0xad, 0xa5, - 0x6c, 0xef, 0xde, 0xaf, 0xd8, 0xa6, 0x4d, 0x7b, 0x90, 0x94, 0x59, 0x02, 0x45, 0x67, 0x1f, 0x33, - 0x38, 0xfd, 0x4c, 0xd1, 0xa6, 0x43, 0xab, 0xd6, 0x04, 0xad, 0x65, 0x08, 0x36, 0x97, 0x07, 0x63, - 0x61, 0x91, 0x39, 0xbd, 0x7e, 0x98, 0x07, 0x9d, 0xa8, 0x52, 0xb4, 0x20, 0xf1, 0xc0, 0x09, 0xac, - 0xfa, 0x74, 0x3b, 0x8e, 0x1e, 0xcf, 0xc0, 0x33, 0xcf, 0x3c, 0xef, 0x1d, 0x27, 0xf9, 0x2c, 0x51, - 0x14, 0xed, 0x34, 0x93, 0xf8, 0x69, 0x01, 0x67, 0x8e, 0x0b, 0x80, 0x56, 0xdf, 0xe7, 0xa7, 0x1b, - 0xf9, 0x8e, 0xb1, 0x8b, 0x01, 0xe0, 0x25, 0xc5, 0x8f, 0xdf, 0x7d, 0xf7, 0x5d, 0x1c, 0x3b, 0x76, - 0x0c, 0x6f, 0xbc, 0xf1, 0x46, 0xec, 0x9c, 0x68, 0x0d, 0x54, 0x9f, 0x91, 0xf5, 0xeb, 0xd7, 0x0b, - 0x3f, 0xfe, 0xf1, 0x4d, 0xf8, 0x78, 0xe9, 0x1a, 0xb6, 0x76, 0xcd, 0x2e, 0x1c, 0x3e, 0x9e, 0x8d, - 0xa3, 0x29, 0x05, 0x48, 0xcf, 0x2e, 0x45, 0x5e, 0x71, 0x0d, 0x4a, 0xab, 0x9b, 0x50, 0x78, 0xba, - 0x16, 0x07, 0x8f, 0xa4, 0xc7, 0x92, 0x5e, 0xbe, 0x6c, 0x33, 0xf6, 0xee, 0x3b, 0x86, 0xfa, 0x46, - 0x15, 0x4e, 0xcb, 0x6b, 0xb0, 0xf2, 0xd3, 0x8d, 0xac, 0xb3, 0xb3, 0x33, 0xeb, 0x6b, 0x00, 0xba, - 0xc8, 0xfd, 0xf6, 0xd1, 0x7b, 0xe7, 0x5d, 0x60, 0xe6, 0x38, 0x80, 0xe2, 0xe2, 0x62, 0x9b, 0x5e, - 0xaf, 0xa7, 0x12, 0x93, 0x82, 0x09, 0x09, 0x09, 0xae, 0x8b, 0x01, 0xd8, 0xb4, 0x69, 0x53, 0xac, - 0x37, 0x78, 0xf2, 0x3c, 0x72, 0x73, 0x73, 0xf1, 0xfc, 0xf3, 0xcf, 0x23, 0x2d, 0x2d, 0x8d, 0xf1, - 0x73, 0x22, 0x04, 0xbc, 0xf8, 0xe2, 0x8b, 0x02, 0x9d, 0x87, 0xb2, 0xb3, 0x73, 0x23, 0xa9, 0x29, - 0xd9, 0xd1, 0xf7, 0xdf, 0x5f, 0x29, 0x6d, 0x58, 0x1f, 0x27, 0x2d, 0x59, 0xb2, 0x9a, 0xad, 0xf8, - 0x64, 0x2b, 0x5b, 0xb3, 0x7a, 0x27, 0xb6, 0x6e, 0x89, 0x87, 0xba, 0x5b, 0x87, 0x01, 0x17, 0x79, - 0x22, 0x8d, 0x11, 0xb9, 0x45, 0xe5, 0x48, 0x3c, 0x98, 0x8c, 0x6b, 0xae, 0x99, 0xc2, 0xf8, 0x07, - 0x08, 0xe7, 0x24, 0x9f, 0x23, 0x08, 0x82, 0x9d, 0xbb, 0x52, 0xea, 0xc5, 0x9f, 0x8f, 0x0b, 0xa0, - 0xb0, 0xb0, 0xd0, 0x41, 0x73, 0x00, 0x1f, 0x60, 0x82, 0xfb, 0xf7, 0xef, 0x77, 0x4c, 0x9e, 0x3c, - 0x19, 0x13, 0x01, 0x38, 0x7e, 0xfc, 0x38, 0xc8, 0x62, 0x23, 0x29, 0x29, 0x29, 0x06, 0x80, 0x38, - 0x19, 0x46, 0xa3, 0x11, 0x34, 0xec, 0xc7, 0x00, 0x34, 0x34, 0x34, 0x80, 0x16, 0xc2, 0x47, 0x64, - 0x10, 0x4e, 0x4c, 0x4c, 0x04, 0xcd, 0x16, 0x51, 0xea, 0x15, 0x1f, 0x5d, 0xe3, 0x27, 0x13, 0x26, - 0x12, 0x73, 0x45, 0xb2, 0xb2, 0xb2, 0x84, 0xc2, 0xc2, 0xe2, 0x68, 0xa3, 0xaa, 0x8b, 0x4a, 0xa8, - 0x19, 0xca, 0xb6, 0x0e, 0xa8, 0x7b, 0x34, 0x31, 0x6f, 0xf5, 0xd4, 0x7f, 0xbc, 0xe0, 0xff, 0xef, - 0xc4, 0xa5, 0x63, 0x52, 0x64, 0x8c, 0x03, 0xd1, 0xe4, 0xe4, 0xe4, 0xf4, 0xd1, 0x73, 0x53, 0xc6, - 0xb5, 0xd3, 0xb4, 0x2d, 0x5b, 0xc9, 0x5d, 0xba, 0x47, 0x46, 0x46, 0x22, 0x7c, 0xfa, 0xda, 0xbb, - 0x77, 0xaf, 0x9b, 0x76, 0x60, 0x42, 0x00, 0x3c, 0x71, 0x1a, 0x2f, 0x41, 0x43, 0x3e, 0x0a, 0x0a, - 0x0a, 0xd0, 0xdb, 0xdb, 0x1b, 0x03, 0xc0, 0x47, 0x4c, 0x0e, 0x80, 0x92, 0xe5, 0xaf, 0xe3, 0xa5, - 0x5d, 0x15, 0xf9, 0x39, 0xe9, 0x06, 0xe3, 0xe7, 0xd4, 0x2f, 0x91, 0x3b, 0xef, 0xbc, 0x13, 0xc4, - 0x70, 0x02, 0x11, 0x85, 0x44, 0x00, 0x83, 0xa7, 0x4b, 0x2b, 0x84, 0xaf, 0xbe, 0x3a, 0x2e, 0x66, - 0x9c, 0xca, 0x87, 0xd6, 0x6c, 0xc6, 0xa9, 0xdc, 0x92, 0x18, 0x9b, 0x1d, 0xdd, 0xfe, 0xb6, 0xd0, - 0x1e, 0xff, 0xc3, 0x80, 0x35, 0x6b, 0xee, 0x40, 0x38, 0x1c, 0x1e, 0xa4, 0x45, 0x0e, 0x90, 0xea, - 0xde, 0x38, 0x21, 0x00, 0x7a, 0xc1, 0x60, 0x28, 0x14, 0xe2, 0x6f, 0xec, 0xd8, 0xbd, 0x7b, 0xb7, - 0x70, 0xb1, 0x1d, 0xa0, 0xc4, 0x59, 0x51, 0x51, 0x91, 0xc8, 0x77, 0x82, 0x97, 0x0b, 0xe9, 0x06, - 0xeb, 0xea, 0xea, 0x92, 0x68, 0x55, 0xb9, 0x5b, 0x95, 0x78, 0xb2, 0x3e, 0xba, 0xd1, 0x10, 0x14, - 0x03, 0x64, 0x32, 0x99, 0x04, 0x7e, 0xce, 0x01, 0x9d, 0x01, 0x40, 0x60, 0x19, 0x95, 0x85, 0xd7, - 0xed, 0x76, 0x87, 0x69, 0x87, 0x84, 0x55, 0x9f, 0x6e, 0x90, 0x72, 0x0a, 0xe4, 0x50, 0x57, 0x1d, - 0x46, 0x53, 0xfc, 0x2f, 0x60, 0x3e, 0xf0, 0x7d, 0xb8, 0x29, 0xcc, 0xdb, 0x64, 0x28, 0x38, 0xfc, - 0x91, 0x83, 0x1a, 0xf7, 0xcb, 0x09, 0x27, 0x32, 0x0e, 0x20, 0x33, 0x93, 0x53, 0xac, 0x14, 0x21, - 0x2d, 0xb0, 0xc5, 0xc5, 0xc5, 0x61, 0xa2, 0x1d, 0xb8, 0xec, 0xb2, 0xcb, 0xf0, 0xe9, 0xa7, 0x9f, - 0x32, 0xce, 0x3a, 0xab, 0x57, 0xaf, 0x66, 0xa4, 0xc4, 0x51, 0xa2, 0x53, 0xe9, 0x8f, 0x2c, 0x54, - 0xc2, 0x88, 0x56, 0xa3, 0x57, 0x5c, 0x71, 0x05, 0x9e, 0x7e, 0xfa, 0x69, 0x50, 0xd2, 0x7c, 0x77, - 0x02, 0x53, 0xa6, 0x4c, 0x61, 0x9c, 0xbd, 0x38, 0x00, 0x7a, 0x9e, 0x44, 0xd7, 0xf1, 0x72, 0xe5, - 0x6c, 0x13, 0x22, 0x4f, 0x25, 0x1c, 0xdc, 0xf1, 0x31, 0x53, 0x7d, 0x79, 0x2f, 0x74, 0x69, 0x4f, - 0x20, 0xd4, 0xb5, 0x8d, 0xe4, 0xea, 0x19, 0x84, 0xb3, 0xff, 0x0d, 0xa3, 0xf1, 0x93, 0x51, 0xb7, - 0xee, 0x4a, 0xf6, 0xfa, 0x93, 0x37, 0x4f, 0xf8, 0x61, 0xb1, 0x8c, 0xb6, 0x26, 0xe1, 0xe4, 0xc9, - 0x93, 0x7c, 0x9b, 0x05, 0x8a, 0xde, 0x2f, 0xbe, 0xf8, 0x22, 0x74, 0x31, 0x00, 0x34, 0xa3, 0xc6, - 0x1a, 0x7c, 0xe9, 0xd2, 0xa5, 0xcc, 0xe9, 0x74, 0x52, 0x83, 0xbe, 0x1f, 0x7b, 0xec, 0xd1, 0x47, - 0x1f, 0xe5, 0x2c, 0x24, 0x2c, 0x59, 0xb2, 0x24, 0x76, 0x7e, 0xeb, 0xad, 0xb7, 0xf2, 0x1d, 0xe2, - 0x65, 0x14, 0xe1, 0xe7, 0x37, 0xdc, 0x70, 0x43, 0x4c, 0x10, 0xdf, 0x7a, 0xeb, 0x2d, 0x46, 0x4e, - 0x32, 0x44, 0xa5, 0x11, 0x20, 0xd2, 0x13, 0xab, 0x8a, 0xd3, 0xc5, 0xca, 0xcf, 0xae, 0x80, 0xab, - 0xee, 0x6d, 0x88, 0x3e, 0x23, 0xe0, 0xe9, 0x00, 0x0c, 0x9b, 0x21, 0xd5, 0x3c, 0x8c, 0x40, 0xf2, - 0x4d, 0xb0, 0x6e, 0x96, 0xa1, 0x6d, 0xb3, 0x6c, 0xcb, 0x84, 0x00, 0xa8, 0x39, 0xa8, 0xff, 0xf2, - 0xf9, 0x8a, 0xf0, 0xe9, 0xa7, 0x97, 0x37, 0xf1, 0x44, 0x2c, 0xc4, 0x01, 0x90, 0x1a, 0x8b, 0xfc, - 0x98, 0x86, 0x9e, 0x28, 0x2f, 0x81, 0x15, 0x2b, 0x56, 0x44, 0xf9, 0x39, 0x29, 0x77, 0xac, 0x7c, - 0x0e, 0x1d, 0x3a, 0x14, 0xe2, 0xe7, 0xb7, 0xdc, 0x72, 0x0b, 0x07, 0x24, 0xc6, 0xc7, 0xc7, 0xc7, - 0xae, 0xff, 0xde, 0xf7, 0xbe, 0x17, 0xdb, 0x01, 0xa2, 0x5d, 0x46, 0x7a, 0x13, 0xa4, 0xde, 0x61, - 0x5c, 0xc9, 0xa9, 0x41, 0xa5, 0x9d, 0x6f, 0xfe, 0x2b, 0xcc, 0x69, 0x33, 0x11, 0xe9, 0x4b, 0x06, - 0x18, 0xbd, 0x8c, 0xa3, 0x10, 0xe8, 0x7c, 0x13, 0xd1, 0xe2, 0xbb, 0xe0, 0x4d, 0xfc, 0x47, 0xf4, - 0x6c, 0x92, 0x89, 0xed, 0x9b, 0x64, 0xb7, 0x4c, 0xb4, 0x03, 0x72, 0xa2, 0x42, 0x91, 0xca, 0x87, - 0xf7, 0x40, 0x88, 0x84, 0x2c, 0x48, 0x3d, 0x30, 0xa1, 0x12, 0x13, 0x8b, 0x08, 0x1c, 0x08, 0xff, - 0xb4, 0x82, 0x27, 0x5c, 0x5b, 0x5b, 0x1b, 0xe0, 0xff, 0x27, 0x83, 0xc7, 0xbd, 0xbb, 0x97, 0x66, - 0xe8, 0xe0, 0xe5, 0x97, 0x5f, 0x4e, 0x82, 0xf4, 0x8c, 0xc4, 0x3f, 0xf0, 0xa5, 0xfe, 0x60, 0xd7, - 0x5f, 0x7f, 0x3d, 0xe3, 0x7d, 0x45, 0x20, 0x18, 0x11, 0x40, 0x84, 0x7a, 0x8e, 0x25, 0x27, 0x27, - 0xc3, 0xe5, 0x72, 0xb1, 0x9a, 0x9a, 0x1a, 0xf6, 0xf8, 0xfc, 0x87, 0xa5, 0xc2, 0x95, 0x53, 0x05, - 0xaf, 0xf2, 0x75, 0x08, 0xc3, 0xf5, 0x94, 0x85, 0x0d, 0xe8, 0x4f, 0x24, 0xdf, 0xb9, 0x10, 0xa1, - 0xcc, 0x5f, 0xc0, 0xb9, 0x63, 0x12, 0x5a, 0xd6, 0xcb, 0xc8, 0xff, 0xc8, 0x2e, 0xb9, 0x00, 0x00, - 0x35, 0xc8, 0x2e, 0xa2, 0xc5, 0x20, 0xe9, 0x80, 0x48, 0xc9, 0x44, 0x68, 0x74, 0x0c, 0x4f, 0xd4, - 0xc4, 0x57, 0x5f, 0x7d, 0x35, 0xa6, 0x4f, 0x9f, 0x1e, 0xbb, 0x27, 0x3d, 0x88, 0x92, 0xa1, 0x0b, - 0xf3, 0xe0, 0x80, 0xc8, 0x1f, 0x45, 0xf8, 0x31, 0xed, 0x88, 0x74, 0xdd, 0x75, 0xd7, 0xb1, 0x57, - 0x5f, 0x7d, 0x35, 0xfa, 0xec, 0xb3, 0xcf, 0xb2, 0x65, 0xcb, 0x96, 0x09, 0xdc, 0x6a, 0x4c, 0x9b, - 0x36, 0x0d, 0x57, 0x5e, 0x79, 0x25, 0x36, 0x6c, 0xd8, 0x10, 0xa1, 0x3e, 0x12, 0xf9, 0x68, 0x4a, - 0xf6, 0x45, 0xa0, 0xf7, 0xe4, 0xf6, 0x44, 0x4a, 0x8d, 0x7f, 0x47, 0xad, 0xda, 0xf5, 0x7d, 0x84, - 0xb4, 0xbb, 0x20, 0x85, 0xec, 0x80, 0x9b, 0xf2, 0xd5, 0xae, 0x82, 0x58, 0x31, 0x07, 0xfe, 0xa3, - 0x3f, 0x82, 0x71, 0x83, 0x0c, 0x8d, 0xeb, 0x65, 0x6f, 0x8c, 0xb7, 0x03, 0x5c, 0xc8, 0xb8, 0x1b, - 0x6d, 0x26, 0x01, 0xc9, 0xa5, 0x44, 0x8c, 0xb4, 0x82, 0x17, 0xec, 0x00, 0xef, 0x0b, 0x52, 0x5b, - 0x89, 0x9a, 0x34, 0xb6, 0x9a, 0x64, 0x21, 0x18, 0x85, 0x44, 0x8a, 0x1c, 0xdb, 0x91, 0xd7, 0x5e, - 0x7b, 0x2d, 0xfa, 0xce, 0x3b, 0xef, 0x44, 0xa8, 0x44, 0x84, 0xa9, 0x53, 0xa7, 0x32, 0xda, 0x81, - 0xe8, 0x0b, 0x2f, 0xbc, 0x20, 0x52, 0xc9, 0xb1, 0x79, 0xf3, 0xe6, 0x61, 0xcd, 0x9a, 0x35, 0x31, - 0x93, 0xf8, 0xdc, 0x73, 0xcf, 0xf1, 0x6b, 0x45, 0x62, 0x2c, 0x46, 0x83, 0x3a, 0x23, 0x00, 0x8c, - 0x00, 0x88, 0x2a, 0x95, 0x2a, 0xab, 0x60, 0xe3, 0x6c, 0xdb, 0x40, 0xde, 0x43, 0x88, 0xd8, 0x72, - 0x48, 0x06, 0x42, 0xc0, 0x60, 0x26, 0x39, 0xa0, 0xff, 0x44, 0x24, 0x7f, 0x16, 0xdc, 0x7b, 0xa7, - 0xa0, 0x75, 0xad, 0xcc, 0xdb, 0xb4, 0x56, 0xf6, 0x83, 0x09, 0x01, 0x70, 0x01, 0x21, 0x61, 0xca, - 0x9c, 0x33, 0x67, 0x8e, 0x89, 0xfe, 0xcf, 0x87, 0x66, 0x2b, 0xc5, 0x30, 0x85, 0xf7, 0x77, 0xbf, - 0xfb, 0x5d, 0x98, 0x7a, 0x45, 0xba, 0xe7, 0x9e, 0x7b, 0x44, 0x4a, 0x48, 0x22, 0xb0, 0x9c, 0x0a, - 0x79, 0xf3, 0x33, 0xbe, 0xb2, 0xbc, 0x1f, 0xe8, 0x98, 0x8b, 0x90, 0x97, 0x83, 0xb9, 0xf7, 0xde, - 0x7b, 0x45, 0x4e, 0x9f, 0xfc, 0x9c, 0xea, 0x5d, 0x22, 0x36, 0x0a, 0x73, 0xab, 0xc1, 0x5f, 0x83, - 0x6b, 0x09, 0xe9, 0x02, 0x0b, 0x04, 0x02, 0x8c, 0x66, 0x70, 0x46, 0x1e, 0xc7, 0x47, 0xbb, 0x91, - 0x54, 0x27, 0xcf, 0x55, 0xcb, 0x3f, 0x9b, 0xca, 0x02, 0xea, 0xe5, 0x10, 0xdd, 0xed, 0xf4, 0x6a, - 0x64, 0x4a, 0x4d, 0xbb, 0xc0, 0xea, 0xe7, 0x23, 0x98, 0xfa, 0x2f, 0xb0, 0x6d, 0xbe, 0x14, 0xb5, - 0xab, 0x64, 0xe9, 0x17, 0x05, 0x40, 0xa6, 0x2e, 0x85, 0x86, 0xf7, 0x6a, 0xaa, 0xe9, 0x0b, 0x62, - 0xf6, 0xec, 0xd9, 0x03, 0x33, 0x67, 0xce, 0x74, 0x35, 0x36, 0x36, 0x76, 0xd3, 0x1b, 0x8f, 0xd2, - 0xf3, 0x18, 0x39, 0x44, 0x4c, 0x9a, 0x34, 0x89, 0x0b, 0x18, 0x23, 0xc3, 0xc5, 0x01, 0xd1, 0x9d, - 0x18, 0xa1, 0x95, 0x16, 0xe9, 0xb5, 0x45, 0xaa, 0xf5, 0x20, 0xf9, 0x2b, 0x81, 0x2c, 0x8a, 0x48, - 0x89, 0x87, 0xf8, 0x39, 0xdd, 0x07, 0x07, 0x07, 0x07, 0x03, 0xc4, 0x44, 0x8c, 0xcf, 0xd6, 0x0b, - 0x16, 0x2c, 0x18, 0xa5, 0xe7, 0x25, 0x0d, 0x0d, 0x0d, 0x0d, 0xae, 0x7e, 0xe5, 0x2e, 0x6f, 0xc7, - 0xfe, 0x9b, 0x10, 0x36, 0x1e, 0x00, 0x13, 0x88, 0x69, 0x5d, 0x15, 0x40, 0xf7, 0x47, 0x10, 0x4a, - 0x7f, 0x05, 0xdf, 0xa1, 0xeb, 0xd1, 0xb1, 0x46, 0x86, 0xaa, 0x95, 0xb2, 0x79, 0x13, 0x02, 0xa0, - 0xc4, 0x72, 0x69, 0x95, 0x2d, 0xe3, 0x05, 0x79, 0x71, 0x0d, 0x51, 0x5f, 0xf2, 0x19, 0x9f, 0x42, - 0x89, 0x26, 0xd3, 0x0c, 0x51, 0x45, 0x13, 0x52, 0x90, 0x83, 0xe1, 0xc9, 0xf0, 0x0f, 0xc5, 0xf8, - 0x8a, 0x53, 0x83, 0x0a, 0x1f, 0x7f, 0xfc, 0xb1, 0xb4, 0x70, 0xe1, 0x42, 0x46, 0x09, 0xb2, 0xf9, - 0xf3, 0xe7, 0x33, 0xee, 0xa1, 0xf8, 0xee, 0xd1, 0xb9, 0x40, 0xfc, 0xcf, 0x49, 0x40, 0xe2, 0x16, - 0x84, 0x7a, 0x65, 0x90, 0x8e, 0x6b, 0x89, 0x9d, 0xfa, 0x67, 0xde, 0x76, 0x9b, 0x23, 0xe9, 0x35, - 0x59, 0x9b, 0x53, 0xfe, 0x14, 0xa2, 0xf6, 0x32, 0x20, 0x4a, 0xd8, 0xac, 0xe4, 0xae, 0x5b, 0x9f, - 0x8e, 0x69, 0x83, 0x2b, 0x6e, 0x32, 0x6a, 0x57, 0xc8, 0xfa, 0xf3, 0xd7, 0xca, 0x26, 0xc7, 0x00, - 0x90, 0xc0, 0x6c, 0x25, 0x65, 0x3d, 0x0b, 0xe0, 0x7f, 0x1a, 0x54, 0x52, 0x39, 0xc4, 0x3a, 0x56, - 0xae, 0xac, 0x54, 0x86, 0x61, 0xaa, 0x69, 0x51, 0x2e, 0x97, 0x33, 0x3a, 0x67, 0xc4, 0x4c, 0x02, - 0x51, 0xa6, 0x40, 0x65, 0x22, 0x92, 0xd7, 0x67, 0xb4, 0x08, 0xa0, 0x7b, 0x81, 0x98, 0x8f, 0x7f, - 0x7c, 0xc9, 0x96, 0x2f, 0x5f, 0xae, 0xa3, 0xd7, 0x18, 0x78, 0xfb, 0xed, 0xb7, 0xed, 0xbf, 0xfc, - 0xe5, 0x2f, 0x17, 0x3f, 0x3d, 0x4b, 0xf6, 0x84, 0xfc, 0xb3, 0xef, 0x08, 0xc1, 0xae, 0x8d, 0x90, - 0x62, 0xda, 0x40, 0xe5, 0x64, 0xd8, 0x44, 0xda, 0x30, 0x17, 0x81, 0xa4, 0x1b, 0x61, 0x58, 0x27, - 0x43, 0xe9, 0x52, 0xd9, 0xb6, 0xaf, 0x03, 0x20, 0x05, 0x41, 0xee, 0xff, 0x36, 0x08, 0x48, 0x0d, - 0x25, 0x3f, 0x42, 0x16, 0x23, 0x4a, 0x2d, 0x10, 0xb3, 0x28, 0x54, 0x1a, 0x7e, 0xad, 0x56, 0xeb, - 0xe7, 0x42, 0xa7, 0x50, 0x28, 0x38, 0x20, 0x89, 0x56, 0x9b, 0x0b, 0x21, 0xff, 0x94, 0x4f, 0xa2, - 0x06, 0xb7, 0x93, 0xe5, 0xe8, 0xa3, 0xbe, 0xe9, 0xe5, 0xdf, 0x57, 0x10, 0x69, 0x4c, 0xdf, 0xf9, - 0xb4, 0xec, 0x4b, 0xcd, 0xb1, 0xdb, 0x48, 0x1b, 0xb8, 0x9f, 0xa3, 0xca, 0x74, 0xd0, 0x7c, 0xdf, - 0x41, 0xda, 0x50, 0x74, 0x17, 0x46, 0xf7, 0x5f, 0x87, 0x8a, 0x65, 0x97, 0x88, 0x65, 0xcb, 0x65, - 0xb7, 0xca, 0xe8, 0x49, 0x2b, 0xa8, 0xbe, 0x6d, 0xfc, 0xcb, 0x3c, 0x7a, 0xc3, 0x6f, 0x2d, 0xa8, - 0x84, 0x9c, 0x7c, 0xc2, 0xa3, 0x44, 0x25, 0x8f, 0xc7, 0x23, 0x72, 0xd5, 0xa5, 0x08, 0xd3, 0x63, - 0x01, 0x7a, 0x2c, 0x4c, 0xa0, 0xf8, 0x63, 0x22, 0x99, 0xc7, 0x10, 0xf9, 0x2f, 0xdf, 0x4b, 0x2f, - 0xbd, 0xe4, 0x98, 0x35, 0x6b, 0xd6, 0x53, 0xb1, 0x55, 0x95, 0xc9, 0x2e, 0x9b, 0x36, 0x55, 0x76, - 0x5b, 0xfa, 0x9b, 0x97, 0xda, 0xc6, 0xea, 0xff, 0xa8, 0x0d, 0xa2, 0xe1, 0x0b, 0xe8, 0x8f, 0xfc, - 0x02, 0xf9, 0xcb, 0xbe, 0x8b, 0x7d, 0xcb, 0x1e, 0xb6, 0x67, 0xac, 0x95, 0x4d, 0xe2, 0x3a, 0x70, - 0x3d, 0xd9, 0x83, 0x5a, 0x62, 0x1e, 0x3b, 0x0f, 0xf2, 0x46, 0x67, 0x83, 0x54, 0xfa, 0xbc, 0xa0, - 0x7e, 0x39, 0x2f, 0xe8, 0xb9, 0xe7, 0x05, 0xed, 0xe6, 0xd9, 0xa0, 0x85, 0x39, 0x13, 0x6e, 0xce, - 0x48, 0x74, 0xbd, 0x44, 0xf5, 0x2f, 0x12, 0xe3, 0x88, 0x64, 0x3b, 0x22, 0x73, 0xe7, 0xce, 0x0d, - 0xf2, 0xf8, 0xfd, 0xef, 0x7f, 0xef, 0x23, 0x4d, 0xb0, 0xd1, 0x35, 0xdd, 0x94, 0xf8, 0x59, 0xa1, - 0xa2, 0xdb, 0x94, 0xf7, 0x1e, 0x92, 0x2d, 0xae, 0xdb, 0xf2, 0x7d, 0xf8, 0xbb, 0xb6, 0x43, 0x53, - 0xbc, 0x1e, 0xf9, 0x2b, 0x6f, 0x42, 0x5e, 0xc2, 0xdb, 0x38, 0x7a, 0x2c, 0x85, 0x4c, 0xe1, 0x16, - 0xc3, 0x5f, 0xed, 0xa7, 0x06, 0xbc, 0x2c, 0xee, 0xb8, 0xe3, 0x8e, 0x57, 0xee, 0xbe, 0xfb, 0xee, - 0x21, 0x52, 0xf2, 0x01, 0xa2, 0x5c, 0xdb, 0x1f, 0xbe, 0x50, 0x21, 0x8a, 0x81, 0x9d, 0x8c, 0x9f, - 0xeb, 0xf6, 0xdb, 0x6f, 0x9f, 0x7f, 0x81, 0x48, 0xc9, 0x64, 0x37, 0x26, 0x3c, 0x2f, 0xcb, 0xcf, - 0xfa, 0xf0, 0x5a, 0x51, 0x5d, 0xb8, 0x1e, 0x5a, 0xa3, 0x06, 0x55, 0xf5, 0x4d, 0x38, 0x9a, 0x94, - 0x81, 0x4f, 0x3e, 0x59, 0xb9, 0xe4, 0xaf, 0xfe, 0x5b, 0x89, 0x19, 0x33, 0x66, 0x5c, 0x49, 0x54, - 0xfc, 0x11, 0x01, 0x71, 0x93, 0x47, 0xb2, 0x52, 0x49, 0xd9, 0x88, 0x92, 0x4d, 0xc4, 0x70, 0x4d, - 0xe3, 0xfa, 0x1c, 0x99, 0x6c, 0xd2, 0x2d, 0xd3, 0x64, 0xf7, 0xcc, 0x9e, 0xf1, 0x9d, 0xfb, 0x77, - 0xc4, 0xc5, 0xa5, 0xa7, 0x66, 0x64, 0xda, 0x13, 0x0e, 0x1c, 0x32, 0xbf, 0xf3, 0xce, 0x7b, 0x6b, - 0xce, 0xec, 0xd6, 0xdf, 0xe4, 0x07, 0x1a, 0x54, 0x2e, 0xd7, 0x90, 0xb1, 0xdb, 0x40, 0xbb, 0x12, - 0xa0, 0x7b, 0x1f, 0x81, 0x9a, 0x3d, 0xa1, 0xdb, 0x94, 0xc9, 0xae, 0xa0, 0xb8, 0x92, 0xe2, 0x47, - 0x14, 0xff, 0xcc, 0x1b, 0x9c, 0xe2, 0xf2, 0xbf, 0x8b, 0x5f, 0xab, 0xdc, 0x7c, 0xf3, 0xcd, 0x93, - 0xbe, 0xfe, 0x85, 0xc5, 0x9f, 0x1b, 0xff, 0x05, 0x15, 0x63, 0xa5, 0xc9, 0x16, 0xbd, 0x27, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0x87, 0x00, 0x00, 0x13, 0x81, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xdd, 0x5a, 0x07, 0x74, 0x5b, + 0x65, 0x96, 0x16, 0x25, 0xc9, 0x12, 0x86, 0x13, 0xca, 0xc2, 0x0e, 0xc9, 0x72, 0x58, 0xd8, 0xb0, + 0x30, 0x94, 0xb3, 0x90, 0x90, 0x02, 0x0c, 0x0b, 0x01, 0x02, 0x24, 0x90, 0x1c, 0xca, 0x10, 0x3a, + 0x2c, 0x2d, 0x94, 0x84, 0x34, 0x52, 0x48, 0x99, 0xf4, 0x4a, 0x48, 0x2f, 0x8e, 0x49, 0x21, 0x8e, + 0xed, 0x38, 0xb6, 0xe3, 0xb8, 0x97, 0xd8, 0xb2, 0xe3, 0x26, 0x17, 0xd9, 0x96, 0x6d, 0xb9, 0x48, + 0x96, 0x25, 0xd9, 0x2a, 0xb6, 0x2c, 0xb9, 0xc8, 0x92, 0xd5, 0xdf, 0x7b, 0xff, 0xdd, 0xef, 0xd7, + 0x4e, 0x32, 0x09, 0xb1, 0x33, 0xcc, 0x2e, 0x53, 0x76, 0x75, 0xce, 0xf5, 0x7b, 0xbf, 0xf5, 0xf4, + 0x74, 0xbf, 0xff, 0xde, 0xfb, 0xdd, 0xef, 0x4a, 0x92, 0x11, 0x91, 0xec, 0xff, 0xb2, 0xc9, 0xfe, + 0x5f, 0x03, 0x18, 0x3f, 0x7e, 0xfc, 0xb0, 0x99, 0x33, 0x67, 0x1e, 0x7f, 0xe5, 0x95, 0x57, 0xf2, + 0x5f, 0x7c, 0xf1, 0xc5, 0x55, 0xd3, 0xa6, 0x4d, 0x7b, 0xea, 0x8d, 0x37, 0xde, 0xb8, 0x6e, 0xb0, + 0x6b, 0xf1, 0xdc, 0x3f, 0xe3, 0xda, 0xd4, 0x19, 0x33, 0x66, 0x1c, 0x7b, 0xee, 0xb9, 0xe7, 0xee, + 0xfe, 0xbb, 0x00, 0xf0, 0xfc, 0xf3, 0xcf, 0xcf, 0x5e, 0xb5, 0x6a, 0x95, 0x4d, 0xa7, 0xd3, 0x99, + 0x92, 0x93, 0x93, 0xcd, 0x0b, 0x17, 0x2e, 0x74, 0xc0, 0xd1, 0x20, 0x1c, 0xad, 0x9d, 0x3e, 0x7d, + 0xfa, 0x0e, 0x3c, 0x3f, 0xe3, 0x85, 0x17, 0x5e, 0xb8, 0x99, 0x5f, 0x0b, 0xc7, 0xe5, 0xf1, 0xf1, + 0xf1, 0xe6, 0xac, 0xac, 0x2c, 0x33, 0x00, 0xfb, 0xb0, 0x8e, 0xc4, 0x35, 0xbf, 0xfe, 0x9b, 0x02, + 0x80, 0xa3, 0x49, 0xb5, 0xb5, 0xb5, 0x26, 0x9c, 0x37, 0xc1, 0xea, 0x61, 0x66, 0x51, 0x14, 0xed, + 0x1d, 0x1d, 0x1d, 0xe6, 0xbc, 0xbc, 0x3c, 0xf3, 0xda, 0xb5, 0x6b, 0x3b, 0xe1, 0x68, 0xf0, 0xe5, + 0x97, 0x5f, 0xb6, 0xbe, 0xf6, 0xda, 0x6b, 0xc1, 0x9c, 0x9c, 0x9c, 0x7e, 0xab, 0xd5, 0xda, 0x1a, + 0x0c, 0x06, 0x3b, 0x13, 0x12, 0x12, 0x2c, 0xaf, 0xbe, 0xfa, 0xaa, 0x77, 0xdb, 0xae, 0xdd, 0xc9, + 0x8a, 0x86, 0xd6, 0x13, 0x15, 0x1a, 0xe3, 0xf6, 0x72, 0x6d, 0xdb, 0x3c, 0x55, 0x53, 0xeb, 0x4c, + 0x55, 0x83, 0xf6, 0xd1, 0xb2, 0xa6, 0xa6, 0x9b, 0xff, 0xe2, 0x00, 0x5e, 0x7a, 0xe9, 0xa5, 0x2e, + 0xb7, 0xdb, 0x6d, 0xc1, 0x79, 0x3a, 0x2c, 0x6a, 0x60, 0x60, 0x20, 0x06, 0xc7, 0x78, 0x58, 0x1e, + 0xac, 0x06, 0x66, 0x64, 0x8c, 0x39, 0x8c, 0x46, 0x63, 0xb0, 0xbc, 0xbc, 0x5c, 0x8c, 0x8c, 0x8c, + 0x0c, 0x7d, 0xf2, 0xe9, 0xa7, 0xc2, 0xae, 0x03, 0x91, 0xa2, 0xbc, 0x52, 0x25, 0xd5, 0x69, 0x75, + 0x54, 0xa7, 0x33, 0x50, 0x49, 0x53, 0x3b, 0x2b, 0x6d, 0x36, 0x09, 0x15, 0x9a, 0xb6, 0x50, 0x95, + 0x46, 0x2f, 0x54, 0x6b, 0x74, 0xa2, 0xb2, 0xbe, 0x49, 0xcc, 0xaf, 0xd1, 0x66, 0x15, 0x55, 0xd6, + 0xdf, 0xf5, 0x17, 0x01, 0xc0, 0x73, 0x1a, 0x3b, 0xe8, 0xc7, 0xb9, 0x1d, 0x16, 0xd3, 0xd7, 0xd7, + 0x17, 0x3b, 0x72, 0xe4, 0xc8, 0xe0, 0xe8, 0xd1, 0xa3, 0x5d, 0x00, 0xd6, 0xb2, 0x6d, 0xdb, 0xb6, + 0x62, 0x8d, 0x46, 0x93, 0x68, 0xb3, 0xd9, 0x0a, 0x9a, 0x9a, 0x9a, 0x42, 0xb8, 0x26, 0xe4, 0xf1, + 0xfb, 0xbd, 0xb5, 0xda, 0x56, 0xaa, 0xd5, 0x9b, 0xa8, 0x54, 0x67, 0x67, 0xd9, 0x9a, 0x5e, 0x16, + 0x59, 0xde, 0x4d, 0x3b, 0x72, 0x0d, 0x6c, 0x5b, 0x86, 0x86, 0xad, 0x49, 0x6a, 0x90, 0x36, 0x64, + 0x9b, 0x1d, 0x3b, 0xcb, 0xdc, 0xba, 0x04, 0x55, 0x77, 0x77, 0x91, 0xda, 0x10, 0x28, 0x55, 0xaa, + 0xd8, 0xd9, 0x0a, 0x75, 0x51, 0x5e, 0x51, 0xf9, 0x6f, 0x7e, 0x51, 0x00, 0xc8, 0xef, 0xb7, 0xb6, + 0x6e, 0xdd, 0x6a, 0xc5, 0x79, 0x2b, 0xdf, 0x7d, 0x6e, 0x48, 0x8d, 0x13, 0xe9, 0xe9, 0xe9, 0x99, + 0xf3, 0xe6, 0xcd, 0xab, 0x9e, 0x34, 0x69, 0x92, 0xe5, 0xfa, 0xeb, 0xaf, 0x0f, 0x8e, 0x19, 0x33, + 0x46, 0x2a, 0x2e, 0x2e, 0xf6, 0x75, 0x76, 0xf7, 0x7a, 0x6a, 0x9b, 0xb5, 0x54, 0xae, 0xb7, 0xb1, + 0xe8, 0x06, 0xbf, 0x14, 0x5b, 0x3f, 0xc0, 0xd2, 0x5a, 0x43, 0xa2, 0xdc, 0x4c, 0xa2, 0xdc, 0xc4, + 0xc4, 0xec, 0x16, 0x2f, 0x8b, 0xaf, 0xee, 0x64, 0xdb, 0x93, 0x95, 0x6c, 0xc1, 0xc1, 0x0c, 0xb6, + 0x20, 0x32, 0xc7, 0xbd, 0x26, 0xb9, 0xd1, 0x14, 0x57, 0xd9, 0xd9, 0x97, 0xaf, 0x6a, 0x09, 0xe4, + 0x97, 0x56, 0x4a, 0x99, 0xe7, 0xaa, 0x3e, 0xff, 0xc5, 0x00, 0xa0, 0x00, 0x23, 0x0a, 0x0b, 0x0b, + 0xcd, 0x38, 0x57, 0x72, 0xe7, 0x91, 0xd3, 0xd9, 0x37, 0xdd, 0x74, 0x93, 0x77, 0xc2, 0x84, 0x09, + 0x96, 0x25, 0x4b, 0x96, 0x54, 0x22, 0xdf, 0xd3, 0x5b, 0x5b, 0x5b, 0x8b, 0xe6, 0xcf, 0x9f, 0x2f, + 0x1c, 0x3c, 0x1a, 0xc5, 0x6a, 0x1a, 0x35, 0x24, 0xd7, 0x76, 0x4b, 0xfb, 0x14, 0x0e, 0xe9, 0x44, + 0x55, 0x77, 0x30, 0xd3, 0x20, 0x78, 0xa3, 0x95, 0x0e, 0xe1, 0x87, 0xa2, 0x76, 0x96, 0xa8, 0x76, + 0x05, 0xcf, 0xb6, 0x31, 0xff, 0x39, 0x0b, 0x09, 0x8a, 0x4e, 0x62, 0xc5, 0x56, 0x89, 0x25, 0xab, + 0x9d, 0xec, 0x68, 0xb1, 0x51, 0xda, 0x94, 0x50, 0x19, 0x58, 0x15, 0x53, 0x2a, 0x25, 0x29, 0xb4, + 0x52, 0x4e, 0x7e, 0x09, 0x5b, 0xbf, 0x6d, 0xdf, 0xbe, 0x67, 0x9e, 0x79, 0x66, 0xcc, 0xcf, 0x06, + 0x00, 0x5a, 0xbc, 0x06, 0x4c, 0xf2, 0x11, 0x6c, 0xeb, 0x79, 0x9b, 0x3a, 0x75, 0xea, 0x56, 0xd0, + 0x66, 0xcf, 0x8e, 0x1d, 0x3b, 0x5c, 0x3b, 0x77, 0xee, 0x34, 0x6e, 0xd9, 0xb2, 0xa5, 0x01, 0x69, + 0xd3, 0x73, 0xcf, 0x3d, 0xf7, 0xd0, 0xd8, 0xb1, 0x63, 0xe9, 0xde, 0x7b, 0xef, 0x65, 0xf7, 0xdd, + 0x77, 0x9f, 0x34, 0x6e, 0xdc, 0x38, 0x76, 0x32, 0xe1, 0xb4, 0x58, 0x59, 0xd7, 0x40, 0x49, 0xaa, + 0x4e, 0xb6, 0xbf, 0xa4, 0x5b, 0x5c, 0x1f, 0xa7, 0xa0, 0x15, 0x3f, 0xe6, 0xd1, 0xb6, 0x94, 0x3a, + 0x69, 0x5f, 0xae, 0x36, 0xb4, 0x2e, 0xb6, 0x44, 0xdc, 0x92, 0x58, 0xc1, 0x76, 0xa7, 0xd7, 0x49, + 0x87, 0x0b, 0x74, 0xc1, 0x63, 0x85, 0xad, 0xc1, 0xe8, 0x62, 0x9d, 0x78, 0xac, 0x40, 0xcb, 0x0e, + 0xe6, 0x34, 0xb0, 0x63, 0x85, 0x7a, 0x96, 0x6b, 0x08, 0x48, 0xf1, 0x2a, 0x47, 0x20, 0x4b, 0xd9, + 0xc2, 0x52, 0xb3, 0x0a, 0x68, 0xf6, 0x97, 0x73, 0xfd, 0xf0, 0xa1, 0x63, 0xca, 0x94, 0x29, 0x2f, + 0xfd, 0x49, 0x00, 0x70, 0xf4, 0x3f, 0x67, 0xcf, 0x9e, 0xed, 0x38, 0x7b, 0xf6, 0xac, 0x25, 0x37, + 0x37, 0xd7, 0xc2, 0x8f, 0xb0, 0x8e, 0x33, 0x67, 0xce, 0x30, 0x44, 0x40, 0x2c, 0x28, 0x28, 0xf0, + 0xe5, 0xe7, 0xe7, 0x7b, 0x41, 0x91, 0x52, 0x6c, 0x6c, 0x2c, 0x5d, 0x6c, 0x71, 0x71, 0xa7, 0xa8, + 0xb4, 0x4a, 0x45, 0x85, 0x8d, 0xed, 0x74, 0xa0, 0xbc, 0x9f, 0xa2, 0xca, 0x3b, 0x58, 0xac, 0xb2, + 0x83, 0x8e, 0x96, 0x98, 0xe8, 0x47, 0x85, 0x99, 0x62, 0x2a, 0x3b, 0x28, 0xb6, 0xc2, 0xc2, 0x4e, + 0x94, 0x18, 0xd8, 0xa9, 0xb2, 0x36, 0x4a, 0xaa, 0xb2, 0x48, 0x49, 0xd5, 0x56, 0x29, 0xa9, 0xca, + 0x2c, 0x65, 0xd4, 0x75, 0x48, 0xf1, 0x15, 0x66, 0xb6, 0x3d, 0x51, 0xc1, 0x8e, 0x9f, 0x6b, 0x15, + 0x53, 0xd5, 0x3d, 0x52, 0x42, 0x8d, 0x3d, 0x94, 0x53, 0xd1, 0xcc, 0xce, 0xa4, 0xe7, 0x33, 0x95, + 0xaa, 0xd6, 0x82, 0xcd, 0x6c, 0xfc, 0x93, 0x00, 0xf8, 0x8e, 0x73, 0xa7, 0xb1, 0x68, 0x87, 0x69, + 0xb8, 0xf9, 0x7c, 0x3e, 0x73, 0x77, 0x77, 0xb7, 0xc8, 0x0b, 0x13, 0xd6, 0x0f, 0xa6, 0x71, 0x69, + 0xb5, 0x5a, 0x42, 0xd1, 0x5e, 0x62, 0x45, 0x8a, 0x0a, 0x2a, 0xa9, 0xaa, 0xa5, 0x34, 0xcd, 0x00, + 0x3b, 0xd9, 0xe0, 0x67, 0x99, 0x2d, 0x5e, 0xca, 0x33, 0x86, 0x28, 0x53, 0x17, 0xa0, 0xb4, 0xa6, + 0x7e, 0x2a, 0x30, 0xfa, 0xa9, 0xb8, 0x3d, 0x40, 0x05, 0x7a, 0x37, 0x2b, 0x36, 0x78, 0x59, 0x95, + 0x4d, 0x92, 0x54, 0x0e, 0x12, 0x2b, 0xac, 0x02, 0x53, 0x77, 0x4b, 0x52, 0x91, 0x7e, 0x80, 0x25, + 0x29, 0x4d, 0x52, 0x64, 0x4e, 0xad, 0x50, 0xd6, 0xc9, 0xc4, 0x02, 0x83, 0x2f, 0x14, 0x5b, 0xd6, + 0xc6, 0x32, 0xf2, 0xcb, 0x59, 0x76, 0x7e, 0xb9, 0x17, 0xbe, 0x9d, 0xfb, 0x73, 0x00, 0x70, 0xe7, + 0xd5, 0xed, 0xed, 0xed, 0x7a, 0xec, 0xb8, 0x1b, 0x85, 0x29, 0x2a, 0x95, 0xca, 0x10, 0xcc, 0x5b, + 0x52, 0x52, 0x12, 0x40, 0x24, 0x48, 0xad, 0x56, 0x5f, 0x30, 0xf4, 0x01, 0x42, 0xe1, 0x51, 0x41, + 0xbd, 0x91, 0x62, 0x9b, 0x25, 0x76, 0xbc, 0xc2, 0x46, 0x59, 0x00, 0x50, 0xd0, 0x16, 0xa4, 0x9c, + 0xd6, 0x00, 0xe5, 0x68, 0xfb, 0x49, 0xae, 0x73, 0x91, 0xc2, 0x1c, 0xa0, 0xc2, 0x56, 0x17, 0xcb, + 0x6d, 0x72, 0x90, 0xd2, 0x1a, 0x60, 0xb5, 0x00, 0x50, 0xdd, 0x29, 0x4a, 0xf5, 0x5d, 0x41, 0x96, + 0x87, 0xff, 0xa5, 0xd5, 0x98, 0xa5, 0xfd, 0xc9, 0xa5, 0x01, 0x65, 0x17, 0xb9, 0xaa, 0xba, 0x28, + 0x50, 0x66, 0x11, 0x84, 0xac, 0xb2, 0x26, 0x76, 0x22, 0x2e, 0x95, 0x9e, 0x7d, 0xf6, 0x59, 0x25, + 0xec, 0x9f, 0xae, 0x08, 0x80, 0xe7, 0xfb, 0xc5, 0x00, 0x6a, 0x6a, 0x6a, 0xcc, 0x71, 0x71, 0x71, + 0x02, 0x52, 0x48, 0x42, 0xf7, 0xe5, 0xc7, 0xe0, 0xc9, 0x93, 0x27, 0xc5, 0xed, 0xdb, 0xb7, 0x53, + 0x5a, 0x5a, 0x5a, 0xd8, 0xf9, 0xfa, 0xfa, 0x7a, 0xda, 0xb1, 0x73, 0x27, 0xe5, 0x15, 0x2a, 0x28, + 0xa3, 0xc1, 0x41, 0x29, 0x7a, 0x26, 0xed, 0xc9, 0x6e, 0xa6, 0xa3, 0x85, 0x06, 0x2a, 0x6a, 0x0f, + 0xd2, 0x39, 0xa3, 0x8f, 0xb2, 0x1a, 0x7b, 0xa8, 0xd0, 0xe0, 0xa1, 0x32, 0xb3, 0x9f, 0xe2, 0x8a, + 0x9b, 0xe9, 0xac, 0xba, 0x83, 0x15, 0xeb, 0xfb, 0x89, 0x03, 0xa8, 0x73, 0x30, 0xb1, 0xc6, 0xea, + 0xa5, 0x62, 0x5d, 0x1f, 0xcb, 0xac, 0x35, 0x4b, 0xdb, 0xa2, 0x32, 0x58, 0x95, 0x35, 0xe8, 0xac, + 0x71, 0x90, 0xb3, 0xda, 0x4e, 0x03, 0xf2, 0xe6, 0x6e, 0x76, 0x32, 0x31, 0x9d, 0x76, 0xed, 0x39, + 0xe0, 0xc4, 0x06, 0x7b, 0xe0, 0xe3, 0x26, 0xc8, 0x93, 0x51, 0x3f, 0x0b, 0x80, 0x24, 0x49, 0x0d, + 0xa5, 0xa5, 0xa5, 0x0c, 0x29, 0x23, 0x36, 0x37, 0x37, 0x7b, 0x91, 0x2a, 0x03, 0x55, 0x55, 0x55, + 0xa2, 0x42, 0xa1, 0xa0, 0x8b, 0x41, 0x64, 0x66, 0xe5, 0x50, 0xb6, 0xbc, 0x88, 0x52, 0xeb, 0xbb, + 0x28, 0x55, 0x1b, 0x60, 0x09, 0xb5, 0x3d, 0x74, 0x30, 0x57, 0x43, 0x71, 0x0a, 0x43, 0xd8, 0xe9, + 0x0c, 0xfc, 0xbf, 0xc4, 0xe8, 0xa5, 0x32, 0x93, 0x9f, 0xa2, 0xe5, 0xf5, 0x2c, 0x45, 0x69, 0xa4, + 0xb2, 0x76, 0x0f, 0x52, 0x87, 0x44, 0xad, 0x93, 0x44, 0x65, 0xbb, 0x9b, 0x55, 0xb6, 0xbb, 0x58, + 0x9e, 0xda, 0x22, 0xed, 0x8b, 0xcf, 0x13, 0x8b, 0x34, 0x76, 0x2f, 0x30, 0xf7, 0xe1, 0x79, 0x77, + 0xb9, 0xc9, 0x2b, 0xc6, 0xa7, 0x9f, 0xa3, 0xe4, 0xf4, 0x42, 0x9f, 0xd7, 0xeb, 0xb5, 0xa2, 0x41, + 0x9a, 0x00, 0xa0, 0x1f, 0x45, 0xbd, 0xe4, 0xe9, 0xa7, 0x9f, 0xfe, 0x87, 0x2b, 0x02, 0x80, 0xb3, + 0x36, 0xb0, 0x4e, 0xd8, 0x59, 0x18, 0xe3, 0xc6, 0xd7, 0x28, 0x70, 0xba, 0x18, 0x44, 0x06, 0x00, + 0xa4, 0x67, 0x17, 0xd0, 0x99, 0x5a, 0x5b, 0xb8, 0x68, 0x53, 0x1a, 0x5d, 0x94, 0xa3, 0xf3, 0xd1, + 0xa1, 0x2c, 0x15, 0x25, 0x96, 0x6a, 0xe9, 0x5c, 0x4b, 0x0f, 0x80, 0xf8, 0xa8, 0xc2, 0x02, 0x00, + 0xf9, 0x00, 0x50, 0xa1, 0xa7, 0xba, 0x2e, 0x41, 0xd2, 0xc1, 0x79, 0x04, 0x42, 0x54, 0x1a, 0xfb, + 0x58, 0x7d, 0xa7, 0x8f, 0x95, 0x68, 0x3a, 0xa4, 0xe8, 0x2c, 0x85, 0x20, 0x57, 0x19, 0x05, 0xbd, + 0x93, 0x9c, 0xba, 0x3e, 0xf2, 0xaa, 0xac, 0xbe, 0xd0, 0xa9, 0x8c, 0x22, 0xf6, 0xc3, 0xb1, 0xc4, + 0x00, 0x7c, 0xca, 0xe6, 0x1d, 0xbf, 0xbf, 0xbf, 0xdf, 0x0c, 0x3f, 0x2c, 0xf0, 0xd7, 0xfe, 0xd4, + 0x53, 0x4f, 0x7d, 0x06, 0x20, 0xd7, 0x0e, 0x0a, 0x00, 0xbb, 0xef, 0x44, 0x03, 0xa3, 0x8d, 0x1b, + 0x37, 0x5e, 0x62, 0x9b, 0x37, 0x6f, 0x0e, 0x83, 0x00, 0x33, 0xd1, 0xf7, 0xdf, 0x7f, 0x4f, 0xa9, + 0x69, 0x19, 0x94, 0x9a, 0x29, 0x0f, 0x17, 0xeb, 0x8e, 0xd4, 0x5a, 0x4a, 0x6f, 0x76, 0x53, 0xbe, + 0x11, 0xf9, 0xae, 0xf7, 0xd0, 0xde, 0x33, 0xa5, 0x74, 0xb6, 0xd1, 0x46, 0x75, 0xb6, 0x00, 0x35, + 0xa1, 0x58, 0xcf, 0x94, 0x36, 0x31, 0xb9, 0xda, 0x44, 0x06, 0x17, 0x89, 0x46, 0x98, 0xa1, 0x9f, + 0x89, 0x55, 0x86, 0x6e, 0xd2, 0xf7, 0x09, 0x92, 0xb2, 0xd5, 0x26, 0xa5, 0x14, 0xab, 0x82, 0xf2, + 0xea, 0x16, 0x66, 0x74, 0x4a, 0xae, 0x36, 0x17, 0x05, 0x2a, 0x5b, 0xbb, 0x85, 0x84, 0xf4, 0x42, + 0x69, 0xcf, 0xbe, 0xe3, 0x22, 0xd8, 0xee, 0x2c, 0xfc, 0x3a, 0x01, 0x93, 0x73, 0x2d, 0x66, 0xb7, + 0xdb, 0x4d, 0xcb, 0x96, 0x2d, 0xeb, 0x84, 0xdf, 0x6d, 0xff, 0x81, 0xc7, 0x65, 0x00, 0x8a, 0x8a, + 0x8a, 0x7c, 0x90, 0x09, 0x97, 0x01, 0xe0, 0x86, 0xbe, 0x40, 0x15, 0x15, 0x15, 0xe1, 0x28, 0x70, + 0x00, 0xa7, 0x93, 0xb3, 0x29, 0x1d, 0x31, 0xdf, 0x95, 0xa6, 0xa2, 0x14, 0x75, 0x0f, 0xe5, 0x68, + 0x5c, 0x28, 0x58, 0x37, 0x1d, 0x4c, 0x2d, 0xa7, 0x1c, 0xb5, 0x8d, 0x94, 0xd8, 0xfd, 0x86, 0x6e, + 0x26, 0x26, 0x14, 0xd6, 0x51, 0x61, 0x83, 0x85, 0x19, 0xb1, 0xf3, 0xed, 0x00, 0xa0, 0xef, 0x0d, + 0x49, 0x6a, 0x73, 0x2f, 0x59, 0x07, 0x48, 0xaa, 0x33, 0xda, 0xa5, 0xb3, 0x95, 0x0d, 0xc1, 0x4a, + 0xad, 0x45, 0x6c, 0xe9, 0xf2, 0xf8, 0x3a, 0x3d, 0x14, 0xca, 0xaf, 0xd1, 0x89, 0x09, 0x69, 0x05, + 0xe2, 0xe6, 0x6d, 0x07, 0x89, 0x37, 0xcc, 0xf3, 0x4a, 0xe0, 0x0f, 0x40, 0x0a, 0x61, 0x56, 0xc8, + 0x17, 0x23, 0xd2, 0xca, 0x2e, 0xc3, 0x9f, 0x4b, 0x00, 0xc8, 0xe5, 0x72, 0x69, 0x28, 0x00, 0x7c, + 0xe7, 0xcf, 0x03, 0xc0, 0x8d, 0x29, 0x3e, 0x29, 0x93, 0x32, 0x2b, 0xb4, 0x74, 0x20, 0x57, 0x4b, + 0xd9, 0x1a, 0x37, 0x9d, 0xd5, 0xba, 0x28, 0xb7, 0xa9, 0x9b, 0x22, 0x52, 0x15, 0x94, 0xa9, 0x32, + 0x93, 0x02, 0x5b, 0x5d, 0x63, 0xf6, 0xb2, 0xa4, 0xa2, 0x7a, 0xaa, 0x68, 0xe9, 0x62, 0x70, 0x5e, + 0x32, 0xc3, 0x69, 0x5d, 0x97, 0x87, 0x5a, 0xed, 0x1e, 0xd6, 0xe5, 0x25, 0xa9, 0xc9, 0xe4, 0x60, + 0xe7, 0xaa, 0x1a, 0x85, 0x2a, 0xad, 0x89, 0xd9, 0x3c, 0x92, 0xc7, 0xe1, 0x23, 0x31, 0xbd, 0xa8, + 0x8a, 0xc5, 0x9e, 0xce, 0x66, 0x6b, 0x37, 0xec, 0x0e, 0x5d, 0xe4, 0xfc, 0xc5, 0x56, 0x0e, 0x15, + 0xc0, 0xeb, 0xa2, 0xe9, 0x12, 0x00, 0xa1, 0x50, 0x48, 0x03, 0xba, 0x64, 0x3f, 0x07, 0x40, 0x59, + 0x59, 0x19, 0x25, 0x24, 0xa6, 0xd0, 0xe9, 0xcc, 0x73, 0x14, 0x5d, 0x61, 0xa1, 0x3c, 0x9d, 0x87, + 0x8a, 0xda, 0x02, 0x54, 0x62, 0x70, 0xd3, 0x21, 0x00, 0x28, 0x68, 0xb6, 0x53, 0x25, 0xf2, 0xa5, + 0xd2, 0xd8, 0x47, 0xa9, 0x25, 0x6a, 0x2a, 0x6b, 0x32, 0x13, 0x76, 0x98, 0x19, 0x7b, 0xfc, 0xac, + 0xb5, 0xcb, 0x4d, 0x16, 0x67, 0x80, 0xf5, 0xf8, 0x49, 0x6a, 0xe9, 0xe8, 0x65, 0x85, 0x55, 0x6a, + 0x66, 0xb4, 0xbb, 0x42, 0xbd, 0x01, 0xf2, 0xd9, 0x3d, 0x82, 0x90, 0x5f, 0x59, 0x2f, 0x1e, 0x3e, + 0x96, 0x40, 0x87, 0x22, 0xa3, 0x4d, 0x83, 0x38, 0x1f, 0x87, 0xbe, 0x64, 0xfb, 0xf8, 0xe3, 0x8f, + 0x7b, 0x90, 0x41, 0xaf, 0x5d, 0x02, 0xc0, 0xe5, 0x72, 0x99, 0x51, 0x03, 0xe2, 0xcf, 0x01, 0xc0, + 0xa9, 0x34, 0x33, 0x33, 0x9b, 0x8e, 0xfe, 0x18, 0x4f, 0xc9, 0x65, 0x3a, 0x92, 0xeb, 0x7d, 0xe1, + 0xa6, 0xc5, 0xb9, 0x3d, 0x32, 0x4d, 0x41, 0x65, 0xfa, 0x3e, 0xd6, 0xd8, 0x85, 0x1a, 0xe8, 0xf2, + 0xb1, 0xec, 0x8a, 0x26, 0xaa, 0x33, 0x3a, 0xc8, 0xd0, 0xed, 0x25, 0x83, 0x7d, 0x80, 0xf4, 0x5d, + 0xfd, 0x64, 0xe9, 0xf3, 0xb2, 0xbe, 0x00, 0x49, 0x6d, 0x5d, 0x7d, 0xac, 0xbc, 0xbe, 0x19, 0xe7, + 0xcc, 0xe7, 0x0c, 0x52, 0xc8, 0xdc, 0xe3, 0x16, 0x53, 0x73, 0x8a, 0xd9, 0xba, 0x75, 0xbb, 0xa9, + 0x45, 0x63, 0xc8, 0x18, 0x04, 0x80, 0x12, 0xe9, 0xd3, 0x0e, 0xbd, 0xd4, 0x10, 0x2e, 0xe2, 0x8b, + 0x01, 0xa0, 0x40, 0x7a, 0xd1, 0xb8, 0x7e, 0x16, 0x00, 0x4e, 0xa5, 0xd5, 0xd5, 0xd5, 0x14, 0x15, + 0x73, 0x9a, 0x4e, 0x9e, 0xc9, 0xa3, 0xdc, 0x16, 0x17, 0x95, 0xb4, 0xf9, 0xc3, 0x29, 0x74, 0x38, + 0x5d, 0x41, 0x4a, 0xa3, 0x93, 0x35, 0xd9, 0xfd, 0x54, 0xdb, 0xde, 0x4b, 0x72, 0x25, 0x3a, 0x77, + 0x87, 0x93, 0xd9, 0x06, 0x04, 0x66, 0x75, 0xfa, 0xc9, 0xe4, 0x70, 0x51, 0x67, 0xbf, 0x8f, 0x75, + 0x7b, 0x43, 0xcc, 0x64, 0xef, 0x23, 0xb5, 0xae, 0x4d, 0x72, 0x87, 0xc8, 0x0f, 0x13, 0x5b, 0xda, + 0x3b, 0xa5, 0x03, 0x11, 0x31, 0xb4, 0x65, 0xcb, 0x01, 0xcf, 0x20, 0xce, 0xc7, 0xf3, 0xdd, 0x7f, + 0xe7, 0x9d, 0x77, 0x9c, 0x4f, 0x3e, 0xf9, 0xe4, 0x0b, 0x97, 0x01, 0x30, 0x9b, 0xcd, 0x01, 0x34, + 0xb2, 0x21, 0x01, 0x7c, 0xf7, 0xdd, 0x77, 0x74, 0xf8, 0xf0, 0xe1, 0x0b, 0x6b, 0x4c, 0x64, 0x34, + 0x7f, 0xfe, 0x02, 0xda, 0xbb, 0xef, 0x18, 0xc5, 0xa6, 0xe4, 0x53, 0x5c, 0xa9, 0x8e, 0x8e, 0x64, + 0x57, 0xd3, 0xb1, 0x8c, 0x32, 0x02, 0x35, 0x52, 0x42, 0x5e, 0x25, 0xa5, 0x16, 0x56, 0x53, 0xb6, + 0xa2, 0x8e, 0x14, 0xf5, 0x3a, 0x42, 0x9a, 0x90, 0xa9, 0x07, 0xe9, 0xd3, 0x3b, 0x40, 0x0e, 0xb7, + 0x9f, 0xba, 0x07, 0xfc, 0x64, 0xed, 0xe9, 0x27, 0xbd, 0xd5, 0x26, 0x7a, 0x44, 0x0a, 0xc0, 0xa4, + 0x94, 0xac, 0x73, 0xb4, 0x62, 0xf9, 0x77, 0x54, 0x59, 0x59, 0x93, 0x33, 0x08, 0x80, 0x1a, 0xd0, + 0x3c, 0xcf, 0xfd, 0x8a, 0x0b, 0x7d, 0x80, 0x03, 0x40, 0x41, 0x5a, 0x80, 0xac, 0xa5, 0xad, 0xad, + 0x8d, 0xd5, 0xd5, 0xd5, 0x49, 0xeb, 0xd6, 0xad, 0x63, 0xaf, 0xbf, 0xfe, 0x3a, 0xa1, 0x0b, 0x12, + 0xf8, 0x96, 0x26, 0x4f, 0x9e, 0x4c, 0x13, 0x27, 0x4e, 0x24, 0x8c, 0x8e, 0xc4, 0x7b, 0xc2, 0x8a, + 0x15, 0x2b, 0xc2, 0x29, 0x04, 0xbd, 0x44, 0x2d, 0x2d, 0x2d, 0xb4, 0x68, 0xd1, 0x37, 0x74, 0x20, + 0x22, 0x9a, 0x12, 0xb2, 0x4a, 0xa9, 0x08, 0x24, 0x1f, 0x5f, 0xd4, 0x88, 0x08, 0xf4, 0xb2, 0x16, + 0xbb, 0x8f, 0x35, 0x98, 0x7a, 0xa8, 0xb8, 0x56, 0x4b, 0xb5, 0xad, 0x16, 0xc4, 0xbe, 0x95, 0x90, + 0x22, 0x64, 0x73, 0x7a, 0xa8, 0xcf, 0x17, 0x62, 0x7d, 0xde, 0x20, 0x75, 0xf5, 0xbb, 0xc9, 0xd0, + 0x61, 0x63, 0xee, 0x90, 0x28, 0xe4, 0x15, 0x56, 0xb2, 0xb5, 0xab, 0x77, 0xd2, 0x9e, 0x3d, 0x47, + 0x74, 0x83, 0x38, 0x9f, 0x88, 0x26, 0xdb, 0x85, 0x21, 0xcb, 0xf5, 0x5b, 0x3c, 0x2e, 0x00, 0x40, + 0x2e, 0x85, 0x01, 0x70, 0x01, 0x67, 0x32, 0x99, 0x42, 0x90, 0x0f, 0xc1, 0x1b, 0x6e, 0xb8, 0x81, + 0xc9, 0x30, 0x2a, 0xfc, 0xd4, 0xae, 0xba, 0xea, 0x2a, 0x42, 0xe8, 0xc2, 0xe7, 0x18, 0xf6, 0xc9, + 0x62, 0xb1, 0x40, 0x91, 0xc6, 0xd1, 0x82, 0x05, 0x0b, 0x28, 0x22, 0x22, 0x92, 0x76, 0xef, 0x46, + 0x24, 0x92, 0xf3, 0x29, 0x19, 0xac, 0x73, 0xae, 0xc1, 0xc4, 0x4c, 0x6e, 0x92, 0xb4, 0x9d, 0x2e, + 0xce, 0x32, 0x54, 0xdd, 0x6c, 0xa4, 0x06, 0xbd, 0x85, 0xda, 0x6c, 0xbd, 0xe1, 0xdd, 0xef, 0xf1, + 0xf8, 0xa9, 0x3f, 0x10, 0xa2, 0x5e, 0x8f, 0x8f, 0x19, 0xac, 0x9d, 0x2c, 0xfe, 0x74, 0x16, 0x7d, + 0xbb, 0x6c, 0x2b, 0xbd, 0xfe, 0xfa, 0xdb, 0x41, 0x90, 0xc9, 0x89, 0x41, 0x00, 0xd4, 0xa1, 0x3e, + 0x79, 0xee, 0xe7, 0x5f, 0xd2, 0x89, 0xcf, 0x03, 0x40, 0xfe, 0x77, 0x62, 0x20, 0xf7, 0x20, 0x45, + 0x3c, 0xd7, 0x5d, 0x77, 0xdd, 0xa0, 0x00, 0xae, 0xbe, 0xfa, 0x6a, 0xe2, 0xe0, 0xf9, 0xf9, 0xa2, + 0x45, 0x8b, 0x08, 0x03, 0x3f, 0x61, 0x3a, 0x0b, 0x03, 0xfb, 0xfc, 0xf3, 0xcf, 0x41, 0xad, 0xb9, + 0x6c, 0xff, 0x81, 0xe3, 0xd2, 0xa6, 0xcd, 0xfb, 0x29, 0x26, 0x21, 0x87, 0x14, 0xea, 0x76, 0xc6, + 0xe9, 0xb2, 0xb4, 0xbe, 0x85, 0x6a, 0x34, 0x46, 0xd2, 0x59, 0xec, 0x8c, 0xa7, 0x8c, 0x3b, 0x28, + 0x31, 0x87, 0xcb, 0x43, 0xed, 0x36, 0x07, 0x14, 0x6d, 0x0d, 0x8b, 0x38, 0x14, 0x43, 0x2b, 0x57, + 0x7c, 0x47, 0xc7, 0x4f, 0x24, 0xd0, 0x9b, 0x6f, 0xbe, 0xeb, 0x1e, 0xc4, 0xf9, 0x24, 0x51, 0x14, + 0x6d, 0x98, 0x49, 0x3c, 0xd8, 0xc0, 0x71, 0x83, 0x02, 0xc0, 0xee, 0x0f, 0x78, 0xf0, 0x80, 0xee, + 0xe8, 0xbf, 0x12, 0x00, 0x9e, 0x52, 0xfc, 0xfc, 0xeb, 0xaf, 0xbf, 0xa6, 0xa8, 0xa8, 0x28, 0xfa, + 0xe2, 0x8b, 0x2f, 0xc2, 0x6b, 0xd0, 0x1a, 0x2f, 0xea, 0xe0, 0xfa, 0xf5, 0xeb, 0x85, 0x7f, 0xb9, + 0xf3, 0x6e, 0x5a, 0xbc, 0x78, 0x35, 0x5b, 0xb3, 0x66, 0x17, 0x1d, 0x3d, 0x91, 0x4c, 0x51, 0x71, + 0xe9, 0x94, 0x90, 0x22, 0x67, 0x69, 0x60, 0x17, 0x79, 0x71, 0x15, 0xcb, 0xcc, 0x2d, 0xa1, 0x23, + 0xc7, 0xe2, 0x69, 0xd5, 0x8a, 0xed, 0xb4, 0x6c, 0xe9, 0x16, 0xda, 0xbf, 0xff, 0x38, 0x29, 0x2a, + 0x55, 0x74, 0x36, 0xaf, 0x98, 0x56, 0xac, 0xdc, 0xcc, 0x1a, 0x1a, 0x1a, 0x92, 0x7e, 0x02, 0xa0, + 0x11, 0xea, 0xb7, 0x1d, 0xef, 0x9d, 0x76, 0x99, 0x98, 0xe3, 0x00, 0xb2, 0xb3, 0xb3, 0xad, 0x3a, + 0x9d, 0x0e, 0x29, 0x26, 0xf9, 0x22, 0x22, 0x22, 0x7a, 0xae, 0x04, 0x60, 0xd3, 0xa6, 0x4d, 0xe1, + 0xda, 0xe0, 0xce, 0x73, 0x4b, 0x4d, 0x4d, 0xa5, 0x77, 0xdf, 0x7d, 0x97, 0x4e, 0x9d, 0x3a, 0xc5, + 0xf8, 0x9a, 0xcb, 0x8d, 0x0f, 0x3f, 0xfc, 0x50, 0x40, 0x6a, 0xf9, 0xcf, 0x24, 0xa5, 0x04, 0x4f, + 0xc5, 0x25, 0x07, 0x17, 0xcc, 0x5f, 0x2e, 0x6d, 0xdc, 0xb8, 0x4b, 0x5c, 0xb8, 0x70, 0x35, 0x43, + 0x9a, 0xf0, 0x3c, 0x87, 0xbe, 0xda, 0x43, 0xaa, 0x06, 0x2d, 0x59, 0xbb, 0x7b, 0x49, 0xad, 0xd1, + 0x53, 0x4a, 0x66, 0x3e, 0x1d, 0x3a, 0x1c, 0x4b, 0x37, 0xdc, 0x30, 0x8a, 0xf1, 0x0f, 0x10, 0x2e, + 0x72, 0x3e, 0x45, 0x10, 0x04, 0x1b, 0x57, 0xa5, 0xa8, 0xc5, 0xdf, 0x0c, 0x0a, 0x20, 0x33, 0x33, + 0xd3, 0x8e, 0x39, 0x80, 0x0f, 0x30, 0xbe, 0x83, 0x07, 0x0f, 0xda, 0x47, 0x8e, 0x1c, 0x49, 0x43, + 0x01, 0x38, 0x71, 0xe2, 0x04, 0x41, 0x62, 0x53, 0x74, 0x74, 0x74, 0x18, 0x00, 0x38, 0x99, 0xf4, + 0x7a, 0x3d, 0x61, 0xd8, 0x0f, 0x03, 0x28, 0x2f, 0x2f, 0x27, 0x6c, 0xc4, 0x00, 0xc8, 0x20, 0x70, + 0xe8, 0xd0, 0x21, 0xc2, 0x6c, 0x11, 0x42, 0x6a, 0x0e, 0xa0, 0x73, 0x7a, 0x20, 0xc2, 0x44, 0x30, + 0x57, 0x30, 0x29, 0x29, 0x49, 0x40, 0x0f, 0x09, 0x55, 0xa8, 0x1a, 0xa8, 0x50, 0x51, 0x45, 0x7c, + 0x24, 0xad, 0x6d, 0xd6, 0x50, 0x6a, 0x96, 0x9c, 0x7e, 0xf7, 0xbb, 0xf7, 0xbc, 0xff, 0xed, 0xb8, + 0x14, 0x25, 0xfa, 0xfb, 0x39, 0x10, 0x4d, 0x4a, 0x4a, 0x4a, 0x3b, 0x5e, 0x7b, 0x72, 0x50, 0x39, + 0x8d, 0xb0, 0x6c, 0x85, 0xba, 0x74, 0xf6, 0xf6, 0xf6, 0x06, 0xf9, 0xf4, 0xb5, 0x7f, 0xff, 0x7e, + 0x27, 0x22, 0x30, 0x24, 0x00, 0xee, 0x38, 0xc6, 0x4b, 0xc2, 0x90, 0x4f, 0x19, 0x19, 0x19, 0x64, + 0x30, 0x18, 0xc2, 0x00, 0xf8, 0x88, 0xc9, 0x01, 0xa0, 0xb0, 0xf9, 0x7d, 0xdc, 0x88, 0xaa, 0xc8, + 0xd7, 0xe8, 0x1b, 0x8c, 0xaf, 0x51, 0x2f, 0xc1, 0x49, 0x93, 0x26, 0x11, 0x18, 0x4e, 0x00, 0x51, + 0x48, 0x00, 0xe8, 0xcb, 0xcd, 0x2d, 0x08, 0xfd, 0xf8, 0x63, 0x94, 0x98, 0x90, 0x94, 0x46, 0xda, + 0xb6, 0x36, 0x3a, 0x93, 0x7a, 0x36, 0xcc, 0x66, 0xc7, 0xb7, 0xcf, 0x11, 0xea, 0xf7, 0xde, 0xe1, + 0xb5, 0x9c, 0x7e, 0xce, 0x1a, 0x08, 0x04, 0x3a, 0xb1, 0xc9, 0x5e, 0x74, 0xdd, 0xbb, 0x86, 0x04, + 0x80, 0x1b, 0xfa, 0xfc, 0x7e, 0x3f, 0x7f, 0x63, 0xfb, 0xee, 0xdd, 0xbb, 0x85, 0x2b, 0x45, 0x00, + 0x8e, 0xb3, 0xac, 0xac, 0x2c, 0x91, 0x47, 0x02, 0xfd, 0x83, 0xd0, 0x37, 0x58, 0x63, 0x63, 0xa3, + 0x84, 0x5d, 0xe5, 0xe9, 0x23, 0x71, 0x67, 0x07, 0xf0, 0xc0, 0x10, 0x14, 0x06, 0x64, 0x34, 0x1a, + 0x05, 0xbe, 0xe6, 0x80, 0xce, 0x03, 0x00, 0x58, 0x86, 0xb4, 0x70, 0x43, 0x22, 0xfb, 0x11, 0x21, + 0x61, 0xe5, 0xca, 0x0d, 0x52, 0x4a, 0x86, 0x9c, 0x6a, 0x0b, 0x8f, 0x92, 0x72, 0xcf, 0xfd, 0xd4, + 0x16, 0x79, 0x1b, 0x39, 0x61, 0x6d, 0xdb, 0x64, 0x94, 0x79, 0x6c, 0xb1, 0x1d, 0x85, 0xfb, 0xc3, + 0x90, 0x13, 0x19, 0x07, 0x90, 0x98, 0xc8, 0x29, 0x56, 0x0a, 0xa2, 0x17, 0x58, 0x77, 0x62, 0xd2, + 0x1a, 0x2a, 0x02, 0xd7, 0x5c, 0x73, 0x0d, 0xad, 0x5c, 0xb9, 0x92, 0x71, 0xd6, 0x59, 0xbd, 0x7a, + 0x35, 0x43, 0xd1, 0x86, 0x40, 0xa7, 0xd2, 0x1f, 0x59, 0x28, 0x87, 0x21, 0xf7, 0x43, 0xc3, 0x86, + 0x0d, 0xa3, 0x59, 0xb3, 0x66, 0x11, 0x9c, 0xe6, 0xd1, 0xf1, 0x8e, 0x1a, 0x35, 0x8a, 0x71, 0xf6, + 0xe2, 0x00, 0xf0, 0x3a, 0x09, 0xd7, 0xf1, 0x74, 0xe5, 0x6c, 0xe3, 0x87, 0xa6, 0x12, 0x8e, 0xec, + 0xf8, 0x86, 0xa9, 0x7e, 0x78, 0x82, 0x5a, 0x4e, 0xbd, 0x42, 0xfe, 0xc6, 0x6d, 0x68, 0x57, 0x6f, + 0x52, 0x20, 0xf9, 0xdf, 0xa9, 0x6f, 0xcf, 0x48, 0x2a, 0x5d, 0x37, 0x82, 0x7d, 0xfc, 0xfa, 0x43, + 0x43, 0x7e, 0x58, 0x2c, 0x43, 0x68, 0x22, 0x4e, 0x9f, 0x3e, 0xcd, 0xc3, 0x2c, 0xc0, 0x0c, 0x7b, + 0xf7, 0xee, 0xf5, 0x5f, 0x09, 0x00, 0x66, 0xd4, 0x70, 0x81, 0x2f, 0x59, 0xb2, 0x84, 0x39, 0x1c, + 0x8e, 0xd0, 0xfc, 0xf9, 0xf3, 0xc3, 0xcf, 0xbd, 0xf8, 0xe2, 0x8b, 0x84, 0x2e, 0x29, 0x2c, 0x5c, + 0xb8, 0x30, 0xbc, 0x7e, 0xe8, 0xa1, 0x87, 0x78, 0x84, 0x78, 0x1a, 0x05, 0xf9, 0xfa, 0xce, 0x3b, + 0xef, 0x0c, 0x37, 0xc4, 0xaf, 0xbe, 0xfa, 0x8a, 0xa1, 0x1e, 0xfc, 0x48, 0x0d, 0x2f, 0x48, 0x4f, + 0x2c, 0xcc, 0x8e, 0x17, 0xcf, 0xad, 0x1a, 0x46, 0x3d, 0xa5, 0x73, 0x48, 0x1c, 0xd0, 0x13, 0xb9, + 0xd4, 0x44, 0xad, 0x9b, 0x49, 0x2a, 0x7e, 0x9e, 0xbc, 0x31, 0x77, 0x93, 0x65, 0xb3, 0x8c, 0xea, + 0x36, 0xcb, 0xb6, 0x0c, 0x09, 0x00, 0xc5, 0x81, 0xfa, 0x4b, 0xe7, 0x3b, 0xc2, 0xa7, 0x1f, 0x03, + 0x2f, 0xe2, 0xa1, 0x58, 0x88, 0x03, 0x40, 0x37, 0x16, 0xf9, 0x39, 0x86, 0x9e, 0x90, 0xd3, 0xe9, + 0x0c, 0x2c, 0x5f, 0xbe, 0x3c, 0xc4, 0xd7, 0xe8, 0xdc, 0xe1, 0xf4, 0x39, 0x72, 0xe4, 0x88, 0x9f, + 0xaf, 0x1f, 0x7c, 0xf0, 0x41, 0x0e, 0x48, 0xdc, 0xb3, 0x67, 0x4f, 0xf8, 0xfa, 0x5b, 0x6f, 0xbd, + 0x35, 0x1c, 0x01, 0xd0, 0x2e, 0x43, 0x51, 0xfb, 0x50, 0x3b, 0x8c, 0x77, 0x72, 0x14, 0xa8, 0xf4, + 0xfd, 0x97, 0x0f, 0x51, 0xdb, 0xa9, 0x71, 0x14, 0x6c, 0x8f, 0x21, 0x62, 0xb8, 0x8d, 0x3d, 0x93, + 0xa8, 0xe1, 0x4b, 0x0a, 0x65, 0x4f, 0x26, 0xf7, 0xa1, 0x7f, 0xa4, 0xe6, 0x4d, 0x32, 0xb1, 0x7e, + 0x93, 0xec, 0xc1, 0xa1, 0x22, 0x20, 0x07, 0x15, 0x8a, 0x48, 0x1f, 0x5e, 0x03, 0x7e, 0x34, 0x32, + 0x1f, 0x6a, 0x60, 0xc8, 0x4e, 0x0c, 0x16, 0x11, 0x38, 0x10, 0xfe, 0x69, 0x05, 0x77, 0xb8, 0xa4, + 0xa4, 0xc4, 0xcb, 0xff, 0x0f, 0x81, 0xc7, 0xb5, 0xbb, 0x1b, 0x33, 0xb4, 0xef, 0xda, 0x6b, 0xaf, + 0x45, 0x43, 0x7a, 0x53, 0xe2, 0x1f, 0xf8, 0xa2, 0x3e, 0xd8, 0xed, 0xb7, 0xdf, 0xce, 0x78, 0x5d, + 0x01, 0x04, 0x03, 0x01, 0x04, 0x51, 0x73, 0x2c, 0x26, 0x26, 0x86, 0x7a, 0x7a, 0x7a, 0x58, 0x71, + 0x71, 0x31, 0x7b, 0x79, 0xfa, 0x0b, 0x52, 0xd6, 0x8a, 0x1b, 0x43, 0xee, 0x8a, 0xcf, 0x49, 0xe8, + 0x2e, 0x83, 0x17, 0x56, 0x22, 0xd3, 0x21, 0xe8, 0xce, 0x99, 0xe4, 0x4f, 0xbc, 0x9f, 0x1c, 0xdf, + 0x0f, 0xa7, 0xea, 0xf5, 0x32, 0xe8, 0x1f, 0xd9, 0x55, 0x97, 0x01, 0x40, 0x81, 0xec, 0x02, 0x2d, + 0xfa, 0xd0, 0x07, 0x44, 0x38, 0x13, 0xc4, 0xe8, 0x18, 0x18, 0xaa, 0x88, 0xaf, 0xbf, 0xfe, 0x7a, + 0x1a, 0x33, 0x66, 0x4c, 0xf8, 0x88, 0x7e, 0x10, 0x82, 0xa0, 0x0b, 0x70, 0xe3, 0x80, 0xa0, 0x8f, + 0x82, 0xfc, 0x1c, 0x11, 0x91, 0x6e, 0xb9, 0xe5, 0x16, 0xf6, 0xe9, 0xa7, 0x9f, 0x86, 0xde, 0x7a, + 0xeb, 0x2d, 0xb6, 0x74, 0xe9, 0x52, 0x81, 0x4b, 0x8d, 0xd1, 0xa3, 0x47, 0xd3, 0x88, 0x11, 0x23, + 0x68, 0xc3, 0x86, 0x0d, 0x41, 0xd4, 0x91, 0xc8, 0x47, 0x53, 0xc8, 0x17, 0x01, 0xef, 0xc9, 0xbb, + 0xbb, 0x74, 0x6a, 0xcf, 0xdc, 0x5a, 0xd5, 0xae, 0xdb, 0xc8, 0xaf, 0xdd, 0x45, 0x92, 0xdf, 0x46, + 0xe4, 0x84, 0xbf, 0xda, 0x55, 0x24, 0x16, 0x4c, 0x21, 0xcf, 0xf1, 0x3b, 0x48, 0xbf, 0x41, 0x46, + 0x95, 0xeb, 0x65, 0x5f, 0x0c, 0x16, 0x01, 0xde, 0xc8, 0xb8, 0x1a, 0xad, 0x42, 0x03, 0x49, 0x85, + 0x23, 0x7a, 0xec, 0xe0, 0x65, 0x11, 0xe0, 0x75, 0x81, 0x6e, 0x2b, 0xa1, 0x48, 0xc3, 0xbb, 0x09, + 0x09, 0xc1, 0x60, 0x12, 0x3a, 0x72, 0x38, 0x22, 0x9f, 0x7d, 0xf6, 0x59, 0x68, 0xee, 0xdc, 0xb9, + 0x41, 0xa4, 0x88, 0x70, 0xe3, 0x8d, 0x37, 0x32, 0x44, 0x20, 0xf4, 0xde, 0x7b, 0xef, 0x89, 0x48, + 0x39, 0x36, 0x6d, 0xda, 0x34, 0x5a, 0xb3, 0x66, 0x4d, 0x58, 0x24, 0xbe, 0xfd, 0xf6, 0xdb, 0xfc, + 0x5a, 0x11, 0x8c, 0xc5, 0xc0, 0x42, 0x0c, 0x00, 0x18, 0x36, 0x51, 0x54, 0xa9, 0x54, 0x49, 0x19, + 0x1b, 0x27, 0x58, 0x3b, 0xd2, 0x9e, 0xa3, 0xa0, 0x35, 0x05, 0x6d, 0xc0, 0x4f, 0xd4, 0x99, 0x08, + 0x05, 0xf4, 0x21, 0x05, 0xd3, 0xc7, 0x93, 0x73, 0xff, 0x28, 0xaa, 0x59, 0x2b, 0x73, 0x2b, 0xd7, + 0xca, 0x7e, 0x3d, 0x24, 0x00, 0xde, 0x40, 0xd0, 0x98, 0x12, 0xa7, 0x4c, 0x99, 0x62, 0xc4, 0xff, + 0xf9, 0xd0, 0x6c, 0x81, 0x75, 0xc3, 0xdc, 0xef, 0xbf, 0xff, 0x7e, 0x00, 0xb5, 0x22, 0x3d, 0xfe, + 0xf8, 0xe3, 0x22, 0x1c, 0x92, 0x00, 0x96, 0x53, 0x21, 0x2f, 0x7e, 0xc6, 0x77, 0x96, 0xd7, 0x03, + 0xce, 0xb9, 0x86, 0x77, 0x73, 0x30, 0x4f, 0x3c, 0xf1, 0x84, 0xc8, 0xe9, 0x93, 0xaf, 0x91, 0xef, + 0x12, 0xd8, 0x28, 0x80, 0x9a, 0x08, 0xf2, 0x7b, 0xf0, 0x5e, 0x82, 0xbe, 0xc0, 0xbc, 0x5e, 0x2f, + 0xc3, 0x0c, 0xce, 0xa0, 0x71, 0x06, 0x10, 0x8d, 0xe8, 0x12, 0x79, 0x4a, 0xad, 0xfc, 0xf7, 0xa3, + 0x24, 0x6f, 0xed, 0x32, 0x12, 0x9d, 0xf5, 0xb8, 0x1b, 0x44, 0xa9, 0x71, 0x17, 0xb1, 0xb2, 0xe9, + 0xe4, 0x8b, 0xfb, 0x37, 0xb2, 0x6e, 0xbe, 0x9a, 0x4a, 0x56, 0xc9, 0xe2, 0xaf, 0x08, 0x00, 0xa2, + 0xee, 0x24, 0x86, 0xf7, 0x22, 0xe4, 0xf4, 0x65, 0x36, 0x61, 0xc2, 0x84, 0x8e, 0x71, 0xe3, 0xc6, + 0xf5, 0x54, 0x56, 0x56, 0x36, 0xe1, 0x8d, 0xfb, 0xf0, 0x3a, 0x06, 0x85, 0x48, 0xc3, 0x87, 0x0f, + 0xe7, 0x0d, 0x8c, 0x41, 0x70, 0x71, 0x40, 0x38, 0x88, 0x41, 0xec, 0xb4, 0x88, 0x7b, 0x8b, 0xc8, + 0x75, 0x1f, 0xf4, 0x95, 0x00, 0x89, 0x22, 0xc2, 0x71, 0x3f, 0x5f, 0xe3, 0xe8, 0xeb, 0xec, 0xec, + 0xf4, 0x82, 0x89, 0x18, 0x9f, 0xad, 0x67, 0xcc, 0x98, 0xd1, 0x87, 0xd7, 0x45, 0x77, 0x75, 0x75, + 0x75, 0xae, 0xfe, 0x64, 0xb2, 0x5b, 0x7d, 0xf0, 0x6e, 0x0a, 0xe8, 0x23, 0x89, 0x09, 0x60, 0xda, + 0x9e, 0x02, 0xa2, 0xa6, 0x6f, 0x48, 0xc8, 0xfd, 0x2d, 0x0d, 0x1c, 0xb9, 0x9d, 0xd4, 0x6b, 0x64, + 0x54, 0xb8, 0x42, 0x36, 0x6d, 0x48, 0x00, 0x70, 0x2c, 0x15, 0xbb, 0x6c, 0x1e, 0xcc, 0xa0, 0xc5, + 0x35, 0xa0, 0xbe, 0x98, 0xf3, 0x3a, 0x05, 0x8e, 0xc6, 0x60, 0x86, 0x28, 0xc4, 0x84, 0xe4, 0xe3, + 0x60, 0xb8, 0x33, 0xfc, 0x43, 0x31, 0xbe, 0xe3, 0x28, 0x50, 0x61, 0xf1, 0xe2, 0xc5, 0xd2, 0xcc, + 0x99, 0x33, 0x19, 0x1c, 0x64, 0xd3, 0xa7, 0x4f, 0x67, 0x5c, 0x43, 0xf1, 0xe8, 0x61, 0x2d, 0x80, + 0xff, 0x39, 0x09, 0x48, 0x5c, 0x82, 0xa0, 0x56, 0x3a, 0x71, 0x5e, 0x02, 0x76, 0x32, 0x3d, 0xf2, + 0xc8, 0x23, 0xf6, 0x98, 0xcf, 0x64, 0x75, 0x0e, 0xf9, 0x1b, 0x14, 0xb2, 0xe5, 0x11, 0x85, 0x80, + 0xcd, 0x02, 0x75, 0x5d, 0x33, 0x2b, 0xdc, 0x1b, 0x7a, 0x76, 0x8e, 0xa4, 0x92, 0xe5, 0x32, 0x53, + 0xfa, 0x5a, 0xd9, 0xc8, 0x30, 0x00, 0x14, 0xd0, 0x56, 0x74, 0xd6, 0x0b, 0x00, 0xfe, 0xa7, 0x86, + 0x94, 0x4a, 0x01, 0xeb, 0x58, 0x78, 0x67, 0x45, 0x1a, 0x06, 0x90, 0xd3, 0xa2, 0x5c, 0x2e, 0x67, + 0x58, 0x33, 0x30, 0x93, 0x00, 0xca, 0x14, 0x90, 0x26, 0x62, 0x30, 0x18, 0x64, 0xd8, 0x04, 0xc2, + 0x51, 0x00, 0xf3, 0xf1, 0x8f, 0x2f, 0xd9, 0xb2, 0x65, 0xcb, 0x5a, 0x70, 0x8f, 0x8e, 0x39, 0x73, + 0xe6, 0xd8, 0x1e, 0x7e, 0xf8, 0xe1, 0xd9, 0xb3, 0xc6, 0xcb, 0x5e, 0x91, 0xff, 0xfe, 0x57, 0x82, + 0xaf, 0x71, 0x23, 0x49, 0xe1, 0xde, 0x80, 0x74, 0x6a, 0xdd, 0x84, 0xde, 0x30, 0x95, 0xbc, 0xd1, + 0x77, 0x51, 0xeb, 0x3a, 0x19, 0xe5, 0x2e, 0x91, 0x6d, 0xfb, 0x29, 0x00, 0x74, 0x10, 0x4a, 0xfd, + 0xdf, 0x1a, 0x80, 0x14, 0xc3, 0xf9, 0x5e, 0x48, 0x8c, 0x10, 0x4a, 0x20, 0x2c, 0x51, 0x90, 0x1a, + 0x1e, 0xad, 0x56, 0xeb, 0xe1, 0x8d, 0x4e, 0xa1, 0x50, 0x70, 0x40, 0x12, 0x76, 0x9b, 0x37, 0x42, + 0xfe, 0x29, 0x9f, 0x84, 0x02, 0xb7, 0x41, 0x72, 0xb4, 0xa3, 0x6e, 0x0c, 0xfc, 0xfb, 0x0a, 0x90, + 0xc6, 0x98, 0x1d, 0xb3, 0x64, 0x3f, 0x68, 0xa2, 0x1e, 0x41, 0x6f, 0xe0, 0x7a, 0x0e, 0x99, 0x69, + 0xc7, 0x7c, 0xaf, 0x46, 0x6f, 0xc8, 0x9a, 0x4c, 0x7d, 0x07, 0x6f, 0xa1, 0x82, 0xa5, 0x57, 0x89, + 0x79, 0xcb, 0x64, 0x0f, 0xc9, 0xf0, 0xa2, 0xe5, 0xc8, 0x6f, 0x2b, 0xff, 0x32, 0x0f, 0x6f, 0xf8, + 0x8b, 0x19, 0x52, 0xc8, 0xc1, 0x27, 0x3c, 0x38, 0x2a, 0xb9, 0x5c, 0x2e, 0x91, 0x77, 0x5d, 0x58, + 0x00, 0xcf, 0x79, 0xf1, 0x5c, 0x00, 0xa0, 0xf8, 0x73, 0x22, 0xc4, 0xa3, 0x1f, 0xfa, 0x6b, 0xe0, + 0xa3, 0x8f, 0x3e, 0xb2, 0x8f, 0x1f, 0x3f, 0xfe, 0x8d, 0xf0, 0xae, 0xca, 0x64, 0xd7, 0x8c, 0xbe, + 0x51, 0xf6, 0x48, 0xfc, 0x97, 0x57, 0x5b, 0xfb, 0xcb, 0xfe, 0xd8, 0x1b, 0xc4, 0xd6, 0xbd, 0xa4, + 0x3b, 0x76, 0x3f, 0xa5, 0x2f, 0xbd, 0x99, 0x0e, 0x2c, 0x7d, 0xde, 0x96, 0xb0, 0x56, 0x36, 0x9c, + 0xf7, 0x81, 0xdb, 0x21, 0x0f, 0x4a, 0xc0, 0x3c, 0x36, 0x6e, 0xd0, 0x46, 0x17, 0x0c, 0x5d, 0xfa, + 0x12, 0x43, 0xbd, 0x5c, 0x62, 0x78, 0xed, 0x25, 0x86, 0x68, 0x5e, 0x30, 0x6c, 0xcc, 0x79, 0x73, + 0x72, 0x46, 0xc2, 0xf5, 0x12, 0xf2, 0x5f, 0x04, 0xe3, 0x88, 0x90, 0x1d, 0xc1, 0xa9, 0x53, 0xa7, + 0xfa, 0xb8, 0x7d, 0xf0, 0xc1, 0x07, 0x03, 0xe8, 0x09, 0x56, 0x5c, 0xd3, 0x04, 0xc7, 0x2f, 0x34, + 0x2a, 0x3c, 0x46, 0xcd, 0x7b, 0x4e, 0x36, 0xbb, 0x74, 0xcb, 0x6d, 0xe4, 0x69, 0xdc, 0x4e, 0x9a, + 0xec, 0xf5, 0x94, 0xbe, 0xe2, 0x6e, 0x4a, 0x8b, 0x98, 0x43, 0xc7, 0xa3, 0x4e, 0x42, 0x14, 0x6e, + 0x69, 0xfd, 0xab, 0xfd, 0xd4, 0x80, 0xa7, 0xc5, 0xc4, 0x89, 0x13, 0x3f, 0x79, 0xec, 0xb1, 0xc7, + 0xba, 0xd0, 0xc9, 0x3b, 0x40, 0xb9, 0xd6, 0x3f, 0x7c, 0xa1, 0x02, 0x8a, 0x21, 0x1b, 0x84, 0x5f, + 0xcf, 0xa3, 0x8f, 0x3e, 0x3a, 0xfd, 0xb2, 0x26, 0x25, 0x93, 0xdd, 0x15, 0xf1, 0xae, 0x2c, 0x3d, + 0x69, 0xd1, 0x4d, 0x62, 0x6d, 0xe6, 0x7a, 0xd2, 0xea, 0x35, 0x54, 0x58, 0xa6, 0xa4, 0xe3, 0xd1, + 0x09, 0xf4, 0xed, 0xb7, 0x2b, 0x16, 0xfe, 0xd5, 0x7f, 0x2b, 0x31, 0x76, 0xec, 0xd8, 0x11, 0xa0, + 0xe2, 0x6f, 0x00, 0xc4, 0x09, 0x8d, 0x64, 0x41, 0x4a, 0x59, 0x41, 0xc9, 0x46, 0x30, 0x9c, 0x72, + 0x50, 0x9d, 0x23, 0x93, 0x0d, 0x7f, 0x70, 0xb4, 0xec, 0xf1, 0x09, 0x63, 0x7f, 0xf5, 0xd4, 0xf7, + 0x3b, 0x77, 0xc6, 0xc7, 0x25, 0x24, 0xda, 0x22, 0x22, 0x8f, 0xb4, 0xcd, 0x9d, 0x3b, 0x6f, 0xcd, + 0xf9, 0x68, 0xfd, 0x4d, 0x7e, 0xa0, 0x81, 0x74, 0xb9, 0x01, 0xc2, 0x6e, 0x03, 0xa2, 0xe2, 0xc5, + 0x71, 0x00, 0xa0, 0x26, 0x0c, 0xa9, 0x36, 0x65, 0xb2, 0x61, 0xb0, 0x11, 0xb0, 0x3b, 0x60, 0xff, + 0xca, 0x0b, 0x1c, 0x76, 0xed, 0xdf, 0xc5, 0xaf, 0x55, 0x1e, 0x78, 0xe0, 0x81, 0xe1, 0x3f, 0xfd, + 0xc2, 0xe2, 0xcf, 0xb5, 0xff, 0x02, 0x32, 0xee, 0xa6, 0x45, 0xe4, 0x1e, 0x1c, 0xf3, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_gerbview_xpm[1] = {{ png, sizeof( png ), "icon_gerbview_xpm" }}; diff --git a/bitmaps_png/cpp_48/icon_kicad.cpp b/bitmaps_png/cpp_48/icon_kicad.cpp index 1f3faa7a5c..356d5bc4fa 100644 --- a/bitmaps_png/cpp_48/icon_kicad.cpp +++ b/bitmaps_png/cpp_48/icon_kicad.cpp @@ -8,150 +8,148 @@ static const unsigned char png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, - 0x87, 0x00, 0x00, 0x08, 0xdd, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x9a, 0x7b, 0x70, 0xd4, - 0xd5, 0x15, 0xc7, 0x3f, 0xf7, 0xb7, 0xef, 0x4d, 0x36, 0x4f, 0x76, 0x09, 0x81, 0x54, 0xe3, 0x23, - 0x8a, 0xbc, 0x44, 0x50, 0x08, 0x19, 0x2b, 0x38, 0x88, 0xa2, 0x62, 0xa7, 0xce, 0xd8, 0xd1, 0x3a, - 0x32, 0x2a, 0x15, 0xa8, 0x0f, 0xd4, 0x76, 0x6a, 0xa5, 0x76, 0xb4, 0x0c, 0x8f, 0x8e, 0xa3, 0x08, - 0x3e, 0x80, 0x16, 0x14, 0xa8, 0x4a, 0x9d, 0x5a, 0xc5, 0xb1, 0x38, 0x6a, 0xb4, 0x88, 0x55, 0x29, - 0xa9, 0x42, 0x19, 0x14, 0x2d, 0x6d, 0xa4, 0x80, 0x26, 0x46, 0x24, 0xca, 0xee, 0x66, 0xf3, 0xd8, - 0xec, 0xee, 0x3d, 0xfd, 0x23, 0x6c, 0xf2, 0xdb, 0xf7, 0x2e, 0x4d, 0xa6, 0xf6, 0x37, 0x73, 0x66, - 0x7e, 0x7b, 0x9f, 0xe7, 0x75, 0xbf, 0xe7, 0x9c, 0xfb, 0x5b, 0x25, 0x22, 0xfc, 0x3f, 0x3f, 0xd6, - 0xe4, 0x86, 0xf7, 0xd6, 0xa9, 0x72, 0x97, 0x85, 0xe1, 0x83, 0xb9, 0x49, 0xd4, 0x20, 0x34, 0xe5, - 0x47, 0xd2, 0x92, 0x6d, 0xcc, 0xfb, 0x1b, 0x54, 0x9d, 0x45, 0x30, 0x72, 0xad, 0x15, 0xb1, 0xd3, - 0x33, 0xf5, 0x46, 0x39, 0x1c, 0xff, 0xad, 0xe2, 0x16, 0xd8, 0xb9, 0x51, 0x79, 0xac, 0x31, 0x16, - 0xa3, 0x58, 0x04, 0x14, 0x0d, 0x81, 0xb2, 0x3e, 0x14, 0x78, 0xbe, 0xc7, 0xca, 0xca, 0xe9, 0x37, - 0x4a, 0x8f, 0xb9, 0xa3, 0x69, 0x83, 0x7a, 0x44, 0x29, 0xee, 0x2e, 0x60, 0xad, 0x9d, 0xdd, 0xad, - 0x4c, 0x9f, 0xfe, 0x80, 0x44, 0xfb, 0x25, 0x56, 0x31, 0xee, 0xd4, 0xb0, 0x58, 0x0b, 0x45, 0x5a, - 0x60, 0x08, 0x68, 0xbc, 0x08, 0xcb, 0x9c, 0x11, 0x76, 0xbc, 0xbb, 0x49, 0x79, 0x93, 0x18, 0xaa, - 0x2f, 0x70, 0xad, 0x06, 0xfb, 0x48, 0xbe, 0x9b, 0xe8, 0x42, 0xc2, 0xbc, 0xf8, 0x69, 0x70, 0x94, - 0x4d, 0xc0, 0xe2, 0x1c, 0x31, 0xa8, 0xea, 0xef, 0x69, 0x7f, 0x17, 0x1d, 0xed, 0x44, 0x60, 0xaa, - 0x35, 0xc2, 0xdf, 0x76, 0xad, 0x57, 0x97, 0xd7, 0xcf, 0x97, 0x03, 0x00, 0xa2, 0x59, 0x22, 0x8a, - 0x17, 0x01, 0x77, 0xbe, 0xeb, 0x29, 0x8d, 0x3d, 0x41, 0x00, 0x2d, 0xf4, 0x73, 0xec, 0x39, 0x6d, - 0x21, 0xc5, 0xd5, 0x57, 0x0d, 0xaa, 0x00, 0xe1, 0xc0, 0x7e, 0xbe, 0x7c, 0x7f, 0x2e, 0xb1, 0x9e, - 0xa3, 0x00, 0xb5, 0xc0, 0xae, 0x9d, 0xeb, 0xd5, 0xd5, 0x0d, 0xf3, 0x65, 0x47, 0xfd, 0x02, 0x79, - 0xfd, 0xaf, 0x1b, 0xd4, 0x74, 0xad, 0xd9, 0x06, 0x85, 0x9d, 0xbf, 0x7e, 0x17, 0x12, 0x6d, 0x26, - 0x41, 0x44, 0xb0, 0x58, 0x2c, 0xb8, 0x5c, 0xae, 0xbc, 0x48, 0x02, 0x47, 0x39, 0xbe, 0xfb, 0x75, - 0x08, 0x7d, 0x9d, 0xd2, 0x67, 0xb5, 0x5a, 0xb1, 0x97, 0x8c, 0xa1, 0xba, 0xe1, 0x15, 0x6c, 0xc5, - 0xa3, 0xe3, 0xfb, 0x94, 0xe9, 0x18, 0x8d, 0xef, 0xae, 0x55, 0x37, 0x02, 0x4c, 0xbb, 0x45, 0x3e, - 0x88, 0x0a, 0x53, 0x45, 0xf8, 0x44, 0x04, 0x72, 0x51, 0x8a, 0x00, 0x89, 0x3e, 0x26, 0x68, 0xad, - 0xb1, 0xd9, 0x6c, 0x78, 0x3c, 0x9e, 0xbc, 0xa8, 0xe3, 0x40, 0x13, 0x7b, 0x57, 0xce, 0xa7, 0xe7, - 0xc8, 0x47, 0x29, 0x7d, 0xe5, 0xe5, 0xe5, 0x38, 0x9d, 0x4e, 0x2c, 0xce, 0x2a, 0x46, 0x34, 0x6c, - 0xc5, 0xe9, 0xbd, 0x28, 0xbe, 0x97, 0x4d, 0xc3, 0xa6, 0xb7, 0xd7, 0xaa, 0x65, 0xa0, 0xd4, 0xf4, - 0x85, 0x72, 0x38, 0x6c, 0x30, 0x4d, 0x60, 0x7b, 0x2e, 0x01, 0xa2, 0xb1, 0x64, 0x0b, 0x24, 0x0c, - 0x90, 0x82, 0x29, 0xae, 0x96, 0x74, 0xf3, 0x01, 0x4a, 0x4a, 0x4a, 0x28, 0x2a, 0x2a, 0x02, 0xc3, - 0x8d, 0xef, 0xfc, 0x8d, 0x78, 0xbe, 0xf3, 0xc3, 0x01, 0x6d, 0x0a, 0xf7, 0xbd, 0xbd, 0x86, 0xdf, - 0xbf, 0xf6, 0xb8, 0x72, 0xcc, 0x9c, 0x2f, 0x81, 0x22, 0x83, 0xd9, 0x31, 0xcd, 0x26, 0xad, 0x21, - 0x13, 0x65, 0xb5, 0x80, 0x99, 0x89, 0xc1, 0x7c, 0x8a, 0x8b, 0x8b, 0x29, 0x2d, 0x2d, 0x45, 0x29, - 0x2b, 0x95, 0xe3, 0x56, 0x50, 0x7e, 0xf6, 0xbd, 0x68, 0x51, 0xf1, 0x7d, 0xaf, 0x75, 0x28, 0xb6, - 0xbf, 0xbd, 0x5e, 0x0d, 0x9b, 0x34, 0x5f, 0x22, 0x33, 0x6e, 0x93, 0x9b, 0x11, 0x7e, 0x69, 0xd6, - 0x4f, 0x56, 0x17, 0x32, 0x77, 0x6a, 0xad, 0xd1, 0x5a, 0x17, 0x66, 0x85, 0xfe, 0x75, 0xb2, 0x8f, - 0x73, 0xb9, 0x5c, 0x54, 0x54, 0x54, 0xa0, 0x94, 0xa2, 0xf4, 0xf4, 0x05, 0xf8, 0xce, 0x7b, 0x02, - 0x94, 0x23, 0xbe, 0x77, 0x43, 0x2c, 0x4c, 0xd3, 0xf6, 0x35, 0xaa, 0x0e, 0x60, 0xfa, 0xed, 0xb2, - 0x5c, 0x84, 0xeb, 0xb5, 0x10, 0x4e, 0x86, 0xd2, 0x58, 0x34, 0x4f, 0x0b, 0x14, 0xe4, 0x46, 0x27, - 0xf0, 0x38, 0xd7, 0x38, 0x9b, 0xcd, 0x46, 0x65, 0x65, 0x25, 0x86, 0x61, 0xe0, 0xae, 0xba, 0x8c, - 0xaa, 0xa9, 0x5b, 0x50, 0xb6, 0x8a, 0xf8, 0xfe, 0xa7, 0xeb, 0x18, 0xbb, 0xde, 0x7c, 0x5c, 0x5d, - 0x04, 0x70, 0xf1, 0x1d, 0xf2, 0x9c, 0x08, 0x33, 0x45, 0xf8, 0x3a, 0xc9, 0x0a, 0x92, 0x19, 0x85, - 0x52, 0x98, 0x1a, 0x82, 0x1c, 0xc6, 0x6a, 0xc5, 0xeb, 0xf5, 0x62, 0xb7, 0xdb, 0x71, 0x94, 0x9d, - 0x4b, 0x75, 0xc3, 0x8b, 0x58, 0xdd, 0xa7, 0xc5, 0x79, 0xa8, 0x90, 0x18, 0x6f, 0x34, 0xae, 0x56, - 0x37, 0x00, 0xcc, 0x5c, 0x24, 0xef, 0x49, 0x5f, 0xb0, 0xdb, 0xaf, 0x05, 0xd1, 0xc2, 0xc1, 0x88, - 0xc1, 0xae, 0xcc, 0x28, 0xa4, 0x25, 0x6f, 0x17, 0xea, 0x68, 0x3d, 0x48, 0xd3, 0xf2, 0xb9, 0x1c, - 0x7a, 0x6d, 0x33, 0x00, 0xcd, 0x2f, 0xad, 0xa5, 0x69, 0xf9, 0x5c, 0xba, 0xda, 0xbf, 0xc8, 0x39, - 0x57, 0x29, 0x45, 0x65, 0x65, 0x65, 0x1f, 0xd4, 0xba, 0x46, 0x51, 0xdd, 0xf0, 0x3c, 0x8e, 0x8a, - 0xf3, 0xe3, 0x7c, 0xd8, 0x45, 0x78, 0xba, 0x71, 0x95, 0x5a, 0x02, 0x70, 0xc9, 0x22, 0x69, 0x9e, - 0x75, 0xa7, 0x8c, 0x0b, 0xf8, 0x71, 0x56, 0xba, 0x18, 0x3d, 0xfb, 0x0e, 0x09, 0x26, 0xe4, 0x42, - 0xaf, 0x3d, 0xa2, 0x7a, 0x00, 0x07, 0xc0, 0xf0, 0xf3, 0x56, 0x51, 0x5c, 0x7d, 0x39, 0x1e, 0x8f, - 0x87, 0xb2, 0xb2, 0xb2, 0xac, 0x9a, 0xfc, 0xe6, 0xc0, 0x07, 0xec, 0xb8, 0xeb, 0xe2, 0x94, 0xf6, - 0x59, 0x1b, 0xf6, 0xe0, 0xa9, 0xa9, 0xcb, 0xdb, 0x22, 0x81, 0x40, 0x80, 0x60, 0x30, 0x88, 0xe8, - 0x08, 0x5f, 0xed, 0x5b, 0x4c, 0xa8, 0x75, 0x9b, 0xb9, 0x7b, 0x4b, 0xa8, 0x83, 0x9b, 0xaf, 0x79, - 0x40, 0x7a, 0x33, 0x06, 0xb2, 0xc4, 0x33, 0x50, 0xb8, 0xef, 0xd7, 0x5e, 0x31, 0x8f, 0xcb, 0x36, - 0xef, 0xa7, 0x66, 0xc6, 0x35, 0x79, 0x1d, 0xe6, 0x64, 0x2a, 0x29, 0x29, 0xa1, 0xbc, 0xbc, 0x1c, - 0x65, 0xd8, 0xf0, 0x9d, 0xfb, 0x10, 0x65, 0x67, 0xdc, 0x6a, 0xe6, 0xe9, 0x7a, 0xb7, 0x87, 0x3f, - 0x37, 0xae, 0x52, 0x15, 0x99, 0x23, 0x71, 0x02, 0x0a, 0x49, 0x41, 0x48, 0x04, 0x60, 0x73, 0x7b, - 0x70, 0xf9, 0x6a, 0xb0, 0xba, 0x8a, 0x4f, 0x4a, 0x00, 0x11, 0xc1, 0xed, 0x76, 0x33, 0x6c, 0xd8, - 0x30, 0x94, 0x52, 0x94, 0xd7, 0xdd, 0x81, 0x6f, 0xc2, 0xaf, 0x01, 0x6b, 0x1f, 0x5f, 0x9a, 0x0b, - 0x23, 0x31, 0x9a, 0xfe, 0xb4, 0x4a, 0x9d, 0x31, 0x24, 0x16, 0x18, 0x40, 0xae, 0x7e, 0x2c, 0x3a, - 0x29, 0x21, 0xec, 0x76, 0x3b, 0x3e, 0x9f, 0x0f, 0xc3, 0x30, 0x28, 0xaa, 0xbe, 0x8a, 0xaa, 0x0b, - 0xd6, 0x83, 0xd5, 0x13, 0xe7, 0xed, 0x4c, 0xa2, 0x34, 0xbd, 0xf2, 0x90, 0x3a, 0x2f, 0xab, 0x05, - 0x86, 0x2a, 0x90, 0x15, 0x82, 0x50, 0xc3, 0x87, 0x0f, 0xc7, 0x6e, 0xb7, 0xe3, 0xac, 0xb8, 0x80, - 0x91, 0xf5, 0x5b, 0xb0, 0x3a, 0x47, 0xc6, 0x79, 0xab, 0x8c, 0x69, 0x1e, 0x4c, 0xb5, 0x40, 0x42, - 0xa8, 0x2e, 0xc0, 0x7d, 0x4c, 0x32, 0x26, 0x08, 0x7c, 0x92, 0xb1, 0x24, 0x4e, 0x86, 0x61, 0xe0, - 0xf3, 0xf9, 0x70, 0xb9, 0x5c, 0xd8, 0x8a, 0x6a, 0x19, 0x31, 0xe5, 0xa9, 0x01, 0xfe, 0x84, 0x99, - 0x2f, 0xad, 0x50, 0x63, 0x13, 0xd2, 0xe9, 0x84, 0xbd, 0x25, 0xff, 0x58, 0x10, 0x8f, 0xc1, 0x47, - 0xde, 0x7c, 0x96, 0xd6, 0x77, 0xb6, 0x12, 0xed, 0x0e, 0x25, 0x9c, 0x81, 0xc1, 0x48, 0x3f, 0x42, - 0xa1, 0x10, 0xca, 0xea, 0x49, 0xe0, 0x51, 0x19, 0x8c, 0x02, 0xf6, 0x9b, 0xeb, 0x01, 0x06, 0xde, - 0xa5, 0x80, 0x60, 0xa6, 0x30, 0x6c, 0x0e, 0x22, 0x21, 0x3f, 0xbd, 0x81, 0x76, 0x0c, 0xab, 0x0d, - 0xc3, 0xe6, 0x00, 0xd4, 0xa0, 0x08, 0x60, 0xe6, 0xc3, 0xcc, 0xa3, 0xa8, 0xa4, 0xa2, 0x5e, 0x92, - 0x5c, 0xc1, 0xec, 0x46, 0xd9, 0x9e, 0xd2, 0x33, 0x27, 0x72, 0xf9, 0x0b, 0xad, 0x7c, 0xfa, 0xe2, - 0xa3, 0x1c, 0x78, 0x7a, 0x29, 0xf5, 0x2b, 0xb6, 0x51, 0x7e, 0xd6, 0xe4, 0x54, 0x97, 0x32, 0x17, - 0xc7, 0x4f, 0xdc, 0xcd, 0x37, 0x9f, 0xec, 0x3a, 0xd1, 0x7f, 0x22, 0x2f, 0xe8, 0x7f, 0xef, 0x63, - 0xa6, 0xaa, 0xfe, 0x4a, 0xce, 0xb9, 0x69, 0x49, 0x92, 0x6b, 0x99, 0x6f, 0x0a, 0x92, 0x04, 0x38, - 0x79, 0x0b, 0x24, 0x69, 0x20, 0x8f, 0x39, 0xdd, 0xed, 0x2d, 0x84, 0x5a, 0x3f, 0x3d, 0x61, 0x40, - 0x85, 0x52, 0x06, 0x28, 0x05, 0x28, 0x94, 0x52, 0x88, 0x8e, 0xf1, 0xef, 0x97, 0xd7, 0x12, 0xf6, - 0x7f, 0xc5, 0x59, 0xf3, 0x1f, 0xea, 0x57, 0x66, 0x02, 0x8f, 0xe4, 0xb0, 0x40, 0xa1, 0x02, 0xc4, - 0x47, 0xfd, 0xfd, 0xe1, 0x5b, 0x30, 0xec, 0xce, 0xac, 0x63, 0x2d, 0x76, 0x17, 0x00, 0x33, 0x7e, - 0xbb, 0x07, 0x97, 0xaf, 0x26, 0xa5, 0xbf, 0xeb, 0xe8, 0x67, 0x34, 0xdd, 0x77, 0x15, 0xad, 0x7f, - 0x79, 0x81, 0x9e, 0xc0, 0x37, 0x78, 0xaf, 0x5f, 0x9a, 0x6a, 0x81, 0x6c, 0x2e, 0x64, 0xce, 0x85, - 0xb4, 0xb9, 0x7a, 0x48, 0xd2, 0xb8, 0x8e, 0xf6, 0xa2, 0x0c, 0x03, 0x65, 0xb1, 0xf5, 0x0b, 0x1a, - 0xed, 0x0e, 0x61, 0x44, 0xc2, 0xd9, 0xeb, 0x58, 0x9b, 0x03, 0x80, 0xb6, 0x5d, 0xdb, 0x70, 0x94, - 0x7a, 0x51, 0x86, 0x05, 0x0c, 0xa3, 0x6f, 0x2d, 0x65, 0xd0, 0x75, 0xf4, 0x08, 0x61, 0xff, 0x57, - 0xa0, 0x14, 0xe5, 0x63, 0xa6, 0x81, 0x61, 0x41, 0xa2, 0x92, 0x50, 0xc8, 0xa8, 0x64, 0x0b, 0xc4, - 0x04, 0x94, 0xe4, 0x6f, 0x81, 0xce, 0xd6, 0x4f, 0x79, 0xef, 0xce, 0x0b, 0xa9, 0x6a, 0xf8, 0x1e, - 0x13, 0xee, 0xfe, 0x0d, 0xdd, 0x47, 0x8f, 0x00, 0x30, 0xf6, 0xf6, 0xc7, 0xf0, 0x4d, 0xbe, 0x24, - 0xab, 0x00, 0x7b, 0x96, 0x5d, 0x47, 0x07, 0x70, 0x60, 0xf3, 0xaf, 0xb2, 0x0a, 0x39, 0xfe, 0xae, - 0xb5, 0x94, 0x4d, 0xbc, 0x84, 0xb6, 0xb6, 0xb6, 0x13, 0x0a, 0x35, 0x29, 0x39, 0xc5, 0x02, 0x1a, - 0x53, 0x51, 0x92, 0x1b, 0x46, 0xc5, 0xe4, 0xf3, 0x6d, 0x3b, 0x5f, 0xa6, 0x75, 0xc7, 0x1f, 0x50, - 0x16, 0x1b, 0x45, 0xd5, 0xa7, 0xe5, 0x74, 0xbb, 0xea, 0x19, 0xd7, 0xf6, 0x69, 0x56, 0x6b, 0x44, - 0xfa, 0x88, 0x98, 0xe9, 0x5d, 0x6b, 0xbc, 0xe7, 0x5f, 0x4a, 0x59, 0xdd, 0x24, 0x7a, 0x7a, 0x7a, - 0xd2, 0xa2, 0x90, 0xca, 0xee, 0x42, 0x3a, 0x27, 0x0a, 0xc5, 0xdb, 0xbb, 0x8e, 0x1e, 0xe6, 0xa3, - 0xd5, 0xb7, 0x62, 0x71, 0x15, 0x71, 0xee, 0xcf, 0x7f, 0x87, 0xab, 0xaa, 0x36, 0xa7, 0x00, 0xc3, - 0xeb, 0xe7, 0x14, 0x0c, 0xa1, 0xc9, 0x67, 0x20, 0x16, 0xcd, 0x7a, 0x88, 0x07, 0x26, 0x7f, 0xfe, - 0xc6, 0xd3, 0x69, 0x17, 0xef, 0xf5, 0x1f, 0x03, 0x20, 0x78, 0xf0, 0x43, 0xec, 0xa5, 0x5e, 0x26, - 0xfe, 0xe2, 0x59, 0x3c, 0xa7, 0x8e, 0x19, 0xf4, 0xf4, 0xc3, 0x0c, 0xe9, 0x5a, 0xb2, 0x5c, 0xee, - 0xea, 0x0c, 0x28, 0x74, 0xe0, 0xc9, 0xc5, 0x39, 0xe2, 0x98, 0x62, 0xf2, 0x92, 0xad, 0xb8, 0x47, - 0xd4, 0x0e, 0x49, 0x5e, 0x94, 0xc9, 0x02, 0x2a, 0x5f, 0x14, 0x1a, 0xbb, 0x68, 0x4d, 0xfa, 0x9b, - 0xb6, 0xe3, 0x5f, 0xd2, 0xfc, 0xcc, 0x52, 0x10, 0xe1, 0xd0, 0xd6, 0x47, 0x19, 0xbd, 0xf0, 0xe1, - 0x3e, 0x34, 0x19, 0x32, 0x21, 0x12, 0x95, 0x4c, 0x2c, 0x4f, 0x0b, 0xf8, 0x32, 0xf8, 0x6b, 0xd7, - 0x17, 0x07, 0x69, 0x7e, 0x66, 0x29, 0xb6, 0xe2, 0x32, 0xda, 0xde, 0x79, 0x81, 0x48, 0x57, 0x90, - 0xb1, 0x8b, 0xd6, 0x62, 0xd8, 0xec, 0x83, 0xca, 0x7c, 0xc2, 0x79, 0xcc, 0x06, 0xa3, 0xe6, 0xce, - 0x42, 0x82, 0x58, 0xf9, 0x98, 0x69, 0x44, 0xbb, 0x43, 0xb4, 0xef, 0x7e, 0x83, 0x7d, 0x0f, 0xce, - 0x65, 0xfc, 0xcf, 0x36, 0x62, 0x71, 0xa4, 0xbf, 0xa3, 0xed, 0x6c, 0x69, 0xa6, 0xe5, 0xf5, 0x8d, - 0x85, 0xa5, 0xd6, 0x15, 0xd5, 0xc8, 0xb8, 0xcb, 0xfa, 0xad, 0x20, 0x99, 0x72, 0x21, 0x9d, 0xc1, - 0x85, 0xcc, 0x42, 0xa8, 0xb8, 0xe3, 0x99, 0x8f, 0x80, 0x61, 0x61, 0xc2, 0x3d, 0x9b, 0xd9, 0xbf, - 0xfa, 0xc7, 0x1c, 0xdb, 0xdd, 0x88, 0xff, 0x93, 0x26, 0x2a, 0x27, 0x5e, 0x9c, 0xfe, 0x86, 0xfa, - 0xeb, 0x56, 0xda, 0xf7, 0x6e, 0xa7, 0x7a, 0xc6, 0x75, 0x79, 0x0b, 0xa0, 0xdc, 0x25, 0xc4, 0xd2, - 0xc0, 0x68, 0x3c, 0x97, 0xc8, 0x89, 0x42, 0x69, 0xb1, 0x1f, 0x70, 0x56, 0x9d, 0xca, 0x85, 0x4f, - 0x7e, 0x84, 0xb2, 0xd8, 0xc0, 0xb0, 0xe0, 0xab, 0x9f, 0xc3, 0xb1, 0xdd, 0x8d, 0xe8, 0x58, 0x24, - 0xb3, 0xe5, 0x44, 0x70, 0x54, 0x8c, 0x60, 0xd4, 0xec, 0x9b, 0xf9, 0xc7, 0xba, 0x9f, 0xf6, 0x37, - 0x9f, 0x39, 0xf7, 0x7e, 0x9c, 0xde, 0x1a, 0x3e, 0x7f, 0x75, 0x03, 0x5d, 0x6d, 0x87, 0x12, 0x93, - 0xc5, 0xda, 0xf1, 0xf4, 0xa4, 0x41, 0x21, 0xc9, 0x17, 0x85, 0x32, 0xbb, 0x91, 0xc2, 0xe2, 0xf2, - 0xa4, 0xe4, 0xfe, 0xf1, 0x9b, 0xed, 0xcc, 0xf9, 0x9e, 0x29, 0xf3, 0x4c, 0xda, 0xaf, 0xeb, 0xcb, - 0xc3, 0x84, 0x8e, 0x7c, 0x9c, 0x30, 0xc7, 0x7d, 0xc6, 0x24, 0xc4, 0x5d, 0x5d, 0x60, 0x2e, 0x24, - 0x92, 0x57, 0x2a, 0x7d, 0xd2, 0x25, 0xa3, 0xbb, 0x84, 0xb1, 0x3f, 0xd9, 0x90, 0xd2, 0x5e, 0x77, - 0xd3, 0xb2, 0x54, 0xb0, 0xe8, 0xea, 0x22, 0xf4, 0xd9, 0x67, 0xa9, 0x30, 0x1a, 0xfb, 0xaf, 0x2d, - 0x70, 0x62, 0x6c, 0x34, 0x42, 0xa0, 0x79, 0x0f, 0x9d, 0x2d, 0xff, 0x02, 0x20, 0xd4, 0xf2, 0x4f, - 0x2c, 0x6e, 0x0f, 0xc5, 0xa7, 0x9c, 0x83, 0xd5, 0x5d, 0x92, 0x5a, 0xbd, 0x09, 0xf4, 0x06, 0xda, - 0x89, 0x84, 0xfc, 0xfd, 0xed, 0x8e, 0x8a, 0x2a, 0x2c, 0xce, 0x81, 0xcf, 0x72, 0xc1, 0xe6, 0x3d, - 0xe8, 0x68, 0xa4, 0x6f, 0x8e, 0xbb, 0x22, 0x6d, 0x20, 0x93, 0xac, 0x28, 0xa4, 0xf3, 0x47, 0xa1, - 0x48, 0xa7, 0x9f, 0x7d, 0xcb, 0x07, 0x0e, 0xe5, 0xe1, 0x3f, 0xae, 0x04, 0x60, 0xc2, 0x7d, 0xcf, - 0x51, 0x36, 0x7a, 0x6a, 0xda, 0x39, 0x47, 0x5e, 0x5e, 0x43, 0x6b, 0xe3, 0xa6, 0xfe, 0xdf, 0xa3, - 0x6f, 0x7b, 0x2c, 0x01, 0xae, 0x3f, 0x5e, 0xbd, 0x90, 0xde, 0x40, 0x3b, 0x00, 0x55, 0x97, 0xce, - 0x43, 0x26, 0x5d, 0xdd, 0xc7, 0x8f, 0xce, 0xe2, 0x42, 0x3a, 0x83, 0x0b, 0xe5, 0x12, 0xc2, 0x70, - 0xb8, 0xa9, 0xfd, 0xc1, 0x3d, 0x29, 0xed, 0x4e, 0x6f, 0x4d, 0xca, 0x5c, 0xc3, 0xe1, 0xc6, 0xe1, - 0x1d, 0xc5, 0xb0, 0xc9, 0xb3, 0x70, 0x0e, 0x1b, 0x39, 0x50, 0xf7, 0x26, 0xa5, 0x20, 0xde, 0x29, - 0x57, 0x12, 0xed, 0xee, 0x00, 0xa0, 0xe8, 0x94, 0x73, 0x08, 0xa4, 0x2b, 0x29, 0x75, 0x9e, 0x05, - 0x4d, 0xae, 0xc7, 0xe2, 0x70, 0x53, 0x33, 0x67, 0x61, 0x5e, 0xbe, 0x5f, 0x5a, 0x37, 0x99, 0xd2, - 0xba, 0xbe, 0x72, 0xb3, 0xf4, 0xec, 0x29, 0x19, 0xc7, 0x9d, 0x7e, 0xc3, 0xfd, 0x03, 0xb1, 0xa3, - 0xb3, 0x93, 0xe3, 0x87, 0x0e, 0xa5, 0xa4, 0xd3, 0x59, 0x73, 0xa1, 0xf8, 0xe5, 0x56, 0x38, 0x1c, - 0xc6, 0xef, 0xf7, 0xff, 0x4f, 0xbf, 0xc4, 0x87, 0xc3, 0xe1, 0xb4, 0xe9, 0xb4, 0xa1, 0xf2, 0xb0, - 0x40, 0x30, 0x18, 0x24, 0x18, 0x0c, 0x7e, 0x2b, 0xfe, 0x52, 0x90, 0x8c, 0x42, 0xd1, 0x34, 0x28, - 0xd4, 0x1b, 0xbf, 0x9d, 0xee, 0x38, 0xb6, 0x9b, 0x68, 0xf8, 0xf8, 0xb7, 0xea, 0x3f, 0x11, 0x3a, - 0xd6, 0x9b, 0x9c, 0x4e, 0x87, 0x93, 0x2d, 0xf0, 0x0e, 0x70, 0x05, 0x80, 0xbf, 0xe5, 0x2d, 0xfc, - 0xbc, 0x35, 0xc8, 0x2a, 0x1c, 0xd4, 0xd5, 0x82, 0x2a, 0xcc, 0xee, 0x84, 0xab, 0xc5, 0x58, 0x94, - 0x5b, 0x04, 0x5e, 0x15, 0x21, 0x96, 0xcf, 0x77, 0xda, 0x82, 0x89, 0x41, 0xa3, 0x7d, 0x22, 0x7c, - 0xff, 0x9e, 0xa7, 0xa4, 0x23, 0xe1, 0x03, 0x47, 0xfc, 0x59, 0xb1, 0x40, 0x8d, 0x30, 0x0c, 0x66, - 0xa3, 0xb0, 0x7f, 0x9b, 0x5c, 0x48, 0xf5, 0x1d, 0x81, 0xf7, 0xef, 0x5d, 0x27, 0x7b, 0xcd, 0xed, - 0xff, 0x01, 0xf0, 0x3e, 0x79, 0xb4, 0x19, 0x63, 0x64, 0xed, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, - 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0x87, 0x00, 0x00, 0x08, 0xbc, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x99, 0x7b, 0x70, 0xd4, + 0xd5, 0x15, 0xc7, 0x3f, 0xf7, 0xb7, 0xbf, 0xdd, 0x6c, 0x36, 0x64, 0xf3, 0xd8, 0x6c, 0xb2, 0x1b, + 0x90, 0xa7, 0xad, 0x0f, 0x94, 0x42, 0x29, 0xcf, 0x58, 0x8c, 0xc5, 0x16, 0x33, 0x36, 0x8e, 0x7d, + 0x30, 0x2a, 0xf8, 0xb6, 0x2d, 0x6a, 0xc5, 0x3a, 0x5a, 0x9d, 0x0a, 0xad, 0x1d, 0x75, 0x98, 0xc1, + 0x57, 0x1d, 0xa5, 0xc2, 0x48, 0xc8, 0xd0, 0x51, 0x74, 0xb4, 0xa0, 0xd5, 0x82, 0x40, 0x3b, 0xd2, + 0x32, 0x45, 0x41, 0xa8, 0x5a, 0xed, 0xd4, 0xf0, 0xe8, 0x50, 0x12, 0xa1, 0x96, 0x24, 0xc0, 0xc2, + 0x86, 0x25, 0xcb, 0x3e, 0xee, 0xe9, 0x1f, 0x9b, 0x7d, 0xb1, 0xbb, 0xd9, 0x07, 0x30, 0x83, 0x67, + 0xe6, 0x37, 0x49, 0xee, 0xef, 0xfe, 0xee, 0x39, 0xe7, 0x9e, 0xf3, 0x3d, 0xe7, 0x7b, 0x6f, 0x94, + 0x88, 0xf0, 0xf7, 0x36, 0x35, 0x49, 0x1b, 0x3c, 0x8a, 0xd0, 0xc2, 0xd9, 0x91, 0x00, 0x8a, 0x8d, + 0xa2, 0xf9, 0x83, 0xb3, 0x9a, 0xd5, 0x17, 0xcf, 0x96, 0x50, 0xea, 0xcb, 0x8e, 0xd5, 0xca, 0xd6, + 0xe7, 0x67, 0x35, 0xc2, 0x35, 0x45, 0xac, 0xf9, 0x1f, 0x25, 0xfc, 0x5c, 0x6d, 0x7b, 0x91, 0x29, + 0x28, 0x3e, 0x28, 0xd5, 0x32, 0x29, 0xfe, 0x93, 0xf7, 0x25, 0xca, 0xf7, 0xa7, 0xdf, 0x29, 0x3d, + 0xf1, 0x81, 0xad, 0x6d, 0x6a, 0x92, 0x01, 0x3b, 0x4a, 0x50, 0xdf, 0x69, 0x68, 0x61, 0xbe, 0x16, + 0x28, 0xf5, 0x91, 0xe2, 0x9f, 0x26, 0x0c, 0x76, 0x6c, 0x5b, 0xae, 0x2e, 0x8d, 0x5b, 0x31, 0xfd, + 0xc7, 0x7c, 0xa8, 0x61, 0x47, 0x09, 0xfa, 0x6b, 0x4c, 0x81, 0x6f, 0xc4, 0xb7, 0xb1, 0xbc, 0xfe, + 0x0a, 0x3c, 0x53, 0x56, 0xe5, 0x74, 0x57, 0x29, 0x55, 0x72, 0x0e, 0xf5, 0xed, 0x7f, 0x9d, 0x43, + 0x9f, 0x3e, 0x84, 0xe8, 0x30, 0xc0, 0x08, 0x81, 0xad, 0xef, 0xbd, 0xa8, 0xe6, 0x5c, 0x36, 0x4f, + 0xd6, 0x82, 0x48, 0x99, 0xa8, 0x2b, 0x82, 0xc2, 0x2a, 0xe0, 0x7b, 0xc5, 0xac, 0x6b, 0xa4, 0xef, + 0xa6, 0x24, 0x9e, 0xac, 0xe9, 0x92, 0xf2, 0xbe, 0x98, 0x47, 0x6b, 0x4d, 0xc5, 0xd0, 0xd9, 0x34, + 0x4c, 0x7d, 0x1d, 0x65, 0xad, 0x8d, 0xeb, 0x1b, 0x22, 0xc2, 0x5b, 0x5b, 0x96, 0xa9, 0x07, 0x01, + 0x26, 0xfe, 0x44, 0x4e, 0x34, 0xcd, 0xe3, 0x07, 0x22, 0x2c, 0x2e, 0x34, 0x9a, 0x08, 0xa8, 0xcd, + 0x4b, 0xd9, 0xa5, 0xe0, 0x02, 0x00, 0x47, 0x7d, 0x33, 0x9e, 0x29, 0x2f, 0x03, 0xe0, 0x76, 0xbb, + 0xb1, 0x58, 0x2c, 0x05, 0xef, 0xc4, 0x5b, 0x3f, 0x1c, 0x8e, 0xc5, 0x66, 0xa7, 0xf5, 0xd5, 0x3d, + 0x19, 0xef, 0xc2, 0xe1, 0x30, 0x3e, 0x9f, 0x0f, 0xad, 0x35, 0x91, 0x13, 0xfb, 0x39, 0xb8, 0xe3, + 0x16, 0x42, 0x7d, 0xff, 0x4e, 0x6e, 0x8c, 0xe2, 0x77, 0x6e, 0x17, 0xf3, 0xe2, 0xe0, 0xfe, 0xdb, + 0x52, 0x75, 0x33, 0x8a, 0x36, 0xc0, 0x96, 0x47, 0xed, 0x31, 0x43, 0x32, 0x72, 0xba, 0xb4, 0x5d, + 0x8e, 0x86, 0x4e, 0x12, 0x0d, 0x05, 0xb3, 0xbe, 0x33, 0x4d, 0x13, 0x97, 0xcb, 0x85, 0x69, 0x9a, + 0x58, 0xca, 0x87, 0xe1, 0x6d, 0x7a, 0x1b, 0x7b, 0xdd, 0xe5, 0x49, 0x9d, 0x9a, 0x5b, 0x7b, 0x7a, + 0xd9, 0xb4, 0x65, 0x89, 0x72, 0x03, 0xcc, 0xb8, 0x5b, 0x5e, 0xd2, 0xc2, 0x4c, 0x11, 0x0e, 0xe5, + 0x8b, 0x82, 0x91, 0x36, 0xa0, 0x63, 0xe1, 0xd6, 0x5a, 0x9f, 0xf1, 0x3a, 0x6a, 0x18, 0x06, 0xb5, + 0xb5, 0xb5, 0x94, 0x95, 0x95, 0xa1, 0x2c, 0x15, 0x78, 0x26, 0xaf, 0xc4, 0x39, 0xe2, 0x56, 0x44, + 0x13, 0x7f, 0x2e, 0x8b, 0x28, 0xb6, 0x6f, 0x7e, 0x5e, 0x5d, 0x02, 0xd0, 0x7c, 0xb7, 0xbc, 0xa7, + 0x34, 0x93, 0xb5, 0xd0, 0x31, 0x18, 0x90, 0x8d, 0x94, 0x05, 0x06, 0x1c, 0x29, 0x2d, 0x02, 0xf1, + 0x82, 0x3a, 0xf8, 0x1c, 0xa8, 0xae, 0xae, 0xc6, 0xe1, 0x70, 0xa0, 0x45, 0x51, 0x3b, 0xf6, 0xd7, + 0xb8, 0x2e, 0x79, 0x1c, 0xb0, 0xc4, 0x37, 0x71, 0x94, 0x56, 0x6c, 0xfd, 0xeb, 0x12, 0x75, 0x35, + 0xc0, 0x8c, 0x7b, 0x64, 0x5f, 0x50, 0x33, 0x0d, 0xcd, 0xc6, 0x9c, 0x11, 0xd0, 0x83, 0xa4, 0xd0, + 0xd9, 0x12, 0xa7, 0xd3, 0x49, 0x75, 0x75, 0x35, 0x00, 0x95, 0x23, 0xe6, 0xd2, 0x30, 0x79, 0x25, + 0x98, 0xce, 0xb8, 0x0d, 0x95, 0x51, 0xe1, 0x8f, 0x9b, 0x9e, 0x57, 0xf7, 0x03, 0xb4, 0xcc, 0x17, + 0xff, 0x21, 0x0f, 0xdf, 0x05, 0x96, 0x64, 0x75, 0x80, 0xb4, 0x81, 0x74, 0xe3, 0x8b, 0x8b, 0x40, + 0x71, 0x95, 0xaa, 0xbc, 0xbc, 0x1c, 0x97, 0xcb, 0x85, 0x52, 0x0a, 0x7b, 0x5d, 0x13, 0x43, 0x9b, + 0xd6, 0x60, 0x3a, 0x86, 0xc7, 0x6d, 0x31, 0xb4, 0xf0, 0xcc, 0xbb, 0xcf, 0xab, 0xf6, 0x8f, 0x96, + 0x2b, 0xeb, 0xec, 0xd9, 0x12, 0xfd, 0xd6, 0x3d, 0x72, 0xaf, 0xc0, 0xdd, 0x5a, 0x88, 0xa4, 0x6c, + 0x78, 0xc0, 0x88, 0xa6, 0x46, 0x40, 0x93, 0xc0, 0x40, 0xf1, 0x29, 0x54, 0x7c, 0xa9, 0xb5, 0x5a, + 0xad, 0x89, 0x6a, 0x67, 0x71, 0x8c, 0xc2, 0x3b, 0xfd, 0x0d, 0xca, 0x6a, 0x27, 0x27, 0xec, 0x89, + 0x6a, 0x6e, 0x3f, 0x74, 0x82, 0x77, 0xd7, 0x3d, 0xa3, 0xea, 0x00, 0xae, 0x9c, 0x2f, 0xcb, 0xb4, + 0xa6, 0x45, 0x84, 0x4f, 0x44, 0xd8, 0x29, 0x9a, 0x9f, 0xa9, 0x0d, 0xbf, 0x61, 0x17, 0xf1, 0x32, + 0xea, 0x9e, 0x81, 0x77, 0xca, 0x0a, 0x00, 0xbc, 0x5e, 0x2f, 0xa6, 0x69, 0xe6, 0x4d, 0x87, 0x3f, + 0xdd, 0x31, 0x9e, 0xa0, 0xaf, 0x87, 0xf0, 0x89, 0x3e, 0x00, 0xac, 0x8e, 0x4a, 0xec, 0x35, 0xf5, + 0xcc, 0x6a, 0xff, 0xa4, 0xe0, 0x94, 0xd2, 0x5a, 0x73, 0xe4, 0xc8, 0x11, 0xfa, 0xfb, 0xfb, 0x11, + 0x89, 0xd0, 0xfb, 0xcf, 0x47, 0xe8, 0xdb, 0xbf, 0x26, 0x8d, 0xf7, 0x88, 0xa6, 0xb5, 0xe5, 0x01, + 0xe9, 0xc8, 0x28, 0x0e, 0x49, 0xf0, 0x96, 0x06, 0xe0, 0x50, 0xc0, 0x4f, 0x38, 0xe0, 0xc7, 0xb0, + 0x98, 0x18, 0x16, 0x93, 0x70, 0xc0, 0x4f, 0x28, 0xe0, 0x2f, 0x6a, 0x0d, 0xa5, 0x14, 0x2e, 0x97, + 0x8b, 0x21, 0x43, 0x86, 0x00, 0x16, 0xdc, 0xe3, 0x16, 0x51, 0x7b, 0xe1, 0x43, 0x68, 0x8c, 0x78, + 0x34, 0x46, 0x8b, 0x62, 0xdb, 0x86, 0x67, 0x54, 0x06, 0xd9, 0x34, 0xa2, 0x64, 0x07, 0x71, 0xa1, + 0xe9, 0x00, 0x60, 0x58, 0xcb, 0xb8, 0x76, 0xed, 0x61, 0xae, 0x5d, 0x7b, 0x18, 0xc3, 0x5a, 0x56, + 0x72, 0xd7, 0xae, 0xaa, 0xaa, 0xa2, 0xa6, 0xa6, 0x06, 0x80, 0xaa, 0xd1, 0xb7, 0xe3, 0x99, 0xf8, + 0x5b, 0x94, 0xc5, 0x11, 0xdf, 0x60, 0xa7, 0x86, 0xb5, 0xef, 0x3c, 0xad, 0xee, 0x4b, 0x73, 0xe0, + 0x54, 0x10, 0x17, 0x8b, 0x81, 0x38, 0x8f, 0x4a, 0xc3, 0xc2, 0x69, 0x94, 0x63, 0x87, 0xc3, 0x41, + 0x5d, 0x5d, 0x5d, 0x8c, 0x9b, 0xb9, 0x9b, 0x69, 0x9c, 0xfa, 0x0a, 0x16, 0xbb, 0x27, 0x6e, 0xa3, + 0x45, 0xe0, 0xd9, 0x75, 0x4f, 0xa9, 0xb6, 0x8f, 0x96, 0x2b, 0x6b, 0x06, 0x17, 0x2a, 0xa5, 0x13, + 0x9f, 0x0a, 0xde, 0xd3, 0xe5, 0x4d, 0x22, 0x82, 0xcd, 0x66, 0xc3, 0xe3, 0xf1, 0x60, 0x9a, 0x26, + 0xd6, 0xca, 0xaf, 0x32, 0x74, 0xfa, 0xef, 0xb1, 0x55, 0x8d, 0x4b, 0xda, 0x09, 0x3f, 0xfa, 0xe2, + 0x18, 0x7f, 0x5e, 0xf7, 0xa8, 0x72, 0x18, 0x99, 0xb5, 0xf5, 0xec, 0xf7, 0x81, 0x42, 0xc4, 0x62, + 0xb1, 0xd0, 0xd0, 0xd0, 0x80, 0xdd, 0x6e, 0xc7, 0xb0, 0xd5, 0xd2, 0x38, 0x75, 0x25, 0x15, 0xde, + 0x96, 0x84, 0x9d, 0x5a, 0x68, 0x8e, 0xda, 0x59, 0x6c, 0xea, 0x14, 0x3b, 0xf5, 0x40, 0x0a, 0x65, + 0xdb, 0xd1, 0xbc, 0x07, 0x9b, 0x53, 0xe6, 0x9e, 0x89, 0x0d, 0x50, 0x4a, 0xe1, 0x76, 0xbb, 0xf1, + 0xf9, 0x7c, 0xf8, 0xfd, 0x42, 0xc3, 0xf8, 0x27, 0x89, 0x86, 0x8e, 0x13, 0xe8, 0xd9, 0x12, 0x9f, + 0x72, 0x8d, 0x19, 0xc7, 0x00, 0xc4, 0xe9, 0x84, 0x14, 0xe9, 0x80, 0x20, 0x91, 0x30, 0x5b, 0x1e, + 0x6a, 0x41, 0x59, 0x4c, 0x24, 0x12, 0x8e, 0x8d, 0x9d, 0xc1, 0x08, 0x56, 0x55, 0x55, 0x71, 0xf4, + 0xe8, 0xd1, 0x81, 0x82, 0x51, 0x4b, 0xca, 0xd2, 0xd5, 0x66, 0x2a, 0x6f, 0x8b, 0xa7, 0x50, 0xb1, + 0x11, 0x10, 0xd1, 0x1c, 0xe9, 0xf8, 0xe0, 0x8c, 0x47, 0x20, 0x1b, 0xbe, 0x62, 0xbf, 0x27, 0xdf, + 0x65, 0xa4, 0x50, 0xb1, 0x0e, 0x4c, 0x5f, 0xbc, 0x1e, 0x89, 0x46, 0xd8, 0xfc, 0xd3, 0x69, 0x54, + 0x8e, 0x1c, 0xcb, 0xc4, 0x07, 0x57, 0xc4, 0x22, 0x31, 0xc8, 0xb7, 0xbd, 0xff, 0xf8, 0x0b, 0x5d, + 0x1b, 0x56, 0x26, 0x1d, 0x1d, 0x20, 0x83, 0xc9, 0xdf, 0x63, 0xe3, 0xde, 0xa9, 0x57, 0x33, 0x7c, + 0xd6, 0xcd, 0x69, 0xb6, 0xc4, 0x81, 0x9c, 0x70, 0x20, 0x55, 0x8f, 0x08, 0x45, 0x63, 0xc0, 0xe1, + 0x19, 0x99, 0x04, 0x9e, 0xcd, 0x4e, 0xc5, 0xd0, 0xf3, 0xf3, 0x46, 0x20, 0x70, 0xb0, 0x8b, 0x83, + 0xdb, 0x37, 0xe4, 0x5d, 0xbb, 0xf7, 0xe3, 0x4d, 0x04, 0xba, 0xbb, 0xb8, 0x60, 0xee, 0x82, 0x94, + 0x8d, 0x25, 0x3d, 0x02, 0x51, 0x01, 0x95, 0x88, 0x40, 0x69, 0x29, 0x14, 0x97, 0xfe, 0xde, 0xfd, + 0x7c, 0xb6, 0x62, 0x61, 0xde, 0x79, 0xe1, 0x3e, 0x1f, 0x00, 0x0d, 0x53, 0x5a, 0x18, 0x71, 0xd5, + 0x6d, 0xa0, 0x14, 0xa0, 0x62, 0x67, 0x6e, 0x05, 0xa0, 0x08, 0x7c, 0xb1, 0x97, 0x8e, 0xf6, 0x85, + 0xec, 0x7d, 0xe3, 0x39, 0xfa, 0x7b, 0x0f, 0xe0, 0x6c, 0xbd, 0x1f, 0x65, 0x31, 0x63, 0x85, 0x26, + 0xd5, 0x01, 0x92, 0xbd, 0x28, 0x6b, 0x17, 0x2e, 0x46, 0x4e, 0xfa, 0x7a, 0xe8, 0x5c, 0xb7, 0x3c, + 0x3f, 0x9d, 0x1e, 0x39, 0x16, 0x00, 0xbb, 0xab, 0x91, 0xda, 0x4b, 0xa6, 0x83, 0x32, 0x50, 0xca, + 0x18, 0x70, 0x64, 0xe0, 0x82, 0xc1, 0x7d, 0x1e, 0xf6, 0x5a, 0x2f, 0x27, 0xba, 0xbb, 0x38, 0xf2, + 0xd9, 0x56, 0xec, 0x4d, 0x37, 0x60, 0xab, 0x1b, 0x96, 0x89, 0x81, 0x53, 0x53, 0xa8, 0x50, 0x07, + 0x3e, 0x7e, 0xe2, 0x56, 0x0c, 0xd3, 0xca, 0xf8, 0x07, 0xda, 0x52, 0x94, 0x0e, 0x63, 0xec, 0xbc, + 0x27, 0xf3, 0x3a, 0x70, 0x64, 0xe7, 0x76, 0xfc, 0x9d, 0x9f, 0xd1, 0xb5, 0xbe, 0x9d, 0xae, 0xf5, + 0xed, 0xa9, 0x75, 0x73, 0xc0, 0x11, 0x03, 0x44, 0x23, 0x3a, 0x8a, 0x73, 0xf4, 0xa5, 0x7c, 0xfd, + 0x17, 0x2f, 0xf1, 0x3f, 0x7f, 0xec, 0xb8, 0x9a, 0x81, 0x01, 0x9d, 0x72, 0x3b, 0x55, 0x4c, 0x1f, + 0xe8, 0xd9, 0xb1, 0x11, 0xc3, 0x6a, 0x43, 0x44, 0xf8, 0x7c, 0x63, 0x0c, 0x90, 0x91, 0x60, 0x00, + 0xd7, 0xf8, 0x2b, 0xf2, 0x3a, 0x10, 0xf4, 0x75, 0x63, 0x3a, 0x9c, 0x20, 0x82, 0x0c, 0x1c, 0x07, + 0x45, 0x0f, 0xfc, 0x14, 0x01, 0x1d, 0x45, 0x44, 0x53, 0x3f, 0xe9, 0x2a, 0xc6, 0xdd, 0xb7, 0x14, + 0xc3, 0x66, 0x47, 0x8e, 0x75, 0x66, 0x62, 0x40, 0x81, 0x29, 0xa7, 0x59, 0x46, 0x77, 0xbf, 0xfc, + 0x38, 0x9d, 0x6f, 0x2f, 0xc5, 0x52, 0xe6, 0x60, 0xdc, 0xbd, 0x2f, 0x14, 0xf4, 0x4d, 0x63, 0xf3, + 0x75, 0x34, 0x36, 0x5f, 0x57, 0x54, 0x19, 0x4d, 0x6c, 0xac, 0x4e, 0x49, 0x21, 0x19, 0x48, 0x21, + 0xc9, 0xe2, 0x40, 0x9c, 0xd0, 0x0d, 0xba, 0x70, 0x34, 0x42, 0xe7, 0xdb, 0x4b, 0xb1, 0x39, 0x5d, + 0x4c, 0x78, 0xf8, 0x25, 0x9c, 0x63, 0xc6, 0x9f, 0x15, 0x0a, 0x92, 0x51, 0x46, 0x75, 0x6a, 0x0a, + 0xa5, 0x46, 0x20, 0xa5, 0x13, 0x77, 0xbf, 0xff, 0x16, 0xfb, 0x56, 0x3f, 0x3d, 0xf8, 0xc2, 0x5a, + 0x53, 0x5e, 0x7f, 0x1e, 0x13, 0x16, 0xbc, 0x8a, 0xc3, 0x3b, 0xea, 0xac, 0xf1, 0xa7, 0x41, 0x1b, + 0x99, 0xe4, 0xe0, 0x42, 0x91, 0xfe, 0xe3, 0x04, 0x7b, 0x0f, 0xe4, 0x5d, 0x7c, 0xe4, 0xb5, 0xf3, + 0x29, 0xf7, 0x8c, 0xcc, 0x69, 0xfc, 0xbe, 0x35, 0xcf, 0x12, 0x0d, 0x05, 0x4b, 0xe0, 0x41, 0xe9, + 0xa9, 0x1d, 0x74, 0x36, 0xe2, 0xb8, 0xf8, 0x9b, 0x71, 0x22, 0x77, 0x4a, 0x04, 0x54, 0x66, 0x0a, + 0x35, 0xce, 0x9c, 0xcb, 0xf0, 0x59, 0xb7, 0xe4, 0x54, 0xb0, 0xe9, 0xfa, 0xf3, 0x00, 0xd8, 0xb5, + 0xe2, 0x61, 0x24, 0x1a, 0x61, 0xe8, 0xb7, 0x6f, 0xca, 0x3a, 0xef, 0xf3, 0xf5, 0x6d, 0x44, 0x06, + 0x8e, 0x9b, 0xa7, 0x23, 0x95, 0x93, 0x5a, 0xb1, 0x5f, 0xd8, 0x84, 0xd6, 0xa7, 0x46, 0x20, 0xa5, + 0x0a, 0x15, 0xdb, 0x07, 0x94, 0xc5, 0xc4, 0x30, 0xad, 0xec, 0x6a, 0x5f, 0x40, 0xd0, 0xd7, 0xcd, + 0xe8, 0xd9, 0x0f, 0x64, 0x9d, 0xe7, 0x9e, 0xdc, 0xc2, 0x45, 0xf3, 0x9e, 0x3a, 0xad, 0x14, 0xea, + 0xfc, 0xfc, 0x40, 0x22, 0x7d, 0x72, 0x73, 0x21, 0x4d, 0x51, 0xb7, 0x72, 0xca, 0x30, 0x98, 0xf0, + 0xcb, 0xd7, 0xf8, 0xf4, 0xc9, 0xdb, 0xe8, 0x7c, 0xf3, 0x39, 0xa2, 0xc1, 0x00, 0x5f, 0xb9, 0xe9, + 0x91, 0xcc, 0x5b, 0x39, 0x8b, 0x89, 0xe9, 0x70, 0x72, 0x60, 0xe3, 0x4a, 0x4e, 0xfa, 0x0e, 0x26, + 0x95, 0x57, 0x54, 0x33, 0xe2, 0x9a, 0xbb, 0x00, 0x08, 0xf9, 0x0f, 0xd3, 0xbb, 0x63, 0x43, 0x6e, + 0x0c, 0x78, 0xc7, 0x81, 0x69, 0x4b, 0xf4, 0x82, 0xd3, 0x6e, 0x64, 0xb6, 0xaa, 0x3a, 0x0c, 0x6b, + 0x19, 0x95, 0x63, 0xc6, 0x33, 0xf1, 0xd1, 0x37, 0xf9, 0x70, 0x61, 0x2b, 0x3d, 0x1f, 0xac, 0xe3, + 0xfc, 0x1b, 0x7f, 0x95, 0xf5, 0x9f, 0x20, 0x22, 0xc2, 0x17, 0x9b, 0x5f, 0xe3, 0x78, 0xd7, 0xce, + 0xc4, 0xb8, 0xbd, 0x6e, 0x28, 0xc3, 0x5b, 0xef, 0x8c, 0xd1, 0x90, 0xee, 0x2e, 0x76, 0xb7, 0x2f, + 0xc8, 0xa9, 0xcf, 0x73, 0xdf, 0x2a, 0x2c, 0x56, 0x7b, 0xe2, 0x7f, 0x12, 0x05, 0xb1, 0xd1, 0xc1, + 0xa4, 0x69, 0xd9, 0x47, 0xc9, 0x0e, 0xec, 0x19, 0x85, 0x59, 0xe1, 0xcc, 0x5f, 0xff, 0x67, 0xde, + 0x48, 0xe8, 0x58, 0x6f, 0x52, 0xb9, 0x23, 0xf9, 0x8d, 0xb5, 0xb2, 0x86, 0xfa, 0x69, 0xad, 0xb9, + 0x72, 0x08, 0xac, 0x65, 0xc9, 0xeb, 0xfa, 0x42, 0x22, 0x50, 0x2a, 0xa7, 0xcf, 0xfa, 0xcd, 0x80, + 0xe2, 0xc6, 0x99, 0x73, 0x73, 0xce, 0xb7, 0xd7, 0x8f, 0xe0, 0xe2, 0x7b, 0x96, 0xe4, 0x5c, 0x73, + 0xcf, 0x9e, 0x3d, 0xd9, 0x31, 0x30, 0x18, 0x9d, 0x3e, 0x97, 0x24, 0xd9, 0xc8, 0x64, 0x70, 0x2e, + 0x54, 0x2c, 0x95, 0x38, 0xde, 0xd5, 0x41, 0xe4, 0x84, 0x1f, 0x1d, 0x3e, 0x09, 0x80, 0xaf, 0x63, + 0x5b, 0xec, 0xac, 0x77, 0xd1, 0xd4, 0x0c, 0x0c, 0x14, 0x2a, 0xe1, 0x3e, 0x1f, 0xd1, 0x60, 0x20, + 0xf5, 0xd0, 0x4a, 0x34, 0x14, 0x44, 0x99, 0xb6, 0x2c, 0x11, 0xd0, 0xb9, 0x53, 0xa8, 0x10, 0xd9, + 0xbb, 0xea, 0x31, 0x8e, 0xee, 0xdc, 0x9e, 0xf8, 0xfb, 0xd3, 0x45, 0x37, 0x00, 0x70, 0xf9, 0xaa, + 0x7d, 0x69, 0xf3, 0xf6, 0xbf, 0xd3, 0x46, 0xe7, 0x9a, 0xcc, 0xce, 0x3e, 0xed, 0x85, 0x0f, 0x31, + 0x1d, 0x95, 0xe9, 0x6b, 0xbe, 0xba, 0x88, 0xee, 0x2d, 0x6f, 0xa4, 0x9f, 0x8b, 0xaf, 0x7f, 0x0c, + 0xdb, 0xe8, 0x89, 0x31, 0x2e, 0x94, 0x8b, 0x4a, 0xe8, 0x12, 0x0e, 0xf5, 0xb5, 0x13, 0xae, 0xa4, + 0xdc, 0x3b, 0x26, 0xff, 0x2d, 0x45, 0x34, 0x82, 0x0e, 0x87, 0xb2, 0x9e, 0xa7, 0x0b, 0xd1, 0x93, + 0x0a, 0xe0, 0x41, 0x40, 0x2c, 0x45, 0x63, 0x60, 0x58, 0xcb, 0x1d, 0x05, 0xcd, 0xab, 0x19, 0x37, + 0x03, 0xb3, 0xa2, 0x32, 0xf3, 0xfe, 0xc7, 0x56, 0x9e, 0x31, 0x36, 0x64, 0xe4, 0x58, 0x22, 0x01, + 0x7f, 0x5a, 0x21, 0x8e, 0x38, 0xaa, 0x33, 0x41, 0xac, 0x32, 0xca, 0x68, 0xd2, 0xf0, 0x70, 0x38, + 0x7c, 0x46, 0xc0, 0xf7, 0xb5, 0x45, 0xb1, 0x73, 0x83, 0xa5, 0xbc, 0x12, 0x97, 0xf7, 0xfc, 0xcc, + 0x7c, 0xd7, 0x02, 0xa1, 0xf4, 0xc8, 0xb8, 0x9b, 0xe7, 0xe0, 0x6e, 0x9e, 0x93, 0x51, 0x85, 0xb4, + 0xd6, 0xe9, 0x20, 0x96, 0x38, 0x06, 0xb2, 0x70, 0xa1, 0xbd, 0x7b, 0xf7, 0x72, 0x2e, 0x4a, 0x26, + 0x1b, 0x8d, 0x81, 0x3c, 0x16, 0x81, 0xe8, 0x49, 0xc2, 0xfd, 0x3d, 0x9c, 0xcb, 0xa2, 0x23, 0xc1, + 0x54, 0x07, 0xc4, 0xd4, 0xc2, 0x6e, 0xe0, 0x42, 0x80, 0xe3, 0x87, 0xff, 0xc5, 0x9e, 0xcd, 0x77, + 0xf0, 0x25, 0x92, 0xdd, 0x66, 0x54, 0xf1, 0x98, 0xa1, 0xf9, 0x0e, 0x50, 0xce, 0x97, 0x4b, 0xc2, + 0x5a, 0xf1, 0xb0, 0x12, 0x11, 0x9e, 0xbe, 0x4b, 0xd5, 0x87, 0xe1, 0x7a, 0xa5, 0x98, 0x03, 0x78, + 0xce, 0x65, 0xab, 0x95, 0x70, 0x58, 0x1b, 0xbc, 0xae, 0x35, 0xaf, 0x2c, 0x5c, 0x26, 0xff, 0xfd, + 0x3f, 0x14, 0xf4, 0x82, 0x81, 0xaa, 0xdf, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82, }; const BITMAP_OPAQUE icon_kicad_xpm[1] = {{ png, sizeof( png ), "icon_kicad_xpm" }}; diff --git a/bitmaps_png/cpp_48/icon_pagelayout_editor.cpp b/bitmaps_png/cpp_48/icon_pagelayout_editor.cpp new file mode 100644 index 0000000000..4b1175139d --- /dev/null +++ b/bitmaps_png/cpp_48/icon_pagelayout_editor.cpp @@ -0,0 +1,198 @@ + +/* Do not modify this file, it was automatically generated by the + * PNG2cpp CMake script, using a *.png file as input. + */ + +#include + +static const unsigned char png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, + 0x87, 0x00, 0x00, 0x0b, 0x52, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xd5, 0x99, 0x09, 0x54, 0x94, + 0xe5, 0x1a, 0xc7, 0xa9, 0xe3, 0xed, 0xda, 0x4d, 0xd3, 0xf2, 0xea, 0xb5, 0xa3, 0xa6, 0xe6, 0x92, + 0x27, 0xcb, 0x15, 0x17, 0xd4, 0xb2, 0xcc, 0xad, 0x3c, 0x79, 0x5d, 0x50, 0x49, 0x73, 0x89, 0xbc, + 0x75, 0xbb, 0x5a, 0x9d, 0xec, 0x5e, 0x0d, 0x2d, 0xbd, 0x5a, 0x89, 0x4b, 0x79, 0x2c, 0x20, 0x05, + 0x52, 0x13, 0x50, 0x60, 0x40, 0x16, 0x95, 0x65, 0x58, 0x4c, 0xf6, 0x7d, 0x90, 0xd8, 0x84, 0x61, + 0x0b, 0x66, 0x61, 0x16, 0xd6, 0x11, 0x44, 0x41, 0xff, 0xf7, 0x7d, 0xde, 0xf8, 0xc6, 0xcf, 0xd9, + 0x00, 0xeb, 0x66, 0xcd, 0x39, 0xff, 0x33, 0xce, 0x30, 0xdf, 0x7c, 0xcf, 0xef, 0x7d, 0xfe, 0xcf, + 0xf3, 0x3e, 0xef, 0x68, 0x67, 0x67, 0x67, 0xd7, 0x9b, 0x69, 0x38, 0xd3, 0x18, 0xa6, 0x51, 0xbf, + 0xb1, 0xc6, 0x74, 0xde, 0xfb, 0x11, 0x00, 0x76, 0xf7, 0x22, 0x7a, 0x8c, 0x60, 0x7a, 0x8f, 0xe9, + 0x33, 0xa6, 0x3d, 0xbf, 0xb1, 0xf6, 0x32, 0xfd, 0x9b, 0x69, 0xee, 0xbd, 0x42, 0xd0, 0xe3, 0x39, + 0xa6, 0x63, 0x4c, 0x91, 0x3b, 0x77, 0xee, 0xbc, 0xe2, 0xe7, 0xe7, 0x57, 0x2e, 0xe8, 0xcc, 0x99, + 0x33, 0x66, 0x3a, 0x7b, 0xf6, 0xec, 0x5d, 0x0a, 0x08, 0x08, 0xa8, 0x91, 0x48, 0x24, 0x6a, 0x5b, + 0x0a, 0x0a, 0x0a, 0x52, 0xb1, 0xcf, 0x55, 0x30, 0x95, 0x0b, 0x3a, 0xc3, 0xae, 0xf5, 0xf1, 0xf5, + 0xab, 0xf0, 0x3e, 0x79, 0xb2, 0xcc, 0xde, 0x7e, 0xba, 0x17, 0xbb, 0xbf, 0x03, 0xd3, 0x43, 0xf7, + 0x0a, 0xe0, 0xc9, 0x24, 0xd5, 0x68, 0xb5, 0xed, 0x4d, 0xcd, 0xcd, 0x68, 0x66, 0x32, 0x18, 0x0c, + 0xb8, 0x76, 0xed, 0x1a, 0x5a, 0x5a, 0x5a, 0xd0, 0xd2, 0xda, 0x8a, 0xd6, 0xeb, 0xd7, 0x71, 0x9d, + 0xa9, 0xad, 0xad, 0x0d, 0x37, 0x6e, 0xdc, 0xc0, 0xcd, 0x9b, 0x37, 0xb9, 0xda, 0xdb, 0xdb, 0x8d, + 0xea, 0xe8, 0xe8, 0x30, 0xea, 0xd6, 0xad, 0x5b, 0x46, 0xdd, 0xbe, 0x7d, 0x9b, 0xab, 0xa5, 0xc9, + 0x80, 0xca, 0xe2, 0x0a, 0xdc, 0xbc, 0xf1, 0xf3, 0x75, 0xad, 0xec, 0x7b, 0xeb, 0xeb, 0xeb, 0x71, + 0xb5, 0x44, 0x7e, 0x6b, 0xd2, 0xe4, 0xa9, 0xdf, 0xb0, 0x18, 0x26, 0x32, 0xf5, 0xba, 0x57, 0x80, + 0x68, 0x23, 0x00, 0x0b, 0xfe, 0xd7, 0x06, 0xc8, 0x94, 0xa6, 0x22, 0xd8, 0xd9, 0x1b, 0xd2, 0x0f, + 0x03, 0x11, 0xf2, 0xce, 0x09, 0x44, 0x7c, 0x1b, 0x02, 0x43, 0xb3, 0x01, 0x75, 0x75, 0x75, 0x28, + 0x2f, 0xaf, 0x40, 0x4a, 0x5a, 0xfa, 0xad, 0xa1, 0x23, 0x46, 0xee, 0x63, 0x71, 0x8c, 0x65, 0x7a, + 0xf0, 0x57, 0x05, 0x68, 0xfd, 0x85, 0x00, 0x9a, 0x6a, 0x35, 0x24, 0xce, 0x9e, 0x50, 0x78, 0xfc, + 0x08, 0x8d, 0x77, 0x31, 0x5a, 0xce, 0x56, 0x23, 0x75, 0xe7, 0x45, 0xf8, 0xbd, 0xe5, 0x81, 0x4a, + 0x79, 0x25, 0x8a, 0x8b, 0x8b, 0x59, 0x16, 0x4a, 0x10, 0x21, 0x95, 0x76, 0xfc, 0x75, 0xd0, 0xe0, + 0x8f, 0x58, 0x2c, 0xc3, 0x98, 0x1e, 0xf8, 0x5d, 0x00, 0x74, 0xb4, 0x77, 0xc0, 0xc7, 0xd9, 0x0d, + 0x05, 0x5f, 0x24, 0x40, 0x77, 0xa2, 0x04, 0x1d, 0x21, 0x5a, 0xe8, 0x4f, 0x96, 0x42, 0xf1, 0xed, + 0x8f, 0x28, 0x3a, 0x98, 0x8c, 0x80, 0x7f, 0x1c, 0x87, 0x2c, 0x53, 0x86, 0xb4, 0xf4, 0x74, 0x96, + 0x89, 0x72, 0xf8, 0x49, 0x82, 0x6f, 0xf4, 0xed, 0xdf, 0xdf, 0x99, 0xc5, 0x33, 0xe8, 0x77, 0x01, + 0xf0, 0xf1, 0xb6, 0xed, 0x38, 0xf5, 0xe6, 0x51, 0x5c, 0x39, 0x92, 0x00, 0xed, 0xa9, 0xab, 0xd0, + 0x33, 0x08, 0x85, 0x47, 0x1e, 0x94, 0xc7, 0xf2, 0x51, 0x77, 0x4a, 0xce, 0xc0, 0x12, 0xe1, 0xf9, + 0xce, 0x57, 0x48, 0x4c, 0x4a, 0x82, 0x5c, 0x2e, 0x67, 0x2a, 0xc5, 0xd7, 0xdf, 0x9d, 0xba, 0xf6, + 0xd0, 0xc3, 0x7d, 0x1c, 0x59, 0x4c, 0xfd, 0xee, 0x6b, 0x0d, 0x84, 0x87, 0x87, 0xe3, 0xb5, 0xd7, + 0x5e, 0x83, 0xaf, 0xaf, 0x2f, 0xce, 0x9f, 0x3f, 0x8f, 0x8c, 0x98, 0x14, 0xc4, 0xec, 0x94, 0x20, + 0xdf, 0x35, 0x91, 0x83, 0x50, 0x46, 0xca, 0x8e, 0x64, 0xc2, 0x6f, 0xa3, 0x3b, 0x92, 0x53, 0x52, + 0x90, 0x92, 0x92, 0x8a, 0xc6, 0xc6, 0x06, 0xe4, 0xe7, 0xff, 0x88, 0x3d, 0x5f, 0x7d, 0x53, 0xd7, + 0xab, 0x57, 0xaf, 0x85, 0x2c, 0xae, 0xbf, 0xdc, 0x17, 0x80, 0x8a, 0x8a, 0x0a, 0xbc, 0xf4, 0xd2, + 0x4b, 0x38, 0x7a, 0xf4, 0x28, 0xdc, 0xdc, 0xdc, 0x90, 0x9d, 0x9d, 0x8d, 0xd3, 0xa7, 0x4f, 0x83, + 0xb5, 0x6a, 0x5c, 0x72, 0x0d, 0x47, 0xa5, 0x5b, 0x0e, 0xaa, 0xbe, 0x91, 0x21, 0xe6, 0x83, 0x00, + 0x78, 0x7f, 0xf8, 0x35, 0xd2, 0xd3, 0x33, 0x70, 0xe1, 0xe2, 0x45, 0x0e, 0x40, 0x85, 0x9d, 0x95, + 0x9d, 0x89, 0x0f, 0xf6, 0x1e, 0x50, 0x76, 0xd5, 0x5e, 0x2d, 0x03, 0xfc, 0xc2, 0x36, 0x4a, 0xd7, + 0xcc, 0x9d, 0x3b, 0x17, 0x3b, 0x76, 0xec, 0xc0, 0xe1, 0xc3, 0x87, 0x51, 0x54, 0x54, 0xc4, 0xb3, + 0xe1, 0xe1, 0xe1, 0x01, 0xb6, 0x77, 0x20, 0x48, 0x12, 0x84, 0x28, 0x97, 0x40, 0xa4, 0xee, 0xb8, + 0xc0, 0xed, 0x55, 0x59, 0x59, 0x85, 0x9c, 0x1c, 0x19, 0x22, 0x22, 0xa3, 0x50, 0x5a, 0x2a, 0x67, + 0xdf, 0xdf, 0x06, 0xad, 0x56, 0xc3, 0xb2, 0x92, 0x84, 0xb7, 0x77, 0x7d, 0x5e, 0x64, 0xab, 0xbd, + 0x76, 0x09, 0x70, 0x4d, 0x00, 0x60, 0xea, 0x2e, 0xc0, 0xea, 0xd5, 0xab, 0x31, 0x6b, 0xd6, 0x2c, + 0xb0, 0x8d, 0x8f, 0xad, 0x68, 0x23, 0x62, 0x63, 0x63, 0x79, 0x26, 0xc2, 0xc2, 0xc2, 0xe0, 0xe3, + 0xe3, 0x83, 0xfd, 0xfb, 0xf7, 0xe3, 0x9d, 0x25, 0x9b, 0x20, 0x79, 0xd3, 0x13, 0x55, 0xac, 0x0b, + 0xa9, 0x54, 0x2a, 0xe4, 0x17, 0x14, 0xb0, 0xcf, 0xc5, 0x41, 0x96, 0x2b, 0xe3, 0xf6, 0x6b, 0x6b, + 0xbb, 0x0e, 0xa5, 0x52, 0x81, 0x8b, 0x51, 0x51, 0xd8, 0xb0, 0x7d, 0xef, 0xe5, 0xce, 0xb1, 0xe3, + 0xc1, 0xae, 0x01, 0x9a, 0x9a, 0x8c, 0x00, 0x86, 0x7b, 0x00, 0x38, 0x76, 0xec, 0x18, 0x1e, 0x7f, + 0xfc, 0x71, 0x2c, 0x59, 0xb2, 0x04, 0x9b, 0x37, 0x6f, 0xe6, 0x81, 0x6f, 0xdf, 0xbe, 0x1d, 0x81, + 0x81, 0x81, 0xfc, 0x6f, 0x5e, 0x5e, 0x5e, 0xfc, 0xfd, 0x27, 0x9f, 0x7c, 0x12, 0x69, 0x49, 0x69, + 0x7c, 0x91, 0xc8, 0x32, 0x72, 0x79, 0x19, 0x92, 0x93, 0x53, 0x90, 0x94, 0x9c, 0xc4, 0xf7, 0x0d, + 0x82, 0x68, 0x6d, 0x6d, 0x41, 0x55, 0x55, 0x25, 0x02, 0xce, 0x9d, 0xc3, 0xc6, 0xff, 0x7c, 0x16, + 0x64, 0xa9, 0xbd, 0x5a, 0x05, 0x68, 0x16, 0x03, 0x74, 0x76, 0x22, 0x31, 0x80, 0x25, 0x88, 0xbc, + 0xbc, 0x3c, 0xf4, 0xef, 0xdf, 0x1f, 0x2f, 0xbf, 0xfc, 0x32, 0x16, 0x2d, 0x5a, 0x84, 0x95, 0x2b, + 0x57, 0x62, 0xea, 0xd4, 0xa9, 0xbc, 0x16, 0xdc, 0xdd, 0xdd, 0xe1, 0xef, 0xef, 0x8f, 0x2d, 0x5b, + 0xb6, 0x60, 0xf6, 0xec, 0xd9, 0xdc, 0x5a, 0xc2, 0x6e, 0xdc, 0xd0, 0xd0, 0x00, 0x85, 0x42, 0x81, + 0xdc, 0x2b, 0xb9, 0x90, 0xc6, 0x48, 0xf9, 0x7b, 0x04, 0x41, 0x0b, 0x62, 0x30, 0x34, 0xf3, 0xce, + 0xf4, 0x7d, 0x50, 0x28, 0xde, 0xfe, 0x78, 0x9f, 0xb7, 0x69, 0x7b, 0xbd, 0x1b, 0x40, 0xa3, 0xe9, + 0x16, 0x40, 0x9b, 0x05, 0x00, 0x1a, 0x09, 0x9e, 0x78, 0xe2, 0x09, 0x4c, 0x9e, 0x3c, 0x19, 0x0e, + 0x0e, 0x0e, 0x58, 0xb7, 0x6e, 0x1d, 0xb7, 0xd1, 0xa4, 0x49, 0x93, 0xf8, 0xeb, 0x8d, 0x1b, 0x37, + 0x62, 0xeb, 0xd6, 0xad, 0x78, 0xe5, 0x95, 0x57, 0x38, 0x98, 0x10, 0x20, 0x5d, 0x4f, 0xd9, 0xa6, + 0x2c, 0x94, 0x95, 0x95, 0xe3, 0xf2, 0xe5, 0x04, 0x84, 0x84, 0x86, 0x22, 0x22, 0x22, 0x12, 0x29, + 0xa9, 0xa9, 0xcc, 0x5e, 0x4a, 0x6e, 0xc3, 0x82, 0x82, 0x7c, 0x04, 0x46, 0x5f, 0xba, 0xfd, 0xc1, + 0xee, 0x2f, 0x0e, 0x89, 0xdb, 0xab, 0x45, 0x80, 0x26, 0x31, 0x80, 0x68, 0x2f, 0x20, 0x80, 0xeb, + 0x04, 0x60, 0xc1, 0x46, 0x14, 0xe4, 0x88, 0x11, 0x23, 0xf0, 0xe2, 0x8b, 0x2f, 0xc2, 0xd9, 0xd9, + 0x19, 0xf3, 0xe6, 0xcd, 0xe3, 0xc1, 0x4f, 0x9f, 0x3e, 0x1d, 0x0b, 0x17, 0x2e, 0xe4, 0x99, 0x18, + 0x3d, 0x7a, 0x34, 0xc6, 0x8f, 0x1f, 0xcf, 0xbf, 0x8f, 0x1e, 0x64, 0x13, 0xba, 0x96, 0xbe, 0x97, + 0xee, 0xcb, 0xee, 0x8f, 0x92, 0x92, 0x52, 0x64, 0x64, 0x64, 0x22, 0x2e, 0x2e, 0x9e, 0x77, 0x25, + 0x82, 0x49, 0x4c, 0x4c, 0x62, 0x56, 0xaa, 0x42, 0x46, 0x66, 0x3a, 0x62, 0xb3, 0xf2, 0x3b, 0x5c, + 0x3e, 0x3f, 0xf0, 0x31, 0x8b, 0xf7, 0x61, 0x8b, 0x00, 0x8d, 0x62, 0x80, 0x6e, 0x6e, 0x66, 0xbb, + 0x76, 0xed, 0xc2, 0xc0, 0x81, 0x03, 0xb1, 0x78, 0xf1, 0x62, 0x6c, 0xd8, 0xb0, 0x81, 0xaf, 0xf2, + 0xc4, 0x89, 0x13, 0x31, 0x65, 0xca, 0x14, 0x0e, 0x42, 0x70, 0x43, 0x87, 0x0e, 0xe5, 0xf6, 0x2a, + 0x61, 0x23, 0x03, 0xad, 0x3e, 0x3d, 0xc4, 0x59, 0xa0, 0x7b, 0x90, 0x95, 0xd4, 0x6a, 0x35, 0xaf, + 0x87, 0xdc, 0xdc, 0x2b, 0x2c, 0x03, 0x69, 0x88, 0x8f, 0xbf, 0x84, 0xa8, 0x68, 0x29, 0xa2, 0xa5, + 0x31, 0xc8, 0xcd, 0x63, 0xef, 0xa5, 0xa5, 0x22, 0xaf, 0x4c, 0x71, 0x73, 0xda, 0x34, 0x87, 0xf9, + 0x2c, 0xe6, 0x3f, 0xdd, 0x05, 0x50, 0x2b, 0x06, 0xe8, 0x66, 0x27, 0x8a, 0x8f, 0x8f, 0xe7, 0x81, + 0xbd, 0xfa, 0xea, 0xab, 0x58, 0xba, 0x74, 0x29, 0x96, 0x2d, 0x5b, 0xc6, 0x57, 0x9e, 0xac, 0xf4, + 0xc2, 0x0b, 0x2f, 0xf0, 0x76, 0x4a, 0x2b, 0xdf, 0xa7, 0x4f, 0x1f, 0xde, 0x95, 0x84, 0xc9, 0x54, + 0x78, 0x88, 0x21, 0xe8, 0x5e, 0x04, 0x41, 0x99, 0xa8, 0xa8, 0xa8, 0xe4, 0xed, 0x57, 0x26, 0xcb, + 0xe5, 0x19, 0x21, 0x98, 0x64, 0xb6, 0xd1, 0xe5, 0xc8, 0x64, 0xc8, 0xc9, 0xcd, 0xc3, 0xbc, 0xf9, + 0x0b, 0x0f, 0x53, 0x3d, 0x74, 0x09, 0x60, 0xab, 0x0e, 0xa8, 0xf0, 0x06, 0x0c, 0x18, 0x80, 0x99, + 0x33, 0x67, 0xe2, 0xf9, 0xe7, 0x9f, 0x87, 0x93, 0x93, 0x13, 0xff, 0x37, 0x05, 0x4f, 0x85, 0x4a, + 0xd6, 0x79, 0xe6, 0x99, 0x67, 0x78, 0xf0, 0xeb, 0xd7, 0xaf, 0x37, 0x06, 0x6f, 0x0a, 0x21, 0x58, + 0x89, 0x16, 0x85, 0xee, 0x43, 0x76, 0xa2, 0x9a, 0xa0, 0xf6, 0x5a, 0xc9, 0xac, 0x43, 0x7b, 0x03, + 0x0d, 0x7c, 0x04, 0x44, 0xcf, 0xf4, 0x7a, 0xd9, 0xf2, 0x95, 0x41, 0x9d, 0x87, 0x31, 0x0b, 0x00, + 0xa6, 0x85, 0x6c, 0xa1, 0x0e, 0xe8, 0x35, 0x05, 0x37, 0x76, 0xec, 0x58, 0x1e, 0xfc, 0xa6, 0x4d, + 0x9b, 0xf8, 0x6a, 0xd3, 0xea, 0xcf, 0x98, 0x31, 0x83, 0x77, 0x21, 0x02, 0x79, 0xec, 0xb1, 0xc7, + 0x30, 0x6e, 0xdc, 0x38, 0x1e, 0x9c, 0xf8, 0x6c, 0x20, 0x06, 0x10, 0x20, 0x84, 0x4c, 0xd0, 0x7d, + 0x68, 0xf1, 0xa8, 0x78, 0x09, 0x44, 0xa7, 0xd3, 0xa1, 0xb6, 0xb6, 0x96, 0xdb, 0x8b, 0x9e, 0xe9, + 0xb5, 0xa3, 0xa3, 0xe3, 0x39, 0x16, 0xf3, 0x48, 0x73, 0x00, 0x76, 0x91, 0xb5, 0x3a, 0x10, 0xef, + 0xc8, 0xd4, 0x55, 0x06, 0x0f, 0x1e, 0x8c, 0x05, 0x0b, 0x16, 0xf0, 0xbe, 0x4e, 0xab, 0x4d, 0xc1, + 0x53, 0xb1, 0xce, 0x9f, 0x3f, 0x9f, 0x43, 0x50, 0x57, 0x22, 0x00, 0xa5, 0x52, 0x69, 0x76, 0xb8, + 0xb1, 0x05, 0x21, 0x64, 0x83, 0x40, 0xe8, 0xde, 0xb4, 0x98, 0x4d, 0x9d, 0x0b, 0x2b, 0x2c, 0xee, + 0x9a, 0x35, 0x6b, 0xce, 0x99, 0x67, 0xa0, 0xb6, 0xb6, 0xbd, 0x41, 0x0c, 0x60, 0xa5, 0x0e, 0x68, + 0x1c, 0xa0, 0xc0, 0x68, 0x50, 0x63, 0x2b, 0xc1, 0xbd, 0x2f, 0x14, 0x2d, 0x75, 0x21, 0xca, 0xc8, + 0x53, 0x4f, 0x3d, 0x85, 0xbe, 0x7d, 0xfb, 0xb2, 0x6e, 0x12, 0x67, 0xf5, 0x84, 0x66, 0x09, 0x42, + 0xd8, 0xc4, 0x04, 0x10, 0xca, 0x48, 0x5b, 0x67, 0xe7, 0x33, 0xda, 0x97, 0xe9, 0xf5, 0xd7, 0x5f, + 0xef, 0x02, 0xc0, 0xca, 0x7e, 0x50, 0x58, 0x58, 0xc8, 0x8b, 0x96, 0xec, 0x42, 0x1b, 0x16, 0x8d, + 0x0d, 0xf6, 0xf6, 0xf6, 0xdc, 0x2e, 0x73, 0xe6, 0xcc, 0xe1, 0xef, 0x91, 0x65, 0x28, 0x78, 0x17, + 0x17, 0x17, 0x8b, 0x07, 0x9c, 0xae, 0x20, 0x4c, 0x41, 0x04, 0x18, 0xf1, 0x8e, 0x6f, 0x1b, 0x80, + 0xa9, 0xc9, 0x82, 0x8d, 0xc8, 0x8f, 0xc3, 0x86, 0x0d, 0xc3, 0xb3, 0xcf, 0x3e, 0xcb, 0x37, 0x29, + 0x2a, 0x4c, 0x0a, 0x9a, 0xac, 0x43, 0xc5, 0x4b, 0x6d, 0x74, 0xc2, 0x84, 0x09, 0xe8, 0xd7, 0xaf, + 0x1f, 0xb7, 0x90, 0x78, 0x3a, 0xed, 0x0e, 0x84, 0x35, 0x10, 0x41, 0xe2, 0x6b, 0xac, 0x03, 0xb0, + 0x36, 0xd6, 0x68, 0xc5, 0x46, 0xe4, 0x73, 0x02, 0xa0, 0xde, 0x4e, 0xbe, 0x27, 0xaf, 0x53, 0xf0, + 0xd3, 0xa6, 0x4d, 0xe3, 0xb5, 0x40, 0x99, 0x18, 0x34, 0x68, 0x10, 0x97, 0x5e, 0xaf, 0x37, 0x1b, + 0xb1, 0xbb, 0x0b, 0x61, 0x09, 0xc4, 0xf4, 0x61, 0x15, 0xa0, 0x9e, 0x01, 0x58, 0xb2, 0xd1, 0xc1, + 0x43, 0x87, 0x78, 0xcb, 0xa4, 0x7e, 0xbf, 0x76, 0xed, 0x5a, 0x3e, 0xac, 0x09, 0xbe, 0xa7, 0x59, + 0x87, 0xda, 0x26, 0x0d, 0x68, 0x64, 0x1d, 0x19, 0xeb, 0xd5, 0xd6, 0xce, 0x09, 0x3d, 0x81, 0xb0, + 0x05, 0x63, 0x11, 0x40, 0x2d, 0x06, 0x10, 0xd9, 0x88, 0x4e, 0x4b, 0x64, 0x0b, 0xca, 0x00, 0x01, + 0xac, 0x58, 0xb1, 0x82, 0x07, 0x2e, 0x6c, 0x56, 0x04, 0x40, 0xed, 0x94, 0xfa, 0x3d, 0x1d, 0x5e, + 0x6c, 0x1d, 0x74, 0xac, 0x41, 0x74, 0x07, 0x44, 0x2c, 0xdb, 0x00, 0xa2, 0x2c, 0xd4, 0xb0, 0xcd, + 0x8a, 0xc6, 0x04, 0x6a, 0x8f, 0x34, 0x12, 0xd0, 0xea, 0x93, 0xff, 0x29, 0x78, 0x7a, 0xa6, 0x7e, + 0x4f, 0x35, 0x41, 0x2b, 0x4f, 0x5d, 0xc9, 0xd2, 0x98, 0xfd, 0xff, 0x80, 0xb0, 0x0a, 0x50, 0xc7, + 0xa6, 0x4a, 0xb1, 0x8d, 0x7c, 0xbc, 0xe6, 0xc3, 0xd7, 0x73, 0x32, 0xf6, 0xef, 0x9e, 0x08, 0xe7, + 0x37, 0x9d, 0xf8, 0x6a, 0x8b, 0x87, 0x34, 0xca, 0x04, 0xcd, 0xff, 0xc3, 0x87, 0x0f, 0xe7, 0x76, + 0xb3, 0x76, 0x56, 0xe8, 0x09, 0x44, 0x77, 0x60, 0x2c, 0x02, 0xa8, 0xd4, 0xea, 0x3b, 0x00, 0x4c, + 0x3a, 0x4d, 0x11, 0x0a, 0xb3, 0x9c, 0xd0, 0xa0, 0x8d, 0xc0, 0x4f, 0xa5, 0x07, 0x11, 0x21, 0xb1, + 0xc7, 0xbf, 0x36, 0x3f, 0x6d, 0x1c, 0xd2, 0xa8, 0xf3, 0x0c, 0x19, 0x32, 0x84, 0xdb, 0x8b, 0x86, + 0x34, 0xd3, 0x21, 0xef, 0xd7, 0x80, 0xb0, 0x26, 0xdb, 0x00, 0x9d, 0x10, 0x95, 0xa5, 0x9e, 0x50, + 0x96, 0x7f, 0x09, 0x43, 0x43, 0x12, 0x1a, 0x75, 0x91, 0xd0, 0xab, 0xfc, 0xf1, 0x43, 0xc4, 0x72, + 0xbc, 0xff, 0xee, 0xd3, 0x7c, 0x1f, 0x18, 0x35, 0x6a, 0x14, 0xf7, 0xbd, 0x44, 0x22, 0xb1, 0x7a, + 0xd8, 0xe9, 0x2e, 0x44, 0x4f, 0x41, 0xac, 0x02, 0xe8, 0x59, 0xaf, 0x17, 0xb2, 0x50, 0x98, 0xb5, + 0x16, 0x8d, 0xfa, 0x68, 0x34, 0xe9, 0xa5, 0xa8, 0xaf, 0x0d, 0x86, 0x4e, 0x79, 0x12, 0x9a, 0x9f, + 0xbe, 0xc6, 0xf9, 0x80, 0x05, 0x78, 0x63, 0xf5, 0x48, 0xf4, 0x65, 0xc1, 0x2f, 0x5f, 0xb8, 0x18, + 0xc9, 0x41, 0x21, 0x48, 0x09, 0x0e, 0x45, 0xca, 0xb9, 0x30, 0xa4, 0x8a, 0x94, 0x16, 0x12, 0x6e, + 0x54, 0x7a, 0xe8, 0xf9, 0x1e, 0x29, 0x23, 0xec, 0x82, 0x4d, 0xad, 0x5d, 0xb3, 0x26, 0xcc, 0x0c, + 0x40, 0xa9, 0x52, 0x19, 0x01, 0xf4, 0xba, 0x1a, 0x14, 0x64, 0xae, 0x40, 0x53, 0x5d, 0x1c, 0x1a, + 0x34, 0xa1, 0xd0, 0x2b, 0x4f, 0x43, 0x53, 0xed, 0x0e, 0x55, 0x85, 0x2b, 0x6a, 0x4a, 0x77, 0xe2, + 0xa8, 0xeb, 0x68, 0x8c, 0x61, 0xe3, 0xc2, 0x87, 0x93, 0x67, 0x60, 0xdb, 0x7d, 0xd0, 0x7a, 0x47, + 0xc7, 0x08, 0xeb, 0x00, 0x4c, 0xd5, 0x15, 0xc1, 0x28, 0xcb, 0xdf, 0xc1, 0xfc, 0x7f, 0x1e, 0x75, + 0x2a, 0x3f, 0x68, 0x6b, 0x8e, 0x41, 0x5d, 0x79, 0x88, 0x05, 0xbf, 0x0b, 0xa9, 0xf1, 0x4e, 0x38, + 0xe1, 0xf6, 0x1c, 0x2e, 0xb1, 0xc3, 0x36, 0x7d, 0xd9, 0x47, 0x53, 0x1d, 0xe0, 0xba, 0x6c, 0xd5, + 0x2f, 0xd2, 0x81, 0xe5, 0xab, 0x7b, 0xa4, 0x37, 0x56, 0xad, 0xba, 0x60, 0x0e, 0xa0, 0x54, 0xb5, + 0xeb, 0xd8, 0x0e, 0x4a, 0x10, 0x85, 0xd9, 0x5b, 0xa0, 0xfe, 0xc9, 0x1b, 0x75, 0x6a, 0x7f, 0x16, + 0xbc, 0x17, 0x6a, 0xab, 0xbe, 0x62, 0x96, 0x7a, 0x17, 0xc1, 0xbe, 0xb3, 0x91, 0x7c, 0x69, 0x37, + 0x2b, 0x72, 0x2d, 0x64, 0xf1, 0x3f, 0x70, 0x00, 0x97, 0x39, 0xf3, 0x8c, 0x83, 0x9e, 0xf8, 0xd4, + 0xd6, 0xdd, 0x9a, 0xe8, 0x4e, 0x7d, 0x98, 0xca, 0x62, 0x0d, 0xb0, 0xb1, 0x97, 0x03, 0x68, 0xb4, + 0xb5, 0xf8, 0xce, 0x7d, 0x26, 0xf3, 0xbd, 0x04, 0x3a, 0xc5, 0x09, 0x54, 0xcb, 0x5d, 0x11, 0x1d, + 0xb2, 0x04, 0x17, 0x83, 0x57, 0x41, 0xa5, 0x28, 0x34, 0xce, 0x48, 0xb2, 0xb8, 0x4b, 0x77, 0x00, + 0x4c, 0x4e, 0x6d, 0x5d, 0x41, 0x74, 0x05, 0xd2, 0x15, 0x90, 0x45, 0x00, 0x05, 0x03, 0xd0, 0xb2, + 0xc3, 0x42, 0x68, 0xb0, 0x1b, 0x7a, 0xf7, 0xee, 0x05, 0xc7, 0x15, 0x0e, 0xc8, 0x48, 0xd8, 0x8c, + 0x73, 0xbe, 0x73, 0x51, 0x5c, 0x10, 0x6e, 0x36, 0x23, 0x89, 0x01, 0x84, 0x69, 0xb5, 0xa7, 0x10, + 0xdd, 0x05, 0x31, 0x95, 0x4d, 0x80, 0x55, 0xcb, 0xa7, 0xe0, 0x81, 0x07, 0xec, 0xf0, 0xc8, 0x23, + 0xbd, 0xf0, 0xad, 0xdb, 0xdb, 0x6c, 0x30, 0xd3, 0x42, 0x3c, 0x62, 0x08, 0x10, 0x77, 0x01, 0x88, + 0x46, 0xee, 0x23, 0x9b, 0x9d, 0xb0, 0x65, 0xea, 0x28, 0x6c, 0xb1, 0x1f, 0x8d, 0xad, 0x5d, 0xa8, + 0x4e, 0xad, 0x32, 0x03, 0x91, 0x67, 0xa5, 0x61, 0xd7, 0xac, 0xf1, 0x66, 0x0a, 0x3d, 0xf8, 0x5f, + 0xdb, 0x00, 0x35, 0x0a, 0x65, 0xbb, 0x46, 0xab, 0xc5, 0xdf, 0x06, 0xf6, 0xc6, 0x74, 0xfb, 0x21, + 0xc8, 0xcd, 0x49, 0xe4, 0x05, 0x2d, 0xde, 0xdc, 0xc4, 0x83, 0x5e, 0x8e, 0x08, 0x40, 0x38, 0x7a, + 0x12, 0xc4, 0x81, 0xb5, 0x4b, 0xf1, 0xd6, 0xd3, 0x83, 0xba, 0x25, 0x9d, 0x4a, 0x61, 0x96, 0x91, + 0xe2, 0x94, 0x04, 0xbc, 0xcf, 0xfe, 0x66, 0x2a, 0xff, 0x4f, 0xb6, 0x75, 0x05, 0xa0, 0x68, 0x2f, + 0x2b, 0x2b, 0xc2, 0xa9, 0x13, 0xfb, 0x41, 0xb5, 0x20, 0x14, 0x34, 0x01, 0x88, 0x47, 0x0c, 0x01, + 0x22, 0x27, 0x36, 0xfe, 0x0e, 0x80, 0xe8, 0xfc, 0xec, 0xda, 0x43, 0x00, 0x53, 0x6b, 0x55, 0xe6, + 0xe5, 0xe0, 0xcb, 0x55, 0x8b, 0xcc, 0x24, 0x3d, 0x7e, 0xd4, 0xf8, 0x19, 0x8b, 0x00, 0xd5, 0x35, + 0x8a, 0x76, 0x76, 0x2e, 0x06, 0x65, 0x81, 0xac, 0x24, 0x00, 0x18, 0x37, 0x37, 0xf1, 0x9c, 0xc4, + 0x94, 0x2d, 0x02, 0x10, 0x0e, 0x3e, 0x04, 0xd1, 0x48, 0x9f, 0x61, 0x9f, 0x6d, 0xec, 0x54, 0x13, + 0x7b, 0x4d, 0x6a, 0x66, 0xd7, 0x70, 0x31, 0x78, 0x43, 0xa7, 0xc4, 0xf5, 0x61, 0xab, 0x4e, 0x4c, + 0x65, 0x11, 0xa0, 0xa8, 0xb8, 0xb8, 0x55, 0x5d, 0xab, 0x41, 0xad, 0x46, 0xcb, 0x20, 0x74, 0x96, + 0x21, 0x58, 0x20, 0x02, 0x44, 0x76, 0x4c, 0x9c, 0x11, 0x40, 0x28, 0x6c, 0xf1, 0x09, 0xce, 0xf8, + 0x63, 0x80, 0xa8, 0xb8, 0x85, 0x36, 0x2b, 0xfe, 0x95, 0xcf, 0x28, 0x13, 0x10, 0x5b, 0x62, 0x07, + 0x28, 0x7f, 0x33, 0x80, 0x84, 0xc4, 0xc4, 0x7a, 0x36, 0x91, 0xc2, 0x34, 0x0b, 0x46, 0x2b, 0x99, + 0x40, 0xdc, 0x05, 0x20, 0xea, 0x4e, 0x65, 0xf2, 0x1c, 0x94, 0x14, 0xa5, 0xa0, 0xa4, 0x38, 0x15, + 0xa5, 0xa4, 0xab, 0x69, 0x90, 0x93, 0x4a, 0xd2, 0x51, 0x26, 0xa8, 0x34, 0x03, 0xe5, 0x22, 0x55, + 0xc8, 0xb3, 0x8c, 0x20, 0xd7, 0xd8, 0x77, 0xe5, 0x86, 0x4a, 0x90, 0x1b, 0x16, 0x84, 0x2b, 0x56, + 0xf4, 0xdc, 0x98, 0xd1, 0x3e, 0xe6, 0x00, 0x09, 0x89, 0xf5, 0x2a, 0x75, 0x2d, 0x7e, 0xce, 0x82, + 0x15, 0x08, 0x51, 0x3d, 0x88, 0x01, 0x84, 0xc2, 0x26, 0x88, 0x4f, 0xb7, 0x8d, 0xc1, 0x3f, 0xd7, + 0xd9, 0xf5, 0x48, 0x5b, 0x37, 0xfd, 0xd9, 0x98, 0x19, 0xbd, 0xb2, 0x06, 0xfb, 0x58, 0x7d, 0xd8, + 0xd2, 0xac, 0x31, 0x23, 0x83, 0x2d, 0x00, 0x24, 0x30, 0x00, 0x35, 0x28, 0x0b, 0x77, 0xac, 0x64, + 0xb9, 0x1e, 0x48, 0x59, 0x62, 0x00, 0x51, 0x77, 0xba, 0x57, 0x00, 0xc1, 0x5e, 0x7a, 0x45, 0x75, + 0x8f, 0x00, 0x26, 0x30, 0xd1, 0xef, 0xee, 0xb1, 0x7b, 0xf6, 0xee, 0xbd, 0x7a, 0x31, 0x22, 0x52, + 0x1b, 0x11, 0x19, 0xa9, 0x8d, 0x24, 0x45, 0x45, 0x31, 0x45, 0x6b, 0xa3, 0xa2, 0xa5, 0xda, 0x68, + 0xa9, 0x54, 0x2b, 0x25, 0xc5, 0xc4, 0x70, 0xc5, 0xc4, 0xc6, 0x6a, 0xc3, 0x03, 0x25, 0x75, 0x9e, + 0x9f, 0xec, 0x36, 0x78, 0xef, 0xd9, 0x67, 0x88, 0x8d, 0x8b, 0xd3, 0xc6, 0x91, 0xe2, 0xe3, 0xb5, + 0x27, 0xbd, 0x5c, 0x9a, 0x8e, 0xbb, 0xbd, 0x67, 0xf0, 0x34, 0x95, 0xbb, 0x48, 0x1e, 0xef, 0x1b, + 0xbc, 0x44, 0xfa, 0xee, 0xf8, 0xb6, 0xe6, 0xc4, 0xc4, 0x44, 0x2d, 0xe9, 0x72, 0x5c, 0x9c, 0x2e, + 0xf0, 0x8b, 0x4f, 0x9b, 0xad, 0xe9, 0xf4, 0xa7, 0xdb, 0x9b, 0x06, 0x3f, 0xda, 0xe7, 0x94, 0xf0, + 0xcb, 0xdc, 0x38, 0xa6, 0x83, 0x4c, 0x67, 0x98, 0xe8, 0xcd, 0xef, 0xff, 0x00, 0xa2, 0x58, 0x3f, + 0xef, 0xfc, 0x1f, 0x1b, 0xbb, 0x01, 0x4c, 0xf4, 0x53, 0xf5, 0x72, 0xa6, 0xbf, 0xff, 0x41, 0xb4, + 0x82, 0x69, 0x1e, 0xd3, 0xa3, 0xff, 0x03, 0xc7, 0x89, 0x1e, 0x3b, 0x7a, 0xe5, 0x3e, 0x77, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +const BITMAP_OPAQUE icon_pagelayout_editor_xpm[1] = {{ png, sizeof( png ), "icon_pagelayout_editor_xpm" }}; + +//EOF diff --git a/bitmaps_png/icons/icon_pagelayout_editor.ico b/bitmaps_png/icons/icon_pagelayout_editor.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04615b61142b3a3a5028a2299d8fb4d0c577ec3 GIT binary patch literal 7358 zcmd^^cTm%58pm;VXLM$DY@?@RJ$2PlPerj8?5;XG_C-Avkz3D$g8^4i&~;Z=5DNnb z$O;AvNQVH55J*r;=me1_1PGEw3JFC-cfIqz$s2zBQYg-Pvwz&{V}5TEB%eIb_bKmB zGqXYXvv8pq9>>_>{z^b@r@f^DNmDAQl6%yq@<>%uu@af zSgC1gthDZxo}LyPll0T2;H#GzY<4=E&E{~}7w_J83J7uv2=1}l!A@Fp4h(hQZCC$xJS+i6wYnIDp3WZ#$ zRJ61xVJcM%jGb1r%-ngy>hrCwt!-_vwy&KpnjQIjzc$#~zN_nPS65e)NI7=aWs`Q` z+wUSHBPpJ&%*}6RR;I=|MldZc8qWYm zpQjBl?d|O){5oz`O>Q-;Ht!XTpI-y3gB8@m>WLNc8{TPGTicsxW@$_U?1h0HJ$91r zpQ@@#5-EjIqzFuFtD5o;f$8XI@95}wqg|ca_4aM&+qZ~|CNx;@-obS1{rh+C`&^EW zj&vSj(`&kOXtL3G1~AYJCtVk>ZjuhQx>co8t5kSwRjb=zt*z~_wl-J?3^a6#UwdC} zZf<%!!ltUaIuFJ@XvRP`S{OAn!$~h8`q8>YA8S|$J7E7~AN@=ozXEZR#rVO@@=gk`pOlK!}uJr+fx4=WeV3WzM z9y`l{Zq64Xe$y^P9+40UzG%+@vq6Kt{OYUk{B9%LsYrnbn#o}Eh<^wSBx7akJ$phSzs9&msn9vN(~V(#RJa( zrdz#4x*FXQsn8vQJ^8qPAC3GYf^3@QvgQ7FqnlL>k;0STv?D(CK3>IY(_f0N9!LE=^`oZ;y+ZQ9q%%$ zST3=|_&j1s%=~`saYBJfJ9o~IN82|w)%Z@W;AXuzTix+g(HbF9?n!<&>$HQVrRDVL z(}xZniYbN2rVq{NDMS0@-~BBE{lGuneN$Z}Q&<&MCd<`cwXZFrlV{ofW6`2T8#ZiM zzI^$F2@{47A6`>aL$aGnZMuLBVEO~my>GyS;fL^$YP>1vq4}NA1wVLLov>NIe*MCQ z3zsfkx@F52fQ=e8YRZ%;Xzo-a_*9txm|Dg>h?E))QrjIwBH@@ZV=yp;lnFe zt~56{$K%$mTj$N2H*DB2OmXzWOOX2Zj46tq*G%$gTc@T~p#XBZIS37WvVHsZy?gh< zGeBCqb}igBbLLD4$t8a;Y6c;F(8*$Wmd02O#v zty(pC@??04$Kz4KqVv!-)8hjD-ADapibpf#kk$!#kXZ}O&0=jJ3 zvH`;MeD=qWl&j!LvNy>?4;F?T(#I<+D@TkNf%>y?x;Gv&T99CYhqTV{@bHl%M8@87>`*DfNYb?erxS+i!^v}r)X zaSR_p@lanM8wv({LIMmV0%^olM>gQW;erwm6)ZC3koo-h@#Evhje~L^B!~)8Lp6Y+ z5U=s$$AeZZ784$mFcb-@7G{1-bdV?#nJnz#WcvIJ9)n((3}*&HfPQpWIB9e zZEcP40SPduNC+Qz5IcMpK9}O5JVRjM6Oh33_~MYILZN8Jr%I)G#NO4_m3}@YJhWix z#G^gGXoegdSVSTb(jQ_5l9iPeHXuRn!(Bi{MS|cd7;Fd+U=Sdn;v2ymAdyHUjg10+ zZEbaRbyZar9z*Nho6fb{6m zBZ5R=u!pYj58-VTf0;}sXlMXKDUVlJP>`3)&E@9scqL_}B^NKaGnq{4ybPz2%A+qH z-QkYjJ>A{i(Mpi-$BrG_wrv~HHVPCv%fyKjL5prnoI}CDGk`&8>iGN@rKP~g;Bd$- zix*|3xp`b6zwB;sFp@%_N7E+2(|w%j5f7aQ&c{bjojMiyWn*Il5_pMpTPPe}nmczc z0N@`IDP$1B1kcpg)W9bkHv7qw$4q8?c2-tnV`F|{L3vSnc-TD_i-nt1Mm(A}K~)~Q zc<9|+rBWfM5GjBiIdTN05=hu12kq_c;k14G_EFA(fT5ZCy1LBg&w=qYIXO3%E0##0 z>hg+;jMS+6cl~iEirg`ycyL(8x6rl;lRUuD9WzN0D=RBQXiyT7U-)!*27S%n-yb<* zXJ-eI-?(uDKZ$RINFfnQUzD=aSa?b}@wIFDd}hr3Ab&5&hPr)ciU(&;O>!BF8L}iW zc!Wv=0|PM&q0gcs`S|#_xVS_`Md8Jupdh@0hMSk22N}aTkPSB{Cp#w_FbE=aAZToi zi;E2OzJzJ>*|TRRdHPK*10EoueIQuKDL6kpJsngD2?@9d=;7gEz2nrK6VU>GBeJ`q zqMV(c&MV~s2DvH{i&Ijb_+E1f3k%E0$e>`bq5DUlM|0vMmDxbd#6^I?f^L!NC}oHa zvN$m@F(4oS%_Sx}ChC03W7k}t6ZaYg0$xc8ZU&;rpo+=l@@#I7x5xJk1_RZD4r9!t zpX~kf0I8v&0m^}AFrF0`7e9FL0G%k&Go!>$!24HYq+^<|Q*c3kK5`1v3}RPUT;%QP z3T*h(0OqssAOvs=T5V`(DDEC}(+Z;9(y~0uYZ%HJhN95B&i{BAM$KF<7d$V^%L9CW zzIpRzYHF%6On*EkiXmOk+KB0Tx{LEUgeKGb#jAUAkdy_8$^*sxdo5X4D{h^-lbxN# z=kt+J_e1=y{(ObXZet_^{piQ*6L>!S_QB8QVdm8e_(UH6p*BSM^0p|)tLm4(Me+)H z`T2SE_4Tnak1lANf-wg5%ID%i)TB+aJ2ufT14PxqvZnCPCvLd`C&L7M0or9v%_|lw z`TH}@2H8zvP@6t^2Bc?@kcHZk%PI`EiH&k%F;2zD-%iH;P6)W6zCJ&X>*!z)ff-~s zg+Xl$c&ITRi9C>ehlILubYo9PTW3SH;Mez>%86=>&cd&G<>=sGGP@}ZY6Bij4j8LE zJv}jgkcBea+lq;aiS1>@#l_)WYT-9TMudlk-v6haU2oY5?I*%#XD z>C>lueSLe&ZVH3i;D1Z-MNqdm}XwBe@PTxPGB~K3I1huDedrT`h6_FV(s*0RR91 literal 0 HcmV?d00001 diff --git a/bitmaps_png/icons/mk_icn.sh b/bitmaps_png/icons/mk_icn.sh index eeb54de903..e269588874 100644 --- a/bitmaps_png/icons/mk_icn.sh +++ b/bitmaps_png/icons/mk_icn.sh @@ -17,6 +17,7 @@ ICON_FILES="icon_3d.svg icon_kicad.svg icon_bitmap2component.svg icon_pcbcalculator.svg + icon_pl_editor.svg icon_cvpcb.svg icon_pcbnew.svg icon_eeschema.svg" diff --git a/bitmaps_png/sources/icon_gerbview.svg b/bitmaps_png/sources/icon_gerbview.svg index a60a93064c..65816979a1 100644 --- a/bitmaps_png/sources/icon_gerbview.svg +++ b/bitmaps_png/sources/icon_gerbview.svg @@ -1,109 +1,761 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - diff --git a/bitmaps_png/sources/icon_gerbview_small.svg b/bitmaps_png/sources/icon_gerbview_small.svg index a60a93064c..8eb9094289 100644 --- a/bitmaps_png/sources/icon_gerbview_small.svg +++ b/bitmaps_png/sources/icon_gerbview_small.svg @@ -1,109 +1,761 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - diff --git a/bitmaps_png/sources/icon_kicad.svg b/bitmaps_png/sources/icon_kicad.svg index f4f1e94b61..ceef127970 100644 --- a/bitmaps_png/sources/icon_kicad.svg +++ b/bitmaps_png/sources/icon_kicad.svg @@ -8,11 +8,11 @@ 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" + height="48" + width="48" version="1.1" id="svg2" - inkscape:version="0.48.1 r9760" + inkscape:version="0.48.2 r9819" sodipodi:docname="icon_kicad.svg" inkscape:export-filename="F:\kicad-launchpad\testing\bitmaps_png\sources\icon_kicad.png" inkscape:export-xdpi="60" @@ -25,7 +25,7 @@ image/svg+xml - + @@ -38,15 +38,15 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1600" - inkscape:window-height="876" + inkscape:window-width="1280" + inkscape:window-height="977" id="namedview579" showgrid="true" - inkscape:zoom="22.774716" - inkscape:cx="23.593222" - inkscape:cy="12.172521" - inkscape:window-x="0" - inkscape:window-y="24" + inkscape:zoom="15.729167" + inkscape:cx="13.637086" + inkscape:cy="24" + inkscape:window-x="-4" + inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:current-layer="svg2" inkscape:snap-grids="false" @@ -155,36 +155,85 @@ id="linearGradient8673" xlink:href="#linearGradient15606-1" inkscape:collect="always" /> + + + + + + transform="matrix(1.1951831,0,0,0.99788751,70.658084,893.71693)"> + style="fill:url(#linearGradient3049);fill-opacity:1;display:inline"> + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;color:#000000;fill:url(#linearGradient3045);fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Andale Mono" /> + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0pt;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;text-anchor:start;color:#000000;fill:url(#linearGradient3047);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;font-family:Andale Mono" /> + + + + + + + - - - - - diff --git a/bitmaps_png/sources/icon_pagelayout_editor.svg b/bitmaps_png/sources/icon_pagelayout_editor.svg new file mode 100644 index 0000000000..d424e7c644 --- /dev/null +++ b/bitmaps_png/sources/icon_pagelayout_editor.svg @@ -0,0 +1,833 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/kicad_logo_for_patch.svg b/bitmaps_png/sources/kicad_logo_for_patch.svg new file mode 100644 index 0000000000..dfc2061e03 --- /dev/null +++ b/bitmaps_png/sources/kicad_logo_for_patch.svg @@ -0,0 +1,131 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + KiCad + + + + diff --git a/bitmaps_png/sources/pagelayout_load.svg b/bitmaps_png/sources/pagelayout_load.svg new file mode 100644 index 0000000000..96860ef531 --- /dev/null +++ b/bitmaps_png/sources/pagelayout_load.svg @@ -0,0 +1,389 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pagelayout_load_default.svg b/bitmaps_png/sources/pagelayout_load_default.svg new file mode 100644 index 0000000000..c2ca5abd16 --- /dev/null +++ b/bitmaps_png/sources/pagelayout_load_default.svg @@ -0,0 +1,583 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pagelayout_new.svg b/bitmaps_png/sources/pagelayout_new.svg new file mode 100644 index 0000000000..d7b64cfcfa --- /dev/null +++ b/bitmaps_png/sources/pagelayout_new.svg @@ -0,0 +1,411 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pagelayout_normal_view_mode.svg b/bitmaps_png/sources/pagelayout_normal_view_mode.svg new file mode 100644 index 0000000000..ac5c853130 --- /dev/null +++ b/bitmaps_png/sources/pagelayout_normal_view_mode.svg @@ -0,0 +1,414 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pagelayout_recent.svg b/bitmaps_png/sources/pagelayout_recent.svg new file mode 100644 index 0000000000..4c49d56ef6 --- /dev/null +++ b/bitmaps_png/sources/pagelayout_recent.svg @@ -0,0 +1,621 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmaps_png/sources/pagelayout_special_view_mode.svg b/bitmaps_png/sources/pagelayout_special_view_mode.svg new file mode 100644 index 0000000000..1527a4b845 --- /dev/null +++ b/bitmaps_png/sources/pagelayout_special_view_mode.svg @@ -0,0 +1,449 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index f834c2a66f..94f3bd3a08 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -32,8 +32,19 @@ else() set( TITLE_BLOCK_SHAPES title_block_shapes ) endif() +set(COMMON_PAGE_LAYOUT_SRCS + page_layout/${TITLE_BLOCK_SHAPES}.cpp + page_layout/class_worksheet_dataitem.cpp + page_layout/class_worksheet_layout.cpp + page_layout/page_layout_default_description.cpp + page_layout/page_layout_graphic_items.cpp + page_layout/page_layout_reader_keywords.cpp + page_layout/page_layout_reader.cpp + ) + set(COMMON_SRCS ${COMMON_ABOUT_DLG_SRCS} + ${COMMON_PAGE_LAYOUT_SRCS} base_struct.cpp basicframe.cpp bezier_curves.cpp @@ -76,16 +87,12 @@ set(COMMON_SRCS msgpanel.cpp netlist_keywords.cpp newstroke_font.cpp - page_layout_default_description.cpp - page_layout_reader_keywords.cpp - page_layout_reader.cpp projet_config.cpp ptree.cpp reporter.cpp richio.cpp selcolor.cpp string.cpp - ${TITLE_BLOCK_SHAPES}.cpp trigo.cpp wildcards_and_files_ext.cpp worksheet.cpp @@ -197,9 +204,9 @@ make_lexer( # auto-generate page layout reader s-expression page_layout_reader_lexer.h # and title_block_reader_keywords.cpp. make_lexer( - ${CMAKE_CURRENT_SOURCE_DIR}/page_layout_reader.keywords + ${CMAKE_CURRENT_SOURCE_DIR}/page_layout/page_layout_reader.keywords ${PROJECT_SOURCE_DIR}/include/page_layout_reader_lexer.h - ${CMAKE_CURRENT_SOURCE_DIR}/page_layout_reader_keywords.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/page_layout/page_layout_reader_keywords.cpp TB_READER_T ) diff --git a/common/base_screen.cpp b/common/base_screen.cpp index 0aa24fac66..efd6b3efe3 100644 --- a/common/base_screen.cpp +++ b/common/base_screen.cpp @@ -36,6 +36,8 @@ #include #include +wxString BASE_SCREEN::m_PageLayoutDescrFileName; // the name of the page layout descr file. + BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) : EDA_ITEM( aType ) { diff --git a/common/base_units.cpp b/common/base_units.cpp index b8def5da99..e0d602812e 100644 --- a/common/base_units.cpp +++ b/common/base_units.cpp @@ -40,7 +40,7 @@ #include -#if defined( PCBNEW ) || defined( CVPCB ) || defined( EESCHEMA ) || defined( GERBVIEW ) +#if defined( PCBNEW ) || defined( CVPCB ) || defined( EESCHEMA ) || defined( GERBVIEW ) || defined( PL_EDITOR ) #define IU_TO_MM( x ) ( x / IU_PER_MM ) #define IU_TO_IN( x ) ( x / IU_PER_MILS / 1000 ) #define MM_TO_IU( x ) ( x * IU_PER_MM ) @@ -50,6 +50,42 @@ #endif +// Helper function to print a float number without using scientific notation +// and no trailing 0 +// So we cannot always just use the %g or the %f format to print a fp number +// this helper function uses the %f format when needed, or %g when %f is +// not well working and then removes trailing 0 + +std::string Double2Str( double aValue ) +{ + char buf[50]; + int len; + + if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) + { + // For these small values, %f works fine, + // and %g gives an exponent + len = sprintf( buf, "%.16f", aValue ); + + while( --len > 0 && buf[len] == '0' ) + buf[len] = '\0'; + + if( buf[len] == '.' ) + buf[len] = '\0'; + else + ++len; + } + else + { + // For these values, %g works fine, and sometimes %f + // gives a bad value (try aValue = 1.222222222222, with %.16f format!) + len = sprintf( buf, "%.16g", aValue ); + } + + return std::string( buf, len );; +} + + double To_User_Unit( EDA_UNITS_T aUnit, double aValue ) { switch( aUnit ) diff --git a/common/build_version.cpp b/common/build_version.cpp index 52867e07c6..9ad25196e8 100644 --- a/common/build_version.cpp +++ b/common/build_version.cpp @@ -6,11 +6,7 @@ #endif #ifndef KICAD_BUILD_VERSION -#if defined KICAD_GOST -# define KICAD_BUILD_VERSION "(2013-jun-18 GOST)" -#else -# define KICAD_BUILD_VERSION "(2013-jun-18)" -#endif +# define KICAD_BUILD_VERSION "(2013-jul-14)" #endif diff --git a/common/class_bitmap_base.cpp b/common/class_bitmap_base.cpp index 56411f6169..c59999b9a3 100644 --- a/common/class_bitmap_base.cpp +++ b/common/class_bitmap_base.cpp @@ -116,9 +116,6 @@ bool BITMAP_BASE::SaveData( FILE* aFile ) const if( fprintf( aFile, "%2.2X ", *begin & 0xFF ) == EOF ) return false; } - - if( fprintf( aFile, "$EndBitmap" ) == EOF ) - return false; } return true; diff --git a/common/common.cpp b/common/common.cpp index 383eb80350..ee779e7698 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -69,16 +69,6 @@ EDA_UNITS_T g_UserUnit; EDA_COLOR_T g_GhostColor; -bool IsGOST() -{ -#if defined(KICAD_GOST) - return true; -#else - return false; -#endif -} - - /** * The predefined colors used in KiCad. * Please: if you change a value, remember these values are carefully chosen diff --git a/common/common_plot_functions.cpp b/common/common_plot_functions.cpp index e090dd2af2..7c4a45bdc1 100644 --- a/common/common_plot_functions.cpp +++ b/common/common_plot_functions.cpp @@ -92,6 +92,9 @@ void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock, plotter->SetCurrentLineWidth( PLOTTER::DEFAULT_LINE_WIDTH ); WS_DRAW_ITEM_LIST drawList; + // Print only a short filename, if aFilename is the full filename + wxFileName fn( aFilename ); + // Prepare plot parameters drawList.SetMargins( LTmargin, RBmargin); drawList.SetPenSize(PLOTTER::DEFAULT_LINE_WIDTH ); @@ -99,13 +102,12 @@ void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock, drawList.SetPageSize( pageSize ); drawList.SetSheetNumber( aSheetNumber ); drawList.SetSheetCount( aNumberOfSheets ); + drawList.SetFileName( fn.GetFullName() ); // Print only the short filename + drawList.SetSheetName( aSheetDesc ); - // Print only a short filename, if aFilename is the full filename - wxFileName fn( aFilename ); - - drawList.BuildWorkSheetGraphicList( aPageInfo.GetType(), fn.GetFullName(), - aSheetDesc, aTitleBlock, plotColor, plotColor ); + drawList.BuildWorkSheetGraphicList( aPageInfo, + aTitleBlock, plotColor, plotColor ); // Draw item list for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index 9eb6f33be4..7ab002480b 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -1,7 +1,7 @@ /* * This program source code file is part of KICAD, a free EDA CAD application. * - * Copyright (C) 1992-2010 Kicad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 1992-2013 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 @@ -28,11 +28,13 @@ #include #include // DIM() #include +#include #include #include #include #include #include +#include #include #include @@ -72,8 +74,9 @@ static const wxString pageFmts[] = void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event ) { - DIALOG_PAGES_SETTINGS frame( this ); - int diag = frame.ShowModal(); + DIALOG_PAGES_SETTINGS dlg( this ); + dlg.SetWksFileName( BASE_SCREEN::m_PageLayoutDescrFileName ); + int diag = dlg.ShowModal(); if( m_canvas && diag ) m_canvas->Refresh(); @@ -84,12 +87,12 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) : DIALOG_PAGES_SETTINGS_BASE( parent ), m_initialized( false ) { - m_Parent = parent; - m_Screen = m_Parent->GetScreen(); - m_modified = false; + m_parent = parent; + m_screen = m_parent->GetScreen(); m_page_bitmap = NULL; - m_tb = m_Parent->GetTitleBlock(); + m_tb = m_parent->GetTitleBlock(); m_customFmt = false; + m_localPrjConfigChanged = false; initDialog(); @@ -121,22 +124,26 @@ void DIALOG_PAGES_SETTINGS::initDialog() m_paperSizeComboBox->Append( wxGetTranslation( pageFmts[ii] ) ); } + // initialize the page layout descr filename + m_plDescrFileName = BASE_SCREEN::m_PageLayoutDescrFileName; + m_filePicker->SetPath( m_plDescrFileName ); + #ifdef EESCHEMA // Init display value for schematic sub-sheet number wxString format = m_TextSheetCount->GetLabel(); - msg.Printf( format, m_Screen->m_NumberOfScreens ); + msg.Printf( format, m_screen->m_NumberOfScreens ); m_TextSheetCount->SetLabel( msg ); format = m_TextSheetNumber->GetLabel(); - msg.Printf( format, m_Screen->m_ScreenNumber ); + msg.Printf( format, m_screen->m_ScreenNumber ); m_TextSheetNumber->SetLabel( msg ); #else m_TextSheetCount->Show( false ); m_TextSheetNumber->Show( false ); #endif - m_pageInfo = m_Parent->GetPageSettings(); + m_pageInfo = m_parent->GetPageSettings(); SetCurrentPageSizeSelection( m_pageInfo.GetType() ); m_orientationComboBox->SetSelection( m_pageInfo.IsPortrait() ); @@ -210,28 +217,24 @@ void DIALOG_PAGES_SETTINGS::initDialog() } -void DIALOG_PAGES_SETTINGS::OnCloseWindow( wxCloseEvent& event ) -{ - EndModal( m_modified ); -} - - void DIALOG_PAGES_SETTINGS::OnOkClick( wxCommandEvent& event ) { - m_save_flag = false; - SavePageSettings( event ); - - if( m_save_flag ) + if( SavePageSettings() ) { - m_modified = true; - Close( true ); + m_screen->SetModify(); + m_parent->GetCanvas()->Refresh(); + + if( m_localPrjConfigChanged ) + m_parent->SaveProjectSettings( true ); + + EndModal( true ); } } void DIALOG_PAGES_SETTINGS::OnCancelClick( wxCommandEvent& event ) { - Close( true ); + EndModal( false ); } @@ -393,11 +396,50 @@ void DIALOG_PAGES_SETTINGS::OnDateApplyClick( wxCommandEvent& event ) m_TextDate->SetValue( FormatDateLong( m_PickDate->GetValue() ) ); } -void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event ) + +bool DIALOG_PAGES_SETTINGS::SavePageSettings() { bool retSuccess = false; - m_save_flag = true; + m_plDescrFileName = m_filePicker->GetPath(); + + if( m_plDescrFileName != BASE_SCREEN::m_PageLayoutDescrFileName ) + { + if( !m_plDescrFileName.IsEmpty() ) + { + wxString fullFileName = WORKSHEET_LAYOUT::MakeFullFileName( m_plDescrFileName ); + if( !wxFileExists( fullFileName ) ) + { + wxString msg; + msg.Printf( _("Page layout description file <%s> not found. Abort"), + GetChars( fullFileName ) ); + wxMessageBox( msg ); + return false; + } + } + + // Try to remove the path, if the path is the current working dir, + // or the dir of kicad.pro (template) + wxString shortFileName = WORKSHEET_LAYOUT::MakeShortFileName( m_plDescrFileName ); + wxFileName fn = shortFileName; + + // For Win/Linux/macOS compatibility, a relative path is a good idea + if( fn.IsAbsolute() ) + { + fn.MakeRelativeTo( wxGetCwd() ); + wxString msg; + msg.Printf( _( "The page layout descr filename has changed\n" + "Do you want to use the relative path:\n%s"), + fn.GetFullPath().GetData() ); + if( IsOK( this, msg ) ) + shortFileName = fn.GetFullPath(); + } + + BASE_SCREEN::m_PageLayoutDescrFileName = shortFileName; + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + pglayout.SetPageLayout( shortFileName ); + m_localPrjConfigChanged = true; + } int idx = m_paperSizeComboBox->GetSelection(); @@ -425,8 +467,7 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), if( wxMessageBox( msg, _( "Warning!" ), wxYES_NO | wxICON_EXCLAMATION, this ) == wxYES ) { - m_save_flag = false; - return; + return false; } m_layout_size.x = Clamp( MIN_PAGE_SIZE, m_layout_size.x, MAX_PAGE_SIZE ); @@ -485,7 +526,7 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), m_pageInfo.SetType( PAGE_INFO::A4 ); } - m_Parent->SetPageSettings( m_pageInfo ); + m_parent->SetPageSettings( m_pageInfo ); m_tb.SetRevision( m_TextRevision->GetValue() ); m_tb.SetDate( m_TextDate->GetValue() ); @@ -496,7 +537,8 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), m_tb.SetComment3( m_TextComment3->GetValue() ); m_tb.SetComment4( m_TextComment4->GetValue() ); - m_Parent->SetTitleBlock( m_tb ); + m_parent->SetTitleBlock( m_tb ); + #ifdef EESCHEMA // Exports settings to other sheets if requested: @@ -508,7 +550,7 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), // Update title blocks for all screens for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) { - if( screen == m_Screen ) + if( screen == m_screen ) continue; TITLE_BLOCK tb2 = screen->GetTitleBlock(); @@ -542,8 +584,7 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), #endif - m_Screen->SetModify(); - m_Parent->GetCanvas()->Refresh(); + return true; } @@ -600,7 +641,7 @@ void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample() if( m_page_bitmap->IsOk() ) { // Calculate layout preview scale. - int appScale = m_Screen->MilsToIuScalar(); + int appScale = m_screen->MilsToIuScalar(); double scaleW = (double) lyWidth / clamped_layout_size.x / appScale; double scaleH = (double) lyHeight / clamped_layout_size.y / appScale; @@ -637,8 +678,8 @@ void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample() DrawPageLayout( &memDC, NULL, pageDUMMY, emptyString, emptyString, - m_tb, m_Screen->m_NumberOfScreens, - m_Screen->m_ScreenNumber, 1, appScale, DARKGRAY, RED ); + m_tb, m_screen->m_NumberOfScreens, + m_screen->m_ScreenNumber, 1, appScale, DARKGRAY, RED ); memDC.SelectObject( wxNullBitmap ); m_PageLayoutExampleBitmap->SetBitmap( *m_page_bitmap ); @@ -750,3 +791,9 @@ void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog() customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) ); m_layout_size = wxSize( KiROUND( customSizeX ), KiROUND( customSizeY ) ); } + +// Called on .kicad_wks file description selection change +void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxFileDirPickerEvent& event ) +{ + // Currently: Nothing to do. +} diff --git a/common/dialogs/dialog_page_settings.h b/common/dialogs/dialog_page_settings.h index e0ffc56e14..cdb2c02297 100644 --- a/common/dialogs/dialog_page_settings.h +++ b/common/dialogs/dialog_page_settings.h @@ -35,86 +35,90 @@ class DIALOG_PAGES_SETTINGS: public DIALOG_PAGES_SETTINGS_BASE { private: - EDA_DRAW_FRAME* m_Parent; - BASE_SCREEN* m_Screen; + EDA_DRAW_FRAME* m_parent; + BASE_SCREEN* m_screen; wxArrayString m_pageFmt; /// list of page sizes (not translated) bool m_initialized; - bool m_modified; - bool m_save_flag; + bool m_localPrjConfigChanged; /// the page layuout filename was changed wxBitmap* m_page_bitmap; /// Temporary bitmap for the page layout example. wxSize m_layout_size; /// Logical page layout size. PAGE_INFO m_pageInfo; /// Temporary page info. bool m_customFmt; /// true if the page selection is custom TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions). + wxString m_plDescrFileName; /// Temporary BASE_SCREEN::m_PageLayoutDescrFileName copy + + public: DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ); ~DIALOG_PAGES_SETTINGS(); + const wxString GetWksFileName() + { + return m_filePicker->GetPath(); + } + + void SetWksFileName(const wxString& aFilename ) + { + m_filePicker->SetPath( aFilename ); + } + + void EnableWksFileNamePicker( bool aEnable ) + { + m_filePicker->Enable( aEnable ); + } + private: - /// Initialises member variables - void initDialog(); + void initDialog(); // Initialisation of member variables - /// wxEVT_CLOSE_WINDOW event handler for ID_DIALOG - void OnCloseWindow( wxCloseEvent& event ); +// void OnCloseWindow( wxCloseEvent& event ); - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK + // event handler for wxID_OK void OnOkClick( wxCommandEvent& event ); - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL + // event handler for wxID_CANCEL void OnCancelClick( wxCommandEvent& event ); - /// exEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHICE_PAGE_SIZE + // event handlers for page size choice void OnPaperSizeChoice( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_USER_PAGE_SIZE_X void OnUserPageSizeXTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_USER_PAGE_SIZE_Y void OnUserPageSizeYTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_PAGE_ORIENTATION void OnPageOrientationChoice( wxCommandEvent& event ); - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_REVISION + // event handler for texts in title block void OnRevisionTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_DATE void OnDateTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_TITLE void OnTitleTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMPANY void OnCompanyTextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT1 void OnComment1TextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT2 void OnComment2TextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT3 void OnComment3TextUpdated( wxCommandEvent& event ); - - /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT4 void OnComment4TextUpdated( wxCommandEvent& event ); - /// Handle button click for setting the date from the picker - virtual void OnDateApplyClick( wxCommandEvent& event ); + // Handle button click for setting the date from the picker + void OnDateApplyClick( wxCommandEvent& event ); + + // .kicad_wks file description selection + void OnWksFileSelection( wxFileDirPickerEvent& event ); + + // Save in the current title block the new page settings + // return true if changes are made, or false if not + bool SavePageSettings(); void SetCurrentPageSizeSelection( const wxString& aPaperSize ); - void SavePageSettings( wxCommandEvent& event ); - - /// Update page layout example + // Update page layout example void UpdatePageLayoutExample(); - /// Get page layout info from selected dialog items + // Get page layout info from selected dialog items void GetPageLayoutInfoFromDialog(); - /// Get custom page size in mils from dialog + // Get custom page size in mils from dialog void GetCustomSizeMilsFromDialog(); + + /// @return true if the local prj config is chande + /// i.e. if the page layout descr file has chnaged + bool LocalPrjConfigChanged() { return m_localPrjConfigChanged; } }; #endif // _DIALOG_PAGES_SETTINGS_H_ diff --git a/common/dialogs/dialog_page_settings_base.cpp b/common/dialogs/dialog_page_settings_base.cpp index c960a020d1..28865814ec 100644 --- a/common/dialogs/dialog_page_settings_base.cpp +++ b/common/dialogs/dialog_page_settings_base.cpp @@ -139,7 +139,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextDate = new wxStaticText( this, wxID_ANY, _("Issue Date"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextDate->Wrap( -1 ); - bSizerDate->Add( m_staticTextDate, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerDate->Add( m_staticTextDate, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizerissuedate; bSizerissuedate = new wxBoxSizer( wxHORIZONTAL ); @@ -195,7 +195,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextTitle = new wxStaticText( this, wxID_ANY, _("Title"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextTitle->Wrap( -1 ); - bSizerTitle->Add( m_staticTextTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerTitle->Add( m_staticTextTitle, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizer12; bSizer12 = new wxBoxSizer( wxHORIZONTAL ); @@ -220,7 +220,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticText13 = new wxStaticText( this, wxID_ANY, _("Company"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText13->Wrap( -1 ); - bSizerCompany->Add( m_staticText13, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerCompany->Add( m_staticText13, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizer14; bSizer14 = new wxBoxSizer( wxHORIZONTAL ); @@ -245,7 +245,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextComment1 = new wxStaticText( this, wxID_ANY, _("Comment1"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextComment1->Wrap( -1 ); - bSizerComment1->Add( m_staticTextComment1, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerComment1->Add( m_staticTextComment1, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizercmt1; bSizercmt1 = new wxBoxSizer( wxHORIZONTAL ); @@ -270,7 +270,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextComment2 = new wxStaticText( this, wxID_ANY, _("Comment2"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextComment2->Wrap( -1 ); - bSizerComment2->Add( m_staticTextComment2, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerComment2->Add( m_staticTextComment2, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizercmt2; bSizercmt2 = new wxBoxSizer( wxHORIZONTAL ); @@ -295,7 +295,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextComment3 = new wxStaticText( this, wxID_ANY, _("Comment3"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextComment3->Wrap( -1 ); - bSizerComment12->Add( m_staticTextComment3, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerComment12->Add( m_staticTextComment3, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizercmt3; bSizercmt3 = new wxBoxSizer( wxHORIZONTAL ); @@ -320,7 +320,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_staticTextComment4 = new wxStaticText( this, wxID_ANY, _("Comment4"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextComment4->Wrap( -1 ); - bSizerComment4->Add( m_staticTextComment4, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizerComment4->Add( m_staticTextComment4, 0, wxRIGHT|wxLEFT, 5 ); wxBoxSizer* bSizercmt4; bSizercmt4 = new wxBoxSizer( wxHORIZONTAL ); @@ -340,6 +340,25 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind bSizerRight->Add( bSizerComment4, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + wxBoxSizer* bSizerFilename; + bSizerFilename = new wxBoxSizer( wxVERTICAL ); + + m_staticTextfilename = new wxStaticText( this, wxID_ANY, _("Page layout file description"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextfilename->Wrap( -1 ); + bSizerFilename->Add( m_staticTextfilename, 0, wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerfileSelection; + bSizerfileSelection = new wxBoxSizer( wxHORIZONTAL ); + + m_filePicker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, _("Select a file"), wxT("*.kicad_wks"), wxDefaultPosition, wxDefaultSize, wxFLP_OPEN|wxFLP_USE_TEXTCTRL ); + bSizerfileSelection->Add( m_filePicker, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerFilename->Add( bSizerfileSelection, 1, wxEXPAND, 5 ); + + + bSizerRight->Add( bSizerFilename, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + bUpperSizerH->Add( bSizerRight, 1, wxEXPAND, 5 ); @@ -360,7 +379,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind this->Layout(); // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCloseWindow ) ); m_paperSizeComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this ); m_orientationComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this ); m_TextUserSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this ); @@ -375,6 +393,7 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_TextComment2->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this ); m_TextComment3->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this ); m_TextComment4->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this ); + m_filePicker->Connect( wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnWksFileSelection ), NULL, this ); m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this ); } @@ -382,7 +401,6 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind DIALOG_PAGES_SETTINGS_BASE::~DIALOG_PAGES_SETTINGS_BASE() { // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCloseWindow ) ); m_paperSizeComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this ); m_orientationComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this ); m_TextUserSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this ); @@ -397,6 +415,7 @@ DIALOG_PAGES_SETTINGS_BASE::~DIALOG_PAGES_SETTINGS_BASE() m_TextComment2->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this ); m_TextComment3->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this ); m_TextComment4->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this ); + m_filePicker->Disconnect( wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnWksFileSelection ), NULL, this ); m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this ); diff --git a/common/dialogs/dialog_page_settings_base.fbp b/common/dialogs/dialog_page_settings_base.fbp index f08221fe40..90b35d6158 100644 --- a/common/dialogs/dialog_page_settings_base.fbp +++ b/common/dialogs/dialog_page_settings_base.fbp @@ -42,7 +42,7 @@ DIALOG_PAGES_SETTINGS_BASE - 748,464 + 748,470 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER DIALOG_SHIM; dialog_shim.h Page Settings @@ -59,7 +59,7 @@ - OnCloseWindow + @@ -1697,7 +1697,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -2439,7 +2439,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -2723,7 +2723,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -3007,7 +3007,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -3291,7 +3291,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -3575,7 +3575,7 @@ none 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 1 @@ -3857,11 +3857,11 @@ bSizerComment4 wxVERTICAL none - + 5 - wxTOP|wxRIGHT|wxLEFT + wxRIGHT|wxLEFT 0 - + 1 1 1 @@ -3940,11 +3940,11 @@ - + 5 wxEXPAND 1 - + bSizercmt4 wxHORIZONTAL @@ -4132,6 +4132,200 @@ + + 5 + wxEXPAND|wxRIGHT|wxLEFT + 0 + + + bSizerFilename + wxVERTICAL + none + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Page layout file description + + 0 + + + 0 + + 1 + m_staticTextfilename + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizerfileSelection + wxHORIZONTAL + none + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + Select a file + + 0 + + 1 + m_filePicker + 1 + + + protected + 1 + + Resizable + 1 + + wxFLP_OPEN|wxFLP_USE_TEXTCTRL + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + *.kicad_wks + + + + + + + OnWksFileSelection + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/dialogs/dialog_page_settings_base.h b/common/dialogs/dialog_page_settings_base.h index 4e8ab1d343..689f553d37 100644 --- a/common/dialogs/dialog_page_settings_base.h +++ b/common/dialogs/dialog_page_settings_base.h @@ -33,6 +33,7 @@ class DIALOG_SHIM; #include #include #include +#include #include /////////////////////////////////////////////////////////////////////////// @@ -111,12 +112,13 @@ class DIALOG_PAGES_SETTINGS_BASE : public DIALOG_SHIM wxStaticText* m_staticTextComment4; wxTextCtrl* m_TextComment4; wxCheckBox* m_Comment4Export; + wxStaticText* m_staticTextfilename; + wxFilePickerCtrl* m_filePicker; wxStdDialogButtonSizer* m_sdbSizer1; wxButton* m_sdbSizer1OK; wxButton* m_sdbSizer1Cancel; // Virtual event handlers, overide them in your derived class - virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } virtual void OnPaperSizeChoice( wxCommandEvent& event ) { event.Skip(); } virtual void OnPageOrientationChoice( wxCommandEvent& event ) { event.Skip(); } virtual void OnUserPageSizeYTextUpdated( wxCommandEvent& event ) { event.Skip(); } @@ -131,13 +133,14 @@ class DIALOG_PAGES_SETTINGS_BASE : public DIALOG_SHIM virtual void OnComment2TextUpdated( wxCommandEvent& event ) { event.Skip(); } virtual void OnComment3TextUpdated( wxCommandEvent& event ) { event.Skip(); } virtual void OnComment4TextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnWksFileSelection( wxFileDirPickerEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); } public: - DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 748,464 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 748,470 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_PAGES_SETTINGS_BASE(); }; diff --git a/common/edaappl.cpp b/common/edaappl.cpp index 6058e47ebd..84a52c7606 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -885,7 +885,6 @@ wxString EDA_APP::FindFileInSearchPaths( const wxString& filename, for( i = 0; i < m_searchPaths.GetCount(); i++ ) { fn = wxFileName( m_searchPaths[i], wxEmptyString ); - if( subdirs ) { for( j = 0; j < subdirs->GetCount(); j++ ) diff --git a/common/title_block_shapes.cpp b/common/page_layout/class_worksheet_dataitem.cpp similarity index 55% rename from common/title_block_shapes.cpp rename to common/page_layout/class_worksheet_dataitem.cpp index 949e844173..a2c3e345c3 100644 --- a/common/title_block_shapes.cpp +++ b/common/page_layout/class_worksheet_dataitem.cpp @@ -1,5 +1,5 @@ /** - * @file title_block_shape.cpp + * @file class_worksheet_dataitem.cpp * @brief description of graphic items and texts to build a title block */ @@ -30,7 +30,7 @@ /* - * the class WORKSHEET_DATAITEM (and WORKSHEET_DATAITEM_TEXT) defines + * the class WORKSHEET_DATAITEM (and derived) defines * a basic shape of a page layout ( frame references and title block ) * Basic shapes are line, rect and texts * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to @@ -59,128 +59,160 @@ #include #include #include +#include -WORKSHEET_DATAITEM_POLYPOLYGON::WORKSHEET_DATAITEM_POLYPOLYGON() : - WORKSHEET_DATAITEM( WS_POLYPOLYGON ) + +// Static members of class WORKSHEET_DATAITEM: +double WORKSHEET_DATAITEM::m_WSunits2Iu = 1.0; +DPOINT WORKSHEET_DATAITEM::m_RB_Corner; +DPOINT WORKSHEET_DATAITEM::m_LT_Corner; +double WORKSHEET_DATAITEM::m_DefaultLineWidth = 0.0; +DSIZE WORKSHEET_DATAITEM::m_DefaultTextSize( TB_DEFAULT_TEXTSIZE, TB_DEFAULT_TEXTSIZE ); +double WORKSHEET_DATAITEM::m_DefaultTextThickness = 0.0; +bool WORKSHEET_DATAITEM::m_SpecialMode = false; +EDA_COLOR_T WORKSHEET_DATAITEM::m_Color = RED; // the default color to draw items +EDA_COLOR_T WORKSHEET_DATAITEM::m_AltColor = RED; // an alternate color to draw items +EDA_COLOR_T WORKSHEET_DATAITEM::m_SelectedColor = YELLOW; // the color to draw selected items + +// The constructor: +WORKSHEET_DATAITEM::WORKSHEET_DATAITEM( WS_ItemType aType ) { - m_Orient = 0.0; -} - -const DPOINT WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPosition( unsigned aIdx, - int aRepeat ) const -{ - DPOINT pos = m_Corners[aIdx]; - - // Rotation: - RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); - pos += GetStartPos( aRepeat ); - return pos; -} - -void WORKSHEET_DATAITEM_POLYPOLYGON::SetBoundingBox() -{ - if( m_Corners.size() == 0 ) - { - m_minCoord.x = m_maxCoord.x = 0.0; - m_minCoord.y = m_maxCoord.y = 0.0; - return; - } - - DPOINT pos; - pos = m_Corners[0]; - RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); - m_minCoord = m_maxCoord = pos; - - for( unsigned ii = 1; ii < m_Corners.size(); ii++ ) - { - pos = m_Corners[ii]; - RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); - - if( m_minCoord.x > pos.x ) - m_minCoord.x = pos.x; - - if( m_minCoord.y > pos.y ) - m_minCoord.y = pos.y; - - if( m_maxCoord.x < pos.x ) - m_maxCoord.x = pos.x; - - if( m_maxCoord.y < pos.y ) - m_maxCoord.y = pos.y; - } -} - -bool WORKSHEET_DATAITEM_POLYPOLYGON::IsInsidePage( int ii ) const -{ - DPOINT pos = GetStartPos( ii ); - pos += m_minCoord; // left top pos of bounding box - - if( m_LT_Corner.x > pos.x || m_LT_Corner.y > pos.y ) - return false; - - pos = GetStartPos( ii ); - pos += m_maxCoord; // rignt bottom pos of bounding box - - if( m_RB_Corner.x < pos.x || m_RB_Corner.y < pos.y ) - return false; - - return true; -} - -const wxPoint WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPositionUi( unsigned aIdx, - int aRepeat ) const -{ - DPOINT pos = GetCornerPosition( aIdx, aRepeat ); - pos = pos * m_WSunits2Iu; - return wxPoint( int(pos.x), int(pos.y) ); -} - -WORKSHEET_DATAITEM_TEXT::WORKSHEET_DATAITEM_TEXT( const wxChar* aTextBase ) : - WORKSHEET_DATAITEM( WS_TEXT ) -{ - m_TextBase = aTextBase; + m_type = aType; + m_flags = 0; + m_RepeatCount = 1; m_IncrementLabel = 1; - m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; - m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; - m_Orient = 0.0; - m_TextSize.x = m_TextSize.y = TB_DEFAULT_TEXTSIZE; + m_LineWidth = 0; } -void WORKSHEET_DATAITEM_TEXT::TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText ) +// move item to aPosition +// starting point is moved to aPosition +// the Ending point is moved to a position which keeps the item size +// (if both coordinates have the same corner reference) +// MoveToUi and MoveTo takes the graphic position (i.e relative to the left top +// paper corner +void WORKSHEET_DATAITEM::MoveToUi( wxPoint aPosition ) { - aGText->SetHorizJustify( m_Hjustify ) ; - aGText->SetVertJustify( m_Vjustify ); - aGText->SetOrientation( m_Orient * 10 ); // graphic text orient unit = 0.1 degree + DPOINT pos_mm; + pos_mm.x = aPosition.x / m_WSunits2Iu; + pos_mm.y = aPosition.y / m_WSunits2Iu; + + MoveTo( pos_mm ); } -void WORKSHEET_DATAITEM_TEXT::IncrementLabel( int aIncr ) +void WORKSHEET_DATAITEM::MoveTo( DPOINT aPosition ) { - wxChar lbchar = m_TextBase[0]; - if( lbchar >= '0' && lbchar <= '9' ) - // A number is expected: - m_FullText.Printf( wxT("%d"), aIncr + lbchar - '0' ); - else - m_FullText.Printf( wxT("%c"), aIncr + lbchar ); + DPOINT vector = aPosition - GetStartPos(); + DPOINT endpos = vector + GetEndPos(); + + MoveStartPointTo( aPosition ); + MoveEndPointTo( endpos ); } -void WORKSHEET_DATAITEM_TEXT::SetConstrainedTextSize() +/* move the starting point of the item to a new position + * aPosition = the new position of the starting point, in mm + */ +void WORKSHEET_DATAITEM::MoveStartPointTo( DPOINT aPosition ) { - m_ConstrainedTextSize = m_TextSize; + DPOINT position; - if( m_BoundingBoxSize.x ) + // Calculate the position of the starting point + // relative to the reference corner + // aPosition is the position relative to the right top paper corner + switch( m_Pos.m_Anchor ) { - bool italic = (m_Flags & USE_ITALIC) != 0; - int linewidth = 0; - int lenMsg = ReturnGraphicTextWidth( m_FullText, m_TextSize.x, italic, linewidth ); - if( lenMsg > m_BoundingBoxSize.x ) - m_ConstrainedTextSize.x = m_TextSize.x * m_BoundingBoxSize.x / lenMsg; + case RB_CORNER: + position = m_RB_Corner - aPosition; + break; + + case RT_CORNER: + position.x = m_RB_Corner.x - aPosition.x; + position.y = aPosition.y - m_LT_Corner.y; + break; + + case LB_CORNER: + position.x = aPosition.x - m_LT_Corner.x; + position.y = m_RB_Corner.y - aPosition.y; + break; + + case LT_CORNER: + position = aPosition - m_LT_Corner; + break; } - if( m_BoundingBoxSize.y ) + m_Pos.m_Pos = position; +} + +/* move the starting point of the item to a new position + * aPosition = the new position of the starting point in graphic units + */ +void WORKSHEET_DATAITEM::MoveStartPointToUi( wxPoint aPosition ) +{ + DPOINT pos_mm; + pos_mm.x = aPosition.x / m_WSunits2Iu; + pos_mm.y = aPosition.y / m_WSunits2Iu; + + MoveStartPointTo( pos_mm ); +} + +/** + * move the ending point of the item to a new position + * has meaning only for items defined by 2 points + * (segments and rectangles) + * aPosition = the new position of the ending point, in mm + */ +void WORKSHEET_DATAITEM::MoveEndPointTo( DPOINT aPosition ) +{ + DPOINT position; + + // Calculate the position of the starting point + // relative to the reference corner + // aPosition is the position relative to the right top paper corner + switch( m_End.m_Anchor ) { - if( m_ConstrainedTextSize.y > m_BoundingBoxSize.y ) - m_ConstrainedTextSize.y = m_BoundingBoxSize.y; + case RB_CORNER: + position = m_RB_Corner - aPosition; + break; + + case RT_CORNER: + position.x = m_RB_Corner.x - aPosition.x; + position.y = aPosition.y - m_LT_Corner.y; + break; + + case LB_CORNER: + position.x = aPosition.x - m_LT_Corner.x; + position.y = m_RB_Corner.y - aPosition.y; + break; + + case LT_CORNER: + position = aPosition - m_LT_Corner; + break; } + + // Modify m_End only for items having 2 coordinates + switch( GetType() ) + { + case WS_SEGMENT: + case WS_RECT: + m_End.m_Pos = position; + break; + + default: + break; + } +} + +/* move the ending point of the item to a new position + * has meaning only for items defined by 2 points + * (segments and rectangles) + * aPosition = the new position of the ending point in graphic units + */ +void WORKSHEET_DATAITEM::MoveEndPointToUi( wxPoint aPosition ) +{ + DPOINT pos_mm; + pos_mm.x = aPosition.x / m_WSunits2Iu; + pos_mm.y = aPosition.y / m_WSunits2Iu; + + MoveEndPointTo( pos_mm ); } const DPOINT WORKSHEET_DATAITEM::GetStartPos( int ii ) const @@ -278,161 +310,188 @@ bool WORKSHEET_DATAITEM::IsInsidePage( int ii ) const return true; } -double WORKSHEET_DATAITEM::m_WSunits2Iu = 1.0; -DPOINT WORKSHEET_DATAITEM::m_RB_Corner; -DPOINT WORKSHEET_DATAITEM::m_LT_Corner; - -WORKSHEET_LAYOUT dataList; // The layout shape - -void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( - const wxString& aPaperFormat, - const wxString& aFileName, - const wxString& aSheetPathHumanReadable, - const TITLE_BLOCK& aTitleBlock, - EDA_COLOR_T aLineColor, EDA_COLOR_T aTextColor ) +const wxString WORKSHEET_DATAITEM::GetClassName() const { - #define milsTomm (25.4/1000) - - m_titleBlock = &aTitleBlock, - m_paperFormat = &aPaperFormat, - m_fileName = &aFileName, - m_sheetFullName = &aSheetPathHumanReadable; - - // Build the basic layout shape, if the layout list is empty - if( dataList.GetCount() == 0 ) - dataList.SetLayout(); - - WORKSHEET_DATAITEM::m_WSunits2Iu = m_milsToIu / milsTomm; - - // Left top corner position - DPOINT lt_corner; - lt_corner.x = m_LTmargin.x; - lt_corner.y = m_LTmargin.y; - WORKSHEET_DATAITEM::m_LT_Corner = lt_corner * milsTomm; - - // Right bottom corner position - DPOINT rb_corner; - rb_corner.x = m_pageSize.x - m_RBmargin.x; - rb_corner.y = m_pageSize.y - m_RBmargin.y; - WORKSHEET_DATAITEM::m_RB_Corner = rb_corner * milsTomm; - - WS_DRAW_ITEM_TEXT* gtext; - int pensize; - EDA_COLOR_T color; - - for( unsigned ii = 0; ; ii++ ) + wxString name; + switch( GetType() ) { - WORKSHEET_DATAITEM* wsItem = dataList.GetItem( ii ); + case WS_TEXT: name = wxT("Text"); break; + case WS_SEGMENT: name = wxT("Line"); break; + case WS_RECT: name = wxT("Rect"); break; + case WS_POLYPOLYGON: name = wxT("Poly"); break; + } - if( wsItem == NULL ) - break; + return name; +} - pensize = wsItem->GetPenSizeUi(); +/* return 0 if the item has no specific option for page 1 + * 1 if the item is only on page 1 + * -1 if the item is not on page 1 + */ +int WORKSHEET_DATAITEM::GetPage1Option() +{ + if(( m_flags & PAGE1OPTION) == PAGE1OPTION_NOTONPAGE1 ) + return -1; - switch( wsItem->m_Type ) - { - case WORKSHEET_DATAITEM::WS_TEXT: - { - WORKSHEET_DATAITEM_TEXT * wsText = (WORKSHEET_DATAITEM_TEXT*)wsItem; - wsText->m_FullText = BuildFullText( wsText->m_TextBase ); - if( wsText->m_FullText.IsEmpty() ) - break; + if(( m_flags & PAGE1OPTION) == PAGE1OPTION_PAGE1ONLY ) + return 1; - if( pensize == 0 ) - pensize = m_penSize; + return 0; +} - color = aLineColor; +/* Set the option for page 1 + * aChoice = 0 if the item has no specific option for page 1 + * > 0 if the item is only on page 1 + * < 0 if the item is not on page 1 + */ +void WORKSHEET_DATAITEM::SetPage1Option( int aChoice ) +{ + ClearFlags( PAGE1OPTION ); - if( wsText->m_Flags & USE_TEXT_COLOR ) - color = aTextColor; + if( aChoice > 0) + SetFlags( PAGE1OPTION_PAGE1ONLY ); - wsText->SetConstrainedTextSize(); - wxSize textsize; + else if( aChoice < 0) + SetFlags( PAGE1OPTION_NOTONPAGE1 ); - textsize.x = KiROUND( wsText->m_ConstrainedTextSize.x - * WORKSHEET_DATAITEM::m_WSunits2Iu ); - textsize.y = KiROUND( wsText->m_ConstrainedTextSize.y - * WORKSHEET_DATAITEM::m_WSunits2Iu ); +} - if( wsText->IsBold()) - pensize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) ); - for( int jj = 0; jj < wsText->m_RepeatCount; jj++) - { - if( ! wsText->IsInsidePage( jj ) ) - continue; +WORKSHEET_DATAITEM_POLYPOLYGON::WORKSHEET_DATAITEM_POLYPOLYGON() : + WORKSHEET_DATAITEM( WS_POLYPOLYGON ) +{ + m_Orient = 0.0; +} - Append( gtext = new WS_DRAW_ITEM_TEXT( wsText->m_FullText, - wsText->GetStartPosUi( jj ), - textsize, - pensize, color, - wsText->IsItalic(), - wsText->IsBold() ) ); - wsText->TransfertSetupToGraphicText( gtext ); +const DPOINT WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPosition( unsigned aIdx, + int aRepeat ) const +{ + DPOINT pos = m_Corners[aIdx]; - // Increment label for the next text - if( wsText->m_RepeatCount > 1 ) - wsText->IncrementLabel( jj+1 ); - } - } - break; + // Rotation: + RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); + pos += GetStartPos( aRepeat ); + return pos; +} - case WORKSHEET_DATAITEM::WS_SEGMENT: - if( pensize == 0 ) - pensize = m_penSize; +void WORKSHEET_DATAITEM_POLYPOLYGON::SetBoundingBox() +{ + if( m_Corners.size() == 0 ) + { + m_minCoord.x = m_maxCoord.x = 0.0; + m_minCoord.y = m_maxCoord.y = 0.0; + return; + } - for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) - { - if( ! wsItem->IsInsidePage( jj ) ) - continue; - Append( new WS_DRAW_ITEM_LINE( wsItem->GetStartPosUi( jj ), - wsItem->GetEndPosUi( jj ), - pensize, aLineColor ) ); - } - break; + DPOINT pos; + pos = m_Corners[0]; + RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); + m_minCoord = m_maxCoord = pos; - case WORKSHEET_DATAITEM::WS_RECT: - if( pensize == 0 ) - pensize = m_penSize; + for( unsigned ii = 1; ii < m_Corners.size(); ii++ ) + { + pos = m_Corners[ii]; + RotatePoint( &pos.x, &pos.y, m_Orient * 10 ); - for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) - { - if( ! wsItem->IsInsidePage( jj ) ) - break; + if( m_minCoord.x > pos.x ) + m_minCoord.x = pos.x; - Append( new WS_DRAW_ITEM_RECT( wsItem->GetStartPosUi( jj ), - wsItem->GetEndPosUi( jj ), - pensize, aLineColor ) ); - } - break; + if( m_minCoord.y > pos.y ) + m_minCoord.y = pos.y; - case WORKSHEET_DATAITEM::WS_POLYPOLYGON: - { - WORKSHEET_DATAITEM_POLYPOLYGON * wspoly = - (WORKSHEET_DATAITEM_POLYPOLYGON*) wsItem; - for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) - { - if( ! wsItem->IsInsidePage( jj ) ) - continue; + if( m_maxCoord.x < pos.x ) + m_maxCoord.x = pos.x; - for( int kk = 0; kk < wspoly->GetPolyCount(); kk++ ) - { - const bool fill = true; - WS_DRAW_ITEM_POLYGON* poly = new WS_DRAW_ITEM_POLYGON( fill, - pensize, aLineColor ); - Append( poly ); - - // Create polygon outline - unsigned ist = wspoly->GetPolyIndexStart( kk ); - unsigned iend = wspoly->GetPolyIndexEnd( kk ); - while( ist <= iend ) - poly->m_Corners.push_back( - wspoly->GetCornerPositionUi( ist++, jj ) ); - - } - } - } - break; - } + if( m_maxCoord.y < pos.y ) + m_maxCoord.y = pos.y; + } +} + +bool WORKSHEET_DATAITEM_POLYPOLYGON::IsInsidePage( int ii ) const +{ + DPOINT pos = GetStartPos( ii ); + pos += m_minCoord; // left top pos of bounding box + + if( m_LT_Corner.x > pos.x || m_LT_Corner.y > pos.y ) + return false; + + pos = GetStartPos( ii ); + pos += m_maxCoord; // rignt bottom pos of bounding box + + if( m_RB_Corner.x < pos.x || m_RB_Corner.y < pos.y ) + return false; + + return true; +} + +const wxPoint WORKSHEET_DATAITEM_POLYPOLYGON::GetCornerPositionUi( unsigned aIdx, + int aRepeat ) const +{ + DPOINT pos = GetCornerPosition( aIdx, aRepeat ); + pos = pos * m_WSunits2Iu; + return wxPoint( int(pos.x), int(pos.y) ); +} + +WORKSHEET_DATAITEM_TEXT::WORKSHEET_DATAITEM_TEXT( const wxChar* aTextBase ) : + WORKSHEET_DATAITEM( WS_TEXT ) +{ + m_TextBase = aTextBase; + m_IncrementLabel = 1; + m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; + m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; + m_Orient = 0.0; + m_LineWidth = 0.0; // 0.0 means use Dd +} + +void WORKSHEET_DATAITEM_TEXT::TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText ) +{ + aGText->SetHorizJustify( m_Hjustify ) ; + aGText->SetVertJustify( m_Vjustify ); + aGText->SetOrientation( m_Orient * 10 ); // graphic text orient unit = 0.1 degree +} + +void WORKSHEET_DATAITEM_TEXT::IncrementLabel( int aIncr ) +{ + int last = m_TextBase.Len() -1; + + wxChar lbchar = m_TextBase[last]; + m_FullText = m_TextBase; + m_FullText.RemoveLast(); + + if( lbchar >= '0' && lbchar <= '9' ) + // A number is expected: + m_FullText << (int)( aIncr + lbchar - '0' ); + else + m_FullText << (wxChar) ( aIncr + lbchar ); +} + +void WORKSHEET_DATAITEM_TEXT::SetConstrainedTextSize() +{ + m_ConstrainedTextSize = m_TextSize; + + if( m_ConstrainedTextSize.x == 0 ) + m_ConstrainedTextSize.x = m_DefaultTextSize.x; + + if( m_ConstrainedTextSize.y == 0 ) + m_ConstrainedTextSize.y = m_DefaultTextSize.y; + + if( m_BoundingBoxSize.x ) + { + int linewidth = 0; + // to know the X size of the line, we should use + // ReturnGraphicTextWidth + // but this function uses integers + // So, to avoid truncations with our unit in mm, use microns. + int sizex_micron = KiROUND( m_ConstrainedTextSize.x * 1000.0 ); + double lenMsg = ReturnGraphicTextWidth( m_FullText, sizex_micron, + IsItalic(), linewidth ) / 1000.0; + if( lenMsg > m_BoundingBoxSize.x ) + m_ConstrainedTextSize.x *= m_BoundingBoxSize.x / lenMsg; + } + + if( m_BoundingBoxSize.y ) + { + if( m_ConstrainedTextSize.y > m_BoundingBoxSize.y ) + m_ConstrainedTextSize.y = m_BoundingBoxSize.y; } } diff --git a/common/page_layout/class_worksheet_layout.cpp b/common/page_layout/class_worksheet_layout.cpp new file mode 100644 index 0000000000..3a56802e80 --- /dev/null +++ b/common/page_layout/class_worksheet_layout.cpp @@ -0,0 +1,174 @@ +/** + * @file class_worksheet_layuout.cpp + * @brief description of graphic items and texts to build a title block + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.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 + */ + + +/* + * the class WORKSHEET_DATAITEM (and derived ) defines + * a basic shape of a page layout ( frame references and title block ) + * The list of these items is stored in a WORKSHEET_LAYOUT instance. + * + * + * These items cannot be drawn or plot "as this". they should be converted + * to a "draw list". When building the draw list: + * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST + * coordinates are converted to draw/plot coordinates. + * texts are expanded if they contain format symbols. + * Items with m_RepeatCount > 1 are created m_RepeatCount times + * + * the WORKSHEET_LAYOUT is created only once. + * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn + * + * the WORKSHEET_LAYOUT instance is created from a S expression which + * describes the page layout (can be the default page layout or a custom file). + */ + +#include +#include +#include +#include +#include +#include +#include + +// The layout shape used in the application +// It is accessible by WORKSHEET_LAYOUT::GetTheInstance() +WORKSHEET_LAYOUT wksTheInstance; + +void WORKSHEET_LAYOUT::ClearList() +{ + for( unsigned ii = 0; ii < m_list.size(); ii++ ) + delete m_list[ii]; + m_list.clear(); +} + +/* Insert an item to the list of items at position aIdx + */ +void WORKSHEET_LAYOUT::Insert( WORKSHEET_DATAITEM* aItem, unsigned aIdx ) +{ + if ( aIdx >= GetCount() ) + Append( aItem ); + else + m_list.insert( m_list.begin() + aIdx, aItem ); +} + +/* Remove the item to the list of items at position aIdx + */ +bool WORKSHEET_LAYOUT::Remove( unsigned aIdx ) +{ + if ( aIdx >= GetCount() ) + return false; + m_list.erase( m_list.begin() + aIdx ); + return true; +} + +/* Remove the item to the list of items at position aIdx + */ +bool WORKSHEET_LAYOUT::Remove( WORKSHEET_DATAITEM* aItem ) +{ + unsigned idx = 0; + + while( idx < m_list.size() ) + { + if( m_list[idx] == aItem ) + break; + + idx++; + } + + return Remove( idx ); +} + +/* return the index of aItem, or -1 if does not exist + */ +int WORKSHEET_LAYOUT::GetItemIndex( WORKSHEET_DATAITEM* aItem ) const +{ + unsigned idx = 0; + while( idx < m_list.size() ) + { + if( m_list[idx] == aItem ) + return (int) idx; + + idx++; + } + + return -1; +} + +/* return the item from its index aIdx, or NULL if does not exist + */ +WORKSHEET_DATAITEM* WORKSHEET_LAYOUT::GetItem( unsigned aIdx ) const +{ + if( aIdx < m_list.size() ) + return m_list[aIdx]; + else + return NULL; +} + +/* return a short filename from a full filename: + * if the path is the current path,or if the path is the same + * as kicad.pro (in template), returns a shortname + * else do nothing and returns the full filename + */ +const wxString WORKSHEET_LAYOUT::MakeShortFileName( const wxString& aFullFileName ) +{ + wxFileName fn = aFullFileName; + wxString shortFileName = aFullFileName; + + wxString fileName = wxGetApp().GetLibraryPathList().FindValidPath( fn.GetFullName() ); + if( !fileName.IsEmpty() ) + { + fn = fileName; + shortFileName = fn.GetFullName(); + return shortFileName; + } + + return shortFileName; +} + +/** + * @return a full filename from a short filename, + * if the short filename path is void + * In this case the path is the same as kicad.pro (in template) + * else return the short filename (which have an absolute os relative path + */ +const wxString WORKSHEET_LAYOUT::MakeFullFileName( const wxString& aShortFileName ) +{ + wxFileName fn = aShortFileName; + wxString fullFileName = aShortFileName; + + if( fn.GetPath().IsEmpty() ) + { + wxString name = wxGetApp().GetLibraryPathList().FindValidPath( fn.GetFullName() ); + if( !name.IsEmpty() ) + fullFileName = name; + } + + return fullFileName; +} diff --git a/common/page_layout/page_layout_default_description.cpp b/common/page_layout/page_layout_default_description.cpp new file mode 100644 index 0000000000..6601db2077 --- /dev/null +++ b/common/page_layout/page_layout_default_description.cpp @@ -0,0 +1,201 @@ +/** + * @file page_layout_default_description.cpp + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.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 + */ + +/* keyword used in page layout description are (see page_layout_reader.keywords) + * page_layout + * setup + * linewidth + * textlinewidth + * textsize + * comment + * option + * page1only + * notonpage1 + * line + * rect + * polygon + * tbtext + * ltcorner + * lbcorner + * rbcorner + * rtcorner + * name + * pos + * start + * end + * pts + * xy + * maxlen + * maxheight + * font + * bold + * italic + * size + * justify + * left + * center + * right + * top + * bottom + * rotate + * repeat + * incrx + * incry + * incrlabel + */ +/* + * Items use coordinates. + * A coordinate is defined relative to a page corner + * A coordinate is the X pos, the Y pos, and the corner which is the coordinate origin + * the default is the bottom right corner + * example: (start 10 0 ltcorner) or (start 20 10) + * The direction depends on the corner: a positive coordinate define a point + * from the corner origin, to the opposite corner. + * + * Items are defined by a name, coordinates in mm and some attributes, + * and can be repeated. + * for instance (repeat 2) (incrx 2) (incry 2) repeat the item 2 times, + * and coordinates are incremented by 2 on X direction, and 2 on Y direction + * Comments are allowed. they are inside (), and start by the keyword comment + * example: + * (comment rect around the title block) + * + * Lines and rect are defined by 2 coordinates start and end, and attributes. + * Attributes are linewidth and repeat parameters. + * example: + * (line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) ) + * (rect (comment rect around the title block) (linewidth 0.15) (start 110 34) (end 2 2) ) + * + * Texts are defined by the text (between quotes), the position, and attributes + * example + * "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )" + * the text can be rotated by (rotation ) with value = rot angle in degrees + * (font (size 1.3 1.3) bold italic) defines a specific size, + * with bold and italic options + * (justify ) controls the text justification (the default is left) + * justif keyword is center, left, right, top and bottom + * (justify center top) is a text centered on X axis and top aligned on vertical axis + * The text size can be constrained: + * (maxlen ) and (maxheight ) force the actual text x and/or y size to be + * reduced to limit the text height to the maxheight value, + * and the full text x size to the maxlen value. + * If the actual text size is smaller than limits, its size is not modified. + * + * Texts can include a format symbol, a la printf. + * At run time these format symbols will be replaced by their actual value. + * + * format symbols are: + * + * %% = replaced by % + * %K = Kicad version + * %Z = paper format name (A4, USLetter ...) + * %Y = company name + * %D = date + * %R = revision + * %S = sheet number + * %N = number of sheets + * %Cx = comment (x = 0 to 9 to identify the comment) + * %F = filename + * %P = sheet path (sheet full name) + * %T = title + * + * example: + * (tbtext \"Size: %Z\" ...) displays "Size A4" or Size USLetter" + * + * Poly Polygons + * Set of filled polygons are supported. + * + * The main purpose is to allow logos, or complex shapes + * They support the repeat and rotation options + * They are defined by + * (polygon (position ..) + * the parameter linewidth defines the pen size used to draw/plot + * the polygon outlines (default = 0) + * example: + * (polygon (pos 134 18 rbcorner) (rotate 20) (linewidth 0.00254) + * + * and a list of corners like + * (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) + * .... ) + * + * each sequence like + * (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) + * .... ) + * defines a polygon. + * Each coordinate is relative to the polygon position. + * Therefore a "polygon" is in fact a set of polygons, of a poly polygon + * + */ + +#include // defaultPageLayout + + +// height of the band reference grid 2.0 mm +// worksheet frame reference text size 1.3 mm +// default text size 1.5 mm +// default line width 0.15 mm +// frame ref pitch 50 mm + +// export defaultPageLayout: +extern const char defaultPageLayout[]; + +// Default page layout (sizes are in mm) +const char defaultPageLayout[] = "( page_layout\n" + "(setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15) )" + "(rect (comment \"rect around the title block\") (linewidth 0.15) (start 110 34) (end 2 2) )\n" + "(rect (start 0 0 ltcorner) (end 0 0 rbcorner) (repeat 2) (incrx 2) (incry 2) )\n" + "(line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )\n" + "(tbtext \"1\" (pos 25 1 ltcorner) (font (size 1.3 1.3))(repeat 100) (incrx 50) )\n" + "(line (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50) )\n" + "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )\n" + "(line (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50) )\n" + "(tbtext \"A\" (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center)(repeat 100) (incry 50) )\n" + "(line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )\n" + "(tbtext \"A\" (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) )\n" + "(tbtext \"Date: %D\" (pos 87 6.9) )\n" + "(line (start 110 5.5) end 2 5.5) )\n" + "(tbtext \"%K\" (pos 109 4.1) (comment \"Kicad version\" ) )\n" + "(line (start 110 8.5) end 2 8.5) )\n" + "(tbtext \"Rev: %R\" (pos 24 6.9)(font bold)(justify left) )\n" + "(tbtext \"Size: %Z\" (comment \"Paper format name\")(pos 109 6.9) )\n" + "(tbtext \"Id: %S/%N\" (comment \"Sheet id\")(pos 24 4.1) )\n" + "(line (start 110 12.5) end 2 12.5) )\n" + "(tbtext \"Title: %T\" (pos 109 10.7)(font bold italic (size 2 2)) )\n" + "(tbtext \"File: %F\" (pos 109 14.3) )\n" + "(line (start 110 18.5) end 2 18.5) )\n" + "(tbtext \"Sheet: %P\" (pos 109 17) )\n" + "(tbtext \"%Y\" (comment \"Company name\") (pos 109 20)(font bold) )\n" + "(tbtext \"%C0\" (comment \"Comment 0\") (pos 109 23) )\n" + "(tbtext \"%C1\" (comment \"Comment 1\") (pos 109 26) )\n" + "(tbtext \"%C2\" (comment \"Comment 2\") (pos 109 29) )\n" + "(tbtext \"%C3\" (comment \"Comment 3\") (pos 109 32) )\n" + "(line (start 90 8.5) end 90 5.5) )\n" + "(line (start 26 8.5) end 26 2) )\n" + ")\n" +; diff --git a/common/page_layout/page_layout_graphic_items.cpp b/common/page_layout/page_layout_graphic_items.cpp new file mode 100644 index 0000000000..9e420ca74f --- /dev/null +++ b/common/page_layout/page_layout_graphic_items.cpp @@ -0,0 +1,382 @@ +/** + * @file page_layout_graphic_items.cpp + * @brief description of graphic items and texts to build a title block + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.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 + */ + + +/* + * the class WORKSHEET_DATAITEM (and WORKSHEET_DATAITEM_TEXT) defines + * a basic shape of a page layout ( frame references and title block ) + * Basic shapes are line, rect and texts + * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to + * one of 4 page corners. + * + * These items cannot be drawn or plot "as this". they should be converted + * to a "draw list" (WS_DRAW_ITEM_BASE and derived items) + + * The list of these items is stored in a WORKSHEET_LAYOUT instance. + * + * When building the draw list: + * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST + * coordinates are converted to draw/plot coordinates. + * texts are expanded if they contain format symbols. + * Items with m_RepeatCount > 1 are created m_RepeatCount times + * + * the WORKSHEET_LAYOUT is created only once. + * the WS_DRAW_ITEM_LIST is created each time the page layout is plotted/drawn + * + * the WORKSHEET_LAYOUT instance is created from a S expression which + * describes the page layout (can be the default page layout or a custom file). + */ + +#include +#include +#include +#include +#include +#include + +/* a helper function to draw graphic symbols at start point or end point of + * an item. + * The start point symbol is a filled rectangle + * The start point symbol is a filled circle + */ +inline void drawMarker( EDA_RECT* aClipBox, wxDC* aDC, + const wxPoint& aPos, int aSize, bool aEndPointShape = false ) +{ + int markerHalfSize = aSize/2; + + if( aEndPointShape ) + GRFilledCircle( aClipBox, aDC, aPos.x, aPos.y, markerHalfSize, + 0, GREEN, GREEN ); + else + GRFilledRect( aClipBox, aDC, + aPos.x - markerHalfSize, aPos.y - markerHalfSize, + aPos.x + markerHalfSize, aPos.y + markerHalfSize, + 0, GREEN, GREEN ); +} + +/* Draws the item list created by BuildWorkSheetGraphicList + * aClipBox = the clipping rect, or NULL if no clipping + * aDC = the current Device Context + * The not selected items are drawn first (most of items) + * The selected items are drawn after (usually 0 or 1) + * to be sure they are seen, even for overlapping items + */ +void WS_DRAW_ITEM_LIST::Draw( EDA_RECT* aClipBox, wxDC* aDC ) +{ + // The not selected items are drawn first (most of items) + for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() ) + { + if( item->GetParent() && item->GetParent()->IsSelected() ) + continue; + + switch( item->GetType() ) + { + case WS_DRAW_ITEM_BASE::wsg_line: + { + WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item; + GRLine( aClipBox, aDC, + line->GetStart(), line->GetEnd(), + line->GetPenWidth(), line->GetColor() ); + } + break; + + case WS_DRAW_ITEM_BASE::wsg_rect: + { + WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item; + GRRect( aClipBox, aDC, + rect->GetStart().x, rect->GetStart().y, + rect->GetEnd().x, rect->GetEnd().y, + rect->GetPenWidth(), rect->GetColor() ); + } + break; + + case WS_DRAW_ITEM_BASE::wsg_text: + { + WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item; + DrawGraphicText( aClipBox, aDC, text->GetTextPosition(), + text->GetColor(), text->GetText(), + text->GetOrientation(), text->GetSize(), + text->GetHorizJustify(), text->GetVertJustify(), + text->GetPenWidth(), text->IsItalic(), text->IsBold() ); + } + break; + + case WS_DRAW_ITEM_BASE::wsg_poly: + { + WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item; + GRPoly( aClipBox, aDC, + poly->m_Corners.size(), &poly->m_Corners[0], + poly->IsFilled() ? FILLED_SHAPE : NO_FILL, + poly->GetPenWidth(), + poly->GetColor(), poly->GetColor() ); + } + break; + } + } + + // The selected items are drawn after (usually 0 or 1) + int markerSize = WORKSHEET_DATAITEM::GetMarkerSizeUi(); + + for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() ) + { + if( !item->GetParent() || !item->GetParent()->IsSelected() ) + continue; + + switch( item->GetType() ) + { + case WS_DRAW_ITEM_BASE::wsg_line: + { + WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item; + GRLine( aClipBox, aDC, + line->GetStart(), line->GetEnd(), + line->GetPenWidth(), line->GetColor() ); + + if( markerSize ) + { + drawMarker( aClipBox, aDC, line->GetStart(), markerSize ); + drawMarker( aClipBox, aDC, line->GetEnd(), markerSize, true ); + } + } + break; + + case WS_DRAW_ITEM_BASE::wsg_rect: + { + WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item; + GRRect( aClipBox, aDC, + rect->GetStart().x, rect->GetStart().y, + rect->GetEnd().x, rect->GetEnd().y, + rect->GetPenWidth(), rect->GetColor() ); + + if( markerSize ) + { + drawMarker( aClipBox, aDC, rect->GetStart(), markerSize ); + drawMarker( aClipBox, aDC, rect->GetEnd(), markerSize, true ); + } + } + break; + + case WS_DRAW_ITEM_BASE::wsg_text: + { + WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item; + DrawGraphicText( aClipBox, aDC, text->GetTextPosition(), + text->GetColor(), text->GetText(), + text->GetOrientation(), text->GetSize(), + text->GetHorizJustify(), text->GetVertJustify(), + text->GetPenWidth(), text->IsItalic(), text->IsBold() ); + + if( markerSize ) + drawMarker( aClipBox, aDC, text->GetTextPosition(), + markerSize ); + } + break; + + case WS_DRAW_ITEM_BASE::wsg_poly: + { + WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item; + GRPoly( aClipBox, aDC, + poly->m_Corners.size(), &poly->m_Corners[0], + poly->IsFilled() ? FILLED_SHAPE : NO_FILL, + poly->GetPenWidth(), + poly->GetColor(), poly->GetColor() ); + + if( markerSize ) + { + drawMarker( aClipBox, aDC, poly->GetPosition(), + markerSize ); + } + } + break; + } + } +} + +// return true if the point aPosition is on the text +bool WS_DRAW_ITEM_TEXT::HitTest( const wxPoint& aPosition) +{ + return EDA_TEXT::TextHitTest( aPosition, 0 ); +} + +/* return true if the point aPosition is on the starting point of this item + */ +bool WS_DRAW_ITEM_TEXT::HitTestStartPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetTextPosition(); + + if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 && + std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +// return true if the point aPosition is inside one of polygons +#include +bool WS_DRAW_ITEM_POLYGON::HitTest( const wxPoint& aPosition) +{ + return TestPointInsidePolygon( &m_Corners[0], + m_Corners.size(), aPosition ); +} + +/* return true if the point aPosition is on the starting point of this item + */ +bool WS_DRAW_ITEM_POLYGON::HitTestStartPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetPosition(); + + if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 && + std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +// return true if the point aPosition is on the rect outline +bool WS_DRAW_ITEM_RECT::HitTest( const wxPoint& aPosition) +{ + int dist = GetPenWidth()/2; + wxPoint start = GetStart(); + wxPoint end; + end.x = GetEnd().x; + end.y = start.y; + + // Upper line + if( TestSegmentHit( aPosition, start, end, dist ) ) + return true; + + // Right line + start = end; + end.y = GetEnd().y; + if( TestSegmentHit( aPosition, start, end, dist ) ) + return true; + + // lower line + start = end; + end.x = GetStart().x; + if( TestSegmentHit( aPosition, start, end, dist ) ) + return true; + + // left line + start = end; + end = GetStart(); + if( TestSegmentHit( aPosition, start, end, dist ) ) + return true; + + return false; +} + +/* return true if the point aPosition is on the starting point of this item + */ +bool WS_DRAW_ITEM_RECT::HitTestStartPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetStart(); + + if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 && + std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +/* return true if the point aPosition is on the ending point of this item + */ +bool WS_DRAW_ITEM_RECT::HitTestEndPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetEnd(); + + int dist = (int) hypot( pos.x - aPosition.x, pos.y - aPosition.y ); + + if( dist <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +// return true if the point aPosition is on the text +bool WS_DRAW_ITEM_LINE::HitTest( const wxPoint& aPosition) +{ + return TestSegmentHit( aPosition, GetStart(), GetEnd(), GetPenWidth()/2 ); +} + +/* return true if the point aPosition is on the starting point of this item + */ +bool WS_DRAW_ITEM_LINE::HitTestStartPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetStart(); + + if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 && + std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +/* return true if the point aPosition is on the ending point of this item + */ +bool WS_DRAW_ITEM_LINE::HitTestEndPoint( const wxPoint& aPosition) +{ + wxPoint pos = GetEnd(); + + if( std::abs( pos.x - aPosition.x) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 && + std::abs( pos.y - aPosition.y) <= WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 ) + return true; + + return false; +} + +/* Locate graphic items in m_graphicList at location aPosition + * aList = the list of items found + * aPosition is the position (in user units) to locate items + */ +void WS_DRAW_ITEM_LIST::Locate( std::vector & aList, + const wxPoint& aPosition) +{ + for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() ) + { + item->m_Flags &= ~(LOCATE_STARTPOINT|LOCATE_ENDPOINT); + bool found = false; + + if( item->HitTestStartPoint ( aPosition ) ) + { + item->m_Flags |= LOCATE_STARTPOINT; + found = true; + } + + if( item->HitTestEndPoint ( aPosition ) ) + { + item->m_Flags |= LOCATE_ENDPOINT; + found = true; + } + + if( found || item->HitTest( aPosition ) ) + { + aList.push_back( item ); + } + } +} diff --git a/common/page_layout/page_layout_reader.cpp b/common/page_layout/page_layout_reader.cpp new file mode 100644 index 0000000000..502285da92 --- /dev/null +++ b/common/page_layout/page_layout_reader.cpp @@ -0,0 +1,684 @@ +/** + * @file page_layout_reader.cpp + * @brief read an S expression of description of graphic items and texts + * to build a title block and page layout + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors. + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include + + +using namespace TB_READER_T; + +/** + * Class PAGE_LAYOUT_READER_PARSER + * holds data and functions pertinent to parsing a S-expression file + * for a WORKSHEET_LAYOUT. + */ +class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER +{ +public: + PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ); + void Parse( WORKSHEET_LAYOUT* aLayout ) + throw( PARSE_ERROR, IO_ERROR ); + +private: + + /** + * Function parseInt + * parses an integer and constrains it between two values. + * @param aMin is the smallest return value. + * @param aMax is the largest return value. + * @return int - the parsed integer. + */ + int parseInt( int aMin, int aMax ); + + /** + * Function parseDouble + * parses a double + * @return double - the parsed double. + */ + double parseDouble(); + + void parseSetup() throw( IO_ERROR, PARSE_ERROR ); + void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR ); + void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR ); + void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) + throw( IO_ERROR, PARSE_ERROR ); + void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) + throw( IO_ERROR, PARSE_ERROR ); + void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR ); + void readOption( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR ); +}; + +// PCB_PLOT_PARAMS_PARSER + +PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ) : + PAGE_LAYOUT_READER_LEXER( aLine, aSource ) +{ +} + + +void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout ) + throw( PARSE_ERROR, IO_ERROR ) +{ + T token; + WORKSHEET_DATAITEM * item; + + LOCALE_IO toggle; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + if( token == T_LEFT ) + token = NextTok(); + + if( token == T_page_layout ) + continue; + + switch( token ) + { + case T_setup: // Defines default values for graphic items + parseSetup(); + break; + + case T_line: + item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_SEGMENT ); + parseGraphic( item ); + aLayout->Append( item ); + break; + + case T_rect: + item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_RECT ); + parseGraphic( item ); + aLayout->Append( item ); + break; + + case T_polygon: + item = new WORKSHEET_DATAITEM_POLYPOLYGON(); + parsePolygon( (WORKSHEET_DATAITEM_POLYPOLYGON*) item ); + aLayout->Append( item ); + break; + + case T_tbtext: + NeedSYMBOLorNUMBER(); + item = new WORKSHEET_DATAITEM_TEXT( FromUTF8() ); + parseText( (WORKSHEET_DATAITEM_TEXT*) item ); + aLayout->Append( item ); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + +void PAGE_LAYOUT_READER_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + switch( token ) + { + case T_LEFT: + break; + + case T_linewidth: + WORKSHEET_DATAITEM::m_DefaultLineWidth = parseDouble(); + NeedRIGHT(); + break; + + case T_textsize: + WORKSHEET_DATAITEM::m_DefaultTextSize.x = parseDouble(); + WORKSHEET_DATAITEM::m_DefaultTextSize.y = parseDouble(); + NeedRIGHT(); + break; + + case T_textlinewidth: + WORKSHEET_DATAITEM::m_DefaultTextThickness = parseDouble(); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + +void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + if( token == T_LEFT ) + token = NextTok(); + + switch( token ) + { + case T_comment: + NeedSYMBOLorNUMBER(); + aItem->m_Info = FromUTF8(); + NeedRIGHT(); + break; + + case T_pos: + parseCoordinate( aItem->m_Pos ); + break; + + case T_name: + NeedSYMBOLorNUMBER(); + aItem->m_Name = FromUTF8(); + NeedRIGHT(); + break; + + case T_option: + readOption( aItem ); + break; + + case T_pts: + parsePolyOutline( aItem ); + aItem->CloseContour(); + break; + + case T_rotate: + aItem->m_Orient = parseDouble(); + NeedRIGHT(); + break; + + case T_repeat: + aItem->m_RepeatCount = parseInt( -1, 100 ); + NeedRIGHT(); + break; + + case T_incrx: + aItem->m_IncrementVector.x = parseDouble(); + NeedRIGHT(); + break; + + case T_incry: + aItem->m_IncrementVector.y = parseDouble(); + NeedRIGHT(); + break; + + case T_linewidth: + aItem->m_LineWidth = parseDouble(); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } + + aItem->SetBoundingBox(); +} + +void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) + throw( IO_ERROR, PARSE_ERROR ) +{ + DPOINT corner; + T token; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + if( token == T_LEFT ) + token = NextTok(); + + switch( token ) + { + case T_xy: + corner.x = parseDouble(); + corner.y = parseDouble(); + aItem->AppendCorner( corner ); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + +void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem ) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + switch( token ) + { + case T_page1only: + aItem->SetPage1Option( 1 ); + break; + + case T_notonpage1: + aItem->SetPage1Option( -1 ); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + + +void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem ) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + if( token == T_LEFT ) + token = NextTok(); + + switch( token ) + { + case T_comment: + NeedSYMBOLorNUMBER(); + aItem->m_Info = FromUTF8(); + NeedRIGHT(); + break; + + case T_option: + readOption( aItem ); + break; + + case T_name: + NeedSYMBOLorNUMBER(); + aItem->m_Name = FromUTF8(); + NeedRIGHT(); + break; + + case T_start: + parseCoordinate( aItem->m_Pos ); + break; + + case T_end: + parseCoordinate( aItem->m_End ); + break; + + case T_repeat: + aItem->m_RepeatCount = parseInt( -1, 100 ); + NeedRIGHT(); + break; + + case T_incrx: + aItem->m_IncrementVector.x = parseDouble(); + NeedRIGHT(); + break; + + case T_incry: + aItem->m_IncrementVector.y = parseDouble(); + NeedRIGHT(); + break; + + case T_linewidth: + aItem->m_LineWidth = parseDouble(); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + + +void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem ) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + if( token == T_LEFT ) + token = NextTok(); + + switch( token ) + { + case T_comment: + NeedSYMBOLorNUMBER(); + aItem->m_Info = FromUTF8(); + NeedRIGHT(); + break; + + case T_option: + readOption( aItem ); + break; + + case T_name: + NeedSYMBOLorNUMBER(); + aItem->m_Name = FromUTF8(); + NeedRIGHT(); + break; + + case T_pos: + parseCoordinate( aItem->m_Pos ); + break; + + case T_repeat: + aItem->m_RepeatCount = parseInt( -1, 100 ); + NeedRIGHT(); + break; + + case T_incrx: + aItem->m_IncrementVector.x = parseDouble(); + NeedRIGHT(); + break; + + case T_incry: + aItem->m_IncrementVector.y = parseDouble(); + NeedRIGHT(); + break; + + case T_incrlabel: + aItem->m_IncrementLabel = parseInt(INT_MIN, INT_MAX); + NeedRIGHT(); + break; + + case T_maxlen: + aItem->m_BoundingBoxSize.x = parseDouble(); + NeedRIGHT(); + break; + + case T_maxheight: + aItem->m_BoundingBoxSize.y = parseDouble(); + NeedRIGHT(); + break; + + case T_font: + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + switch( token ) + { + case T_LEFT: + break; + + case T_bold: + aItem->SetBold( true ); + break; + + case T_italic: + aItem->SetItalic( true ); + break; + + case T_size: + aItem->m_TextSize.x = parseDouble(); + aItem->m_TextSize.y = parseDouble(); + NeedRIGHT(); + break; + + case T_linewidth: + aItem->m_LineWidth = parseDouble(); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } + break; + + case T_justify: + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + break; + + switch( token ) + { + case T_center: + aItem->m_Hjustify = GR_TEXT_HJUSTIFY_CENTER; + aItem->m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; + break; + + case T_left: + aItem->m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; + break; + + case T_right: + aItem->m_Hjustify = GR_TEXT_HJUSTIFY_RIGHT; + break; + + case T_top: + aItem->m_Vjustify = GR_TEXT_VJUSTIFY_TOP; + break; + + case T_bottom: + aItem->m_Vjustify = GR_TEXT_VJUSTIFY_BOTTOM; + break; + + default: + Unexpected( CurText() ); + break; + } + } + break; + + case T_rotate: + aItem->m_Orient = parseDouble(); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + +// parse an expression like " 25 1 ltcorner)" +void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + + aCoord.m_Pos.x = parseDouble(); + aCoord.m_Pos.y = parseDouble(); + + while( ( token = NextTok() ) != T_RIGHT ) + { + switch( token ) + { + case T_ltcorner: + aCoord.m_Anchor = LT_CORNER; // left top corner + break; + + case T_lbcorner: + aCoord.m_Anchor = LB_CORNER; // left bottom corner + break; + + case T_rbcorner: + aCoord.m_Anchor = RB_CORNER; // right bottom corner + break; + + case T_rtcorner: + aCoord.m_Anchor = RT_CORNER; // right top corner + break; + + default: + Unexpected( CurText() ); + break; + } + } +} + +int PAGE_LAYOUT_READER_PARSER::parseInt( int aMin, int aMax ) +{ + T token = NextTok(); + + if( token != T_NUMBER ) + Expecting( T_NUMBER ); + + int val = atoi( CurText() ); + + if( val < aMin ) + val = aMin; + else if( val > aMax ) + val = aMax; + + return val; +} + + +double PAGE_LAYOUT_READER_PARSER::parseDouble() +{ + T token = NextTok(); + + if( token != T_NUMBER ) + Expecting( T_NUMBER ); + + double val = strtod( CurText(), NULL ); + + return val; +} + +// defaultPageLayout is the default page layout description +// using the S expr. +// see page_layout_default_shape.cpp +extern const char defaultPageLayout[]; + +void WORKSHEET_LAYOUT::SetDefaultLayout() +{ + ClearList(); + PAGE_LAYOUT_READER_PARSER lp_parser( defaultPageLayout, wxT( "default page" ) ); + + try + { + lp_parser.Parse( this ); + } + catch( IO_ERROR ioe ) + { + wxLogMessage( ioe.errorText ); + } +} + +#include + +// SetLayout() try to load a custom layout file, +// currently defined by the environment variable KICAD_WKSFILE +// (a *.kicad_wks file). +// if does not exists, loads the default page layout. +void WORKSHEET_LAYOUT::SetPageLayout( const wxString& aFullFileName, bool Append ) +{ + wxString fullFileName = aFullFileName; + + if( !Append ) + { + fullFileName = MakeFullFileName( aFullFileName ); + + if( fullFileName.IsEmpty() ) + wxGetEnv( wxT( "KICAD_WKSFILE" ), &fullFileName ); + + if( fullFileName.IsEmpty() || !wxFileExists( fullFileName ) ) + { + #if 0 + if( !fullFileName.IsEmpty() ) + { + wxLogMessage( wxT("Page layout file <%s> not found"), + fullFileName.GetData() ); + } + #endif + SetDefaultLayout(); + return; + } + } + + wxFile wksFile( fullFileName ); + + if( ! wksFile.IsOpened() ) + { + if( !Append ) + SetDefaultLayout(); + return; + } + + int filelen = wksFile.Length(); + char * buffer = new char[filelen+10]; + + if( wksFile.Read( buffer, filelen ) != filelen ) + wxLogMessage( _("The file <%s> was not fully read"), + fullFileName.GetData() ); + else + { + buffer[filelen]=0; + if( ! Append ) + ClearList(); + PAGE_LAYOUT_READER_PARSER lp_parser( buffer, fullFileName ); + + try + { + lp_parser.Parse( this ); + } + catch( IO_ERROR ioe ) + { + wxLogMessage( ioe.errorText ); + } + } + + delete[] buffer; +} + diff --git a/common/page_layout/page_layout_reader.keywords b/common/page_layout/page_layout_reader.keywords new file mode 100644 index 0000000000..93b21faea3 --- /dev/null +++ b/common/page_layout/page_layout_reader.keywords @@ -0,0 +1,40 @@ +page_layout +setup +linewidth +textlinewidth +textsize +comment +option +page1only +notonpage1 +line +rect +polygon +tbtext +ltcorner +lbcorner +rbcorner +rtcorner +name +pos +start +end +pts +xy +maxlen +maxheight +font +bold +italic +size +justify +left +center +right +top +bottom +rotate +repeat +incrx +incry +incrlabel diff --git a/common/page_layout/title_block_shapes.cpp b/common/page_layout/title_block_shapes.cpp new file mode 100644 index 0000000000..51056cda87 --- /dev/null +++ b/common/page_layout/title_block_shapes.cpp @@ -0,0 +1,232 @@ +/** + * @file title_block_shape.cpp + * @brief description of graphic items and texts to build a title block + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.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 + */ + + +/* + * the class WORKSHEET_DATAITEM (and WORKSHEET_DATAITEM_TEXT) defines + * a basic shape of a page layout ( frame references and title block ) + * Basic shapes are line, rect and texts + * the WORKSHEET_DATAITEM coordinates units is the mm, and are relative to + * one of 4 page corners. + * + * These items cannot be drawn or plot "as this". they should be converted + * to a "draw list" (WS_DRAW_ITEM_BASE and derived items) + + * The list of these items is stored in a WORKSHEET_LAYOUT instance. + * + * When building the draw list: + * the WORKSHEET_LAYOUT is used to create a WS_DRAW_ITEM_LIST + * coordinates are converted to draw/plot coordinates. + * texts are expanded if they contain format symbols. + * Items with m_RepeatCount > 1 are created m_RepeatCount times + * + * the WORKSHEET_LAYOUT is created only once. + * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn + * + * the WORKSHEET_LAYOUT instance is created from a S expression which + * describes the page layout (can be the default page layout or a custom file). + */ + +#include +#include +#include +#include +#include +#include + +void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( + const PAGE_INFO& aPageInfo, + const TITLE_BLOCK& aTitleBlock, + EDA_COLOR_T aColor, EDA_COLOR_T aAltColor ) +{ + #define milsTomm (25.4/1000) + + m_titleBlock = &aTitleBlock; + m_paperFormat = &aPageInfo.GetType(); + + wxPoint LTmargin( aPageInfo.GetLeftMarginMils(), aPageInfo.GetTopMarginMils() ); + wxPoint RBmargin( aPageInfo.GetRightMarginMils(), aPageInfo.GetBottomMarginMils() ); + SetMargins( LTmargin, RBmargin ); + SetPageSize( aPageInfo.GetSizeMils() ); + + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + + // Build the basic layout shape, if the layout list is empty + if( pglayout.GetCount() == 0 && !pglayout.VoidListAllowed() ) + pglayout.SetPageLayout(); + + WORKSHEET_DATAITEM::m_WSunits2Iu = m_milsToIu / milsTomm; + WORKSHEET_DATAITEM::m_Color = aColor; // the default color to draw items + WORKSHEET_DATAITEM::m_AltColor = aAltColor; // an alternate color to draw items + + // Left top corner position + DPOINT lt_corner; + lt_corner.x = m_LTmargin.x; + lt_corner.y = m_LTmargin.y; + WORKSHEET_DATAITEM::m_LT_Corner = lt_corner * milsTomm; + + // Right bottom corner position + DPOINT rb_corner; + rb_corner.x = m_pageSize.x - m_RBmargin.x; + rb_corner.y = m_pageSize.y - m_RBmargin.y; + WORKSHEET_DATAITEM::m_RB_Corner = rb_corner * milsTomm; + + WS_DRAW_ITEM_TEXT* gtext; + int pensize; + + for( unsigned ii = 0; ; ii++ ) + { + WORKSHEET_DATAITEM* wsItem = pglayout.GetItem( ii ); + + if( wsItem == NULL ) + break; + + // Generate it only if the page option allows this + if( wsItem->GetPage1Option() < 0 // Not on page 1 + && m_sheetNumber <= 1 ) + continue; + + if( wsItem->GetPage1Option() > 0 // Only on page 1 + && m_sheetNumber > 1 ) + continue; + + EDA_COLOR_T color = wsItem->GetItemColor(); + + pensize = wsItem->GetPenSizeUi(); + + switch( wsItem->GetType() ) + { + case WORKSHEET_DATAITEM::WS_TEXT: + { + WORKSHEET_DATAITEM_TEXT * wsText = (WORKSHEET_DATAITEM_TEXT*)wsItem; + + if( wsText->m_SpecialMode ) + wsText->m_FullText = wsText->m_TextBase; + else + wsText->m_FullText = BuildFullText( wsText->m_TextBase ); + + if( wsText->m_FullText.IsEmpty() ) + break; + + if( pensize == 0 ) + pensize = m_penSize; + + wsText->SetConstrainedTextSize(); + wxSize textsize; + + textsize.x = KiROUND( wsText->m_ConstrainedTextSize.x + * WORKSHEET_DATAITEM::m_WSunits2Iu ); + textsize.y = KiROUND( wsText->m_ConstrainedTextSize.y + * WORKSHEET_DATAITEM::m_WSunits2Iu ); + + if( wsText->IsBold()) + pensize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) ); + + for( int jj = 0; jj < wsText->m_RepeatCount; jj++) + { + if( jj && ! wsText->IsInsidePage( jj ) ) + continue; + + Append( gtext = new WS_DRAW_ITEM_TEXT( wsText, wsText->m_FullText, + wsText->GetStartPosUi( jj ), + textsize, + pensize, color, + wsText->IsItalic(), + wsText->IsBold() ) ); + wsText->TransfertSetupToGraphicText( gtext ); + + // Increment label for the next text + if( wsText->m_RepeatCount > 1 ) + wsText->IncrementLabel( (jj+1)*wsText->m_IncrementLabel); + } + } + break; + + case WORKSHEET_DATAITEM::WS_SEGMENT: + if( pensize == 0 ) + pensize = m_penSize; + + for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) + { + if( jj && ! wsItem->IsInsidePage( jj ) ) + continue; + Append( new WS_DRAW_ITEM_LINE( wsItem, wsItem->GetStartPosUi( jj ), + wsItem->GetEndPosUi( jj ), + pensize, color ) ); + } + break; + + case WORKSHEET_DATAITEM::WS_RECT: + if( pensize == 0 ) + pensize = m_penSize; + + for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) + { + if( jj && ! wsItem->IsInsidePage( jj ) ) + break; + + Append( new WS_DRAW_ITEM_RECT( wsItem, wsItem->GetStartPosUi( jj ), + wsItem->GetEndPosUi( jj ), + pensize, color ) ); + } + break; + + case WORKSHEET_DATAITEM::WS_POLYPOLYGON: + { + WORKSHEET_DATAITEM_POLYPOLYGON * wspoly = + (WORKSHEET_DATAITEM_POLYPOLYGON*) wsItem; + for( int jj = 0; jj < wsItem->m_RepeatCount; jj++ ) + { + if( jj && ! wsItem->IsInsidePage( jj ) ) + continue; + + for( int kk = 0; kk < wspoly->GetPolyCount(); kk++ ) + { + const bool fill = true; + WS_DRAW_ITEM_POLYGON* poly = new WS_DRAW_ITEM_POLYGON( wspoly, + wspoly->GetStartPosUi( jj ), + fill, pensize, color ); + Append( poly ); + + // Create polygon outline + unsigned ist = wspoly->GetPolyIndexStart( kk ); + unsigned iend = wspoly->GetPolyIndexEnd( kk ); + while( ist <= iend ) + poly->m_Corners.push_back( + wspoly->GetCornerPositionUi( ist++, jj ) ); + + } + } + } + break; + } + } +} + diff --git a/common/title_block_shapes_gost.cpp b/common/page_layout/title_block_shapes_gost.cpp similarity index 94% rename from common/title_block_shapes_gost.cpp rename to common/page_layout/title_block_shapes_gost.cpp index 86887d9597..b1ce943334 100644 --- a/common/title_block_shapes_gost.cpp +++ b/common/page_layout/title_block_shapes_gost.cpp @@ -978,9 +978,7 @@ Ki_WorkSheetData WS_DopTop_Line6 = #include void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( - const wxString& aPaperFormat, - const wxString& aFileName, - const wxString& aSheetPathHumanReadable, + const PAGE_INFO& aPageInfo, const TITLE_BLOCK& aTitleBlock, EDA_COLOR_T aLineColor, EDA_COLOR_T aTextColor ) { @@ -990,8 +988,14 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( Ki_WorkSheetData* WsItem; wxSize size( TEXTSIZE * m_milsToIu, TEXTSIZE * m_milsToIu ); wxString msg; + wxString paperFormat = aPageInfo.GetType(); WS_DRAW_ITEM_TEXT* gtext; + wxPoint LTmargin( aPageInfo.GetLeftMarginMils(), aPageInfo.GetTopMarginMils() ); + wxPoint RBmargin( aPageInfo.GetRightMarginMils(), aPageInfo.GetBottomMarginMils() ); + SetMargins( LTmargin, RBmargin ); + SetPageSize( aPageInfo.GetSizeMils() ); + // Upper left corner refx = m_LTmargin.x; refy = m_LTmargin.y; @@ -1011,7 +1015,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( wxSize size3( TEXTSIZE * m_milsToIu * 3, TEXTSIZE * m_milsToIu * 3 ); // Draw the border. - Append( new WS_DRAW_ITEM_RECT( + Append( new WS_DRAW_ITEM_RECT( NULL, wxPoint( refx * m_milsToIu, refy * m_milsToIu ), wxPoint( xg * m_milsToIu, yg * m_milsToIu ), lnWosn, aLineColor ) ); @@ -1034,12 +1038,12 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( switch( WsItem->m_Type ) { case WS_OSN: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWosn, aLineColor ) ); break; case WS_TONK: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWtonk, aLineColor ) ); break; @@ -1048,11 +1052,11 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( if( !msg.IsEmpty() ) { if( WsItem == &WS_Osn1_Text1 ) - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size0_8, m_penSize, aLineColor ) ); else - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); } @@ -1062,7 +1066,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( if( !msg.IsEmpty() ) { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); } @@ -1078,7 +1082,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.y = ( refy - Mm2mils( 17.5 ) ) * m_milsToIu; msg.Empty(); msg << m_sheetNumber; - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); } @@ -1087,7 +1091,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.y = ( refy - Mm2mils( 17.5 ) ) * m_milsToIu; msg.Empty(); msg << m_sheetCount; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); @@ -1105,7 +1109,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 25 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 7.5 ) ) * m_milsToIu; - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aLineColor ) ); } @@ -1211,7 +1215,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( for( unsigned curLn = 0; curLn < lines.Count(); curLn++ ) { msg = lines[curLn]; - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); pos.y += titleHeight * m_milsToIu; } @@ -1231,7 +1235,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 60 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 47.5 ) ) * m_milsToIu; - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT(NULL, msg, pos, sz, m_penSize, aTextColor ) ); } @@ -1249,7 +1253,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 167.5 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 27.5 ) ) * m_milsToIu; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); } @@ -1268,7 +1272,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 167 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 22.5 ) ) * m_milsToIu; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); } @@ -1287,7 +1291,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 167 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 2.5 ) ) * m_milsToIu; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); } @@ -1305,12 +1309,12 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( switch( WsItem->m_Type ) { case WS_OSN: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWosn, aLineColor ) ); break; case WS_TONK: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWtonk, aLineColor ) ); break; @@ -1319,11 +1323,11 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( if( !msg.IsEmpty() ) { if( WsItem == &WS_Osn2a_Text1 ) - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size0_8, m_penSize, aLineColor ) ); else - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); } @@ -1333,7 +1337,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( if( !msg.IsEmpty() ) { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); @@ -1348,7 +1352,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.y = ( refy - Mm2mils( 4 ) ) * m_milsToIu; msg.Empty(); msg << m_sheetNumber; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); // Decimal number @@ -1365,7 +1369,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 65 ) ) * m_milsToIu; pos.y = ( refy - Mm2mils( 7.5 ) ) * m_milsToIu; - Append( new WS_DRAW_ITEM_TEXT( msg, pos, + Append( new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); } } @@ -1374,8 +1378,8 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 23 ) ) * m_milsToIu; pos.y = ( refy + Mm2mils( 2.5 ) ) * m_milsToIu; msg.Empty(); - msg << aPaperFormat; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + msg << paperFormat; + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); @@ -1397,7 +1401,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( switch( WsItem->m_Type ) { case WS_OSN: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWosn, aLineColor ) ); break; @@ -1405,7 +1409,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( if( !msg.IsEmpty() ) { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, size, m_penSize, aLineColor ) ); gtext->SetOrientation( TEXT_ORIENT_VERT ); } @@ -1414,7 +1418,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( } } - if( aPaperFormat == PAGE_INFO::A4 || m_pageSize.x > m_pageSize.y ) // A4 or Landscape + if( paperFormat == PAGE_INFO::A4 || m_pageSize.x > m_pageSize.y ) // A4 or Landscape { // Center - left top corner refx = m_LTmargin.x; @@ -1434,12 +1438,12 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( switch( WsItem->m_Type ) { case WS_OSN: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWosn, aLineColor ) ); break; case WS_TONK: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWtonk, aLineColor ) ); break; } @@ -1459,7 +1463,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx + Mm2mils( 35 ) ) * m_milsToIu; pos.y = ( refy + Mm2mils( 7 ) ) * m_milsToIu; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); gtext->SetOrientation( 1800.0 ); } @@ -1485,12 +1489,12 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( switch( WsItem->m_Type ) { case WS_OSN: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWosn, aLineColor ) ); break; case WS_TONK: - Append( new WS_DRAW_ITEM_LINE( pos, end, + Append( new WS_DRAW_ITEM_LINE( NULL, pos, end, lnWtonk, aLineColor ) ); break; } @@ -1510,7 +1514,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( pos.x = ( refx - Mm2mils( 7 ) ) * m_milsToIu; pos.y = ( refy + Mm2mils( 35 ) ) * m_milsToIu; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, + Append( gtext = new WS_DRAW_ITEM_TEXT( NULL, msg, pos, sz, m_penSize, aTextColor ) ); gtext->SetOrientation( TEXT_ORIENT_VERT ); } diff --git a/common/wildcards_and_files_ext.cpp b/common/wildcards_and_files_ext.cpp index fe2c86e223..55449162b0 100644 --- a/common/wildcards_and_files_ext.cpp +++ b/common/wildcards_and_files_ext.cpp @@ -46,6 +46,7 @@ const wxString GerberFileExtension( wxT( "pho" ) ); const wxString LegacyPcbFileExtension( wxT( "brd" ) ); const wxString KiCadPcbFileExtension( wxT( "kicad_pcb" ) ); +const wxString PageLayoutDescrFileExtension( wxT( "kicad_wks" ) ); const wxString PdfFileExtension( wxT( "pdf" ) ); const wxString MacrosFileExtension( wxT( "mcr" ) ); @@ -81,7 +82,7 @@ const wxString EagleFootprintLibPathWildcard( _( "Eagle ver. 6.x XML library fil const wxString GedaPcbFootprintLibFileWildcard( _( "Geda PCB footprint library file (*.fp)|*.fp" ) ); const wxString MacrosFileWildcard( _( "KiCad recorded macros (*.mcr)|*.mcr" ) ); const wxString ComponentFileExtensionWildcard( _( "Component-footprint link file (*.cmp)|*cmp" ) ); - +const wxString PageLayoutDescrFileWildcard( _( "Page layout descr file (*.kicad_wks)|*kicad_wks" ) ); // generic: const wxString AllFilesWildcard( _( "All files (*)|*" ) ); diff --git a/common/worksheet.cpp b/common/worksheet.cpp index 88bf97c179..4e2b1d116c 100644 --- a/common/worksheet.cpp +++ b/common/worksheet.cpp @@ -46,60 +46,6 @@ static const wxString productName = wxT( "KiCad E.D.A. " ); -/* Draws the item list crated by BuildWorkSheetGraphicList - * aClipBox = the clipping rect, or NULL if no clipping - * aDC = the current Device Context - */ -void WS_DRAW_ITEM_LIST::Draw( EDA_RECT* aClipBox, wxDC* aDC ) -{ - for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() ) - { - switch( item->GetType() ) - { - case WS_DRAW_ITEM_BASE::wsg_line: - { - WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item; - GRLine( aClipBox, aDC, - line->GetStart(), line->GetEnd(), - line->GetPenWidth(), line->GetColor() ); - } - break; - - case WS_DRAW_ITEM_BASE::wsg_rect: - { - WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item; - GRRect( aClipBox, aDC, - rect->GetStart().x, rect->GetStart().y, - rect->GetEnd().x, rect->GetEnd().y, - rect->GetPenWidth(), rect->GetColor() ); - } - break; - - case WS_DRAW_ITEM_BASE::wsg_text: - { - WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item; - DrawGraphicText( aClipBox, aDC, text->GetTextPosition(), - text->GetColor(), text->GetText(), - text->GetOrientation(), text->GetSize(), - text->GetHorizJustify(), text->GetVertJustify(), - text->GetPenWidth(), text->IsItalic(), text->IsBold() ); - } - break; - - case WS_DRAW_ITEM_BASE::wsg_poly: - { - WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item; - GRPoly( aClipBox, aDC, - poly->m_Corners.size(), &poly->m_Corners[0], - poly->IsFilled() ? FILLED_SHAPE : NO_FILL, - poly->GetPenWidth(), - poly->GetColor(), poly->GetColor() ); - } - break; - } - } -} - void DrawPageLayout( wxDC* aDC, EDA_RECT* aClipBox, const PAGE_INFO& aPageInfo, const wxString &aFullSheetName, @@ -112,19 +58,14 @@ void DrawPageLayout( wxDC* aDC, EDA_RECT* aClipBox, GRSetDrawMode( aDC, GR_COPY ); WS_DRAW_ITEM_LIST drawList; - wxPoint LTmargin( aPageInfo.GetLeftMarginMils(), aPageInfo.GetTopMarginMils() ); - wxPoint RBmargin( aPageInfo.GetRightMarginMils(), aPageInfo.GetBottomMarginMils() ); - wxSize pagesize = aPageInfo.GetSizeMils(); - - drawList.SetMargins( LTmargin, RBmargin ); drawList.SetPenSize( aPenWidth ); drawList.SetMilsToIUfactor( aScalar ); - drawList.SetPageSize( pagesize ); drawList.SetSheetNumber( aSheetNumber ); drawList.SetSheetCount( aSheetCount ); + drawList.SetFileName( aFileName ); + drawList.SetSheetName( aFullSheetName ); - drawList.BuildWorkSheetGraphicList( - aPageInfo.GetType(), aFullSheetName, aFileName, + drawList.BuildWorkSheetGraphicList( aPageInfo, aTitleBlock, aColor, aAltColor ); // Draw item list @@ -154,7 +95,7 @@ void EDA_DRAW_FRAME::DrawWorkSheet( wxDC* aDC, BASE_SCREEN* aScreen, int aLineWi EDA_COLOR_T color = RED; DrawPageLayout( aDC, m_canvas->GetClipBox(), pageInfo, - aFilename, GetScreenDesc(), t_block, + GetScreenDesc(), aFilename, t_block, aScreen->m_NumberOfScreens, aScreen->m_ScreenNumber, aLineWidth, aScalar, color, color ); } @@ -162,7 +103,7 @@ void EDA_DRAW_FRAME::DrawWorkSheet( wxDC* aDC, BASE_SCREEN* aScreen, int aLineWi wxString EDA_DRAW_FRAME::GetScreenDesc() { - // Virtual function, in basic function, returns + // Virtual function. In basic class, returns // an empty string. return wxEmptyString; } diff --git a/eeschema/class_libentry.cpp b/eeschema/class_libentry.cpp index 3c06d62237..7a463a99c2 100644 --- a/eeschema/class_libentry.cpp +++ b/eeschema/class_libentry.cpp @@ -1710,3 +1710,25 @@ void LIB_COMPONENT::AddAlias( const wxString& aName ) m_aliases.push_back( new LIB_ALIAS( aName, this ) ); } + + +/** Set the separator char between the subpart id and the reference + * 0 (no separator) or '.' , '-' and '_' + * and the ascii char value to calculate the subpart symbol id from the part number: + * 'A' or '1' only are allowed. (to print U1.A or U1.1) + * if this is a digit, a number is used as id symbol + * Note also if the subpart symbol is a digit, the separator cannot be null. + * @param aSep = the separator symbol (0 (no separator) or '.' , '-' and '_') + * @param aFirstId = the Id of the first part ('A' or '1') + */ +void LIB_COMPONENT::SetSubpartIdNotation( int aSep, int aFirstId ) +{ + m_subpartFirstId = 'A'; + m_subpartIdSeparator = 0; + + if( aSep == '.' || aSep == '-' || aSep == '_' ) + m_subpartIdSeparator = aSep; + + if( aFirstId == '1' && aSep != 0 ) + m_subpartFirstId = aFirstId; +} diff --git a/eeschema/class_libentry.h b/eeschema/class_libentry.h index fa80cbe3e5..f5856758bd 100644 --- a/eeschema/class_libentry.h +++ b/eeschema/class_libentry.h @@ -206,13 +206,14 @@ class LIB_COMPONENT : public EDA_ITEM LIB_ALIASES m_aliases; ///< List of alias object pointers associated with the ///< component. CMP_LIBRARY* m_library; ///< Library the component belongs to if any. - static int m_subpartIdSeparator; ///< the separator char between + + static int m_subpartIdSeparator; ///< the separator char between ///< the subpart id and the reference ///< like U1A ( m_subpartIdSeparator = 0 ) or U1.A or U1-A - static int m_subpartFirstId; ///< the ascii char value to calculate the subpart symbol id + static int m_subpartFirstId; ///< the ascii char value to calculate the subpart symbol id ///< from the part number: only 'A', 'a' or '1' can be used, ///< other values have no sense. - +private: void deleteAllFields(); public: @@ -659,9 +660,28 @@ public: // Accessors to sub ref parameters static int GetSubpartIdSeparator() { return m_subpartIdSeparator; } - static void SetSubpartIdSeparator( int aSep ) { m_subpartIdSeparator = aSep; } + + /** return a reference to m_subpartIdSeparator, + * only for read/save setting functions + */ + static int* SubpartIdSeparatorPtr() { return &m_subpartIdSeparator; } + static int GetSubpartFirstId() { return m_subpartFirstId; } - static void SetSubpartFirstId( int aFirstId ) { m_subpartFirstId = aFirstId; } + + /** return a reference to m_subpartFirstId, only for read/save setting functions + */ + static int* SubpartFirstIdPtr() { return &m_subpartFirstId; } + + /** Set the separator char between the subpart id and the reference + * 0 (no separator) or '.' , '-' and '_' + * and the ascii char value to calculate the subpart symbol id from the part number: + * 'A' or '1' only are allowed. (to print U1.A or U1.1) + * if this is a digit, a number is used as id symbol + * Note also if the subpart symbol is a digit, the separator cannot be null. + * @param aSep = the separator symbol (0 (no separator) or '.' , '-' and '_') + * @param aFirstId = the Id of the first part ('A' or '1') + */ + static void SetSubpartIdNotation( int aSep, int aFirstId ); /** * Set or clear the alternate body style (DeMorgan) for the component. diff --git a/eeschema/dialogs/dialog_eeschema_config.cpp b/eeschema/dialogs/dialog_eeschema_config.cpp index 8eab18062d..b3f9284067 100644 --- a/eeschema/dialogs/dialog_eeschema_config.cpp +++ b/eeschema/dialogs/dialog_eeschema_config.cpp @@ -33,7 +33,6 @@ #include #include -//#include #include #include #include @@ -221,7 +220,8 @@ void DIALOG_EESCHEMA_CONFIG::OnOkClick( wxCommandEvent& event ) LIB_EDIT_FRAME::EnsureActiveLibExists(); } - m_Parent->SaveProjectFile(); + m_Parent->SaveProjectSettings( false ); + EndModal( wxID_OK ); } diff --git a/eeschema/dialogs/dialog_eeschema_options.cpp b/eeschema/dialogs/dialog_eeschema_options.cpp index 8225e4a187..14424143c6 100644 --- a/eeschema/dialogs/dialog_eeschema_options.cpp +++ b/eeschema/dialogs/dialog_eeschema_options.cpp @@ -51,15 +51,56 @@ void DIALOG_EESCHEMA_OPTIONS::SetUnits( const wxArrayString& units, int select ) void DIALOG_EESCHEMA_OPTIONS::SetRefIdSeparator( wxChar aSep, wxChar aFirstId) { - if( aSep == 0 ) - m_textCtrlSeparatorRefId->SetValue( _("None") ); - else - m_textCtrlSeparatorRefId->SetValue( aSep ); + // m_choiceSeparatorRefId displays one of + // "A" ".A" "-A" "_A" ".1" "-1" "_1" option - m_textCtrlPartFirstId->SetValue( aFirstId ); + int sel = 0; + switch( aSep ) + { + default: + case 0: + aFirstId = 'A'; // cannot use a number without separator + break; + case '.': + sel = 1; + break; + + case '-': + sel = 2; + break; + + case '_': + sel = 3; + break; + } + + if( aFirstId == '1' ) + sel = 4; + + m_choiceSeparatorRefId->SetSelection( sel ); } +void DIALOG_EESCHEMA_OPTIONS::GetRefIdSeparator( int& aSep, int& aFirstId) +{ + // m_choiceSeparatorRefId displays one of + // "A" ".A" "-A" "_A" ".1" "-1" "_1" option + + aFirstId = 'A'; + switch( m_choiceSeparatorRefId->GetSelection() ) + { + default: + case 0: aSep = 0; break; + case 1: aSep = '.'; break; + case 2: aSep = '-'; break; + case 3: aSep = '_'; break; + case 4: aFirstId = '1'; aSep = '.'; break; + case 5: aFirstId = '1'; aSep = '-'; break; + case 6: aFirstId = '1'; aSep = '_'; break; + } +} + + void DIALOG_EESCHEMA_OPTIONS::SetGridSizes( const GRIDS& grid_sizes, int grid_id ) { wxASSERT( grid_sizes.size() > 0 ); diff --git a/eeschema/dialogs/dialog_eeschema_options.h b/eeschema/dialogs/dialog_eeschema_options.h index 36976311e9..01ce909728 100644 --- a/eeschema/dialogs/dialog_eeschema_options.h +++ b/eeschema/dialogs/dialog_eeschema_options.h @@ -76,6 +76,7 @@ public: int GetAutoSaveInterval() const { return m_spinAutoSaveInterval->GetValue(); } void SetRefIdSeparator( wxChar aSep, wxChar aFirstId); + void GetRefIdSeparator( int& aSep, int& aFirstId); void SetShowGrid( bool show ) { m_checkShowGrid->SetValue( show ); } bool GetShowGrid( void ) { return m_checkShowGrid->GetValue(); } diff --git a/eeschema/dialogs/dialog_eeschema_options_base.cpp b/eeschema/dialogs/dialog_eeschema_options_base.cpp index 51187eb040..a6c77a8815 100644 --- a/eeschema/dialogs/dialog_eeschema_options_base.cpp +++ b/eeschema/dialogs/dialog_eeschema_options_base.cpp @@ -35,7 +35,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx bSizer3 = new wxBoxSizer( wxVERTICAL ); wxFlexGridSizer* fgSizer1; - fgSizer1 = new wxFlexGridSizer( 11, 3, 0, 0 ); + fgSizer1 = new wxFlexGridSizer( 10, 3, 0, 0 ); fgSizer1->AddGrowableCol( 0 ); fgSizer1->AddGrowableCol( 1 ); fgSizer1->AddGrowableCol( 2 ); @@ -143,22 +143,15 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx m_staticText23->Wrap( -1 ); fgSizer1->Add( m_staticText23, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 ); - m_staticText26 = new wxStaticText( m_panel1, wxID_ANY, _("Separator ref/part id:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText26 = new wxStaticText( m_panel1, wxID_ANY, _("part id notation:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText26->Wrap( -1 ); fgSizer1->Add( m_staticText26, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_textCtrlSeparatorRefId = new wxTextCtrl( m_panel1, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - fgSizer1->Add( m_textCtrlSeparatorRefId, 0, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 3 ); - - - fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticText27 = new wxStaticText( m_panel1, wxID_ANY, _("Part first Id:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText27->Wrap( -1 ); - fgSizer1->Add( m_staticText27, 0, wxALL, 5 ); - - m_textCtrlPartFirstId = new wxTextCtrl( m_panel1, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - fgSizer1->Add( m_textCtrlPartFirstId, 0, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 3 ); + wxString m_choiceSeparatorRefIdChoices[] = { _("A"), _(".A"), _("-A"), _("_A"), _(".1"), _("-1"), _("_1") }; + int m_choiceSeparatorRefIdNChoices = sizeof( m_choiceSeparatorRefIdChoices ) / sizeof( wxString ); + m_choiceSeparatorRefId = new wxChoice( m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceSeparatorRefIdNChoices, m_choiceSeparatorRefIdChoices, 0 ); + m_choiceSeparatorRefId->SetSelection( 0 ); + fgSizer1->Add( m_choiceSeparatorRefId, 0, wxALL|wxEXPAND, 5 ); fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); diff --git a/eeschema/dialogs/dialog_eeschema_options_base.fbp b/eeschema/dialogs/dialog_eeschema_options_base.fbp index db5e0c203f..9f7a601efb 100644 --- a/eeschema/dialogs/dialog_eeschema_options_base.fbp +++ b/eeschema/dialogs/dialog_eeschema_options_base.fbp @@ -42,7 +42,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE - 432,560 + 508,560 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER DIALOG_SHIM; dialog_shim.h Schematic Editor Options @@ -288,7 +288,7 @@ fgSizer1 wxFLEX_GROWMODE_SPECIFIED none - 11 + 10 0 3 @@ -2455,7 +2455,7 @@ 0 0 wxID_ANY - Separator reference/part id: + part id notation: 0 @@ -2507,10 +2507,10 @@ - 3 - wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL + 5 + wxALL|wxEXPAND 0 - + 1 1 1 @@ -2524,6 +2524,7 @@ 1 0 + "A" ".A" "-A" "_A" ".1" "-1" "_1" 1 1 @@ -2541,113 +2542,11 @@ 0 - 0 1 - m_textCtrlSeparatorRefId - 1 - - - protected - 1 - - Resizable - 1 - - wxTE_READONLY - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Part first Id: - - 0 - - - 0 - - 1 - m_staticText27 + m_choiceSeparatorRefId 1 @@ -2655,104 +2554,22 @@ 1 Resizable + 0 1 0 - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 - wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - - 0 - - 1 - m_textCtrlPartFirstId - 1 - - - protected - 1 - - Resizable - 1 - - wxTE_READONLY - - 0 - wxFILTER_NONE wxDefaultValidator - + @@ -2774,10 +2591,6 @@ - - - - diff --git a/eeschema/dialogs/dialog_eeschema_options_base.h b/eeschema/dialogs/dialog_eeschema_options_base.h index af1db4df8d..0b0581e117 100644 --- a/eeschema/dialogs/dialog_eeschema_options_base.h +++ b/eeschema/dialogs/dialog_eeschema_options_base.h @@ -22,7 +22,6 @@ class DIALOG_SHIM; #include #include #include -#include #include #include #include @@ -30,6 +29,7 @@ class DIALOG_SHIM; #include #include #include +#include #include #include #include @@ -84,9 +84,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM wxSpinCtrl* m_spinAutoSaveInterval; wxStaticText* m_staticText23; wxStaticText* m_staticText26; - wxTextCtrl* m_textCtrlSeparatorRefId; - wxStaticText* m_staticText27; - wxTextCtrl* m_textCtrlPartFirstId; + wxChoice* m_choiceSeparatorRefId; wxStaticLine* m_staticline1; wxCheckBox* m_checkShowGrid; wxCheckBox* m_checkShowHiddenPins; @@ -125,7 +123,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM public: - DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 432,560 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 508,560 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_EESCHEMA_OPTIONS_BASE(); }; diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp index 0ba7209ce9..3fbb373363 100644 --- a/eeschema/eeschema.cpp +++ b/eeschema/eeschema.cpp @@ -123,21 +123,6 @@ bool EDA_APP::OnInit() for( int ii = 0; ii < NB_SCH_LAYERS; ii++ ) SetLayerColor( DARKGRAY, ii ); -#ifdef KICAD_GOST - // These options will be user configurable in the future, - // and not specific to GOST users - // the separator char between the subpart id and the reference - // 0 (no separator) or '.' or some other character - LIB_COMPONENT::SetSubpartIdSeparator( '.' ); - // the ascii char value to calculate the subpart symbol id from the part number: - // 'A' or '1' usually. (to print U1.A or U1.1) - // if this is a digit, a number is used as id symbol - LIB_COMPONENT::SetSubpartFirstId( '1' ); - - // Default diameter of the junction symbol - SCH_JUNCTION::SetSymbolSize( 32 ); -#endif - // read current setup and reopen last directory if no filename to open in // command line bool reopenLastUsedDirectory = argc == 1; diff --git a/eeschema/eeschema_config.cpp b/eeschema/eeschema_config.cpp index 3d0e730419..832a2b274f 100644 --- a/eeschema/eeschema_config.cpp +++ b/eeschema/eeschema_config.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include @@ -139,7 +140,7 @@ void LIB_EDIT_FRAME::Process_Config( wxCommandEvent& event ) switch( id ) { case ID_CONFIG_SAVE: - schFrame->SaveProjectFile(); + schFrame->SaveProjectSettings( false ); break; case ID_CONFIG_READ: @@ -207,7 +208,7 @@ void SCH_EDIT_FRAME::Process_Config( wxCommandEvent& event ) switch( id ) { case ID_CONFIG_SAVE: - SaveProjectFile(); + SaveProjectSettings( false ); break; case ID_CONFIG_READ: @@ -303,6 +304,15 @@ void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) GetScreen()->SetGrid( grid_list[ (size_t) dlg.GetGridSelection() ].m_Size ); + int sep, firstId; + dlg.GetRefIdSeparator( sep, firstId); + if( sep != (int)LIB_COMPONENT::GetSubpartIdSeparator() || + firstId != (int)LIB_COMPONENT::GetSubpartFirstId() ) + { + LIB_COMPONENT::SetSubpartIdNotation( sep, firstId ); + SaveProjectSettings( true ); + } + SetDefaultBusThickness( dlg.GetBusWidth() ); SetDefaultLineThickness( dlg.GetLineWidth() ); SetDefaultLabelSize( dlg.GetTextSize() ); @@ -344,11 +354,21 @@ void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) } -PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetProjectFileParameters() +PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetProjectFileParametersList() { if( !m_projectFileParams.empty() ) return m_projectFileParams; + m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ), + &BASE_SCREEN::m_PageLayoutDescrFileName ) ); + + m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "SubpartIdSeparator" ), + LIB_COMPONENT::SubpartIdSeparatorPtr(), + IsGOST() ? '.' : 0, 0, 126 ) ); + m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "SubpartFirstId" ), + LIB_COMPONENT::SubpartFirstIdPtr(), + IsGOST() ? '1' : 'A', '1', 'z' ) ); + m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ), &m_userLibraryPath ) ); m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ), @@ -395,13 +415,25 @@ bool SCH_EDIT_FRAME::LoadProjectFile( const wxString& aFileName, bool aForceRere wxGetApp().RemoveLibraryPath( m_userLibraryPath ); if( !wxGetApp().ReadProjectConfig( fn.GetFullPath(), GROUP, - GetProjectFileParameters(), + GetProjectFileParametersList(), !aForceReread ) ) { m_componentLibFiles = liblist_tmp; IsRead = false; } + // Verify some values, because the config file can be edited by hand, + // and have bad values: + LIB_COMPONENT::SetSubpartIdNotation( LIB_COMPONENT::GetSubpartIdSeparator(), + LIB_COMPONENT::GetSubpartFirstId() ); + + // Load the page layout decr file, from the filename stored in + // BASE_SCREEN::m_PageLayoutDescrFileName, read in config project file + // If empty, the default descr is loaded + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + pglayout.SetPageLayout(BASE_SCREEN::m_PageLayoutDescrFileName); + + // Load libraries. // User library path takes precedent over default library search paths. wxGetApp().InsertLibraryPath( m_userLibraryPath, 1 ); @@ -418,7 +450,7 @@ bool SCH_EDIT_FRAME::LoadProjectFile( const wxString& aFileName, bool aForceRere } -void SCH_EDIT_FRAME::SaveProjectFile() +void SCH_EDIT_FRAME::SaveProjectSettings( bool aAskForSave ) { wxFileName fn; @@ -428,7 +460,21 @@ void SCH_EDIT_FRAME::SaveProjectFile() if( !IsWritable( fn ) ) return; - wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters() ); + if( aAskForSave ) + { + wxFileDialog dlg( this, _( "Save Project File" ), + fn.GetPath(), fn.GetFullName(), + ProjectFileWildcard, wxFD_SAVE | wxFD_CHANGE_DIR ); + + if( dlg.ShowModal() == wxID_CANCEL ) + return; + + wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, + GetProjectFileParametersList() ); + } + else + wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, + GetProjectFileParametersList() ); } static const wxString DefaultBusWidthEntry( wxT( "DefaultBusWidth" ) ); diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index 84326ea9e9..1ee074e744 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -100,8 +100,7 @@ static GRID_TYPE SchematicGridList[] = { #define SCHEMATIC_GRID_LIST_CNT ( sizeof( SchematicGridList ) / sizeof( GRID_TYPE ) ) -SCH_SCREEN::SCH_SCREEN() : - BASE_SCREEN( SCH_SCREEN_T ), +SCH_SCREEN::SCH_SCREEN() : BASE_SCREEN( SCH_SCREEN_T ), m_paper( wxT( "A4" ), IsGOST() ) { size_t i; diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 45ed6a8d91..653709f516 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -830,7 +830,7 @@ void SCH_EDIT_FRAME::OnPrint( wxCommandEvent& event ) if( fn.GetFullName() != default_name ) { fn.SetExt( ProjectFileExtension ); - wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters() ); + wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParametersList() ); } } diff --git a/include/base_units.h b/include/base_units.h index 30c20ab6be..d37070b608 100644 --- a/include/base_units.h +++ b/include/base_units.h @@ -37,6 +37,16 @@ #include #include +/** Helper function Double2Str to print a float number without + * using scientific notation and no trailing 0 + * We want to avoid scientific notation in S-expr files (not easy to read) + * for floating numbers. + * So we cannot always just use the %g or the %f format to print a fp number + * this helper function uses the %f format when needed, or %g when %f is + * not well working and then removes trailing 0 + */ +std::string Double2Str( double aValue ); + /** * Function StripTrailingZeros * Remove trailing 0 from a string containing a converted float number. diff --git a/include/bitmaps.h b/include/bitmaps.h index f841f87417..b040a4cf14 100644 --- a/include/bitmaps.h +++ b/include/bitmaps.h @@ -74,7 +74,6 @@ EXTERN_BITMAP( add_text_xpm ) EXTERN_BITMAP( add_tracks_xpm ) EXTERN_BITMAP( add_zone_cutout_xpm ) EXTERN_BITMAP( add_zone_xpm ) -EXTERN_BITMAP( icon_pcbnew_xpm ) EXTERN_BITMAP( anchor_xpm ) EXTERN_BITMAP( annotate_down_right_xpm ) EXTERN_BITMAP( annotate_right_down_xpm ) @@ -209,10 +208,12 @@ EXTERN_BITMAP( icon_gerbview_small_xpm ) EXTERN_BITMAP( icon_gerbview_xpm ) EXTERN_BITMAP( icon_kicad_xpm ) EXTERN_BITMAP( icon_modedit_xpm ) +EXTERN_BITMAP( icon_pcbnew_xpm ) EXTERN_BITMAP( icon_txt_xpm ) EXTERN_BITMAP( icon_3d_xpm ) EXTERN_BITMAP( icon_bitmap2component_xpm ) EXTERN_BITMAP( icon_pcbcalculator_xpm ) +EXTERN_BITMAP( icon_pagelayout_editor_xpm ) EXTERN_BITMAP( image_xpm ) EXTERN_BITMAP( import_cmp_from_lib_xpm ) EXTERN_BITMAP( import_footprint_names_xpm ) @@ -354,6 +355,12 @@ EXTERN_BITMAP( pad_sketch_xpm ) EXTERN_BITMAP( pad_xpm ) EXTERN_BITMAP( pad_dimensions_xpm ) EXTERN_BITMAP( pads_mask_layers_xpm ) +EXTERN_BITMAP( pagelayout_load_xpm ) +EXTERN_BITMAP( pagelayout_load_default_xpm ) +EXTERN_BITMAP( pagelayout_new_xpm ) +EXTERN_BITMAP( pagelayout_recent_xpm ) +EXTERN_BITMAP( pagelayout_normal_view_mode_xpm ) +EXTERN_BITMAP( pagelayout_special_view_mode_xpm ) EXTERN_BITMAP( palette_xpm ) EXTERN_BITMAP( part_properties_xpm ) EXTERN_BITMAP( paste_xpm ) diff --git a/include/class_base_screen.h b/include/class_base_screen.h index e7d665d808..4da7754539 100644 --- a/include/class_base_screen.h +++ b/include/class_base_screen.h @@ -95,10 +95,12 @@ private: public: + static wxString m_PageLayoutDescrFileName; ///< the name of the page layout descr file, + ///< or emty to used the default pagelayout wxPoint m_DrawOrg; ///< offsets for drawing the circuit on the screen - wxPoint m_O_Curseur; /* Relative Screen cursor coordinate (on grid) - * in user units. (coordinates from last reset position)*/ + wxPoint m_O_Curseur; ///< Relative Screen cursor coordinate (on grid) + ///< in user units. (coordinates from last reset position) // Scrollbars management: int m_ScrollPixelsPerUnitX; ///< Pixels per scroll unit in the horizontal direction. diff --git a/include/class_worksheet_dataitem.h b/include/class_worksheet_dataitem.h new file mode 100644 index 0000000000..1ecc0ecd7a --- /dev/null +++ b/include/class_worksheet_dataitem.h @@ -0,0 +1,441 @@ +/** + * @file class_worksheet_data_item.h + * @brief description of graphic items and texts to build a title block + */ + +#ifndef CLASS_WORKSHEET_DATA_ITEM_H +#define CLASS_WORKSHEET_DATA_ITEM_H + +#include +#include + +class WS_DRAW_ITEM_TEXT; // Forward declaration + +#define TB_DEFAULT_TEXTSIZE 1.5 // default worksheet text size in mm + +// Text attributes set in m_flags (ORed bits) +#define USE_BOLD 1 // has meaning for texts +#define USE_THICK_LINE 1 // equivalent to bold for lines +#define USE_ITALIC (1<<1) // has meaning for texts +#define USE_ALT_COLOR (1<<2) +#define SELECTED_STATE (1<<3) // When set, use the hight light color to draw item +#define LOCATE_STARTPOINT (1<<4) // Used in locate function:set by locate function + // if the start point is located +#define LOCATE_ENDPOINT (1<<5) // Used in locate function:set by locate function + // if the end point is located +#define PAGE1OPTION (3<<6) // flag to manage items drawn or not drawn only + // on page 1: NONE = item on all pages +#define PAGE1OPTION_NONE (0<<6) // NONE = item on all pages +#define PAGE1OPTION_PAGE1ONLY (1<<6) // = item only on page 1 +#define PAGE1OPTION_NOTONPAGE1 (2<<6) // = item on all pages but page 1 + +// A coordinate is relative to a page corner. +// Any of the 4 corners can be a reference. +// The default is the right bottom corner +enum corner_anchor +{ + RB_CORNER, // right bottom corner + RT_CORNER, // right top corner + LB_CORNER, // left bottom corner + LT_CORNER, // left top corner +}; + +// a coordinate point +// The position is always relative to the corner anchor +// Note the coordinate is from the anchor point +// to the opposite corner. +class POINT_COORD +{ +public: + DPOINT m_Pos; + int m_Anchor; +public: + POINT_COORD() { m_Anchor = RB_CORNER; } + POINT_COORD( DPOINT aPos, enum corner_anchor aAnchor = RB_CORNER ) + { + m_Pos = aPos; + m_Anchor = aAnchor; + } +}; + + +// Work sheet structure type definitions. +// Basic items are: +// * segment and rect (defined by 2 points) +// * text (defined by a coordinate), the text and its justifications +// * poly polygon defined by a coordinate, and a set of list of corners +// ( because we use it for logos, there are more than one polygon +// in this description +class WORKSHEET_DATAITEM +{ +public: + enum WS_ItemType { + WS_TEXT, + WS_SEGMENT, + WS_RECT, + WS_POLYPOLYGON + }; + +protected: + WS_ItemType m_type; + int m_flags; + +public: + wxString m_Name; // a item name used in page layout + // editor to identify items + wxString m_Info; // a comment, only useful in page + // layout editor + POINT_COORD m_Pos; + POINT_COORD m_End; + double m_LineWidth; + int m_RepeatCount; // repeat count for duplicate items + DPOINT m_IncrementVector; // For duplicate items: move vector + // for position increment + int m_IncrementLabel; + + // These variables are static, because these values are common to all + // instances of WORKSHEET_DATAITEM. + // They are default or common values. + static double m_WSunits2Iu; // conversion factor between + // ws units (mils) and draw/plot units + static DPOINT m_RB_Corner; // cordinates of the right bottom corner + // (ws units) + static DPOINT m_LT_Corner; // cordinates of the left top corner + // (ws units) + static double m_DefaultLineWidth; // Default line width, + // when not defined inside a line + // or a rect + static DSIZE m_DefaultTextSize; // Default text size, + // when not defined inside a tbtext + static double m_DefaultTextThickness;// Default text thickness, + // when not defined inside a tbtext + static bool m_SpecialMode; // Used in page layout editor + // When set to true, base texts + // instead of full texts are displayed + static EDA_COLOR_T m_Color; // the default color to draw items + static EDA_COLOR_T m_AltColor; // an alternate color to draw items + static EDA_COLOR_T m_SelectedColor; // the color to draw selected items + // (used in page layout editor + + +public: + WORKSHEET_DATAITEM( WS_ItemType aType ); + + virtual ~WORKSHEET_DATAITEM() {} + + void SetStart( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER ) + { + m_Pos.m_Pos.x = aPosx; + m_Pos.m_Pos.y = aPosy; + m_Pos.m_Anchor = aAnchor; + } + + void SetEnd( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER ) + { + m_End.m_Pos.x = aPosx; + m_End.m_Pos.y = aPosy; + m_End.m_Anchor = aAnchor; + } + + // Accessors: + WS_ItemType GetType() const { return m_type; } + int GetFlags() const { return m_flags; } + void SetFlags( int aMask ) { m_flags |= aMask; } + void ClearFlags( int aMask ) { m_flags &= ~aMask; } + + /** + * @return 0 if the item has no specific option for page 1 + * 1 if the item is only on page 1 + * -1 if the item is not on page 1 + */ + int GetPage1Option(); + + /** + * Set the option for page 1 + * @param aChoice = 0 if the item has no specific option for page 1 + * > 0 if the item is only on page 1 + * < 0 if the item is not on page 1 + */ + void SetPage1Option( int aChoice ); + + // Coordinate handling + const wxPoint GetStartPosUi( int ii = 0 ) const; + const wxPoint GetEndPosUi( int ii = 0 ) const; + const DPOINT GetStartPos( int ii = 0 ) const; + const DPOINT GetEndPos( int ii = 0 ) const; + virtual int GetPenSizeUi() + { + if( m_LineWidth ) + return KiROUND( m_LineWidth * m_WSunits2Iu ); + else + return KiROUND( m_DefaultLineWidth * m_WSunits2Iu ); + } + + static int GetMarkerSizeUi() + { + return KiROUND( 0.5 * m_WSunits2Iu ); + } + + /** + * move item to a new position + * @param aPosition = the new position of item, in mm + */ + void MoveTo( DPOINT aPosition ); + + /** + * move item to a new position + * @param aPosition = the new position of the starting point in graphic units + */ + void MoveToUi( wxPoint aPosition ); + + /** + * move the starting point of the item to a new position + * @param aPosition = the new position of the starting point, in mm + */ + void MoveStartPointTo( DPOINT aPosition ); + + /** + * move the starting point of the item to a new position + * @param aPosition = the new position of item in graphic units + */ + void MoveStartPointToUi( wxPoint aPosition ); + + + /** + * move the ending point of the item to a new position + * has meaning only for items defined by 2 points + * (segments and rectangles) + * @param aPosition = the new position of the ending point, in mm + */ + void MoveEndPointTo( DPOINT aPosition ); + + /** + * move the ending point of the item to a new position + * has meaning only for items defined by 2 points + * (segments and rectangles) + * @param aPosition = the new position of the ending point in graphic units + */ + void MoveEndPointToUi( wxPoint aPosition ); + + /** + * @return true if the item is inside the rectangle defined by the + * 4 corners, false otherwise. + */ + virtual bool IsInsidePage( int ii ) const; + + const wxString GetClassName() const; + + /** + * @return true if the selected state on ON + */ + bool IsSelected() { return (m_flags & SELECTED_STATE) != 0; } + + /** + * Function SetSelected + * Toggles on/off the selected flag (used in edition functions + * @param aState = the flag value + */ + void SetSelected( bool aState ) + { + if( aState ) + m_flags |= SELECTED_STATE; + else + m_flags &= ~SELECTED_STATE; + } + + bool UseAltColor() {return m_flags & USE_ALT_COLOR; } + + EDA_COLOR_T GetItemColor() + { + if( IsSelected() ) + return m_SelectedColor; + + if( UseAltColor() ) + return m_AltColor; + + return m_Color; + } +}; + +class WORKSHEET_DATAITEM_POLYPOLYGON : public WORKSHEET_DATAITEM +{ +public: + double m_Orient; // Orientation in degrees + std::vector m_Corners; // corner list + +private: + std::vector m_polyIndexEnd; // index of the last point of each polygon + DPOINT m_minCoord; // min coord of corners, relative to m_Pos + DPOINT m_maxCoord; // max coord of corners, relative to m_Pos + +public: + WORKSHEET_DATAITEM_POLYPOLYGON( ); + + virtual int GetPenSizeUi() + { + return KiROUND( m_LineWidth * m_WSunits2Iu ); + } + + /** + * add a corner in corner list + * @param aCorner: the item to append + */ + void AppendCorner( const DPOINT& aCorner ) + { + m_Corners.push_back( aCorner ); + } + + /** + * Closes the current contour, by storing the index of the last corner + * of the current polygon in m_polyIndexEnd. + */ + void CloseContour() + { + m_polyIndexEnd.push_back( m_Corners.size() -1 ); + } + + /** + * @return the count of contours in the poly polygon + */ + int GetPolyCount() const { return (int) m_polyIndexEnd.size(); } + + /** + * @return the index of the first corner of the contour aCountour + * @param aContour = the index of the contour + */ + unsigned GetPolyIndexStart( unsigned aContour) const + { + if( aContour == 0 ) + return 0; + else + return m_polyIndexEnd[aContour-1] + 1; + } + + /** + * @return the index of the last corner of the contour aCountour + * @param aContour = the index of the contour + */ + unsigned GetPolyIndexEnd( unsigned aContour) const + { + return m_polyIndexEnd[aContour]; + } + + /** + * @return the coordinate (in mm) of the corner aIdx, + * for the repeated item aRepeat + */ + const DPOINT GetCornerPosition( unsigned aIdx, int aRepeat = 0 ) const; + + /** + * @return the coordinate (in draw/plot units) of the corner aIdx, + * for the repeated item aRepeat + */ + const wxPoint GetCornerPositionUi( unsigned aIdx, int aRepeat = 0 ) const; + + /** + * calculate the bounding box of the set polygons + */ + void SetBoundingBox(); + + bool IsInsidePage( int ii ) const; +}; + +class WORKSHEET_DATAITEM_TEXT : public WORKSHEET_DATAITEM +{ +public: + wxString m_TextBase; // The basic text, with format symbols + wxString m_FullText; // The expanded text, shown on screen + double m_Orient; // Orientation in degrees + enum EDA_TEXT_HJUSTIFY_T m_Hjustify; + enum EDA_TEXT_VJUSTIFY_T m_Vjustify; + DSIZE m_TextSize; + DSIZE m_BoundingBoxSize; // When not null, this is the max + // size of the full text. + // the text size will be modified + // to keep the full text insite this + // bound. + DSIZE m_ConstrainedTextSize;// Actual text size, if constrained by + // the m_BoundingBoxSize constraint + +public: + WORKSHEET_DATAITEM_TEXT( const wxChar* aTextBase ); + + virtual int GetPenSizeUi() + { + if( m_LineWidth ) + return KiROUND( m_LineWidth * m_WSunits2Iu ); + else + return KiROUND( m_DefaultTextThickness * m_WSunits2Iu ); + } + + /** + * move item to a new position + * @param aPosition = the new position of item + */ + void MoveTo( DPOINT aPosition ); + + /** + * transfert the text justification and orientation + * to aGText + */ + void TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText ); + + /** + * Try to build text wihich is an increment of m_TextBase + * has meaning only if m_TextBase is a basic text (one char) + * If the basic char is a digit, build a number + * If the basic char is a letter, use the letter with ascii code + * aIncr + (basic char ascc code) + * @param aIncr = the increment value + * return the incremented label in m_FullText + */ + void IncrementLabel( int aIncr ); + + /** + * Calculates m_ConstrainedTextSize from m_TextSize + * to keep the X size and the full Y size of the text + * smaller than m_BoundingBoxSize + * if m_BoundingBoxSize.x or m_BoundingBoxSize.y > 0 + * if m_BoundingBoxSize.x or m_BoundingBoxSize.y == 0 + * the corresponding text size is not constrained + */ + void SetConstrainedTextSize(); + + /** + * @return true is a bold font should be selected + */ + bool IsBold() { return (m_flags & USE_BOLD) != 0; } + + /** + * Function SetBold + * Toggles on/off the bold option flag + * @param aState = the bold option value + */ + void SetBold( bool aState ) + { + if( aState ) + m_flags |= USE_BOLD; + else + m_flags &= ~USE_BOLD; + } + + /** + * @return true is an italic font should be selected + */ + bool IsItalic() const { return (m_flags & USE_ITALIC) != 0; } + + /** + * Function SetItalic + * Toggles on/off the italic option flag + * @param aState = the italic option value + */ + void SetItalic( bool aState ) + { + if( aState ) + m_flags |= USE_ITALIC; + else + m_flags &= ~USE_ITALIC; + } +}; + +#endif // CLASS_WORKSHEET_DATA_ITEM_H diff --git a/include/common.h b/include/common.h index fe8f3d08cc..93cbbd56e0 100644 --- a/include/common.h +++ b/include/common.h @@ -83,6 +83,7 @@ enum pseudokeys { #define GERBVIEW_EXE wxT( "gerbview.exe" ) #define BITMAPCONVERTER_EXE wxT( "bitmap2component.exe" ) #define PCB_CALCULATOR_EXE wxT( "pcb_calculator.exe" ) +#define PL_EDITOR_EXE wxT( "pl_editor.exe" ) #else #ifndef __WXMAC__ #define CVPCB_EXE wxT( "cvpcb" ) @@ -91,6 +92,7 @@ enum pseudokeys { #define GERBVIEW_EXE wxT( "gerbview" ) #define BITMAPCONVERTER_EXE wxT( "bitmap2component" ) #define PCB_CALCULATOR_EXE wxT( "pcb_calculator" ) +#define PL_EDITOR_EXE wxT( "pl_editor" ) #else #define CVPCB_EXE wxT( "cvpcb.app/Contents/MacOS/cvpcb" ) #define PCBNEW_EXE wxT( "pcbnew.app/Contents/MacOS/pcbnew" ) @@ -98,6 +100,7 @@ enum pseudokeys { #define GERBVIEW_EXE wxT( "gerbview.app/Contents/MacOS/gerbview" ) #define BITMAPCONVERTER_EXE wxT( "bitmap2component.app/Contents/MacOS/bitmap2component" ) #define PCB_CALCULATOR_EXE wxT( "pcb_calculator.app/Contents/MacOS/pcb_calculator" ) +#define PL_EDITOR_EXE wxT( "pcb_calculator.app/Contents/MacOS/pl_editor" ) # endif #endif @@ -167,7 +170,14 @@ inline int Mils2mm( double x ) { return KiROUND( x * 25.4 / 1000. ); } /// Return whether GOST is in play -bool IsGOST(); +inline bool IsGOST() +{ +#if defined(KICAD_GOST) + return true; +#else + return false; +#endif +} enum EDA_UNITS_T { @@ -286,7 +296,7 @@ public: // Accessors returning "Internal Units (IU)". IUs are mils in EESCHEMA, // and either deci-mils or nanometers in PCBNew. -#if defined(PCBNEW) || defined(EESCHEMA) || defined(GERBVIEW) +#if defined(PCBNEW) || defined(EESCHEMA) || defined(GERBVIEW) || defined(PL_EDITOR) int GetWidthIU() const { return IU_PER_MILS * GetWidthMils(); } int GetHeightIU() const { return IU_PER_MILS * GetHeightMils(); } const wxSize GetSizeIU() const { return wxSize( GetWidthIU(), GetHeightIU() ); } diff --git a/include/convert_to_biu.h b/include/convert_to_biu.h index 2b67f4b239..5401930078 100644 --- a/include/convert_to_biu.h +++ b/include/convert_to_biu.h @@ -55,8 +55,25 @@ inline int DMils2iu( int dmils ) #endif } -#else // Eeschema and anything else. +#elif defined (PL_EDITOR) +#define IU_PER_MM 1e3 // internal units in micron (should be enough) +#define IU_PER_MILS (IU_PER_MM * 0.0254) +#define IU_PER_DECIMILS (IU_PER_MM * 0.00254) +/// Convert mils to page layout editor internal units (iu). +inline int Mils2iu( int mils ) +{ + double x = mils * IU_PER_MILS; + return int( x < 0 ? x - 0.5 : x + 0.5 ); +} +/// Convert deci-mils to page layout editor internal units (iu). +inline int DMils2iu( int dmils ) +{ + double x = dmils * IU_PER_DECIMILS; + return int( x < 0 ? x - 0.5 : x + 0.5 ); +} + +#else // Eeschema and anything else. #define IU_PER_DECIMILS 0.1 #define IU_PER_MILS 1.0 #define IU_PER_MM (IU_PER_MILS / 0.0254) diff --git a/include/wildcards_and_files_ext.h b/include/wildcards_and_files_ext.h index 39dc4f5165..ac882a1bf3 100644 --- a/include/wildcards_and_files_ext.h +++ b/include/wildcards_and_files_ext.h @@ -55,6 +55,7 @@ extern const wxString GerberFileExtension; extern const wxString LegacyPcbFileExtension; extern const wxString KiCadPcbFileExtension; #define PcbFileExtension KiCadPcbFileExtension // symlink choice +extern const wxString PageLayoutDescrFileExtension; extern const wxString LegacyFootprintLibPathExtension; extern const wxString PdfFileExtension; @@ -69,6 +70,7 @@ extern const wxString KiCadFootprintLibPathExtension; extern const wxString GedaPcbFootprintLibFileExtension; extern const wxString EagleFootprintLibPathExtension; extern const wxString ComponentFileExtensionWildcard; +extern const wxString PageLayoutDescrFileWildcard; /// Proper wxFileDialog wild card definitions. extern const wxString SchematicSymbolFileWildcard; diff --git a/include/worksheet_shape_builder.h b/include/worksheet_shape_builder.h index 8b9c8ea3f0..e10ee50acb 100644 --- a/include/worksheet_shape_builder.h +++ b/include/worksheet_shape_builder.h @@ -10,257 +10,11 @@ #include #include -class WS_DRAW_ITEM_TEXT; // Forward declaration +class WORKSHEET_DATAITEM; // Forward declaration +class TITLE_BLOCK; #define TB_DEFAULT_TEXTSIZE 1.5 // default worksheet text size in mm -// Text attributes set in m_Flags (ORed bits) - #define USE_BOLD 1 // has meaning for texts - #define USE_THICK_LINE 1 // equivalent to bold for lines - #define USE_ITALIC 2 // has meaning for texts - #define USE_TEXT_COLOR 4 - #define SET_UPPER_LIMIT 8 // Flag used to calculate variable position items - -// A coordinate is relative to a page corner. -// Any of the 4 corners can be a reference. -// The default is the right bottom corner -enum corner_anchor -{ - RB_CORNER, // right bottom corner - RT_CORNER, // right top corner - LB_CORNER, // left bottom corner - LT_CORNER, // left top corner -}; - -// a coordinate point -// The position is always relative to the corner anchor -// Note the coordinate is from the anchor point -// to the opposite corner. -class POINT_COORD -{ -public: - DPOINT m_Pos; - int m_Anchor; -public: - POINT_COORD() { m_Anchor = RB_CORNER; } - POINT_COORD( DPOINT aPos, enum corner_anchor aAnchor = RB_CORNER ) - { - m_Pos = aPos; - m_Anchor = aAnchor; - } -}; - - -// Work sheet structure type definitions. -// Basic items are: -// * segment and rect (defined by 2 points) -// * text (defined by a coordinate), the text and its justifications -// * poly polygon defined by a coordinate, and a set of list of corners -// ( because we use it for logos, there are more than one polygon -// in this description -class WORKSHEET_DATAITEM -{ -public: - enum WS_ItemType { - WS_TEXT, - WS_SEGMENT, - WS_RECT, - WS_POLYPOLYGON - }; - WS_ItemType m_Type; - POINT_COORD m_Pos; - POINT_COORD m_End; - double m_LineWidth; - int m_Flags; - int m_RepeatCount; // repeat count for duplicate items - DPOINT m_IncrementVector; // For duplicate items: move vector - // for position increment - int m_IncrementLabel; - - static double m_WSunits2Iu; // conversion factor between - // ws units (mils) and draw/plot units - static DPOINT m_RB_Corner; // cordinates of the right bottom corner - // (ws units) - static DPOINT m_LT_Corner; // cordinates of the left top corner - // (ws units) - -public: - WORKSHEET_DATAITEM( WS_ItemType aType ) - { - m_Type = aType; - m_Flags = 0; - m_RepeatCount = 1; - m_IncrementLabel = 0; - m_LineWidth = 0.0; - } - - virtual ~WORKSHEET_DATAITEM() {} - - void SetStart( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER ) - { - m_Pos.m_Pos.x = aPosx; - m_Pos.m_Pos.y = aPosy; - m_Pos.m_Anchor = aAnchor; - } - - void SetEnd( double aPosx, double aPosy, enum corner_anchor aAnchor = RB_CORNER ) - { - m_End.m_Pos.x = aPosx; - m_End.m_Pos.y = aPosy; - m_End.m_Anchor = aAnchor; - } - - const wxPoint GetStartPosUi( int ii = 0 ) const; - const wxPoint GetEndPosUi( int ii = 0 ) const; - const DPOINT GetStartPos( int ii = 0 ) const; - const DPOINT GetEndPos( int ii = 0 ) const; - int GetPenSizeUi() {return KiROUND( m_LineWidth * m_WSunits2Iu ); } - - /** - * @return true if the item is inside the rectangle defined by the - * 4 corners, false otherwise. - */ - virtual bool IsInsidePage( int ii ) const; -}; - -class WORKSHEET_DATAITEM_POLYPOLYGON : public WORKSHEET_DATAITEM -{ -public: - double m_Orient; // Orientation in degrees - std::vector m_Corners; // corner list - -private: - std::vector m_polyIndexEnd; // index of the last point of each polygon - DPOINT m_minCoord; // min coord of corners, relative to m_Pos - DPOINT m_maxCoord; // max coord of corners, relative to m_Pos - -public: - WORKSHEET_DATAITEM_POLYPOLYGON( ); - - /** - * add a corner in corner list - * @param aCorner: the item to append - */ - void AppendCorner( const DPOINT& aCorner ) - { - m_Corners.push_back( aCorner ); - } - - /** - * Closes the current contour, by storing the index of the last corner - * of the current polygon in m_polyIndexEnd. - */ - void CloseContour() - { - m_polyIndexEnd.push_back( m_Corners.size() -1 ); - } - - /** - * @return the count of contours in the poly polygon - */ - int GetPolyCount() const { return (int) m_polyIndexEnd.size(); } - - /** - * @return the index of the first corner of the contour aCountour - * @param aContour = the index of the contour - */ - unsigned GetPolyIndexStart( unsigned aContour) const - { - if( aContour == 0 ) - return 0; - else - return m_polyIndexEnd[aContour-1] + 1; - } - - /** - * @return the index of the last corner of the contour aCountour - * @param aContour = the index of the contour - */ - unsigned GetPolyIndexEnd( unsigned aContour) const - { - return m_polyIndexEnd[aContour]; - } - - /** - * @return the coordinate (in mm) of the corner aIdx, - * for the repeated item aRepeat - */ - const DPOINT GetCornerPosition( unsigned aIdx, int aRepeat = 0 ) const; - - /** - * @return the coordinate (in draw/plot units) of the corner aIdx, - * for the repeated item aRepeat - */ - const wxPoint GetCornerPositionUi( unsigned aIdx, int aRepeat = 0 ) const; - - /** - * calculate the bounding box of the set polygons - */ - void SetBoundingBox(); - - - bool IsInsidePage( int ii ) const; -}; - -class WORKSHEET_DATAITEM_TEXT : public WORKSHEET_DATAITEM -{ -public: - wxString m_TextBase; // The basic text, with format symbols - wxString m_FullText; // The expanded text, shown on screen - int m_IncrementLabel; - double m_Orient; // Orientation in degrees - enum EDA_TEXT_HJUSTIFY_T m_Hjustify; - enum EDA_TEXT_VJUSTIFY_T m_Vjustify; - DSIZE m_TextSize; - DSIZE m_BoundingBoxSize; // When not null, this is the max - // size of the full text. - // the text size will be modified - // to keep the full text insite this - // bound. - DSIZE m_ConstrainedTextSize;// Actual text size, if constrained by - // the m_BoundingBoxSize constraint - -public: - WORKSHEET_DATAITEM_TEXT( const wxChar* aTextBase ); - - /** - * transfert the text justification and orientation - * to aGText - */ - void TransfertSetupToGraphicText( WS_DRAW_ITEM_TEXT* aGText ); - - /** - * Try to build text wihich is an increment of m_TextBase - * has meaning only if m_TextBase is a basic text (one char) - * If the basic char is a digit, build a number - * If the basic char is a letter, use the letter with ascii code - * aIncr + (basic char ascc code) - * @param aIncr = the increment value - * return the incremented label in m_FullText - */ - void IncrementLabel( int aIncr ); - - /** - * Calculates m_ConstrainedTextSize from m_TextSize - * to keep the X size and the full Y size of the text - * smaller than m_BoundingBoxSize - * if m_BoundingBoxSize.x or m_BoundingBoxSize.y > 0 - * if m_BoundingBoxSize.x or m_BoundingBoxSize.y == 0 - * the corresponding text size is not constrained - */ - void SetConstrainedTextSize(); - - /** - * @return true is a bold font should be selected - */ - bool IsBold() { return (m_Flags & USE_BOLD) != 0; } - - /** - * @return true is an italic font should be selected - */ - bool IsItalic() { return (m_Flags & USE_ITALIC) != 0; } -}; - /* * Helper classes to handle basic graphic items used to raw/plot * title blocks and frame references @@ -275,16 +29,24 @@ public: enum WS_DRAW_TYPE { wsg_line, wsg_rect, wsg_poly, wsg_text }; + int m_Flags; // temporary flgs used in page layout editor + // to locate the item; protected: WS_DRAW_TYPE m_type; // wsg_line, wsg_rect, wsg_poly, wsg_text EDA_COLOR_T m_color; + WORKSHEET_DATAITEM* m_parent; // an unique identifier, used as link + // to the parent WORKSHEET_DATAITEM item, + // in page layout editor protected: - WS_DRAW_ITEM_BASE( WS_DRAW_TYPE aType, EDA_COLOR_T aColor ) + WS_DRAW_ITEM_BASE( WORKSHEET_DATAITEM* aParent, + WS_DRAW_TYPE aType, EDA_COLOR_T aColor ) { m_type = aType; m_color = aColor; + m_parent = aParent; + m_Flags = 0; } public: @@ -293,6 +55,35 @@ public: // Accessors: EDA_COLOR_T GetColor() { return m_color; } WS_DRAW_TYPE GetType() { return m_type; }; + + WORKSHEET_DATAITEM* GetParent() { return m_parent; } + + /** + * Abstract function: should exist for derived items + * return true if the point aPosition is on the item + */ + virtual bool HitTest( const wxPoint& aPosition) = 0; + + /** + * Abstract function: should exist for derived items + * return true if the point aPosition is near the starting point of this item, + * for items defined by 2 points (segments, rect) + * or the position of the item, for items having only one point + * (texts or polygons) + * the maxi dist is WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 + */ + virtual bool HitTestStartPoint( const wxPoint& aPosition) = 0; + + /** + * return true if the point aPosition is near the ending point of this item + * This is avirtual function which should be overriden for items defien by + * 2 points + * the maxi dist is WORKSHEET_DATAITEM::GetMarkerSizeUi()/2 + */ + virtual bool HitTestEndPoint( const wxPoint& aPosition) + { + return false; + } }; // This class draws a thick segment @@ -303,9 +94,10 @@ class WS_DRAW_ITEM_LINE : public WS_DRAW_ITEM_BASE int m_penWidth; public: - WS_DRAW_ITEM_LINE( wxPoint aStart, wxPoint aEnd, + WS_DRAW_ITEM_LINE( WORKSHEET_DATAITEM* aParent, + wxPoint aStart, wxPoint aEnd, int aPenWidth, EDA_COLOR_T aColor ) : - WS_DRAW_ITEM_BASE( wsg_line, aColor ) + WS_DRAW_ITEM_BASE( aParent, wsg_line, aColor ) { m_start = aStart; m_end = aEnd; @@ -316,11 +108,32 @@ public: int GetPenWidth() { return m_penWidth; } const wxPoint& GetStart() { return m_start; } const wxPoint& GetEnd() { return m_end; } + + /** + * Virtual function + * return true if the point aPosition is on the line + */ + virtual bool HitTest( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the starting point of this item. + */ + virtual bool HitTestStartPoint( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the ending point of this item + * This is avirtual function which should be overriden for items defien by + * 2 points + */ + virtual bool HitTestEndPoint( const wxPoint& aPosition); }; // This class draws a polygon class WS_DRAW_ITEM_POLYGON : public WS_DRAW_ITEM_BASE { + wxPoint m_pos; // position of reference point, from the + // WORKSHEET_DATAITEM_POLYPOLYGON parent + // (used only in page layout editor to draw anchors) int m_penWidth; bool m_fill; @@ -328,28 +141,61 @@ public: std::vector m_Corners; public: - WS_DRAW_ITEM_POLYGON( bool aFill, int aPenWidth, EDA_COLOR_T aColor ) : - WS_DRAW_ITEM_BASE( wsg_poly, aColor ) + WS_DRAW_ITEM_POLYGON( WORKSHEET_DATAITEM* aParent, wxPoint aPos, + bool aFill, int aPenWidth, EDA_COLOR_T aColor ) : + WS_DRAW_ITEM_BASE( aParent, wsg_poly, aColor ) { m_penWidth = aPenWidth; m_fill = aFill; + m_pos = aPos; } // Accessors: int GetPenWidth() { return m_penWidth; } bool IsFilled() { return m_fill; } + const wxPoint& GetPosition() { return m_pos; } + + /** + * Virtual function + * return true if the point aPosition is inside one polygon + */ + virtual bool HitTest( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the starting point of this item. + */ + virtual bool HitTestStartPoint( const wxPoint& aPosition); }; // This class draws a not filled rectangle with thick segment class WS_DRAW_ITEM_RECT : public WS_DRAW_ITEM_LINE { public: - WS_DRAW_ITEM_RECT( wxPoint aStart, wxPoint aEnd, + WS_DRAW_ITEM_RECT( WORKSHEET_DATAITEM* aParent, + wxPoint aStart, wxPoint aEnd, int aPenWidth, EDA_COLOR_T aColor ) : - WS_DRAW_ITEM_LINE( aStart, aEnd, aPenWidth, aColor ) + WS_DRAW_ITEM_LINE( aParent, aStart, aEnd, aPenWidth, aColor ) { m_type = wsg_rect; } + + /** + * Virtual function + * return true if the point aPosition is on one edge of the rectangle + */ + virtual bool HitTest( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the starting point of this item. + */ + virtual bool HitTestStartPoint( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the ending point of this item + * This is avirtual function which should be overriden for items defien by + * 2 points + */ + virtual bool HitTestEndPoint( const wxPoint& aPosition); }; // This class draws a graphic text. @@ -358,10 +204,11 @@ public: class WS_DRAW_ITEM_TEXT : public WS_DRAW_ITEM_BASE, public EDA_TEXT { public: - WS_DRAW_ITEM_TEXT( wxString& aText, wxPoint aPos, wxSize aSize, + WS_DRAW_ITEM_TEXT( WORKSHEET_DATAITEM* aParent, + wxString& aText, wxPoint aPos, wxSize aSize, int aPenWidth, EDA_COLOR_T aColor, bool aItalic = false, bool aBold = false ) : - WS_DRAW_ITEM_BASE( wsg_text, aColor ), EDA_TEXT( aText ) + WS_DRAW_ITEM_BASE( aParent, wsg_text, aColor ), EDA_TEXT( aText ) { SetTextPosition( aPos ); SetSize( aSize ); @@ -372,6 +219,17 @@ public: // Accessors: int GetPenWidth() { return GetThickness(); } + + /** + * Virtual function + * return true if the point aPosition is on the text + */ + virtual bool HitTest( const wxPoint& aPosition); + + /** + * return true if the point aPosition is on the starting point of this item. + */ + virtual bool HitTestStartPoint( const wxPoint& aPosition); }; /* @@ -420,8 +278,26 @@ public: delete m_graphicList[ii]; } - /* Function SetPenSize - * Set the defualt pen size to draw/plot lines and texts + /** + * Set the filename to draw/plot + * @param aFileName = the text to display by the "filename" format + */ + void SetFileName( const wxString & aFileName ) + { + m_fileName = &aFileName; + } + + /** + * Set the sheet name to draw/plot + * @param aSheetName = the text to draw/plot by the "sheetname" format + */ + void SetSheetName( const wxString & aSheetName ) + { + m_sheetFullName = &aSheetName; + } + + /** Function SetPenSize + * Set the default pen size to draw/plot lines and texts * @param aPenSize the thickness of lines */ void SetPenSize( int aPenSize ) @@ -429,7 +305,7 @@ public: m_penSize = aPenSize; } - /* Function SetMilsToIUfactor + /** Function SetMilsToIUfactor * Set the scalar to convert pages units ( mils) to draw/plot units * @param aScale the conversion factor */ @@ -438,7 +314,7 @@ public: m_milsToIu = aScale; } - /* Function SetPageSize + /** Function SetPageSize * Set the size of the page layout * @param aPageSize size (in mils) of the page layout. */ @@ -467,7 +343,7 @@ public: m_sheetCount = aSheetCount; } - /* Function SetMargins + /** Function SetMargins * Set the left top margin and the right bottom margin * of the page layout * @param aLTmargin The left top margin of the page layout. @@ -505,7 +381,7 @@ public: } /** - * Draws the item list crated by BuildWorkSheetGraphicList + * Draws the item list created by BuildWorkSheetGraphicList * @param aClipBox = the clipping rect, or NULL if no clipping * @param aDC = the current Device Context */ @@ -515,19 +391,23 @@ public: * Function BuildWorkSheetGraphicList is a core function for * drawing or plotting the page layout with * the frame and the basic inscriptions. - * It fills the list of basic graphic items to draw or plot. + * It populates the list of basic graphic items to draw or plot. * currently lines, rect, polygons and texts + * before calling this function, some parameters should be initialized: + * by calling: + * SetPenSize( aPenWidth ); + * SetMilsToIUfactor( aScalar ); + * SetSheetNumber( aSheetNumber ); + * SetSheetCount( aSheetCount ); + * SetFileName( aFileName ); + * SetSheetName( aFullSheetName ); * - * @param aPaperFormat The paper size type, for basic inscriptions. - * @param aFileName The file name, for basic inscriptions. - * @param aSheetPathHumanReadable The human readable sheet path. + * @param aPageInfo The PAGE_INFO, for page size, margins... * @param aTitleBlock The sheet title block, for basic inscriptions. * @param aColor The color for drawing. * @param aAltColor The color for items which need to be "hightlighted". */ - void BuildWorkSheetGraphicList( const wxString& aPaperFormat, - const wxString& aFileName, - const wxString& aSheetPathHumanReadable, + void BuildWorkSheetGraphicList( const PAGE_INFO& aPageInfo, const TITLE_BLOCK& aTitleBlock, EDA_COLOR_T aColor, EDA_COLOR_T aAltColor ); /** @@ -559,27 +439,68 @@ public: * @return the text, after replacing the format symbols by the actual value */ wxString BuildFullText( const wxString& aTextbase ); + + /** + * Locate graphic items in m_graphicList at location aPosition + * @param aList = the list of items found + * @param aPosition the position (in user units) to locate items + */ + void Locate(std::vector & aList, const wxPoint& aPosition); }; /** - * WORKSHEET_LAYOUT handles the grpahic items list to draw/plot + * WORKSHEET_LAYOUT handles the graphic items list to draw/plot * the title block and other items (page references ... */ class WORKSHEET_LAYOUT { std::vector m_list; + bool m_allowVoidList; // If false, the default page layout + // will be loaded the first time + // WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList + // is run (useful mainly for page layout editor) public: - WORKSHEET_LAYOUT() {}; + WORKSHEET_LAYOUT() { m_allowVoidList = false; } ~WORKSHEET_LAYOUT() {ClearList(); } - void ClearList() + /** + * static function: returns the instance of WORKSHEET_LAYOUT + * used in the application + */ + static WORKSHEET_LAYOUT& GetTheInstance() { - for( unsigned ii = 0; ii < m_list.size(); ii++ ) - delete m_list[ii]; + extern WORKSHEET_LAYOUT wksTheInstance; + return wksTheInstance; } + /** + * In Kicad applications, a page layout description is needed + * So if the list is empty, a default description is loaded, + * the first time a page layout is drawn. + * However, in page layout editor, an empty list is acceptable. + * AllowVoidList allows or not the empty list + */ + void AllowVoidList( bool Allow ) { m_allowVoidList = Allow; } + + /** + * @return true if an empty list is allowed + * (mainly allowed for page layout editor). + */ + bool VoidListAllowed() { return m_allowVoidList; } + + /** + * erase the list of items + */ + void ClearList(); + + /** + * Function Save: + * @param aFullFileName the filename of the file to created + */ + void Save( const wxString& aFullFileName ); + /** * Add an item to the list of items */ @@ -588,16 +509,30 @@ public: m_list.push_back( aItem ); } + /** + *Insert an item to the list of items at position aIdx + */ + void Insert( WORKSHEET_DATAITEM* aItem, unsigned aIdx ); + + /** + *Remove the item to the list of items at position aIdx + */ + bool Remove( unsigned aIdx ); + + /** + *Remove the item to the list of items at position aIdx + */ + bool Remove( WORKSHEET_DATAITEM* aItem ); + + /** + * @return the index of aItem, or -1 if does not exist + */ + int GetItemIndex( WORKSHEET_DATAITEM* aItem ) const; + /** * @return the item from its index aIdx, or NULL if does not exist */ - WORKSHEET_DATAITEM* GetItem( unsigned aIdx ) const - { - if( aIdx < m_list.size() ) - return m_list[aIdx]; - else - return NULL; - } + WORKSHEET_DATAITEM* GetItem( unsigned aIdx ) const; /** * @return the item count @@ -610,11 +545,32 @@ public: void SetDefaultLayout(); /** - * Fills the list with a custom layout, or + * Populates the list with a custom layout, or * the default layout, if no custom layout available + * @param aFullFileName = the custom page layout description file. + * if empty, loads the file defined by KICAD_WKSFILE + * and if its is not defined, uses the default internal description + * @param Append = if true: do not delete old layout, and load only + aFullFileName. */ - void SetLayout(); + void SetPageLayout( const wxString& aFullFileName = wxEmptyString, + bool Append = false ); + /** + * @return a short filename from a full filename: + * if the path is the current path, or if the path + * is the same as kicad.pro (in template), returns the shortname + * else do nothing and returns a full filename + */ + static const wxString MakeShortFileName( const wxString& aFullFileName ); + + /** + * @return a full filename from a short filename, + * if the short filename path is void + * In this case the path is the same as kicad.pro (in template) + * else return the short filename (which have an absolute os relative path + */ + static const wxString MakeFullFileName( const wxString& aShortFileName ); }; #endif // WORKSHEET_SHAPE_BUILDER_H diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index a7dcc18b64..8607c835f7 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -157,7 +157,7 @@ private: /// The name of the format to use when generating a net list. wxString m_netListFormat; - /// Add X prefix to componen referencess when generating spice net lists. + /// Add X prefix to component references when generating spice net lists. bool m_addReferencPrefix; wxString m_userLibraryPath; @@ -239,7 +239,7 @@ public: void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ); /** - * Function GetProjectFileParameters + * Function GetProjectFileParametersList * returns the project file parameter list for Eeschema. * * */ - PARAM_CFG_ARRAY& GetProjectFileParameters( void ); + PARAM_CFG_ARRAY& GetProjectFileParametersList( void ); /** - * Function SaveProjectFile + * Function SaveProjectSettings * saves changes to the project settings to the project (.pro) file. + * @param aAskForSave = true to open a dialog before saving the settings */ - void SaveProjectFile(); + void SaveProjectSettings( bool aAskForSave ); /** * Function LoadProjectFile diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index ccd909f55b..a37d22e02d 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -345,7 +345,12 @@ public: */ PARAM_CFG_ARRAY GetProjectFileParameters(); - void SaveProjectSettings(); + /** + * Function SaveProjectSettings + * saves changes to the project settings to the project (.pro) file. + * @param aAskForSave = true to open a dialog before saving the settings + */ + void SaveProjectSettings( bool aAskForSave ); /** * Load the project file configuration settings. diff --git a/include/wxstruct.h b/include/wxstruct.h index 83c0e9c492..3b9b0b6bcf 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -96,7 +96,8 @@ enum ID_DRAWFRAME_TYPE GERBER_FRAME_TYPE, TEXT_EDITOR_FRAME_TYPE, DISPLAY3D_FRAME_TYPE, - KICAD_MAIN_FRAME_TYPE + KICAD_MAIN_FRAME_TYPE, + PL_EDITOR_FRAME_TYPE }; @@ -222,6 +223,15 @@ public: */ virtual void SaveSettings(); + /** + * Function SaveProjectSettings + * saves changes to the project settings to the project (.pro) file. + * The method is virtual so you can override it to call the suitable save method. + * The base method do nothing + * @param aAskForSave = true to open a dialog before saving the settings + */ + virtual void SaveProjectSettings( bool aAskForSave ) {}; + /** * Function OnSelectPreferredEditor * Open a dialog to select the editor that will used in KiCad diff --git a/kicad/class_treeproject_item.cpp b/kicad/class_treeproject_item.cpp index 33a7fb8823..01b31af817 100644 --- a/kicad/class_treeproject_item.cpp +++ b/kicad/class_treeproject_item.cpp @@ -233,6 +233,10 @@ void TREEPROJECT_ITEM::Activate( TREE_PROJECT_FRAME* prjframe ) break; } + case TREE_PAGE_LAYOUT_DESCR: + mainFrame->Execute( m_parent, PL_EDITOR_EXE, FullFileName ); + break; + default: OpenFile( FullFileName ); break; diff --git a/kicad/class_treeprojectfiles.cpp b/kicad/class_treeprojectfiles.cpp index 0a3b909a65..2641cd18c3 100644 --- a/kicad/class_treeprojectfiles.cpp +++ b/kicad/class_treeprojectfiles.cpp @@ -74,7 +74,8 @@ TREEPROJECTFILES::TREEPROJECTFILES( TREE_PROJECT_FRAME* parent ) : m_ImageList->Add( KiBitmap( tools_xpm ) ); // TREE_REPORT m_ImageList->Add( KiBitmap( post_compo_xpm ) ); // TREE_POS m_ImageList->Add( KiBitmap( post_drill_xpm ) ); // TREE_DRILL - m_ImageList->Add( KiBitmap( svg_file_xpm ) ); // TREE_SVG + m_ImageList->Add( KiBitmap( svg_file_xpm ) ); // TREE_SVG + m_ImageList->Add( KiBitmap( pagelayout_load_default_xpm ) );// TREE_PAGE_LAYOUT_DESCR SetImageList( m_ImageList ); } diff --git a/kicad/commandframe.cpp b/kicad/commandframe.cpp index 0a965e9c9d..01c92365d0 100644 --- a/kicad/commandframe.cpp +++ b/kicad/commandframe.cpp @@ -109,6 +109,9 @@ Creates a component (for Eeschema) or a footprint (for Pcbnew) that shows a B&W btn = AddBitmapButton( ID_TO_PCB_CALCULATOR, KiBitmap( icon_pcbcalculator_xpm ) ); btn->SetToolTip( _( "Pcb calculator, the Swiss army knife..." ) ); + + btn = AddBitmapButton( ID_TO_PL_EDITOR, KiBitmap( icon_pagelayout_editor_xpm ) ); + btn->SetToolTip( _( "pl_editor, the page layout and title block shape editor" ) ); } diff --git a/kicad/files-io.cpp b/kicad/files-io.cpp index 911dee57ed..41803864dc 100644 --- a/kicad/files-io.cpp +++ b/kicad/files-io.cpp @@ -133,10 +133,10 @@ void KICAD_MANAGER_FRAME::OnArchiveFiles( wxCommandEvent& event ) { /* List of file extensions to save. */ static const wxChar* extentionList[] = { - wxT( "*.sch" ), wxT( "*.lib" ), wxT( "*.cmp" ), + wxT( "*.sch" ), wxT( "*.lib" ), wxT( "*.mod" ), wxT( "*.cmp" ), wxT( "*.brd" ), wxT( "*.kicad_pcb" ), wxT( "*.net" ), wxT( "*.pro" ), wxT( "*.pho" ), wxT( "*.py" ), - wxT( "*.pdf" ), wxT( "*.txt" ), wxT( "*.dcm" ), + wxT( "*.pdf" ), wxT( "*.txt" ), wxT( "*.dcm" ), wxT( "*.kicad_wks" ), NULL }; diff --git a/kicad/kicad.h b/kicad/kicad.h index a6cdb3578d..0bfd0dce97 100644 --- a/kicad/kicad.h +++ b/kicad/kicad.h @@ -62,20 +62,21 @@ class TREE_PROJECT_FRAME; enum TreeFileType { TREE_PROJECT = 1, - TREE_SCHEMA, // Schematic file (.sch) - TREE_LEGACY_PCB, // board file (.brd) legacy format - TREE_SEXP_PCB, // board file (.kicad_brd) new s expression format - TREE_GERBER, // Gerber file (.pho, .g*) - TREE_PDF, // PDF file (.pdf) - TREE_TXT, // ascii text file (.txt) - TREE_NET, // netlist file (.net) + TREE_SCHEMA, // Schematic file (.sch) + TREE_LEGACY_PCB, // board file (.brd) legacy format + TREE_SEXP_PCB, // board file (.kicad_brd) new s expression format + TREE_GERBER, // Gerber file (.pho, .g*) + TREE_PDF, // PDF file (.pdf) + TREE_TXT, // ascii text file (.txt) + TREE_NET, // netlist file (.net) TREE_UNKNOWN, TREE_DIRECTORY, - TREE_CMP_LINK, // cmp/footprint link file (.cmp) - TREE_REPORT, // report file (.rpt) - TREE_FP_PLACE, // fooprints position (place) file (.pos) - TREE_DRILL, // Excellon drill file (.drl) - TREE_SVG, // SVG file (.svg) + TREE_CMP_LINK, // cmp/footprint link file (.cmp) + TREE_REPORT, // report file (.rpt) + TREE_FP_PLACE, // fooprints position (place) file (.pos) + TREE_DRILL, // Excellon drill file (.drl) + TREE_SVG, // SVG file (.svg) + TREE_PAGE_LAYOUT_DESCR, // Page layout and title block descr file (.kicad_wks) TREE_MAX }; @@ -103,6 +104,7 @@ enum id_kicad_frm { ID_TO_GERBVIEW, ID_TO_BITMAP_CONVERTER, ID_TO_PCB_CALCULATOR, + ID_TO_PL_EDITOR, ID_BROWSE_AN_SELECT_FILE, ID_SELECT_PREFERED_EDITOR, ID_SELECT_PREFERED_PDF_BROWSER_NAME, @@ -160,6 +162,7 @@ public: KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& title, void OnRunGerbview( wxCommandEvent& event ); void OnRunBitmapConverter( wxCommandEvent& event ); void OnRunPcbCalculator( wxCommandEvent& event ); + void OnRunPageLayoutEditor( wxCommandEvent& event ); void OnOpenTextEditor( wxCommandEvent& event ); void OnOpenFileInTextEditor( wxCommandEvent& event ); diff --git a/kicad/mainframe.cpp b/kicad/mainframe.cpp index a4934e7dc9..4eb5863b7a 100644 --- a/kicad/mainframe.cpp +++ b/kicad/mainframe.cpp @@ -234,6 +234,11 @@ void KICAD_MANAGER_FRAME::OnRunPcbCalculator( wxCommandEvent& event ) Execute( this, PCB_CALCULATOR_EXE ); } +void KICAD_MANAGER_FRAME::OnRunPageLayoutEditor( wxCommandEvent& event ) +{ + Execute( this, PL_EDITOR_EXE ); +} + void KICAD_MANAGER_FRAME::OnRunPcbNew( wxCommandEvent& event ) { diff --git a/kicad/menubar.cpp b/kicad/menubar.cpp index 9afb07cf6f..baebaa02d4 100644 --- a/kicad/menubar.cpp +++ b/kicad/menubar.cpp @@ -82,6 +82,7 @@ BEGIN_EVENT_TABLE( KICAD_MANAGER_FRAME, EDA_BASE_FRAME ) EVT_BUTTON( ID_TO_GERBVIEW, KICAD_MANAGER_FRAME::OnRunGerbview ) EVT_BUTTON( ID_TO_BITMAP_CONVERTER, KICAD_MANAGER_FRAME::OnRunBitmapConverter ) EVT_BUTTON( ID_TO_PCB_CALCULATOR, KICAD_MANAGER_FRAME::OnRunPcbCalculator ) + EVT_BUTTON( ID_TO_PL_EDITOR, KICAD_MANAGER_FRAME::OnRunPageLayoutEditor ) EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER, KICAD_MANAGER_FRAME::OnUpdateDefaultPdfBrowser ) EVT_UPDATE_UI( ID_SELECT_PREFERED_PDF_BROWSER, diff --git a/kicad/tree_project_frame.cpp b/kicad/tree_project_frame.cpp index ae58782f93..bc7134af42 100644 --- a/kicad/tree_project_frame.cpp +++ b/kicad/tree_project_frame.cpp @@ -66,6 +66,7 @@ static const wxChar* s_allowedExtensionsToList[] = wxT( "^.*\\.pdf$" ), wxT( "^[^$].*\\.brd$" ), // Legacy Pcbnew files wxT( "^[^$].*\\.kicad_pcb$" ), // S format Pcbnew files + wxT( "^[^$].*\\.kicad_wks$" ), // S format kicad page layout descr files wxT( "^.*\\.net$" ), wxT( "^.*\\.txt$" ), wxT( "^.*\\.pho$" ), // Gerber file (Kicad extension) @@ -292,6 +293,10 @@ wxString TREE_PROJECT_FRAME::GetFileExt( TreeFileType type ) ext = SVGFileExtension; break; + case TREE_PAGE_LAYOUT_DESCR: + ext = PageLayoutDescrFileExtension; + break; + default: /* Eliminates unnecessary GCC warning. */ break; } @@ -358,6 +363,10 @@ wxString TREE_PROJECT_FRAME::GetFileWildcard( TreeFileType type ) ext = SVGFileWildcard; break; + case TREE_PAGE_LAYOUT_DESCR: + ext = PageLayoutDescrFileWildcard; + break; + default: /* Eliminates unnecessary GCC warning. */ break; } diff --git a/pagelayout_editor/CMakeLists.txt b/pagelayout_editor/CMakeLists.txt new file mode 100644 index 0000000000..90e0cfce6f --- /dev/null +++ b/pagelayout_editor/CMakeLists.txt @@ -0,0 +1,107 @@ +add_definitions(-DPL_EDITOR) + +### +# Includes +### + +include_directories(BEFORE ${INC_BEFORE}) +include_directories( + dialogs + ../common/dialogs + ${INC_AFTER} + ) + + +### +# Sources +### + +set(PL_EDITOR_SRCS + dialogs/properties_frame_base.cpp + dialogs/dialogs_for_printing.cpp + dialogs/dialog_new_dataitem_base.cpp + dialogs/dialog_new_dataitem.cpp + class_pl_editor_screen.cpp + class_pl_editor_layout.cpp + design_tree_frame.cpp + events_functions.cpp + controle.cpp + files.cpp + onleftclick.cpp + onrightclick.cpp + page_layout_writer.cpp + pl_editor.cpp + pl_editor_config.cpp + pl_editor_frame.cpp + properties_frame.cpp + hotkeys.cpp + menubar.cpp + toolbars_pl_editor.cpp + ) + +### +# We need some extra sources from common +### +set(PL_EDITOR_EXTRA_SRCS + ../common/base_screen.cpp + ../common/base_units.cpp + ../common/eda_text.cpp + ../common/class_page_info.cpp + ../common/dialogs/dialog_page_settings.cpp +) + +### +# Windows resource file +### +if(WIN32) + if(MINGW) + # PL_EDITOR_RESOURCES variable is set by the macro. + mingw_resource_compiler(pl_editor) + else(MINGW) + set(PL_EDITOR_RESOURCES pl_editor.rc) + endif(MINGW) +endif(WIN32) + +### +# Apple resource files +### +if(APPLE) + set(PL_EDITOR_RESOURCES pl_editor.icns pl_editor_doc.icns) + set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/pl_editor.icns" + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/pl_editor_doc.icns" + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + set(MACOSX_BUNDLE_ICON_FILE pl_editor.icns) + set(MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.pl_editor) +endif(APPLE) + +### +# Create the pl_editor executable +### +add_executable(pl_editor WIN32 MACOSX_BUNDLE + ${PL_EDITOR_SRCS} + ${DIALOGS_SRCS} + ${PL_EDITOR_EXTRA_SRCS} + ${PL_EDITOR_RESOURCES}) + +### +# Set properties for APPLE on pl_editor target +### +if(APPLE) + set_target_properties(pl_editor PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) +endif(APPLE) + +### +# Link executable target pl_editor with correct libraries +### +target_link_libraries(pl_editor common polygon bitmaps + ${OPENGL_LIBRARIES} + ${wxWidgets_LIBRARIES} + ${GDI_PLUS_LIBRARIES}) + +### +# Add pl_editor as install target +### +install(TARGETS pl_editor + DESTINATION ${KICAD_BIN} + COMPONENT binary) diff --git a/pagelayout_editor/class_pl_editor_layout.cpp b/pagelayout_editor/class_pl_editor_layout.cpp new file mode 100644 index 0000000000..5d321ec22f --- /dev/null +++ b/pagelayout_editor/class_pl_editor_layout.cpp @@ -0,0 +1,30 @@ +/** + * @file class_gbr_layout.cpp + * @brief PL_EDITOR_LAYOUT class functions. + */ + +#include +#include + +#include +#include +#include + +PL_EDITOR_LAYOUT::PL_EDITOR_LAYOUT() +{ + PAGE_INFO pageInfo( wxT( "A4" ) ); + SetPageSettings( pageInfo ); +} + + +PL_EDITOR_LAYOUT::~PL_EDITOR_LAYOUT() +{ +} + +EDA_RECT PL_EDITOR_LAYOUT::ComputeBoundingBox() +{ + EDA_RECT bbox; + + SetBoundingBox( bbox ); + return bbox; +} diff --git a/pagelayout_editor/class_pl_editor_layout.h b/pagelayout_editor/class_pl_editor_layout.h new file mode 100644 index 0000000000..5d589ff1b1 --- /dev/null +++ b/pagelayout_editor/class_pl_editor_layout.h @@ -0,0 +1,74 @@ +/** + * @file class_pl_editor_layout.h + */ + +#ifndef CLASS_PL_EDITOR_LAYOUT_H +#define CLASS_PL_EDITOR_LAYOUT_H + +#include // PAGE_INFO +#include // PAGE_INFO +#include + +class EDA_DRAW_PANEL; + + +/** + * Class PL_EDITOR_LAYOUT + * holds list of GERBER_DRAW_ITEM currently loaded. + */ +class PL_EDITOR_LAYOUT +{ +private: + EDA_RECT m_BoundingBox; + PAGE_INFO m_paper; + TITLE_BLOCK m_titles; + +public: + PL_EDITOR_LAYOUT(); + ~PL_EDITOR_LAYOUT(); + + const PAGE_INFO& GetPageSettings() const { return m_paper; } + void SetPageSettings( const PAGE_INFO& aPageSettings ) + { + m_paper = aPageSettings; + } + + const wxPoint& GetOriginAxisPosition() const + { + static wxPoint zero( 0, 0 ); + return zero; + } + + const TITLE_BLOCK& GetTitleBlock() const + { + return m_titles; + } + + void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) + { + m_titles = aTitleBlock; + } + + /** + * Function ComputeBoundingBox + * calculates the bounding box containing all Gerber items. + * @return EDA_RECT - the full item list bounding box + */ + EDA_RECT ComputeBoundingBox(); + + /** + * Function GetBoundingBox + * may be called soon after ComputeBoundingBox() to return the same EDA_RECT, + * as long as the CLASS_PL_EDITOR_LAYOUT has not changed. + */ + EDA_RECT GetBoundingBox() const { return m_BoundingBox; } // override + + void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; } + +#if defined(DEBUG) + void Show( int nestLevel, std::ostream& os ) const; // overload + +#endif +}; + +#endif // #ifndef CLASS_PL_EDITOR_LAYOUT_H diff --git a/pagelayout_editor/class_pl_editor_screen.cpp b/pagelayout_editor/class_pl_editor_screen.cpp new file mode 100644 index 0000000000..7c4ed73698 --- /dev/null +++ b/pagelayout_editor/class_pl_editor_screen.cpp @@ -0,0 +1,94 @@ +/** + * @file class_pl_editor_screen.cpp + */ + +#include +#include +#include +#include +#include +#include + + +#define MM_GRID( x ) wxRealPoint( x * IU_PER_MM, x * IU_PER_MM ) +#define ZOOM_FACTOR( x ) ( x * IU_PER_MM / 1000 ) + + +/** + Default zoom values. + Roughly a 1.5 progression. +*/ +static const double pl_editorZoomList[] = +{ + ZOOM_FACTOR( 5 ), + ZOOM_FACTOR( 7.0 ), + ZOOM_FACTOR( 10.0 ), + ZOOM_FACTOR( 15.0 ), + ZOOM_FACTOR( 22.0 ), + ZOOM_FACTOR( 35.0 ), + ZOOM_FACTOR( 50.0 ), + ZOOM_FACTOR( 80.0 ), + ZOOM_FACTOR( 120.0 ), + ZOOM_FACTOR( 200.0 ), + ZOOM_FACTOR( 350.0 ), + ZOOM_FACTOR( 500.0 ), + ZOOM_FACTOR( 750.0 ), + ZOOM_FACTOR( 1000.0 ), + ZOOM_FACTOR( 1500.0 ), + ZOOM_FACTOR( 2000.0 ), + ZOOM_FACTOR( 3000.0 ), +}; + + +// Default grid sizes for PCB editor screens. +static GRID_TYPE pl_editorGridList[] = +{ + // predefined grid list in mm + { ID_POPUP_GRID_LEVEL_1MM, MM_GRID( 1.0 ) }, + { ID_POPUP_GRID_LEVEL_0_5MM, MM_GRID( 0.5 ) }, + { ID_POPUP_GRID_LEVEL_0_25MM, MM_GRID( 0.25 ) }, + { ID_POPUP_GRID_LEVEL_0_2MM, MM_GRID( 0.2 ) }, + { ID_POPUP_GRID_LEVEL_0_1MM, MM_GRID( 0.1 ) }, +}; + + +PL_EDITOR_SCREEN::PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ) : + BASE_SCREEN( SCREEN_T ) +{ + for( unsigned i = 0; i < DIM( pl_editorZoomList ); ++i ) + m_ZoomList.push_back( pl_editorZoomList[i] ); + + for( unsigned i = 0; i < DIM( pl_editorGridList ); ++i ) + AddGrid( pl_editorGridList[i] ); + + // Set the working grid size to a reasonable value + SetGrid( MM_GRID( 1.0 ) ); + + SetZoom( ZOOM_FACTOR( 350 ) ); // a default value for zoom + + InitDataPoints( aPageSizeIU ); + m_NumberOfScreens = 2; +} + + +PL_EDITOR_SCREEN::~PL_EDITOR_SCREEN() +{ + ClearUndoRedoList(); +} + + +// virtual function +int PL_EDITOR_SCREEN::MilsToIuScalar() +{ + return (int)IU_PER_MILS; +} + + +/* Virtual function needed by classes derived from BASE_SCREEN + * this is a virtual pure function in BASE_SCREEN + * do nothing in GerbView + * could be removed later + */ +void PL_EDITOR_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER&, int ) +{ +} diff --git a/pagelayout_editor/class_pl_editor_screen.h b/pagelayout_editor/class_pl_editor_screen.h new file mode 100644 index 0000000000..4c76fbd9f7 --- /dev/null +++ b/pagelayout_editor/class_pl_editor_screen.h @@ -0,0 +1,56 @@ +/** + * @file class_pl_editor_layout.h + */ + +#ifndef CLASS_PL_EDITOR_SCREEN_H_ +#define CLASS_PL_EDITOR_SCREEN_H_ + + +#include +#include + +class WORKSHEET_DATAITEM; + + +/* Handle info to display a board */ +class PL_EDITOR_SCREEN : public BASE_SCREEN +{ +public: + /** + * Constructor + * @param aPageSizeIU is the size of the initial paper page in internal units. + */ + PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ); + + ~PL_EDITOR_SCREEN(); + + virtual int MilsToIuScalar(); + + /** + * Function ClearUndoORRedoList + * virtual pure in BASE_SCREEN, so it must be defined here + */ + + void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ); + /** + * Function GetCurItem + * returns the currently selected WORKSHEET_DATAITEM, overriding + * BASE_SCREEN::GetCurItem(). + * @return WORKSHEET_DATAITEM* - the one selected, or NULL. + */ + + WORKSHEET_DATAITEM* GetCurItem() const + { + return (WORKSHEET_DATAITEM*) BASE_SCREEN::GetCurItem(); + } + + /** + * Function SetCurItem + * sets the currently selected object, m_CurrentItem. + * @param aItem Any object derived from WORKSHEET_DATAITEM + */ + void SetCurItem( WORKSHEET_DATAITEM* aItem ) { BASE_SCREEN::SetCurItem( (EDA_ITEM*)aItem ); } +}; + + +#endif // CLASS_PL_EDITOR_SCREEN_H_ diff --git a/pagelayout_editor/controle.cpp b/pagelayout_editor/controle.cpp new file mode 100644 index 0000000000..dfb674d8d3 --- /dev/null +++ b/pagelayout_editor/controle.cpp @@ -0,0 +1,112 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013-2013 Jean-Pierre Charras jp.charras at wanadoo.fr + * Copyright (C) 2013-2013 KiCad Developers, see change_log.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 + */ + +/** + * @file pagelayout_editor/controle.cpp + */ + +#include +#include +#include +#include + + +void PL_EDITOR_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, + int aHotKey ) +{ + wxRealPoint gridSize; + wxPoint oldpos; + wxPoint pos = aPosition; + + pos = GetScreen()->GetNearestGridPosition( pos ); + + oldpos = GetScreen()->GetCrossHairPosition(); + gridSize = GetScreen()->GetGridSize(); + + switch( aHotKey ) + { + case WXK_NUMPAD8: + case WXK_UP: + pos.y -= KiROUND( gridSize.y ); + m_canvas->MoveCursor( pos ); + break; + + case WXK_NUMPAD2: + case WXK_DOWN: + pos.y += KiROUND( gridSize.y ); + m_canvas->MoveCursor( pos ); + break; + + case WXK_NUMPAD4: + case WXK_LEFT: + pos.x -= KiROUND( gridSize.x ); + m_canvas->MoveCursor( pos ); + break; + + case WXK_NUMPAD6: + case WXK_RIGHT: + pos.x += KiROUND( gridSize.x ); + m_canvas->MoveCursor( pos ); + break; + + default: + break; + } + + GetScreen()->SetCrossHairPosition( pos ); + + if( oldpos != GetScreen()->GetCrossHairPosition() ) + { + pos = GetScreen()->GetCrossHairPosition(); + GetScreen()->SetCrossHairPosition( oldpos ); + m_canvas->CrossHairOff( aDC ); + GetScreen()->SetCrossHairPosition( pos ); + m_canvas->CrossHairOn( aDC ); + + if( m_canvas->IsMouseCaptured() ) + { +#ifdef USE_WX_OVERLAY + wxDCOverlay oDC( m_overlay, (wxWindowDC*)aDC ); + oDC.Clear(); + m_canvas->CallMouseCapture( aDC, aPosition, false ); +#else + m_canvas->CallMouseCapture( aDC, aPosition, true ); +#endif + } +#ifdef USE_WX_OVERLAY + else + { + m_overlay.Reset(); + } +#endif + + } + + if( aHotKey ) + { + OnHotKey( aDC, aHotKey, aPosition ); + } + + UpdateStatusBar(); +} diff --git a/pagelayout_editor/design_tree_frame.cpp b/pagelayout_editor/design_tree_frame.cpp new file mode 100644 index 0000000000..509806c943 --- /dev/null +++ b/pagelayout_editor/design_tree_frame.cpp @@ -0,0 +1,266 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file design_tree_frame.cpp + */ + +#include +#include +#include +#include +#include + +/* XPM + * This bitmap is used to show item types + */ +static const char* root_xpm[] = +{ + "12 12 2 1", + " c None", + "x c #008080", + " xxxx ", + " xxx ", + " xxx ", + " xxx ", + "xxxxxxxxxxx ", + "xxxxxxxxxxxx", + "xxxxxxxxxxx ", + " xxx ", + " xxx ", + " xxx ", + " xxxx ", + " " +}; + +static const char* line_xpm[] = +{ + "12 12 2 1", + " c None", + "x c #008080", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xx ", + "xxxxxxxxxxxx", + "xxxxxxxxxxxx" +}; + +static const char* rect_xpm[] = +{ + "12 12 2 1", + " c None", + "x c #000080", + "xxxxxxxxxxxx", + "xxxxxxxxxxxx", + "xx xx", + "xx xx", + "xx xx", + "xx xx", + "xx xx", + "xx xx", + "xx xx", + "xx xx", + "xxxxxxxxxxxx", + "xxxxxxxxxxxx" +}; + +static const char* text_xpm[] = +{ + "12 12 2 1", + " c None", + "x c #800000", + " xxxxxxxxxx ", + "xxxxxxxxxxxx", + "xx xx xx", + " xx ", + " xx ", + " xx ", + " xx ", + " xx ", + " xx ", + " xx ", + " xxxx ", + " xxxxxx " +}; + +static const char* poly_xpm[] = +{ + "12 12 2 1", + " c None", + "x c #008000", + " xx ", + " xxxx ", + " xxxxxx ", + " xxxxxxxx ", + " xxxxxxxxxx ", + "xxxxxxxxxxxx", + "xxxxxxxxxxxx", + " xxxxxxxxxx ", + " xxxxxxxx ", + " xxxxxx ", + " xxxx ", + " xx " +}; + +// Event table: + + +DESIGN_TREE_FRAME::DESIGN_TREE_FRAME( PL_EDITOR_FRAME* aParent ) : + wxTreeCtrl( aParent, ID_DESIGN_TREE_FRAME ) +{ + // icons size is not know (depending on they are built) + // so get it: + wxSize iconsize; + wxBitmap root_bm( root_xpm ); + + iconsize.x = root_bm.GetWidth(); + iconsize.y = root_bm.GetHeight(); + + // Make an image list containing small icons + m_imageList = new wxImageList( iconsize.x, iconsize.y, true, 4 ); + + m_imageList->Add( root_bm ); // root symbol + m_imageList->Add( wxBitmap( line_xpm ) ); // line item + m_imageList->Add( wxBitmap( rect_xpm ) ); // rect item + m_imageList->Add( wxBitmap( text_xpm ) ); // text item + m_imageList->Add( wxBitmap( poly_xpm ) ); // poly item + + SetImageList( m_imageList ); +} + + +DESIGN_TREE_FRAME::~DESIGN_TREE_FRAME() +{ + delete m_imageList; +} + + +wxSize DESIGN_TREE_FRAME::GetMinSize() const +{ + return wxSize( 100, -1 ); +} + + +void DESIGN_TREE_FRAME::ReCreateDesignTree() +{ + DeleteAllItems(); + + const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + + // root tree: + wxFileName fn( ((PL_EDITOR_FRAME*) GetParent())->GetCurrFileName() ); + wxTreeItemId rootitem; + + if( fn.GetName().IsEmpty() ) + rootitem = AddRoot( wxT( "" ), 0, 0 ); + else + rootitem = AddRoot( fn.GetName(), 0, 0 ); + + SetItemBold( rootitem, true ); + + // Now adding all current items + for( unsigned ii = 0; ii < pglayout.GetCount(); ii++ ) + { + WORKSHEET_DATAITEM* item = pglayout.GetItem( ii ); + int img = 0; + switch( item->GetType() ) + { + case WORKSHEET_DATAITEM::WS_SEGMENT: img = 1; break; + case WORKSHEET_DATAITEM::WS_RECT: img = 2; break; + case WORKSHEET_DATAITEM::WS_TEXT: img = 3; break; + case WORKSHEET_DATAITEM::WS_POLYPOLYGON: img = 4; break; + } + wxTreeItemId cell= AppendItem( rootitem, item->m_Name, img, img ); + DESIGN_TREE_ITEM_DATA* data = new DESIGN_TREE_ITEM_DATA( item ); + SetItemData( cell, data ); + } + + Expand( rootitem ); +} + + +// Select the tree item corresponding to the WORKSHEET_DATAITEM aItem +void DESIGN_TREE_FRAME::SelectCell( WORKSHEET_DATAITEM* aItem ) +{ + wxTreeItemId rootcell = GetRootItem(); + wxTreeItemIdValue cookie; + + wxTreeItemId cell = GetFirstChild( rootcell, cookie ); + + while( cell.IsOk() ) + { + DESIGN_TREE_ITEM_DATA* data = (DESIGN_TREE_ITEM_DATA*) GetItemData( cell ); + + if( data->GetItem() == aItem ) + { + SelectItem( cell ); + return; + } + + cell = GetNextChild( rootcell, cookie ); + } +} + +//return the page layout item managed by the cell +WORKSHEET_DATAITEM* DESIGN_TREE_FRAME::GetPageLayoutItem( wxTreeItemId aCell ) const +{ + DESIGN_TREE_ITEM_DATA* data = (DESIGN_TREE_ITEM_DATA*) GetItemData( aCell ); + if( data ) + return data->GetItem(); + else + return NULL; +} + +/* return the page layout item managed by the selected cell (or NULL) + */ +WORKSHEET_DATAITEM* DESIGN_TREE_FRAME::GetPageLayoutSelectedItem() const +{ + wxTreeItemId cell; + cell = GetSelection(); + + if( cell.IsOk() ) + return GetPageLayoutItem( cell ); + + return NULL; +} + +/* return the page layout item index managed by the selected cell (or -1) + */ +int DESIGN_TREE_FRAME::GetSelectedItemIndex() +{ + WORKSHEET_DATAITEM*item = GetPageLayoutSelectedItem(); + + if( item == NULL ) + return -1; + + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + return pglayout.GetItemIndex( item ); +} diff --git a/pagelayout_editor/design_tree_frame.h b/pagelayout_editor/design_tree_frame.h new file mode 100644 index 0000000000..d601ac4d5d --- /dev/null +++ b/pagelayout_editor/design_tree_frame.h @@ -0,0 +1,108 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file design_tree_frame.h + */ + +#ifndef _DESIGN_TREE_FRAME_H +#define _DESIGN_TREE_FRAME_H + +#include + +#include + +class WORKSHEET_DATAITEM; + +/** class DESIGN_TREE_ITEM + * Handle one item for the page layoiut design + */ +class DESIGN_TREE_ITEM_DATA : public wxTreeItemData +{ +private: + WORKSHEET_DATAITEM* m_wsItem; // the page layout item owned by me + +public: + + DESIGN_TREE_ITEM_DATA( WORKSHEET_DATAITEM* aItem = NULL ) + { + m_wsItem = aItem; + } + + /** @return the item managed by the cell + */ + WORKSHEET_DATAITEM* GetItem() const + { + return m_wsItem; + } + + /** Set the link to the item managed by the cell + */ + void SetItem( WORKSHEET_DATAITEM* aItem ) + { + m_wsItem = aItem; + } +}; + + +/** + * Class DESIGN_TREE_FRAME is the left window showing the list of items + */ + +class DESIGN_TREE_FRAME : protected wxTreeCtrl +{ + friend class PL_EDITOR_FRAME; + +private: + wxImageList* m_imageList; + +public: + DESIGN_TREE_FRAME( PL_EDITOR_FRAME* aParent ); + ~DESIGN_TREE_FRAME(); + + void ReCreateDesignTree(); + wxSize GetMinSize() const; + + /** @return the page layout item managed by the cell + */ + WORKSHEET_DATAITEM* GetPageLayoutItem(wxTreeItemId aCell) const; + + /** @return the page layout item managed by the selected cell (or NULL) + */ + WORKSHEET_DATAITEM* GetPageLayoutSelectedItem() const; + + /** @return the page layout item index managed by the selected cell (or -1) + */ + int GetSelectedItemIndex(); + + // Select the tree item corresponding to the WORKSHEET_DATAITEM aItem + void SelectCell( WORKSHEET_DATAITEM* aItem ); + + void SelectCell( const wxTreeItemId &aTreeItem, bool aSelect=true ) + { + SelectItem( aTreeItem, aSelect ); + } +}; + +#endif /* _DESIGN_TREE_FRAME_H */ diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp new file mode 100644 index 0000000000..a6375feddd --- /dev/null +++ b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp @@ -0,0 +1,177 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 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 + */ + +/** + * @file dialog_new_dataitem.cpp + * @brief a dialog called on creating a new plage layout data item. +*/ + +#include +#include +#include + +#include +#include +#include + +class DIALOG_NEW_DATAITEM : public DIALOG_NEW_DATAITEM_BASE +{ + WORKSHEET_DATAITEM* m_item; + +public: + DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem ); + +private: + void OnCancelClick( wxCommandEvent& event ); + void OnOKClick( wxCommandEvent& event ); + + void initDlg(); +}; + + +int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem ) +{ + DIALOG_NEW_DATAITEM dlg( aCaller, aItem ); + return dlg.ShowModal(); +} + +DIALOG_NEW_DATAITEM::DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, + WORKSHEET_DATAITEM* aItem ) + : DIALOG_NEW_DATAITEM_BASE( aCaller ) +{ + m_item = aItem; + initDlg(); + + GetSizer()->SetSizeHints( this ); + Centre(); +} + +void DIALOG_NEW_DATAITEM::OnCancelClick( wxCommandEvent& event ) +{ + EndModal( wxID_CANCEL); +} + +void DIALOG_NEW_DATAITEM::OnOKClick( wxCommandEvent& event ) +{ + if( m_item->GetType() == WORKSHEET_DATAITEM::WS_TEXT ) + ((WORKSHEET_DATAITEM_TEXT*)m_item)->m_TextBase = m_textCtrlText->GetValue(); + + wxString msg; + + // Import Start point + double dtmp; + msg = m_textCtrlPosX->GetValue(); + msg.ToDouble( &dtmp ); + m_item->m_Pos.m_Pos.x = dtmp; + + msg = m_textCtrlPosY->GetValue(); + msg.ToDouble( &dtmp ); + m_item->m_Pos.m_Pos.y = dtmp; + + switch( m_choiceCornerPos->GetSelection() ) + { + case 2: m_item->m_Pos.m_Anchor = RB_CORNER; break; + case 0: m_item->m_Pos.m_Anchor = RT_CORNER; break; + case 3: m_item->m_Pos.m_Anchor = LB_CORNER; break; + case 1: m_item->m_Pos.m_Anchor = LT_CORNER; break; + } + + // Import End point + msg = m_textCtrlEndX->GetValue(); + msg.ToDouble( &dtmp ); + m_item->m_End.m_Pos.x = dtmp; + + msg = m_textCtrlEndY->GetValue(); + msg.ToDouble( &dtmp ); + m_item->m_End.m_Pos.y = dtmp; + + switch( m_choiceCornerEnd->GetSelection() ) + { + case 2: m_item->m_End.m_Anchor = RB_CORNER; break; + case 0: m_item->m_End.m_Anchor = RT_CORNER; break; + case 3: m_item->m_End.m_Anchor = LB_CORNER; break; + case 1: m_item->m_End.m_Anchor = LT_CORNER; break; + } + + EndModal( wxID_OK); +} + +void DIALOG_NEW_DATAITEM::initDlg() +{ + // Disable useless widgets, depending on WORKSHEET_DATAITEM type + switch( m_item->GetType() ) + { + case WORKSHEET_DATAITEM::WS_SEGMENT: + case WORKSHEET_DATAITEM::WS_RECT: + m_textCtrlText->Enable( false ); + break; + + case WORKSHEET_DATAITEM::WS_POLYPOLYGON: + m_textCtrlText->Enable( false ); + // fall through + case WORKSHEET_DATAITEM::WS_TEXT: + m_textCtrlEndX->Enable( false ); + m_textCtrlEndY->Enable( false ); + break; + } + + wxString msg; + + // Position/ start point + msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.x ); + m_textCtrlPosX->SetValue( msg ); + msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.y ); + m_textCtrlPosY->SetValue( msg ); + switch( m_item->m_Pos.m_Anchor ) + { + case RB_CORNER: // right bottom corner + m_choiceCornerPos->SetSelection( 2 ); break; + case RT_CORNER: // right top corner + m_choiceCornerPos->SetSelection( 0 ); break; + case LB_CORNER: // left bottom corner + m_choiceCornerPos->SetSelection( 3 ); break; + case LT_CORNER: // left top corner + m_choiceCornerPos->SetSelection( 1 ); break; + } + + // End point + msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.x ); + m_textCtrlEndX->SetValue( msg ); + msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.y ); + m_textCtrlEndY->SetValue( msg ); + switch( m_item->m_End.m_Anchor ) + { + case RB_CORNER: // right bottom corner + m_choiceCornerEnd->SetSelection( 2 ); break; + case RT_CORNER: // right top corner + m_choiceCornerEnd->SetSelection( 0 ); break; + case LB_CORNER: // left bottom corner + m_choiceCornerEnd->SetSelection( 3 ); break; + case LT_CORNER: // left top corner + m_choiceCornerEnd->SetSelection( 1 ); break; + } + + if( m_item->GetType() == WORKSHEET_DATAITEM::WS_TEXT ) + m_textCtrlText->SetValue( ((WORKSHEET_DATAITEM_TEXT*)m_item)->m_TextBase ); +} diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp new file mode 100644 index 0000000000..636fec0cb3 --- /dev/null +++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.cpp @@ -0,0 +1,155 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_new_dataitem_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_NEW_DATAITEM_BASE::DIALOG_NEW_DATAITEM_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizerMain; + bSizerMain = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerUpper; + bSizerUpper = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerPos; + bSizerPos = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerPosXY; + bSizerPosXY = new wxBoxSizer( wxVERTICAL ); + + m_staticTextPosX = new wxStaticText( this, wxID_ANY, _("Pos X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPosX->Wrap( -1 ); + bSizerPosXY->Add( m_staticTextPosX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlPosX = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerPosXY->Add( m_textCtrlPosX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_staticTextPosY = new wxStaticText( this, wxID_ANY, _("Pos Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPosY->Wrap( -1 ); + bSizerPosXY->Add( m_staticTextPosY, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrlPosY = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerPosXY->Add( m_textCtrlPosY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerPos->Add( bSizerPosXY, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextOrgPos = new wxStaticText( this, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextOrgPos->Wrap( -1 ); + bSizer6->Add( m_staticTextOrgPos, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxString m_choiceCornerPosChoices[] = { _("Upper Right"), _("Upper Left"), _("Lower Right"), _("Lower Left") }; + int m_choiceCornerPosNChoices = sizeof( m_choiceCornerPosChoices ) / sizeof( wxString ); + m_choiceCornerPos = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCornerPosNChoices, m_choiceCornerPosChoices, 0 ); + m_choiceCornerPos->SetSelection( 2 ); + bSizer6->Add( m_choiceCornerPos, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerPos->Add( bSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerUpper->Add( bSizerPos, 1, wxEXPAND, 5 ); + + m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerUpper->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 ); + + m_SizerEndPosition = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerEndXY; + bSizerEndXY = new wxBoxSizer( wxVERTICAL ); + + m_staticTextEndX = new wxStaticText( this, wxID_ANY, _("End X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextEndX->Wrap( -1 ); + bSizerEndXY->Add( m_staticTextEndX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlEndX = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerEndXY->Add( m_textCtrlEndX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_staticTextEndY = new wxStaticText( this, wxID_ANY, _("End Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextEndY->Wrap( -1 ); + bSizerEndXY->Add( m_staticTextEndY, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrlEndY = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerEndXY->Add( m_textCtrlEndY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + m_SizerEndPosition->Add( bSizerEndXY, 1, 0, 5 ); + + wxBoxSizer* bSizer61; + bSizer61 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextOrgPos1 = new wxStaticText( this, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextOrgPos1->Wrap( -1 ); + bSizer61->Add( m_staticTextOrgPos1, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxString m_choiceCornerEndChoices[] = { _("Upper Right"), _("Upper Left"), _("Lower Right"), _("Lower Left") }; + int m_choiceCornerEndNChoices = sizeof( m_choiceCornerEndChoices ) / sizeof( wxString ); + m_choiceCornerEnd = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceCornerEndNChoices, m_choiceCornerEndChoices, 0 ); + m_choiceCornerEnd->SetSelection( 2 ); + bSizer61->Add( m_choiceCornerEnd, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + m_SizerEndPosition->Add( bSizer61, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerUpper->Add( m_SizerEndPosition, 1, wxEXPAND, 5 ); + + m_staticlineEndXY = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerUpper->Add( m_staticlineEndXY, 0, wxEXPAND | wxALL, 5 ); + + m_SizerText = new wxBoxSizer( wxVERTICAL ); + + m_staticText10 = new wxStaticText( this, wxID_ANY, _("Text"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText10->Wrap( -1 ); + m_SizerText->Add( m_staticText10, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlText = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_SizerText->Add( m_textCtrlText, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + m_SizerText->Add( m_staticline3, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerUpper->Add( m_SizerText, 0, wxEXPAND, 5 ); + + + bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel ); + m_sdbSizerButtons->Realize(); + + bSizerMain->Add( m_sdbSizerButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizerMain ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + m_sdbSizerButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnCancelClick ), NULL, this ); + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnOKClick ), NULL, this ); +} + +DIALOG_NEW_DATAITEM_BASE::~DIALOG_NEW_DATAITEM_BASE() +{ + // Disconnect Events + m_sdbSizerButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnCancelClick ), NULL, this ); + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NEW_DATAITEM_BASE::OnOKClick ), NULL, this ); + +} diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp b/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp new file mode 100644 index 0000000000..eb8e3923a5 --- /dev/null +++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.fbp @@ -0,0 +1,1666 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + dialog_new_dataitem_base + 1000 + none + 1 + dialog_new_dataitem_base + + . + + 1 + 1 + 1 + 0 + 0 + + 0 + wxAUI_MGR_DEFAULT + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + DIALOG_NEW_DATAITEM_BASE + + 328,290 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + DIALOG_SHIM; dialog_shim.h + New Item + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerMain + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizerUpper + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizerPos + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizerPosXY + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Pos X (mm) + + 0 + + + 0 + + 1 + m_staticTextPosX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlPosX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Pos Y (mm) + + 0 + + + 0 + + 1 + m_staticTextPosY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlPosY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizer6 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Origin + + 0 + + + 0 + + 1 + m_staticTextOrgPos + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Upper Right" "Upper Left" "Lower Right" "Lower Left" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceCornerPos + 1 + + + protected + 1 + + Resizable + 2 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND | wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline2 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + m_SizerEndPosition + wxHORIZONTAL + protected + + 5 + + 1 + + + bSizerEndXY + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + End X (mm) + + 0 + + + 0 + + 1 + m_staticTextEndX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlEndX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + End Y (mm) + + 0 + + + 0 + + 1 + m_staticTextEndY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlEndY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizer61 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Origin + + 0 + + + 0 + + 1 + m_staticTextOrgPos1 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Upper Right" "Upper Left" "Lower Right" "Lower Left" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceCornerEnd + 1 + + + protected + 1 + + Resizable + 2 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND | wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticlineEndXY + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + m_SizerText + wxVERTICAL + protected + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text + + 0 + + + 0 + + 1 + m_staticText10 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlText + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline3 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_sdbSizerButtons + protected + + OnCancelClick + + + + OnOKClick + + + + + + + + diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem_base.h b/pagelayout_editor/dialogs/dialog_new_dataitem_base.h new file mode 100644 index 0000000000..0627efa481 --- /dev/null +++ b/pagelayout_editor/dialogs/dialog_new_dataitem_base.h @@ -0,0 +1,76 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __DIALOG_NEW_DATAITEM_BASE_H__ +#define __DIALOG_NEW_DATAITEM_BASE_H__ + +#include +#include +#include +class DIALOG_SHIM; + +#include "dialog_shim.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class DIALOG_NEW_DATAITEM_BASE +/////////////////////////////////////////////////////////////////////////////// +class DIALOG_NEW_DATAITEM_BASE : public DIALOG_SHIM +{ + private: + + protected: + wxStaticText* m_staticTextPosX; + wxTextCtrl* m_textCtrlPosX; + wxStaticText* m_staticTextPosY; + wxTextCtrl* m_textCtrlPosY; + wxStaticText* m_staticTextOrgPos; + wxChoice* m_choiceCornerPos; + wxStaticLine* m_staticline2; + wxBoxSizer* m_SizerEndPosition; + wxStaticText* m_staticTextEndX; + wxTextCtrl* m_textCtrlEndX; + wxStaticText* m_staticTextEndY; + wxTextCtrl* m_textCtrlEndY; + wxStaticText* m_staticTextOrgPos1; + wxChoice* m_choiceCornerEnd; + wxStaticLine* m_staticlineEndXY; + wxBoxSizer* m_SizerText; + wxStaticText* m_staticText10; + wxTextCtrl* m_textCtrlText; + wxStaticLine* m_staticline3; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOKClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + DIALOG_NEW_DATAITEM_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("New Item"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 328,290 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_NEW_DATAITEM_BASE(); + +}; + +#endif //__DIALOG_NEW_DATAITEM_BASE_H__ diff --git a/pagelayout_editor/dialogs/dialogs_for_printing.cpp b/pagelayout_editor/dialogs/dialogs_for_printing.cpp new file mode 100644 index 0000000000..32305ce102 --- /dev/null +++ b/pagelayout_editor/dialogs/dialogs_for_printing.cpp @@ -0,0 +1,237 @@ +/** + * @file dialogs_for_printing.cpp + */ + +/* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/** + * Custom print out for printing schematics. + */ +class PLEDITOR_PRINTOUT : public wxPrintout +{ +private: + PL_EDITOR_FRAME* m_parent; + +public: + PLEDITOR_PRINTOUT( PL_EDITOR_FRAME* aParent, const wxString& aTitle ) : + wxPrintout( aTitle ) + { + wxASSERT( aParent != NULL ); + m_parent = aParent; + } + + bool OnPrintPage( int aPageNum ); + bool HasPage( int aPageNum ) { return ( aPageNum <= 2 ); } + void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo ); + void DrawPage( int aPageNum ); +}; + +/** + * Custom print preview frame. + */ +class PLEDITOR_PREVIEW_FRAME : public wxPreviewFrame +{ +public: + PLEDITOR_PREVIEW_FRAME( wxPrintPreview* aPreview, PL_EDITOR_FRAME* aParent, + const wxString& aTitle, const wxPoint& aPos = wxDefaultPosition, + const wxSize& aSize = wxDefaultSize ) : + wxPreviewFrame( aPreview, aParent, aTitle, aPos, aSize ) + { + } + + bool Show( bool show ) // overload + { + bool ret; + + // Show or hide the window. If hiding, save current position and size. + // If showing, use previous position and size. + if( show ) + { + ret = wxPreviewFrame::Show( show ); + + if( s_size.x != 0 && s_size.y != 0 ) + SetSize( s_pos.x, s_pos.y, s_size.x, s_size.y, 0 ); + } + else + { + // Save the dialog's position & size before hiding + s_size = GetSize(); + s_pos = GetPosition(); + + ret = wxPreviewFrame::Show( show ); + } + return ret; + } + +private: + static wxPoint s_pos; + static wxSize s_size; + + DECLARE_CLASS( PLEDITOR_PREVIEW_FRAME ) + DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS( PLEDITOR_PREVIEW_FRAME ) +}; + +wxPoint PLEDITOR_PREVIEW_FRAME::s_pos; +wxSize PLEDITOR_PREVIEW_FRAME::s_size; + +IMPLEMENT_CLASS( PLEDITOR_PREVIEW_FRAME, wxPreviewFrame ) + +BEGIN_EVENT_TABLE( PLEDITOR_PREVIEW_FRAME, wxPreviewFrame ) + EVT_CLOSE( PLEDITOR_PREVIEW_FRAME::OnCloseWindow ) +END_EVENT_TABLE() + + +bool PLEDITOR_PRINTOUT::OnPrintPage( int aPageNum ) +{ + DrawPage( aPageNum ); + return true; +} + + +void PLEDITOR_PRINTOUT::GetPageInfo( int* minPage, int* maxPage, + int* selPageFrom, int* selPageTo ) +{ + *minPage = *selPageFrom = 1; + *maxPage = *selPageTo = 2; +} + +/* + * This is the real print function: print the active screen + */ +void PLEDITOR_PRINTOUT::DrawPage( int aPageNum ) +{ + int oldZoom; + wxPoint tmp_startvisu; + wxSize pageSizeIU; // Page size in internal units + wxPoint old_org; + EDA_RECT oldClipBox; + wxRect fitRect; + wxDC* dc = GetDC(); + EDA_DRAW_PANEL* panel = m_parent->GetCanvas(); + PL_EDITOR_SCREEN* screen = m_parent->GetScreen(); + + // Save current scale factor, offsets, and clip box. + tmp_startvisu = screen->m_StartVisu; + oldZoom = screen->GetZoom(); + old_org = screen->m_DrawOrg; + + oldClipBox = *panel->GetClipBox(); + + // Change clip box to print the whole page. + #define MAX_VALUE (INT_MAX/2) // MAX_VALUE is the max we can use in an integer + // and that allows calculations without overflow + panel->SetClipBox( EDA_RECT( wxPoint( 0, 0 ), wxSize( MAX_VALUE, MAX_VALUE ) ) ); + + // Change scale factor and offset to print the whole page. + + pageSizeIU = m_parent->GetPageSettings().GetSizeIU(); + FitThisSizeToPaper( pageSizeIU ); + fitRect = GetLogicalPaperRect(); + + int xoffset = ( fitRect.width - pageSizeIU.x ) / 2; + int yoffset = ( fitRect.height - pageSizeIU.y ) / 2; + + OffsetLogicalOrigin( xoffset, yoffset ); + + GRResetPenAndBrush( dc ); + GRForceBlackPen( true ); + screen->m_IsPrinting = true; + + EDA_COLOR_T bg_color = g_DrawBgColor; + g_DrawBgColor = WHITE; + + screen->m_ScreenNumber = aPageNum; + m_parent->DrawWorkSheet( dc, screen, 0, IU_PER_MILS, wxEmptyString ); + + g_DrawBgColor = bg_color; + screen->m_IsPrinting = false; + panel->SetClipBox( oldClipBox ); + + GRForceBlackPen( false ); + + screen->m_StartVisu = tmp_startvisu; + screen->m_DrawOrg = old_org; + screen->SetZoom( oldZoom ); +} + + +int InvokeDialogPrint( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData, + wxPageSetupDialogData* aPageSetupData ) +{ + PLEDITOR_PRINTOUT dlg( aCaller, _("Print Page Layout") ); + int pageCount = 2; + + wxPrintDialogData printDialogData( *aPrintData ); + printDialogData.SetMaxPage( pageCount ); + + if( pageCount > 1 ) + printDialogData.EnablePageNumbers( true ); + + wxPrinter printer( &printDialogData ); + PLEDITOR_PRINTOUT printout( aCaller, _( "Print Page Layout" ) ); + + if( !printer.Print( aCaller, &printout, true ) ) + { + if( wxPrinter::GetLastError() == wxPRINTER_ERROR ) + wxMessageBox( _( "An error occurred attempting to print the page layout." ), + _( "Printing" ), wxOK ); + return 0; + } + + *aPageSetupData = printer.GetPrintDialogData().GetPrintData(); + + return 1; +} + +int InvokeDialogPrintPreview( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData ) +{ + // Pass two printout objects: for preview, and possible printing. + wxString title = _( "Preview" ); + wxPrintPreview* preview = new wxPrintPreview( new PLEDITOR_PRINTOUT( aCaller, title ), + new PLEDITOR_PRINTOUT( aCaller, title ), + aPrintData ); + + preview->SetZoom( 100 ); + + PLEDITOR_PREVIEW_FRAME* frame = new PLEDITOR_PREVIEW_FRAME( preview, aCaller, title ); + + frame->Initialize(); + frame->Center(); + frame->Show( true ); + + return 1; +} + diff --git a/pagelayout_editor/dialogs/properties_frame_base.cpp b/pagelayout_editor/dialogs/properties_frame_base.cpp new file mode 100644 index 0000000000..8ba9f2faaf --- /dev/null +++ b/pagelayout_editor/dialogs/properties_frame_base.cpp @@ -0,0 +1,532 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "properties_frame_base.h" + +/////////////////////////////////////////////////////////////////////////// + +PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +{ + wxBoxSizer* bSizerpanel; + bSizerpanel = new wxBoxSizer( wxVERTICAL ); + + m_scrolledLeftWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_scrolledLeftWindow->SetScrollRate( 5, 5 ); + wxBoxSizer* bSizerMain; + bSizerMain = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerGeneralOpts; + bSizerGeneralOpts = new wxBoxSizer( wxVERTICAL ); + + m_staticTextDefVal = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Default Values:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefVal->Wrap( -1 ); + bSizerGeneralOpts->Add( m_staticTextDefVal, 0, wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerDefTextSize; + bSizerDefTextSize = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerDefTsizeX; + bSizerDefTsizeX = new wxBoxSizer( wxVERTICAL ); + + m_staticTextDefTsX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Size X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefTsX->Wrap( -1 ); + bSizerDefTsizeX->Add( m_staticTextDefTsX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlDefaultTextSizeX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerDefTsizeX->Add( m_textCtrlDefaultTextSizeX, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerDefTextSize->Add( bSizerDefTsizeX, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerDefTsizeY; + bSizerDefTsizeY = new wxBoxSizer( wxVERTICAL ); + + m_staticTextDefTsY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Size Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefTsY->Wrap( -1 ); + bSizerDefTsizeY->Add( m_staticTextDefTsY, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlDefaultTextSizeY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerDefTsizeY->Add( m_textCtrlDefaultTextSizeY, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerDefTextSize->Add( bSizerDefTsizeY, 1, wxEXPAND, 5 ); + + + bSizerGeneralOpts->Add( bSizerDefTextSize, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizerDefLineWidth; + bSizerDefLineWidth = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer25; + bSizer25 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextDefLineW = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Line Thickness (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDefLineW->Wrap( -1 ); + bSizer25->Add( m_staticTextDefLineW, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlDefaultLineWidth = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer25->Add( m_textCtrlDefaultLineWidth, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerDefLineWidth->Add( bSizer25, 1, 0, 5 ); + + wxBoxSizer* bSizerDefTextThickness; + bSizerDefTextThickness = new wxBoxSizer( wxVERTICAL ); + + m_staticText22 = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Thickness"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText22->Wrap( -1 ); + bSizerDefTextThickness->Add( m_staticText22, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlDefaultTextThickness = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerDefTextThickness->Add( m_textCtrlDefaultTextThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerDefLineWidth->Add( bSizerDefTextThickness, 1, 0, 5 ); + + + bSizerGeneralOpts->Add( bSizerDefLineWidth, 0, wxEXPAND, 5 ); + + + bSizerMain->Add( bSizerGeneralOpts, 0, 0, 5 ); + + m_staticline7 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline7, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_buttonOK = new wxButton( m_scrolledLeftWindow, wxID_ANY, _("Accept"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonOK->SetDefault(); + bSizerMain->Add( m_buttonOK, 0, wxALIGN_BOTTOM|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline8 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline8, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerButt; + bSizerButt = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerType; + bSizerType = new wxBoxSizer( wxVERTICAL ); + + m_staticTextType = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextType->Wrap( -1 ); + m_staticTextType->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerType->Add( m_staticTextType, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlType = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + bSizerType->Add( m_textCtrlType, 0, wxRIGHT|wxLEFT, 5 ); + + + bSizerButt->Add( bSizerType, 0, 0, 5 ); + + wxBoxSizer* bSizerPageOpt; + bSizerPageOpt = new wxBoxSizer( wxVERTICAL ); + + m_staticTextPageOpt = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Page 1 option"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPageOpt->Wrap( -1 ); + m_staticTextPageOpt->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); + + bSizerPageOpt->Add( m_staticTextPageOpt, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + wxString m_choicePageOptChoices[] = { _("None"), _("Page 1 only"), _("Not on page 1") }; + int m_choicePageOptNChoices = sizeof( m_choicePageOptChoices ) / sizeof( wxString ); + m_choicePageOpt = new wxChoice( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePageOptNChoices, m_choicePageOptChoices, 0 ); + m_choicePageOpt->SetSelection( 0 ); + bSizerPageOpt->Add( m_choicePageOpt, 0, wxRIGHT|wxLEFT, 5 ); + + + bSizerButt->Add( bSizerPageOpt, 0, 0, 5 ); + + + bSizerMain->Add( bSizerButt, 0, 0, 5 ); + + m_staticline5 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline5, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_SizerTextOptions = new wxBoxSizer( wxVERTICAL ); + + m_staticTextText = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextText->Wrap( -1 ); + m_SizerTextOptions->Add( m_staticTextText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlText = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_SizerTextOptions->Add( m_textCtrlText, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + wxBoxSizer* bSizerFontOpt; + bSizerFontOpt = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerJustify; + bSizerJustify = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextHjust = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("H justification"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHjust->Wrap( -1 ); + bSizerJustify->Add( m_staticTextHjust, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + wxString m_choiceHjustifyChoices[] = { _("Left"), _("Center"), _("Right") }; + int m_choiceHjustifyNChoices = sizeof( m_choiceHjustifyChoices ) / sizeof( wxString ); + m_choiceHjustify = new wxChoice( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHjustifyNChoices, m_choiceHjustifyChoices, 0 ); + m_choiceHjustify->SetSelection( 0 ); + bSizerJustify->Add( m_choiceHjustify, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_checkBoxBold = new wxCheckBox( m_scrolledLeftWindow, wxID_ANY, _("Bold"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerJustify->Add( m_checkBoxBold, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizerFontOpt->Add( bSizerJustify, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizerBoldItalic; + bSizerBoldItalic = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextVjust = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("V justification"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVjust->Wrap( -1 ); + bSizerBoldItalic->Add( m_staticTextVjust, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + wxString m_choiceVjustifyChoices[] = { _("Top"), _("Center"), _("Bottom") }; + int m_choiceVjustifyNChoices = sizeof( m_choiceVjustifyChoices ) / sizeof( wxString ); + m_choiceVjustify = new wxChoice( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVjustifyNChoices, m_choiceVjustifyChoices, 0 ); + m_choiceVjustify->SetSelection( 1 ); + bSizerBoldItalic->Add( m_choiceVjustify, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_checkBoxItalic = new wxCheckBox( m_scrolledLeftWindow, wxID_ANY, _("Italic"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerBoldItalic->Add( m_checkBoxItalic, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizerFontOpt->Add( bSizerBoldItalic, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_SizerTextOptions->Add( bSizerFontOpt, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTextSize; + bSizerTextSize = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerTsizeX; + bSizerTsizeX = new wxBoxSizer( wxVERTICAL ); + + m_staticTexTsizeX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Height (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTexTsizeX->Wrap( -1 ); + bSizerTsizeX->Add( m_staticTexTsizeX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlTextSizeX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerTsizeX->Add( m_textCtrlTextSizeX, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerTextSize->Add( bSizerTsizeX, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTsizeY; + bSizerTsizeY = new wxBoxSizer( wxVERTICAL ); + + m_staticTextTsizeY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Width (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTsizeY->Wrap( -1 ); + bSizerTsizeY->Add( m_staticTextTsizeY, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlTextSizeY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerTsizeY->Add( m_textCtrlTextSizeY, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerTextSize->Add( bSizerTsizeY, 1, wxEXPAND, 5 ); + + + m_SizerTextOptions->Add( bSizerTextSize, 0, 0, 5 ); + + m_staticTextConstraints = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Constraints:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConstraints->Wrap( -1 ); + m_SizerTextOptions->Add( m_staticTextConstraints, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerConstraints; + bSizerConstraints = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer42; + bSizer42 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextConstraintX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Max Size X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConstraintX->Wrap( -1 ); + bSizer42->Add( m_staticTextConstraintX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlConstraintX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer42->Add( m_textCtrlConstraintX, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerConstraints->Add( bSizer42, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer52; + bSizer52 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextConstraintY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Max Size Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConstraintY->Wrap( -1 ); + bSizer52->Add( m_staticTextConstraintY, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlConstraintY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer52->Add( m_textCtrlConstraintY, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerConstraints->Add( bSizer52, 1, wxEXPAND, 5 ); + + + m_SizerTextOptions->Add( bSizerConstraints, 0, 0, 5 ); + + m_staticline6 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + m_SizerTextOptions->Add( m_staticline6, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + + bSizerMain->Add( m_SizerTextOptions, 0, wxEXPAND, 5 ); + + m_staticTextComment = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Comment"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextComment->Wrap( -1 ); + bSizerMain->Add( m_staticTextComment, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlComment = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerMain->Add( m_textCtrlComment, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_staticline2 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerPos; + bSizerPos = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerPosXY; + bSizerPosXY = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer4; + bSizer4 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextPosX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Pos X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPosX->Wrap( -1 ); + bSizer4->Add( m_staticTextPosX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlPosX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer4->Add( m_textCtrlPosX, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerPosXY->Add( bSizer4, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer5; + bSizer5 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextPosY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Pos Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPosY->Wrap( -1 ); + bSizer5->Add( m_staticTextPosY, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrlPosY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer5->Add( m_textCtrlPosY, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + + bSizerPosXY->Add( bSizer5, 1, wxEXPAND, 5 ); + + + bSizerPos->Add( bSizerPosXY, 1, 0, 5 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextOrgPos = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextOrgPos->Wrap( -1 ); + bSizer6->Add( m_staticTextOrgPos, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_comboBoxCornerPos = new wxComboBox( m_scrolledLeftWindow, wxID_ANY, _("Lower Right"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + m_comboBoxCornerPos->Append( _("Upper Right") ); + m_comboBoxCornerPos->Append( _("Upper Left") ); + m_comboBoxCornerPos->Append( _("Lower Right") ); + m_comboBoxCornerPos->Append( _("Lower Left") ); + m_comboBoxCornerPos->SetSelection( 2 ); + bSizer6->Add( m_comboBoxCornerPos, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerPos->Add( bSizer6, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerMain->Add( bSizerPos, 0, 0, 5 ); + + m_SizerEndPosition = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerEndXY; + bSizerEndXY = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer41; + bSizer41 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextEndX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("End X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextEndX->Wrap( -1 ); + bSizer41->Add( m_staticTextEndX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlEndX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer41->Add( m_textCtrlEndX, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerEndXY->Add( bSizer41, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer51; + bSizer51 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextEndY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("End Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextEndY->Wrap( -1 ); + bSizer51->Add( m_staticTextEndY, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlEndY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer51->Add( m_textCtrlEndY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerEndXY->Add( bSizer51, 1, wxEXPAND, 5 ); + + + m_SizerEndPosition->Add( bSizerEndXY, 1, 0, 5 ); + + wxBoxSizer* bSizer61; + bSizer61 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextOrgEnd = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Origin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextOrgEnd->Wrap( -1 ); + bSizer61->Add( m_staticTextOrgEnd, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_comboBoxCornerEnd = new wxComboBox( m_scrolledLeftWindow, wxID_ANY, _("Lower Right"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + m_comboBoxCornerEnd->Append( _("Upper Right") ); + m_comboBoxCornerEnd->Append( _("Upper Left") ); + m_comboBoxCornerEnd->Append( _("Lower Right") ); + m_comboBoxCornerEnd->Append( _("Lower Left") ); + m_comboBoxCornerEnd->SetSelection( 2 ); + bSizer61->Add( m_comboBoxCornerEnd, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + m_SizerEndPosition->Add( bSizer61, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerMain->Add( m_SizerEndPosition, 0, 0, 5 ); + + wxBoxSizer* bSizerLineThickness; + bSizerLineThickness = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerthickness; + bSizerthickness = new wxBoxSizer( wxVERTICAL ); + + m_staticTextThickness = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextThickness->Wrap( -1 ); + bSizerthickness->Add( m_staticTextThickness, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlThickness = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerthickness->Add( m_textCtrlThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerLineThickness->Add( bSizerthickness, 0, wxEXPAND, 5 ); + + m_staticTextInfoThickness = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Set to 0 to use default"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextInfoThickness->Wrap( -1 ); + bSizerLineThickness->Add( m_staticTextInfoThickness, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerMain->Add( bSizerLineThickness, 0, 0, 5 ); + + m_SizerRotation = new wxBoxSizer( wxVERTICAL ); + + m_staticline1 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + m_SizerRotation->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerRotation; + bSizerRotation = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextRot = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Rotation"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRot->Wrap( -1 ); + bSizerRotation->Add( m_staticTextRot, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlRotation = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerRotation->Add( m_textCtrlRotation, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_SizerRotation->Add( bSizerRotation, 0, wxEXPAND, 5 ); + + + bSizerMain->Add( m_SizerRotation, 0, wxEXPAND, 5 ); + + m_staticline4 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline4, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticTextRepeatPrms = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Repeat parameters:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRepeatPrms->Wrap( -1 ); + bSizerMain->Add( m_staticTextRepeatPrms, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer20; + bSizer20 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer611; + bSizer611 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextRepeatCnt = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Repeat count"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRepeatCnt->Wrap( -1 ); + bSizer611->Add( m_staticTextRepeatCnt, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlRepeatCount = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer611->Add( m_textCtrlRepeatCount, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizer20->Add( bSizer611, 1, 0, 5 ); + + m_SizerTextIncrementLabel = new wxBoxSizer( wxVERTICAL ); + + m_staticTextInclabel = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Text Increment"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextInclabel->Wrap( -1 ); + m_SizerTextIncrementLabel->Add( m_staticTextInclabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlTextIncrement = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_SizerTextIncrementLabel->Add( m_textCtrlTextIncrement, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizer20->Add( m_SizerTextIncrementLabel, 1, wxEXPAND, 5 ); + + + bSizerMain->Add( bSizer20, 0, 0, 5 ); + + wxBoxSizer* bSizerPosY1; + bSizerPosY1 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer411; + bSizer411 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextStepX = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Step X (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStepX->Wrap( -1 ); + bSizer411->Add( m_staticTextStepX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlStepX = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer411->Add( m_textCtrlStepX, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizerPosY1->Add( bSizer411, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer511; + bSizer511 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextStepY = new wxStaticText( m_scrolledLeftWindow, wxID_ANY, _("Step Y (mm)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStepY->Wrap( -1 ); + bSizer511->Add( m_staticTextStepY, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_textCtrlStepY = new wxTextCtrl( m_scrolledLeftWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer511->Add( m_textCtrlStepY, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizerPosY1->Add( bSizer511, 1, wxEXPAND, 5 ); + + + bSizerMain->Add( bSizerPosY1, 0, 0, 5 ); + + m_staticline3 = new wxStaticLine( m_scrolledLeftWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline3, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + + m_scrolledLeftWindow->SetSizer( bSizerMain ); + m_scrolledLeftWindow->Layout(); + bSizerMain->Fit( m_scrolledLeftWindow ); + bSizerpanel->Add( m_scrolledLeftWindow, 1, wxEXPAND | wxALL, 5 ); + + + this->SetSizer( bSizerpanel ); + this->Layout(); + + // Connect Events + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this ); +} + +PANEL_PROPERTIES_BASE::~PANEL_PROPERTIES_BASE() +{ + // Disconnect Events + m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PROPERTIES_BASE::OnAcceptPrms ), NULL, this ); + +} diff --git a/pagelayout_editor/dialogs/properties_frame_base.fbp b/pagelayout_editor/dialogs/properties_frame_base.fbp new file mode 100644 index 0000000000..b4c7d6f9d7 --- /dev/null +++ b/pagelayout_editor/dialogs/properties_frame_base.fbp @@ -0,0 +1,6374 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + properties_frame_base + 1000 + none + 1 + properties_frame + + . + + 1 + 1 + 1 + 1 + 0 + + 0 + wxAUI_MGR_DEFAULT + + + 1 + 1 + impl_virtual + + + 0 + wxID_ANY + + + PANEL_PROPERTIES_BASE + + 315,756 + + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerpanel + wxVERTICAL + none + + 5 + wxEXPAND | wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_scrolledLeftWindow + 1 + + + protected + 1 + + Resizable + 5 + 5 + 1 + + + 0 + + + + wxHSCROLL|wxVSCROLL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerMain + wxVERTICAL + none + + 5 + + 0 + + + bSizerGeneralOpts + wxVERTICAL + none + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Default Values: + + 0 + + + 0 + + 1 + m_staticTextDefVal + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizerDefTextSize + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizerDefTsizeX + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Size X (mm) + + 0 + + + 0 + + 1 + m_staticTextDefTsX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlDefaultTextSizeX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizerDefTsizeY + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Size Y (mm) + + 0 + + + 0 + + 1 + m_staticTextDefTsY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlDefaultTextSizeY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizerDefLineWidth + wxHORIZONTAL + none + + 5 + + 1 + + + bSizer25 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Line Thickness (mm) + + 0 + + + 0 + + 1 + m_staticTextDefLineW + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlDefaultLineWidth + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 1 + + + bSizerDefTextThickness + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Thickness + + 0 + + + 0 + + 1 + m_staticText22 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlDefaultTextThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline7 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_BOTTOM|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Accept + + 0 + + + 0 + + 1 + m_buttonOK + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnAcceptPrms + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline8 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerButt + wxHORIZONTAL + none + + 5 + + 0 + + + bSizerType + wxVERTICAL + none + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + ,90,92,-1,70,0 + 0 + 0 + wxID_ANY + Type + + 0 + + + 0 + + 1 + m_staticTextType + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlType + 1 + + + protected + 1 + + Resizable + 1 + + wxTE_READONLY + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerPageOpt + wxVERTICAL + none + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + ,90,90,-1,70,0 + 0 + 0 + wxID_ANY + Page 1 option + + 0 + + + 0 + + 1 + m_staticTextPageOpt + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "None" "Page 1 only" "Not on page 1" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choicePageOpt + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline5 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + m_SizerTextOptions + wxVERTICAL + protected + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text + + 0 + + + 0 + + 1 + m_staticTextText + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlText + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizerFontOpt + wxVERTICAL + none + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizerJustify + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + H justification + + 0 + + + 0 + + 1 + m_staticTextHjust + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Left" "Center" "Right" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceHjustify + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Bold + + 0 + + + 0 + + 1 + m_checkBoxBold + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 1 + + + bSizerBoldItalic + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + V justification + + 0 + + + 0 + + 1 + m_staticTextVjust + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Top" "Center" "Bottom" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceVjustify + 1 + + + protected + 1 + + Resizable + 1 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Italic + + 0 + + + 0 + + 1 + m_checkBoxItalic + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerTextSize + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizerTsizeX + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Height (mm) + + 0 + + + 0 + + 1 + m_staticTexTsizeX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlTextSizeX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizerTsizeY + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Width (mm) + + 0 + + + 0 + + 1 + m_staticTextTsizeY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlTextSizeY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Constraints: + + 0 + + + 0 + + 1 + m_staticTextConstraints + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerConstraints + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer42 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Max Size X (mm) + + 0 + + + 0 + + 1 + m_staticTextConstraintX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlConstraintX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer52 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Max Size Y (mm) + + 0 + + + 0 + + 1 + m_staticTextConstraintY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlConstraintY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline6 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Comment + + 0 + + + 0 + + 1 + m_staticTextComment + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlComment + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline2 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerPos + wxHORIZONTAL + none + + 5 + + 1 + + + bSizerPosXY + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizer4 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Pos X (mm) + + 0 + + + 0 + + 1 + m_staticTextPosX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + -1,-1 + 1 + m_textCtrlPosX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer5 + wxVERTICAL + none + + 5 + wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Pos Y (mm) + + 0 + + + 0 + + 1 + m_staticTextPosY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlPosY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizer6 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Origin + + 0 + + + 0 + + 1 + m_staticTextOrgPos + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Upper Right" "Upper Left" "Lower Right" "Lower Left" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_comboBoxCornerPos + 1 + + + protected + 1 + + Resizable + 2 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + Lower Right + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + m_SizerEndPosition + wxHORIZONTAL + protected + + 5 + + 1 + + + bSizerEndXY + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizer41 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + End X (mm) + + 0 + + + 0 + + 1 + m_staticTextEndX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlEndX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer51 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + End Y (mm) + + 0 + + + 0 + + 1 + m_staticTextEndY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlEndY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bSizer61 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Origin + + 0 + + + 0 + + 1 + m_staticTextOrgEnd + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Upper Right" "Upper Left" "Lower Right" "Lower Left" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_comboBoxCornerEnd + 1 + + + protected + 1 + + Resizable + 2 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + Lower Right + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerLineThickness + wxHORIZONTAL + none + + 5 + wxEXPAND + 0 + + + bSizerthickness + wxVERTICAL + none + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Thickness + + 0 + + + 0 + + 1 + m_staticTextThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Set to 0 to use default + + 0 + + + 0 + + 1 + m_staticTextInfoThickness + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + m_SizerRotation + wxVERTICAL + protected + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline1 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizerRotation + wxHORIZONTAL + none + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Rotation + + 0 + + + 0 + + 1 + m_staticTextRot + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlRotation + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline4 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Repeat parameters: + + 0 + + + 0 + + 1 + m_staticTextRepeatPrms + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizer20 + wxHORIZONTAL + none + + 5 + + 1 + + + bSizer611 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Repeat count + + 0 + + + 0 + + 1 + m_staticTextRepeatCnt + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlRepeatCount + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + m_SizerTextIncrementLabel + wxVERTICAL + protected + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Text Increment + + 0 + + + 0 + + 1 + m_staticTextInclabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlTextIncrement + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizerPosY1 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer411 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Step X (mm) + + 0 + + + 0 + + 1 + m_staticTextStepX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlStepX + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer511 + wxVERTICAL + none + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Step Y (mm) + + 0 + + + 0 + + 1 + m_staticTextStepY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlStepY + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_staticline3 + 1 + + + protected + 1 + + Resizable + 1 + + wxLI_HORIZONTAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pagelayout_editor/dialogs/properties_frame_base.h b/pagelayout_editor/dialogs/properties_frame_base.h new file mode 100644 index 0000000000..4be6a8ec76 --- /dev/null +++ b/pagelayout_editor/dialogs/properties_frame_base.h @@ -0,0 +1,124 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 8 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __PROPERTIES_FRAME_BASE_H__ +#define __PROPERTIES_FRAME_BASE_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class PANEL_PROPERTIES_BASE +/////////////////////////////////////////////////////////////////////////////// +class PANEL_PROPERTIES_BASE : public wxPanel +{ + private: + + protected: + wxScrolledWindow* m_scrolledLeftWindow; + wxStaticText* m_staticTextDefVal; + wxStaticText* m_staticTextDefTsX; + wxTextCtrl* m_textCtrlDefaultTextSizeX; + wxStaticText* m_staticTextDefTsY; + wxTextCtrl* m_textCtrlDefaultTextSizeY; + wxStaticText* m_staticTextDefLineW; + wxTextCtrl* m_textCtrlDefaultLineWidth; + wxStaticText* m_staticText22; + wxTextCtrl* m_textCtrlDefaultTextThickness; + wxStaticLine* m_staticline7; + wxButton* m_buttonOK; + wxStaticLine* m_staticline8; + wxStaticText* m_staticTextType; + wxTextCtrl* m_textCtrlType; + wxStaticText* m_staticTextPageOpt; + wxChoice* m_choicePageOpt; + wxStaticLine* m_staticline5; + wxBoxSizer* m_SizerTextOptions; + wxStaticText* m_staticTextText; + wxTextCtrl* m_textCtrlText; + wxStaticText* m_staticTextHjust; + wxChoice* m_choiceHjustify; + wxCheckBox* m_checkBoxBold; + wxStaticText* m_staticTextVjust; + wxChoice* m_choiceVjustify; + wxCheckBox* m_checkBoxItalic; + wxStaticText* m_staticTexTsizeX; + wxTextCtrl* m_textCtrlTextSizeX; + wxStaticText* m_staticTextTsizeY; + wxTextCtrl* m_textCtrlTextSizeY; + wxStaticText* m_staticTextConstraints; + wxStaticText* m_staticTextConstraintX; + wxTextCtrl* m_textCtrlConstraintX; + wxStaticText* m_staticTextConstraintY; + wxTextCtrl* m_textCtrlConstraintY; + wxStaticLine* m_staticline6; + wxStaticText* m_staticTextComment; + wxTextCtrl* m_textCtrlComment; + wxStaticLine* m_staticline2; + wxStaticText* m_staticTextPosX; + wxTextCtrl* m_textCtrlPosX; + wxStaticText* m_staticTextPosY; + wxTextCtrl* m_textCtrlPosY; + wxStaticText* m_staticTextOrgPos; + wxComboBox* m_comboBoxCornerPos; + wxBoxSizer* m_SizerEndPosition; + wxStaticText* m_staticTextEndX; + wxTextCtrl* m_textCtrlEndX; + wxStaticText* m_staticTextEndY; + wxTextCtrl* m_textCtrlEndY; + wxStaticText* m_staticTextOrgEnd; + wxComboBox* m_comboBoxCornerEnd; + wxStaticText* m_staticTextThickness; + wxTextCtrl* m_textCtrlThickness; + wxStaticText* m_staticTextInfoThickness; + wxBoxSizer* m_SizerRotation; + wxStaticLine* m_staticline1; + wxStaticText* m_staticTextRot; + wxTextCtrl* m_textCtrlRotation; + wxStaticLine* m_staticline4; + wxStaticText* m_staticTextRepeatPrms; + wxStaticText* m_staticTextRepeatCnt; + wxTextCtrl* m_textCtrlRepeatCount; + wxBoxSizer* m_SizerTextIncrementLabel; + wxStaticText* m_staticTextInclabel; + wxTextCtrl* m_textCtrlTextIncrement; + wxStaticText* m_staticTextStepX; + wxTextCtrl* m_textCtrlStepX; + wxStaticText* m_staticTextStepY; + wxTextCtrl* m_textCtrlStepY; + wxStaticLine* m_staticline3; + + // Virtual event handlers, overide them in your derived class + virtual void OnAcceptPrms( wxCommandEvent& event ) { event.Skip(); } + + + public: + + PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 315,756 ), long style = wxTAB_TRAVERSAL ); + ~PANEL_PROPERTIES_BASE(); + +}; + +#endif //__PROPERTIES_FRAME_BASE_H__ diff --git a/pagelayout_editor/events_functions.cpp b/pagelayout_editor/events_functions.cpp new file mode 100644 index 0000000000..99126cd1fa --- /dev/null +++ b/pagelayout_editor/events_functions.cpp @@ -0,0 +1,419 @@ +/** + * @file pagelayout_editor/events_called_functions.cpp + * @brief page layout editor command event functions. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +BEGIN_EVENT_TABLE( PL_EDITOR_FRAME, EDA_DRAW_FRAME ) + EVT_CLOSE( PL_EDITOR_FRAME::OnCloseWindow ) + + // Desing tree event: + EVT_TREE_SEL_CHANGED( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeSelection ) + EVT_TREE_ITEM_MIDDLE_CLICK( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeMiddleClick ) + EVT_TREE_ITEM_RIGHT_CLICK( ID_DESIGN_TREE_FRAME, PL_EDITOR_FRAME::OnTreeRightClick ) + + // Menu Files: + EVT_MENU( wxID_NEW, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( wxID_OPEN, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( wxID_SAVE, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( wxID_SAVEAS, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( wxID_FILE, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( ID_LOAD_DEFAULT_PAGE_LAYOUT, PL_EDITOR_FRAME::Files_io ) + EVT_MENU( ID_OPEN_POLYGON_DESCR_FILE, PL_EDITOR_FRAME::Files_io ) + + EVT_MENU( ID_GEN_PLOT, PL_EDITOR_FRAME::ToPlotter ) + + EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, PL_EDITOR_FRAME::OnFileHistory ) + + EVT_MENU( wxID_EXIT, PL_EDITOR_FRAME::OnQuit ) + + // menu Preferences + EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END, + PL_EDITOR_FRAME::Process_Config ) + + EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, EDA_DRAW_FRAME::SetLanguage ) + + // menu Postprocess + EVT_MENU( ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR, + EDA_BASE_FRAME::OnSelectPreferredEditor ) + + // Menu Help + EVT_MENU( wxID_HELP, EDA_DRAW_FRAME::GetKicadHelp ) + EVT_MENU( wxID_ABOUT, EDA_DRAW_FRAME::GetKicadAbout ) + + EVT_TOOL( wxID_CUT, PL_EDITOR_FRAME::Process_Special_Functions ) + EVT_TOOL( wxID_UNDO, PL_EDITOR_FRAME::Process_Special_Functions ) + EVT_TOOL( wxID_REDO, PL_EDITOR_FRAME::Process_Special_Functions ) + EVT_TOOL( wxID_PRINT, PL_EDITOR_FRAME::ToPrinter ) + EVT_TOOL( wxID_PREVIEW, PL_EDITOR_FRAME::ToPrinter ) + EVT_TOOL( ID_SHEET_SET, PL_EDITOR_FRAME::Process_Special_Functions ) + EVT_TOOL( ID_SHOW_REAL_MODE, PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode ) + EVT_TOOL( ID_SHOW_LPEDITOR_MODE, PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode ) + EVT_CHOICE( ID_SELECT_COORDINATE_ORIGIN, PL_EDITOR_FRAME::OnSelectCoordOriginCorner) + EVT_CHOICE( ID_SELECT_PAGE_NUMBER, PL_EDITOR_FRAME::Process_Special_Functions) + + // Vertical toolbar: + EVT_TOOL( ID_NO_TOOL_SELECTED, PL_EDITOR_FRAME::Process_Special_Functions ) + + EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE, + PL_EDITOR_FRAME::Process_Special_Functions ) + + EVT_UPDATE_UI( ID_SHOW_REAL_MODE, PL_EDITOR_FRAME::OnUpdateTitleBlockDisplayNormalMode ) + EVT_UPDATE_UI( ID_SHOW_LPEDITOR_MODE, PL_EDITOR_FRAME::OnUpdateTitleBlockDisplaySpecialMode ) + +END_EVENT_TABLE() + + +/* Handles the selection of tools, menu, and popup menu commands. + */ +void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event ) +{ + int id = event.GetId(); + int idx; + wxString msg; + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + WORKSHEET_DATAITEM* item = NULL; + wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); + cmd.SetEventObject( this ); + + switch( id ) + { + case ID_NO_TOOL_SELECTED: + SetToolID( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor(), wxEmptyString ); + break; + + case ID_SELECT_PAGE_NUMBER: + m_canvas->Refresh(); + break; + + case ID_SHEET_SET: + { + DIALOG_PAGES_SETTINGS dlg( this ); + dlg.SetWksFileName( GetCurrFileName() ); + dlg.EnableWksFileNamePicker( false ); + dlg.ShowModal(); + + cmd.SetId( ID_ZOOM_PAGE ); + wxPostEvent( this, cmd ); + } + break; + + case ID_POPUP_CANCEL_CURRENT_COMMAND: + break; + + case ID_POPUP_DESIGN_TREE_ITEM_DELETE: + case ID_POPUP_ITEM_DELETE: + case wxID_CUT: + // Delete item, and select the previous item + item = m_treePagelayout->GetPageLayoutSelectedItem(); + + if( item == NULL ) + break; + + idx = pglayout.GetItemIndex( item ); + pglayout.Remove( item ); + RebuildDesignTree(); + + if( id == ID_POPUP_DESIGN_TREE_ITEM_DELETE ) + { + item = pglayout.GetItem( (unsigned) (idx-1) ); + + if( item ) + m_treePagelayout->SelectCell( item ); + } + + item = NULL; + OnModify(); + m_canvas->Refresh(); + break; + + case ID_POPUP_ITEM_ADD_LINE: + idx = m_treePagelayout->GetSelectedItemIndex(); + item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_SEGMENT, idx ); + if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) + { + pglayout.Remove( item ); + RebuildDesignTree(); + item = NULL; + } + m_canvas->Refresh(); + break; + + case ID_POPUP_ITEM_ADD_RECT: + idx = m_treePagelayout->GetSelectedItemIndex(); + item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_RECT, idx ); + if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) + { + pglayout.Remove( item ); + RebuildDesignTree(); + item = NULL; + } + m_canvas->Refresh(); + break; + + case ID_POPUP_ITEM_ADD_TEXT: + idx = m_treePagelayout->GetSelectedItemIndex(); + item = AddPageLayoutItem( WORKSHEET_DATAITEM::WS_TEXT, idx ); + if( InvokeDialogNewItem( this, item ) == wxID_CANCEL ) + { + pglayout.Remove( item ); + RebuildDesignTree(); + item = NULL; + } + m_canvas->Refresh(); + break; + + case ID_POPUP_ITEM_ADD_POLY: + cmd.SetId( ID_OPEN_POLYGON_DESCR_FILE ); + wxPostEvent( this, cmd ); + break; + + case ID_POPUP_ITEM_PLACE: + item = GetScreen()->GetCurItem(); + m_canvas->SetMouseCapture( NULL, NULL ); + GetScreen()->SetCurItem( NULL ); + break; + + case ID_POPUP_ITEM_PLACE_CANCEL: + if( m_canvas->IsMouseCaptured() ) + m_canvas->EndMouseCapture(); + break; + + case ID_POPUP_ITEM_MOVE_START_POINT: + case ID_POPUP_ITEM_MOVE_END_POINT: + case ID_POPUP_ITEM_MOVE: + item = m_treePagelayout->GetPageLayoutSelectedItem(); + MoveItem( item ); + break; + + default: + wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Special_Functions error" ) ); + break; + } + + if( item ) + { + OnModify(); + m_propertiesPagelayout->CopyPrmsFromItemToPanel( item ); + m_treePagelayout->SelectCell( item ); + } + +} + + +DPOINT initialPosition; // The initial position of the item to move, in mm +wxPoint initialPositionUi; // The initial position of the item to move, in Ui +wxPoint initialCursorPosition; // The initial position of the cursor + +static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase ) +{ + PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) aPanel->GetScreen(); + WORKSHEET_DATAITEM *item = screen->GetCurItem(); + + wxCHECK_RET( (item != NULL), wxT( "Cannot move NULL item." ) ); + + wxPoint newpos = screen->GetCrossHairPosition() + - ( initialCursorPosition - initialPositionUi ); + + if( (item->GetFlags() & LOCATE_STARTPOINT) ) + item->MoveStartPointToUi( newpos ); + else if( (item->GetFlags() & LOCATE_ENDPOINT) ) + item->MoveEndPointToUi( newpos ); + else + item->MoveToUi( newpos ); + + // Draw the item item at it's new position. + aPanel->Refresh(); +} + +static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) +{ + PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) aPanel->GetScreen(); + WORKSHEET_DATAITEM *item = screen->GetCurItem(); + if( (item->GetFlags() & LOCATE_STARTPOINT) ) + { + item->MoveStartPointTo( initialPosition ); + } + else if( (item->GetFlags() & LOCATE_ENDPOINT) ) + { + item->MoveEndPointTo( initialPosition ); + } + else + item->MoveTo( initialPosition ); + + aPanel->SetMouseCapture( NULL, NULL ); + screen->SetCurItem( NULL ); + aPanel->Refresh(); +} + +void PL_EDITOR_FRAME::MoveItem( WORKSHEET_DATAITEM* aItem ) +{ + wxCHECK_RET( aItem != NULL, wxT( "Cannot move NULL item" ) ); + initialPosition = aItem->GetStartPos(); + initialPositionUi = aItem->GetStartPosUi(); + initialCursorPosition = GetScreen()->GetCrossHairPosition(); + + if( (aItem->GetFlags() & LOCATE_ENDPOINT) ) + { + initialPosition = aItem->GetEndPos(); + initialPositionUi = aItem->GetEndPosUi(); + } + + if( aItem->GetFlags() & (LOCATE_STARTPOINT|LOCATE_ENDPOINT) ) + { + GetScreen()->SetCrossHairPosition( initialPositionUi, false ); + m_canvas->MoveCursorToCrossHair(); + initialCursorPosition = GetScreen()->GetCrossHairPosition(); + m_canvas->Refresh(); + } + + m_canvas->SetMouseCapture( moveItem, abortMoveItem ); + GetScreen()->SetCurItem( aItem ); +} + +/* called when the user select one of the 4 page corner as corner + * reference (or the left top paper corner) + */ +void PL_EDITOR_FRAME::OnSelectCoordOriginCorner( wxCommandEvent& event ) +{ + m_originSelectChoice = m_originSelectBox->GetSelection(); + UpdateStatusBar(); // Update grid origin + m_canvas->Refresh(); +} + +void PL_EDITOR_FRAME::OnSelectTitleBlockDisplayMode( wxCommandEvent& event ) +{ + WORKSHEET_DATAITEM::m_SpecialMode = (event.GetId() == ID_SHOW_LPEDITOR_MODE); + m_canvas->Refresh(); +} + +void PL_EDITOR_FRAME::OnQuit( wxCommandEvent& event ) +{ + Close( true ); +} + +/** + * Function SetLanguage + * called on a language menu selection + * Update Layer manager title and tabs texts + */ +void PL_EDITOR_FRAME::SetLanguage( wxCommandEvent& event ) +{ + EDA_DRAW_FRAME::SetLanguage( event ); +} + +void PL_EDITOR_FRAME::ToPlotter(wxCommandEvent& event) +{ + wxMessageBox( wxT("Not yet available")); +} + + +void PL_EDITOR_FRAME::ToPrinter(wxCommandEvent& event) +{ + // static print data and page setup data, to remember settings during the session + static wxPrintData* s_PrintData; + static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL; + + const PAGE_INFO& pageInfo = GetPageSettings(); + + if( s_PrintData == NULL ) // First print + { + s_PrintData = new wxPrintData(); + s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGH; + } + + if( !s_PrintData->Ok() ) + { + wxMessageBox( _( "Error Init Printer info" ) ); + return; + } + + if( s_pageSetupData == NULL ) + s_pageSetupData = new wxPageSetupDialogData( *s_PrintData ); + + s_pageSetupData->SetPaperId( pageInfo.GetPaperId() ); + s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() ); + + if( pageInfo.IsCustom() ) + { + if( pageInfo.IsPortrait() ) + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ), + Mils2mm( pageInfo.GetHeightMils() ) ) ); + else + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ), + Mils2mm( pageInfo.GetWidthMils() ) ) ); + } + + *s_PrintData = s_pageSetupData->GetPrintData(); + + if( event.GetId() == wxID_PREVIEW ) + InvokeDialogPrintPreview( this, s_PrintData ); + else + InvokeDialogPrint( this, s_PrintData, s_pageSetupData ); +} + +void PL_EDITOR_FRAME::OnTreeSelection( wxTreeEvent& event ) +{ + WORKSHEET_DATAITEM* item = GetSelectedItem(); + + if( item ) + m_propertiesPagelayout->CopyPrmsFromItemToPanel( item ); + + m_canvas->Refresh(); +} + +void PL_EDITOR_FRAME::OnTreeMiddleClick( wxTreeEvent& event ) +{ +} + +void PL_EDITOR_FRAME::OnTreeRightClick( wxTreeEvent& event ) +{ + m_treePagelayout->SelectCell( event.GetItem() ); + + wxMenu popMenu; + + AddMenuItem( &popMenu, ID_POPUP_ITEM_ADD_LINE, _( "Add line" ), + KiBitmap( add_dashed_line_xpm ) ); + AddMenuItem( &popMenu, ID_POPUP_ITEM_ADD_RECT, _( "Add rect" ), + KiBitmap( add_rectangle_xpm ) ); + AddMenuItem( &popMenu, ID_POPUP_ITEM_ADD_TEXT, _( "Add text" ), + KiBitmap( add_text_xpm ) ); + AddMenuItem( &popMenu, ID_POPUP_ITEM_ADD_POLY, _( "Import poly descr file" ), + KiBitmap( add_polygon_xpm ) ); + + popMenu.AppendSeparator(); + AddMenuItem( &popMenu, ID_POPUP_DESIGN_TREE_ITEM_DELETE, _( "Delete" ), + KiBitmap( delete_xpm ) ); + + PopupMenu( &popMenu ); +} + + +void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplayNormalMode( wxUpdateUIEvent& event ) +{ + event.Check( WORKSHEET_DATAITEM::m_SpecialMode == false ); +} + +void PL_EDITOR_FRAME::OnUpdateTitleBlockDisplaySpecialMode( wxUpdateUIEvent& event ) +{ + event.Check( WORKSHEET_DATAITEM::m_SpecialMode == true ); +} diff --git a/pagelayout_editor/files.cpp b/pagelayout_editor/files.cpp new file mode 100644 index 0000000000..36fd543cd9 --- /dev/null +++ b/pagelayout_editor/files.cpp @@ -0,0 +1,254 @@ +/** + * @file gerbview/files.cpp + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +void PL_EDITOR_FRAME::OnFileHistory( wxCommandEvent& event ) +{ + wxString filename; + + filename = GetFileFromHistory( event.GetId(), _( "Page Layout Description File" ) ); + + if( filename != wxEmptyString ) + { + if( GetScreen()->IsModify() && !IsOK( this, + _( "The current page layout has been modified.\n" + "Do you wish to discard the changes?" ) ) ) + return; + + m_canvas->EndMouseCapture( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor() ); + ::wxSetWorkingDirectory( ::wxPathOnly( filename ) ); + if( LoadPageLayoutDescrFile( filename ) ) + { + wxString msg; + msg.Printf( _("File <%s> loaded"), GetChars( filename ) ); + SetStatusText( msg ); + } + RebuildDesignTree(); + m_canvas->Refresh(); + } +} + +/* File commands. */ +void PL_EDITOR_FRAME::Files_io( wxCommandEvent& event ) +{ + wxString msg; + int id = event.GetId(); + wxString filename = GetCurrFileName(); + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + + if( filename.IsEmpty() && id == wxID_SAVE ) + id = wxID_SAVEAS; + + switch( id ) + { + case ID_LOAD_DEFAULT_PAGE_LAYOUT: + case wxID_NEW: + case wxID_OPEN: + if( GetScreen()->IsModify() && !IsOK( this, + _( "The current page layout has been modified.\n" + "Do you wish to discard the changes?" ) ) ) + return; + break; + + default: + break; + } + + + switch( id ) + { + case ID_LOAD_DEFAULT_PAGE_LAYOUT: + pglayout.SetPageLayout(); + RebuildDesignTree(); + m_canvas->Refresh(); + GetScreen()->ClrModify(); + break; + + case wxID_NEW: + pglayout.AllowVoidList( true ); + SetCurrFileName( wxEmptyString ); + pglayout.ClearList(); + RebuildDesignTree(); + m_canvas->Refresh(); + GetScreen()->ClrModify(); + break; + + case ID_OPEN_POLYGON_DESCR_FILE: + { + wxFileDialog openFileDialog(this, _("Open polygon descr file"), + wxEmptyString, + wxEmptyString, PageLayoutDescrFileWildcard, wxFD_OPEN); + + if (openFileDialog.ShowModal() == wxID_CANCEL) + return; + + filename = openFileDialog.GetPath(); + if( ! InsertPageLayoutDescrFile( filename ) ) + { + wxString msg; + msg.Printf( _("Unable to load %s file"), GetChars( filename ) ); + wxMessageBox( msg ); + } + else + { + GetScreen()->SetModify(); + RebuildDesignTree(); + m_canvas->Refresh(); + msg.Printf( _("File <%s> inserted"), GetChars( filename ) ); + SetStatusText( msg ); + } + } + break; + + case wxID_OPEN: + { + wxFileDialog openFileDialog(this, _("Open file"), wxEmptyString, + wxEmptyString, PageLayoutDescrFileWildcard, wxFD_OPEN); + + if (openFileDialog.ShowModal() == wxID_CANCEL) + return; + + filename = openFileDialog.GetPath(); + if( ! LoadPageLayoutDescrFile( filename ) ) + { + wxString msg; + msg.Printf( _("Unable to load %s file"), GetChars( filename ) ); + wxMessageBox( msg ); + } + else + { + RebuildDesignTree(); + m_canvas->Refresh(); + msg.Printf( _("File <%s> loaded"), GetChars( filename ) ); + SetStatusText( msg ); + } + } + break; + + case wxID_SAVE: + if( !SavePageLayoutDescrFile( filename ) ) + { + msg.Printf( _("Unable to write <%s>"), GetChars( filename ) ); + wxMessageBox( msg ); + } + else + { + msg.Printf( _("File <%s> written"), GetChars( filename ) ); + SetStatusText( msg ); + } + break; + + case wxID_SAVEAS: + { + wxFileDialog openFileDialog(this, _("Create file"), wxEmptyString, + wxEmptyString, PageLayoutDescrFileWildcard, wxFD_SAVE); + + if (openFileDialog.ShowModal() == wxID_CANCEL) + return; + + filename = openFileDialog.GetPath(); + if( !SavePageLayoutDescrFile( filename ) ) + { + wxString msg; + msg.Printf( _("Unable to create <%s>"), GetChars( filename ) ); + wxMessageBox( msg ); + } + + else + { + msg.Printf( _("File <%s> written"), GetChars( filename ) ); + SetStatusText( msg ); + if( GetCurrFileName().IsEmpty() ) + SetCurrFileName( filename ); + } + } + break; + + default: + wxMessageBox( wxT( "File_io: unexpected command id" ) ); + break; + } +} + +/* Loads a .kicad_wks page layout descr file + */ +bool PL_EDITOR_FRAME::LoadPageLayoutDescrFile( const wxString& aFullFileName ) +{ + if( wxFileExists( aFullFileName ) ) + { + WORKSHEET_LAYOUT::GetTheInstance().SetPageLayout( aFullFileName ); + SetCurrFileName( aFullFileName ); + UpdateFileHistory( aFullFileName ); + GetScreen()->ClrModify(); + return true; + } + + return false; +} + +/* Inserts a .kicad_wks page layout descr file + * same as LoadPageLayoutDescrFile, but the new data is added + * to the previous data. + */ +bool PL_EDITOR_FRAME::InsertPageLayoutDescrFile( const wxString& aFullFileName ) +{ + if( wxFileExists( aFullFileName ) ) + { + const bool append = true; + WORKSHEET_LAYOUT::GetTheInstance().SetPageLayout( aFullFileName, append ); + return true; + } + + return false; +} + + +/* Save the current layout in a .kicad_wks page layout descr file + */ +bool PL_EDITOR_FRAME::SavePageLayoutDescrFile( const wxString& aFullFileName ) +{ + if( ! aFullFileName.IsEmpty() ) + { + WORKSHEET_LAYOUT::GetTheInstance().Save( aFullFileName ); + GetScreen()->ClrModify(); + return true; + } + + return false; +} diff --git a/pagelayout_editor/hotkeys.cpp b/pagelayout_editor/hotkeys.cpp new file mode 100644 index 0000000000..9231e3ebfb --- /dev/null +++ b/pagelayout_editor/hotkeys.cpp @@ -0,0 +1,132 @@ +/** + * @file gerbview/hotkeys.cpp + */ + +#include +#include +#include +#include + +#include +#include +#include + + +/* How to add a new hotkey: + * add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION. + * add a new EDA_HOTKEY entry like: + * static EDA_HOTKEY HkMyNewEntry(wxT("Command Label"), MY_NEW_ID_FUNCTION, default key value); + * "Command Label" is the name used in hotkey list display, and the identifier in the + * hotkey list file MY_NEW_ID_FUNCTION is an equivalent id function used in the switch + * in OnHotKey() function. default key value is the default hotkey for this command. + * Can be overrided by the user hotkey list file add the HkMyNewEntry pointer in the + * s_board_edit_Hotkey_List list ( or/and the s_module_edit_Hotkey_List list) Add the + * new code in the switch in OnHotKey() function. when the variable PopupOn is true, + * an item is currently edited. This can be usefull if the new function cannot be + * executed while an item is currently being edited + * ( For example, one cannot start a new wire when a component is moving.) + * + * Note: If an hotkey is a special key, be sure the corresponding wxWidget keycode (WXK_XXXX) + * is handled in the hotkey_name_descr s_Hotkey_Name_List list (see hotkeys_basic.cpp) + * and see this list for some ascii keys (space ...) + */ + +/* local variables */ +/* Hotkey list: */ +static EDA_HOTKEY HkResetLocalCoord( wxT( "Reset Local Coordinates" ), + HK_RESET_LOCAL_COORD, ' ' ); +static EDA_HOTKEY HkZoomAuto( wxT( "Zoom Auto" ), HK_ZOOM_AUTO, WXK_HOME ); +static EDA_HOTKEY HkZoomCenter( wxT( "Zoom Center" ), HK_ZOOM_CENTER, WXK_F4 ); +static EDA_HOTKEY HkZoomRedraw( wxT( "Zoom Redraw" ), HK_ZOOM_REDRAW, WXK_F3 ); +static EDA_HOTKEY HkZoomOut( wxT( "Zoom Out" ), HK_ZOOM_OUT, WXK_F2 ); +static EDA_HOTKEY HkZoomIn( wxT( "Zoom In" ), HK_ZOOM_IN, WXK_F1 ); +static EDA_HOTKEY HkHelp( wxT( "Help (this window)" ), HK_HELP, '?' ); +static EDA_HOTKEY HkSwitchUnits( wxT( "Switch Units" ), HK_SWITCH_UNITS, 'U' ); + +// List of common hotkey descriptors +EDA_HOTKEY* s_PlEditor_Hotkey_List[] = { + &HkHelp, + &HkZoomIn, &HkZoomOut, &HkZoomRedraw, &HkZoomCenter, + &HkZoomAuto, &HkSwitchUnits, &HkResetLocalCoord, + NULL +}; + + +// list of sections and corresponding hotkey list for GerbView (used to create an hotkey +// config file) +struct EDA_HOTKEY_CONFIG s_PlEditor_Hokeys_Descr[] = +{ + { &g_CommonSectionTag, s_PlEditor_Hotkey_List, NULL }, + { NULL, NULL, NULL } +}; + + +/* + * Function OnHotKey. + * ** Commands are case insensitive ** + * Some commands are relatives to the item under the mouse cursor + * aDC = current device context + * aHotkeyCode = hotkey code (ascii or wxWidget code for special keys) + * aPosition The cursor position in logical (drawing) units. + * aItem = NULL or pointer on a EDA_ITEM under the mouse cursor + */ +void PL_EDITOR_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem ) +{ + wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); + cmd.SetEventObject( this ); + + /* Convert lower to upper case (the usual toupper function has problem with non ascii + * codes like function keys */ + if( (aHotkeyCode >= 'a') && (aHotkeyCode <= 'z') ) + aHotkeyCode += 'A' - 'a'; + + EDA_HOTKEY * HK_Descr = GetDescriptorFromHotkey( aHotkeyCode, s_PlEditor_Hotkey_List ); + + if( HK_Descr == NULL ) + return; + + switch( HK_Descr->m_Idcommand ) + { + default: + case HK_NOT_FOUND: + return; + + case HK_HELP: // Display Current hotkey list + DisplayHotkeyList( this, s_PlEditor_Hokeys_Descr ); + break; + + case HK_ZOOM_IN: + cmd.SetId( ID_POPUP_ZOOM_IN ); + GetEventHandler()->ProcessEvent( cmd ); + break; + + case HK_ZOOM_OUT: + cmd.SetId( ID_POPUP_ZOOM_OUT ); + GetEventHandler()->ProcessEvent( cmd ); + break; + + case HK_ZOOM_REDRAW: + cmd.SetId( ID_ZOOM_REDRAW ); + GetEventHandler()->ProcessEvent( cmd ); + break; + + case HK_ZOOM_CENTER: + cmd.SetId( ID_POPUP_ZOOM_CENTER ); + GetEventHandler()->ProcessEvent( cmd ); + break; + + case HK_ZOOM_AUTO: + cmd.SetId( ID_ZOOM_PAGE ); + GetEventHandler()->ProcessEvent( cmd ); + break; + + case HK_RESET_LOCAL_COORD: /*Reset the relative coord */ + GetScreen()->m_O_Curseur = GetScreen()->GetCrossHairPosition(); + break; + + case HK_SWITCH_UNITS: + g_UserUnit = (g_UserUnit == INCHES ) ? MILLIMETRES : INCHES; + break; + + } +} diff --git a/pagelayout_editor/hotkeys.h b/pagelayout_editor/hotkeys.h new file mode 100644 index 0000000000..f3f2b39e8d --- /dev/null +++ b/pagelayout_editor/hotkeys.h @@ -0,0 +1,23 @@ +/** + * gerbview/hotkeys.h + */ + +#ifndef GERBVIEW_KOTKEYS_H_ +#define GERBVIEW_KOTKEYS_H_ + +#include + +// List of hot keys id. +// see also enum common_hotkey_id_commnand in hotkeys_basic.h +// for shared hotkeys id +enum hotkey_id_commnand { + HK_SWITCH_UNITS = HK_COMMON_END, + HK_SWITCH_GBR_ITEMS_DISPLAY_MODE, + HK_SWITCH_LAYER_TO_NEXT, + HK_SWITCH_LAYER_TO_PREVIOUS +}; + +// List of hotkey descriptors for GerbView. +extern struct EDA_HOTKEY_CONFIG s_PlEditor_Hokeys_Descr[]; + +#endif // GERBVIEW_KOTKEYS_H_ diff --git a/pagelayout_editor/invoke_pl_editor_dialog.h b/pagelayout_editor/invoke_pl_editor_dialog.h new file mode 100644 index 0000000000..a54f3633e3 --- /dev/null +++ b/pagelayout_editor/invoke_pl_editor_dialog.h @@ -0,0 +1,65 @@ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck + * Copyright (C) 2013 KiCad Developers, see change_log.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 + */ + +// This header is an insolation layer between top most frames and any number of +// DIALOG classes which can be called from a frame window. +// It is a place to put invocation functions for [modal] dialogs, with benefits: +// +// 1) The information about each dialog class is not exposed to the frame. +// So therefore the DIALOG class can often be kept out of a header file entirely. +// +// 2) The information about the calling frame is not necessarily exposed to +// to the called dialog class, at least not in here. + +// The actual InvokeDialog() function is usually coded at the bottom of the +// DIALOG_.cpp file. + + +#ifndef INVOKE_PL_EDITOR_DIALOG_H_ +#define INVOKE_PL_EDITOR_DIALOG_H_ + +// Often this is not used in the prototypes, since wxFrame is good enough and would +// represent maximum information hiding. +class PL_EDITOR_FRAME; +class WORKSHEET_DATAITEM; +class wxPrintData; +class wxPageSetupDialogData; + + +/// Create and show DIALOG_NEW_DATAITEM and return whatever +/// DIALOG_NEW_DATAITEM::ShowModal() returns. +int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WORKSHEET_DATAITEM* aItem ); + +/// Create and show a print dialog +/// returns 1 if OK, 0 , there is a problem. +int InvokeDialogPrint( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData, + wxPageSetupDialogData* aPageSetupData ); + +/// Create and show a print preview dialog +/// returns 1 if OK, 0 , there is a problem. +int InvokeDialogPrintPreview( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData ); + +#endif // INVOKE_PL_EDITOR_DIALOG_H_ diff --git a/pagelayout_editor/menubar.cpp b/pagelayout_editor/menubar.cpp new file mode 100644 index 0000000000..0809c674c3 --- /dev/null +++ b/pagelayout_editor/menubar.cpp @@ -0,0 +1,179 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file pl_editor/menubar.cpp + * @brief (Re)Create the main menubar for Pl_Editor + */ +#include + +#include + +#include +#include +#include +#include + + +void PL_EDITOR_FRAME::ReCreateMenuBar( void ) +{ + // Create and try to get the current menubar + wxMenuBar* menuBar = GetMenuBar(); + + if( !menuBar ) + menuBar = new wxMenuBar(); + + // Delete all existing menus so they can be rebuilt. + // This allows language changes of the menu text on the fly. + menuBar->Freeze(); + + while( menuBar->GetMenuCount() ) + delete menuBar->Remove( 0 ); + + // Recreate all menus: + + // Menu File: + wxMenu* fileMenu = new wxMenu; + + // Load + AddMenuItem( fileMenu, wxID_NEW, + _( "&New Page Layout Design" ), + wxEmptyString, KiBitmap( pagelayout_new_xpm ) ); + AddMenuItem( fileMenu, wxID_OPEN, + _( "Load &Page Layout File" ), + wxEmptyString, KiBitmap( pagelayout_load_xpm ) ); + AddMenuItem( fileMenu, ID_LOAD_DEFAULT_PAGE_LAYOUT, + _( "Load &Default Page Layout" ), + wxEmptyString, KiBitmap( pagelayout_load_default_xpm ) ); + + // Recent gerber files + static wxMenu* openRecentMenu; + + // Add this menu to list menu managed by m_fileHistory + // (the file history will be updated when adding/removing files in history + if( openRecentMenu ) + wxGetApp().GetFileHistory().RemoveMenu( openRecentMenu ); + + openRecentMenu = new wxMenu(); + wxGetApp().GetFileHistory().UseMenu( openRecentMenu ); + wxGetApp().GetFileHistory().AddFilesToMenu(); + AddMenuItem( fileMenu, openRecentMenu, + wxID_ANY, _( "Open &Recent Page Layout File" ), + wxEmptyString, KiBitmap( pagelayout_recent_xpm ) ); + + fileMenu->AppendSeparator(); + // Save current sheet + AddMenuItem( fileMenu, wxID_SAVE, + _( "&Save Page Layout Design" ), + wxEmptyString, KiBitmap( save_xpm ) ); + + // Save current sheet as + AddMenuItem( fileMenu, wxID_SAVEAS, + _( "Save Page Layout Design &As" ), + wxEmptyString, KiBitmap( save_as_xpm ) ); + + // Print + fileMenu->AppendSeparator(); + AddMenuItem( fileMenu, wxID_PRINT, _( "&Print" ), + wxEmptyString, KiBitmap( print_button_xpm ) ); + AddMenuItem( fileMenu, wxID_PREVIEW, _( "Print Pre&view" ), + wxEmptyString, KiBitmap( print_button_xpm ) ); + + // Separator + fileMenu->AppendSeparator(); + + // Exit + AddMenuItem( fileMenu, wxID_EXIT, + _( "E&xit" ), + _( "Quit Pl_Editor" ), + KiBitmap( exit_xpm ) ); + + // Menu for configuration and preferences + wxMenu* configMenu = new wxMenu; + + // Options (Preferences on WXMAC) +#ifdef __WXMAC__ + configMenu->Append(wxID_PREFERENCES); +#else + AddMenuItem( configMenu, + wxID_PREFERENCES, + _( "&Options" ), + _( "Set options to draw items" ), + KiBitmap( preference_xpm ) ); +#endif // __WXMAC__ + + + // Language submenu + wxGetApp().AddMenuLanguageList( configMenu ); + + // Hotkey submenu + AddHotkeyConfigMenu( configMenu ); + + // Menu miscellaneous + wxMenu* miscellaneousMenu = new wxMenu; + + // Separator + miscellaneousMenu->AppendSeparator(); + + // Text editor + AddMenuItem( miscellaneousMenu, + ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR, + _( "&Text Editor" ), + _( "Select your preferred text editor" ), + KiBitmap( editor_xpm ) ); + + // Menu Help + wxMenu* helpMenu = new wxMenu; + + // Version info + AddHelpVersionInfoMenuEntry( helpMenu ); + + // Contents + AddMenuItem( helpMenu, + wxID_HELP, + _( "&Contents" ), + _( "Open the GerbView handbook" ), + KiBitmap( help_xpm ) ); + + // About GerbView + AddMenuItem( helpMenu, + wxID_ABOUT, + _( "&About Pl_Editor" ), + _( "About page layout description editor" ), + KiBitmap( online_help_xpm ) ); + + // Append menus to the menubar + menuBar->Append( fileMenu, _( "&File" ) ); + menuBar->Append( configMenu, _( "&Preferences" ) ); + menuBar->Append( miscellaneousMenu, _( "&Miscellaneous" ) ); + menuBar->Append( helpMenu, _( "&Help" ) ); + + menuBar->Thaw(); + + // Associate the menu bar with the frame, if no previous menubar + if( GetMenuBar() == NULL ) + SetMenuBar( menuBar ); + else + menuBar->Refresh(); +} diff --git a/pagelayout_editor/onleftclick.cpp b/pagelayout_editor/onleftclick.cpp new file mode 100644 index 0000000000..1f3ba01981 --- /dev/null +++ b/pagelayout_editor/onleftclick.cpp @@ -0,0 +1,79 @@ +/** + * @file pagelayout_editor/onleftclick.cpp + * @brief functions called on left or double left click mouse event + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 CERN + * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* Process the command triggered by the left button of the mouse when a tool + * is already selected. + */ +void PL_EDITOR_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) +{ + WORKSHEET_DATAITEM* item = GetScreen()->GetCurItem(); + + if( item ) // An item is currently in edit: place it + { + m_propertiesPagelayout->CopyPrmsFromItemToPanel( item ); + m_canvas->SetMouseCapture( NULL, NULL ); + GetScreen()->SetCurItem( NULL ); + m_canvas->Refresh(); + return; + } + + item = m_treePagelayout->GetPageLayoutSelectedItem(); + WORKSHEET_DATAITEM* newitem = Locate( aPosition ); + + if( newitem == NULL ) + return; + + if( newitem != item ) + { + item = newitem; + m_treePagelayout->SelectCell( item ); + m_canvas->Refresh(); + } +} + + +/* Called on a double click of left mouse button. + */ +void PL_EDITOR_FRAME::OnLeftDClick( wxDC* aDC, const wxPoint& aPosition ) +{ + // Currently: no nothing +} diff --git a/pagelayout_editor/onrightclick.cpp b/pagelayout_editor/onrightclick.cpp new file mode 100644 index 0000000000..d816549c56 --- /dev/null +++ b/pagelayout_editor/onrightclick.cpp @@ -0,0 +1,106 @@ +/** + * @file pagelayout_editor/onrightclick.cpp + * @brief functions called on rigth click mouse event +*/ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 CERN + * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +/* Prepare the right-click pullup menu. + * The menu already has a list of zoom commands. + */ +bool PL_EDITOR_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* aPopMenu ) +{ + bool busy = GetScreen()->GetCurItem() != NULL; + + if( ! busy ) // No item currently edited + { + WORKSHEET_DATAITEM* item = m_treePagelayout->GetPageLayoutSelectedItem(); + WORKSHEET_DATAITEM* newitem = Locate( aPosition ); + + if( newitem && newitem != item ) + { + item = newitem; + m_treePagelayout->SelectCell( item ); + m_canvas->Refresh(); + } + + // Add menus to edit and delete the item + if( newitem ) + { + if( (newitem->GetFlags() & LOCATE_STARTPOINT) ) + AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE_START_POINT, _( "Move Start Point" ), + KiBitmap( move_xpm ) ); + + if( (item->GetFlags() & LOCATE_ENDPOINT ) ) + AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE_END_POINT, _( "Move End Point" ), + KiBitmap( move_xpm ) ); + + AddMenuItem( aPopMenu, ID_POPUP_ITEM_MOVE, _( "Move" ), + KiBitmap( move_xpm ) ); + aPopMenu->AppendSeparator(); + + AddMenuItem( aPopMenu, ID_POPUP_ITEM_DELETE, _( "Delete" ), + KiBitmap( delete_xpm ) ); + aPopMenu->AppendSeparator(); + } + } + else // An item is currently in edit + { + AddMenuItem( aPopMenu, ID_POPUP_ITEM_PLACE, _( "Place" ), + KiBitmap( move_xpm ) ); + AddMenuItem( aPopMenu, ID_POPUP_ITEM_PLACE_CANCEL, _( "Cancel" ), + KiBitmap( cancel_xpm ) ); + aPopMenu->AppendSeparator(); + } + + if( ! busy ) + { + AddMenuItem( aPopMenu, ID_POPUP_ITEM_ADD_LINE, _( "Add line" ), + KiBitmap( add_dashed_line_xpm ) ); + AddMenuItem( aPopMenu, ID_POPUP_ITEM_ADD_RECT, _( "Add rect" ), + KiBitmap( add_rectangle_xpm ) ); + AddMenuItem( aPopMenu, ID_POPUP_ITEM_ADD_TEXT, _( "Add text" ), + KiBitmap( add_text_xpm ) ); + AddMenuItem( aPopMenu, ID_POPUP_ITEM_ADD_POLY, _( "Import poly descr file" ), + KiBitmap( add_polygon_xpm ) ); + + aPopMenu->AppendSeparator(); + } + + return true; +} diff --git a/pagelayout_editor/page_layout_writer.cpp b/pagelayout_editor/page_layout_writer.cpp new file mode 100644 index 0000000000..8728de15b4 --- /dev/null +++ b/pagelayout_editor/page_layout_writer.cpp @@ -0,0 +1,411 @@ +/** + * @file page_layout_writer.cpp + * @brief write an S expression of description of graphic items and texts + * to build a title block and page layout + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2013 Jean-Pierre Charras . + * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors. + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace TB_READER_T; + +#define double2Str Double2Str + +// A helper function to write tokens: +static const char* getTokenName( T aTok ) +{ + return PAGE_LAYOUT_READER_LEXER::TokenName( aTok ); +} + +// A basic helper class to write a page layout description +// Not used alone, a file writer or a string writer should be +// derived to use it +// Therefore the constructor is protected +class WORKSHEET_LAYOUT_IO +{ +protected: + OUTPUTFORMATTER* m_out; + + WORKSHEET_LAYOUT_IO() {} + virtual ~WORKSHEET_LAYOUT_IO() {} + +public: + void Format( WORKSHEET_LAYOUT* aPageLayout ) const + throw( IO_ERROR ); + + void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const + throw( IO_ERROR ); + +private: + void format( WORKSHEET_LAYOUT* aPageLayout ) const + throw( IO_ERROR ); + + void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const throw( IO_ERROR ); + void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const throw( IO_ERROR ); + void format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel ) + const throw( IO_ERROR ); + void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const + throw( IO_ERROR ); + void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR ); + void formatOptions( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR ); +}; + +// A helper class to write a page layout description to a file +class WORKSHEET_LAYOUT_FILEIO: public WORKSHEET_LAYOUT_IO +{ + FILE_OUTPUTFORMATTER * m_fileout; + +public: + WORKSHEET_LAYOUT_FILEIO( const wxString& aFilename ): + WORKSHEET_LAYOUT_IO() + { + try + { + m_fileout = new FILE_OUTPUTFORMATTER( aFilename ); + m_out = m_fileout; + } + catch( IO_ERROR ioe ) + { + wxMessageBox( ioe.errorText, _("Write Page Layout Error" ) ); + } + } + + ~WORKSHEET_LAYOUT_FILEIO() + { + delete m_fileout; + } +}; + +// A helper class to write a page layout description to a string +class WORKSHEET_LAYOUT_STRINGIO: public WORKSHEET_LAYOUT_IO +{ + STRING_FORMATTER * m_writer; + wxString & m_output; + +public: + WORKSHEET_LAYOUT_STRINGIO( wxString& aOutputString ): + WORKSHEET_LAYOUT_IO(), m_output( aOutputString ) + { + try + { + m_writer = new STRING_FORMATTER(); + m_out = m_writer; + } + catch( IO_ERROR ioe ) + { + wxMessageBox( ioe.errorText, _("Write Page Layout Error" ) ); + } + } + + ~WORKSHEET_LAYOUT_STRINGIO() + { + m_output = FROM_UTF8( m_writer->GetString().c_str() ); + delete m_writer; + } +}; + +/** + * Function Save: aFullFileName = the filename of the file to created + */ +void WORKSHEET_LAYOUT::Save( const wxString& aFullFileName ) +{ + WORKSHEET_LAYOUT_FILEIO writer( aFullFileName ); + writer.Format( this ); +} + + +void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const + throw( IO_ERROR ) +{ + switch( aItem->GetType() ) + { + case WORKSHEET_DATAITEM::WS_TEXT: + format( (WORKSHEET_DATAITEM_TEXT*) aItem, aNestLevel ); + break; + + case WORKSHEET_DATAITEM::WS_SEGMENT: + case WORKSHEET_DATAITEM::WS_RECT: + format( aItem, aNestLevel ); + break; + + case WORKSHEET_DATAITEM::WS_POLYPOLYGON: + format( (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem, aNestLevel ); + break; + + default: + wxFAIL_MSG( wxT( "Cannot format item" ) ); + } +} + +void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const + throw( IO_ERROR ) +{ + LOCALE_IO toggle; // switch on/off the locale "C" notation + + m_out->Print( 0, "( page_layout\n" ); + + // Setup + int nestLevel = 1; + m_out->Print( nestLevel, "(%s", getTokenName( T_setup ) ); + m_out->Print( 0, "(textsize %s %s)", + double2Str( TB_DEFAULT_TEXTSIZE ).c_str(), + double2Str( TB_DEFAULT_TEXTSIZE ).c_str() ); + m_out->Print( 0, "(linewidth %s)", double2Str( 0.15 ).c_str() ); + m_out->Print( 0, "(textlinewidth %s)", double2Str( 0.15 ).c_str() ); + m_out->Print( 0, ")\n" ); + + // Save the graphical items on the page layout + for( unsigned ii = 0; ii < aPageLayout->GetCount(); ii++ ) + { + WORKSHEET_DATAITEM* item = aPageLayout->GetItem( ii ); + Format( item, nestLevel ); + } + + m_out->Print( 0, ")\n" ); +} + +void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const + throw( IO_ERROR ) +{ + m_out->Print( aNestLevel, "(%s", getTokenName( T_tbtext ) ); + m_out->Print( 0, " %s", m_out->Quotew( aItem->m_TextBase ).c_str() ); + m_out->Print( 0, " (%s %s)", getTokenName( T_name ), + m_out->Quotew( aItem->m_Name ).c_str() ); + + formatCoordinate( getTokenName( T_pos ), aItem->m_Pos ); + formatOptions( aItem ); + + if( aItem->m_Orient ) + m_out->Print( 0, " (%s %s)", getTokenName( T_rotate ), + double2Str(aItem->m_Orient ).c_str() ); + + // Write font info + bool write_size = aItem->m_TextSize.x != 0.0 && aItem->m_TextSize.y != 0.0; + if( write_size || aItem->IsBold() || aItem->IsItalic() ) + { + m_out->Print( 0, " (%s", getTokenName( T_font ) ); + + if( write_size ) + { + m_out->Print( 0, " (%s %s %s)", getTokenName( T_size ), + double2Str(aItem->m_TextSize.x ).c_str(), + double2Str(aItem->m_TextSize.y ).c_str() ); + } + if( aItem->IsBold() ) + m_out->Print( 0, " %s", getTokenName( T_bold ) ); + + if( aItem->IsItalic() ) + m_out->Print( 0, " %s", getTokenName( T_italic ) ); + + m_out->Print( 0, ")" ); + } + + // Write text justification + if( aItem->m_Hjustify != GR_TEXT_HJUSTIFY_LEFT || + aItem->m_Vjustify != GR_TEXT_VJUSTIFY_CENTER ) + { + m_out->Print( 0, " (%s", getTokenName( T_justify ) ); + + // Write T_center opt first, because it is + // also a center for both m_Hjustify and m_Vjustify + if( aItem->m_Hjustify == GR_TEXT_HJUSTIFY_CENTER ) + m_out->Print( 0, " %s", getTokenName( T_center ) ); + + if( aItem->m_Hjustify == GR_TEXT_HJUSTIFY_RIGHT ) + m_out->Print( 0, " %s", getTokenName( T_right ) ); + + if( aItem->m_Vjustify == GR_TEXT_VJUSTIFY_TOP ) + m_out->Print( 0, " %s", getTokenName( T_top ) ); + + if( aItem->m_Vjustify == GR_TEXT_VJUSTIFY_BOTTOM ) + m_out->Print( 0, " %s", getTokenName( T_bottom ) ); + + m_out->Print( 0, ")" ); + } + + // write constraints + if( aItem->m_BoundingBoxSize.x ) + m_out->Print( 0, " (%s %s)", getTokenName( T_maxlen ), + double2Str(aItem->m_BoundingBoxSize.x ).c_str() ); + + if( aItem->m_BoundingBoxSize.y ) + m_out->Print( 0, " (%s %s)", getTokenName( T_maxheight ), + double2Str(aItem->m_BoundingBoxSize.y ).c_str() ); + + formatRepeatParameters( aItem ); + + m_out->Print( 0, ")\n" ); +} + +void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const + throw( IO_ERROR ) +{ + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT ) + m_out->Print( aNestLevel, "(%s", getTokenName( T_rect ) ); + else + m_out->Print( aNestLevel, "(%s", getTokenName( T_line ) ); + + m_out->Print( 0, " (%s %s)", getTokenName( T_name ), + m_out->Quotew( aItem->m_Name ).c_str() ); + + formatCoordinate( getTokenName( T_start ), aItem->m_Pos ); + formatCoordinate( getTokenName( T_end ), aItem->m_End ); + formatOptions( aItem ); + + if( aItem->m_LineWidth && aItem->m_LineWidth != aItem->m_DefaultLineWidth ) + m_out->Print( 0, " (linewidth %s)", double2Str( aItem->m_LineWidth ).c_str() ); + + formatRepeatParameters( aItem ); + + m_out->Print( 0, ")\n" ); +} + + +void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel ) const + throw( IO_ERROR ) +{ + m_out->Print( aNestLevel, "( %s", getTokenName( T_polygon ) ); + m_out->Print( 0, " (%s %s)", getTokenName( T_name ), + m_out->Quotew( aItem->m_Name ).c_str() ); + formatCoordinate( getTokenName( T_pos ), aItem->m_Pos ); + formatOptions( aItem ); + + formatRepeatParameters( aItem ); + + if( aItem->m_Orient ) + m_out->Print( 0, " (%s %s)", getTokenName( T_rotate ), + double2Str(aItem->m_Orient ).c_str() ); + + if( aItem->m_LineWidth ) + m_out->Print( 0, " (linewidth %s)\n", double2Str( aItem->m_LineWidth ).c_str() ); + + // Write polygon corners list + for( int kk = 0; kk < aItem->GetPolyCount(); kk++ ) + { + m_out->Print( aNestLevel+1, "( %s", getTokenName( T_pts ) ); + // Create current polygon corners list + unsigned ist = aItem->GetPolyIndexStart( kk ); + unsigned iend = aItem->GetPolyIndexEnd( kk ); + int ii = 0; + while( ist <= iend ) + { + DPOINT pos = aItem->m_Corners[ist++]; + int nestLevel = 0; + + if( ii++ > 4) + { + m_out->Print( 0, "\n" ); + nestLevel = aNestLevel+2; + ii = 0; + } + m_out->Print( nestLevel, " (%s %s %s)", getTokenName( T_xy ), + double2Str( pos.x ).c_str(), + double2Str( pos.y ).c_str() ); + } + m_out->Print( 0, ")\n" ); + } + + m_out->Print( aNestLevel, ")\n" ); +} + +void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken, + POINT_COORD & aCoord ) const + throw( IO_ERROR ) +{ + m_out->Print( 0, " (%s %s %s", aToken, + double2Str( aCoord.m_Pos.x ).c_str(), + double2Str( aCoord.m_Pos.y ).c_str() ); + + switch( aCoord.m_Anchor ) + { + case RB_CORNER: + break; + + case LT_CORNER: + m_out->Print( 0, " %s", getTokenName(T_ltcorner ) ); + break; + + case LB_CORNER: + m_out->Print( 0, " %s", getTokenName(T_lbcorner ) ); + break; + + case RT_CORNER: + m_out->Print( 0, " %s", getTokenName(T_rtcorner ) ); + break; + } + + m_out->Print( 0, ")" ); +} + +void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const + throw( IO_ERROR ) +{ + if( aItem->m_RepeatCount <= 1 ) + return; + + m_out->Print( 0, " (repeat %d)", aItem->m_RepeatCount ); + + if( aItem->m_IncrementVector.x ) + m_out->Print( 0, " (incrx %s)", double2Str(aItem-> m_IncrementVector.x ).c_str() ); + + if( aItem->m_IncrementVector.y ) + m_out->Print( 0, " (incry %s)", double2Str( aItem->m_IncrementVector.y ).c_str() ); + + if( aItem->m_IncrementLabel != 1 && + aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT ) + m_out->Print( 0, " (incrlabel %d)", aItem->m_IncrementLabel ); +} + +void WORKSHEET_LAYOUT_IO::formatOptions( WORKSHEET_DATAITEM* aItem ) const + throw( IO_ERROR ) +{ + switch( aItem->GetPage1Option() ) + { + default: + case 0: + break; + + case 1: + m_out->Print( 0, " (%s %s)", getTokenName(T_option ), + getTokenName(T_page1only ) ); + break; + + case -1: + m_out->Print( 0, " (%s %s)", getTokenName(T_option ), + getTokenName(T_notonpage1 ) ); + break; + } +} diff --git a/pagelayout_editor/pl_editor.cpp b/pagelayout_editor/pl_editor.cpp new file mode 100644 index 0000000000..9ae13e74de --- /dev/null +++ b/pagelayout_editor/pl_editor.cpp @@ -0,0 +1,120 @@ +/** + * @file pl_editor.cpp + * @brief page layout editor main file. + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +extern EDA_COLOR_T g_DrawBgColor; + + +IMPLEMENT_APP( EDA_APP ) + +/* MacOSX: Needed for file association + * http://wiki.wxwidgets.org/WxMac-specific_topics + */ +void EDA_APP::MacOpenFile(const wxString &fileName) +{ + wxFileName filename = fileName; + PL_EDITOR_FRAME * frame = ((PL_EDITOR_FRAME*)GetTopWindow()); + + if( !filename.FileExists() ) + return; + + frame->LoadPageLayoutDescrFile( fileName ); +} + + +bool EDA_APP::OnInit() +{ + wxFileName fn; + + InitEDA_Appl( wxT( "pl_editor" ), APP_GERBVIEW_T ); + + if( m_Checker && m_Checker->IsAnotherRunning() ) + { + if( !IsOK( NULL, _( "pl_editor is already running. Continue?" ) ) ) + return false; + } + + g_UserUnit = MILLIMETRES; + g_DrawBgColor = WHITE; + g_ShowPageLimits = true; + + // read current setup and reopen last directory if no filename to open in + // command line + bool reopenLastUsedDirectory = argc == 1; + GetSettings( reopenLastUsedDirectory ); + + // Must be called before creating the main frame in order to + // display the real hotkeys in menus or tool tips + ReadHotkeyConfig( wxT("PlEditorFrame"), s_PlEditor_Hokeys_Descr ); + + PL_EDITOR_FRAME * frame = new PL_EDITOR_FRAME( NULL, wxT( "PlEditorFrame" ), wxPoint( 0, 0 ), wxSize( 600, 400 ) ); + + //ainframe title: + frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() ); + + SetTopWindow( frame ); + frame->Show( true ); + frame->Zoom_Automatique( true ); // Zoom fit in frame + frame->GetScreen()->m_FirstRedraw = false; + + + if( argc > 1 ) + { + fn = argv[1]; + + if( fn.IsOk() ) + { + wxSetWorkingDirectory( fn.GetPath() ); + bool success = frame->LoadPageLayoutDescrFile( fn.GetFullPath() ); + if( !success ) + { + wxString msg; + msg.Printf( _("Error when loading file <%s>"), + fn.GetFullPath().GetData() ); + wxMessageBox( msg ); + } + } + } + + frame->RebuildDesignTree(); + + return true; +} diff --git a/pagelayout_editor/pl_editor.rc b/pagelayout_editor/pl_editor.rc new file mode 100644 index 0000000000..885f0e6b53 --- /dev/null +++ b/pagelayout_editor/pl_editor.rc @@ -0,0 +1,3 @@ +icon_pagelayout_editor ICON "../bitmaps_png/icons/icon_pagelayout_editor.ico" + +#include "wx/msw/wx.rc" diff --git a/pagelayout_editor/pl_editor_config.cpp b/pagelayout_editor/pl_editor_config.cpp new file mode 100644 index 0000000000..e519a058fa --- /dev/null +++ b/pagelayout_editor/pl_editor_config.cpp @@ -0,0 +1,69 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 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 + */ + +/** + * @file pl_editor_config.cpp + * @brief page layout editor configuration. +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + + +#define GROUP wxT("/pl_editor") + +#define INSETUP true + + +void PL_EDITOR_FRAME::Process_Config( wxCommandEvent& event ) +{ + int id = event.GetId(); + + switch( id ) + { + + default: + wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Config error" ) ); + break; + } +} + + +PARAM_CFG_ARRAY& PL_EDITOR_FRAME::GetConfigurationSettings() +{ + if( !m_configSettings.empty() ) + return m_configSettings; + + m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ), + (int*) &g_UserUnit, 0, 0, 1 ) ); + + return m_configSettings; +} diff --git a/pagelayout_editor/pl_editor_frame.cpp b/pagelayout_editor/pl_editor_frame.cpp new file mode 100644 index 0000000000..6741a4fb6e --- /dev/null +++ b/pagelayout_editor/pl_editor_frame.cpp @@ -0,0 +1,636 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file pl_editor_frame.cpp + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/*************************/ +/* class PL_EDITOR_FRAME */ +/*************************/ + +#define PL_EDITOR_FRAME_NAME wxT( "PlEditorFrame" ) + +PL_EDITOR_FRAME::PL_EDITOR_FRAME( wxWindow* aParent, const wxString& aTitle, + const wxPoint& aPosition, const wxSize& aSize, + long aStyle ) : + EDA_DRAW_FRAME( aParent, PL_EDITOR_FRAME_TYPE, aTitle, aPosition, aSize, + aStyle, PL_EDITOR_FRAME_NAME ) +{ + m_FrameName = PL_EDITOR_FRAME_NAME; + + m_showAxis = false; // true to show X and Y axis on screen + m_showGridAxis = true; + m_showBorderAndTitleBlock = true; // true for reference drawings. + m_HotkeysZoomAndGridList = s_PlEditor_Hokeys_Descr; + m_originSelectChoice = 0; + + m_designTreeWidth = 100; + m_propertiesFrameWidth = 150; + + if( m_canvas ) + m_canvas->SetEnableBlockCommands( false ); + + // Give an icon + wxIcon icon; + icon.CopyFromBitmap( KiBitmap( icon_pagelayout_editor_xpm ) ); + SetIcon( icon ); + wxSize pageSizeIU = GetPageLayout().GetPageSettings().GetSizeIU(); + SetScreen( new PL_EDITOR_SCREEN( pageSizeIU ) ); + + m_config = wxGetApp().GetSettings(); + LoadSettings(); + SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); + + if( m_LastGridSizeId < ID_POPUP_GRID_LEVEL_1MM-ID_POPUP_GRID_LEVEL_1000 ) + m_LastGridSizeId = ID_POPUP_GRID_LEVEL_1MM-ID_POPUP_GRID_LEVEL_1000; + if( m_LastGridSizeId > ID_POPUP_GRID_LEVEL_0_1MM-ID_POPUP_GRID_LEVEL_1000 ) + m_LastGridSizeId = ID_POPUP_GRID_LEVEL_0_1MM-ID_POPUP_GRID_LEVEL_1000; + GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); + + ReCreateMenuBar(); + ReCreateHToolbar(); + ReCreateOptToolbar(); + + wxWindow* stsbar = GetStatusBar(); + int dims[] = { + + // balance of status bar on far left is set to a default or whatever is left over. + -1, + + // When using GetTextSize() remember the width of '1' is not the same + // as the width of '0' unless the font is fixed width, and it usually won't be. + + // zoom: + GetTextSize( wxT( "Z 762000" ), stsbar ).x + 10, + + // cursor coords + GetTextSize( wxT( "X 0234.567 Y 0234.567" ), stsbar ).x + 10, + + // delta distances + GetTextSize( wxT( "dx 0234.567 dx 0234.567" ), stsbar ).x + 10, + + // Coord origin (use the bigger message) + GetTextSize( _( "coord origin: Right Bottom page corner" ), stsbar ).x + 10, + + // units display, Inches is bigger than mm + GetTextSize( _( "Inches" ), stsbar ).x + 10 + }; + + SetStatusWidths( DIM( dims ), dims ); + + + m_auimgr.SetManagedWindow( this ); + + EDA_PANEINFO horiz; + horiz.HorizontalToolbarPane(); + + EDA_PANEINFO vert; + vert.VerticalToolbarPane(); + + EDA_PANEINFO mesg; + mesg.MessageToolbarPane(); + + m_propertiesPagelayout = new PROPERTIES_FRAME( this ); + EDA_PANEINFO props; + props.LayersToolbarPane(); + props.MinSize( m_propertiesPagelayout->GetMinSize() ); + props.BestSize( m_propertiesFrameWidth, -1 ); + props.Caption( _( "Properties" ) ); + + m_treePagelayout = new DESIGN_TREE_FRAME( this ); + EDA_PANEINFO tree; + tree.LayersToolbarPane(); + tree.MinSize( m_treePagelayout->GetMinSize() ); + tree.BestSize( m_designTreeWidth, -1 ); + tree.Caption( _( "Design" ) ); + + if( m_mainToolBar ) + m_auimgr.AddPane( m_mainToolBar, + wxAuiPaneInfo( horiz ).Name( wxT( "m_mainToolBar" ) ).Top().Row( 0 ) ); + + if( m_drawToolBar ) + m_auimgr.AddPane( m_drawToolBar, + wxAuiPaneInfo( vert ).Name( wxT( "m_drawToolBar" ) ).Right().Row( 1 ) ); + + m_auimgr.AddPane( m_propertiesPagelayout, + props.Name( wxT( "m_propertiesPagelayout" ) ).Right().Layer( 1 ) ); + + m_auimgr.AddPane( m_treePagelayout, + tree.Name( wxT( "m_treePagelayout" ) ).Left().Layer( 0 ) ); + + if( m_optionsToolBar ) + m_auimgr.AddPane( m_optionsToolBar, + wxAuiPaneInfo( vert ).Name( wxT( "m_optionsToolBar" ) ).Left() ); + + if( m_canvas ) + m_auimgr.AddPane( m_canvas, + wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane().Layer( 5 ) ); + + if( m_messagePanel ) + m_auimgr.AddPane( m_messagePanel, + wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer( 10 ) ); + + m_auimgr.Update(); +} + + +PL_EDITOR_FRAME::~PL_EDITOR_FRAME() +{ + wxGetApp().SaveCurrentSetupValues( m_configSettings ); +} + + +void PL_EDITOR_FRAME::OnCloseWindow( wxCloseEvent& Event ) +{ + if( GetScreen()->IsModify() ) + { + wxString msg; + wxString filename = GetCurrFileName(); + if( filename.IsEmpty() ) + msg = _("Save changes in a new file before closing?"); + else + msg.Printf( _("Save the changes in\n<%s>\nbefore closing?"), + GetChars( filename ) ); + + int ii = DisplayExitDialog( this, msg ); + switch( ii ) + { + case wxID_CANCEL: + Event.Veto(); + return; + + case wxID_NO: + break; + + case wxID_OK: + case wxID_YES: + { + if( filename.IsEmpty() ) + { + wxFileDialog openFileDialog(this, _("Create file"), wxEmptyString, + wxEmptyString, PageLayoutDescrFileWildcard, wxFD_SAVE); + + if (openFileDialog.ShowModal() == wxID_CANCEL) + return; + + filename = openFileDialog.GetPath(); + } + + if( !SavePageLayoutDescrFile( filename ) ) + { + wxString msg; + msg.Printf( _("Unable to create <%s>"), GetChars( filename ) ); + wxMessageBox( msg ); + } + } + break; + } + } + + SaveSettings(); + // do not show the window because we do not want any paint event + Show( false ); + Destroy(); +} + + +double PL_EDITOR_FRAME::BestZoom() +{ + int dx, dy; + wxSize size; + + dx = GetPageLayout().GetPageSettings().GetWidthIU(); + dy = GetPageLayout().GetPageSettings().GetHeightIU(); + + size = m_canvas->GetClientSize(); + + // Reserve no margin because best zoom shows the full page + // and margins are already included in function that draws the sheet refernces + double margin_scale_factor = 1.0; + double zx =(double) dx / ( margin_scale_factor * (double)size.x ); + double zy = (double) dy / ( margin_scale_factor * (double)size.y ); + + double bestzoom = std::max( zx, zy ); + + GetScreen()->SetScrollCenterPosition( wxPoint( dx / 2, dy / 2 ) ); + + return bestzoom; +} + +#define DESIGN_TREE_WIDTH_KEY wxT("DesignTreeWidth") +#define PROPERTIES_FRAME_WIDTH_KEY wxT("PropertiesFrameWidth") +#define CORNER_ORIGIN_CHOICE_KEY wxT("CornerOriginChoice") + +void PL_EDITOR_FRAME::LoadSettings() +{ + EDA_DRAW_FRAME::LoadSettings(); + m_config->Read( DESIGN_TREE_WIDTH_KEY, &m_designTreeWidth, 100); + m_config->Read( PROPERTIES_FRAME_WIDTH_KEY, &m_propertiesFrameWidth, 150); + m_config->Read( CORNER_ORIGIN_CHOICE_KEY, &m_originSelectChoice ); +} + + +void PL_EDITOR_FRAME::SaveSettings() +{ + wxConfig* config = wxGetApp().GetSettings(); + + if( config == NULL ) + return; + + m_designTreeWidth = m_treePagelayout->GetSize().x; + m_propertiesFrameWidth = m_propertiesPagelayout->GetSize().x; + + EDA_DRAW_FRAME::SaveSettings(); + m_config->Write( DESIGN_TREE_WIDTH_KEY, m_designTreeWidth); + m_config->Write( PROPERTIES_FRAME_WIDTH_KEY, m_propertiesFrameWidth); + m_config->Write( CORNER_ORIGIN_CHOICE_KEY, m_originSelectChoice ); + + wxGetApp().SaveCurrentSetupValues( GetConfigurationSettings() ); +} + + +/* + * Function UpdateTitleAndInfo + * displays the filename (if exists) of the current page layout descr file. + */ +void PL_EDITOR_FRAME::UpdateTitleAndInfo() +{ + wxString title; + title.Printf( wxT( "Pl_Editor %s [%s]" ), GetChars( GetBuildVersion() ), + GetChars( GetCurrFileName() ) ); + SetTitle( title ); +} + +/* return the filename of the current layout descr file + */ +const wxString& PL_EDITOR_FRAME::GetCurrFileName() const +{ + return BASE_SCREEN::m_PageLayoutDescrFileName; +} + +/* Stores the current layout descr file filename + */ +void PL_EDITOR_FRAME::SetCurrFileName( const wxString& aName ) +{ + BASE_SCREEN::m_PageLayoutDescrFileName = aName; +} + +void PL_EDITOR_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) +{ + m_pageLayout.SetPageSettings( aPageSettings ); + + if( GetScreen() ) + GetScreen()->InitDataPoints( aPageSettings.GetSizeIU() ); +} + + +const PAGE_INFO& PL_EDITOR_FRAME::GetPageSettings() const +{ + return m_pageLayout.GetPageSettings(); +} + + +const wxSize PL_EDITOR_FRAME::GetPageSizeIU() const +{ + // this function is only needed because EDA_DRAW_FRAME is not compiled + // with either -DPCBNEW or -DEESCHEMA, so the virtual is used to route + // into an application specific source file. + return m_pageLayout.GetPageSettings().GetSizeIU(); +} + + +const TITLE_BLOCK& PL_EDITOR_FRAME::GetTitleBlock() const +{ + return GetPageLayout().GetTitleBlock(); +} + + +void PL_EDITOR_FRAME::SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) +{ + m_pageLayout.SetTitleBlock( aTitleBlock ); +} + + +/* + * Update the status bar information. + */ +void PL_EDITOR_FRAME::UpdateStatusBar() +{ + PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) GetScreen(); + + if( !screen ) + return; + + // coodinate origin can be the paper Top Left corner, + // or each of 4 page corners + // We know the origin, and the orientation of axis + wxPoint originCoord; + int Xsign = 1; + int Ysign = 1; + WORKSHEET_DATAITEM dummy( WORKSHEET_DATAITEM::WS_SEGMENT ); + switch( m_originSelectChoice ) + { + default: + case 0: // Origin = paper Left Top corner + break; + + case 1: // Origin = page Right Bottom corner + Xsign = -1; + Ysign = -1; + dummy.SetStart( 0, 0, RB_CORNER ); + originCoord = dummy.GetStartPosUi(); + break; + + case 2: // Origin = page Left Bottom corner + Ysign = -1; + dummy.SetStart( 0, 0, LB_CORNER ); + originCoord = dummy.GetStartPosUi(); + break; + + case 3: // Origin = page Right Top corner + Xsign = -1; + dummy.SetStart( 0, 0, RT_CORNER ); + originCoord = dummy.GetStartPosUi(); + break; + + case 4: // Origin = page Left Top corner + dummy.SetStart( 0, 0, LT_CORNER ); + originCoord = dummy.GetStartPosUi(); + break; + } + + screen->m_GridOrigin = originCoord; + + // Display absolute coordinates: + wxPoint coord = screen->GetCrossHairPosition() - originCoord; + double dXpos = To_User_Unit( g_UserUnit, coord.x*Xsign ); + double dYpos = To_User_Unit( g_UserUnit, coord.y*Ysign ); + + wxString absformatter; + wxString locformatter; + + switch( g_UserUnit ) + { + case INCHES: // Should not be used in page layout editor + SetStatusText( _("inches"), 5 ); + absformatter = wxT( "X %.4g Y %.4g" ); + locformatter = wxT( "dx %.4g dy %.4g" ); + break; + + case MILLIMETRES: + SetStatusText( _("mm"), 5 ); + absformatter = wxT( "X %.3g Y %.3g" ); + locformatter = wxT( "dx %.3g dy %.3g" ); + break; + + case UNSCALED_UNITS: + absformatter = wxT( "X %g Y %g" ); + locformatter = wxT( "dx %g dy %g" ); + break; + } + + wxString line; + line.Printf( absformatter, dXpos, dYpos ); + SetStatusText( line, 2 ); + + // Display relative coordinates: + int dx = screen->GetCrossHairPosition().x - screen->m_O_Curseur.x; + int dy = screen->GetCrossHairPosition().y - screen->m_O_Curseur.y; + dXpos = To_User_Unit( g_UserUnit, dx * Xsign ); + dYpos = To_User_Unit( g_UserUnit, dy * Ysign ); + line.Printf( locformatter, dXpos, dYpos ); + SetStatusText( line, 3 ); + + // Display Zoom level: zoom = zoom_coeff/ZoomScalar + line.Printf( wxT( "Z %.1f" ), screen->GetZoom() ); + SetStatusText( line, 1 ); + + // Display corner reference for coord origin + line.Printf( _("coord origin: %s"), + m_originSelectBox->GetString( m_originSelectChoice ). GetData() ); + SetStatusText( line, 4 ); + + // Display units +} + +void PL_EDITOR_FRAME::PrintPage( wxDC* aDC, LAYER_MSK aPrintMasklayer, + bool aPrintMirrorMode, void * aData ) +{ + GetScreen()-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2; + DrawWorkSheet( aDC, GetScreen(), 0, IU_PER_MILS, wxEmptyString ); +} + +void PL_EDITOR_FRAME::RedrawActiveWindow( wxDC* aDC, bool aEraseBg ) +{ + GetScreen()-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2; + m_canvas->DrawBackGround( aDC ); + + const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + WORKSHEET_DATAITEM* selecteditem = GetSelectedItem(); + + for( unsigned ii = 0; ; ii++ ) + { + WORKSHEET_DATAITEM* item = pglayout.GetItem( ii ); + + if( item == NULL ) + break; + + item->SetSelected( item == selecteditem ); + } + + DrawWorkSheet( aDC, GetScreen(), 0, IU_PER_MILS, GetCurrFileName() ); + + if( m_canvas->IsMouseCaptured() ) + m_canvas->CallMouseCapture( aDC, wxDefaultPosition, false ); + + m_canvas->DrawCrossHair( aDC ); + + // Display the filename + UpdateTitleAndInfo(); +} + +void PL_EDITOR_FRAME::RebuildDesignTree() +{ + const WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + wxString name; + + for( unsigned ii = 0; ii < pglayout.GetCount(); ii++ ) + { + WORKSHEET_DATAITEM* item = pglayout.GetItem( ii ); + if( item->m_Name.IsEmpty() ) + { + name.Printf( wxT("item%d:%s"), ii+1, item->GetClassName()); + item->m_Name = name; + } + } + + m_treePagelayout->ReCreateDesignTree(); +} + +/* Add a new item to the page layout item list. + * aType = WS_TEXT, WS_SEGMENT, WS_RECT, WS_POLYPOLYGON + */ +WORKSHEET_DATAITEM * PL_EDITOR_FRAME::AddPageLayoutItem( int aType, int aIdx ) +{ + WORKSHEET_DATAITEM * item = NULL; + + switch( aType ) + { + case WORKSHEET_DATAITEM::WS_TEXT: + item = new WORKSHEET_DATAITEM_TEXT( wxT("Text") ); + break; + + case WORKSHEET_DATAITEM::WS_SEGMENT: + item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_SEGMENT ); + break; + + case WORKSHEET_DATAITEM::WS_RECT: + item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_RECT ); + break; + + case WORKSHEET_DATAITEM::WS_POLYPOLYGON: + item = new WORKSHEET_DATAITEM_POLYPOLYGON(); + break; + } + + if( item == NULL ) + return NULL; + + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + pglayout.Insert( item, aIdx ); + RebuildDesignTree(); + + return item; +} + +/* returns the current selected item, or NULL + */ +WORKSHEET_DATAITEM * PL_EDITOR_FRAME::GetSelectedItem() +{ + WORKSHEET_DATAITEM* item = m_treePagelayout->GetPageLayoutSelectedItem(); + return item; +} + +/* return the page layout item found at position aPosition + * aPosition = the position (in user units) of the reference point + */ +WORKSHEET_DATAITEM* PL_EDITOR_FRAME::Locate( const wxPoint& aPosition ) +{ + const PAGE_INFO& pageInfo = GetPageSettings(); + TITLE_BLOCK t_block = GetTitleBlock(); + EDA_COLOR_T color = RED; // Needed, not used + PL_EDITOR_SCREEN* screen = (PL_EDITOR_SCREEN*) GetScreen(); + screen-> m_ScreenNumber = GetPageNumberOption() ? 1 : 2; + + WS_DRAW_ITEM_LIST drawList; + drawList.SetPenSize( 0 ); + drawList.SetMilsToIUfactor( IU_PER_MILS ); + drawList.SetSheetNumber( screen->m_ScreenNumber ); + drawList.SetSheetCount( screen->m_NumberOfScreens ); + drawList.SetFileName( GetCurrFileName() ); + drawList.SetSheetName( GetScreenDesc() ); + + drawList.BuildWorkSheetGraphicList( pageInfo, t_block, color, color ); + + // locate items. + // We do not use here the COLLECTOR classes in use in pcbnew and eeschema + // because the locate requirements are very basic. + std::vector list; + drawList.Locate( list, aPosition ); + if( list.size() == 0 ) + return NULL; + + WS_DRAW_ITEM_BASE* drawitem = list[0]; + + // Choose item in list if more than 1 item + if( list.size() > 1 ) + { + wxArrayString choices; + wxString text; + + for( unsigned ii = 0; ii < list.size(); ++ii ) + { + wxString text; + drawitem = list[ii]; + text = drawitem->GetParent()->m_Name; + + if( (drawitem->m_Flags & (LOCATE_STARTPOINT|LOCATE_ENDPOINT)) + == (LOCATE_STARTPOINT|LOCATE_ENDPOINT) ) + text << wxT(" ") << _("(start or end point)"); + else + { + if( (drawitem->m_Flags & LOCATE_STARTPOINT) ) + text << wxT(" ") << _("(start point)"); + + if( (drawitem->m_Flags & LOCATE_ENDPOINT) ) + text << wxT(" ") << _("(end point)"); + } + + if( ! drawitem->GetParent()->m_Info.IsEmpty() ) + text << wxT(" \"") << drawitem->GetParent()->m_Info << wxT("\""); + + choices.Add( text ); + } + int selection = wxGetSingleChoiceIndex ( wxEmptyString, + _( "Selection Clarification" ), + choices, this ); + if( selection < 0 ) + return NULL; + + m_canvas->MoveCursorToCrossHair(); + drawitem = list[selection]; + } + + WORKSHEET_DATAITEM* item = drawitem->GetParent(); + item->ClearFlags(LOCATE_STARTPOINT|LOCATE_ENDPOINT); + + if( (drawitem->m_Flags & LOCATE_STARTPOINT) ) + item->SetFlags( LOCATE_STARTPOINT ); + + if( (drawitem->m_Flags & LOCATE_ENDPOINT) ) + item->SetFlags( LOCATE_ENDPOINT ); + + return item; +} diff --git a/pagelayout_editor/pl_editor_frame.h b/pagelayout_editor/pl_editor_frame.h new file mode 100644 index 0000000000..53883b918d --- /dev/null +++ b/pagelayout_editor/pl_editor_frame.h @@ -0,0 +1,335 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2013 CERN + * Copyright (C) 1992-2013 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 + */ + +/** + * @file pl_editor_frame.h + */ + +#ifndef _PL_EDITOR_FRAME_H +#define _PL_EDITOR_FRAME_H + + +#include +#include +#include +#include +#include + +class PROPERTIES_FRAME; +class DESIGN_TREE_FRAME; +class WORKSHEET_DATAITEM; + +/** + * Class PL_EDITOR_FRAME + * is the main window used in the page layout editor. + */ + +class PL_EDITOR_FRAME : public EDA_DRAW_FRAME +{ + PL_EDITOR_LAYOUT m_pageLayout; + int m_designTreeWidth; // the last width (in pixels) of m_treePagelayout + int m_propertiesFrameWidth; // the last width (in pixels) of m_propertiesPagelayout + wxConfig* m_config; + wxChoice* m_originSelectBox; // Corner origin choice for coordinates + int m_originSelectChoice; // the last choice for m_originSelectBox + wxChoice* m_pageSelectBox; // The page number sel'ector (page 1 or other pages + // usefull when there are some items which are + // only on page 1, not on page 1 + +protected: + /// The last filename chosen to be proposed to the user + wxString m_lastFileName; + DESIGN_TREE_FRAME* m_treePagelayout; + PROPERTIES_FRAME* m_propertiesPagelayout; + +private: + // list of PARAM_CFG_xxx to read/write parameters saved in config + PARAM_CFG_ARRAY m_configSettings; + +public: + PL_EDITOR_FRAME( wxWindow* aParent, const wxString& aTitle, + const wxPoint& aPosition, const wxSize& aSize, + long aStyle = KICAD_DEFAULT_DRAWFRAME_STYLE ); + + ~PL_EDITOR_FRAME(); + + void OnCloseWindow( wxCloseEvent& Event ); + + // Virtual basic functions: + void RedrawActiveWindow( wxDC* DC, bool EraseBg ); + void ReCreateHToolbar(); + + void SetPageSettings(const PAGE_INFO&); + const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME + const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME + + PL_EDITOR_SCREEN* GetScreen() + { + return (PL_EDITOR_SCREEN*) m_canvas->GetScreen(); + } + + const wxPoint& GetOriginAxisPosition() const // overload EDA_DRAW_FRAME + { + static wxPoint dummy( 0,0 ); + return dummy; + } + void SetOriginAxisPosition( const wxPoint& aPosition ) {} // overload EDA_DRAW_FRAME + + const TITLE_BLOCK& GetTitleBlock() const; // overload EDA_DRAW_FRAME + void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ); // overload EDA_DRAW_FRAME + + void UpdateStatusBar(); // overload EDA_DRAW_FRAME + + /** + * creates or updates the right vertical toolbar. + * @note This is currently not used. + */ + void ReCreateVToolbar(); + + /** + * Create or update the left vertical toolbar (option toolbar + * @note This is currently not used. + */ + void ReCreateOptToolbar(); + + void ReCreateMenuBar(); + void OnLeftClick( wxDC* aDC, const wxPoint& aMousePos ); + void OnLeftDClick( wxDC* aDC, const wxPoint& aMousePos ); + bool OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ); + double BestZoom(); + + // Events created by clicking on the design tree list: + void OnTreeSelection( wxTreeEvent& event ); + void OnTreeMiddleClick( wxTreeEvent& event ); + void OnTreeRightClick( wxTreeEvent& event ); + + const PL_EDITOR_LAYOUT& GetPageLayout() const { return m_pageLayout; } + + /** + * Page layout editor can show the title block using a page number + * 1 or an other number. + * This is because some items can be shown (or not) only on page 1 + * (a feature which look like word processing option + * "page 1 differs from other pages". + * @return true if the page 1 is selected, and false if not + */ + bool GetPageNumberOption() const + { + return m_pageSelectBox->GetSelection() == 0; + } + + /** + * Displays the short filename (if exists) loaded file + * on the caption of the main window + */ + void UpdateTitleAndInfo(); + + /** + * Populates the applicatios settings list. + * (list of parameters that must be saved in project parameters) + * Currently, only the settings that are needed at start up by the main window are + * defined here. There are other locally used settings scattered throughout the + * source code (mainly in dialogs). If you need to define a configuration + * setting that need to be loaded at run time, this is the place to define it. + */ + PARAM_CFG_ARRAY& GetConfigurationSettings( void ); + + /** + * Load applications settings specific to page layout editor. + * + * This overrides the base class EDA_DRAW_FRAME::LoadSettings(). + */ + virtual void LoadSettings(); + + /** + * Save applications settings common to PCB draw frame objects. + * + * This overrides the base class EDA_DRAW_FRAME::SaveSettings() to + * save settings specific to the application main window. It + * calls down to the base class to save settings common to all + * drawing frames. Please put your application settings for pl editor here + * to avoid having application settings saved all over the place. + */ + virtual void SaveSettings(); + + /** + * Function SetLanguage + * called on a language menu selection + */ + virtual void SetLanguage( wxCommandEvent& event ); + + void Process_Special_Functions( wxCommandEvent& event ); + void OnSelectOptionToolbar( wxCommandEvent& event ); + + /** + * called when the user select one of the 4 page corner as corner + * reference (or the left top paper corner) + */ + void OnSelectCoordOriginCorner( wxCommandEvent& event ); + + /** + * Toggle the display mode between the normal mode and the editor mode: + * In normal mode, title block texts are shown like they will be + * shown in other kicad applications: the format symbols in texts + * are replaced by the actual text. + * In editor mode, the format symbols in texts are not replaced + * by the actual text, and therefore format symbols are displayed. + */ + void OnSelectTitleBlockDisplayMode( wxCommandEvent& event ); + + void OnUpdateTitleBlockDisplayNormalMode( wxUpdateUIEvent& event ); + void OnUpdateTitleBlockDisplaySpecialMode( wxUpdateUIEvent& event ); + + /** + * Function OnQuit + * called on request of application quit + */ + void OnQuit( wxCommandEvent& event ); + + /** + * Function OnHotKey. + * ** Commands are case insensitive ** + * Some commands are relatives to the item under the mouse cursor + * @param aDC = current device context + * @param aHotkeyCode = hotkey code (ascii or wxWidget code for special keys) + * @param aPosition The cursor position in logical (drawing) units. + * @param aItem = NULL or pointer on a EDA_ITEM under the mouse cursor + */ + void OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosition, EDA_ITEM* aItem = NULL ); + + void Process_Settings( wxCommandEvent& event ); + void Process_Config( wxCommandEvent& event ); + + /** + * Function ToPlotter + * Open a dialog frame to create plot and drill files + * relative to the current board + */ + void ToPlotter( wxCommandEvent& event ); + + /** + * Function ToPrinter + * Open a dialog frame to print layers + */ + void ToPrinter( wxCommandEvent& event ); + + void Files_io( wxCommandEvent& event ); + void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ); + + /** Virtual function PrintPage + * used to print a page + * @param aDC = wxDC given by the calling print function + * @param aPrintMasklayer = a 32 bits mask: bit n = 1 -> layer n is printed + * @param aPrintMirrorMode = not used here (Set when printing in mirror mode) + * @param aData = a pointer on an auxiliary data (not always used, NULL if not used) + */ + virtual void PrintPage( wxDC* aDC, LAYER_MSK aPrintMasklayer, + bool aPrintMirrorMode, void * aData ); + + void OnFileHistory( wxCommandEvent& event ); + + /** + * Function LoadPageLayoutDescrFile + * Loads a .kicad_wks page layout descr file + * @param aFullFileName = the filename. + */ + bool LoadPageLayoutDescrFile( const wxString& aFullFileName ); + + /** + * Function SavePageLayoutDescrFile + * Save the current layout in a .kicad_wks page layout descr file + * @param aFullFileName = the filename. + */ + bool SavePageLayoutDescrFile( const wxString& aFullFileName ); + + /** + * Function InsertPageLayoutDescrFile + * Loads a .kicad_wks page layout descr file, and add items + * to the current layout list + * @param aFullFileName = the filename. + */ + bool InsertPageLayoutDescrFile( const wxString& aFullFileName ); + + /** + * @return the filename of the current layout descr file + * If this is the default (no loaded file) returns a emtpy name + * or a new design. + */ + const wxString& GetCurrFileName() const; + + /** + * Stores the current layout descr file filename + */ + void SetCurrFileName( const wxString& aName ); + + /** + * Function RebuildDesignTree + * Re creates the design graphic tree list items, + * and ensures each item has an unique name + */ + void RebuildDesignTree(); + + /** + * Function AddPageLayoutItem + * Add a new item to the page layout item list. + * @param aType = the type of item: + * WS_TEXT, WS_SEGMENT, WS_RECT, WS_POLYPOLYGON + * @param aIdx = the position in list to insert the new item. + * @return a reference to the new item + */ + WORKSHEET_DATAITEM * AddPageLayoutItem( int aType, int aIdx = -1 ); + + /** + * Function GetSelectedItem + * @return the current selected item, or NULL + */ + WORKSHEET_DATAITEM * GetSelectedItem(); + + /** + * Function Locate + * @return the page layout item found at position aPosition + * @param aPosition = the position (in user units) of the reference point + */ + WORKSHEET_DATAITEM *Locate( const wxPoint& aPosition ); + + /** + * Initialize a move item command + */ + void MoveItem( WORKSHEET_DATAITEM* aItem ); + + /** + * Must be called after a change + * in order to set the "modify" flag of the current screen + */ + void OnModify() + { + GetScreen()->SetModify(); + } + + + DECLARE_EVENT_TABLE() +}; + +#endif /* _PL_EDITOR_FRAME_H */ diff --git a/pagelayout_editor/pl_editor_id.h b/pagelayout_editor/pl_editor_id.h new file mode 100644 index 0000000000..cb08769ad3 --- /dev/null +++ b/pagelayout_editor/pl_editor_id.h @@ -0,0 +1,47 @@ +#ifndef _PL_EDITOR_ID_H_ +#define _PL_EDITOR_ID_H_ + +#include + +/** + * Command IDs for the printed circuit board editor. + * + * Please add IDs that are unique to the page layout editor (pl_editor) here and not in + * the global id.h file. This will prevent the entire project from being rebuilt when + * adding new commands to the page layout editor. + */ + +enum pl_editor_ids +{ + ID_MAIN_MENUBAR = ID_END_LIST, + + ID_PL_EDITOR_SHOW_SOURCE, + ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR, + ID_DESIGN_TREE_FRAME, + + ID_SHOW_REAL_MODE, + ID_SHOW_LPEDITOR_MODE, + ID_SELECT_COORDINATE_ORIGIN, + ID_LOAD_DEFAULT_PAGE_LAYOUT, + ID_SELECT_PAGE_NUMBER, + + ID_OPEN_POLYGON_DESCR_FILE, + + ID_POPUP_START_RANGE, + ID_POPUP_ITEM_DELETE, + ID_POPUP_DESIGN_TREE_ITEM_DELETE, + ID_POPUP_ITEM_ADD_LINE, + ID_POPUP_ITEM_ADD_RECT, + ID_POPUP_ITEM_ADD_TEXT, + ID_POPUP_ITEM_ADD_POLY, + ID_POPUP_ITEM_MOVE, + ID_POPUP_ITEM_PLACE, + ID_POPUP_ITEM_MOVE_START_POINT, + ID_POPUP_ITEM_MOVE_END_POINT, + ID_POPUP_ITEM_PLACE_CANCEL, + ID_POPUP_END_RANGE, + + ID_PLEDITOR_END_LIST +}; + +#endif /* _PL_EDITOR_IDS_H_ */ diff --git a/pagelayout_editor/properties_frame.cpp b/pagelayout_editor/properties_frame.cpp new file mode 100644 index 0000000000..7680658c47 --- /dev/null +++ b/pagelayout_editor/properties_frame.cpp @@ -0,0 +1,385 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file properties_frame.cpp + */ + +#include +#include +#include +#include +#include +#include + +PROPERTIES_FRAME::PROPERTIES_FRAME( PL_EDITOR_FRAME* aParent ): + PANEL_PROPERTIES_BASE( aParent ) +{ + m_parent = aParent; +} + + +PROPERTIES_FRAME::~PROPERTIES_FRAME() +{ +} + +wxSize PROPERTIES_FRAME::GetMinSize() const +{ + return wxSize( 150, -1 ); +} + +// Data transfert from item to widgets in properties frame +void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem ) +{ + wxString msg; + + // Set default parameters + msg.Printf( wxT("%.3f"), aItem->m_DefaultLineWidth ); + m_textCtrlDefaultLineWidth->SetValue( msg ); + + msg.Printf( wxT("%.3f"), aItem->m_DefaultTextSize.x ); + m_textCtrlDefaultTextSizeX->SetValue( msg ); + msg.Printf( wxT("%.3f"), aItem->m_DefaultTextSize.y ); + m_textCtrlDefaultTextSizeY->SetValue( msg ); + + msg.Printf( wxT("%.3f"), aItem->m_DefaultTextThickness ); + m_textCtrlDefaultTextThickness->SetValue( msg ); + + // Set parameters common to all WORKSHEET_DATAITEM types + m_textCtrlType->SetValue( aItem->GetClassName() ); + m_textCtrlComment->SetValue( aItem->m_Info ); + + switch( aItem->GetPage1Option() ) + { + default: + case 0: + m_choicePageOpt->SetSelection( 0 ); + break; + + case 1: + m_choicePageOpt->SetSelection( 1 ); + break; + + case -1: + m_choicePageOpt->SetSelection( 2 ); + break; + } + + // Position/ start point + msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.x ); + m_textCtrlPosX->SetValue( msg ); + msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.y ); + m_textCtrlPosY->SetValue( msg ); + switch( aItem->m_Pos.m_Anchor ) + { + case RB_CORNER: // right bottom corner + m_comboBoxCornerPos->SetSelection( 2 ); break; + case RT_CORNER: // right top corner + m_comboBoxCornerPos->SetSelection( 0 ); break; + case LB_CORNER: // left bottom corner + m_comboBoxCornerPos->SetSelection( 3 ); break; + case LT_CORNER: // left top corner + m_comboBoxCornerPos->SetSelection( 1 ); break; + } + + // End point + msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.x ); + m_textCtrlEndX->SetValue( msg ); + msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.y ); + m_textCtrlEndY->SetValue( msg ); + switch( aItem->m_End.m_Anchor ) + { + case RB_CORNER: // right bottom corner + m_comboBoxCornerEnd->SetSelection( 2 ); break; + case RT_CORNER: // right top corner + m_comboBoxCornerEnd->SetSelection( 0 ); break; + case LB_CORNER: // left bottom corner + m_comboBoxCornerEnd->SetSelection( 3 ); break; + case LT_CORNER: // left top corner + m_comboBoxCornerEnd->SetSelection( 1 ); break; + } + + msg.Printf( wxT("%.3f"), aItem->m_LineWidth ); + m_textCtrlThickness->SetValue( msg ); + + // Now, set prms more specific to WORKSHEET_DATAITEM types + // For a given type, disable widgets which are not relevant, + // and be sure widgets which are relevant are enabled + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT ) + { + m_SizerTextOptions->Show(true); + m_SizerTextIncrementLabel->Show( true ); + + WORKSHEET_DATAITEM_TEXT* item = (WORKSHEET_DATAITEM_TEXT*) aItem; + m_textCtrlText->SetValue( item->m_TextBase ); + + msg.Printf( wxT("%d"), item->m_IncrementLabel ); + m_textCtrlTextIncrement->SetValue( msg ); + + // Rotation (poly and text) + msg.Printf( wxT("%.3f"), item->m_Orient ); + m_textCtrlRotation->SetValue( msg ); + + // Constraints: + msg.Printf( wxT("%.3f"), item->m_BoundingBoxSize.x ); + m_textCtrlConstraintX->SetValue( msg ); + msg.Printf( wxT("%.3f"), item->m_BoundingBoxSize.y ); + m_textCtrlConstraintY->SetValue( msg ); + + // Font Options + m_checkBoxBold->SetValue( item->IsBold() ); + m_checkBoxItalic->SetValue( item->IsItalic() ); + switch( item->m_Hjustify ) + { + case GR_TEXT_HJUSTIFY_LEFT: m_choiceHjustify->SetSelection( 0 ); break; + case GR_TEXT_HJUSTIFY_CENTER: m_choiceHjustify->SetSelection( 1 ); break; + case GR_TEXT_HJUSTIFY_RIGHT: m_choiceHjustify->SetSelection( 2 ); break; + } + switch( item->m_Vjustify ) + { + case GR_TEXT_VJUSTIFY_TOP: m_choiceVjustify->SetSelection( 0 ); break; + case GR_TEXT_VJUSTIFY_CENTER: m_choiceVjustify->SetSelection( 1 ); break; + case GR_TEXT_VJUSTIFY_BOTTOM: m_choiceVjustify->SetSelection( 2 ); break; + } + + // Text size + msg.Printf( wxT("%.3f"), item->m_TextSize.x ); + m_textCtrlTextSizeX->SetValue( msg ); + msg.Printf( wxT("%.3f"), item->m_TextSize.y ); + m_textCtrlTextSizeY->SetValue( msg ); + } + else + { + m_SizerTextOptions->Show(false); + m_SizerTextIncrementLabel->Show(false); + } + + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON ) + { + m_staticTextInfoThickness->Show( false ); + + WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem; + // Rotation (poly and text) + msg.Printf( wxT("%.3f"), item->m_Orient ); + m_textCtrlRotation->SetValue( msg ); + } + else + { + m_staticTextInfoThickness->Show( true ); + } + + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_SEGMENT || + aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT ) + { + m_SizerRotation->Show( false ); + m_SizerEndPosition->Show(true); + } + else + { + m_SizerRotation->Show( true ); + m_SizerEndPosition->Show(false); + } + + // Repeat parameters + msg.Printf( wxT("%d"), aItem->m_RepeatCount ); + m_textCtrlRepeatCount->SetValue( msg ); + msg.Printf( wxT("%.3f"), aItem->m_IncrementVector.x ); + m_textCtrlStepX->SetValue( msg ); + msg.Printf( wxT("%.3f"), aItem->m_IncrementVector.y ); + m_textCtrlStepY->SetValue( msg ); + + // The number of widgets was modified + Layout(); + Refresh(); +} + +// Event function called by clicking on the OK button +void PROPERTIES_FRAME::OnAcceptPrms( wxCommandEvent& event ) +{ + WORKSHEET_DATAITEM* item = m_parent->GetSelectedItem(); + if( item ) + CopyPrmsFromPanelToItem( item ); + + m_parent->OnModify(); + m_parent->GetCanvas()->Refresh(); +} + +// Data transfert from properties frame to item parameters +bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem ) +{ + if( aItem == NULL ) + return false; + + double dtmp; + wxString msg; + + // Import default parameters + msg = m_textCtrlDefaultLineWidth->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_DefaultLineWidth = dtmp; + + msg = m_textCtrlDefaultTextSizeX->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_DefaultTextSize.x = dtmp; + msg = m_textCtrlDefaultTextSizeY->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_DefaultTextSize.y = dtmp; + + msg = m_textCtrlDefaultTextThickness->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_DefaultTextThickness = dtmp; + + // Import common parameters: + aItem->m_Info = m_textCtrlComment->GetValue(); + + switch( m_choicePageOpt->GetSelection() ) + { + default: + case 0: + aItem->SetPage1Option( 0 ); + break; + + case 1: + aItem->SetPage1Option( 1 ); + break; + + case 2: + aItem->SetPage1Option( -1 ); + break; + } + + // Import thickness + msg = m_textCtrlThickness->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_LineWidth = dtmp; + + // Import Start point + msg = m_textCtrlPosX->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_Pos.m_Pos.x = dtmp; + + msg = m_textCtrlPosY->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_Pos.m_Pos.y = dtmp; + + switch( m_comboBoxCornerPos->GetSelection() ) + { + case 2: aItem->m_Pos.m_Anchor = RB_CORNER; break; + case 0: aItem->m_Pos.m_Anchor = RT_CORNER; break; + case 3: aItem->m_Pos.m_Anchor = LB_CORNER; break; + case 1: aItem->m_Pos.m_Anchor = LT_CORNER; break; + } + + // Import End point + msg = m_textCtrlEndX->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_End.m_Pos.x = dtmp; + + msg = m_textCtrlEndY->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_End.m_Pos.y = dtmp; + + switch( m_comboBoxCornerEnd->GetSelection() ) + { + case 2: aItem->m_End.m_Anchor = RB_CORNER; break; + case 0: aItem->m_End.m_Anchor = RT_CORNER; break; + case 3: aItem->m_End.m_Anchor = LB_CORNER; break; + case 1: aItem->m_End.m_Anchor = LT_CORNER; break; + } + + // Import Repeat prms + long itmp; + msg = m_textCtrlRepeatCount->GetValue(); + msg.ToLong( &itmp ); + aItem->m_RepeatCount = itmp; + + msg = m_textCtrlStepX->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_IncrementVector.x = dtmp; + + msg = m_textCtrlStepY->GetValue(); + msg.ToDouble( &dtmp ); + aItem->m_IncrementVector.y = dtmp; + + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_TEXT ) + { + WORKSHEET_DATAITEM_TEXT* item = (WORKSHEET_DATAITEM_TEXT*) aItem; + + item->m_TextBase = m_textCtrlText->GetValue(); + + msg = m_textCtrlTextIncrement->GetValue(); + msg.ToLong( &itmp ); + item->m_IncrementLabel = itmp; + + item->SetBold( m_checkBoxBold->IsChecked() ); + item->SetItalic( m_checkBoxItalic->IsChecked() ); + + switch( m_choiceHjustify->GetSelection() ) + { + case 0: item->m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; break; + case 1: item->m_Hjustify = GR_TEXT_HJUSTIFY_CENTER; break; + case 2: item->m_Hjustify = GR_TEXT_HJUSTIFY_RIGHT; break; + } + switch( m_choiceVjustify->GetSelection() ) + { + case 0: item->m_Vjustify = GR_TEXT_VJUSTIFY_TOP; break; + case 1: item->m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; break; + case 2: item->m_Vjustify = GR_TEXT_VJUSTIFY_BOTTOM; break; + } + + msg = m_textCtrlRotation->GetValue(); + msg.ToDouble( &dtmp ); + item->m_Orient = dtmp; + + // Import text size + msg = m_textCtrlTextSizeX->GetValue(); + msg.ToDouble( &dtmp ); + item->m_TextSize.x = dtmp; + + msg = m_textCtrlTextSizeY->GetValue(); + msg.ToDouble( &dtmp ); + item->m_TextSize.y = dtmp; + + // Import constraints: + msg = m_textCtrlConstraintX->GetValue(); + msg.ToDouble( &dtmp ); + item->m_BoundingBoxSize.x = dtmp; + + msg = m_textCtrlConstraintY->GetValue(); + msg.ToDouble( &dtmp ); + item->m_BoundingBoxSize.y = dtmp; + } + + if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON ) + { + WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem; + + msg = m_textCtrlRotation->GetValue(); + msg.ToDouble( &dtmp ); + item->m_Orient = dtmp; + } + + return true; +} + diff --git a/pagelayout_editor/properties_frame.h b/pagelayout_editor/properties_frame.h new file mode 100644 index 0000000000..71150bed3b --- /dev/null +++ b/pagelayout_editor/properties_frame.h @@ -0,0 +1,62 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 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 + */ + +/** + * @file properties_frame.h + */ + +#ifndef _PROPERTIES_FRAME_H +#define _PROPERTIES_FRAME_H + +#include +#include +#include + +class WORKSHEET_DATAITEM; + +/** + * Class PROPERTIES_FRAME display properties of the current item. + */ + +class PROPERTIES_FRAME : public PANEL_PROPERTIES_BASE +{ + PL_EDITOR_FRAME* m_parent; + +public: + PROPERTIES_FRAME( PL_EDITOR_FRAME* aParent ); + ~PROPERTIES_FRAME(); + + void OnAcceptPrms( wxCommandEvent& event ); + + + // Data transfert from item to widgets in properties frame + void CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem ); + + // Data transfert from widgets in properties frame to item + bool CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem ); + + wxSize GetMinSize() const; +}; + +#endif /* _PROPERTIES_FRAME_H */ diff --git a/pagelayout_editor/toolbars_pl_editor.cpp b/pagelayout_editor/toolbars_pl_editor.cpp new file mode 100644 index 0000000000..e11232273e --- /dev/null +++ b/pagelayout_editor/toolbars_pl_editor.cpp @@ -0,0 +1,166 @@ + +/** + * @file toolbars_gerber.cpp + * @brief Build tool bars + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#include +#include +#include +#include +#include +#include + +void PL_EDITOR_FRAME::ReCreateHToolbar( void ) +{ + if( m_mainToolBar != NULL ) + return; + + wxString msg; + + // Standard file commands + m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize, + wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT ); + + m_mainToolBar->AddTool( wxID_NEW, wxEmptyString, KiBitmap( pagelayout_new_xpm ), + _( "New page layout design" ) ); + + m_mainToolBar->AddTool( wxID_OPEN, wxEmptyString, KiBitmap( pagelayout_load_xpm ), + _( "Load a page layout file. Previous data will be deleted" ) ); + + m_mainToolBar->AddTool( wxID_SAVE, wxEmptyString, KiBitmap( save_project_xpm ), + _( "Save page layout design" ) ); + + m_mainToolBar->AddSeparator(); + m_mainToolBar->AddTool( ID_SHEET_SET, wxEmptyString, KiBitmap( sheetset_xpm ), + _( "Page settings" ) ); + + m_mainToolBar->AddTool( wxID_PRINT, wxEmptyString, KiBitmap( print_button_xpm ), + _( "Print page layout" ) ); + + m_mainToolBar->AddSeparator(); + m_mainToolBar->AddTool( wxID_CUT, wxEmptyString, KiBitmap( delete_xpm ), + _( "Delete selected item" ) ); + + m_mainToolBar->AddSeparator(); + m_mainToolBar->AddTool( wxID_UNDO, wxEmptyString, + KiBitmap( undo_xpm ), wxEmptyString ); + m_mainToolBar->AddTool( wxID_REDO, wxEmptyString, + KiBitmap( redo_xpm ), wxEmptyString ); + + // Standard Zoom controls: + m_mainToolBar->AddSeparator(); + msg = AddHotkeyName( _( "Zoom in" ), s_PlEditor_Hokeys_Descr, HK_ZOOM_IN, IS_COMMENT ); + m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, KiBitmap( zoom_in_xpm ), msg ); + + msg = AddHotkeyName( _( "Zoom out" ), s_PlEditor_Hokeys_Descr, HK_ZOOM_OUT, IS_COMMENT ); + m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, KiBitmap( zoom_out_xpm ), msg ); + + msg = AddHotkeyName( _( "Redraw view" ), s_PlEditor_Hokeys_Descr, HK_ZOOM_REDRAW, IS_COMMENT ); + m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString, KiBitmap( zoom_redraw_xpm ), msg ); + + msg = AddHotkeyName( _( "Zoom auto" ), s_PlEditor_Hokeys_Descr, HK_ZOOM_AUTO, IS_COMMENT ); + m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ), msg ); + + // Display mode switch + m_mainToolBar->AddSeparator(); + m_mainToolBar->AddTool( ID_SHOW_REAL_MODE, wxEmptyString, KiBitmap( pagelayout_normal_view_mode_xpm ), + _( "Show title block like it will be displayed in applications\n" + "texts with format are replaced by the full text"), + wxITEM_CHECK ); + m_mainToolBar->AddTool( ID_SHOW_LPEDITOR_MODE, wxEmptyString, KiBitmap( pagelayout_special_view_mode_xpm ), + _( "how title block in edit mode: texts are shown as is\n" + "texts with format are displayed with no change"), + wxITEM_CHECK ); + + m_mainToolBar->AddSeparator(); + + wxString choiceList[5] = + { + _("Left Top paper corner"), + _("Right Bottom page corner"), + _("Left Bottom page corner"), + _("Right Top page corner"), + _("Left Top page corner") + }; + + m_originSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_COORDINATE_ORIGIN, + wxDefaultPosition, wxDefaultSize, + 5, choiceList ); + m_mainToolBar->AddControl( m_originSelectBox ); + m_originSelectBox->SetToolTip( _(" Origin of coordinates displayed to the status bar") ); + + int minwidth = 0; + for( int ii = 0; ii < 5; ii++ ) + { + int width = GetTextSize( choiceList[ii], m_originSelectBox ).x; + minwidth = std::max( minwidth, width ); + } + m_originSelectBox->SetMinSize( wxSize( minwidth, -1 ) ); + m_originSelectBox->SetSelection( m_originSelectChoice ); + + wxString pageList[5] = + { + _("Page 1"), + _("Other pages") + }; + + m_pageSelectBox = new wxChoice( m_mainToolBar, ID_SELECT_PAGE_NUMBER, + wxDefaultPosition, wxDefaultSize, + 2, pageList ); + m_mainToolBar->AddControl( m_pageSelectBox ); + m_pageSelectBox->SetToolTip( _("Simulate page 1 or other pages to show how items\n"\ + "which are not on all page are displayed") ); + m_pageSelectBox->SetSelection( 0 ); + + + // after adding the buttons to the toolbar, must call Realize() to reflect the changes + m_mainToolBar->Realize(); +} + + +void PL_EDITOR_FRAME::ReCreateVToolbar( void ) +{ + if( m_drawToolBar ) + return; + + m_drawToolBar = new wxAuiToolBar( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize, + wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_VERTICAL ); + + // Set up toolbar + m_drawToolBar->AddTool( ID_NO_TOOL_SELECTED, wxEmptyString, KiBitmap( cursor_xpm ) ); + m_drawToolBar->AddSeparator(); + + m_drawToolBar->Realize(); +} + + +void PL_EDITOR_FRAME::ReCreateOptToolbar( void ) +{ +} diff --git a/pcbnew/dialogs/dialog_pcbnew_config_libs_and_paths.cpp b/pcbnew/dialogs/dialog_pcbnew_config_libs_and_paths.cpp index 9d467f5e15..97e545e1cd 100644 --- a/pcbnew/dialogs/dialog_pcbnew_config_libs_and_paths.cpp +++ b/pcbnew/dialogs/dialog_pcbnew_config_libs_and_paths.cpp @@ -152,7 +152,7 @@ void DIALOG_PCBNEW_CONFIG_LIBS::OnOkClick( wxCommandEvent& event ) g_LibraryNames.Add( m_ListLibr->GetString(ii) ); } - GetParent()->SaveProjectSettings(); + GetParent()->SaveProjectSettings( true ); EndModal( wxID_OK ); } diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp index 825a3383da..322d45b554 100644 --- a/pcbnew/kicad_plugin.cpp +++ b/pcbnew/kicad_plugin.cpp @@ -30,6 +30,7 @@ #include #include <3d_struct.h> #include +#include #include #include @@ -62,43 +63,6 @@ using namespace std; */ static const wxString traceFootprintLibrary( wxT( "KicadFootprintLib" ) ); -// Helper function to print a float number without using scientific notation -// and no trailing 0 -// We want to avoid scientific notation in S-expr files (not easy to read) -// for floating numbers. -// So we cannot always just use the %g or the %f format to print a fp number -// this helper function uses the %f format when needed, or %g when %f is -// not well working and then removes trailing 0 - -std::string double2str( double aValue ) -{ - char buf[50]; - int len; - - if( aValue != 0.0 && fabs( aValue ) <= 0.0001 ) - { - // For these small values, %f works fine, - // and %g gives an exponent - len = sprintf( buf, "%.16f", aValue ); - - while( --len > 0 && buf[len] == '0' ) - buf[len] = '\0'; - - if( buf[len] == '.' ) - buf[len] = '\0'; - else - ++len; - } - else - { - // For these values, %g works fine, and sometimes %f - // gives a bad value (try aValue = 1.222222222222, with %.16f format!) - len = sprintf( buf, "%.16g", aValue ); - } - - return std::string( buf, len );; -} - /** * Class FP_CACHE_ITEM @@ -589,7 +553,7 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const if( aBoard->GetDesignSettings().m_SolderPasteMarginRatio != 0 ) m_out->Print( aNestLevel+1, "(pad_to_paste_clearance_ratio %s)\n", - double2str( aBoard->GetDesignSettings().m_SolderPasteMarginRatio ).c_str() ); + Double2Str( aBoard->GetDesignSettings().m_SolderPasteMarginRatio ).c_str() ); m_out->Print( aNestLevel+1, "(aux_axis_origin %s %s)\n", FMTIU( aBoard->GetOriginAxisPosition().x ).c_str(), @@ -949,7 +913,7 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const if( aModule->GetLocalSolderPasteMarginRatio() != 0 ) m_out->Print( aNestLevel+1, "(solder_paste_ratio %s)\n", - double2str( aModule->GetLocalSolderPasteMarginRatio() ).c_str() ); + Double2Str( aModule->GetLocalSolderPasteMarginRatio() ).c_str() ); if( aModule->GetLocalClearance() != 0 ) m_out->Print( aNestLevel+1, "(clearance %s)\n", @@ -1000,19 +964,19 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const m_out->Quotew( t3D->m_Shape3DName ).c_str() ); m_out->Print( aNestLevel+2, "(at (xyz %s %s %s))\n", - double2str( t3D->m_MatPosition.x ).c_str(), - double2str( t3D->m_MatPosition.y ).c_str(), - double2str( t3D->m_MatPosition.z ).c_str() ); + Double2Str( t3D->m_MatPosition.x ).c_str(), + Double2Str( t3D->m_MatPosition.y ).c_str(), + Double2Str( t3D->m_MatPosition.z ).c_str() ); m_out->Print( aNestLevel+2, "(scale (xyz %s %s %s))\n", - double2str( t3D->m_MatScale.x ).c_str(), - double2str( t3D->m_MatScale.y ).c_str(), - double2str( t3D->m_MatScale.z ).c_str() ); + Double2Str( t3D->m_MatScale.x ).c_str(), + Double2Str( t3D->m_MatScale.y ).c_str(), + Double2Str( t3D->m_MatScale.z ).c_str() ); m_out->Print( aNestLevel+2, "(rotate (xyz %s %s %s))\n", - double2str( t3D->m_MatRotation.x ).c_str(), - double2str( t3D->m_MatRotation.y ).c_str(), - double2str( t3D->m_MatRotation.z ).c_str() ); + Double2Str( t3D->m_MatRotation.x ).c_str(), + Double2Str( t3D->m_MatRotation.y ).c_str(), + Double2Str( t3D->m_MatRotation.z ).c_str() ); m_out->Print( aNestLevel+1, ")\n" ); } @@ -1186,7 +1150,7 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const if( aPad->GetLocalSolderPasteMarginRatio() != 0 ) m_out->Print( aNestLevel+1, "(solder_paste_margin_ratio %s)\n", - double2str( aPad->GetLocalSolderPasteMarginRatio() ).c_str() ); + Double2Str( aPad->GetLocalSolderPasteMarginRatio() ).c_str() ); if( aPad->GetLocalClearance() != 0 ) m_out->Print( aNestLevel+1, "(clearance %s)\n", diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index c28707b184..061f465d4a 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -109,16 +109,34 @@ bool EDA_APP::OnInit() PCB_EDIT_FRAME* frame = NULL; wxString msg; + InitEDA_Appl( wxT( "Pcbnew" ), APP_PCBNEW_T ); + #ifdef KICAD_SCRIPTING - if ( !pcbnewInitPythonScripting() ) + msg.Empty(); +#ifdef __WINDOWS__ + // TODO: make this path definable by the user, and set more than one path + // (and remove the fixed paths from /scripting/kicadplugins.i) + + // wizard plugins are stored in kicad/bin/plugins. + // so add this path to python scripting defualt search paths + // which are ( [KICAD_PATH] is an environment variable to define) + // [KICAD_PATH]/scripting/plugins + // Add this default search path: + msg = wxGetApp().GetExecutablePath() + wxT("scripting/plugins"); +#else + // Add this default search path: + msg = wxT("/usr/local/kicad/bin/scripting/plugins"); +#endif + // On linux and osx, 2 others paths are + // [HOME]/.kicad_plugins/ + // [HOME]/.kicad/scripting/plugins/ + if ( !pcbnewInitPythonScripting( TO_UTF8(msg) ) ) { wxMessageBox( wxT( "pcbnewInitPythonScripting() fails" ) ); return false; } #endif - InitEDA_Appl( wxT( "Pcbnew" ), APP_PCBNEW_T ); - if( argc > 1 ) { fn = argv[1]; diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp index 94a9d9f89b..8f3b4ecc18 100644 --- a/pcbnew/pcbnew_config.cpp +++ b/pcbnew/pcbnew_config.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -125,7 +126,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event ) break; case ID_CONFIG_SAVE: - SaveProjectSettings(); + SaveProjectSettings( true ); break; case ID_CONFIG_READ: @@ -221,26 +222,39 @@ bool PCB_EDIT_FRAME::LoadProjectSettings( const wxString& aProjectFileName ) SetElementVisibility( RATSNEST_VISIBLE, showRats ); #endif + // Load the page layout decr file, from the filename stored in + // BASE_SCREEN::m_PageLayoutDescrFileName, read in config project file + // If empty, the default descr is loaded + WORKSHEET_LAYOUT& pglayout = WORKSHEET_LAYOUT::GetTheInstance(); + pglayout.SetPageLayout(BASE_SCREEN::m_PageLayoutDescrFileName); + loadFootprintLibTable(); return true; } -void PCB_EDIT_FRAME::SaveProjectSettings() +void PCB_EDIT_FRAME::SaveProjectSettings( bool aAskForSave ) { wxFileName fn; fn = GetBoard()->GetFileName(); fn.SetExt( ProjectFileExtension ); - wxFileDialog dlg( this, _( "Save Project File" ), fn.GetPath(), fn.GetFullName(), - ProjectFileWildcard, wxFD_SAVE | wxFD_CHANGE_DIR ); + if( aAskForSave ) + { + wxFileDialog dlg( this, _( "Save Project File" ), + fn.GetPath(), fn.GetFullName(), + ProjectFileWildcard, wxFD_SAVE | wxFD_CHANGE_DIR ); - if( dlg.ShowModal() == wxID_CANCEL ) - return; + if( dlg.ShowModal() == wxID_CANCEL ) + return; - wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, GetProjectFileParameters() ); + wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, GetProjectFileParameters() ); + } + + else + wxGetApp().WriteProjectConfig( fn.GetFullPath(), GROUP, GetProjectFileParameters() ); } @@ -248,17 +262,19 @@ PARAM_CFG_ARRAY PCB_EDIT_FRAME::GetProjectFileParameters() { PARAM_CFG_ARRAY pca; + pca.push_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ), + &BASE_SCREEN::m_PageLayoutDescrFileName ) ); + pca.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ),&g_UserLibDirBuffer, - GROUPLIB ) ); + GROUPLIB ) ); pca.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ), - &g_LibraryNames, - GROUPLIB ) ); + &g_LibraryNames, GROUPLIB ) ); pca.push_back( new PARAM_CFG_FILENAME( wxT( "LastNetListRead" ), - &m_lastNetListRead ) ); + &m_lastNetListRead ) ); pca.push_back( new PARAM_CFG_BOOL( wxT( "UseCmpFile" ), - &m_useCmpFileForFpNames, true ) ); + &m_useCmpFileForFpNames, true ) ); GetBoard()->GetDesignSettings().AppendConfigs( &pca ); return pca; diff --git a/polygon/polygon_test_point_inside.h b/polygon/polygon_test_point_inside.h index 90117dd2d4..b817380d1c 100644 --- a/polygon/polygon_test_point_inside.h +++ b/polygon/polygon_test_point_inside.h @@ -10,6 +10,8 @@ public: int x, y; }; #endif +class CPOLYGONS_LIST; + /** * Function TestPointInsidePolygon * test if a point is inside or outside a polygon. diff --git a/scripting/kicadplugins.i b/scripting/kicadplugins.i index 68e6bfbd96..32679ed69e 100644 --- a/scripting/kicadplugins.i +++ b/scripting/kicadplugins.i @@ -67,14 +67,16 @@ def ReloadPlugins(): ReloadPlugin(k) -def LoadPlugins(): +def LoadPlugins( plugpath ): import os import sys - kicad_path = os.environ.get('KICAD_PATH') plugin_directories=[] + if plugpath and os.path.isdir( plugpath ): + plugin_directories.append( plugpath ) + if kicad_path and os.path.isdir(kicad_path): plugin_directories.append(os.path.join(kicad_path, 'scripting', 'plugins')) diff --git a/scripting/python_scripting.cpp b/scripting/python_scripting.cpp index 24f0fa0065..1ec3198de4 100644 --- a/scripting/python_scripting.cpp +++ b/scripting/python_scripting.cpp @@ -132,7 +132,7 @@ static void swigSwitchPythonBuiltin() PyThreadState* g_PythonMainTState; -bool pcbnewInitPythonScripting() +bool pcbnewInitPythonScripting( const char * aUserPluginsPath ) { swigAddBuiltin(); // add builtin functions swigAddModules(); // add our own modules @@ -159,25 +159,23 @@ bool pcbnewInitPythonScripting() g_PythonMainTState = wxPyBeginAllowThreads(); - // load pcbnew inside python, and load all the user plugins, TODO: add system wide plugins - #endif - + // load pcbnew inside python, and load all the user plugins, TODO: add system wide plugins { + char cmd[1024]; PyLOCK lock; - - PyRun_SimpleString( "import sys, traceback\n" - "sys.path.append(\".\")\n" - "import pcbnew\n" - "pcbnew.LoadPlugins()" - ); + sprintf( cmd, "import sys, traceback\n" + "sys.path.append(\".\")\n" + "import pcbnew\n" + "pcbnew.LoadPlugins(\"%s\")", aUserPluginsPath ); + PyRun_SimpleString( cmd ); } return true; } -void pcbnewFinishPythonScripting() +void pcbnewFinishPythonScripting( char ) { #ifdef KICAD_SCRIPTING_WXPYTHON wxPyEndAllowThreads( g_PythonMainTState ); diff --git a/scripting/python_scripting.h b/scripting/python_scripting.h index 170f6cce98..8d0ae174fe 100644 --- a/scripting/python_scripting.h +++ b/scripting/python_scripting.h @@ -24,7 +24,7 @@ * Initializes the Python engine inside pcbnew */ -bool pcbnewInitPythonScripting(); +bool pcbnewInitPythonScripting( const char * aUserPluginsPath ); void pcbnewFinishPythonScripting(); diff --git a/template/pagelayout_default.kicad_wks b/template/pagelayout_default.kicad_wks new file mode 100644 index 0000000000..2acbac0c7f --- /dev/null +++ b/template/pagelayout_default.kicad_wks @@ -0,0 +1,33 @@ +( page_layout + (setup(textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)) + (rect (name item1:Rect) (start 110 34) (end 2 2)) + (rect (name item2:Rect) (start 0 0 ltcorner) (end 0 0) (repeat 2) (incrx 2) (incry 2)) + (line (name item3:Line) (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50)) + (tbtext 1 (name item4:Text) (pos 25 1 ltcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) (incrlabel 0)) + (line (name item5:Line) (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50)) + (tbtext 1 (name item6:Text) (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) (incrlabel 0)) + (line (name item7:Line) (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50)) + (tbtext A (name item8:Text) (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) (incrlabel 0)) + (line (name item9:Line) (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50)) + (tbtext A (name item10:Text) (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) (incrlabel 0)) + (tbtext "Date: %D" (name item11:Text) (pos 87 6.9)) + (line (name item12:Line) (start 110 5.5) (end 2 5.5)) + (tbtext %K (name item13:Text) (pos 109 4.1)) + (line (name item14:Line) (start 110 8.5) (end 2 8.5)) + (tbtext "Rev: %R" (name item15:Text) (pos 24 6.9) (font bold)) + (tbtext "Size: %Z" (name item16:Text) (pos 109 6.9)) + (tbtext "Id: %S/%N" (name item17:Text) (pos 24 4.1)) + (line (name item18:Line) (start 110 12.5) (end 2 12.5)) + (tbtext "Title: %T" (name item19:Text) (pos 109 10.7) (font (size 2 2) bold)) + (tbtext "File: %F" (name item20:Text) (pos 109 14.3)) + (line (name item21:Line) (start 110 18.5) (end 2 18.5)) + (tbtext "Sheet: %P" (name item22:Text) (pos 109 17)) + (tbtext %Y (name item23:Text) (pos 109 20) (font bold)) + (tbtext %C0 (name item24:Text) (pos 109 23)) + (tbtext %C1 (name item25:Text) (pos 109 26)) + (tbtext %C2 (name item26:Text) (pos 109 29)) + (tbtext %C3 (name item27:Text) (pos 109 32)) + (line (name item28:Line) (start 90 8.5) (end 90 5.5)) + (line (name item29:Line) (start 26 8.5) (end 26 2)) + (rect (name item30:Rect) (start 157 34) (end 110 2)) +)