topic "Ultimate++ vs Java/Swing"; [2 $$0,0#00000000000000000000000000000000:Default] [l288;i704;a17;O9;~~~.992;2 $$1,0#10431211400427159095818037425705:param] [a83;*R6 $$2,5#31310162474203024125188417583966:caption] [b83;*2 $$3,5#07864147445237544204411237157677:title] [b167;a42;C2 $$4,6#40027414424643823182269349404212:item] [b42;a42;2 $$5,5#45413000475342174754091244180557:text] [l288;a17;2 $$6,6#27521748481378242620020725143825:desc] [l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code] [b2503;2 $$8,0#65142375456100023862071332075487:separator] [*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base] [t4167;C2 $$10,0#37138531426314131251341829483380:class] [l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement] [i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam] [b167;C2 $$13,13#92430459443460461911108080531343:item1] [i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2] [*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate] [l321;*C$7;2 $$16,16#03451589433145915344929335295360:result] [l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line] [l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title] [{_}%EN-US [s0;= [7 Ultimate`+`+ vs Java/Swing]&] [s0; &] [s0; To compare Ultimate`+`+ with Java, we found simple [^http`:`/`/www`.ictp`.trieste`.it`/`~manuals`/programming`/Java`/tutorial`/uiswing`/overview`/anatomy`.html^ C onverter] example. Note that this example was provided for Java tutorial, so it is perhaps not the best thing to use it for development effectiveness comparison. However it still might serve well to get first hint about how well Ultimate`+`+ does when compared to Java/Swing.&] [s0; &] [ {{4926:5074f0;g0; [s0;= @@image:962&679 흭۸— ɠς…Dzެ۲؞箐Ê泬ڤآ פקȺ㭍խܧϲܙκ׿§ܒ ܑνٝ߱ڤɜ˗ǿׅŷ 쀞⇒˚ǧܑ⢡ܟʵβߏ磉 ۖۚˌ矬ߓ߼ן뚿ؐϢڮτ ³ޱퟨ׷۞߭ڳگǯҞѪ нÅ̵ܸ䧳ꯉؔшϴ§ۮ ﮶ҿ폦ۿ缨γӝ窯ܮߨ đ֯Ȯ˒ɮ繝ɷ ֧Ȧɿաҽکճݩٖ͹Ѳ ᯫݠ抒фٝǷ߉˹ŕߖЈɬ 蒾ګҾݖݥڥӔݗݶ ĭ띿綣ӷپˀٿޒ祎 ݎݍɪܛ΅߈عۉِحڷ߉Գեܮͷԯ Ҽ톧ȳڣަݮۋ ͶϺ卪ܳãΦ陋Ʀطӹ늄Ϸ̈ ۽ηϝɠϜݾᾙ߶່؎⁶ Р່⡍ȣЛ홝灋헵׾Ǹ ڮꆦŒӭś׋ߔ֫ш׾⻂Ϧɽ ػװ熦ϿڪǞϧѶĨ¼ ޜ֭Ʈݯؾѐɻ؍ ̶Ŗԫˣ῾뇿Ӥ偕ީ 氽ǔר۴ϰךڵݼ˔îϟ֟ ރ茇Οۍۻ۠匤涜ǶۙҒ Ղ՛Ȑͮދɶ،ɷ޿׌ܫ쪏ކ ɣηҳ𮬭߻޺۾ڗÝھ΀ҹ 竧ݗۅєԀǕҀ紣ݭڽͼ 讞洝ѫۻԲЃͿڎ⁶󀸀 ԝ챀Ʀເăĸۇ´ۚ ່؎ⶁ່؎⁶Р່ڎ⁶خߖ呯 Іȸ׿ۍʝ父՛خ ۅڵʘǹ֔۩ڇ̀¶່؎ Ӫص﹫ҵۇȘرہчʜ ƘŸƫŕǧϲᾧ⿲Þٮڧ׾ Ʊ֜ة唪ݥ︊е߷Źӣ҂ۛʣ Ϫ嗸㟒ʯݎ᲏ՃˈˡϚ砍Ēԯ ކǹퟞꧧӻƳ圣Dzܶ򶇮὎ ׮ޑыΊ阑ہھګ܈ ׾ĔăŊܯᓝς쀏𭚣 ໯洃ʍ۽ړ𽝐Բݬλױ ۵҃ǁÎ΀Ո؎⁶ 껈؎ᷯ˴ăŰă޴Ŵی ڕ ] :: [s0;= @@image:1937&867 ǓףЦưŸՀֶ鶡С颛ڠ ›Тڷ塏ҕ۾븺̜Ǹݝ̹糜Ͻܙ Йΰɳ뺑ٷפۄѬΑѓǒ̙ľᑥ 镰삥𻥑ݟÿȁއ套ܹž֦볊 نʕ͈ݪЮթ蹆ʫߛܮʅ阇 ӱ݀Ўۃ⺡ӡѲЌֵۑ탲ܜݰ ײߵnj͙ݙҾӶυϱۆݩݳ˸〲 ˛ۣ˳֦晆괴̼ٺ֪ٝϡ ̃щ݀ⳡퟵث췕Юި峵˸壆½ͅ ііǾ獔߱ӳظޞكےȯ訙ؖ ᭹ݹ훭갴ú՘⿇ʗܦ࣫ꍥ 񮅴ބՃ蠂߁ɼ𲂀ϿϷنǏ ثƛ萀޻իݐ׮ݖ膯ɥ ΛŔŷ✋̙ួ߮ ѝܢ٩Ӣ쪉ݶ߳ӇĄٻܰ 卑ؤץۘߎͼĵܷóׯ֕̂愰υ 䗮ػǁ㜷óѣ׭ݢͣȨɯ֧י ܑߜѥѬՑ߮ƛіԘ ͊۲˚ʬ͒늇ʧ̪晨תȤ 嚭lj۴攼泍ՒпϧâÜݐӲ 쑻ʔӿûɼ֬Ƒϕݜ̯׉淿ީ ꗀدۂӰ䂐オӰ΂ۼ⎠ФȯӰ֔ݐϽ굢ۂǸ劆߰ ȯߗ֥֋ߤ뵠эœٍɗǞ ҏꔋՑĽٍ‹ۂᑤǎԅґݥٖ͛ ۿ塿̯ē𮪻ئ֨dzȯ ޔݢڢ䗚˟瑅ɯ“կߎפ Ĕ̻Ͻ˹އɯ෸ˡŷˡ׿ ؾȠ±ў⢿–۶ŜʹʏΕ˹֤ ֩蔺͚٭楶ѣ̹˯ڢӒɯ 㾡Ԯʈƣ 屡꩛ɻ痮ٌކʕӶӧߤ ۣבǔ܉߰ï䗰ЦϞ ȯᅞՈБͯʄ⣏Ǟӆؽ߿ ǯоޘ޿۫‡裏ޑ Ϗ۬юߑ«Ѐ˜לܷѸհ߀췿ȯիև׵ ۗҷϿݥLJыͩ䗐ǎڒȩߔ ŷޑ߾ĄْҠϾׁӰȯ͛ ׵П̑ݻ븻λֵ月ꖑȇÆ ׮پуοհʴȜӧӢÐï朘ګ Ǣِ蘻񼲛ɭܨáԌϷ ؁؏。쳠ʍ̾֬Ȭ颣ߢ䱧̗ ݼӶмЗؾꏿ͗߆ʍ߰ΟٝŊˡú ˆғعӢЏ֣́βȥ҉é͓ߍص ەΛʩܪ˚ꮥΟǨǁȉꆑʈ Ǐߺꖆ֦Ԭ䦢۷بǁȉꆑ򰽶ۍߢ׼ 䗐򝫙Ͽ棖ת訩֧ǿܡې מݱȯɓߋڧÒؒ Ƥ֕᫢ɶ߮׍˒˂ ȯ市󪤭ʍշ̧΂˾ɫٲخ ܲ򮹑ؿ͘˖ߺåٚ ʴэ캰Σ晚ȯ񲬧ϲЎ ٬۲ݮǗϕڭ˰֭ϻ ¥ʯ×ஷוԩڥ׾ʵ旡ذɓʔ۶ ůӎŹӦʚᄍο쇂ʬ˶ғ݈ ȹаǺ墷鶞Ѿʖİ Ȭ…嗲ƴإ̼ɯ齧̘ړԭ•Բ ̙̇ٴՏꢿϲݑҪޭ熷 ͙鸕߬خ֧Ȗۆ۶蘲󯱕˗ʐݰ󆩗̋ Ӭןϖȁоם͚ҥ ꒉ򫴂Φ‹ŌՊۭҖǝ؉ ɗޥިĠɓ޽̯߹ܸؔ ɓǎ˓뜡߹ȹب߅ؾ絧̯ϓ̇ 毁ړϤɓ⿟ŋ݊򻯥Նמ̯ ҇ݺլٙߵߵΝ٠׿ޞѲՉ׍ ǯѾ為µʦ󏫦Dž㑝ͫÍ䴬 ϼɹ…ȓّ椿DZ籦Ν ښŇΜߥד֫җ垸؛н ȯ喾ܥŕ׈АԤ߰Çʫؖ۷߈̿ ˛ʪر⑿ڔɦ̵Ů򜳫ϫأʩʌޱ ҍȪ֫Ϭᩐ߅˙ߝ剥í嶳絻ʯ Ĵʴϰʚ폟۪穷ؗߵߨˌ ׮恷Ůآʉݤ絻ϯҚ ѻפė˯ҹϢȯЯ򻯙 򔠿ϞҹĿ멁֫Ϸ䗐 ǛϢ웤ʭ۶ԯܤΝ򺋀 ј󚟚ρœŪ׉Ϣ痀ŊϽ 督ǎ䢢녮̰֫吃ɩÊ޳І˂ҁ 믛΢Ǿ뮹联ܿڔdžЈ߾Ĉڀ ¨ԩǔׯ󚕗݀֏ËЌĤݣ 銛ɳ鐵ϭ߾ʠŽ󒫸¡ǎ֏ ʫ͙ߑ̳é뭧Ȧצ͚߁Ɩ붔ﵔ۔۴ Ȧۜ鮿ȟڈ蘵֙ݿ؁߿ќҖ޵ԗ젱˺ ǎǎͬ޷ׯ̯ؖ͌ҐрӾͭרͥ⭲ׯ ӹаַȥߗͼȯͯǦƉ蟳̅ȵ ȯ䤔ׂ߳̐ůݺߓη̟Ъ ϊׂȞϼ߾ΜƄ퓬Ċ񅢿 И޴ߒ󚓃͛ȑە뻮ߣ篋 טȇכ̦ԫ޳Μʆ ߀ȑ͛⻼аƛحۖ 嗭۷ƏķܘܵΝЈğ ۇׯ쀃ڥޫìш޳Ǜ ڠǎƧɻٳ睊붛׭҉۩ӆō̼ٲ ӭǿ䗐ϝ󀭱㊿ݮ߉ѭȯ 굺ʔӧ޿ʥג׼܉ȯ˗Θ̙ ߑׯܿ򫾐诗ˉ⃎Έۢٲחߢʛ Ӱ쎜ӧՊǽǙԿŦ ޼ؼǗ͉˯󶶮߾އБ̢餌ɭ ʊɟϾٳٯĉ֭ۼ㇡ ĉ˫é먯ܫӓ뒱܉ߣƌذ׬ۆף˻ 戝˯߲ĆΞՕՓȿıϯؚ ÷ρۮܸʡն刈ȁ 镒߆׃ט㖯ްǏ֗ާ߶ȯܠߟ߲׭ Ԫ䗐ݻԨ뺷 䗐޶׮㏇Ǩ׾ȯ ߬ԮׯȂڍ̵òܐֆ׾ȯ ۓϭȮ߸ϯѣӰՓվߵׁ ݇˽Ĉ۹娿ǔ颖㛸٢痰ɓӰ΄򫦃 Dž䗝Ȭ۶ߥ޶Ͷי퀫 ۻȯ՟˛ʊɟߑʉܑ枀到 ոуЇޛԨظȯㇾߨпߵ ޥƕɓ߀⢿ȯຊܡ͛ՋŷĶ ޼򡿀ȯIJΜԅ̜ŷ뮐͚浖ɵ ի։ư֯ް—֭㡰ǎϞ薔 ܭۺΜܳس捇명ίܔŷݎӵޛפ̙ޢۍ ȯ㎑쉬柕ą䗐ո׬Ŋ͞ ĽȗՔ±۳޾ԥ˖䀕⢿͈˛ կ墛Ҡ؂߾㍸ٲɧǠ‰ Ɩȱ冢ъԜҿѢŏ޼ 럯﯅ŏӑǞ䑛ٿϬӧ۷ѭݟ ؒ󬻱膂𿟯խܸ̰ВۇժLjǑ€ሡ ߾ሡذٜÙޖݖʱÿݜ݊ ߳؍߀ηϿҴĈϡʚ ˶릾܊ɹВٮấ׹ʮ۠ߎˏ êϫ˭Ȳ􁠒ڲ×ΝֽǜԖŒפص ټ䗀҄پބщԀʙǶힴ󚚪Ѯ ծ汷霞͛궧ٲ䗀旲ۼ܆ ʫ𧘍ɭ۩֥֖Ϝ߆ŭₐإШв˫㨙ͷФݣʗ߲۩ 妅ޙÿްÀЯĚχȎ쮁Ğ Ȕ÷⾁ͫ̃򘗢ڬ֫ŷփ̼ԫļ銻 偾Ű牛满ɯ蒑ø˦ҵ߀촿ܒ݁߀„ Τݥë󁀠ď ]}}&] [s0; &] [s0; &] [ {{5000:5000h1;@(204)R(178) [s0; [* Ultimate`+`+ version]] :: [s0; [* Java/Swing version]] ::^@2R0 [s0; [*C3 Converter.cpp]&] [s0; [C0 #include ]&] [s0;C0 &] [s0; [C0 #define LAYOUTFILE ]&] [s0; [C0 #include ]&] [s0;C0 &] [s0; [C0 struct ConverterPane : WithConverterPaneLayout `{]&] [s0; [C0 -|ConverterPane `*slave;]&] [s0; [C0 -|void AdjustSlave()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|slave`->slider <<`= slave`->value <<`=]&] [s0; [C0 -|-|-|IsNull(value) ? 0.0 : (double)`~unit `* (double)`~value / (double)`~slave`->unit;]&] [s0; [C0 -|`}]&] [s0; [C0 -|void ValueChanged()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|slider <<`= `~value;]&] [s0; [C0 -|-|AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 -|void SliderChanged()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|value <<`= `~slider;]&] [s0; [C0 -|-|AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 -|]&] [s0; [C0 -|typedef ConverterPane CLASSNAME;]&] [s0;C0 &] [s0; [C0 -|ConverterPane()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|CtrlLayout(`*this);]&] [s0; [C0 -|-|slider.Range(10000);]&] [s0; [C0 -|-|slider <<`= value <<`= 0;]&] [s0; [C0 -|-|value <<`= THISBACK(ValueChanged);]&] [s0; [C0 -|-|slider <<`= THISBACK(SliderChanged);]&] [s0; [C0 -|-|unit <<`= THISBACK(AdjustSlave);]&] [s0; [C0 -|`}]&] [s0; [C0 `};]&] [s0;C0 &] [s0; [C0 struct Converter : TopWindow]&] [s0; [C0 `{]&] [s0; [C0 -|ConverterPane metric, us;]&] [s0;C0 &] [s0; [C0 -|typedef Converter CLASSNAME;]&] [s0;C0 &] [s0; [C0 -|Converter()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|Title(`"Converter`");]&] [s0; [C0 -|-|Size sz `= metric.GetLayoutSize();]&] [s0; [C0 -|-|SetRect(0, 0, metric.GetSize().cx, metric.GetSize().cy `* 2);]&] [s0; [C0 -|-|Add(metric.HSizePos().TopPos(0, sz.cy));]&] [s0; [C0 -|-|Add(us.HSizePos().BottomPos(0, sz.cy));]&] [s0;C0 &] [s0; [C0 -|-|metric.title `= `"Metric units`";]&] [s0; [C0 -|-|metric.unit.Add(0.01, `"Centimeters`");]&] [s0; [C0 -|-|metric.unit.Add(1.0, `"Meters`");]&] [s0; [C0 -|-|metric.unit.Add(1000.0, `"Kilometers`");]&] [s0; [C0 -|-|metric.unit <<`= 1.0;]&] [s0;C0 &] [s0; [C0 -|-|us.title `= `"U.S. units`";]&] [s0; [C0 -|-|us.unit.Add(0.0254, `"Inches`");]&] [s0; [C0 -|-|us.unit.Add(0.305, `"Feet`");]&] [s0; [C0 -|-|us.unit.Add(0.914, `"Yards`");]&] [s0; [C0 -|-|us.unit.Add(1613.0, `"Miles`");]&] [s0; [C0 -|-|us.unit <<`= 0.305;]&] [s0; [C0 -|-|]&] [s0; [C0 -|-|us.slave `= `&metric;]&] [s0; [C0 -|-|metric.slave `= `&us;]&] [s0; [C0 -|-|]&] [s0; [C0 -|-|metric.AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 `};]&] [s0;C0 &] [s0; [C0 GUI`_APP`_MAIN]&] [s0; [C0 `{]&] [s0; [C0 -|Converter().Run();]&] [s0; [C0 `}]&] [s0;C0 &] [s0; [*C3 converter.lay][C0 ][C1 (designed using visual tool)]&] [s0; [C0 #ifdef LAYOUTFILE]&] [s0;C0 &] [s0; [C0 LAYOUT(ConverterPaneLayout, 244, 76)]&] [s0; [C0 -|ITEM(LabelBox, title, LeftPosZ(8, 228).TopPosZ(4, 64))]&] [s0; [C0 -|ITEM(EditDoubleSpin, value, LeftPosZ(16, 144).TopPosZ(20, 19))]&] [s0; [C0 -|ITEM(SliderCtrl, slider, LeftPosZ(16, 144).TopPosZ(40, 20))]&] [s0; [C0 -|ITEM(DropList, unit, LeftPosZ(164, 64).TopPosZ(20, 19))]&] [s0; [C0 END`_LAYOUT]&] [s0;C0 &] [s0; [C0 #endif]&] [s0;C &] [s0;C &] [s0; ] :: [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [*C3 Converter.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.event.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class Converter `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConversionPanel metricPanel, usaPanel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] metricDistances `= new Unit`[3`];]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] usaDistances `= new Unit`[4`];]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel dataModel `= new ConverterRangeModel();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JPanel mainPane;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Converter() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[0`] `= new Unit(`"Centimeters`", 0.01);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[1`] `= new Unit(`"Meters`", 1.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[2`] `= new Unit(`"Kilometers`", 1000.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricPanel `= new ConversionPanel(this, `"Metric System`",]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[0`] `= new Unit(`"Inches`", 0.0254);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[1`] `= new Unit(`"Feet`", 0.305);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[2`] `= new Unit(`"Yards`", 0.914);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[3`] `= new Unit(`"Miles`", 1613.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaPanel `= new ConversionPanel(this, `"U.S. System`",]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 new FollowerRangeModel(dataModel));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane `= new JPanel();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.setLayout(new GridLayout(2,1,5,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.add(metricPanel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.add(usaPanel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 resetMaxValues(true);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void resetMaxValues(boolean resetCurrentValues) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double metricMultiplier `= metricPanel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double usaMultiplier `= usaPanel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int maximum `= ConversionPanel.MAX;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (metricMultiplier > usaMultiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= (int)(ConversionPanel.MAX `*]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (usaMultiplier/metricMultiplier));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setMaximum(maximum);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (resetCurrentValues) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setDoubleValue(maximum);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public static void main(String`[`] args) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Converter converter `= new Converter();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JFrame f `= new JFrame(`"Converter`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.addWindowListener(new WindowAdapter() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void windowClosing(WindowEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.exit(0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.setContentPane(converter.mainPane);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;C0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.pack();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.setVisible(true);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0; &] [s0;%- [*C3 ConversionPanel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.event.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.NumberForma t;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class ConversionPanel extends JPanel `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 DecimalField textField;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JComboBox unitChooser;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JSlider slider;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel sliderModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Converter controller;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] units;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String title;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 final static int MAX `= 10000;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConversionPanel(Converte r myController, String myTitle, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] myUnits,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel myModel) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setBorder(BorderFactory.createCompoundBorder(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BorderFactory.createTitledBorder(myTitle),]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BorderFactory.createEmptyBorder(5,5,5,5)));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 controller `= myController;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 units `= myUnits;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 title `= myTitle;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel `= myModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 NumberFormat numberFormat `= NumberFormat.getNumberInstance();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 numberFormat.setMaximumFractionDigits(2);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField `= new DecimalField(0, 10, numberFormat); ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.setValue(sliderModel.getDoubleValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.addActionListener(new ActionListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void actionPerformed(ActionEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setDoubleValue(textField.getValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser `= new JComboBox(); ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 for (int i `= 0; i < units.length; i`+`+) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.addItem(units`[i`].description);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.setSelectedIndex(0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setMultiplier(units`[0`].multiplier);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.addActionListener(new ActionListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void actionPerformed(ActionEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int i `= unitChooser.getSelectedIndex();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setMultiplier(units`[i`].multiplier);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 controller.resetMaxValues(false);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 slider `= new JSlider(sliderModel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.addChangeListener(new ChangeListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void stateChanged(ChangeEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.setValue(sliderModel.getDoubleValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JPanel unitGroup `= new JPanel() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getMinimumSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return getPreferredSize();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getPreferredSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return new Dimension(150, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.getPreferredSize().height);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getMaximumSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return getPreferredSize();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `};]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setBorder(BorderFactory.createEmptyBorder(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 0,0,0,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setLayout(new BoxLayout(unitGroup, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BoxLayout.Y`_AXIS));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.add(textField);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.add(slider);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setLayout(new BoxLayout(this, BoxLayout.X`_AXIS));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 add(unitGroup);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 add(unitChooser);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setAlignmentY(TOP`_ALIGNMENT);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.setAlignmentY(TOP`_ALIGNMENT);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getMultiplier() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return sliderModel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return sliderModel.getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0; &] [s0;%- [*C3 ConverterRangeModel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class ConverterRangeModel implements BoundedRangeModel `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected ChangeEvent changeEvent `= null;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected EventListenerList listenerList `= new EventListenerList();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int maximum `= 10000;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int minimum `= 0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int extent `= 0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected double value `= 0.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected double multiplier `= 1.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected boolean isAdjusting `= false;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;C0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public ConverterRangeModel() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getMultiplier() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMultiplier(double multiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.multiplier `= multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMaximum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return maximum;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMaximum(int newMaximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(value, extent, minimum, newMaximum, isAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMinimum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)minimum;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMinimum(int newMinimum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"In ConverterRangeModel setMinimum`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(int newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDoubleValue((double)newValue);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getDoubleValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return value;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setDoubleValue(double newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(newValue, extent, minimum, maximum, isAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getExtent() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)extent;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setExtent(int newExtent) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public boolean getValueIsAdjusting() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return isAdjusting;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValueIsAdjusting(boolean b) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(value, extent, minimum, maximum, b);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(int newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean newAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"In ConverterRangeModel setRangeProperties`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties((double)newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(double newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int unusedExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int unusedMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean newAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newMax <`= minimum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMax `= minimum `+ 1;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (DEBUG) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"maximum raised by 1 to `" `+ newMax);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (Math.round(newValue) > newMax) `{ //allow some rounding error]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newValue `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean changeOccurred `= false;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newValue !`= value) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 value `= newValue;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newMax !`= maximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newAdjusting !`= isAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 isAdjusting `= newAdjusting;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (changeOccurred) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 /`* ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* The rest of this is event handling code copied from ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* DefaultBoundedRangeModel. ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `*/]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void addChangeListener(ChangeListener l) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 listenerList.add(ChangeListener.class, l);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void removeChangeListener(ChangeListener l) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 listenerList.remove(ChangeListener.class, l);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected void fireStateChanged() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Object`[`] listeners `= listenerList.getListenerList();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 for (int i `= listeners.length `- 2; i >`= 0; i `-`=2 ) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (listeners`[i`] `=`= ChangeListener.class) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (changeEvent `=`= null) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeEvent `= new ChangeEvent(this);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ((ChangeListener)listeners`[i`+1`]).stateChanged(changeEvent);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;*C3 &] [s0;%- [*C3 DecimalField.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.text.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.Toolkit;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class DecimalField extends JTextField `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 private NumberFormat format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public DecimalField(double value, int columns, NumberFormat f) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super(columns);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDocument(new FormattedDocument(f));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format `= f;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setValue(value);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double retVal `= 0.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 retVal `= format.parse(getText()).doubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"getValue: could not parse: `" `+ getText());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return retVal;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(double value) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setText(format.format(value));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0;%- [*C3 FollowerRangeModel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class FollowerRangeModel extends ConverterRangeModel]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 implements ChangeListener `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel dataModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public FollowerRangeModel(ConverterRangeModel dataModel) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.dataModel `= dataModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.addChangeListener(this);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void stateChanged(ChangeEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMaximum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int modelMax `= dataModel.getMaximum();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplyBy `= dataModel.getMultiplier()/multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)(modelMax `* multiplyBy);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMaximum(int newMaximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setMaximum((int)(newMaximum `* ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (multiplier/dataModel.getMultiplier())));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(int newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDoubleValue((double)newValue);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getDoubleValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return dataModel.getDoubleValue()]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* dataModel.getMultiplier()]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 / multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setDoubleValue(double newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setDoubleValue(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newValue `* multiplier]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 / dataModel.getMultiplier());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getExtent() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return super.getExtent();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setExtent(int newExtent) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.setExtent(newExtent);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(int value,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int extent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int min,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int max,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean adjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplyBy `= multiplier/dataModel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setRangeProperties(value`*multiplyBy,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 extent, min, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (int)(max`*multiplyBy),]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 adjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;*C3 &] [s0;%- [*C3 FormattedDocument.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.text.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.Toolkit;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.Locale;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class FormattedDocument extends PlainDocument `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 private Format format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public FormattedDocument(Format f) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format `= f;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Format getFormat() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void insertString(int offs, String str, AttributeSet a) ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 throws BadLocationException `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String currentText `= getText(0, getLength());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String beforeOffset `= currentText.substring(0, offs);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String afterOffset `= currentText.substring(offs, currentText.length());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String proposedResult `= beforeOffset `+ str `+ afterOffset;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format.parseObject(proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.insertString(offs, str, a);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"insertString: could not parse: `"]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `+ proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void remove(int offs, int len) throws BadLocationException `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String currentText `= getText(0, getLength());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String beforeOffset `= currentText.substring(0, offs);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String afterOffset `= currentText.substring(len `+ offs,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 currentText.length());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String proposedResult `= beforeOffset `+ afterOffset;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (proposedResult.length() !`= 0)]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format.parseObject(proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.remove(offs, len);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"remove: could not parse: `" `+ proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0;%- [*C3 Unit.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class Unit `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String description;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit(String description, double multiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.description `= description;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.multiplier `= multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public String toString() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String s `= `"Meters/`" `+ description `+ `" `= `" `+ multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return s;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C ]}}&] [s0; ]