From 6a39f5bd1ca10cabde2c35823a64c0ed5e4f61b7 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 2 Apr 2012 20:11:00 +0200 Subject: [PATCH] pcb_calculator: enhancement in Regulators page dialog: * support for 3 terminal regulators * add a data file management to store parameters for regulators ( name, vref value, Iadj value, type) Needs some refinements, but it is already very useable. Commit dialog page setting patch from Alexander Zakamaldin --- common/dialogs/dialog_page_settings.cpp | 3 + pcb_calculator/CMakeLists.txt | 11 + pcb_calculator/bitmaps/regul_3pins.xpm | 369 +++ .../bitmaps/sources/regul_3pins.png | Bin 0 -> 6003 bytes .../bitmaps/sources/regul_3pins.svg | 229 ++ pcb_calculator/class_regulator_data.h | 142 + pcb_calculator/datafile_read_write.cpp | 285 ++ pcb_calculator/datafile_read_write.h | 65 + .../dialogs/dialog_regulator_data.fbp | 1163 +++++++ .../dialogs/dialog_regulator_data_base.cpp | 105 + .../dialogs/dialog_regulator_data_base.h | 67 + .../dialogs/pcb_calculator_frame_base.cpp | 191 +- .../dialogs/pcb_calculator_frame_base.fbp | 2916 ++++++++++++----- .../dialogs/pcb_calculator_frame_base.h | 45 +- pcb_calculator/pcb_calculator.cpp | 4 + pcb_calculator/pcb_calculator.h | 42 + .../pcb_calculator_datafile.keywords | 5 + pcb_calculator/pcb_calculator_frame.cpp | 120 +- pcb_calculator/regulators_funct.cpp | 271 +- pcbnew/netlist_reader_kicad.cpp | 2 +- 20 files changed, 5066 insertions(+), 969 deletions(-) create mode 100644 pcb_calculator/bitmaps/regul_3pins.xpm create mode 100644 pcb_calculator/bitmaps/sources/regul_3pins.png create mode 100644 pcb_calculator/bitmaps/sources/regul_3pins.svg create mode 100644 pcb_calculator/class_regulator_data.h create mode 100644 pcb_calculator/datafile_read_write.cpp create mode 100644 pcb_calculator/datafile_read_write.h create mode 100644 pcb_calculator/dialogs/dialog_regulator_data.fbp create mode 100644 pcb_calculator/dialogs/dialog_regulator_data_base.cpp create mode 100644 pcb_calculator/dialogs/dialog_regulator_data_base.h create mode 100644 pcb_calculator/pcb_calculator_datafile.keywords diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index f0cb41d6e7..ebc3fbdd8f 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -438,6 +438,9 @@ limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), PAGE_INFO::SetCustomWidthMils( m_layout_size.x ); PAGE_INFO::SetCustomHeightMils( m_layout_size.y ); + m_pageInfo.SetWidthMils( m_layout_size.x ); + m_pageInfo.SetHeightMils( m_layout_size.y ); + m_pageInfo.SetPortrait( m_layout_size.x < m_layout_size.y ); } } else diff --git a/pcb_calculator/CMakeLists.txt b/pcb_calculator/CMakeLists.txt index 48c71170f2..02ef447d2c 100644 --- a/pcb_calculator/CMakeLists.txt +++ b/pcb_calculator/CMakeLists.txt @@ -18,10 +18,12 @@ set(PCB_CALCULATOR_SRCS params_read_write.cpp pcb_calculator.cpp pcb_calculator_frame.cpp + datafile_read_write.cpp regulators_funct.cpp tracks_width_versus_current.cpp transline_ident.cpp UnitSelector.cpp + pcb_calculator_datafile_keywords.cpp transline/transline.cpp transline/c_microstrip.cpp transline/microstrip.cpp @@ -33,6 +35,7 @@ set(PCB_CALCULATOR_SRCS transline_dlg_funct.cpp attenuators/attenuator_classes.cpp dialogs/pcb_calculator_frame_base.cpp + dialogs/dialog_regulator_data_base.cpp ) if(WIN32) @@ -54,6 +57,14 @@ if(APPLE) set(MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) endif(APPLE) +# auto-generate pcb_calculator_datafile.h and pcb_calculator_datafile_keywords.cpp +# for the storage data file format. +make_lexer( + ${CMAKE_CURRENT_SOURCE_DIR}/pcb_calculator_datafile.keywords + ${CMAKE_CURRENT_SOURCE_DIR}/pcb_calculator_datafile_lexer.h + ${CMAKE_CURRENT_SOURCE_DIR}/pcb_calculator_datafile_keywords.cpp + PCBCALC_DATA_T + ) add_executable(pcb_calculator WIN32 MACOSX_BUNDLE diff --git a/pcb_calculator/bitmaps/regul_3pins.xpm b/pcb_calculator/bitmaps/regul_3pins.xpm new file mode 100644 index 0000000000..09696b1b50 --- /dev/null +++ b/pcb_calculator/bitmaps/regul_3pins.xpm @@ -0,0 +1,369 @@ +/* XPM */ +static const char *regul_3pins_xpm[] = { +/* columns rows colors chars-per-pixel */ +"255 170 193 2", +"+X c Black", +"2. c #E7DA69", +".X c #F2F26C", +"( c #DFC960", +"= c #810000", +"w. c #CFA750", +"$ c #F2F274", +"Y. c #840A05", +"L c #B77437", +"/. c #0303FD", +";. c #D2AE53", +"w c #920000", +"+. c #CA9D4B", +"f c #C28C43", +"^. c #E5D767", +"^ c #DDC65F", +". c #FFFFFF", +"z c #D5B557", +"|. c #A24820", +"S. c #AA592B", +"!. c #A24823", +"| c #9A371A", +" X c #B57132", +"} c #922612", +"=. c #8A150A", +"x c #AD602E", +"t. c #A54F26", +"3. c #9D3E1E", +"6 c #F3F36E", +"' c #8D1C0D", +"D c #8D1C0E", +"0. c #850B05", +"R c #B06732", +"e c #8E0000", +"p c #E3D164", +"*. c #A04521", +"S c #983419", +"O. c #D3AF54", +" . c #CB9E4C", +"P. c #EEE96F", +"L. c #881209", +"<. c #800100", +"y. c #E6D868", +"J c #D6B657", +"I. c #CEA54F", +"$X c #790000", +"a. c #F1F073", +"c c #C69447", +",. c #E1CE63", +"3 c #A65024", +"N. c #9E3F1E", +"D. c #C18A42", +"r c #962E15", +"d c #B9793A", +"` c #DCC45E", +"m. c #B16832", +"XX c #BC8039", +"m c #A14622", +"oX c #993518", +"4. c #C49146", +"p. c #891309", +"9 c #880000", +"F c #810201", +"+ c #4343D8", +"`. c #48006F", +"OX c #9C3C1B", +"$. c #942B14", +"T c #8C1A0C", +"j c #F2F174", +"c. c #840904", +"- c #2800AF", +"{ c #EAE06B", +"J. c #A75428", +"< c #860000", +"a c #DABE5B", +"! c #973218", +"M. c #8F2110", +"T. c #CA9C4B", +"K c #871008", +"W c #EDE76F", +"b c #C28B42", +"q c #AA0000", +"% c #1D1DEE", +"I c #DDC55F", +"; c #550055", +"W. c #D5B456", +"# c #3C3CDD", +"4 c #840000", +"n c #F0EE72", +"7 c #BD813A", +"k c #C59246", +"V. c #E8DD6A", +"k. c #BD813E", +", c #350095", +"(. c #0E0EF7", +"P c #D0AA51", +"}. c #C0883D", +"* c #820000", +"X. c #B87739", +" c #3729C3", +"~ c #B06631", +"Z c #A04421", +"%. c #C38F45", +"Y c #B36D34", +"Q c #EEE86F", +"U. c #AB5C2C", +"X c #800000", +"n. c #932914", +"h. c #8B180B", +"V c #830703", +"v. c #E9DE6A", +"5 c #B67133", +"j. c #E1CD62", +"] c #9E411F", +"Q. c #D9BC5A", +": c #40007F", +"[. c #400080", +".. c #C99A4A", +"]. c #4F0060", +">. c #C18942", +"H c #E4D465", +"C. c #B97839", +"'. c #2000C0", +"R. c #DCC35E", +"-. c #EFEC71", +"#X c #7C0000", +"y c #993418", +"o c #0000FF", +"K. c #E7DB69", +"z. c #BC7F3D", +"r. c #CFA851", +"N c #A44C24", +"E. c #BF8640", +"@ c #0808FB", +"1. c #B77538", +"v c #8C190C", +"G. c #840804", +":. c #CA9E4C", +"_ c #C28D44", +"O c #1010F6", +"s. c #8F200F", +"s c #B26B33", +"E c #870F07", +"A. c #AA5A2B", +"~. c #A24923", +"@X c #780000", +"l. c #922713", +"6. c #8A160A", +"). c #0101FE", +"@. c #F0ED72", +"M c #820502", +"C c #E8DC6A", +"8 c #890000", +"2 c #C89845", +"&. c #C89849", +"g. c #EBE36D", +"/ c #C08741", +"u c #B87638", +"7. c #DBC15C", +"_. c #2900AE", +"f. c #B06530", +"o. c #D3B054", +"g c #CB9F4C", +"G c #EEEA70", +"H. c #DEC860", +"l c #B36C34", +"F. c #AB5B2C", +"> c #1800CF", +"b. c #CEA650", +"5. c #C69547", +") c #9B391B", +"8. c #B67337", +"t c #AE622C", +"0 c #850000", +"#. c #8B170B", +"A c #AE622F", +"B. c #830603", +"{. c #9E401C", +"q. c #A65127", +"Z. c #9E401E", +"e. c #962F16", +"d. c #8E1E0F", +"i c #B16932", +"9. c #ECE46D", +"1 c #A14720", +"& c #830000", +"u. c #A14722", +"h c #DCC25D", +"U c #99361A", +"i. c #D4B155", +"B c #912512", +"x. c #EFEB71", +"[ c #810301", +/* pixels */ +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . . . . X X X . . . . . . X X X X X X X X . . . . . . . X X X X . . . . . . . . X X X . . X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . . . X X X X . . . . X X X X X X X X X X X X . . . . . X X X X . . . . . . . . X X X . . X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . X X X X . . . X X X X X X X X X X X X X X . . . . X X X X . . . . . . . . X X X . . X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . ", +" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . . X X X . . . X X X X X . . . . . . X X X X X . . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . X X X X . . . X X X X . . . . . . . . X X X X . . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . X X X X . . X X X X . . . . . . . . . . X X X . . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . X X X . . . X X X X . . . . . . . . . . X X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o . . . . . . . . . . . . . . . . X X X X . . . . . X X X X . . . X X X X . . . . . . . . . . X X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o . . . . . . . . . . . . . . . . . X X X . . . . . X X X . . . . X X X . . . . . . . . . . . . X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . o o O + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ o o . . . . . . . . . . . . . . . . . X X X X . . . X X X X . . . . X X X . . . . . . . . . . . . X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . X X X . . . X X X X . . . . X X X . . . . . . . . . . . X X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . X X X X . . X X X . . . . . X X X X . . . . . . . . . . X X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . X X X X . X X X X . . . . . X X X X . . . . . . . . . . X X X X . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . & * . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . X X X . X X X . . . . . . X X X X . . . . . . . . . X X X X . . . X X X X . . . . . . . . X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . X X X X X X X . . . . . . . X X X X . . . . . . . . X X X X . . . . X X X X . . . . . . X X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . X X X X X X . . . . . . . X X X X X X . . . . X X X X X . . . . . X X X X . . . . . X X X X X . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X X * . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . X X X X X . . . . . . . . . X X X X X X X X X X X X X X . . . . . X X X X X X X X X X X X X . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X X = * . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . X X X X X . . . . . . . . . . X X X X X X X X X X X X . . . . . . . X X X X X X X X X X X . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X X X = X . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . X X X X X X X X . . . . . . . . . . . X X X X X X X X . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . X X X X X X = X . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X = * . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X * . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X = X . ", +". . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % - ; X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X = X ", +". . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % : X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X = ", +". . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % > , X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X < . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X < . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X = X < . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X = X < . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X = X X . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 < . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X X X X X X * 8 . . . . . . . . . X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X X X X X X X X & . . . . . . . X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X X X X X X X X X 9 . . . . . X X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . X X X = . . . . 4 X X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . . X X X . . . * X X X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . . = X X . . . X X X 0 X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . . X X X . . . X X . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . * X X X . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X X X X X X X X X . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X X X X X X X X X . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X = X = X X X * . . . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . = X X X . . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . X X X . . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . X X X = . . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . X X X q . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . X X X = . . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . . X X X X . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X X . . . . . . X X X X . . . . . < X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . X X w . . . . . . . = X X . . . . . e X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X r t t t t t t t t t t t t t t t t t y X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ u i i p $ $ $ $ $ $ $ $ $ a i i i i i i s d f g h j $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ k i l $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z X X X x $ $ $ $ $ $ $ $ $ c X X X X X X X X X X X v b n $ $ $ $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ N X B X V C $ $ $ $ $ $ $ $ c X X Z A A A x N S D F X X Z G $ $ $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H F X J K X L $ $ $ $ $ $ $ $ c X X P $ $ $ $ $ $ $ I U X X N $ $ $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Y X T j R X E W $ $ $ $ $ $ $ c X X P $ $ $ $ $ $ $ $ Q ! X X P $ $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q E X ~ $ ^ X X / $ $ $ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ ( X X ) $ $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ X X ` $ $ U X ' n $ $ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ ] X [ { $ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ j } X | $ $ $ .X X ..$ $ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ X.X X o.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O.X X +.$ $ $ @.#.X $.$ $ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ %.X X &.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ *.X =.-.$ $ $ $ d X X ;.$ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ :.X X >.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,.<.X 1.$ $ $ $ $ 2.M X 3.$ $ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ 4.X X 5.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ X X K 6.6.6.6.6.6.[ X X 7.$ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ 8.X X O.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9.0.X X X X X X X X X X X X q.$ $ $ $ c X X P $ $ $ $ $ $ $ $ $ $ S X F 9.$ $ $ $ $ $ $ $ $ $ m X M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ / X X w.G G G G G G G G e.X [ p $ $ $ c X X P $ $ $ $ $ $ $ $ $ r.X X t.$ $ y.u.$.i.$ $ $ $ $ S X p.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ a.s.X d.a.$ $ $ $ $ $ $ $ &.X X f.$ $ $ c X X P $ $ $ $ $ $ $ $ g.h.X [ j.$ $ 9.X X k.$ $ $ $ $ 6.X l.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r.X X z.$ $ $ $ $ $ $ $ $ x.=.X c.v.$ $ c X X P $ $ $ $ $ $ $ b.n.X X m.$ $ $ $ =.X M.-.$ $ $ b.X X x $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ N.X B.V.$ $ $ $ $ $ $ $ $ $ C.X X C.$ $ c X X Z.A.A.A.S.*.$.E X X X l j $ $ $ $ f X X $.D.5.F.G.X M 7.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H.X X J.$ $ $ $ $ $ $ $ $ $ $ K.B.X L.P.$ c X X X X X X X X X X [ Z I.$ $ $ $ $ $ a.U.<.X X X X X Y.T.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ J d d ( $ $ $ $ $ $ $ $ $ $ $ $ &.d d j.$ R.d d d d d d d E.+.W.K.$ $ $ $ $ $ $ $ $ $ Q.l !.S ~.k.^.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o /.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.).o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o _.`.'.o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o ].X [.o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X {.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.|.X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X X . . . . . . X X X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X X X . . . . X X X X X X X X . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X X X X . . X X X X X X X X X . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . X X X X . . X X X . . . X X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . X X X . . X X X . . . . X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . X X X . . X X X . . . . X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . X X X . . . . . . . . . X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . X X X X . . . . . . . . X X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X X X . . . . . . . . . X X X . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X X X . . . . . . . . X X X X . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X X X X X X X . . . . . . . . . X X X X . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . X X X X . . . . . . . X X X X . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . X X X . . . . . . X X X X . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . X X X X . . . . X X X X . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . X X X X . . . X X X . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . X X X X . . X X X X . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . X X X X . X X X X X X X X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . X X X . . . . . . . X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.XXXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X oX X X X X X X X X X X X X X X X X XOXX X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X X X X X X X X X X X X X X X X X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X X X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +X+X+X+X+X+X+X+X+X@X#X$X+X+X+X+X+X+X+X+X+X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " +}; diff --git a/pcb_calculator/bitmaps/sources/regul_3pins.png b/pcb_calculator/bitmaps/sources/regul_3pins.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb59b29737585d9b8a6e966bfe6361c308ec7a6 GIT binary patch literal 6003 zcmb7|cT^MIo5vFZp@Rrg1$+TPKzi>*kRrV!C877;I}rse1W}qwQ>2$rlwN{JkuC@c zAP@xUCDM_S9d>_bcmLQuXE*2E%$Ykg&)oYw-}^kDJ5P-aw5TaqDL^0)wT`xi32-C; zt(*)B{5w8)g9Hx5LFzhYWWX<)%sCl2C->L34g&7STs5%zop<3tCrhxVRj{d_YjBuD zpbIE0EKJzL*DJ`$!QVyLFVOAXjv^}v#E93?P%{h9*`AAtHv8R-{lT*bfTte%}N2W5uIiSUf(1kE2S1r4o3RJ=%;ad0(< znsj24!2NebLhZx99(^ew4&0w5vR3s_bHKwtgz(1&rZh9ilFCy3+(}O7v)Z|jbB3pI z?`gbH1mncv#A76~ph^-(h=@FwO?g?|E&T5Mir>w&_JEmvI~-R5mM)+zrVvs4^gN1- zL5_>|#|PUK7sxI|4Q_W!rqfT&!RY#31(GH(miPcVfXGm#^&?Pz^Q#^ZZAFmJ|MiAj zv=LQ{2_Y6BRS1}-&Mvtkr7d&Oi9e149g-43e$vccr=r`j)ID=}%g6`sqypy!y#x2n zhUr?dOVvV48*y=rZ0CItH*nC>4T|NJMriDskFuo^v)&rLO_@Kk-xiZSiGGUy%yaD= zeO!x(BMawO?2_Ugttf15^peK^Q$rjT@|~8M_Qlt{g2dKd+vQ~M>V1_Jcf!|Ri;ojE zoa$%smLER)8LHWQ7=X?bagfRrEot96L2$z3z`xO)Uyf8LKK0l?vrRFKOxR*7CZor7mG{~-Il zw~|KbY@K%cpafs7w*w!|yVDz`~f^u9a5GLx~Dv?T+^=pZH znTq*5=h90Tp0 zJmG;^;c`gZ@PRZc<@H4$wsYE#OrfHs_Y;Zlk+hpE7blPZ&vkU){7RLSM^JG;(VaU~ z)x^q&M=8%uc@Lg8Ge)W0@V#C0oICF6TzkwrNb{*R;^(;zngb3Ng;-I0Q!TH=H8v2) zCfAg9g+@bC)-Ciq@*nRhaNTe?OTf}Ip}D1GeM?7gjY_#1Q4hF0uBDT@qFrJ~U9`Otk+PpTMC zyv(&h0@$X#Gp*u-3qElN3iqS4f1yqDxC&L?70_*H&+Ta>%>9^@V1q@zy1Vt;T#^ZF zhe-GleFw$j&+l)p=HMR=te?L?6i(6W*nc?h9p2+kjfybq{!VnV&|>i``DXFP-J6@^ zD#4oagLJ3TTvbVpKev;&0PBqogv|GzkI^!9_XJ6vbk(W)UOqs_IS>jtk*`#OzY#(K z<67wl;r7CJs5&@03W1n&y?jTYIO-5Yy{$_C%``5I@|Sp*_PjS2zqr_qk@LUB*0%8A zdK>5`l0BAfExD5Fc2lopp{M&Pt?@u8K6BG6;HP7O#8?@l3)|P&oEJgpQ`_)N&JgQo{9r5~V3@Jg2Co{K~_lBKCPg8L%DxuqRubGnHO zx{nQm44v0nW6}eu?Jd${-dpRa0J2RYT{@&&|6GfraWP+sqF1>7gKah;)l1J37p+?Q z*FRZu!G_f{luew+JH`PU8Gwz9`bBxj#Pf6EB?T?B1U}Zu;DKb^CtMucoiFyTc0^aM zpjVIzRG~8!$k1if`p6JIJloc5W1rHlbn%tWn!a#N%S``yh~u){BQHH^^G3$!>}ew1 zuNo7pXtfJkoZ4LkiplvZZ_b#bZ(_0^-xo$wTt4~&X9=CUVRk{J-W`QvVt|HeWf}`S zRd+iEa)dRuZ24MyAuVXv1Krm)OljvNY=D!Mfk4_1`RNXQ-h1}rH%^-;`4E%sjmbW%F@zGGPtrX->e?%AY-2dv>N2)}w@S-r6QD00buh2#!3I<8TS<@UjOGDakkAG81D(TD=dRzI}s8ZR-${n`wcV>_J3W z4ef~Dm%PubAQ(u$mUi#Odr$4=_;S)GTuLw4L)NH&F52l2L6rNBAUVk~in5Z+e^jL! zZyyeWs(NBUIZ>$>s!F<*5-MgPTTg^94l7X`gMwHI4@*CVy?^pbZ>FVSkzYz`VDn-` zO_1>Jiv7-71ngP6iR>WV)4ya@+;yWBfLLQV8#BuIlKBFXSbjNp2^R zm3kQYL!#3S8oE_4VMO#bT35HsIZ)&BH)|067^#AnpC~Zzxf0 zAKj^<;xNyt*h;!s;+$$L++Rq-O*waG<-{J#laJDn<)7O&&KOl0;u>(4gWQIWG;28< zyTd}VE_BPN{uwJKQf^+zHdQ~9JjvKgl_tt>>ZMA$b9~+_`s8b|n7xme+mm{Rrjvv^>Fn4GT*z4&hy?{=OXdO)XAzyL~9`l zVHhj+J<*jS^2pDq!};#nTHT?#Z?nXlPgw$Gt@Ijc3=iu2)jbOYBvj3B$Oo>6;{AE79f&q}MxT-W7} zQ+_ITjDaW(L3?$|192f@b0Sf8#|vfzs3Q#1A6)p)ES898dJRpYBLeEEk20BhBW$jr z6}6l_a}?L7EVgDp-IwRmoOJntvt;=uwPFj8q<%)lb(s~13`&_^Pi`|m%Pjh-i`xpn zdV@evE`|U3X$-T!b*H>#L+F&eMSDFfoZ)EOg4#gZd+1SpdFzkVew5jLaZqlMLcpFB zWa)Q`*FrP4%Kv#I``S5m%-a#0s5-OvLs_}dg1_-T6R34aDxwOAO~?gI}y zQOC%m8^iE*l&0?W(oNoiW^QqQ>+K1gr9en8_`>P71?bFS0@9mv%9a*VyBD$0d`yf7 zAGz@8yzfGpZOlE5Y1YzaJhCIQ1St(V9C7zjbt(|jNl13l-y z(T4#Hq)>hCZWP3q^?`@jdjl~;D!9Wc&igxLQL;ZF1$0zP(TXH zRAc7f7c>p8FOdWSgon+|J?{0qPgOL4PVl_pv3eg+|BBCA2w3YW_ zbc;sl(PHdAefDO^{*kj6EFwp>bI;r(-rieR^GBF}^Uk>%<*#JLH`*Ofxg=^vx3vx_ z(=O2MI-VA{+qWzSO0E_yKj4mN-2@naJ~03POBZRBS+M}A72yw*hM_OIRM>>Qj)uf=mFiWDEg!Y$(+!>##9^E%~cz#)0Kfz58lDCN*{@b!JcZ* z4TRRl8XcqWXvWVbGi;K@Bhja6u9g7X9C6(oijCOBk`;A{>!j#qq;h;dA`=a z7n7A|{zBGrmo%~FO4OIER_6y?Ao+vM{%Ta1$;k}G{R>|0L17{K>cY{m)ROH0AHl{V zbu7$mV7}@M+Ze(bC6iSXHfXsFWacXp?X70A zX-NUxUl;wCVxa9QS3;~~LdSl=NHFJjNW7+Dj6u(0=|YRGS1y#JJ7Dzy3g3S;d=uNO zQg$d<)Ww;Ke&yz47?U~?HFg{Iz-1i&E)in1=R*!_H{VV+sXD+b+kUjgHaOdiZ(3d! zcX9T~1WnZkO&Wj_FTJsJ9v8yfh85LSAghz`J&|FX5HGvt4!_Ngj~LXseu4^8({u}O zKR6<^9_B&d9u-%E18E9Avr>t&GfADRw5uODtm7Fnv=qpJ#z}=%&6~4~CG@R+ z|G56$&v>NOm&{u3s54;k;}adFOEo{L@-3qSRC$#2IDe;F0-1yMN*}a#QWoa$fpWqFRNgjxJ|;xT?EWq!=QP>d=D4pCZ1CG3-gGfv1Fvrw zM(UahXzZRAzNB!dm1)BqHHGHj{bIiP=GkqJ;t8@nnLaVUE;`|DiEM(1}QJ>)5aCulaIDmxW!NJu}u`{Pup3JG(84dKTxaUZl3M z*M$^j;Wn28fk#XkQybWd1=#TBYP*HpCz*p@hu}3#t$4e~tZPP}wY(4iZ_>e30a(i% zN9$^T-e=E*J<|5ARIY;q``5+#0&WLA6CbVV6Mu?6KJCmMUA#!L77r2Q-enCj>kuiv z>o}=UQ65T`&X`db7DRq~A@io#$FPB_lE9;c!qjqZ|1<5C^F60$m~Gd;(;^b#wj6R* zfmlgDdf3IZf%L$@H?G~5HrDfsj0JbR)*XSnr(u_BfC)|M6^V7oez^a7Wi=|~{6F{!a5~qsKI%^xLfRT^AhiSD? ztv|GOlhmJ;EHcMfeA<|KhJ?tQkFdVzab_9G4+KXn?OPp=2mtcb^f2ZZQfU0>R=~%1 z0l(!FxiMByo(GM4Y~SUyenYWg>UR)I`Lr|!$b0VxUkV!sV)T#clms}1P0EXbn)$En z%{u2o05D-~a`Q4+ru$e|H<-xS36uSZfI_DZ4Ax`oOCnlkO}rp))cjWVZfDiz)lbaj zIG=d6uoZZgh>;LP5c86IHW`;~vr)_wE$ju|GMjQyUM;hxT1D}%ckY+Ycu01MeBr%y z6mHGE_}1ffJb7Vr*f`%WJ>9UV^f;-F`cjkfqyJ}BDgQpSJ*t}3+TO zfxE7=I^_z*4tI!Y9{ad~W8wwl^U%N+X%VR{7Vo7;iIeiisZh63-h}88R}*y*?^Jjd z0-PXzVnI(d6E6T zxDY>yYnhS*HU`N4PH;BqCnD&N!;^m}kdk@vHa|E-lrt(bRdUoO6t#&stOMAEbwfxd zF;teTvz(Wp>epOcO*$n3P}#4;wS^6z*lg9yrFhDCJM>Ho2W%9W>bz66Skjk@_dr0hqla_^-HP7|*F;y|}rtPz|AKLh7!-~W#}MIpqu ztYew|S&qgp^t7Bc+rCtbWkFJjZliA_`w_C5*FRh#sS=~|$S!LTC7wsLPs+81yH3eM z4U-)dzphH+U&LK^*E(e!kjTax?mY%P-&Px;#OZfX3Ja)>S`y+LprNeos&M7NRE3&G zqJ?AO%~Txg1o>Hr!#0BSW?I=d-*_O%9=PO6(!4!s&cGCp>uJBKaT+*UWWQ3GdjfEA zeP6VONuhOj=IVpmE_k6UHuproOup$q{H&ekHROyF#&KY>*XK_zG(;Y-;M=@D#Ja83 zBm2)=Zo;mZFp@!G5G5iyFSWvs3l{NVFsD7$c$<<-fO-A9V(77}_(4Y(e~r+V-WQ~a z@T7ez9Iw&wc#E_F@H9h!MxLJN0u}r|wmQmmynqbYl>B%4|1XjL=Z4^a>!Lj>)iVd< zeJ)*2$)_(sju( z*>qS`cln4rE*dU;ZMRBppFOQv$NgbKK^H1|SZal4D{NiqSMtxaoueOo+j!Ie5kiA= zU@mu^^k}Y~vQ~2c1W!+^$~m(+z3nU8tHEY@Iuo;Rn6i9h-e>lweEIsT=O9>1gG0|T z*Q2ltC5{v;=C4WpVLQEZJq^iU+Bm=N(m5c@6*$JcZ-bM56}7TJc`p6*uxOG1spVS- VpLyGD10TpiI+_L=)#~s^{{~7*&qe?M literal 0 HcmV?d00001 diff --git a/pcb_calculator/bitmaps/sources/regul_3pins.svg b/pcb_calculator/bitmaps/sources/regul_3pins.svg new file mode 100644 index 0000000000..ffc5992a76 --- /dev/null +++ b/pcb_calculator/bitmaps/sources/regul_3pins.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + VOUT + Vin + + + + R1 + R2 + + + + + ADJ + + + + diff --git a/pcb_calculator/class_regulator_data.h b/pcb_calculator/class_regulator_data.h new file mode 100644 index 0000000000..12ba365740 --- /dev/null +++ b/pcb_calculator/class_regulator_data.h @@ -0,0 +1,142 @@ +#ifndef CLASS_REGULATOR_DATA_H +#define CLASS_REGULATOR_DATA_H + + +/** + * @file class_regulator_data.h + */ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2011 jean-pierre.charras + * Copyright (C) 1992-2011 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 + +// Helper class to store parameters for a regulator +class REGULATOR_DATA +{ +public: + wxString m_Name; // Regulator name + int m_Type; // type: with separate sense pin (normal) (=0) + // or adjustable 3 pins reg (=1) + double m_Vref; // Vreference in volt + double m_Iadj; // 3 pin type only: I adjust in micro amp + +public: + REGULATOR_DATA( const wxString& aName, double aVref, int aType, double aIadj = 0) + { + m_Type = aType; + m_Vref = aVref; + m_Name = aName; + m_Iadj = aIadj; + } +}; + +// Helper class to store the list of known regulators +class REGULATOR_LIST +{ +public: + std::vector m_List; + +public: + REGULATOR_LIST() {}; + ~REGULATOR_LIST() + { + for( unsigned ii = 0; ii < m_List.size(); ii++ ) + delete m_List[ii]; + } + + unsigned int GetCount() + { + return m_List.size(); + } + + void Add( REGULATOR_DATA* aItem ) + { + // add new item an try to keep alphabetic order, + // and because name have numbers inside, use a KiCad compare function + // that handles number as numbers not ascii chars + unsigned ii = 0; + for( ; ii < m_List.size(); ii++ ) + { + if( RefDesStringCompare( aItem->m_Name, m_List[ii]->m_Name ) < 0 ) + break; + } + m_List.insert( m_List.begin() + ii, aItem ); + } + + REGULATOR_DATA* GetReg( const wxString& aName ) + { + for( unsigned ii = 0; ii < m_List.size(); ii++ ) + { + if( aName.CmpNoCase( m_List[ii]->m_Name ) == 0 ) + { + return m_List[ii]; + } + } + return NULL; + } + + void Remove( const wxString & aRegName ) + { + for( unsigned ii = 0; ii < m_List.size(); ii++ ) + { + if( aRegName.CmpNoCase( m_List[ii]->m_Name ) == 0 ) + { + // Found! remove it + m_List.erase( m_List.begin() + ii ); + break; + } + } + } + + /** + * Replace an old REGULATOR_DATA by a new one + * The old one is deleted + * the 2 items must have the same name + */ + void Replace( REGULATOR_DATA* aItem ) + { + // Search for the old regulator + for( unsigned ii = 0; ii < m_List.size(); ii++ ) + { + if( aItem->m_Name.CmpNoCase( m_List[ii]->m_Name ) == 0 ) + { + // Found! remove it + delete m_List[ii]; + m_List[ii] = aItem; + break; + } + } + } + + wxArrayString GetRegList() + { + wxArrayString list; + for( unsigned ii = 0; ii < m_List.size(); ii++ ) + list.Add( m_List[ii]->m_Name ); + + return list; + } +}; + +#endif // CLASS_REGULATOR_DATA_H diff --git a/pcb_calculator/datafile_read_write.cpp b/pcb_calculator/datafile_read_write.cpp new file mode 100644 index 0000000000..1334623ddb --- /dev/null +++ b/pcb_calculator/datafile_read_write.cpp @@ -0,0 +1,285 @@ +/** + * @file datafile_read_write.cpp + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2012 Jean-Pierre Charras + * Copyright (C) 1992-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 + + +using namespace PCBCALC_DATA_T; + + +static const char* getTokenName( T aTok ) +{ + return PCB_CALCULATOR_DATAFILE_LEXER::TokenName( aTok ); +} + + +bool PCB_CALCULATOR_FRAME::ReadDataFile() +{ + FILE* file = wxFopen( GetDataFilename(), wxT( "rt" ) ); + + if( file == NULL ) + return false; + + // Switch the locale to standard C (needed to read/write floating point numbers + LOCALE_IO toggle; + + PCB_CALCULATOR_DATAFILE * datafile = new PCB_CALCULATOR_DATAFILE( &m_RegulatorList ); + + // dataReader dtor will close file + FILE_LINE_READER dataReader( file, GetDataFilename() ); + PCB_CALCULATOR_DATAFILE_PARSER datafile_parser( &dataReader ); + + try + { + datafile_parser.Parse( datafile ); + } + catch( IO_ERROR& ioe ) + { + delete datafile; + ioe.errorText += '\n'; + ioe.errorText += _("Data file error."); + + wxMessageBox( ioe.errorText ); + return false; + } + + delete datafile; + + return true; +} + +bool PCB_CALCULATOR_FRAME::WriteDataFile() +{ + wxFFileOutputStream os( GetDataFilename(), wxT( "wt" ) ); + if( !os.IsOk() ) + return false; + + // Switch the locale to standard C (needed to read/write floating point numbers + LOCALE_IO toggle; + + PCB_CALCULATOR_DATAFILE * datafile = new PCB_CALCULATOR_DATAFILE( &m_RegulatorList ); + + try + { + int nestlevel; + STREAM_OUTPUTFORMATTER outputFormatter( os ); + nestlevel = datafile->WriteHeader( &outputFormatter ); + datafile->Format( &outputFormatter, nestlevel ); + while( nestlevel-- ) + outputFormatter.Print( nestlevel, ")\n" ); + } + catch( IO_ERROR ioe ) + { + delete datafile; + return false; + } + + delete datafile; + + m_RegulatorListChanged = false; + return true; +} + + +PCB_CALCULATOR_DATAFILE::PCB_CALCULATOR_DATAFILE( REGULATOR_LIST * aList ) +{ + m_list = aList; +} + +static const char* regtype_str[] = +{ + "normal", "3terminal" +}; + +int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR ) +{ + int nestlevel = 0; + aFormatter->Print( nestlevel++, "(datafile\n"); + aFormatter->Print( nestlevel++, "(version 1)\n" ); + aFormatter->Print( nestlevel++, "(date %s)\n", + aFormatter->Quotew( DateAndTime() ).c_str() ); + aFormatter->Print( nestlevel++, "(tool %s)\n", + aFormatter->Quotew( wxGetApp().GetAppName() + + wxChar(' ') + GetBuildVersion() ).c_str() ); + + return nestlevel; +} + +void PCB_CALCULATOR_DATAFILE::Format( OUTPUTFORMATTER* aFormatter, + int aNestLevel ) const throw( IO_ERROR ) +{ + // Write regulators list: + aFormatter->Print( aNestLevel++, "(%s\n", getTokenName( T_regulators ) ); + for( unsigned ii = 0; ii < m_list->m_List.size(); ii++ ) + { + REGULATOR_DATA * item = m_list->m_List[ii]; + aFormatter->Print( aNestLevel, "(%s %s\n", getTokenName( T_regulator ), + aFormatter->Quotew(item->m_Name ).c_str() ); + aFormatter->Print( aNestLevel+1, "(%s %g)\n", getTokenName( T_reg_vref ), + item->m_Vref ); + if( item->m_Iadj != 0 && item->m_Type == 1) + { + aFormatter->Print( aNestLevel+1, "(%s %g)\n", getTokenName( T_reg_iadj ), + item->m_Iadj ); + } + aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_reg_type ), + regtype_str[item->m_Type] ); + aFormatter->Print( aNestLevel, ")\n" ); + } + aFormatter->Print( --aNestLevel, ")\n" ); +} + + +void PCB_CALCULATOR_DATAFILE::Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser ) + throw( IO_ERROR, PARSE_ERROR ) +{ + aParser->Parse( this ); +} + + + +// PCB_CALCULATOR_DATAFILE_PARSER + +PCB_CALCULATOR_DATAFILE_PARSER::PCB_CALCULATOR_DATAFILE_PARSER( LINE_READER* aReader ) : + PCB_CALCULATOR_DATAFILE_LEXER( aReader ) +{ +} + + +PCB_CALCULATOR_DATAFILE_PARSER::PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxString aSource ) : + PCB_CALCULATOR_DATAFILE_LEXER( aLine, aSource ) +{ +} + + +void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + while( ( token = NextTok() ) != T_EOF) + { + + if( token == T_LEFT ) + { + token = NextTok(); + + if( token == T_regulators ) + { + ParseRegulatorDescr( aDataList ); + continue; + } + } + } +} + +void PCB_CALCULATOR_DATAFILE_PARSER::ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList ) + throw( IO_ERROR, PARSE_ERROR ) +{ + T token; + wxString name; + double vref, iadj; + int type; + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + Unexpected( T_EOF ); + + if( token == T_LEFT ) + token = NextTok(); + + if( token == T_regulator ) + { + type = 0; + vref = 0.0; + + // Read name + token = NextTok(); + name = FROM_UTF8( CurText() ); + + while( ( token = NextTok() ) != T_RIGHT ) + { + if( token == T_EOF) + Unexpected( T_EOF ); + + if( token == T_LEFT ) + token = NextTok(); + + switch( token ) + { + case T_reg_vref: // the voltage reference value + token = NextTok(); + if( token != T_NUMBER ) + Expecting( T_NUMBER ); + sscanf( CurText(), "%lf" , &vref); + NeedRIGHT(); + break; + + case T_reg_iadj: // the Iadj reference value + token = NextTok(); + if( token != T_NUMBER ) + Expecting( T_NUMBER ); + sscanf( CurText(), "%lf" , &iadj); + NeedRIGHT(); + break; + + case T_reg_type: // type: normal or 3 terminal reg + token = NextTok(); + if( stricmp( CurText(), regtype_str[0] ) == 0 ) + type = 0; + else if( stricmp( CurText(), regtype_str[1] ) == 0 ) + type = 1; + else + Unexpected( CurText() ); + NeedRIGHT(); + break; + + default: + Unexpected( CurText() ); + break; + } + } + + if( ! name.IsEmpty() ) + { + if( type != 1 ) + iadj = 0.0; + REGULATOR_DATA * new_item = new REGULATOR_DATA(name, vref, type, iadj ); + aDataList->m_list->Add( new_item ); + } + } + } +} diff --git a/pcb_calculator/datafile_read_write.h b/pcb_calculator/datafile_read_write.h new file mode 100644 index 0000000000..0100ef2cc6 --- /dev/null +++ b/pcb_calculator/datafile_read_write.h @@ -0,0 +1,65 @@ +#ifndef DATAFILE_READ_WRITE_H_ +#define PDATAFILE_READ_WRITE_H_ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2011 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 + +class PCB_CALCULATOR_DATAFILE_PARSER; + +/** + * Class PCB_CALCULATOR_DATAFILE + * handles data to calculate regulators parameters + */ +class PCB_CALCULATOR_DATAFILE +{ + friend class PCB_CALCULATOR_DATAFILE_PARSER; +protected: + REGULATOR_LIST * m_list; + +public: + PCB_CALCULATOR_DATAFILE( REGULATOR_LIST * aList ); + + int WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR ); + void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const throw( IO_ERROR ); + void Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser ) throw( IO_ERROR, PARSE_ERROR ); +}; + + +/** + * Class PCB_CALCULATOR_DATAFILE_PARSER + * is the parser class for PCB_CALCULATOR_DATAFILE. + */ +class PCB_CALCULATOR_DATAFILE_PARSER : public PCB_CALCULATOR_DATAFILE_LEXER +{ +public: + PCB_CALCULATOR_DATAFILE_PARSER( LINE_READER* aReader ); + PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxString aSource ); + LINE_READER* GetReader() { return reader; }; + void Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR ); + void ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR ); +}; + +#endif // PDATAFILE_READ_WRITE_H_ diff --git a/pcb_calculator/dialogs/dialog_regulator_data.fbp b/pcb_calculator/dialogs/dialog_regulator_data.fbp new file mode 100644 index 0000000000..d3984372c2 --- /dev/null +++ b/pcb_calculator/dialogs/dialog_regulator_data.fbp @@ -0,0 +1,1163 @@ + + + + + + C++ + 1 + source_name + 0 + 0 + res + UTF-8 + connect + dialog_regulator_data_base + 1000 + none + 1 + dialog_regulator_data + + . + + 1 + 1 + 1 + 0 + 0 + + 1 + 1 + 1 + 1 + + 0 + + + + + + + 1 + wxBOTH + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + impl_virtual + + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + DIALOG_EDITOR_DATA_BASE + 1 + + + 1 + + Resizable + 1 + 310,210 + wxDEFAULT_DIALOG_STYLE + DIALOG_SHIM; dialog_shim.h + Regulator Parameters + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerMain + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 3 + wxHORIZONTAL + 1 + 0 + 0 + + fgSizerPrms + wxFLEX_GROWMODE_SPECIFIED + none + 4 + 0 + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Name + + 0 + + + 0 + + 1 + m_staticTextName + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlName + 1 + + + protected + 1 + + Resizable + 1 + + + + 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 + Vref + + 0 + + + 0 + + 1 + m_staticTextVref + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_textCtrlVref + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Volt + + 0 + + + 0 + + 1 + m_staticTextVrefUnit + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Type + + 0 + + + 0 + + 1 + m_staticTextType + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Separate sense pin" "3 terminals regulator" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceRegType + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnRegTypeSelection + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + Iadj + + 0 + + + 0 + + 1 + m_RegulIadjTitle + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_RegulIadjValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + uA + + 0 + + + 0 + + 1 + m_IadjUnitLabel + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_sdbSizerButtons + protected + + OnCancelClick + + + + OnOKClick + + + + + + + + diff --git a/pcb_calculator/dialogs/dialog_regulator_data_base.cpp b/pcb_calculator/dialogs/dialog_regulator_data_base.cpp new file mode 100644 index 0000000000..0c2db4d6e4 --- /dev/null +++ b/pcb_calculator/dialogs/dialog_regulator_data_base.cpp @@ -0,0 +1,105 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_regulator_data_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_EDITOR_DATA_BASE::DIALOG_EDITOR_DATA_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 ); + + wxFlexGridSizer* fgSizerPrms; + fgSizerPrms = new wxFlexGridSizer( 4, 3, 0, 0 ); + fgSizerPrms->AddGrowableCol( 1 ); + fgSizerPrms->AddGrowableRow( 0 ); + fgSizerPrms->SetFlexibleDirection( wxHORIZONTAL ); + fgSizerPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextName = new wxStaticText( this, wxID_ANY, _("Name"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextName->Wrap( -1 ); + fgSizerPrms->Add( m_staticTextName, 0, wxALL, 5 ); + + m_textCtrlName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerPrms->Add( m_textCtrlName, 0, wxALL|wxEXPAND, 5 ); + + + fgSizerPrms->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextVref = new wxStaticText( this, wxID_ANY, _("Vref"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVref->Wrap( -1 ); + fgSizerPrms->Add( m_staticTextVref, 0, wxALL, 5 ); + + m_textCtrlVref = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerPrms->Add( m_textCtrlVref, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextVrefUnit = new wxStaticText( this, wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVrefUnit->Wrap( -1 ); + fgSizerPrms->Add( m_staticTextVrefUnit, 0, wxALL, 5 ); + + m_staticTextType = new wxStaticText( this, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextType->Wrap( -1 ); + fgSizerPrms->Add( m_staticTextType, 0, wxALL, 5 ); + + wxString m_choiceRegTypeChoices[] = { _("Separate sense pin"), _("3 terminals regulator") }; + int m_choiceRegTypeNChoices = sizeof( m_choiceRegTypeChoices ) / sizeof( wxString ); + m_choiceRegType = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceRegTypeNChoices, m_choiceRegTypeChoices, 0 ); + m_choiceRegType->SetSelection( 0 ); + fgSizerPrms->Add( m_choiceRegType, 0, wxALL|wxEXPAND, 5 ); + + + fgSizerPrms->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_RegulIadjTitle = new wxStaticText( this, wxID_ANY, _("Iadj"), wxDefaultPosition, wxDefaultSize, 0 ); + m_RegulIadjTitle->Wrap( -1 ); + fgSizerPrms->Add( m_RegulIadjTitle, 0, wxALL, 5 ); + + m_RegulIadjValue = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerPrms->Add( m_RegulIadjValue, 0, wxALL|wxEXPAND, 5 ); + + m_IadjUnitLabel = new wxStaticText( this, wxID_ANY, _("uA"), wxDefaultPosition, wxDefaultSize, 0 ); + m_IadjUnitLabel->Wrap( -1 ); + fgSizerPrms->Add( m_IadjUnitLabel, 0, wxALL, 5 ); + + + bSizerMain->Add( fgSizerPrms, 0, wxEXPAND, 5 ); + + m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMain->Add( m_staticline2, 0, wxEXPAND | wxALL, 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_choiceRegType->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnRegTypeSelection ), NULL, this ); + m_sdbSizerButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnCancelClick ), NULL, this ); + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnOKClick ), NULL, this ); +} + +DIALOG_EDITOR_DATA_BASE::~DIALOG_EDITOR_DATA_BASE() +{ + // Disconnect Events + m_choiceRegType->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnRegTypeSelection ), NULL, this ); + m_sdbSizerButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnCancelClick ), NULL, this ); + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDITOR_DATA_BASE::OnOKClick ), NULL, this ); + +} diff --git a/pcb_calculator/dialogs/dialog_regulator_data_base.h b/pcb_calculator/dialogs/dialog_regulator_data_base.h new file mode 100644 index 0000000000..5b531a5de6 --- /dev/null +++ b/pcb_calculator/dialogs/dialog_regulator_data_base.h @@ -0,0 +1,67 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Mar 17 2012) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __DIALOG_REGULATOR_DATA_BASE_H__ +#define __DIALOG_REGULATOR_DATA_BASE_H__ + +#include +#include +#include +#include "dialog_shim.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +/// Class DIALOG_EDITOR_DATA_BASE +/////////////////////////////////////////////////////////////////////////////// +class DIALOG_EDITOR_DATA_BASE : public DIALOG_SHIM +{ + private: + + protected: + wxStaticText* m_staticTextName; + wxTextCtrl* m_textCtrlName; + wxStaticText* m_staticTextVref; + wxTextCtrl* m_textCtrlVref; + wxStaticText* m_staticTextVrefUnit; + wxStaticText* m_staticTextType; + wxChoice* m_choiceRegType; + wxStaticText* m_RegulIadjTitle; + wxTextCtrl* m_RegulIadjValue; + wxStaticText* m_IadjUnitLabel; + wxStaticLine* m_staticline2; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnRegTypeSelection( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOKClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + DIALOG_EDITOR_DATA_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Regulator Parameters"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 310,210 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~DIALOG_EDITOR_DATA_BASE(); + +}; + +#endif //__DIALOG_REGULATOR_DATA_BASE_H__ diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp index 096691474c..5418fa4fdf 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp @@ -1,12 +1,10 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 30 2011) +// C++ code generated with wxFormBuilder (version Mar 17 2012) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#include "UnitSelector.h" - #include "pcb_calculator_frame_base.h" #include "../bitmaps/arrow_bottom.xpm" @@ -16,6 +14,7 @@ #include "../bitmaps/color_code_value.xpm" #include "../bitmaps/color_code_value_and_name.xpm" #include "../bitmaps/regul.xpm" +#include "../bitmaps/regul_3pins.xpm" /////////////////////////////////////////////////////////////////////////// @@ -35,31 +34,47 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxBoxSizer* bSizerMainReg; bSizerMainReg = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizeLeftpReg; + bSizeLeftpReg = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizerBitmapReg; bSizerBitmapReg = new wxBoxSizer( wxVERTICAL ); bSizerBitmapReg->Add( 0, 0, 1, wxEXPAND, 5 ); - m_bitmapRegul = new wxStaticBitmap( m_panelRegulators, wxID_ANY, wxBitmap( regul_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerBitmapReg->Add( m_bitmapRegul, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bitmapRegul4pins = new wxStaticBitmap( m_panelRegulators, wxID_ANY, wxBitmap( regul_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerBitmapReg->Add( m_bitmapRegul4pins, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapRegul3pins = new wxStaticBitmap( m_panelRegulators, wxID_ANY, wxBitmap( regul_3pins_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerBitmapReg->Add( m_bitmapRegul3pins, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerBitmapReg->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizeLeftpReg->Add( bSizerBitmapReg, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizerRegFormula; + sbSizerRegFormula = new wxStaticBoxSizer( new wxStaticBox( m_panelRegulators, wxID_ANY, _("Formula") ), wxVERTICAL ); m_RegulFormula = new wxStaticText( m_panelRegulators, wxID_ANY, _("Vout = Vref * (R1 + R2) / R2"), wxDefaultPosition, wxDefaultSize, 0 ); m_RegulFormula->Wrap( -1 ); m_RegulFormula->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - bSizerBitmapReg->Add( m_RegulFormula, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + sbSizerRegFormula->Add( m_RegulFormula, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerBitmapReg->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizeLeftpReg->Add( sbSizerRegFormula, 0, wxEXPAND, 5 ); - bSizerMainReg->Add( bSizerBitmapReg, 1, wxEXPAND, 5 ); + + bSizerMainReg->Add( bSizeLeftpReg, 1, wxEXPAND, 5 ); wxBoxSizer* bSizerRegulRight; bSizerRegulRight = new wxBoxSizer( wxVERTICAL ); wxFlexGridSizer* fgSizerRegParams; - fgSizerRegParams = new wxFlexGridSizer( 2, 4, 0, 0 ); + fgSizerRegParams = new wxFlexGridSizer( 5, 4, 0, 0 ); fgSizerRegParams->AddGrowableCol( 2 ); fgSizerRegParams->SetFlexibleDirection( wxBOTH ); fgSizerRegParams->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); @@ -93,20 +108,6 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_UnitRegultR1->Wrap( -1 ); fgSizerRegParams->Add( m_UnitRegultR1, 0, wxALL, 5 ); - - fgSizerRegParams->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_lableVRef = new wxStaticText( m_panelRegulators, wxID_ANY, _("Vref"), wxDefaultPosition, wxDefaultSize, 0 ); - m_lableVRef->Wrap( -1 ); - fgSizerRegParams->Add( m_lableVRef, 0, wxALL, 5 ); - - m_RegulVrefValue = new wxTextCtrl( m_panelRegulators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizerRegParams->Add( m_RegulVrefValue, 0, wxALL|wxEXPAND, 5 ); - - m_unitsVref = new wxStaticText( m_panelRegulators, wxID_ANY, _("V"), wxDefaultPosition, wxDefaultSize, 0 ); - m_unitsVref->Wrap( -1 ); - fgSizerRegParams->Add( m_unitsVref, 0, wxALL, 5 ); - m_rbRegulVout = new wxRadioButton( m_panelRegulators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizerRegParams->Add( m_rbRegulVout, 0, wxALL, 5 ); @@ -121,21 +122,107 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_unitsVout->Wrap( -1 ); fgSizerRegParams->Add( m_unitsVout, 0, wxALL, 5 ); + + fgSizerRegParams->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_labelVRef = new wxStaticText( m_panelRegulators, wxID_ANY, _("Vref"), wxDefaultPosition, wxDefaultSize, 0 ); + m_labelVRef->Wrap( -1 ); + fgSizerRegParams->Add( m_labelVRef, 0, wxALL, 5 ); + + m_RegulVrefValue = new wxTextCtrl( m_panelRegulators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerRegParams->Add( m_RegulVrefValue, 0, wxALL|wxEXPAND, 5 ); + + m_unitsVref = new wxStaticText( m_panelRegulators, wxID_ANY, _("V"), wxDefaultPosition, wxDefaultSize, 0 ); + m_unitsVref->Wrap( -1 ); + fgSizerRegParams->Add( m_unitsVref, 0, wxALL, 5 ); + + + fgSizerRegParams->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_RegulIadjTitle = new wxStaticText( m_panelRegulators, wxID_ANY, _("Iadj"), wxDefaultPosition, wxDefaultSize, 0 ); + m_RegulIadjTitle->Wrap( -1 ); + fgSizerRegParams->Add( m_RegulIadjTitle, 0, wxALL, 5 ); + + m_RegulIadjValue = new wxTextCtrl( m_panelRegulators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerRegParams->Add( m_RegulIadjValue, 0, wxALL|wxEXPAND, 5 ); + + m_IadjUnitLabel = new wxStaticText( m_panelRegulators, wxID_ANY, _("uA"), wxDefaultPosition, wxDefaultSize, 0 ); + m_IadjUnitLabel->Wrap( -1 ); + fgSizerRegParams->Add( m_IadjUnitLabel, 0, wxALL, 5 ); + + + fgSizerRegParams->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextRegType = new wxStaticText( m_panelRegulators, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRegType->Wrap( -1 ); + fgSizerRegParams->Add( m_staticTextRegType, 0, wxALL, 5 ); + + wxString m_choiceRegTypeChoices[] = { _("Standard Type"), _("3 Terminal Type") }; + int m_choiceRegTypeNChoices = sizeof( m_choiceRegTypeChoices ) / sizeof( wxString ); + m_choiceRegType = new wxChoice( m_panelRegulators, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceRegTypeNChoices, m_choiceRegTypeChoices, 0 ); + m_choiceRegType->SetSelection( 0 ); + fgSizerRegParams->Add( m_choiceRegType, 0, wxALL|wxEXPAND, 5 ); + + + fgSizerRegParams->Add( 0, 0, 1, wxEXPAND, 5 ); + + bSizerRegulRight->Add( fgSizerRegParams, 0, wxEXPAND, 5 ); m_buttonCalculate = new wxButton( m_panelRegulators, wxID_ANY, _("Calculate"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerRegulRight->Add( m_buttonCalculate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + wxStaticBoxSizer* sbSizerRegulatorsChooser; + sbSizerRegulatorsChooser = new wxStaticBoxSizer( new wxStaticBox( m_panelRegulators, wxID_ANY, _("Regulator") ), wxVERTICAL ); + + wxArrayString m_choiceRegulatorSelectorChoices; + m_choiceRegulatorSelector = new wxChoice( m_panelRegulators, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceRegulatorSelectorChoices, 0 ); + m_choiceRegulatorSelector->SetSelection( 0 ); + sbSizerRegulatorsChooser->Add( m_choiceRegulatorSelector, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextRegFile = new wxStaticText( m_panelRegulators, wxID_ANY, _("Regulators data file:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRegFile->Wrap( -1 ); + sbSizerRegulatorsChooser->Add( m_staticTextRegFile, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_regulators_filePicker = new wxFilePickerCtrl( m_panelRegulators, wxID_ANY, wxEmptyString, _("Select a file"), wxT("*.pcbcalc"), wxDefaultPosition, wxDefaultSize, wxFLP_SAVE|wxFLP_USE_TEXTCTRL ); + sbSizerRegulatorsChooser->Add( m_regulators_filePicker, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizerReulBtn; + bSizerReulBtn = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonEditItem = new wxButton( m_panelRegulators, wxID_ANY, _("Edit Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonEditItem->SetToolTip( _("Enter a new item in the current list of availlable regulators") ); + + bSizerReulBtn->Add( m_buttonEditItem, 0, wxALL, 5 ); + + m_buttonAddItem = new wxButton( m_panelRegulators, wxID_ANY, _("Add Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonAddItem->SetToolTip( _("Enter a new item in the current list of availlable regulators") ); + + bSizerReulBtn->Add( m_buttonAddItem, 1, wxALL, 5 ); + + m_buttonRemoveItem = new wxButton( m_panelRegulators, wxID_ANY, _("Remove Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonRemoveItem->SetToolTip( _("Remove an item in the current list of availlable regulators") ); + + bSizerReulBtn->Add( m_buttonRemoveItem, 1, wxALL, 5 ); + + + sbSizerRegulatorsChooser->Add( bSizerReulBtn, 1, wxEXPAND, 5 ); + + + bSizerRegulRight->Add( sbSizerRegulatorsChooser, 0, wxEXPAND, 5 ); + m_RegulMessage = new wxStaticText( m_panelRegulators, wxID_ANY, _("Message"), wxDefaultPosition, wxDefaultSize, 0 ); m_RegulMessage->Wrap( -1 ); bSizerRegulRight->Add( m_RegulMessage, 0, wxALL, 5 ); + bSizerMainReg->Add( bSizerRegulRight, 1, wxEXPAND, 5 ); + m_panelRegulators->SetSizer( bSizerMainReg ); m_panelRegulators->Layout(); bSizerMainReg->Fit( m_panelRegulators ); - m_Notebook->AddPage( m_panelRegulators, _("Regulators"), false ); + m_Notebook->AddPage( m_panelRegulators, _("Regulators"), true ); m_panelTrackWidth = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerTrackWidth; bSizerTrackWidth = new wxBoxSizer( wxHORIZONTAL ); @@ -201,11 +288,13 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_TW_CuLength_choiceUnit->SetSelection( 0 ); fgSizerTWprms->Add( m_TW_CuLength_choiceUnit, 0, wxEXPAND|wxALL, 5 ); + sbSizerTW_Prms->Add( fgSizerTWprms, 0, wxEXPAND, 5 ); m_htmlWinFormulas = new wxHtmlWindow( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSIMPLE_BORDER ); sbSizerTW_Prms->Add( m_htmlWinFormulas, 1, wxEXPAND|wxTOP, 5 ); + bSizerTrackWidth->Add( sbSizerTW_Prms, 1, wxALL|wxEXPAND, 5 ); m_buttonTW = new wxButton( m_panelTrackWidth, wxID_ANY, _(">>>"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); @@ -279,8 +368,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_staticText791->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText791, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + sbSizerTW_Result->Add( fgSizerTW_Results, 0, wxEXPAND, 5 ); + bSizeRight->Add( sbSizerTW_Result, 1, wxEXPAND|wxALL, 5 ); wxStaticBoxSizer* sbSizerTW_Result1; @@ -348,16 +439,20 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_staticText7911->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText7911, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + sbSizerTW_Result1->Add( fgSizerTW_Results1, 0, wxEXPAND, 5 ); + bSizeRight->Add( sbSizerTW_Result1, 1, wxEXPAND|wxALL, 5 ); + bSizerTrackWidth->Add( bSizeRight, 1, wxEXPAND, 5 ); + m_panelTrackWidth->SetSizer( bSizerTrackWidth ); m_panelTrackWidth->Layout(); bSizerTrackWidth->Fit( m_panelTrackWidth ); - m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), true ); + m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), false ); m_panelElectricalSpacing = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerElectricalClearance; bSizerElectricalClearance = new wxBoxSizer( wxHORIZONTAL ); @@ -383,6 +478,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_buttonElectSpacingRefresh = new wxButton( m_panelElectricalSpacing, wxID_ANY, _("Update Values"), wxDefaultPosition, wxDefaultSize, 0 ); bLeftSizerElectricalClearance->Add( m_buttonElectSpacingRefresh, 0, wxALL|wxEXPAND, 5 ); + bSizerElectricalClearance->Add( bLeftSizerElectricalClearance, 0, wxEXPAND, 5 ); wxBoxSizer* bElectricalSpacingSizerRight; @@ -442,8 +538,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_staticText88->Wrap( -1 ); bElectricalSpacingSizerRight->Add( m_staticText88, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizerElectricalClearance->Add( bElectricalSpacingSizerRight, 1, wxEXPAND, 5 ); + m_panelElectricalSpacing->SetSizer( bSizerElectricalClearance ); m_panelElectricalSpacing->Layout(); bSizerElectricalClearance->Fit( m_panelElectricalSpacing ); @@ -464,6 +562,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelDisplayshape = new wxPanel( m_panelTransline, wxID_ANY, wxDefaultPosition, wxSize( 205,205 ), wxTAB_TRAVERSAL ); bLeftSizer->Add( m_panelDisplayshape, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + bSizeTransline->Add( bLeftSizer, 0, wxEXPAND, 5 ); m_staticline1 = new wxStaticLine( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); @@ -585,8 +684,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_SubsPrm9_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm9_choiceUnit, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + sbSubstrateBoxSizer->Add( fgSizerSubstPrms, 1, wxEXPAND, 5 ); + bMiddleSizer->Add( sbSubstrateBoxSizer, 0, wxEXPAND|wxBOTTOM, 5 ); wxStaticBoxSizer* sbCmpPrmsSizer; @@ -610,10 +711,13 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_choiceUnit_Frequency->SetSelection( 0 ); fgSizeCmpPrms->Add( m_choiceUnit_Frequency, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + sbCmpPrmsSizer->Add( fgSizeCmpPrms, 0, wxEXPAND, 5 ); + bMiddleSizer->Add( sbCmpPrmsSizer, 0, wxEXPAND|wxTOP, 5 ); + bSizeTransline->Add( bMiddleSizer, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* bRightSizer; @@ -676,10 +780,13 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerPhysPrms->Add( 0, 0, 0, 0, 5 ); + sbRightBoxizer->Add( fgSizerPhysPrms, 0, wxEXPAND, 5 ); + btranslineRightSizer->Add( sbRightBoxizer, 0, wxBOTTOM|wxEXPAND, 5 ); + bRightSizer->Add( btranslineRightSizer, 0, wxALL|wxEXPAND, 5 ); wxBoxSizer* btranslineButtonsSizer; @@ -700,8 +807,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_bitmapSynthetize = new wxStaticBitmap( m_panelTransline, wxID_ANY, wxBitmap( arrow_top_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); bSizerButtons->Add( m_bitmapSynthetize, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + btranslineButtonsSizer->Add( bSizerButtons, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + bRightSizer->Add( btranslineButtonsSizer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); wxStaticBoxSizer* sbElectricalResultsSizer; @@ -749,8 +858,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_choiceUnit_ElecPrm3->SetSelection( 0 ); fgSizerResults->Add( m_choiceUnit_ElecPrm3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + sbElectricalResultsSizer->Add( fgSizerResults, 0, wxEXPAND, 5 ); + bRightSizer->Add( sbElectricalResultsSizer, 0, wxEXPAND, 5 ); wxStaticBoxSizer* sbMessagesSizer; @@ -818,12 +929,16 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_Message7->Wrap( -1 ); fgSizerTranslResults->Add( m_Message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + sbMessagesSizer->Add( fgSizerTranslResults, 1, wxEXPAND, 5 ); + bRightSizer->Add( sbMessagesSizer, 1, wxEXPAND|wxTOP, 5 ); + bSizeTransline->Add( bRightSizer, 1, wxEXPAND, 5 ); + m_panelTransline->SetSizer( bSizeTransline ); m_panelTransline->Layout(); bSizeTransline->Fit( m_panelTransline ); @@ -844,6 +959,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelDisplayAttenuator = new wxPanel( m_panelAttenuators, wxID_ANY, wxDefaultPosition, wxSize( 256,256 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); bLeftSizerAtt->Add( m_panelDisplayAttenuator, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + sbSizerAtt->Add( bLeftSizerAtt, 0, wxEXPAND, 5 ); wxBoxSizer* bMiddleSizerAtt; @@ -891,8 +1007,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_attZoutUnit->Wrap( -1 ); fgSizerAttPrms->Add( m_attZoutUnit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + sbSizerAttPrms->Add( fgSizerAttPrms, 0, wxEXPAND, 5 ); + bMiddleSizerAtt->Add( sbSizerAttPrms, 0, wxEXPAND, 5 ); wxBoxSizer* bSizerAttButt; @@ -904,6 +1022,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_bitmapAnalyse1 = new wxStaticBitmap( m_panelAttenuators, wxID_ANY, wxBitmap( arrow_bottom_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); bSizerAttButt->Add( m_bitmapAnalyse1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + bMiddleSizerAtt->Add( bSizerAttButt, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); wxStaticBoxSizer* sbSizerAttValues; @@ -948,8 +1067,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_attR3Unit->Wrap( -1 ); fgSizerAttResults->Add( m_attR3Unit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + sbSizerAttValues->Add( fgSizerAttResults, 0, wxEXPAND, 5 ); + bMiddleSizerAtt->Add( sbSizerAttValues, 0, wxEXPAND, 5 ); m_staticTextAttMsg = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); @@ -959,6 +1080,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_Attenuator_Messages = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); bMiddleSizerAtt->Add( m_Attenuator_Messages, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + sbSizerAtt->Add( bMiddleSizerAtt, 0, wxEXPAND, 5 ); wxStaticBoxSizer* sbRightSizerFormula; @@ -969,8 +1091,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow sbRightSizerFormula->Add( m_panelAttFormula, 1, wxALL|wxEXPAND, 5 ); + sbSizerAtt->Add( sbRightSizerFormula, 1, wxEXPAND, 5 ); + m_panelAttenuators->SetSizer( sbSizerAtt ); m_panelAttenuators->Layout(); sbSizerAtt->Fit( m_panelAttenuators ); @@ -1032,8 +1156,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_Band_tol_bitmap = new wxStaticBitmap( m_panelColorCode, wxID_ANY, wxBitmap( color_code_tolerance_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); fgSizerColoCode->Add( m_Band_tol_bitmap, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizerPanelColorCode->Add( fgSizerColoCode, 1, wxEXPAND|wxLEFT, 5 ); + m_panelColorCode->SetSizer( bSizerPanelColorCode ); m_panelColorCode->Layout(); bSizerPanelColorCode->Fit( m_panelColorCode ); @@ -1097,8 +1223,10 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelShowClassPrms = new wxPanel( m_panelBoardClass, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); brdclsSizerRight->Add( m_panelShowClassPrms, 1, wxEXPAND | wxALL, 5 ); + bSizerBoardClass->Add( brdclsSizerRight, 1, wxEXPAND, 5 ); + m_panelBoardClass->SetSizer( bSizerBoardClass ); m_panelBoardClass->Layout(); bSizerBoardClass->Fit( m_panelBoardClass ); @@ -1106,13 +1234,20 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow bmainFrameSizer->Add( m_Notebook, 1, wxEXPAND, 5 ); + this->SetSizer( bmainFrameSizer ); this->Layout(); this->Centre( wxBOTH ); // Connect Events + m_choiceRegType->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulTypeSelection ), NULL, this ); m_buttonCalculate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorCalcButtonClick ), NULL, this ); + m_choiceRegulatorSelector->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorSelection ), NULL, this ); + m_regulators_filePicker->Connect( wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler( PCB_CALCULATOR_FRAME_BASE::OnDataFileSelection ), NULL, this ); + m_buttonEditItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnEditRegulator ), NULL, this ); + m_buttonAddItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAddRegulator ), NULL, this ); + m_buttonRemoveItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRemoveRegulator ), NULL, this ); m_buttonTW->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); m_ElectricalSpacingUnitsSelector->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); @@ -1134,7 +1269,13 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE() { // Disconnect Events + m_choiceRegType->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulTypeSelection ), NULL, this ); m_buttonCalculate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorCalcButtonClick ), NULL, this ); + m_choiceRegulatorSelector->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorSelection ), NULL, this ); + m_regulators_filePicker->Disconnect( wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEventHandler( PCB_CALCULATOR_FRAME_BASE::OnDataFileSelection ), NULL, this ); + m_buttonEditItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnEditRegulator ), NULL, this ); + m_buttonAddItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAddRegulator ), NULL, this ); + m_buttonRemoveItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRemoveRegulator ), NULL, this ); m_buttonTW->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); m_ElectricalSpacingUnitsSelector->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp index f89d218c3a..af1ddb6b7d 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp @@ -1,11 +1,12 @@ - + C++ 1 source_name + 0 0 res UTF-8 @@ -19,6 +20,7 @@ . 1 + 1 1 0 0 @@ -27,8 +29,11 @@ 1 1 1 + 0 + + @@ -51,7 +56,6 @@ 0 0 wxID_ANY - 0 @@ -65,11 +69,9 @@ 1 - Resizable - 1 - 670,465 + 670,489 wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER Pcb Calculator @@ -123,7 +125,10 @@ 1 1 1 + + + @@ -144,7 +149,6 @@ 0 wxID_ANY MyMenuBar - 0 @@ -159,9 +163,7 @@ protected 1 - Resizable - 1 @@ -204,7 +206,10 @@ 1 1 1 + + + @@ -225,7 +230,6 @@ 0 0 wxID_ANY - 0 @@ -240,9 +244,7 @@ protected 1 - Resizable - 1 wxST_SIZEGRIP @@ -294,7 +296,10 @@ 1 1 1 + + + @@ -315,7 +320,6 @@ 0 0 wxID_ANY - 0 @@ -330,9 +334,7 @@ protected 1 - Resizable - 1 @@ -371,16 +373,19 @@ - + Regulators - 0 - + 1 + 1 1 1 1 + + + @@ -400,7 +405,6 @@ 0 0 wxID_ANY - 0 @@ -415,9 +419,7 @@ protected 1 - Resizable - 1 @@ -453,228 +455,338 @@ - + bSizerMainReg wxHORIZONTAL none - + 5 wxEXPAND 1 - + - bSizerBitmapReg + bSizeLeftpReg wxVERTICAL none - + 5 wxEXPAND 1 - - 0 - protected - 0 - - - - 5 - wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL - 0 - - 1 - 1 - 1 - 1 - - - - ../bitmaps/regul.xpm; Load From File - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - - 0 - - - 0 + - 1 - m_bitmapRegul - 1 - - - protected - 1 - - - Resizable - - 1 - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - + bSizerBitmapReg + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From File; ../bitmaps/regul.xpm + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_bitmapRegul4pins + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From File; F:\kicad-launchpad\testing\pcb_calculator\bitmaps\regul_3pins.xpm + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_bitmapRegul3pins + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + - - 5 - wxALL|wxALIGN_CENTER_HORIZONTAL - 0 - - 1 - 1 - 1 - 1 - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - ,90,92,-1,70,0 - 0 - 0 - wxID_ANY - Vout = Vref * (R1 + R2) / R2 - - - 0 - - - 0 - - 1 - m_RegulFormula - 1 - - - protected - 1 - - - Resizable - - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - + 5 wxEXPAND - 1 - - 0 - protected - 0 + 0 + + wxID_ANY + Formula + + sbSizerRegFormula + wxVERTICAL + none + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + ,90,92,-1,70,0 + 0 + 0 + wxID_ANY + Vout = Vref * (R1 + R2) / R2 + + 0 + + + 0 + + 1 + m_RegulFormula + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + - + 5 wxEXPAND 1 - + bSizerRegulRight wxVERTICAL none - + 5 wxEXPAND 0 - + 4 wxBOTH 2 @@ -684,7 +796,7 @@ fgSizerRegParams wxFLEX_GROWMODE_SPECIFIED none - 2 + 5 0 5 @@ -695,7 +807,10 @@ 1 1 1 + + + @@ -716,7 +831,6 @@ 0 wxID_ANY - 0 @@ -731,9 +845,7 @@ protected 1 - Resizable - 1 wxRB_GROUP @@ -783,7 +895,10 @@ 1 1 1 + + + @@ -804,7 +919,6 @@ 0 wxID_ANY R1 - 0 @@ -819,9 +933,7 @@ protected 1 - Resizable - 1 @@ -870,7 +982,10 @@ 1 1 1 + + + @@ -890,7 +1005,6 @@ 0 0 wxID_ANY - 0 @@ -906,9 +1020,7 @@ protected 1 - Resizable - 1 @@ -961,7 +1073,10 @@ 1 1 1 + + + @@ -982,7 +1097,6 @@ 0 wxID_ANY KOhm - 0 @@ -997,9 +1111,7 @@ protected 1 - Resizable - 1 @@ -1048,7 +1160,10 @@ 1 1 1 + + + @@ -1069,7 +1184,6 @@ 0 wxID_ANY - 0 @@ -1084,9 +1198,7 @@ protected 1 - Resizable - 1 @@ -1136,7 +1248,10 @@ 1 1 1 + + + @@ -1157,7 +1272,6 @@ 0 wxID_ANY R2 - 0 @@ -1172,9 +1286,7 @@ protected 1 - Resizable - 1 @@ -1223,7 +1335,10 @@ 1 1 1 + + + @@ -1243,7 +1358,6 @@ 0 0 wxID_ANY - 0 @@ -1259,9 +1373,7 @@ protected 1 - Resizable - 1 @@ -1314,7 +1426,10 @@ 1 1 1 + + + @@ -1335,7 +1450,6 @@ 0 wxID_ANY KOhm - 0 @@ -1350,9 +1464,360 @@ protected 1 - Resizable - + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_rbRegulVout + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Vout + + 0 + + + 0 + + 1 + m_labelVout + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_RegulVoutValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + V + + 0 + + + 0 + + 1 + m_unitsVout + 1 + + + protected + 1 + + Resizable 1 @@ -1411,7 +1876,10 @@ 1 1 1 + + + @@ -1432,7 +1900,6 @@ 0 wxID_ANY Vref - 0 @@ -1440,16 +1907,14 @@ 0 1 - m_lableVRef + m_labelVRef 1 protected 1 - Resizable - 1 @@ -1498,7 +1963,10 @@ 1 1 1 + + + @@ -1518,7 +1986,6 @@ 0 0 wxID_ANY - 0 @@ -1534,9 +2001,7 @@ protected 1 - Resizable - 1 @@ -1589,7 +2054,10 @@ 1 1 1 + + + @@ -1610,7 +2078,6 @@ 0 wxID_ANY V - 0 @@ -1625,9 +2092,7 @@ protected 1 - Resizable - 1 @@ -1667,104 +2132,29 @@ - + 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - - - 0 - - - 0 - - 1 - m_rbRegulVout - 1 - - + wxEXPAND + 1 + + 0 protected - 1 - - - Resizable - - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - + 0 - + 5 wxALL 0 - + 1 1 1 1 + + + @@ -1784,8 +2174,7 @@ 0 0 wxID_ANY - Vout - + Iadj 0 @@ -1793,16 +2182,14 @@ 0 1 - m_labelVout + m_RegulIadjTitle 1 protected 1 - Resizable - 1 @@ -1842,16 +2229,19 @@ - + 5 wxALL|wxEXPAND 0 - + 1 1 1 1 + + + @@ -1871,7 +2261,6 @@ 0 0 wxID_ANY - 0 @@ -1880,16 +2269,14 @@ 0 1 - m_RegulVoutValue + m_RegulIadjValue 1 protected 1 - Resizable - 1 @@ -1933,16 +2320,19 @@ - + 5 wxALL 0 - + 1 1 1 1 + + + @@ -1962,8 +2352,7 @@ 0 0 wxID_ANY - V - + uA 0 @@ -1971,16 +2360,14 @@ 0 1 - m_unitsVout + m_IadjUnitLabel 1 protected 1 - Resizable - 1 @@ -2020,6 +2407,201 @@ + + 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 + Type + + 0 + + + 0 + + 1 + m_staticTextRegType + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Standard Type" "3 Terminal Type" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceRegType + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnRegulTypeSelection + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + @@ -2031,7 +2613,10 @@ 1 1 1 + + + @@ -2053,7 +2638,6 @@ 0 wxID_ANY Calculate - 0 @@ -2068,9 +2652,7 @@ protected 1 - Resizable - 1 @@ -2110,6 +2692,559 @@ + + 5 + wxEXPAND + 0 + + wxID_ANY + Regulator + + sbSizerRegulatorsChooser + wxVERTICAL + none + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_choiceRegulatorSelector + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnRegulatorSelection + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Regulators data file: + + 0 + + + 0 + + 1 + m_staticTextRegFile + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -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 + + Select a file + + 0 + + 1 + m_regulators_filePicker + 1 + + + protected + 1 + + Resizable + 1 + + wxFLP_SAVE|wxFLP_USE_TEXTCTRL + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + *.pcbcalc + + + + + + + OnDataFileSelection + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizerReulBtn + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Edit Regulator + + 0 + + + 0 + + 1 + m_buttonEditItem + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Enter a new item in the current list of availlable regulators + + wxFILTER_NONE + wxDefaultValidator + + + + + OnEditRegulator + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Add Regulator + + 0 + + + 0 + + 1 + m_buttonAddItem + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Enter a new item in the current list of availlable regulators + + wxFILTER_NONE + wxDefaultValidator + + + + + OnAddRegulator + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Remove Regulator + + 0 + + + 0 + + 1 + m_buttonRemoveItem + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Remove an item in the current list of availlable regulators + + wxFILTER_NONE + wxDefaultValidator + + + + + OnRemoveRegulator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxALL @@ -2119,7 +3254,10 @@ 1 1 1 + + + @@ -2140,7 +3278,6 @@ 0 wxID_ANY Message - 0 @@ -2155,9 +3292,7 @@ protected 1 - Resizable - 1 @@ -2205,13 +3340,16 @@ Track Width - 1 + 0 1 1 1 1 + + + @@ -2231,7 +3369,6 @@ 0 0 wxID_ANY - 0 @@ -2246,9 +3383,7 @@ protected 1 - Resizable - 1 @@ -2310,7 +3445,10 @@ 1 1 1 + + + @@ -2331,7 +3469,6 @@ 0 wxID_ANY Valid max values: 35A for external traces and 17.5A for internal. 400mil widths. Maximum temperature rise of 100 deg C. - 0 @@ -2346,9 +3483,7 @@ protected 1 - Resizable - 1 @@ -2413,7 +3548,10 @@ 1 1 1 + + + @@ -2434,7 +3572,6 @@ 0 wxID_ANY Current - 0 @@ -2449,9 +3586,7 @@ protected 1 - Resizable - 1 @@ -2500,7 +3635,10 @@ 1 1 1 + + + @@ -2520,7 +3658,6 @@ 0 0 wxID_ANY - 0 @@ -2536,9 +3673,7 @@ protected 1 - Resizable - 1 @@ -2591,7 +3726,10 @@ 1 1 1 + + + @@ -2612,7 +3750,6 @@ 0 wxID_ANY A - 0 @@ -2627,9 +3764,7 @@ protected 1 - Resizable - 1 @@ -2678,7 +3813,10 @@ 1 1 1 + + + @@ -2699,7 +3837,6 @@ 0 wxID_ANY Temperature rise - 0 @@ -2714,9 +3851,7 @@ protected 1 - Resizable - 1 @@ -2765,7 +3900,10 @@ 1 1 1 + + + @@ -2785,7 +3923,6 @@ 0 0 wxID_ANY - 0 @@ -2801,9 +3938,7 @@ protected 1 - Resizable - 1 @@ -2856,7 +3991,10 @@ 1 1 1 + + + @@ -2877,7 +4015,6 @@ 0 wxID_ANY deg C - 0 @@ -2892,9 +4029,7 @@ protected 1 - Resizable - 1 @@ -2943,7 +4078,10 @@ 1 1 1 + + + @@ -2964,7 +4102,6 @@ 0 wxID_ANY Cu thickness - 0 @@ -2979,9 +4116,7 @@ protected 1 - Resizable - 1 @@ -3030,7 +4165,10 @@ 1 1 1 + + + @@ -3050,7 +4188,6 @@ 0 0 wxID_ANY - 0 @@ -3066,9 +4203,7 @@ protected 1 - Resizable - 1 @@ -3121,7 +4256,10 @@ 1 1 1 + + + @@ -3142,7 +4280,6 @@ 0 0 wxID_ANY - 0 @@ -3157,12 +4294,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -3208,7 +4344,10 @@ 1 1 1 + + + @@ -3229,7 +4368,6 @@ 0 wxID_ANY Conductor length - 0 @@ -3244,9 +4382,7 @@ protected 1 - Resizable - 1 @@ -3295,7 +4431,10 @@ 1 1 1 + + + @@ -3315,7 +4454,6 @@ 0 0 wxID_ANY - 0 @@ -3331,9 +4469,7 @@ protected 1 - Resizable - 1 @@ -3386,7 +4522,10 @@ 1 1 1 + + + @@ -3407,7 +4546,6 @@ 0 0 wxID_ANY - 0 @@ -3422,12 +4560,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -3475,7 +4612,10 @@ 1 1 1 + + + @@ -3495,7 +4635,6 @@ 0 0 wxID_ANY - 0 @@ -3510,9 +4649,7 @@ protected 1 - Resizable - 1 wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO @@ -3565,7 +4702,10 @@ 1 1 1 + + + @@ -3587,7 +4727,6 @@ 0 wxID_ANY >>> - 0 @@ -3602,9 +4741,7 @@ protected 1 - Resizable - 1 wxBU_EXACTFIT @@ -3690,7 +4827,10 @@ 1 1 1 + + + @@ -3711,7 +4851,6 @@ 0 wxID_ANY Required trace width - 0 @@ -3726,9 +4865,7 @@ protected 1 - Resizable - 1 @@ -3777,7 +4914,10 @@ 1 1 1 + + + @@ -3797,7 +4937,6 @@ 0 0 wxID_ANY - 0 @@ -3813,9 +4952,7 @@ protected 1 - Resizable - 1 @@ -3868,7 +5005,10 @@ 1 1 1 + + + @@ -3889,7 +5029,6 @@ 0 0 wxID_ANY - 0 @@ -3904,12 +5043,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -3955,7 +5093,10 @@ 1 1 1 + + + @@ -3976,7 +5117,6 @@ 0 wxID_ANY Cross-section area - 0 @@ -3991,9 +5131,7 @@ protected 1 - Resizable - 1 @@ -4042,7 +5180,10 @@ 1 1 1 + + + @@ -4062,7 +5203,6 @@ 0 0 wxID_ANY - 0 @@ -4078,9 +5218,7 @@ protected 1 - Resizable - 1 @@ -4133,7 +5271,10 @@ 1 1 1 + + + @@ -4154,7 +5295,6 @@ 0 wxID_ANY mm ^ 2 - 0 @@ -4169,9 +5309,7 @@ protected 1 - Resizable - 1 @@ -4220,7 +5358,10 @@ 1 1 1 + + + @@ -4241,7 +5382,6 @@ 0 wxID_ANY Resistance - 0 @@ -4256,9 +5396,7 @@ protected 1 - Resizable - 1 @@ -4307,7 +5445,10 @@ 1 1 1 + + + @@ -4327,7 +5468,6 @@ 0 0 wxID_ANY - 0 @@ -4343,9 +5483,7 @@ protected 1 - Resizable - 1 @@ -4398,7 +5536,10 @@ 1 1 1 + + + @@ -4419,7 +5560,6 @@ 0 wxID_ANY Ohm - 0 @@ -4434,9 +5574,7 @@ protected 1 - Resizable - 1 @@ -4485,7 +5623,10 @@ 1 1 1 + + + @@ -4506,7 +5647,6 @@ 0 wxID_ANY Voltage drop - 0 @@ -4521,9 +5661,7 @@ protected 1 - Resizable - 1 @@ -4572,7 +5710,10 @@ 1 1 1 + + + @@ -4592,7 +5733,6 @@ 0 0 wxID_ANY - 0 @@ -4608,9 +5748,7 @@ protected 1 - Resizable - 1 @@ -4663,7 +5801,10 @@ 1 1 1 + + + @@ -4684,7 +5825,6 @@ 0 wxID_ANY Volt - 0 @@ -4699,9 +5839,7 @@ protected 1 - Resizable - 1 @@ -4750,7 +5888,10 @@ 1 1 1 + + + @@ -4771,7 +5912,6 @@ 0 wxID_ANY Loss - 0 @@ -4786,9 +5926,7 @@ protected 1 - Resizable - 1 @@ -4837,7 +5975,10 @@ 1 1 1 + + + @@ -4857,7 +5998,6 @@ 0 0 wxID_ANY - 0 @@ -4873,9 +6013,7 @@ protected 1 - Resizable - 1 @@ -4928,7 +6066,10 @@ 1 1 1 + + + @@ -4949,7 +6090,6 @@ 0 wxID_ANY Watt - 0 @@ -4964,9 +6104,7 @@ protected 1 - Resizable - 1 @@ -5047,7 +6185,10 @@ 1 1 1 + + + @@ -5068,7 +6209,6 @@ 0 wxID_ANY Required trace width - 0 @@ -5083,9 +6223,7 @@ protected 1 - Resizable - 1 @@ -5134,7 +6272,10 @@ 1 1 1 + + + @@ -5154,7 +6295,6 @@ 0 0 wxID_ANY - 0 @@ -5170,9 +6310,7 @@ protected 1 - Resizable - 1 @@ -5225,7 +6363,10 @@ 1 1 1 + + + @@ -5246,7 +6387,6 @@ 0 0 wxID_ANY - 0 @@ -5261,12 +6401,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -5312,7 +6451,10 @@ 1 1 1 + + + @@ -5333,7 +6475,6 @@ 0 wxID_ANY Cross-section area - 0 @@ -5348,9 +6489,7 @@ protected 1 - Resizable - 1 @@ -5399,7 +6538,10 @@ 1 1 1 + + + @@ -5419,7 +6561,6 @@ 0 0 wxID_ANY - 0 @@ -5435,9 +6576,7 @@ protected 1 - Resizable - 1 @@ -5490,7 +6629,10 @@ 1 1 1 + + + @@ -5511,7 +6653,6 @@ 0 wxID_ANY mm ^ 2 - 0 @@ -5526,9 +6667,7 @@ protected 1 - Resizable - 1 @@ -5577,7 +6716,10 @@ 1 1 1 + + + @@ -5598,7 +6740,6 @@ 0 wxID_ANY Resistance - 0 @@ -5613,9 +6754,7 @@ protected 1 - Resizable - 1 @@ -5664,7 +6803,10 @@ 1 1 1 + + + @@ -5684,7 +6826,6 @@ 0 0 wxID_ANY - 0 @@ -5700,9 +6841,7 @@ protected 1 - Resizable - 1 @@ -5755,7 +6894,10 @@ 1 1 1 + + + @@ -5776,7 +6918,6 @@ 0 wxID_ANY Ohm - 0 @@ -5791,9 +6932,7 @@ protected 1 - Resizable - 1 @@ -5842,7 +6981,10 @@ 1 1 1 + + + @@ -5863,7 +7005,6 @@ 0 wxID_ANY Voltage drop - 0 @@ -5878,9 +7019,7 @@ protected 1 - Resizable - 1 @@ -5929,7 +7068,10 @@ 1 1 1 + + + @@ -5949,7 +7091,6 @@ 0 0 wxID_ANY - 0 @@ -5965,9 +7106,7 @@ protected 1 - Resizable - 1 @@ -6020,7 +7159,10 @@ 1 1 1 + + + @@ -6041,7 +7183,6 @@ 0 wxID_ANY Volt - 0 @@ -6056,9 +7197,7 @@ protected 1 - Resizable - 1 @@ -6107,7 +7246,10 @@ 1 1 1 + + + @@ -6128,7 +7270,6 @@ 0 wxID_ANY Loss - 0 @@ -6143,9 +7284,7 @@ protected 1 - Resizable - 1 @@ -6194,7 +7333,10 @@ 1 1 1 + + + @@ -6214,7 +7356,6 @@ 0 0 wxID_ANY - 0 @@ -6230,9 +7371,7 @@ protected 1 - Resizable - 1 @@ -6285,7 +7424,10 @@ 1 1 1 + + + @@ -6306,7 +7448,6 @@ 0 wxID_ANY Watt - 0 @@ -6321,9 +7462,7 @@ protected 1 - Resizable - 1 @@ -6381,7 +7520,10 @@ 1 1 1 + + + @@ -6401,7 +7543,6 @@ 0 0 wxID_ANY - 0 @@ -6416,9 +7557,7 @@ protected 1 - Resizable - 1 @@ -6477,7 +7616,10 @@ 1 1 1 + + + @@ -6498,7 +7640,6 @@ 0 0 wxID_ANY - 0 @@ -6513,12 +7654,11 @@ protected 1 - Resizable - -1 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -6564,7 +7704,10 @@ 1 1 1 + + + @@ -6584,7 +7727,6 @@ 0 0 wxID_ANY - 0 @@ -6599,9 +7741,7 @@ protected 1 - Resizable - 1 wxLI_HORIZONTAL @@ -6649,7 +7789,10 @@ 1 1 1 + + + @@ -6670,7 +7813,6 @@ 0 wxID_ANY Voltage > 500V: - 0 @@ -6685,9 +7827,7 @@ protected 1 - Resizable - 1 @@ -6736,7 +7876,10 @@ 1 1 1 + + + @@ -6756,7 +7899,6 @@ 0 0 wxID_ANY - 0 @@ -6772,9 +7914,7 @@ protected 1 - Resizable - 1 @@ -6827,7 +7967,10 @@ 1 1 1 + + + @@ -6849,7 +7992,6 @@ 0 wxID_ANY Update Values - 0 @@ -6864,9 +8006,7 @@ protected 1 - Resizable - 1 @@ -6926,7 +8066,10 @@ 1 1 1 + + + @@ -6947,7 +8090,6 @@ 0 wxID_ANY Note: Values are minimal values (from IPC 2221) - 0 @@ -6962,9 +8104,7 @@ protected 1 - Resizable - 1 @@ -7013,7 +8153,10 @@ 1 1 1 + + + 0 1 @@ -7056,7 +8199,6 @@ - 0 0 @@ -7073,9 +8215,7 @@ protected 1 - Resizable - wxALIGN_RIGHT 100 "0 ... 15V" "16 ... 30V" "31 ... 50V" "51 ... 100V" "101 ... 150V" "151 ... 170V" "171 ... 250V" "251 ... 300V" "301 ... 500V" " > 500V" @@ -7160,7 +8300,10 @@ 1 1 1 + + + @@ -7181,7 +8324,6 @@ 0 wxID_ANY * B1 - Internal Conductors * B2 - External Conductors, uncoated, sea level to 3050 m * B3 - External Conductors, uncoated, over 3050 m * B4 - External Conductors, with permanent polymer coating (any elevation) * A5 - External Conductors, with conformal coating over assembly (any elevation) * A6 - External Component lead/termination, uncoated * A7 - External Component lead termination, with conformal coating (any elevation) - 0 @@ -7196,9 +8338,7 @@ protected 1 - Resizable - 1 @@ -7252,7 +8392,10 @@ 1 1 1 + + + @@ -7272,7 +8415,6 @@ 0 0 wxID_ANY - 0 @@ -7287,9 +8429,7 @@ protected 1 - Resizable - 1 @@ -7348,7 +8488,10 @@ 1 1 1 + + + @@ -7370,7 +8513,6 @@ 0 wxID_ANY Transmission Line Type: - 1 0 @@ -7386,9 +8528,7 @@ protected 1 - Resizable - 0 1 @@ -7438,7 +8578,10 @@ 1 1 1 + + + @@ -7458,7 +8601,6 @@ 0 0 wxID_ANY - 0 @@ -7473,9 +8615,7 @@ protected 1 - Resizable - 1 205,205 @@ -7524,7 +8664,10 @@ 1 1 1 + + + @@ -7544,7 +8687,6 @@ 0 0 wxID_ANY - 0 @@ -7559,9 +8701,7 @@ protected 1 - Resizable - 1 wxLI_VERTICAL @@ -7646,7 +8786,10 @@ 1 1 1 + + + @@ -7667,7 +8810,6 @@ 0 wxID_ANY Er - 0 @@ -7682,9 +8824,7 @@ protected 1 - Resizable - 1 @@ -7733,7 +8873,10 @@ 1 1 1 + + + @@ -7753,7 +8896,6 @@ 0 0 wxID_ANY - 0 @@ -7769,9 +8911,7 @@ protected 1 - Resizable - 1 @@ -7824,7 +8964,10 @@ 1 1 1 + + + @@ -7846,7 +8989,6 @@ 0 wxID_ANY ... - 0 @@ -7861,9 +9003,7 @@ protected 1 - Resizable - 1 wxBU_EXACTFIT @@ -7912,7 +9052,10 @@ 1 1 1 + + + @@ -7933,7 +9076,6 @@ 0 wxID_ANY TanD - 0 @@ -7948,9 +9090,7 @@ protected 1 - Resizable - 1 @@ -7999,7 +9139,10 @@ 1 1 1 + + + @@ -8019,7 +9162,6 @@ 0 0 wxID_ANY - 0 @@ -8035,9 +9177,7 @@ protected 1 - Resizable - 1 @@ -8090,7 +9230,10 @@ 1 1 1 + + + @@ -8112,7 +9255,6 @@ 0 wxID_ANY ... - 0 @@ -8127,9 +9269,7 @@ protected 1 - Resizable - 1 wxBU_EXACTFIT @@ -8178,7 +9318,10 @@ 1 1 1 + + + @@ -8199,7 +9342,6 @@ 0 wxID_ANY Rho - 0 @@ -8214,9 +9356,7 @@ protected 1 - Resizable - 1 @@ -8265,7 +9405,10 @@ 1 1 1 + + + @@ -8285,7 +9428,6 @@ 0 0 wxID_ANY - 0 @@ -8301,9 +9443,7 @@ protected 1 - Resizable - 1 @@ -8356,7 +9496,10 @@ 1 1 1 + + + @@ -8378,7 +9521,6 @@ 0 wxID_ANY ... - 0 @@ -8393,9 +9535,7 @@ protected 1 - Resizable - 1 wxBU_EXACTFIT @@ -8444,7 +9584,10 @@ 1 1 1 + + + @@ -8465,7 +9608,6 @@ 0 wxID_ANY H - 0 @@ -8480,9 +9622,7 @@ protected 1 - Resizable - 1 @@ -8531,7 +9671,10 @@ 1 1 1 + + + @@ -8551,7 +9694,6 @@ 0 0 wxID_ANY - 0 @@ -8567,9 +9709,7 @@ protected 1 - Resizable - 1 @@ -8622,7 +9762,10 @@ 1 1 1 + + + @@ -8643,7 +9786,6 @@ 0 0 wxID_ANY - 0 @@ -8658,12 +9800,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -8709,7 +9850,10 @@ 1 1 1 + + + @@ -8730,7 +9874,6 @@ 0 wxID_ANY H_t - 0 @@ -8745,9 +9888,7 @@ protected 1 - Resizable - 1 @@ -8796,7 +9937,10 @@ 1 1 1 + + + @@ -8816,7 +9960,6 @@ 0 0 wxID_ANY - 0 @@ -8832,9 +9975,7 @@ protected 1 - Resizable - 1 @@ -8887,7 +10028,10 @@ 1 1 1 + + + @@ -8908,7 +10052,6 @@ 0 0 wxID_ANY - 0 @@ -8923,12 +10066,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -8974,7 +10116,10 @@ 1 1 1 + + + @@ -8995,7 +10140,6 @@ 0 wxID_ANY T - 0 @@ -9010,9 +10154,7 @@ protected 1 - Resizable - 1 @@ -9061,7 +10203,10 @@ 1 1 1 + + + @@ -9081,7 +10226,6 @@ 0 0 wxID_ANY - 0 @@ -9097,9 +10241,7 @@ protected 1 - Resizable - 1 @@ -9152,7 +10294,10 @@ 1 1 1 + + + @@ -9173,7 +10318,6 @@ 0 0 wxID_ANY - 0 @@ -9188,12 +10332,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -9239,7 +10382,10 @@ 1 1 1 + + + @@ -9260,7 +10406,6 @@ 0 wxID_ANY Rough - 0 @@ -9275,9 +10420,7 @@ protected 1 - Resizable - 1 @@ -9326,7 +10469,10 @@ 1 1 1 + + + @@ -9346,7 +10492,6 @@ 0 0 wxID_ANY - 0 @@ -9362,9 +10507,7 @@ protected 1 - Resizable - 1 @@ -9417,7 +10560,10 @@ 1 1 1 + + + @@ -9438,7 +10584,6 @@ 0 0 wxID_ANY - 0 @@ -9453,12 +10598,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -9504,7 +10648,10 @@ 1 1 1 + + + @@ -9525,7 +10672,6 @@ 0 wxID_ANY Mur - 0 @@ -9540,9 +10686,7 @@ protected 1 - Resizable - 1 @@ -9591,7 +10735,10 @@ 1 1 1 + + + @@ -9611,7 +10758,6 @@ 0 0 wxID_ANY - 0 @@ -9627,9 +10773,7 @@ protected 1 - Resizable - 1 @@ -9682,7 +10826,10 @@ 1 1 1 + + + @@ -9703,7 +10850,6 @@ 0 0 wxID_ANY - 0 @@ -9718,12 +10864,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -9769,7 +10914,10 @@ 1 1 1 + + + @@ -9790,7 +10938,6 @@ 0 wxID_ANY MurC - 0 @@ -9805,9 +10952,7 @@ protected 1 - Resizable - 1 @@ -9856,7 +11001,10 @@ 1 1 1 + + + @@ -9876,7 +11024,6 @@ 0 0 wxID_ANY - 0 @@ -9892,9 +11039,7 @@ protected 1 - Resizable - 1 @@ -9947,7 +11092,10 @@ 1 1 1 + + + @@ -9968,7 +11116,6 @@ 0 0 wxID_ANY - 0 @@ -9983,12 +11130,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -10066,7 +11212,10 @@ 1 1 1 + + + @@ -10087,7 +11236,6 @@ 0 wxID_ANY Frequency - 0 @@ -10102,9 +11250,7 @@ protected 1 - Resizable - 1 @@ -10153,7 +11299,10 @@ 1 1 1 + + + @@ -10173,7 +11322,6 @@ 0 0 wxID_ANY - 0 @@ -10189,9 +11337,7 @@ protected 1 - Resizable - 1 @@ -10244,7 +11390,10 @@ 1 1 1 + + + @@ -10265,7 +11414,6 @@ 0 0 wxID_ANY - 0 @@ -10280,12 +11428,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_FREQUENCY; UnitSelector.h 0 @@ -10383,7 +11530,10 @@ 1 1 1 + + + @@ -10404,7 +11554,6 @@ 0 wxID_ANY Prm1 - 0 @@ -10419,9 +11568,7 @@ protected 1 - Resizable - 1 @@ -10470,7 +11617,10 @@ 1 1 1 + + + @@ -10490,7 +11640,6 @@ 0 0 wxID_ANY - 0 @@ -10506,9 +11655,7 @@ protected 1 - Resizable - 1 @@ -10561,7 +11708,10 @@ 1 1 1 + + + @@ -10582,7 +11732,6 @@ 0 0 wxID_ANY - 0 @@ -10597,12 +11746,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -10648,7 +11796,10 @@ 1 1 1 + + + @@ -10669,7 +11820,6 @@ 0 wxID_ANY - 0 @@ -10684,9 +11834,7 @@ protected 1 - Resizable - 1 wxRB_GROUP @@ -10736,7 +11884,10 @@ 1 1 1 + + + @@ -10757,7 +11908,6 @@ 0 wxID_ANY prm2 - 0 @@ -10772,9 +11922,7 @@ protected 1 - Resizable - 1 @@ -10823,7 +11971,10 @@ 1 1 1 + + + @@ -10843,7 +11994,6 @@ 0 0 wxID_ANY - 0 @@ -10859,9 +12009,7 @@ protected 1 - Resizable - 1 @@ -10914,7 +12062,10 @@ 1 1 1 + + + @@ -10935,7 +12086,6 @@ 0 0 wxID_ANY - 0 @@ -10950,12 +12100,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -11001,7 +12150,10 @@ 1 1 1 + + + @@ -11022,7 +12174,6 @@ 0 wxID_ANY - 0 @@ -11037,9 +12188,7 @@ protected 1 - Resizable - 1 @@ -11089,7 +12238,10 @@ 1 1 1 + + + @@ -11110,7 +12262,6 @@ 0 wxID_ANY prm3 - 0 @@ -11125,9 +12276,7 @@ protected 1 - Resizable - 1 @@ -11176,7 +12325,10 @@ 1 1 1 + + + @@ -11196,7 +12348,6 @@ 0 0 wxID_ANY - 0 @@ -11212,9 +12363,7 @@ protected 1 - Resizable - 1 @@ -11267,7 +12416,10 @@ 1 1 1 + + + @@ -11288,7 +12440,6 @@ 0 0 wxID_ANY - 0 @@ -11303,12 +12454,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -11388,10 +12538,13 @@ 1 1 1 + + + - ../bitmaps/arrow_bottom.xpm; Load From File + Load From File; ../bitmaps/arrow_bottom.xpm 1 0 @@ -11409,7 +12562,6 @@ 0 0 wxID_ANY - 0 @@ -11424,9 +12576,7 @@ protected 1 - Resizable - 1 @@ -11473,7 +12623,10 @@ 1 1 1 + + + @@ -11495,7 +12648,6 @@ 0 wxID_ANY Analyze - 0 @@ -11510,9 +12662,7 @@ protected 1 - Resizable - 1 @@ -11561,7 +12711,10 @@ 1 1 1 + + + @@ -11583,7 +12736,6 @@ 0 wxID_ANY Synthetize - 0 @@ -11598,9 +12750,7 @@ protected 1 - Resizable - 1 @@ -11649,10 +12799,13 @@ 1 1 1 + + + - ../bitmaps/arrow_top.xpm; Load From File + Load From File; ../bitmaps/arrow_top.xpm 1 0 @@ -11670,7 +12823,6 @@ 0 0 wxID_ANY - 0 @@ -11685,9 +12837,7 @@ protected 1 - Resizable - 1 @@ -11766,7 +12916,10 @@ 1 1 1 + + + @@ -11787,7 +12940,6 @@ 0 wxID_ANY Z - 0 @@ -11802,9 +12954,7 @@ protected 1 - Resizable - 1 @@ -11853,7 +13003,10 @@ 1 1 1 + + + @@ -11873,7 +13026,6 @@ 0 0 wxID_ANY - 0 @@ -11889,9 +13041,7 @@ protected 1 - Resizable - 1 @@ -11944,7 +13094,10 @@ 1 1 1 + + + @@ -11965,7 +13118,6 @@ 0 0 wxID_ANY - 0 @@ -11980,12 +13132,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_RESISTOR; UnitSelector.h 0 @@ -12031,7 +13182,10 @@ 1 1 1 + + + @@ -12052,7 +13206,6 @@ 0 wxID_ANY Z - 0 @@ -12067,9 +13220,7 @@ protected 1 - Resizable - 1 @@ -12118,7 +13269,10 @@ 1 1 1 + + + @@ -12138,7 +13292,6 @@ 0 0 wxID_ANY - 0 @@ -12154,9 +13307,7 @@ protected 1 - Resizable - 1 @@ -12209,7 +13360,10 @@ 1 1 1 + + + @@ -12230,7 +13384,6 @@ 0 0 wxID_ANY - 0 @@ -12245,12 +13398,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_RESISTOR; UnitSelector.h 0 @@ -12296,7 +13448,10 @@ 1 1 1 + + + @@ -12317,7 +13472,6 @@ 0 wxID_ANY Angle - 0 @@ -12332,9 +13486,7 @@ protected 1 - Resizable - 1 @@ -12383,7 +13535,10 @@ 1 1 1 + + + @@ -12403,7 +13558,6 @@ 0 0 wxID_ANY - 0 @@ -12419,9 +13573,7 @@ protected 1 - Resizable - 1 @@ -12474,7 +13626,10 @@ 1 1 1 + + + @@ -12495,7 +13650,6 @@ 0 0 wxID_ANY - 0 @@ -12510,12 +13664,11 @@ protected 1 - Resizable - 0 1 + UNIT_SELECTOR_ANGLE; UnitSelector.h 0 @@ -12593,7 +13746,10 @@ 1 1 1 + + + @@ -12614,7 +13770,6 @@ 0 wxID_ANY dummy - 0 @@ -12629,9 +13784,7 @@ protected 1 - Resizable - 1 @@ -12680,7 +13833,10 @@ 1 1 1 + + + @@ -12701,7 +13857,6 @@ 0 wxID_ANY dummy - 0 @@ -12716,9 +13871,7 @@ protected 1 - Resizable - 1 @@ -12767,7 +13920,10 @@ 1 1 1 + + + @@ -12788,7 +13944,6 @@ 0 wxID_ANY dummy - 0 @@ -12803,9 +13958,7 @@ protected 1 - Resizable - 1 @@ -12854,7 +14007,10 @@ 1 1 1 + + + @@ -12875,7 +14031,6 @@ 0 wxID_ANY dummy - 0 @@ -12890,9 +14045,7 @@ protected 1 - Resizable - 1 @@ -12941,7 +14094,10 @@ 1 1 1 + + + @@ -12962,7 +14118,6 @@ 0 wxID_ANY dummy - 0 @@ -12977,9 +14132,7 @@ protected 1 - Resizable - 1 @@ -13028,7 +14181,10 @@ 1 1 1 + + + @@ -13049,7 +14205,6 @@ 0 wxID_ANY dummy - 0 @@ -13064,9 +14219,7 @@ protected 1 - Resizable - 1 @@ -13115,7 +14268,10 @@ 1 1 1 + + + @@ -13136,7 +14292,6 @@ 0 wxID_ANY dummy - 0 @@ -13151,9 +14306,7 @@ protected 1 - Resizable - 1 @@ -13202,7 +14355,10 @@ 1 1 1 + + + @@ -13223,7 +14379,6 @@ 0 wxID_ANY dummy - 0 @@ -13238,9 +14393,7 @@ protected 1 - Resizable - 1 @@ -13289,7 +14442,10 @@ 1 1 1 + + + @@ -13310,7 +14466,6 @@ 0 wxID_ANY dummy - 0 @@ -13325,9 +14480,7 @@ protected 1 - Resizable - 1 @@ -13376,7 +14529,10 @@ 1 1 1 + + + @@ -13397,7 +14553,6 @@ 0 wxID_ANY dummy - 0 @@ -13412,9 +14567,7 @@ protected 1 - Resizable - 1 @@ -13463,7 +14616,10 @@ 1 1 1 + + + @@ -13484,7 +14640,6 @@ 0 wxID_ANY dummy - 0 @@ -13499,9 +14654,7 @@ protected 1 - Resizable - 1 @@ -13550,7 +14703,10 @@ 1 1 1 + + + @@ -13571,7 +14727,6 @@ 0 wxID_ANY dummy - 0 @@ -13586,9 +14741,7 @@ protected 1 - Resizable - 1 @@ -13637,7 +14790,10 @@ 1 1 1 + + + @@ -13658,7 +14814,6 @@ 0 wxID_ANY dummy - 0 @@ -13673,9 +14828,7 @@ protected 1 - Resizable - 1 @@ -13724,7 +14877,10 @@ 1 1 1 + + + @@ -13745,7 +14901,6 @@ 0 wxID_ANY dummy - 0 @@ -13760,9 +14915,7 @@ protected 1 - Resizable - 1 @@ -13820,7 +14973,10 @@ 1 1 1 + + + @@ -13840,7 +14996,6 @@ 0 0 wxID_ANY - 0 @@ -13855,9 +15010,7 @@ protected 1 - Resizable - 1 @@ -13919,7 +15072,10 @@ 1 1 1 + + + @@ -13941,7 +15097,6 @@ 0 wxID_ANY Attenuators: - 1 0 @@ -13957,9 +15112,7 @@ protected 1 - Resizable - 0 1 @@ -14009,7 +15162,10 @@ 1 1 1 + + + @@ -14029,7 +15185,6 @@ 0 0 wxID_ANY - 0 @@ -14044,9 +15199,7 @@ protected 1 - Resizable - 1 256,256 @@ -14132,7 +15285,10 @@ 1 1 1 + + + @@ -14153,7 +15309,6 @@ 0 wxID_ANY Attenuation - 0 @@ -14168,9 +15323,7 @@ protected 1 - Resizable - 1 @@ -14219,7 +15372,10 @@ 1 1 1 + + + @@ -14239,7 +15395,6 @@ 0 0 wxID_ANY - 0 @@ -14255,9 +15410,7 @@ protected 1 - Resizable - 1 @@ -14310,7 +15463,10 @@ 1 1 1 + + + @@ -14331,7 +15487,6 @@ 0 wxID_ANY dB - 0 @@ -14346,9 +15501,7 @@ protected 1 - Resizable - 1 @@ -14397,7 +15550,10 @@ 1 1 1 + + + @@ -14418,7 +15574,6 @@ 0 wxID_ANY Zin - 0 @@ -14433,9 +15588,7 @@ protected 1 - Resizable - 1 @@ -14484,7 +15637,10 @@ 1 1 1 + + + @@ -14504,7 +15660,6 @@ 0 0 wxID_ANY - 0 @@ -14520,9 +15675,7 @@ protected 1 - Resizable - 1 @@ -14575,7 +15728,10 @@ 1 1 1 + + + @@ -14596,7 +15752,6 @@ 0 wxID_ANY Ohms - 0 @@ -14611,9 +15766,7 @@ protected 1 - Resizable - 1 @@ -14662,7 +15815,10 @@ 1 1 1 + + + @@ -14683,7 +15839,6 @@ 0 wxID_ANY Zout - 0 @@ -14698,9 +15853,7 @@ protected 1 - Resizable - 1 @@ -14749,7 +15902,10 @@ 1 1 1 + + + @@ -14769,7 +15925,6 @@ 0 0 wxID_ANY - 0 @@ -14785,9 +15940,7 @@ protected 1 - Resizable - 1 @@ -14840,7 +15993,10 @@ 1 1 1 + + + @@ -14861,7 +16017,6 @@ 0 wxID_ANY Ohms - 0 @@ -14876,9 +16031,7 @@ protected 1 - Resizable - 1 @@ -14940,7 +16093,10 @@ 1 1 1 + + + @@ -14962,7 +16118,6 @@ 0 wxID_ANY Calculate - 0 @@ -14977,9 +16132,7 @@ protected 1 - Resizable - 1 @@ -15028,10 +16181,13 @@ 1 1 1 + + + - ../bitmaps/arrow_bottom.xpm; Load From File + Load From File; ../bitmaps/arrow_bottom.xpm 1 0 @@ -15049,7 +16205,6 @@ 0 0 wxID_ANY - 0 @@ -15064,9 +16219,7 @@ protected 1 - Resizable - 1 @@ -15143,7 +16296,10 @@ 1 1 1 + + + @@ -15164,7 +16320,6 @@ 0 wxID_ANY R1 - 0 @@ -15179,9 +16334,7 @@ protected 1 - Resizable - 1 @@ -15230,7 +16383,10 @@ 1 1 1 + + + @@ -15250,7 +16406,6 @@ 0 0 wxID_ANY - 0 @@ -15266,9 +16421,7 @@ protected 1 - Resizable - 1 @@ -15321,7 +16474,10 @@ 1 1 1 + + + @@ -15342,7 +16498,6 @@ 0 wxID_ANY Ohms - 0 @@ -15357,9 +16512,7 @@ protected 1 - Resizable - 1 @@ -15408,7 +16561,10 @@ 1 1 1 + + + @@ -15429,7 +16585,6 @@ 0 wxID_ANY R2 - 0 @@ -15444,9 +16599,7 @@ protected 1 - Resizable - 1 @@ -15495,7 +16648,10 @@ 1 1 1 + + + @@ -15515,7 +16671,6 @@ 0 0 wxID_ANY - 0 @@ -15531,9 +16686,7 @@ protected 1 - Resizable - 1 @@ -15586,7 +16739,10 @@ 1 1 1 + + + @@ -15607,7 +16763,6 @@ 0 wxID_ANY Ohms - 0 @@ -15622,9 +16777,7 @@ protected 1 - Resizable - 1 @@ -15673,7 +16826,10 @@ 1 1 1 + + + @@ -15694,7 +16850,6 @@ 0 wxID_ANY R3 - 0 @@ -15709,9 +16864,7 @@ protected 1 - Resizable - 1 @@ -15760,7 +16913,10 @@ 1 1 1 + + + @@ -15780,7 +16936,6 @@ 0 0 wxID_ANY - 0 @@ -15796,9 +16951,7 @@ protected 1 - Resizable - 1 @@ -15851,7 +17004,10 @@ 1 1 1 + + + @@ -15872,7 +17028,6 @@ 0 wxID_ANY Ohms - 0 @@ -15887,9 +17042,7 @@ protected 1 - Resizable - 1 @@ -15942,7 +17095,10 @@ 1 1 1 + + + @@ -15963,7 +17119,6 @@ 0 wxID_ANY Messages: - 0 @@ -15978,9 +17133,7 @@ protected 1 - Resizable - 1 @@ -16029,7 +17182,10 @@ 1 1 1 + + + @@ -16049,7 +17205,6 @@ 0 0 wxID_ANY - 0 @@ -16065,9 +17220,7 @@ protected 1 - Resizable - 1 wxTE_MULTILINE|wxTE_READONLY @@ -16134,7 +17287,10 @@ 1 1 1 + + + @@ -16154,7 +17310,6 @@ 0 0 wxID_ANY - 0 @@ -16169,9 +17324,7 @@ protected 1 - Resizable - 1 -1,-1 @@ -16223,7 +17376,10 @@ 1 1 1 + + + @@ -16243,7 +17399,6 @@ 0 0 wxID_ANY - 0 @@ -16258,9 +17413,7 @@ protected 1 - Resizable - 1 @@ -16310,7 +17463,10 @@ 1 1 1 + + + @@ -16332,7 +17488,6 @@ 0 wxID_ANY Tolerance - 1 0 @@ -16348,9 +17503,7 @@ protected 1 - Resizable - 0 1 @@ -16416,7 +17569,10 @@ 1 1 1 + + + @@ -16437,7 +17593,6 @@ 0 wxID_ANY 1st Band - 0 @@ -16452,9 +17607,7 @@ protected 1 - Resizable - 1 @@ -16503,7 +17656,10 @@ 1 1 1 + + + @@ -16524,7 +17680,6 @@ 0 wxID_ANY 2nd Band - 0 @@ -16539,9 +17694,7 @@ protected 1 - Resizable - 1 @@ -16590,7 +17743,10 @@ 1 1 1 + + + @@ -16611,7 +17767,6 @@ 0 wxID_ANY 3rd Band - 0 @@ -16626,9 +17781,7 @@ protected 1 - Resizable - 1 @@ -16677,7 +17830,10 @@ 1 1 1 + + + @@ -16698,7 +17854,6 @@ 0 wxID_ANY 4rd Band - 0 @@ -16713,9 +17868,7 @@ protected 1 - Resizable - 1 @@ -16764,7 +17917,10 @@ 1 1 1 + + + @@ -16785,7 +17941,6 @@ 0 wxID_ANY Multiplier - 0 @@ -16800,9 +17955,7 @@ protected 1 - Resizable - 1 @@ -16851,7 +18004,10 @@ 1 1 1 + + + @@ -16872,7 +18028,6 @@ 0 wxID_ANY Tolerance - 0 @@ -16887,9 +18042,7 @@ protected 1 - Resizable - 1 @@ -16938,10 +18091,13 @@ 1 1 1 + + + - ../bitmaps/color_code_value_and_name.xpm; Load From File + Load From File; ../bitmaps/color_code_value_and_name.xpm 1 0 @@ -16959,7 +18115,6 @@ 0 0 wxID_ANY - 0 @@ -16974,9 +18129,7 @@ protected 1 - Resizable - 1 @@ -17023,10 +18176,13 @@ 1 1 1 + + + - ../bitmaps/color_code_value.xpm; Load From File + Load From File; ../bitmaps/color_code_value.xpm 1 0 @@ -17044,7 +18200,6 @@ 0 0 wxID_ANY - 0 @@ -17059,9 +18214,7 @@ protected 1 - Resizable - 1 @@ -17108,10 +18261,13 @@ 1 1 1 + + + - ../bitmaps/color_code_value.xpm; Load From File + Load From File; ../bitmaps/color_code_value.xpm 1 0 @@ -17129,7 +18285,6 @@ 0 0 wxID_ANY - 0 @@ -17144,9 +18299,7 @@ protected 1 - Resizable - 1 @@ -17193,10 +18346,13 @@ 1 1 1 + + + - ../bitmaps/color_code_value.xpm; Load From File + Load From File; ../bitmaps/color_code_value.xpm 1 0 @@ -17214,7 +18370,6 @@ 0 0 wxID_ANY - 0 @@ -17229,9 +18384,7 @@ protected 1 - Resizable - 1 @@ -17278,10 +18431,13 @@ 1 1 1 + + + - ../bitmaps/color_code_multiplier.xpm; Load From File + Load From File; ../bitmaps/color_code_multiplier.xpm 1 0 @@ -17299,7 +18455,6 @@ 0 0 wxID_ANY - 0 @@ -17314,9 +18469,7 @@ protected 1 - Resizable - 1 @@ -17363,10 +18516,13 @@ 1 1 1 + + + - ../bitmaps/color_code_tolerance.xpm; Load From File + Load From File; ../bitmaps/color_code_tolerance.xpm 1 0 @@ -17384,7 +18540,6 @@ 0 0 wxID_ANY - 0 @@ -17399,9 +18554,7 @@ protected 1 - Resizable - 1 @@ -17453,7 +18606,10 @@ 1 1 1 + + + @@ -17473,7 +18629,6 @@ 0 0 wxID_ANY - 0 @@ -17488,9 +18643,7 @@ protected 1 - Resizable - 1 @@ -17540,7 +18693,10 @@ 1 1 1 + + + @@ -17561,7 +18717,6 @@ 0 0 wxID_ANY - 0 @@ -17576,12 +18731,11 @@ protected 1 - Resizable - -1 1 + UNIT_SELECTOR_LEN; UnitSelector.h 0 @@ -17636,7 +18790,10 @@ 1 1 1 + + + @@ -17657,7 +18814,6 @@ 0 wxID_ANY Note: Values are minimal values - 0 @@ -17672,9 +18828,7 @@ protected 1 - Resizable - 1 @@ -17723,7 +18877,10 @@ 1 1 1 + + + 0 1 @@ -17766,7 +18923,6 @@ - 0 0 @@ -17783,9 +18939,7 @@ protected 1 - Resizable - wxALIGN_RIGHT 160 "Lines width" "Min clearance" "Via: (diam - drill)" "Plated Pad: (diam - drill)" "NP Pad: (diam - drill)" @@ -17870,7 +19024,10 @@ 1 1 1 + + + @@ -17890,7 +19047,6 @@ 0 0 wxID_ANY - 0 @@ -17905,9 +19061,7 @@ protected 1 - Resizable - 1 diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.h b/pcb_calculator/dialogs/pcb_calculator_frame_base.h index dfe2f55322..350b975c91 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.h +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 30 2011) +// C++ code generated with wxFormBuilder (version Mar 17 2012) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -11,11 +11,7 @@ #include #include #include -class UNIT_SELECTOR_ANGLE; -class UNIT_SELECTOR_FREQUENCY; -class UNIT_SELECTOR_LEN; -class UNIT_SELECTOR_RESISTOR; - +#include "UnitSelector.h" #include #include #include @@ -27,15 +23,16 @@ class UNIT_SELECTOR_RESISTOR; #include #include #include -#include #include +#include +#include #include #include -#include -#include #include +#include +#include +#include #include -#include #include #include #include @@ -57,7 +54,8 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame wxStatusBar* m_statusBar; wxNotebook* m_Notebook; wxPanel* m_panelRegulators; - wxStaticBitmap* m_bitmapRegul; + wxStaticBitmap* m_bitmapRegul4pins; + wxStaticBitmap* m_bitmapRegul3pins; wxStaticText* m_RegulFormula; wxRadioButton* m_rbRegulR1; wxStaticText* m_labelRegultR1; @@ -67,14 +65,25 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame wxStaticText* m_labelRegultR2; wxTextCtrl* m_RegulR2Value; wxStaticText* m_UnitRegultR1; - wxStaticText* m_lableVRef; - wxTextCtrl* m_RegulVrefValue; - wxStaticText* m_unitsVref; wxRadioButton* m_rbRegulVout; wxStaticText* m_labelVout; wxTextCtrl* m_RegulVoutValue; wxStaticText* m_unitsVout; + wxStaticText* m_labelVRef; + wxTextCtrl* m_RegulVrefValue; + wxStaticText* m_unitsVref; + wxStaticText* m_RegulIadjTitle; + wxTextCtrl* m_RegulIadjValue; + wxStaticText* m_IadjUnitLabel; + wxStaticText* m_staticTextRegType; + wxChoice* m_choiceRegType; wxButton* m_buttonCalculate; + wxChoice* m_choiceRegulatorSelector; + wxStaticText* m_staticTextRegFile; + wxFilePickerCtrl* m_regulators_filePicker; + wxButton* m_buttonEditItem; + wxButton* m_buttonAddItem; + wxButton* m_buttonRemoveItem; wxStaticText* m_RegulMessage; wxPanel* m_panelTrackWidth; wxStaticText* m_staticTextTW_WarningMessage; @@ -250,7 +259,13 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame wxPanel* m_panelShowClassPrms; // Virtual event handlers, overide them in your derived class + virtual void OnRegulTypeSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnRegulatorCalcButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRegulatorSelection( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDataFileSelection( wxFileDirPickerEvent& event ) { event.Skip(); } + virtual void OnEditRegulator( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddRegulator( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveRegulator( wxCommandEvent& event ) { event.Skip(); } virtual void OnTWCalculateButt( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingRefresh( wxCommandEvent& event ) { event.Skip(); } @@ -271,7 +286,7 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame public: - PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Pcb Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 670,465 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL ); + PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Pcb Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 670,489 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL ); ~PCB_CALCULATOR_FRAME_BASE(); diff --git a/pcb_calculator/pcb_calculator.cpp b/pcb_calculator/pcb_calculator.cpp index 213169c44a..ea80bc9493 100644 --- a/pcb_calculator/pcb_calculator.cpp +++ b/pcb_calculator/pcb_calculator.cpp @@ -37,6 +37,10 @@ #include #include +// Pcb_calculator data file extension: +const wxString PcbCalcDataFileExt( wxT("pcbcalc") ); + + // PCB_CALCULATOR_APP void EDA_APP::MacOpenFile(const wxString &fileName) diff --git a/pcb_calculator/pcb_calculator.h b/pcb_calculator/pcb_calculator.h index 523f3795f6..69fe84ccaf 100644 --- a/pcb_calculator/pcb_calculator.h +++ b/pcb_calculator/pcb_calculator.h @@ -10,13 +10,22 @@ #include // Included for SUBST_PRMS_ID definition. #include #include +#include + +extern const wxString PcbCalcDataFileExt; /* Class PCB_CALCULATOR_FRAME_BASE This is the main frame for this application */ class PCB_CALCULATOR_FRAME : public PCB_CALCULATOR_FRAME_BASE { +public: + REGULATOR_LIST m_RegulatorList; // the list of known regulator + private: + bool m_RegulatorListChanged; // set to true when m_RegulatorList + // was modified, and the corresponging file + // must be rewritten wxSize m_FrameSize; wxPoint m_FramePos; wxConfig * m_Config; @@ -27,6 +36,7 @@ private: ATTENUATOR * m_currAttenuator; // List ofattenuators: ordered like in dialog menu list std::vector m_attenuator_list; + wxString m_lastSelectedRegulatorName; // last regulator name selected public: @@ -46,6 +56,14 @@ private: void ReadConfig(); void WriteConfig(); + // R/W data files: + bool ReadDataFile(); + bool WriteDataFile(); + const wxString GetDataFilename() + { + return m_regulators_filePicker->GetPath(); + } + // tracks width versus current functions: /** * Function OnTWCalculateButt @@ -150,6 +168,30 @@ private: // Regulators Panel void OnRegulatorCalcButtonClick( wxCommandEvent& event ); + void OnRegulTypeSelection( wxCommandEvent& event ); + void OnRegulatorSelection( wxCommandEvent& event ); + void OnDataFileSelection( wxFileDirPickerEvent& event ); + void OnAddRegulator( wxCommandEvent& event ); + void OnEditRegulator( wxCommandEvent& event ); + void OnRemoveRegulator( wxCommandEvent& event ); + + /** + * Function RegulatorPageUpdate: + * Update the regulator page dialog display: + * enable the current regulator drawings and the formula used for calculations + */ + void RegulatorPageUpdate(); + + /** + * Function SelectLastSelectedRegulator + * select in choice box the last selected regulator + * (name in m_lastSelectedRegulatorName) + * and update the displayed values. + * if m_lastSelectedRegulatorName is empty, just calls + * RegulatorPageUpdate() + */ + void SelectLastSelectedRegulator(); + void RegulatorsSolve(); public: diff --git a/pcb_calculator/pcb_calculator_datafile.keywords b/pcb_calculator/pcb_calculator_datafile.keywords new file mode 100644 index 0000000000..8805e545a6 --- /dev/null +++ b/pcb_calculator/pcb_calculator_datafile.keywords @@ -0,0 +1,5 @@ +regulators +regulator +reg_iadj +reg_vref +reg_type diff --git a/pcb_calculator/pcb_calculator_frame.cpp b/pcb_calculator/pcb_calculator_frame.cpp index 6c90930c1f..7bd169e721 100644 --- a/pcb_calculator/pcb_calculator_frame.cpp +++ b/pcb_calculator/pcb_calculator_frame.cpp @@ -26,32 +26,36 @@ #include #include - #include -#define KEYWORD_FRAME_POSX wxT( "Pcb_calculator_Pos_x" ) -#define KEYWORD_FRAME_POSY wxT( "Pcb_calculator_Pos_y" ) -#define KEYWORD_FRAME_SIZEX wxT( "Pcb_calculator_Size_x" ) -#define KEYWORD_FRAME_SIZEY wxT( "Pcb_calculator_Size_y" ) -#define KEYWORD_TRANSLINE_SELECTION wxT( "Transline_selection" ) -#define KEYWORD_PAGE_SELECTION wxT( "Page_selection" ) -#define KEYWORD_COLORCODE_SELECTION wxT( "CC_selection" ) -#define KEYWORD_ATTENUATORS_SELECTION wxT( "Att_selection" ) -#define KEYWORD_BRDCLASS_SELECTION wxT( "BrdClass_selection" ) -#define KEYWORD_ELECTRICAL_SPACING_SELECTION wxT( "ElectSpacing_selection" ) -#define KEYWORD_ELECTRICAL_SPACING_VOLTAGE wxT( "ElectSpacing_voltage" ) -#define KEYWORD_REGUL_R1 wxT( "RegulR1" ) -#define KEYWORD_REGUL_R2 wxT( "RegulR2" ) -#define KEYWORD_REGUL_VREF wxT( "RegulVREF" ) -#define KEYWORD_REGUL_VOUT wxT( "RegulVOUT" ) +#define KEYWORD_FRAME_POSX wxT( "Pcb_calculator_Pos_x" ) +#define KEYWORD_FRAME_POSY wxT( "Pcb_calculator_Pos_y" ) +#define KEYWORD_FRAME_SIZEX wxT( "Pcb_calculator_Size_x" ) +#define KEYWORD_FRAME_SIZEY wxT( "Pcb_calculator_Size_y" ) +#define KEYWORD_TRANSLINE_SELECTION wxT( "Transline_selection" ) +#define KEYWORD_PAGE_SELECTION wxT( "Page_selection" ) +#define KEYWORD_COLORCODE_SELECTION wxT( "CC_selection" ) +#define KEYWORD_ATTENUATORS_SELECTION wxT( "Att_selection" ) +#define KEYWORD_BRDCLASS_SELECTION wxT( "BrdClass_selection" ) +#define KEYWORD_ELECTRICAL_SPACING_SELECTION wxT( "ElectSpacing_selection" ) +#define KEYWORD_ELECTRICAL_SPACING_VOLTAGE wxT( "ElectSpacing_voltage" ) +#define KEYWORD_REGUL_R1 wxT( "RegulR1" ) +#define KEYWORD_REGUL_R2 wxT( "RegulR2" ) +#define KEYWORD_REGUL_VREF wxT( "RegulVREF" ) +#define KEYWORD_REGUL_VOUT wxT( "RegulVOUT" ) +#define KEYWORD_REGUL_FILENAME wxT( "RegulListFilename" ) +#define KEYWORD_REGUL_SELECTED wxT( "RegulName" ) +#define KEYWORD_REGUL_TYPE wxT( "RegulType" ) +#define KEYWORD_REGUL_LAST_PARAM wxT( "RegulLastParam" ) -PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow * parent ) : - PCB_CALCULATOR_FRAME_BASE( parent ) +PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow* parent ) : + PCB_CALCULATOR_FRAME_BASE( parent ) { m_currTransLine = NULL; m_currTransLineType = default_type; - m_currAttenuator = NULL; + m_currAttenuator = NULL; + m_RegulatorListChanged = false; m_Config = new wxConfig(); // Populate transline list ordered like in dialog menu list @@ -61,6 +65,7 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow * parent ) : rectwaveguide_type, coax_type, c_microstrip_type, stripline_type, twistedpair_type }; + for( int ii = 0; ii < 8; ii++ ) m_transline_list.push_back( new TRANSLINE_IDENT( tltype_list[ii] ) ); @@ -73,6 +78,8 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow * parent ) : ReadConfig(); + ReadDataFile(); + TranslineTypeSelection( m_currTransLineType ); m_TranslineSelection->SetSelection( m_currTransLineType ); @@ -86,6 +93,10 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow * parent ) : ElectricalSpacingUpdateData( m_ElectricalSpacingUnitsSelector->GetUnitScale() ); + + m_choiceRegulatorSelector->Append( m_RegulatorList.GetRegList() ); + SelectLastSelectedRegulator(); + // Give an icon wxIcon icon; icon.CopyFromBitmap( KiBitmap( icon_pcbcalculator_xpm ) ); @@ -104,6 +115,11 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( wxWindow * parent ) : PCB_CALCULATOR_FRAME::~PCB_CALCULATOR_FRAME() { WriteConfig(); + + if( m_RegulatorListChanged ) + WriteDataFile(); + + for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) delete m_transline_list[ii]; @@ -124,8 +140,8 @@ void PCB_CALCULATOR_FRAME::ReadConfig() if( m_Config == NULL ) return; - long ltmp; - wxString msg; + long ltmp; + wxString msg; m_Config->Read( KEYWORD_FRAME_POSX, &m_FramePos.x, -1 ); m_Config->Read( KEYWORD_FRAME_POSY, &m_FramePos.y, -1 ); m_Config->Read( KEYWORD_FRAME_SIZEX, &m_FrameSize.x, -1 ); @@ -140,21 +156,40 @@ void PCB_CALCULATOR_FRAME::ReadConfig() m_AttenuatorsSelection->SetSelection( ltmp ); m_Config->Read( KEYWORD_BRDCLASS_SELECTION, <mp, 0 ); m_BoardClassesUnitsSelector->SetSelection( ltmp ); - m_Config->Read( KEYWORD_REGUL_R1, &msg, wxT("10") ); + + // Regul panel config: + m_Config->Read( KEYWORD_REGUL_R1, &msg, wxT( "10" ) ); m_RegulR1Value->SetValue( msg ); - m_Config->Read( KEYWORD_REGUL_R2, &msg, wxT("10") ); + m_Config->Read( KEYWORD_REGUL_R2, &msg, wxT( "10" ) ); m_RegulR2Value->SetValue( msg ); - m_Config->Read( KEYWORD_REGUL_VREF, &msg, wxT("3") ); + m_Config->Read( KEYWORD_REGUL_VREF, &msg, wxT( "3" ) ); m_RegulVrefValue->SetValue( msg ); - m_Config->Read( KEYWORD_REGUL_VOUT, &msg, wxT("12") ); + m_Config->Read( KEYWORD_REGUL_VOUT, &msg, wxT( "12" ) ); m_RegulVoutValue->SetValue( msg ); + m_Config->Read( KEYWORD_REGUL_FILENAME, &msg, wxT( "" ) ); + m_regulators_filePicker->SetPath( msg ); + m_Config->Read( KEYWORD_REGUL_SELECTED, &msg, wxT( "" ) ); + m_lastSelectedRegulatorName = msg; + m_Config->Read( KEYWORD_REGUL_TYPE, <mp, 0 ); + m_choiceRegType->SetSelection( ltmp ); + m_Config->Read( KEYWORD_REGUL_LAST_PARAM, <mp, 0 ); + wxRadioButton * regprms[3] = + { m_rbRegulR1, m_rbRegulR2, m_rbRegulVout + }; + if( (unsigned)ltmp >= 3 ) + ltmp = 0; + for( int ii = 0; ii < 3; ii++ ) + regprms[ii]->SetValue( ltmp == ii ); + + // Electrical panel config m_Config->Read( KEYWORD_ELECTRICAL_SPACING_SELECTION, <mp, 0 ); m_ElectricalSpacingUnitsSelector->SetSelection( ltmp ); - m_Config->Read( KEYWORD_ELECTRICAL_SPACING_VOLTAGE, &msg, wxT("500") ); + m_Config->Read( KEYWORD_ELECTRICAL_SPACING_VOLTAGE, &msg, wxT( "500" ) ); m_ElectricalSpacingVoltage->SetValue( msg ); for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) m_transline_list[ii]->ReadConfig( m_Config ); + for( unsigned ii = 0; ii < m_attenuator_list.size(); ii++ ) m_attenuator_list[ii]->ReadConfig( m_Config ); } @@ -175,15 +210,34 @@ void PCB_CALCULATOR_FRAME::WriteConfig() m_Config->Write( KEYWORD_FRAME_SIZEX, (long) m_FrameSize.x ); m_Config->Write( KEYWORD_FRAME_SIZEY, (long) m_FrameSize.y ); } + m_Config->Write( KEYWORD_TRANSLINE_SELECTION, (long) m_currTransLineType ); m_Config->Write( KEYWORD_PAGE_SELECTION, m_Notebook->GetSelection() ); m_Config->Write( KEYWORD_COLORCODE_SELECTION, m_rbToleranceSelection->GetSelection() ); - m_Config->Write( KEYWORD_ATTENUATORS_SELECTION, m_AttenuatorsSelection->GetSelection()); + m_Config->Write( KEYWORD_ATTENUATORS_SELECTION, m_AttenuatorsSelection->GetSelection() ); m_Config->Write( KEYWORD_BRDCLASS_SELECTION, m_BoardClassesUnitsSelector->GetSelection() ); + m_Config->Write( KEYWORD_REGUL_R1, m_RegulR1Value->GetValue() ); m_Config->Write( KEYWORD_REGUL_R2, m_RegulR2Value->GetValue() ); m_Config->Write( KEYWORD_REGUL_VREF, m_RegulVrefValue->GetValue() ); m_Config->Write( KEYWORD_REGUL_VOUT, m_RegulVoutValue->GetValue() ); + m_Config->Write( KEYWORD_REGUL_FILENAME, m_regulators_filePicker->GetPath() ); + m_Config->Write( KEYWORD_REGUL_SELECTED, m_lastSelectedRegulatorName ); + m_Config->Write( KEYWORD_REGUL_TYPE, + m_choiceRegType->GetSelection() ); + wxRadioButton * regprms[3] = + { m_rbRegulR1, m_rbRegulR2, m_rbRegulVout + }; + for( int ii = 0; ii < 3; ii++ ) + { + if( regprms[ii]->GetValue() ) + { + m_Config->Write( KEYWORD_REGUL_LAST_PARAM, ii ); + break; + } + } + + m_Config->Write( KEYWORD_ELECTRICAL_SPACING_SELECTION, m_ElectricalSpacingUnitsSelector->GetSelection() ); m_Config->Write( KEYWORD_ELECTRICAL_SPACING_VOLTAGE, @@ -193,12 +247,12 @@ void PCB_CALCULATOR_FRAME::WriteConfig() for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) m_transline_list[ii]->WriteConfig( m_Config ); + for( unsigned ii = 0; ii < m_attenuator_list.size(); ii++ ) m_attenuator_list[ii]->WriteConfig( m_Config ); } - /** * Function OnTranslineAnalyse * Run a new analyse for the current transline with current parameters @@ -213,6 +267,7 @@ void PCB_CALCULATOR_FRAME::OnTranslineAnalyse( wxCommandEvent& event ) } } + /** * Function OnTranslineSynthetize * Run a new synthezis for the current transline with current parameters @@ -230,14 +285,15 @@ void PCB_CALCULATOR_FRAME::OnTranslineSynthetize( wxCommandEvent& event ) void PCB_CALCULATOR_FRAME::OnPaintTranslinePanel( wxPaintEvent& event ) { - wxPaintDC dc( m_panelDisplayshape ); + wxPaintDC dc( m_panelDisplayshape ); + + TRANSLINE_IDENT* tr_ident = m_transline_list[m_currTransLineType]; - TRANSLINE_IDENT* tr_ident = m_transline_list[m_currTransLineType]; if( tr_ident ) { wxSize size = m_panelDisplayshape->GetSize(); - size.x -= tr_ident->m_Icon->GetWidth(); - size.y -= tr_ident->m_Icon->GetHeight(); + size.x -= tr_ident->m_Icon->GetWidth(); + size.y -= tr_ident->m_Icon->GetHeight(); dc.DrawBitmap( *tr_ident->m_Icon, size.x / 2, size.y / 2 ); } diff --git a/pcb_calculator/regulators_funct.cpp b/pcb_calculator/regulators_funct.cpp index ebf369f7fc..4366000ffe 100644 --- a/pcb_calculator/regulators_funct.cpp +++ b/pcb_calculator/regulators_funct.cpp @@ -28,14 +28,223 @@ #include #include +#include +#include + extern double ReturnDoubleFromString( const wxString& TextValue ); +class DIALOG_EDITOR_DATA: public DIALOG_EDITOR_DATA_BASE +{ +public: + DIALOG_EDITOR_DATA( PCB_CALCULATOR_FRAME * parent, const wxString & aRegName ) + : DIALOG_EDITOR_DATA_BASE( parent ) + { + m_textCtrlName->SetValue( aRegName ); + m_textCtrlName->Enable( aRegName.IsEmpty() ); + UpdateDialog(); + } + + ~DIALOG_EDITOR_DATA() {}; + + /** + * Function CopyRegulatorDataToDialog + * Transfert data from dialog to aItem + * @param aItem = a pointer to the REGULATOR_DATA + */ + void CopyRegulatorDataToDialog( REGULATOR_DATA * aItem ); + + /** + * Function BuildRegulatorFromData + * Creates a new REGULATOR_DATA from dialog + * @return a pointer to the new REGULATOR_DATA + */ + REGULATOR_DATA * BuildRegulatorFromData(); + + /** + * Enable/disable Iadj realted widgets, according to + * the regulator type + */ + void UpdateDialog() + { + bool enbl = m_choiceRegType->GetSelection() == 1; + m_RegulIadjValue->Enable( enbl ); + m_RegulIadjTitle->Enable( enbl ); + m_IadjUnitLabel->Enable( enbl ); + } + + /** + * called when the current regulator type is changed + */ + void OnRegTypeSelection( wxCommandEvent& event ) + { + UpdateDialog(); + } +}; + + +void DIALOG_EDITOR_DATA::CopyRegulatorDataToDialog( REGULATOR_DATA * aItem ) +{ + m_textCtrlName->SetValue( aItem->m_Name ); + wxString value; + value.Printf( wxT("%g"), aItem->m_Vref ); + m_textCtrlVref->SetValue( value ); + value.Printf( wxT("%g"), aItem->m_Iadj ); + m_RegulIadjValue->SetValue( value ); + m_choiceRegType->SetSelection( aItem->m_Type ); + UpdateDialog(); +} + +REGULATOR_DATA * DIALOG_EDITOR_DATA::BuildRegulatorFromData() +{ + double vref = ReturnDoubleFromString( m_textCtrlVref->GetValue() ); + double iadj = ReturnDoubleFromString( m_RegulIadjValue->GetValue() ); + int type = m_choiceRegType->GetSelection(); + if( type != 1 ) + iadj = 0.0; + REGULATOR_DATA * item = new REGULATOR_DATA( m_textCtrlName->GetValue(), + vref, type, iadj ); + return item; +} + void PCB_CALCULATOR_FRAME::OnRegulatorCalcButtonClick( wxCommandEvent& event ) { RegulatorsSolve(); } +void PCB_CALCULATOR_FRAME::RegulatorPageUpdate() +{ + switch( m_choiceRegType->GetSelection() ) + { + default: + case 0: + m_bitmapRegul4pins->Show( true ); + m_bitmapRegul3pins->Show( false ); + m_RegulIadjValue->Enable( false ); + m_RegulIadjTitle->Enable( false ); + m_IadjUnitLabel->Enable( false ); + m_RegulFormula->SetLabel( wxT("Vout = Vref * (R1 + R2) / R2") ); + break; + + case 1: + m_bitmapRegul4pins->Show( false ); + m_bitmapRegul3pins->Show( true ); + m_RegulIadjValue->Enable( true ); + m_RegulIadjTitle->Enable( true ); + m_IadjUnitLabel->Enable( true ); + m_RegulFormula->SetLabel( wxT("Vout = Vref * (R1 + R2) / R1 + Iadj * R2") ); + break; + } + // The new icon size must be taken in account + m_panelRegulators->GetSizer()->Layout(); + m_panelRegulators->Refresh(); +} + +void PCB_CALCULATOR_FRAME::OnRegulTypeSelection( wxCommandEvent& event ) +{ + RegulatorPageUpdate(); +} + +void PCB_CALCULATOR_FRAME::OnRegulatorSelection( wxCommandEvent& event ) +{ + wxString name = m_choiceRegulatorSelector->GetStringSelection(); + REGULATOR_DATA * item = m_RegulatorList.GetReg( name ); + if( item ) + { + m_lastSelectedRegulatorName = item->m_Name; + m_choiceRegType->SetSelection( item->m_Type ); + wxString value; + value.Printf( wxT("%g"), item->m_Vref ); + m_RegulVrefValue->SetValue( value ); + value.Printf( wxT("%g"), item->m_Iadj ); + m_RegulIadjValue->SetValue( value ); + + RegulatorPageUpdate(); + } +} + +void PCB_CALCULATOR_FRAME::OnDataFileSelection( wxFileDirPickerEvent& event ) +{ +} + +void PCB_CALCULATOR_FRAME::OnAddRegulator( wxCommandEvent& event ) +{ + DIALOG_EDITOR_DATA dlg( this, wxEmptyString ); + if( dlg.ShowModal() != wxID_OK ) + return; + + REGULATOR_DATA * new_item = dlg.BuildRegulatorFromData(); + + // Add new item, if not existing + if( m_RegulatorList.GetReg( new_item->m_Name ) == NULL ) + { + // Add item in list + m_RegulatorList.Add( new_item ); + m_RegulatorListChanged = true; + m_choiceRegulatorSelector->Clear(); + m_choiceRegulatorSelector->Append( m_RegulatorList.GetRegList() ); + SelectLastSelectedRegulator(); + } + else + { + wxMessageBox( _("This regulator is already in list. Aborted") ); + delete new_item; + } +} + +void PCB_CALCULATOR_FRAME::OnEditRegulator( wxCommandEvent& event ) +{ + wxString name = m_choiceRegulatorSelector->GetStringSelection(); + REGULATOR_DATA * item = m_RegulatorList.GetReg( name ); + DIALOG_EDITOR_DATA dlg( this, name ); + dlg.CopyRegulatorDataToDialog( item ); + if( dlg.ShowModal() != wxID_OK ) + return; + + REGULATOR_DATA * new_item = dlg.BuildRegulatorFromData(); + m_RegulatorList.Replace( new_item ); + + m_RegulatorListChanged = true; + + SelectLastSelectedRegulator(); +} + +void PCB_CALCULATOR_FRAME::OnRemoveRegulator( wxCommandEvent& event ) +{ + wxString name = wxGetSingleChoice( _("Remove Regulator"), wxEmptyString, + m_RegulatorList.GetRegList() ); + if( name.IsEmpty() ) + return; + + m_RegulatorList.Remove( name ); + m_RegulatorListChanged = true; + m_choiceRegulatorSelector->Clear(); + m_choiceRegulatorSelector->Append( m_RegulatorList.GetRegList() ); + if( m_lastSelectedRegulatorName == name ) + m_lastSelectedRegulatorName.Empty(); + + SelectLastSelectedRegulator(); +} + +void PCB_CALCULATOR_FRAME::SelectLastSelectedRegulator() +{ + // Find last selected in regulator list: + int idx = -1; + if( ! m_lastSelectedRegulatorName.IsEmpty() ) + { + for( unsigned ii = 0; ii < m_RegulatorList.GetCount(); ii++ ) + if( m_RegulatorList.m_List[ii]->m_Name == m_lastSelectedRegulatorName ) + { + idx = ii; + break; + } + } + + m_choiceRegulatorSelector->SetSelection( idx ); + wxCommandEvent event; + OnRegulatorSelection( event ); +} + // Calculate a value from the 3 other values // Vref is given by the regulator properties, so // we can calculate only R1, R2 or Vout @@ -60,16 +269,21 @@ void PCB_CALCULATOR_FRAME::RegulatorsSolve() m_RegulMessage->SetLabel( wxEmptyString); + // Convert r1 and r2 in ohms + int r1scale = 1000; + int r2scale = 1000; + // Read values from panel: txt = m_RegulR1Value->GetValue(); - r1 = ReturnDoubleFromString(txt); + r1 = ReturnDoubleFromString(txt) * r1scale; txt = m_RegulR2Value->GetValue(); - r2 = ReturnDoubleFromString(txt); + r2 = ReturnDoubleFromString(txt) * r2scale; txt = m_RegulVrefValue->GetValue(); vref = ReturnDoubleFromString(txt); txt = m_RegulVoutValue->GetValue(); vout = ReturnDoubleFromString(txt); + // Some tests: if( vout < vref && id != 2) { @@ -90,24 +304,51 @@ void PCB_CALCULATOR_FRAME::RegulatorsSolve() } // Calculate - switch( id ) - { - case 0: - r1 = ( vout / vref - 1 ) * r2; - break; + if( m_choiceRegType->GetSelection() == 1) + { // 3 terminal regulator + txt = m_RegulIadjValue->GetValue(); + double iadj = ReturnDoubleFromString(txt); + // iadj is given in micro amp, so convert it in amp. + iadj /= 1000000; - case 1: - r2 = r1 / ( vout / vref - 1); - break; + switch( id ) + { + case 0: + r1 = vref * r2 / ( vout - vref - (r2 * iadj) ); + break; - case 2: - vout = vref * (r1 + r2) / r2; - break; + case 1: + // to do + r2 = ( vout - vref ) / ( iadj + (vref/r1) ); + break; + + case 2: + vout = vref * (r1 + r2) / r1; + vout += r2 * iadj; + break; + } + } + else + { // Standard 4 terminal regulator + switch( id ) + { + case 0: + r1 = ( vout / vref - 1 ) * r2; + break; + + case 1: + r2 = r1 / ( vout / vref - 1); + break; + + case 2: + vout = vref * (r1 + r2) / r2; + break; + } } // write values to panel: - txt.Printf(wxT("%g"), r1); + txt.Printf(wxT("%g"), r1 / r1scale ); m_RegulR1Value->SetValue(txt); - txt.Printf(wxT("%g"), r2); + txt.Printf(wxT("%g"), r2 / r2scale); m_RegulR2Value->SetValue(txt); txt.Printf(wxT("%g"), vref); m_RegulVrefValue->SetValue(txt); diff --git a/pcbnew/netlist_reader_kicad.cpp b/pcbnew/netlist_reader_kicad.cpp index 632b682dee..ad1dd62f8e 100644 --- a/pcbnew/netlist_reader_kicad.cpp +++ b/pcbnew/netlist_reader_kicad.cpp @@ -118,7 +118,7 @@ bool NETLIST_READER::ReadKicadNetList( FILE* aFile ) { BOARD * brd = m_pcbframe ? m_pcbframe->GetBoard() : NULL; - // netlineReader dtor will close aFile + // netlineReader dtor will close aFile FILE_LINE_READER netlineReader( aFile, m_netlistFullName ); NETLIST_READER_KICAD_PARSER netlist_parser( &netlineReader, this );