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 0000000000..4eb59b2973
Binary files /dev/null and b/pcb_calculator/bitmaps/sources/regul_3pins.png differ
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 @@
+
+
+
+
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 @@
+
+
+
+
+
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 );