From 2eb30cce98e6a22417a04b3cd6be62b0cb8a69a3 Mon Sep 17 00:00:00 2001 From: Meruemon Date: Sat, 9 Apr 2022 15:46:55 +0200 Subject: [PATCH] Well.. did some things ^^3 --- .vscode/settings.json | 2 +- bin/Control/MyControlModel.class | Bin 0 -> 8046 bytes bin/Control/MyControlModelPIC.class | Bin 2426 -> 0 bytes bin/Control/MyControlModelRuntime.class | Bin 2876 -> 0 bytes bin/Control/MyControlView.class | Bin 6150 -> 6802 bytes bin/Model/Microcontroller/Bitmask.class | Bin 4125 -> 4389 bytes bin/Model/Microcontroller/EEPROM.class | Bin 949 -> 1280 bytes bin/Model/Microcontroller/PIC.class | Bin 12720 -> 12720 bytes bin/Model/Microcontroller/RAM.class | Bin 20025 -> 20034 bytes bin/Model/Microcontroller/RUNTIMER.class | Bin 0 -> 293 bytes bin/Model/MyModel.class | Bin 3912 -> 4123 bytes bin/Model/MyModelData.class | Bin 0 -> 1459 bytes bin/Model/ProgramStepInformation.class | Bin 0 -> 348 bytes bin/Model/Runtime/Main.class | Bin 919 -> 0 bytes .../Runtime/ProgramStepInformation.class | Bin 364 -> 0 bytes bin/Model/Runtime/TODO.class | Bin 265 -> 0 bytes bin/Model/Runtime/Testfile.class | Bin 386 -> 0 bytes bin/Runtime/Main.class | Bin 0 -> 1935 bytes bin/Runtime/TODO.class | Bin 0 -> 253 bytes bin/View/GUIMainFrame.class | Bin 4284 -> 4284 bytes bin/View/GUIMenuBar.class | Bin 13522 -> 9613 bytes bin/View/GUIProgramMemory.class | Bin 0 -> 283 bytes bin/View/GUITestFileTable.class | Bin 6427 -> 6505 bytes bin/View/GUITime.class | Bin 3785 -> 4061 bytes bin/View/MyView.class | Bin 2956 -> 3800 bytes bin/View/MyViewData.class | Bin 0 -> 540 bytes ...udium Skript Verbesserungsvorschläge.docx# | 1 + ...tudium Skript Verbesserungsvorschläge.docx | Bin 34094 -> 19485 bytes src/Control/MyControlModel.java | 296 ++++++++++++++++ src/Control/MyControlModelPIC.java | 98 ------ src/Control/MyControlModelRuntime.java | 85 ----- src/Control/MyControlView.java | 92 +++-- src/Model/Microcontroller/Bitmask.java | 2 +- src/Model/Microcontroller/EEPROM.java | 27 ++ src/Model/Microcontroller/PIC.java | 3 - src/Model/Microcontroller/RAM.java | 2 +- src/Model/Microcontroller/RUNTIMER.java | 5 + src/Model/MyModel.java | 272 ++++++++------- src/Model/MyModelData.java | 52 +++ .../{Runtime => }/ProgramStepInformation.java | 5 +- src/Model/Runtime/Main.java | 17 - src/Model/Runtime/Testfile.java | 8 - src/Runtime/Main.java | 39 +++ src/{Model => }/Runtime/TODO.java | 2 +- src/View/GUIMainFrame.java | 1 + src/View/GUIMenuBar.java | 324 ++++-------------- src/View/GUIProgramMemory.java | 5 + src/View/GUITestFileTable.java | 18 +- src/View/GUITime.java | 8 + src/View/MyView.java | 40 ++- src/View/MyViewData.java | 16 + 51 files changed, 778 insertions(+), 642 deletions(-) create mode 100644 bin/Control/MyControlModel.class delete mode 100644 bin/Control/MyControlModelPIC.class delete mode 100644 bin/Control/MyControlModelRuntime.class create mode 100644 bin/Model/Microcontroller/RUNTIMER.class create mode 100644 bin/Model/MyModelData.class create mode 100644 bin/Model/ProgramStepInformation.class delete mode 100644 bin/Model/Runtime/Main.class delete mode 100644 bin/Model/Runtime/ProgramStepInformation.class delete mode 100644 bin/Model/Runtime/TODO.class delete mode 100644 bin/Model/Runtime/Testfile.class create mode 100644 bin/Runtime/Main.class create mode 100644 bin/Runtime/TODO.class create mode 100644 bin/View/GUIProgramMemory.class create mode 100644 bin/View/MyViewData.class create mode 100644 documentation/WORD/.~lock.Rechnerarchitektur Selbststudium Skript Verbesserungsvorschläge.docx# create mode 100644 src/Control/MyControlModel.java delete mode 100644 src/Control/MyControlModelPIC.java delete mode 100644 src/Control/MyControlModelRuntime.java create mode 100644 src/Model/Microcontroller/RUNTIMER.java create mode 100644 src/Model/MyModelData.java rename src/Model/{Runtime => }/ProgramStepInformation.java (57%) delete mode 100755 src/Model/Runtime/Main.java delete mode 100644 src/Model/Runtime/Testfile.java create mode 100755 src/Runtime/Main.java rename src/{Model => }/Runtime/TODO.java (96%) create mode 100644 src/View/GUIProgramMemory.java create mode 100644 src/View/MyViewData.java diff --git a/.vscode/settings.json b/.vscode/settings.json index a386092..87c409a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,5 @@ "java.project.referencedLibraries": [ "lib/**/*.jar" ], - "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx4G -Xms100m" + "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx8G -Xms100m" } diff --git a/bin/Control/MyControlModel.class b/bin/Control/MyControlModel.class new file mode 100644 index 0000000000000000000000000000000000000000..c540a8a907ce15525ffef59783e418b16809cbe3 GIT binary patch literal 8046 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 literal 0 HcmV?d00001 diff --git a/bin/Control/MyControlModelPIC.class b/bin/Control/MyControlModelPIC.class deleted file mode 100644 index 69c01fa8636840c89353e0458a9507f2dac1748e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2426 zcma)+TT@dp5XU$40)=vwa#0ab(Ux05Mbsh)wP43qYFn$o_>e-ThB-ZlIXy-3Tlv5^ z&f;h|~HX8*t4O*Z-S_t)>UGk6KF+M$iWXwotr+cM(W6E(|P2h7N& zlkMOq(053WY22V@CB9ugWcv<*pd~#B^k(D)mGVD9AYhd^`%0iYBmQwg{GmO#!cFe1 z5*UwO(p+$il?eEg7`_vH&>e;l^bqhxW2F#aCSeFbP|OCx&<-6UJ~!FBdbP~#A}t#X zS2ETXx;#(R0&KF)Ia4XZYQjvL8RE^<}WdZ#)=6uYv3a>fLR^|GmX^~)%m#9(4 zU?h!6pkvcCopuegHDbbT@>>Yc!nV`T%*UVz^iqGI+iWYm#LzLMX{bM1MC}j&R3LsXThr5 z`%LT(rgr6q&WjC#NxTw10BFM>-Vhu?+z%WFaU}$uICkOJ4tfZ`-sztZo}M|y$?Pfg z|3Fh4+`w@F{5baD*o(40ob@9DV8WF_1cvYn0WgeVh@6dJpf;S3!c7%s3GE^k@*nIv zMT|9^3#e~}^B`~H(jA{^f^oTJHVqA}y)F3AGh$#(XQjdsf5O?*6ISt~T99p9pjvAU+e&osmDWl~gxjZhw^g4Kcqm&71rUXp?9*vIZ0*{x89gj{ZP=_H zwsmdT9L%ddYk3{tO4!xw7>5Ov5?IuqT&@M;k-E{3;R$ZKo555025mJz4nFznxR1k! z7N})-hPgaPSs4GtNiM?+90?@weR3bR8EN-uiyaAV2;H_Iu%Z`!_7uL<3#q4YRaU+B E4}B(GQ~&?~ diff --git a/bin/Control/MyControlModelRuntime.class b/bin/Control/MyControlModelRuntime.class deleted file mode 100644 index 7a686dc565e698db78a6128d4d177cce89ab055e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2876 zcma)7>sA|86#h;K41_5Z+Cr%)ZK)IjCDyj64Ml;{mYPsnZrW;f2vZnHW^gj$;{8&s z_XqF+>~CE*F8$&1mp^<3AHn4-h~J(`LV(ca%F4`~efHjG?{9y5pFjWo^|!4pT*9{+ zLJCigI=1IJ=~!~J@Rf8H%=E3C?O7R9Ls;S9vax2w(uTblyD`6PraTQbH1ws$x)(Fo zOxueMr##EC6IRwUZPQh#b&{LDD}}~{|G^{tcU(btMqJZaS#>Pi%PJg6_|9^km5vR& zuCXa@s8%;+E!u{cb4`W*N;-qSa3hvow;0{^(IqprGU9B+hiKgB6cQTAd7fkQn7;qv zB2e}n)C^j-9IYOh;bvo>_(PC_#&$3Wszw;;=$hch77c6k2p>sEyz# zj%jF9s4uhB@dVn5#iHq5of%J#CQUo1(A?b;U;-e zfkHZ_FwIje&vXsXVXL?7;M#aW9 za~0D)4IaT=ys6<0g=70?qQj6Q>PW&VC+DWvpo2*1SOB@*RKRe14heqaJ+l(^qK+k4 z3fhv9o$v!>Ki?KuR&=D1VSm#pgQGzJWqI6naPXD}mb+|nPHmC_867T2*eWL{)`6+z z#3o(N!6}a;F%z!^hd@}mDS~xuYS<{2VW*;wxA6``Tov22Ey0w9LT8+a{%lgrw*7Gh zCry~E8s~H>8_Oi1Z?p${w$p(r&q%E#ja9!7Be;Y6IzGi`gmq6hE1cYiZpFKTQEK?S zkY(w(U=T;}0QZ@t6D*6M?b2dMk)Xsfy-13Rms!71g%gwb^Iy#;WH|E)8A_DZ^D6|M zPtM2Ex`8@uBOK(jiF<3*5!+MIpV1uceS{;?zC2pmtwjhjFo^}+6(S{C6J9!J7=g#rKCoW)sD|*Ls{<-q?JYL|LAzY+Y5W@i9idwbN zpKv6P`1Uyw>VX#q?+f3r9_SVPhVasUK8APuI7uI!6@6UZ&&SwqA6@iux}uM3B_F+v zS8`F?#x=g6x6Du#5>Ob&b?!FN-~#`W>>k6IZ`cxSmJn5V83~#yBry@VP~Akmnl6^B zE)mK8JZ@YJKg5Z)@GqEA_#Jm9dh>Yw%=f4lpxg79zaLVvdr#rJt-oZG8=X~oEK}!4 z*v(!ZYa*T#d6@FK(yCfkl4KQx5&b^j&N0gKWiD~|}+h?W#OgoDzASmip<4b(S hFM;DcYPQhqrxhgGuq92#ECrRO${XDLnzkW)^B)=diWvX^ diff --git a/bin/Control/MyControlView.class b/bin/Control/MyControlView.class index 79e4aaf3c620d7a23f925fffb6f25b2943e4f4eb..a2178ab0652ebd96da12e78e01089c36f9318319 100644 GIT binary patch literal 6802 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 t7*#Dwh8@f+_$2 literal 6150 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 WoCK}Y7P^oUx!JnE>i`=mp#B54;dcoD diff --git a/bin/Model/Microcontroller/EEPROM.class b/bin/Model/Microcontroller/EEPROM.class index 9135188564d4830ed5b1e93e9c422a35ded31dcb..f50d03e6a129d96272d29a79d73fa45c2088c7cf 100644 GIT binary patch literal 1280 zcmaJij+l`q?lT8R9qFi<3WE8rVl#Y1eKk?FA zFEo*u7~>D{HyQCcr^jvV!Yn(d=k$F(-skPFKi_{|Tu_Z3Wl3XHY=sBhueQ8S6n4TO zjzZt(QMJ+7+}dbmNoREB$USqbz8iF_8|@?Bi5X=$KZ(K~BW>SdWG1I354!OoBZjLP z*V~N3ZshiwUcgU*c;*FOTxXOjm3JBG&!K8iie^kQXljxmV^WqT#M7KfY05B~71)>k zUYkcdZrkU0(+oSVzw1VxIIBxNKJ=h)qxrv1)4$Mnxi1ow$2vzk)*RMp#GJ=@9zOzsgwjVtVNO&PBQE(K~l57p%5#3Zobw!l1SI=p2*pDHxYY6DU z2v=snm7!&6l_Ac5rhH&Tum!DVeW09$ls=LHhdHZKD+-S(*Ag&+fpkT?C3BmYOq!K)9B$}R%N_R delta 584 zcmYk2J5K^Z6ot?13mJJW;EFB?;tMuGD`R{tjZs5oM`J57M8t+3{{o@3q_r`Tm=NO+ z@HZLp?688(+?l)geCOH>PD+7vL(A8%U{I^r=z zA)^pT#t^|$aI*)aW?J60dKaD6L#x~4c%@No4DZFHuR((e3t;6qt4ReBJeT=uurF9M z-aBHRK1RZ`4SdKkQm;ys=9z}UGs!bfsm*s98FpebDY97MOTfWui0u%ov)6Yt-+hMd z5;}tP-jH(l{rn3*>4f~DU5*zBFA`N&=#r8qQjK|hr}E);xR=hjN>bi zr#6$D$IOK>!CF)?HO`i>$={g=c7lLqYz3Ai*Gbk`EzjlpPZw*Ks(nfOD`n=)#^z=g Nw$)Aqb|}}d`wQ=gGA#fA diff --git a/bin/Model/Microcontroller/PIC.class b/bin/Model/Microcontroller/PIC.class index 5d22d503109d4712685790157a6e78093a99a02b..eaf5508aeef208bed1d31131ab46c4101622ea13 100644 GIT binary patch delta 426 zcmWNL-Aj`J9EG3gcS0`)PHUKkH7hda+!jRQsQMk|tpqL66>g$aiA zhLKd1pfH6RSl9^`&{a^qH|OS@=bTgOE_Iipf%FqR_7tx@qt;%~ zU@r;TD|XrfyX`f5?F}(|%K>{w(%zG{MUL19a`utDeWKr%IAdQZ*jFyvH^yw4YxaYp z{hS*QbgdZrh3q#z`$L`mWs@MJl|;3QHkA=qIS1vTLtZkfq(@ccw3zqedrOqR%-Qx)MB#G~hY~JQ`$; zhN#wgHs}JIHB6H(u}dQ~Ym}reJK^y6=yjL4;jZ6eoo?gT9ky!H?VDn|if(#_J({IO X_eg1uPTi+h4>+!e4C;}Sh-Ci*6;59c delta 426 zcmWNL%}bO49E2a~H<6g2n5(3jf`+E_W{E7Mk)KhEii(L4rnsPZ$d3d=$YApg zg(xD*C@5JBG%N%O#OffJfhmY!f&Br2r|P}TW#*ZgXj`-`8psbV5^qZ++9%R%nOysf z&%SWhzH-i1DYG?#_KhpHPK|vhWE(Ww4?1jm$NrL`7_xN$pAHgGEai&hvJO+F1g_}_jY{T*Jaj09Zl%$ybOv;cVP!C; zEF#M0p>lYn6FkvLX5?jFK9=NXMW@+RF%3X1hg{vFktT5Z3jY;dAVFn#RL*e)$<-wa zRKY1#az<4IRp)-FC#0*i=sIDAoR{8(#7<&$izIb%R6Q;cc6xjhg}0FgU1ykh-62^c zq-vB*jgg~!cr{Lm?o+A=HG1Iq{kwt3F7eb|e@42Vlcg8rY1-|3MX}zv>9?HM3>P&^ Vt>$RZJnec*Kk4|+_%YV@=Uorpy diff --git a/bin/Model/Microcontroller/RAM.class b/bin/Model/Microcontroller/RAM.class index a7da8904e73cc82040574147bc3f885a25fdfc79..b484a8d78316a02c936beee7b2466d852d1cf470 100644 GIT binary patch literal 20034 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 literal 20025 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 PQ=f3{G9#QbM(F(jRi!|D literal 0 HcmV?d00001 diff --git a/bin/Model/MyModel.class b/bin/Model/MyModel.class index 29e67393b417dd06459bd752b8f7dd23537af48b..eb89de8ff8ade25c00c0272caecd761811fec613 100644 GIT binary patch literal 4123 zcmcIn?Q>LD8ULMR$!?Y#Lc&YROUY7N*ld76&{9dDBq5ZA1VT0q0=D#K_mEuJy?42} z3nbdoSCJ|$ebEXkRYn_a=?j%CwJ7#W{ZL0fIO-qZj5CgYbH*8GI@9<&=iVfwO=ipo z@66froO_@1oagyHZ)ZRG?894QW7vw1!YC1_=yWnN+t4|r=P*J7^N*P)&4#RL_c!zm zxYEoBgq*Hqo4~S;fZIyDPTH|O*U4t3+rW=a0)`Vv*PFUW$V zdgUpr-!{F1OI2ECv9;Of)u1W0`=#5oO__T_+1=x4+-56sifc4}O61%?WUnPp2_$Ew zgYAtw|Xa zYGb}dQHojvOA!+&jo0;tagV@~8J!cwO4OD^;64L$P^PFg2FejtRGopjFcej9pu(rt z8JLGk^{&A{H5Mppqk+48YLkJ*Sim%6=*zu@T%UA%%)TrmzPiIno7rB|wbVLz8S(}! zCQ{`%Hoi$JS58c(S(y&X6k|ve-2#iJ${Na#%PVyYb`;yNJ&Xqh690R88fZZ)5zMpb z2rP`(`JUA|x3BM*OnXgXur^eEA#b9zf2VUqjv*Vy@fqWoOa^iaqH0P!66lb23aZGfgm4VxaYA6uU{=aJ{T$z| zd@+bZ7({5rRM=g&koRP!{d8L9Jq#!tB;7PSH;z|Y$n_L7>)BjyrX%5O*)-f}&qgGa~6cBWG z?2d3$f$@0_nK2bwu}(9uQ%fCj*1)%Lj=4lk+GXB#2y|>lpxfKKy7wupzm4-@d`DpU z^bYa)47{M=uB7M=Y4>{r{_8L<(3#V3Y_+_cIe0vZ7g4KDdBwo1_%8deQZFlWY@Nz6 z$-1OsdCkE0aZ#YQ&+w!dJy!>PQK>Ka4Md&{;T*$(xT zZQr4160vb&{y5>!jGl5!JCjPO{J3f$j7Su1c*nrIc+bxdeL0#rKa`DX%lig?iR%LM zh~|{rODJA0=OZ-h}g_lxLIaRFS0hL%nHCM3lt>Te!EXO(? z*T^?t*8KWN+>gy%@o+q#RaMkiNR{Y!TS%3niF8aurMMQ+2%l@o1Xm5e3N(|8IYoS$ z_=OV0?h(<8B#`us> zx~}H9pJOM-O^#a}e|jIO>VribPK1cn2>z_r=H&Y05gZ#o2Meb=C;dC@B1f9z-XdfX z)}~9?$W`JpYSdI!`uBn7K7c)fNJo7UZlZ`&e80ipFnoaT6LSKcL$8m$I)bhdboyVP zn98`BOP;69n|j`gFAANjEO|;b@K@}@->@71;GTbBFaFKW{vV_;h8{7Ot$ZF1h($Ok*04L*jzy-z?(!E7*J!FEU$R>ZlLiPO=s8vcLG=0nT^0OCx)U$WA8D3RW|)bJrk? zT7uRLo5nl5`{Ze`J8259F@D0-66_!1M}aA2DESn7l;$iaDfiuM5Y5W9daRtxg4R*s{+=14G04?AG-ed*!9bbXD50tAX%qK+9cp(kk zJfBJtBAK%E%eE2qs$zi94+F5fc%ivQJGbuE8$XI%CEB6zRmjg4)fw& dX2^Tkh--JK);OVBBYwl8&&!LhC?)vqe*s{H5Yhku literal 3912 zcmaJ@YkL%D8NMgkQuFRYjGer6`Sn=tE#opATF0%No==T0xoZ?51>3G^*R@n$Gv`ugXRqm5M?uJ%NRKG!&iK+s z*0!>i>DX32uiGge4l3AUxTjN&=I9EPwCoIJowAnC7$$dGjEq)ty!W=eQF4ZDU0Wzx zhUt_PbY@()Wyi>;hHP6~%20w=49t{)|`SwgK%etrbkYlI6Fosacf*N%#*fO zAiR#uc|%`Jjh#zZHz^W1Vwi?=OhI%1zh`oYn<>O^RR4B5zRUW~{y^h`=z+kaVCw_tr6_|cj^F@GS~70vQlMih+R@?mS)FGE zT^kd=R9sKGq^vd~Vq!!^3t}7{o~)0H?4MK-mwnNwZ)+y`w49$-(S~gbw${$2$K_~T z#dbLolQY%k?rT`hYI}?F*Hr94r^HBW(p%Fi&VlKYwwTlk3L3Y?65Err6z3B?UY02EeytRLqVUkNy0F%Yk4EL zKcSnsgmpD>)yV4!3T5Z@+@3hTjqgP9*mUom~C3Sfj#;@hPipXZ4e8EMoWnZ#*d3!X8$w86d$m$(6;oCbu_kAnnNP6x&8O~kFzwS!X;tFX1KDSYamo1;4?_I@xA5*3Y1AKN77toCmJ-3iecc6#---{%71rKfEe(dMU z^y5K3#ZQW>oQ0F0;=Vuf#WNOhHxqTrVPCmPdN@G2_rp!fdjpged=X#rm5UPlY<9D~)$N8uMEMZ!(}(Mjc2tpe;Hz%tk5kL5fb48_u@40% zad>kQj|O5s5vV-6S$Q;2c?_rg3Zxk3dhOF65oCSs#{-og4OGr-Rz4S~d^zVbggcrt*GOUqU;Rl$t+_KgZ259Qv&(4U|mzk_QWk^Gql{Ii;H1qJWp zn==$V97X*fwKq+3#~Ngdb2cf~L*A@-BRc!uZa@Erd# zJ&#Lx!HqfL4#Q2XySaUlIA0>hmq~H2)b&cI?_aV?^4viWzo>dRxD!vSpbD${+d&Q!!V zrQp>nU%gM~lJMiicJ%KUl%?B!9DEJY<`slO(`=nPxOJiZ_1k!}yMnjd->cwPo=gQR z6@0Lvt-NsFV6opMZ@)!uSavaZjCb6}K#%yn%Xku4ADY(~R1+IUk>?+jHST(!&GM=2 KW!&CKef&S*lsAI_ diff --git a/bin/Model/MyModelData.class b/bin/Model/MyModelData.class new file mode 100644 index 0000000000000000000000000000000000000000..d8df1cf732fcc6e98589fe9708e60e995b103856 GIT binary patch literal 1459 zcmah|U31bv6g>+8ECfoaq88g)s%-!z+WPTe?Srk(Fhl(qJ2=xmEi_Y8W6}wsqy8oz zbVkM*AN&FSDC@l;6-a}=B$rn zf&7s?k-8=AL;Xej$mnB8TZI2wYT=MuxU%nzr%0_r7hoyR0fuXgVEfwWMqEchFS4w`;EGn+ z-($q83KdyOh7hA^kv>P$4a_cR|M1GG#gEMnxgdPlsiHL)kTe_if$?F08Fxzlh&Sdh zq3!Q6D@zNbwiL~8r(Zigw_`jr`3&+S_o~iU3QIIt9H8`KoFKi$I3>SQ9)6_*^(#$J zHA4(KYvtNDeC3@xpWrdQRBK0Em)BzfoafQAFu3|1w(y6ji zqWTS`FZ2=vizNMKZiJlpOPQlc3uhFo{J=Fs6>!w z!#giTlB=i%gTjdeJqBxR!D1g zf|gE~gb(gcv{pH+RVA(3f3)sm?VK-~aV4x(CoO$~7GGBOwT^q|v}neWYdXkljkMM$ OXz>rgTKD~n_23U7eAAQw literal 0 HcmV?d00001 diff --git a/bin/Model/ProgramStepInformation.class b/bin/Model/ProgramStepInformation.class new file mode 100644 index 0000000000000000000000000000000000000000..fe123a37000b3855f0cce52c84c5ff83f865b3a5 GIT binary patch literal 348 zcmZut%TB{E5S&fZq=Z1B*CHftz=3=Kk4q(_N-0z->fJG>xN>Y{T>gs_5(hqjkD_eS z9(&oH9nX5k{{8#@S+8-6L5hfQGI7t!6jSdOUevRo-p2OD`C0_+Y>Jq0v=kqrFv2d1 z$7-o$AjEDu9ubD+W_hBechcG5oiWN6e0WVrZnV|mj?g*3nDfqvjWTqwpCd(&&@Z)B z539OT{z+6u5eB7`!pw!&&AcV!@T%Vlr(3VxLD?>wxs{jdUN<)lcgwDtr{D~n3E&!` ri=;)=WMXEIr-D0i?_Pc(`(zLy=bE%+4+o6%jR1$}^TdDDs*e8w)3H*+ literal 0 HcmV?d00001 diff --git a/bin/Model/Runtime/Main.class b/bin/Model/Runtime/Main.class deleted file mode 100644 index df06311549f51f835e1c3d964251d8e39f9a49e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmZ`%U2hUm5IwgnU07&Kg_gD}w)hF9cE!h5`$A%3vRjQcB*do$H@MBRo2-kbf5(5| z6Nx1L0DqMA+{>DR)P1-!ckY~-b7tq)?;k&}ukjLX9V-HNoamz$SntMR;*UJbas5z- zCQ!O`zqnT5hC}O3|I!;I0;@0l&`-_;GL2?eK?wVW$y43x1gc~!}xk+w<^s?M&!RwoLRI0^_!y%}-`rbONq*#8%4&$Uox z?g`YE$|zpxL=Dtn>Zl9s-k$gNb;rN~OiFj-AqP{wMLCBbsj70y3-UR#Y$RE6E(`1g ziqV`bfvUYkK;l@S@;7mwIMpu$<`W1kEdZ%R!2A!0j|3PO(KsG>uY9>3dAV%I@-L$f zZWZLWLXX?TQ|Ha16|~vI33A`nv%yn719=p97H0{xYbv&m4MrsR8#HDD&!;H$CS1lT z%DvVETh0_az1GnLd*@Tsl(&DPO>v;y`zP6(PJ60C0Xf#+WCs)Lc+3uMZk_CYHtT=~ qc*t80hj_$y!Q48Ypg}n%s%SEvVZ4YIj>xLbjHfuJP(g`O^s_&eRo6QJ diff --git a/bin/Model/Runtime/ProgramStepInformation.class b/bin/Model/Runtime/ProgramStepInformation.class deleted file mode 100644 index a521958dede461a7bb9fbf237b9f4003a8ffc6a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmaJ-%TB{E5S&fZ1VW(DYfnfB0SEj6JT8@xDy2|S)VmW*apl;^IQ$nUBo2H4A4S=; zJt8ihg$8FAm(plc;2-p#$Nr$N1p?344g4BFWgF=2lp z-=r|o&c$81P*otrZZaAY2E}^FSXbUv&Ia#{QC{%j1tGcAR)=ds=j3$8Z-#7`p@W?q zDYgi`LR)p))TQzdvNVd&FI*+fOnTk&jTnb#{Yp6Ac>N!kZL_Ise5G!5J8|&$Ugzyf wI0R<{xJKwASs`k(v9irfa3}8FvkzqN3?k%QleLIl#`y;Cp~sB>YIW=27v-r~_5c6? diff --git a/bin/Model/Runtime/TODO.class b/bin/Model/Runtime/TODO.class deleted file mode 100644 index f045336c22c979f62a940c3538d826298749b24e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmZWj%TB{U3>>F<&@|8p^#`~?58V&oaVhF4G!l(+--H$2Di0}a_%BXKJ@5g16sb4j zR$Cf-Y>mgif5)F;z$4-S4&nNxeN&Zq?Hi+OC9?E64d4>ugZz}DlFhqFi-Rf+!GF+= zHcy1f?OjfA*Q^XN!8C#gpD<5!qqcors4kO5rTBQ#ma@uar!D^@%LpOEa3S6V*TR(iF<;2S zF~qvwNElAiR^Xk|{Ki`Go~qi78G4y2jd0#dhS4_7^5+6g@BgknJjsQzvQNmZWYfNfb?jElaI|}saso-j6-)^%dY5~y+0tmz>^Y8Mxmx*f z${=@*t@}Nr$KX@)(rJP50C>+E6PQ6-CUsWer>q~%{{k$&F56r~#&llA8_{=qQFk}$i>&mMGAQp%UGdmI@Ex`R5mxF8eg%+1TuI_#oKs?;_VtPbs{kPs>~(N z8N93FJ;`&T*V)ot!{;uA4^(`Jj|3F6d$Zkf_q;-QBt=wIQSyT^j9mpRk;&&0u2`aj#vOBH6JJKL;@)PG2yhqf2^xmUax>-A~bZnt%7tGjM{ zFC&mY&I?dVPgiwUU$wxmkR4P65JR+^7=%uN3UPg*8n;Z@IODPpuSgA1j${b(H^vzoEx!s^8b`q~vbc}fZ{Bf&UwI6uIN^Og z1FpuoisK|E{LA7;0>!!a!vM*RefH@AQXHpi!MGNTh426~8~NpQcpqm9k#wYwa|6uM z^gGYCZsHcRPNIWPi7-a29aK0Ac_^Q87N(a6xPvNLDe+znYvl1Z ztNkwSk?hB0@IFyuv;zHw0<`)e+WH~dL!vckHILAclbC|f6(kj;4*oL=W)-@|lzgf$ JXgY?Ce*vlS`!oOm literal 0 HcmV?d00001 diff --git a/bin/Runtime/TODO.class b/bin/Runtime/TODO.class new file mode 100644 index 0000000000000000000000000000000000000000..ee398897d7528646cbc9da1f7073e03007b097bf GIT binary patch literal 253 zcmYjL%?`m}5S*=6sZ#L*xTCkyglcbvu`!7zhCmSHA?3BxP~YlhhjPC&K~!(4`7 shItH84D%Uc85S}mF)U)JWLV75z_5g&9mt-@uneecIZ$@hWKDs|032Eu?*IS* delta 91 zcmdm^xJPjV2S4Wo1{Q{i3>*xTCJXXkcbv)~!7!acmSF~i3BybVYlc}2PC&K~!yJZS uhPez;4D%Rb85S@kF)U=LWLU(|z_6I19mt-@uoS3j8N+;rm6J6ECIbK%_!rv% diff --git a/bin/View/GUIMenuBar.class b/bin/View/GUIMenuBar.class index 2dc7dd5b004098ffb73b954024226cae7ca21841..085dbe69b909940ca4d63fb9605cb2b5c2ba3b27 100644 GIT binary patch literal 9613 zcmeHMd3aPswm;|I+v!eoLpqm0Z~@~oV-l1=++Y&Hgf&b8NJB8-LMOQ-4V}KR)6M3% zj_b_0;XIcaR9tbvc`gu822pW|3nC&95D^g(5g9}Tp6KZO>elU>8_4&)_uu>D4SZeo zJEu-nojP^Ssj8cIetzlYUw)zUd8(fjrtF%iIlFk&q{?bDo~no>{G>7E&WOy4%qec2 z9gQ~@k8xU<{8sf`AyAXY%DY|O=nu8%~*?LDrdwhtRod^bPT9lqs)Y0$u;ZNhcGd+^JKgL&h*daX6WP>%;yb%eIrd@sJEjxybBfvE2r# zjIwAvnjC_*f=+=^SOd2m26qjTO6Tcx77b!j3kqxe^c(DW7eNxF!E|0GF`chdHU<1N z6mnf?=BIMZW)I*|I6%Xge8b@w(EyD=a0|z25M+J~aS{*EC+Ab!Ie~iZ`|*Z`qC+3s406 z8MdZd39JW>m^m;%Y|cz!u>nGa1WVE+#zzeJMn_}Q(G-Ol!YzpitQDY{AcmW%WNUp> zfDoVoxMD17Qx--nkH_S+0lFL`Ofu`tM1bI0nh5d$Asb|gu+JCUH{E6-=jPZfXQ?nt z5|VSl7O|h-nSBM!DxyEX)!ncFU5W8U8VJzU&MskqYq25`|M_;v2k7_60d@*VGj4z` zcF5u9-@&>CEIa%=SbxN3izJX=H#c9@0lF0&kp$AV4$$qeQ)OIuA#8mo z>@+aH)kL~!2+&=yQ;9>tb^Zg&iv$p$dmxsM+W_5%%|h5WN3a`z#c0ydu=@RIkP#oC z2eDo|=0#vVq*E~s@Y5qWB<%Qc135?!(_Z8qwhiod!~gpPquthz{=Q zlur3UdQ!&hGdksvA;|yK=~;SCq!=?fA|9!WnGIM#!4whsFTj!AiHAp57P6r zR7~CmWifeSjTmRSPA}3+hzC2fn$yih!fXgf=fM&43Oe$TJ4&fk`R_XQAVVnsvQD`Y zy`oc3iC)vmM;U&49nN#if`YV~-V}Pgh2=U^cruJL!P`3ZqCBDDn_`ytbm}d~eqX2K zB>F(7<0bk~rxPUlNT(AiPxSaNo%%?$NvFQD^<$k*lIRni@@4C%I-M+epXqdpM4#() zszhJtbecq8>hvqw<13whEqPz-bh<>}=u{xlKXfXTa^LDyB++*|^^>jN>vV=hhjcnq zqW{*Zzt~i!BRc&k5_kY1851`e!ThIAKMQ6yb_kAG9XFe;c(lG1ZE$z|(5Ba=qOk_y zE_IQFXi#<5*oTqO$vJDa0&F>ksfxzUv8iTcgo(m!;44*DeI!;BNkj$hFtub;6!{`Y zo;Dq~H=IS&=TpXer9!~#kLI&P(DTIaq3b2JFaeqS)VK|oD$?;@#%j4HF`Ri zSa}uFxqu6?Cynl&_bRHELLxBu*pNbfIJj@*cVB|<(Vk<(EU z`6&QyCXhlwl-)=dY@w=M<67yqhrq#+W%F@j*fq`zyT)l@*GTksjSO$s$nSQI>~7b{ z?RJgKZr8}`c8#oV*U0I1jf`&B$me#AY;M=c<#vrsZr8};c8x4<*T~^^jSOzr$lrF2 z>}}V`-FA)4ZP&=#c8#oU*EsF%8izP)arm4?XQMoaNLvS6C`9VpMa$^iq7^i_b{Ul} zrLrR5N*YqDhI+503u;xPB3!E(!^5>cV`R8C!x$Z|^&4ZtwE?3lTpP+T#-j8a<532T z2`Dp-i710c4a#oDMJRP+3d$_wVwByDOHpPU(@=(tI+Qs^14_e~jRVe+&H7EndbtuysT@T#NxDlmp z+>A2I_yfxB#-C7T8@Hhh8F!$}G3KK*j6b97Vcd-}*SHsDPvb8rdl?H*<{1x!!%Jx) z%=U0?s95}8MvpF~MPNJ$J3hUX78fm{#cCV7Bzl6k!P7J3blvFXiN4Tdv$t=i?7PJ)7nE{ay}WLc zx6RAbC2zZzmnC^Sz)Pzf>JA?C+v%0dmU6qiypZJW_VRKhZ;y98LyouC%j+R|`@DT~ zW#9c?UQfw8;N|s_yn|j|p5z@aYNH?U`w72aiqtk%o>b1$moQmW!An#7Z-hA+b#)S`=c9$uZ-(G;GKSLXe6 zF+YYEg{x$`Uw4AT}C&k zE9gdb72Tw+rkmAvx`q8%SudHmIKU#+BZYAg2LL{FiK~-LZ(I)}=;VF}iSMo6$eR3n8qgoa75F*IB@ZBF;v5~`L>ThraQg~m&n?V$-0 z>`2eGGgK*scZCMXrrn`|66^_;NU%3FTFUGbQwUY}hepY!18Kz$ib;j?hePE69osz} z?+&6nkl*h_-k*;b$6a_E{290Sd$8^I(onjOM$=#DLb{)(&;wLY4^oU4Qi>j;tMKr< zi5@}kMcZelVemE>d>IVB90q?82LC$@z7ht183tbkgTDrY zuZF>2hr!=~!QX_z--5y0Veq$M@ONPFH8Au0F!);Z`~VW`fIfu5*LP)b@v3qRzD;^K zkAQ~l_`Tc4p~((j?7?e1c&!Jo@Zfb0-hloaJ$SQ&*Mq;o!CQd0dhj+6-tNIWJb0yp zccSku58my;dpzDO9H|NS~izW4GcK^(mFnHf-wWG?8}DH2MM?x{Kz}S4gP4v6)}f0@{Pv`34)g zmtLWN(0jBGoA@0h574*tJ^e%nIY5Uvmkx729pOUykxS?&B;SAXaQeApvw4IQUCepx zlbfwnAG01HLOs4P+m{ zHIno>`W;eiJ%$Q^6hjFQ0g0ns(ikhrcp|c!Xc#s&cJ7}TLE{D!`+IKs&$gE=iJr14Y(86;>f5Yi7JWS9% z9D2V)=Q{ES9J;4NA9Uzm4t?06^8_utNVSh(+l#P!y|J$+V&6}~5p^nOQwfLg`8tQj zvw?%O2gPv!U&(p+K-e4K?T({o@aA91eP|8$rLBAt?d5#<$H|< ztMOvL1aJ0cF5)Y>AK!{s`Tb~hk4JtWeLMp7#Yl{i#7jx-ogrKapL3i%QtF(P!Yj(~ zLmoL<aM*i?3PIkb#E~qj-^K1Z9k71YmFR&xuhr zM_taRRTrHh!mvnGzUAD%jn6L9+ISF*-F}9M*HW#{+Uv^gbJ2dc^?-{Gy6CWr+HFe=wbv_b za)G_xG+Jx73f?*wt#^BDaM4D$b+e1MxUE}V-ZmF)chL?P?X;25WtYp_?V>#{+Uv^g zbJ2dc^?-{Gy6CWra0ZowSkAab%a#@7E95T{b7CY-gMX~_k2pe~avgoeCVj`#ai47D3~u5ONBMZ3 zf!jhe_vbhdVhiV23s>>wT*FD8#woPU0-DWN@jSknui*LoJ6?d>#N*&R%UAPDd=0gU|9e#398hxi?h_+2f??`gTbM(fKTXa&4ZE8!2d zGG4EZgsxntDty*NCJZQBI1RM2O_eFEFz1Dh=>>we&6nX^Jap$zu$kqKYl;>q`O{q^;K0} zT~$5r99;g&p+j_<=;9;6)MirDnqE9|V##PL)-WUz_mPJw?~=&0$c*B|^k}TQ_)NDY zi>ZrjDUM7}7F*M-Sh9F?@K6~^`IU-X|sTx^-4q)=5Wwc#o)nd+4 z1r$37G@AC1xD}aNZ%1Rv1XF&gnx-Kctt}oLk4I+82|$)z7Ojp&k_~Z-sn?Nc1}dbx z@}V_W<c9&zz^{4j26jI;g;&ydeGLp39RwS}4GR-;+nQafB z5lw1>Y+FiL&y!;ht%<~{t)X_U9S0i%_OM8N>Vz7r4x(yhmqx2=lFnDq9v!WW+m&`K z8MkX|rPc&&%o|V2x#Y*VNJBzREI-Cu3Cn582ANf_sdAkOC)@FEX6(=BGnE9O?#vjmngkw(;gnHPJcq(Be4cK zbCx~0!ft?~v`U~uT_h%n!2k2Kn%3g0xGWjRfdc={1V*WiCTcWM&{k}7^#J?}>TdF& zsWx=V8W@d5lY^L!E;#J`v^Z(qCqdPR;-Ce{pg|^`N~bd!1>GlQ6VqUmaw*S8L$R_W z9I*fmp+S;vgh}~i`e+nZqUbW#@24}Fyu+X;Q9qU9P)I$hlAqyP9Hy9`#^3}?Da9jo zb+Z~0$w;g!)dZOwb$C;v-ilV%SaI|m549_c)-}{dq*)19SXNApI02Sra4Z3`q@S=s zuhgZ8pU#0uhc(2eLW{z%DGdof;h35bY6j+ftno0F^V5acS!y9+EHMrP=BJA>zl*Jh z8b+cm&+? zleD(OtcGNwvc^wPJipc{`85qA4vy98Y5g<5z?qTfl_uMjk+6Rm)0R%F*7V{Kivb2 zv<@k*`{}RXSV>IkBe;G)IMyeeuwaL({PZ9=*4O!h5IU&`)M8;v?=h@li05^29n(iOgf4B`{)_mDem2=j&y*Yrsw4OT!_8}B_$>L zh(2%9$#ja3UV!q*4(?@^x(fodSRc|RliE`U`MJ!b7il?o3!NMui&WHFP)bk1x!ouE z=q0GMJMpk+orPm$#{#s1UXhc(ip65`?vvy=ubcD+{T(MmnOtj%6^~n0Wzku%;q433 z7ReoDfL`*OCLKi`FYiO-p(TCW$ zGg*e!ai;p%q|Veuu63;(@l%t!>RCQB>1YjoZcd}-3L8v2(> z$LZFuOgdgeUz_v?-TH5nPSCh-Oe)aOwvsaF+|xa`!{>$-3CksQp_&Ae~ z=Re>!#EeY6^&G!BUjw@T)@PEJ{{YFM0y#u?rh+4MK2k?)yltiOjHD5ftcH(`%cS54 zet|rLYq+P$z2q72Nf}r(AnV246Q^081?)MZ9PV*e9Ct^ZJm&BQ+~b|es^QW<2cH6b zBKP<4ADKG-KAp)Y@yRfO)mF01ZirVxzIg?j55?*bj;*-Fs!S>toNDp_r9HJ7K4dnZ z#;5xj-btpvFcV=xoylkLU@%>IM~-J7wTs8W7fQk-vLbZ@{0xVrZ5Th(aq0rS_0`i&QAq?>h7mPKlSiaPe1jNdUmnNg@uQ0hXrO{G{{YILWQel!f6@?r;Z{x^9jRA`7(O6FX2&!9juv*-{b^KKLkv2j7J`fhok6ePgX8@n#t1{Zb=T5d`P5nYIWR(^8@i_ zD6{r^r2^05%YA$qJjcvSV~8C`m!#oKul}+29s}0?R114 zxAacsp}s*jPm>UeHGHedxAE;T%3$9(yS~ARN;*2n&^1$T+W^U!IdbQBGWGn;Hvi); z`EI`2$A5v6X0r55ckBQNX3JHfSj<;Ls8J=-F|b``q(wN__BR5?S%{>=KOe)H>d;~u z>2?mSvF(Hv5AZ`Y2nEkI`7!<*oTNmJJ$-Dw6&n_f)XH!$)A1N;*VWrGW!Fl4`~=pb zOd8CA98wN5-{dFxDcDJA$*fw~EUQYkK{rzN%%KMR9_Ob`eukgbGsO=mFvLlPmt3zeJ3FPPMZg81Y{lbd*{HtmR?BDfnIv8C1|wS6JK zX!3Gi0Xl3#)3r}6{;-sYq<-1tSNK&&@5af<5BzqkNpcoP`*Ccow5Rj><3B#^s%Ri1>mO@2q-5MAT}O6PT2Uh;_mzsGBQ{64He zi*%65AMiim63cT?f_tG07UU4L%o`M=8H-xTADa9Te~evYE+y^3v8u_4$E*qV@Zsae zj~%Vf@9&SH*|N^$PkFu81?jm&qOlQ(V8PA&43@ZP%)Eg&`uKB5F~ttI(d2)sE3%

;VcbU|ROgZ3glfUOZ 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 AG5`Po diff --git a/bin/View/GUIProgramMemory.class b/bin/View/GUIProgramMemory.class new file mode 100644 index 0000000000000000000000000000000000000000..828af8551796887ebfaf52a201dbba44ea74e73d GIT binary patch literal 283 zcmZur!A`=3*(LLR5M5md<5X z6Piz|QuTn)xVujX?u-7C0UEey!$Xr0#;TI9i!znwL!^Zy+{8K)MIwx{{4{jynffO5 z;(x^-3BkKwm`o0pebGI4*SE%S3$_6p#L4oEKC|e^0q@}ltql(x1dMhKKDcCTAA67M L6*Iy$ql54O%%VOl literal 0 HcmV?d00001 diff --git a/bin/View/GUITestFileTable.class b/bin/View/GUITestFileTable.class index bb51c58dd77c71336e12a835bbc5f1cf048e6090..034a8023d5402d7492a75a5723addaf82bd3970a 100644 GIT binary patch delta 452 zcmbPj^wMa<4zc>(49pBn3=9kz(o9PjQnj`)C`q$sY-3n?fWb;@8^b3yqiqZ`v54+q z__mGV4^)CB0lNlNafp_UK)aY3Qh}rt0~-TFJ;N~uR)*sY(hMgUOc+iw_%NJeNM|_1 zkOovB25}gWp8@0noyf??AjH7Pa0SR_Wnlablwf4!XGjDJ$pD22_=Fj&PwH8XaC!w< z2eMaSTF|`0a2e>TD?p!I1^VO~&?nb{4!nuOCjwBPaKOAW`Mr3k;2j1DhI&`pR3ItFzzQUf0mwge(C}{j6(}zwR&X}=rD>7om z)3MFc=$JWa7J}KS(M&3MOiDE603XtWdf7k)RX(c+&eaSop~~RRTDhGc{?@=dyywI2GHa=^ zmiFee3ur^a!7g9$~GaNK#begf}TEqq0dFm1*fy=A=)5!)KNDqCxC!65SM&w4D+3ViX~a zVE}1FF^)5sASHt=RnE~mZqY_>(@qQXlv+fNE-O!$Glg#`;5(-A6EpaQ%XA*I%!?~* zJFc=m6xlw^u|Zs8$8nvV#0?h5O}SkkT@_ej^H2o(056@&JXzWXt#cg<>$ppakCbS_ Fr$1Cs;7tGk delta 670 zcmYk3O=}ZT6o#MMG&2%13W7m}(jb07q!faVX z<64ZZH8pLGwbr)URmDFb;!5xjxNm#Ug&Sm;!~33h-opd)yLY!I@qKT7bAO*p?6eXC zp8n<#SP?Qp-M1ACw&zj=I zcvuZ*`pdPksbc?NDase3p)gk|MYBoP`K({~*Ss%DHrdjD{3YeB=tIZ4btX6)zd@Xv zdL-zLy{4gS!D)RoNU1k^Ik;G#&#ZFZyr;UeZQdD?6%#Y&y)%-ujJe_x=~&}BSN~6} zamlDlmW{ARl9h~G*H^8SjFOpEdd$4baqe-({KYKy86d|nd2Uf))I4R1 z%<+KdjPa6jZoguJCX;ONkS%lO2aov4WBwBHkFtV_3Yb%A00noTzQReI(_7HKvPi2b)8-cK`qY diff --git a/bin/View/MyView.class b/bin/View/MyView.class index 948961c8c104759291e51f904bd27a38f0cb8f7e..94b5bd573200a4957fea880eb438cda909ff2188 100644 GIT binary patch literal 3800 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 diff --git a/bin/View/MyViewData.class b/bin/View/MyViewData.class new file mode 100644 index 0000000000000000000000000000000000000000..21eb421638cd27ecddd923de3b68ed6ef501f9d3 GIT binary patch literal 540 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Ǟf$}j8_f~~lO||AMh?t}3 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 Eis|8p{CuU7xldmbpmvFtn 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 VC%~JP4dhY*Amj&TnIG;T9ssO!>=yt4 literal 34094 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 oBreakpoints; + ArrayList oControlButtons; + JCheckBox oWDTEnabled; + JComboBox oQuarzIntervals; + ArrayList oMenuItems; + + ConcurrentLinkedQueue qCommandsForModel; + ConcurrentLinkedQueue qDataForModel; + + ReadEepromFile oRef; + int iTestFileLoaded = 0; + boolean[] abBreakpoints; + PIC oPIC; + + MyModelData oMyModelData = new MyModelData(); + + public MyControlModel(MyView view, ConcurrentLinkedQueue qCommandsForModel, ConcurrentLinkedQueue qDataForModel) { + oMyView = view; + this.oPIC = new PIC(); + this.qCommandsForModel = qCommandsForModel; + this.qDataForModel = qDataForModel; + oControlButtons = oMyView.getGUIMCMenu().getControlButtons(); + oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); + oWDTEnabled = oMyView.getGUITime().getWDTEnableCheckbox(); + oQuarzIntervals = oMyView.getGUITime().getQuarzComboBox(); + oMenuItems = oMyView.getGUIMenuBar().getMenuItems(); + addActionListeners(); + } + + private void startProgramModel() { + qCommandsForModel.add(1); // 1 == start + } + + private void pauseProgramModel() { + qCommandsForModel.add(2); // 2 == pause + } + + private void resetProgramModel() { + qCommandsForModel.add(3); // 3 == reset + } + + private void stepProgramModel() { + qCommandsForModel.add(4); // 4 == step + } + + public void controlWDTModel(boolean bEnabled) { + + } + + private void loadTestFile() { + File oFile; + //select file to open + JFileChooser oFileChooser = new JFileChooser(); + int iResponse = oFileChooser.showOpenDialog(null); + if (iResponse == JFileChooser.APPROVE_OPTION) { + oFile = new File(oFileChooser.getSelectedFile().getAbsolutePath()); + //System.out.println(oFile); + oRef = new ReadEepromFile(); + oRef.setData(oFile); + oRef.setOPCode(oRef.getData()); + oMyView.getGUITestFileTable().setData(oRef.getData()); + setBreakpointsActionListeners(); + oRef.readFileAndWriteToEEPROM(oPIC); + oMyView.updateWindow(); + iTestFileLoaded = 1; + oMyModelData.setPIC(oPIC); + oMyModelData.setBreakpoints(abBreakpoints); + qDataForModel.add(oMyModelData); + } + } + + private void loadProgStateItem() { + //TODO + } + + private void saveProgStateItem() { + //TODO + } + + /** + * Sets interval of visual running. (instant, 1 sec, 2 sec) + * @param i + */ + private void setIntervalProgramModel(int i) { + oMyModelData.setVisualInterval(i); + qDataForModel.add(oMyModelData); + } + + /** + * Sets ActionListeners for breakpoints. + */ + private void setBreakpointsActionListeners() { + ArrayList data = oRef.getData(); + int iDataSize = data.size(); + ArrayList opcode = oRef.getOPCode(); + + int iOPCodeSize = opcode.size(); + //If testfile was loaded before, reset all checkboxes + if (iTestFileLoaded > 0) { + oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); + for (int i = 0; i < iDataSize; i++) { + oBreakpoints.get(i).setEnabled(false); + } + } + //Enable only checkboxes which belong to real code + int[] aiProgramLines = new int[iOPCodeSize]; + int k = 0; + for (int i = 0; i < iDataSize; i++) { + for (int j = 0; j < iOPCodeSize; j++) { + if (data.get(i).equals(opcode.get(j))) { + aiProgramLines[k] = i; + k++; + oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); + oBreakpoints.get(i).setEnabled(true); + oBreakpoints.get(i).addActionListener(this); + } + } + } + oPIC.getEeprom().setProgramLines(aiProgramLines); + abBreakpoints = new boolean[iOPCodeSize]; + } + + private void controlBreakpoints(ActionEvent e) { + if (oRef != null) { + int iOPCode = oRef.getOPCode().size(); + if (iOPCode > 0) { + for (int i = 0; i < oBreakpoints.size(); i++) { + if (e.getSource() == oBreakpoints.get(i)) { + for (int j = 0; j < iOPCode; j++) { + if (oRef.getOPCode().get(j).equals(oRef.getData().get(i))) { + abBreakpoints[j] = !abBreakpoints[j]; + oMyModelData.setBreakpoints(abBreakpoints); + qDataForModel.add(oMyModelData); + } + } + } + } + } + } + } + + @Override + public void actionPerformed(ActionEvent e) { + //Breakpoints set/reset + controlBreakpoints(e); + + //Runtime control Buttons + if (e.getSource() == oControlButtons.get(0)) { + startProgramModel(); + } + if (e.getSource() == oControlButtons.get(1)) { + stepProgramModel(); + } + if (e.getSource() == oControlButtons.get(2)) { + pauseProgramModel(); + } + if (e.getSource() == oControlButtons.get(3)) { + resetProgramModel(); + } + + //WDT-Enabled Checkbox + if (e.getSource() == oWDTEnabled) { + //Enable/disable watchdog + System.out.println("Watchdog got set to " + oWDTEnabled.isSelected());//TODO + } + + //Quarzfrequency + if (e.getSource() == oQuarzIntervals) { + oMyModelData.setQuartzInterval(oQuarzIntervals.getSelectedIndex()); + qDataForModel.add(oMyModelData); + } + + int i = 0; + for (JMenuItem oMenuItem : oMenuItems) { + if (e.getSource() == oMenuItem) { + switch (i) { + case 0: { + //Load testfile + loadTestFile(); + }break; + case 1: { + //Load Program State + loadProgStateItem(); + }break; + case 2: { + //Save Program State + saveProgStateItem(); + }break; + case 3: { + //Exit Program + qCommandsForModel.add(0); + System.exit(0); + }break; + case 4: { + //Dark theme + oMyView.setTheme(1); + }break; + case 5: { + //Light theme + oMyView.setTheme(0); + }break; + case 6: { + //Start pic + startProgramModel(); + }break; + case 7: { + //Pause pic + pauseProgramModel(); + }break; + case 8: { + //Reset pic + resetProgramModel(); + }break; + case 9: { + //Step pic + stepProgramModel(); + }break; + case 10: { + //Set interval to as soon as possible + setIntervalProgramModel(0); + }break; + case 11: { + //Set interval to 1 sec + setIntervalProgramModel(1); + }break; + case 12: { + //Set interval to 2 sec + setIntervalProgramModel(2); + }break; + case 13: { + //Change language to german + oMyView.setLanguage(0); + }break; + case 14: { + //Change language to english + oMyView.setLanguage(1); + }break; + case 15: { + //Show manual + }break; + case 16: { + //Show about + }break; + } + } + i++; + } + } + + private void addActionListeners() { + if (oBreakpoints != null) { + for (JCheckBox oBreakpoint : oBreakpoints) { + oBreakpoint.addActionListener(this); + } + } + if (oControlButtons != null) { + for (JButton oButton : oControlButtons) { + oButton.addActionListener(this); + } + } + if (oWDTEnabled != null) { + oWDTEnabled.addActionListener(this); + } + if (oQuarzIntervals != null) { + oQuarzIntervals.addActionListener(this); + } + if (oMenuItems != null) { + for (JMenuItem oMenuItem : oMenuItems) { + oMenuItem.addActionListener(this); + } + } + } +} \ No newline at end of file diff --git a/src/Control/MyControlModelPIC.java b/src/Control/MyControlModelPIC.java deleted file mode 100644 index 56a9805..0000000 --- a/src/Control/MyControlModelPIC.java +++ /dev/null @@ -1,98 +0,0 @@ -package Control; - -import java.util.ArrayList; - -import Model.MyModel; -import View.MyView; - -public class MyControlModelPIC { - - MyModel oModel; - MyView oView; - //put Objects to manipulate here - - public MyControlModelPIC(MyModel model, MyView view) { - oModel = model; - oView = view; - } - - public void setWRegisterModel(int iValue) { - - } - - public void setPCinternModel(int iValue) { - - } - - public void setPCLATHModel(int iValue) { - - } - - public void setPCLModel(int iValue) { - - } - - public void setFSRModel(int iValue) { - - } - - public void setStatusModel(int iValue) { - - } - - public void setOptionModel(int iValue) { - - } - - public void setPrescalerModel(int iValue) { - - } - - public void setTMR0Model(int iValue) { - - } - - - - public void setPortAPinXToYModel(int iPort, boolean bEnabled) { - - } - - public void setPortBPinXToYModel(int iPort, boolean bEnabled) { - - } - - public void setPortATrisXToYModel(int iPort, boolean bEnabled) { - - } - - public void setPortBTrisXToYModel(int iPort, boolean bEnabled) { - - } - - public void setRamModel(int[][] aiiRam) { - - } - - - public void setQuarzModel(int iElement) { - - } - - - public void loadFileToEEPROMModel(ArrayList oData) { - - } - - public void saveSimulatorStateModel() { - - } - - public void loadSimulatorStateModel() { - - } - - public void exitSimulatorModel() { - - } -} diff --git a/src/Control/MyControlModelRuntime.java b/src/Control/MyControlModelRuntime.java deleted file mode 100644 index 0f737d2..0000000 --- a/src/Control/MyControlModelRuntime.java +++ /dev/null @@ -1,85 +0,0 @@ -package Control; - -import Model.MyModel; -import View.MyView; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; - -import java.util.ArrayList; - -import javax.swing.JButton; -import javax.swing.JCheckBox; - -public class MyControlModelRuntime implements ActionListener { - - MyModel oMyModel; - - ArrayList oBreakpoints; - ArrayList oControlButtons; - - public MyControlModelRuntime(MyModel model, MyView view) { - oMyModel = model; - oControlButtons = view.getGUIMCMenu().getControlButtons(); - oBreakpoints = view.getGUITestFileTable().getCheckboxes(); - addActionListeners(); - } - - private void startProgramEnvironment() { - oMyModel.start(); - } - - private void stepProgramEnvironment() { - oMyModel.step(); - } - - private void pauseProgramEnvironment() { - oMyModel.pause(); - } - - private void resetProgramEnvironment() { - - } - - public void controlWDTEnvironment(boolean bEnabled) { - - } - - @Override - public void actionPerformed(ActionEvent e) { - int i = 0; - for (JCheckBox oBreakpoint : oBreakpoints) { - if (e.getSource() == oBreakpoint) { - oMyModel.controlBreakpoint(i); - } - i++; - } - if (e.getSource() == oControlButtons.get(0)) { - //startProgramEnvironment(); - System.out.println("Test"); - } - if (e.getSource() == oControlButtons.get(1)) { - - } - if (e.getSource() == oControlButtons.get(2)) { - - } - - // TODO Auto-generated method stub - - } - - private void addActionListeners() { - if (oBreakpoints != null) { - for (JCheckBox oBreakpoint : oBreakpoints) { - oBreakpoint.addActionListener(this); - } - } - if (oControlButtons != null) { - for (JButton oButton : oControlButtons) { - oButton.addActionListener(this); - } - } - } -} \ No newline at end of file diff --git a/src/Control/MyControlView.java b/src/Control/MyControlView.java index e916029..475f962 100644 --- a/src/Control/MyControlView.java +++ b/src/Control/MyControlView.java @@ -2,17 +2,21 @@ package Control; import java.util.ArrayList; -import Model.MyModel; +import Model.Microcontroller.PIC; import View.MyView; +/** + * Class to set fields of parts of view. + */ public class MyControlView { MyView oMyView; - MyModel oMyModel; + PIC oPIC; - public MyControlView(MyModel model, MyView view) { + public MyControlView(PIC oPIC, MyView view) { oMyView = view; - oMyModel = model; + this.oPIC = oPIC; + updateView(); } public void updateView() { @@ -22,6 +26,7 @@ public class MyControlView { setRamView(); setRegistersDetailed(); setStack(); + setTestFileTable(); } /** @@ -31,19 +36,19 @@ public class MyControlView { //Get values from pic int[] aiValues = new int[9]; - aiValues[0] = oMyModel.getPIC().getRam().get_TMR0(); - aiValues[1] = oMyModel.getPIC().getRam().get_Programcounter(); - aiValues[2] = oMyModel.getPIC().getRam().get_STATUS(); - aiValues[3] = oMyModel.getPIC().getRam().get_PCLATH(); - aiValues[4] = oMyModel.getPIC().getRam().get_FSR(); - aiValues[5] = oMyModel.getPIC().getRam().get_PCL(); - aiValues[6] = oMyModel.getPIC().getRam().get_OPTION(); - if (oMyModel.getPIC().getRam().get_PSA()) { - aiValues[7] = oMyModel.getPIC().getRam().get_WDT_PrescalerRate(); + aiValues[0] = oPIC.getRam().get_TMR0(); + aiValues[1] = oPIC.getRam().get_Programcounter(); + aiValues[2] = oPIC.getRam().get_STATUS(); + aiValues[3] = oPIC.getRam().get_PCLATH(); + aiValues[4] = oPIC.getRam().get_FSR(); + aiValues[5] = oPIC.getRam().get_PCL(); + aiValues[6] = oPIC.getRam().get_OPTION(); + if (oPIC.getRam().get_PSA()) { + aiValues[7] = oPIC.getRam().get_WDT_PrescalerRate(); } else { - aiValues[7] = oMyModel.getPIC().getRam().get_TMR0_PrescalerRate(); + aiValues[7] = oPIC.getRam().get_TMR0_PrescalerRate(); } - aiValues[8] = oMyModel.getPIC().get_WRegister(); + aiValues[8] = oPIC.get_WRegister(); //Fill gui element with gathered values oMyView.getGUIRegister().setRegisters(aiValues); @@ -53,9 +58,9 @@ public class MyControlView { * Sets detailed register-table values to values from PIC. */ public void setRegistersDetailed() { - int iStatus = oMyModel.getPIC().getRam().get_STATUS(); - int iOption = oMyModel.getPIC().getRam().get_OPTION(); - int iIntcon = oMyModel.getPIC().getRam().get_INTCON(); + int iStatus = oPIC.getRam().get_STATUS(); + int iOption = oPIC.getRam().get_OPTION(); + int iIntcon = oPIC.getRam().get_INTCON(); int iS0 = ((iStatus & 1) == 1) ? 1:0; int iS1 = ((iStatus & 2) == 2) ? 1:0; @@ -101,11 +106,11 @@ public class MyControlView { boolean[] abEnabled = new boolean[10]; - abEnabled[0] = oMyModel.getPIC().getRam().get_TRISA0(); - abEnabled[1] = oMyModel.getPIC().getRam().get_TRISA1(); - abEnabled[2] = oMyModel.getPIC().getRam().get_TRISA2(); - abEnabled[3] = oMyModel.getPIC().getRam().get_TRISA3(); - abEnabled[4] = oMyModel.getPIC().getRam().get_TRISA4(); + abEnabled[0] = oPIC.getRam().get_TRISA0(); + abEnabled[1] = oPIC.getRam().get_TRISA1(); + abEnabled[2] = oPIC.getRam().get_TRISA2(); + abEnabled[3] = oPIC.getRam().get_TRISA3(); + abEnabled[4] = oPIC.getRam().get_TRISA4(); abEnabled[5] = true; abEnabled[6] = true; @@ -123,14 +128,14 @@ public class MyControlView { boolean[] abEnabled = new boolean[16]; - abEnabled[0] = oMyModel.getPIC().getRam().get_TRISB0(); - abEnabled[1] = oMyModel.getPIC().getRam().get_TRISB1(); - abEnabled[2] = oMyModel.getPIC().getRam().get_TRISB2(); - abEnabled[3] = oMyModel.getPIC().getRam().get_TRISB3(); - abEnabled[4] = oMyModel.getPIC().getRam().get_TRISB4(); - abEnabled[5] = oMyModel.getPIC().getRam().get_TRISB5(); - abEnabled[6] = oMyModel.getPIC().getRam().get_TRISB6(); - abEnabled[7] = oMyModel.getPIC().getRam().get_TRISB7(); + abEnabled[0] = oPIC.getRam().get_TRISB0(); + abEnabled[1] = oPIC.getRam().get_TRISB1(); + abEnabled[2] = oPIC.getRam().get_TRISB2(); + abEnabled[3] = oPIC.getRam().get_TRISB3(); + abEnabled[4] = oPIC.getRam().get_TRISB4(); + abEnabled[5] = oPIC.getRam().get_TRISB5(); + abEnabled[6] = oPIC.getRam().get_TRISB6(); + abEnabled[7] = oPIC.getRam().get_TRISB7(); abEnabled[8] = true; abEnabled[9] = true; @@ -146,8 +151,8 @@ public class MyControlView { public void setRamView() { int[] aiData; - int[] aiBank0 = oMyModel.getPIC().getRam().get_Bank0(); - int[] aiBank1 = oMyModel.getPIC().getRam().get_Bank1(); + int[] aiBank0 = oPIC.getRam().get_Bank0(); + int[] aiBank1 = oPIC.getRam().get_Bank1(); aiData = new int[256]; for (int i = 0; i < 128; i++) { @@ -162,7 +167,22 @@ public class MyControlView { } public void setStack() { - oMyView.getGUIStack().setStack(oMyModel.getPIC().getStack().getSTACK()); + oMyView.getGUIStack().setStack(oPIC.getStack().getSTACK()); + } + + public void setTestFileTable() { + if (oPIC.getEeprom().getProgramLines() != null) { + if (oPIC.getRam().get_LastProgramcounter() > -1) { + oMyView.getGUITestFileTable().unmarkLine(oPIC.getEeprom().getProgramLine(oPIC.getRam().get_LastProgramcounter())); + oMyView.getGUITestFileTable().markLine(oPIC.getEeprom().getProgramLine(oPIC.getRam().get_Programcounter())); + } else { + int[] aiProgList = oPIC.getEeprom().getProgramLines(); + for (int i = 0; i < aiProgList.length; i++) { + oMyView.getGUITestFileTable().unmarkLine(aiProgList[i]); + } + oMyView.getGUITestFileTable().markLine(oPIC.getEeprom().getProgramLine(0)); + } + } } public void startProgramView() { @@ -205,4 +225,8 @@ public class MyControlView { public void exitSimulatorView() { } + + public void setPIC(PIC oPic) { + oPIC = oPic; + } } \ No newline at end of file diff --git a/src/Model/Microcontroller/Bitmask.java b/src/Model/Microcontroller/Bitmask.java index 797e40d..52dd5ab 100755 --- a/src/Model/Microcontroller/Bitmask.java +++ b/src/Model/Microcontroller/Bitmask.java @@ -7,7 +7,7 @@ public class Bitmask { * @param oPIC */ public int bitMaskDecoderAndExecuteCommand(int iCommandAsIntToMask, PIC oPIC) { - + System.out.println("Command " + Integer.toHexString(iCommandAsIntToMask)); //Return-value will be -1 if command can't be read. int iDecodedCommand = -1; diff --git a/src/Model/Microcontroller/EEPROM.java b/src/Model/Microcontroller/EEPROM.java index 827c0ef..3f82989 100755 --- a/src/Model/Microcontroller/EEPROM.java +++ b/src/Model/Microcontroller/EEPROM.java @@ -12,11 +12,38 @@ public class EEPROM private int[] eeprom; private int eepromLength = 0; + private int[] aiProgramLines; + public EEPROM() { eeprom = new int[1024]; } + /** + * Returns array of program lines in data + * @return + */ + public int[] getProgramLines() { + return aiProgramLines; + } + + /** + * Return element i of program lines in data + * @param i + * @return + */ + public int getProgramLine(int i) { + return aiProgramLines[i]; + } + + /** + * Sets program lines of data + * @param aiProgLines + */ + public void setProgramLines(int[] aiProgLines) { + aiProgramLines = aiProgLines; + } + /** * Returns element of index element in eeprom-array. * @param element index of array. diff --git a/src/Model/Microcontroller/PIC.java b/src/Model/Microcontroller/PIC.java index a889fda..c24b57a 100755 --- a/src/Model/Microcontroller/PIC.java +++ b/src/Model/Microcontroller/PIC.java @@ -1207,9 +1207,6 @@ public class PIC { public void SUBLW(int eightK) { int wRegValue = get_WRegister(); - //Build Two's complement - //eightK = (eightK ^ 0b11111111) + 1; - //Build Two's complement wRegValue = (wRegValue ^ 0b11111111) + 1; diff --git a/src/Model/Microcontroller/RAM.java b/src/Model/Microcontroller/RAM.java index beeeeb2..b5dff93 100755 --- a/src/Model/Microcontroller/RAM.java +++ b/src/Model/Microcontroller/RAM.java @@ -21,7 +21,7 @@ public class RAM { private int[] bank1; //Last programmcounter for function getLastLine in main. - private int lastProgramcounter; + private int lastProgramcounter = -1; // private int iPrescaledTMR0; diff --git a/src/Model/Microcontroller/RUNTIMER.java b/src/Model/Microcontroller/RUNTIMER.java new file mode 100644 index 0000000..f6d149f --- /dev/null +++ b/src/Model/Microcontroller/RUNTIMER.java @@ -0,0 +1,5 @@ +package Model.Microcontroller; + +public class RUNTIMER { + +} diff --git a/src/Model/MyModel.java b/src/Model/MyModel.java index a189ff9..0897af2 100644 --- a/src/Model/MyModel.java +++ b/src/Model/MyModel.java @@ -1,160 +1,178 @@ package Model; -import java.util.ArrayList; +import java.util.concurrent.ConcurrentLinkedQueue; import Model.Microcontroller.Bitmask; import Model.Microcontroller.PIC; -import Model.Microcontroller.WATCHDOG; -import View.GUIMainFrame; -public class MyModel { - private PIC oPIC; +public class MyModel extends Thread { + PIC oPIC = new PIC(); + + MyModelData oMyModelData; - private int iModelState = 3; - private int iActualLine; - private int iLastLine; + boolean bStopProgram = false; - private ArrayList listBreakpoints = new ArrayList(); + int iProgState = 0; + int iVisualInterval = 0; - private long liRuntimeRun; - private long liRuntimeStep; + double dRTIncrVal = 0; - private boolean[] bBreakpoints; + private boolean[] abBreakpoints; - private WATCHDOG watchdog; - GUIMainFrame oMainFrame; + ConcurrentLinkedQueue qReceivedCommands; + ConcurrentLinkedQueue qDataToModel; + ConcurrentLinkedQueue qDataToView; - public MyModel() { - oPIC = new PIC(); + public MyModel(ConcurrentLinkedQueue qCommands, ConcurrentLinkedQueue qDataS, ConcurrentLinkedQueue qDataR) { + qReceivedCommands = qCommands; + qDataToView = qDataS; + qDataToModel = qDataR; } - public PIC getPIC() { - return this.oPIC; + @Override + public void run() { + //Check if end or error + while (!bStopProgram) { + //Check if element to set model + while (!qDataToModel.isEmpty()) { + setModel(qDataToModel.poll()); + } + //Check if element at command-queue + if (!qReceivedCommands.isEmpty()) { + /* -1 == ERROR, 0 == END, 1 == START, 2 == PAUSE, 3 == RESET*/ + iProgState = qReceivedCommands.poll(); + switch (iProgState) { + case (-1): { + System.out.println("Fehler"); + bStopProgram = true; + }break; + case (0): { + System.out.println("Programm wurde beendet."); + bStopProgram = true; + }break; + case (1): { + //start program + while (iProgState == 1) { + //Check if pause/stop was pressed + if (!qReceivedCommands.isEmpty()) { + iProgState = qReceivedCommands.poll(); + } + //Check if breakpoint is set + if (abBreakpoints != null) { + if (!abBreakpoints[oPIC.getRam().get_Programcounter()]) { + if(iVisualInterval > 0) { + try { + Thread.sleep(iVisualInterval * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + step(); + qDataToView.add(oPIC); + } else { + //Pause program + iProgState = 2; + } + } + } + }break; + case (2): { + + }break; + case (3): { + oPIC.resetPIC(); + qDataToView.add(oPIC); //TODO + }break; + case (4): { + if (abBreakpoints != null) { + //Check if breakpoint is set + if (!abBreakpoints[oPIC.getRam().get_Programcounter()]) { + step(); + qDataToView.add(oPIC); //TODO + } + } else { + System.out.println("Please load file!"); + } + }break; + } + } + + + } } - private int getModelState() { - return iModelState; - } - - /** - * -1 == ERROR, 0 == END, 1 == START, 2 == PAUSE, 3 == RESET - * @param i - */ - public void setModelState(int i) { - iModelState = i; - } - - public ArrayList getBreakpointsList() { - return listBreakpoints; - } - - public void setBreakpointsList(ArrayList liBreakpoints) { - listBreakpoints = liBreakpoints; - bBreakpoints = new boolean[listBreakpoints.size()]; - } - - /** - * - * @return - */ - public int getActualLine() { - return iActualLine; - } - - /** - * - * @return - */ - public int getLastLine() { - return iLastLine; - } - - /** - * - * @return - */ - public long getRuntimeRun() { - return liRuntimeRun; - } - - /** - * - * @return - */ - public long getRuntimeStep() { - return liRuntimeStep; - } - - /** - * - * @return - */ - public WATCHDOG getWatchdog() { - return watchdog; - } - - public void step() { + private void step() { //Check if step valid - if (oPIC.getRam().get_Programcounter() < (oPIC.getEeprom().getLengthEEPROM() - 1)) { - final long timeStart = System.nanoTime(); - + if (oPIC.getRam().get_Programcounter() < (oPIC.getEeprom().getLengthEEPROM())) { //Makes one step through the eeprom. Bitmask oBitmask = new Bitmask(); oBitmask.bitMaskDecoderAndExecuteCommand(oPIC.getEeprom().getElement(oPIC.getRam().get_Programcounter()), oPIC); - - final long timeEnd = System.nanoTime(); - - liRuntimeStep += (timeEnd - timeStart); - + qDataToView.add(oPIC); } else { System.out.println("Step invalid, end of file reached!"); } } - public void start() { - if (getModelState() != 2) { //Do not start again if paused, instead call start to unpause only. - final long timeStart = System.nanoTime(); + private void setQuarzSpeed(int iInterval) { //TODO Quartz + switch (iInterval) { + //10 {"32 kHz", "100 kHz", "500 kHz", "1 MHz", "2 MHz", "4 MHz", "8 MHz", "12 MHz", "16 MHz", "20 MHz"} + case 0: { + //32 kHz => + dRTIncrVal = (4 / 0.032); + }break; - //workWithWatchdog(1, 1); - //Check if set breakpoint reached or program was stopped or interrupt - - while (getModelState() != 0) { - switch (iModelState) { + case 1: { + //100kHz => 0.000010s + dRTIncrVal = (4 / 0.1); + }break; - case 1: { //START - step(); - // - //workWithWatchdog(1, 2); - final long timeEnd = System.nanoTime(); - liRuntimeRun += timeEnd - timeStart; - oMainFrame.updateWindow(); - }break; + case 2: { + //500kHz => 0.0000020s + dRTIncrVal = (4 / 0.5); + }break; - case 2: { //PAUSE resume() has to be called to continue - while (iModelState == 2) {} - }break; - } - } - } else { //Unpause - iModelState = 1; + case 3: { + //1MHz => 0.0000010s + dRTIncrVal = (4 / 1); + }break; + + case 4: { + //2MHz => 0.0000005s + dRTIncrVal = (4 / 2); + }break; + + case 5: { + //4MHz => 0.00000025s 1 mükrosekunde + dRTIncrVal = (4 / 4); + }break; + + case 6: { + //8MHz => 0.000000125s + dRTIncrVal = (4 / 8); + }break; + + case 7: { + //12MHz => 0.00000008333333 + dRTIncrVal = (4 / 12); + }break; + + case 8: { + //16MHz => 0.0000000625 + dRTIncrVal = (4 / 16); + }break; + + case 9: { + //20MHz => 0.00000005 + dRTIncrVal = (4 / 20); + }break; } } - public void reset() { - if (getModelState() != 1) { - oPIC.resetPIC(); - iModelState = 3; //RESET - } - } - - public void pause() { - iModelState = 2; - } - - public void controlBreakpoint(int iBreakpoint) { - if (bBreakpoints != null) { - bBreakpoints[iBreakpoint] = !bBreakpoints[iBreakpoint]; - System.out.println("Breakpoint " + iBreakpoint + " was set to " + bBreakpoints[iBreakpoint]); - } + private void setModel(MyModelData data) { + oMyModelData = data; + oPIC = oMyModelData.getPIC(); + abBreakpoints = oMyModelData.getBreakpoints(); + setQuarzSpeed(oMyModelData.getQuartzInterval()); + iVisualInterval = oMyModelData.getVisualInterval(); } } diff --git a/src/Model/MyModelData.java b/src/Model/MyModelData.java new file mode 100644 index 0000000..6c788ef --- /dev/null +++ b/src/Model/MyModelData.java @@ -0,0 +1,52 @@ +package Model; + +import Model.Microcontroller.PIC; + +public class MyModelData { + private PIC oPIC; + private int iQuartzInterval; + private int iVisualInterval; + private boolean bWDTEnabled = false; + + private boolean[] abBreakpoints; + + public PIC getPIC() { + return oPIC; + } + + public int getQuartzInterval() { + return iQuartzInterval; + } + + public int getVisualInterval() { + return iVisualInterval; + } + + public boolean[] getBreakpoints() { + return abBreakpoints; + } + + public boolean getWDTEnabled() { + return bWDTEnabled; + } + + public void setPIC(PIC pic) { + this.oPIC = pic; + } + + public void setQuartzInterval(int iIndex) { + this.iQuartzInterval = iIndex; + } + + public void setVisualInterval(int iIndex) { + this.iVisualInterval = iIndex; + } + + public void setBreakpoints(boolean[] abBreakpoints) { + this.abBreakpoints = abBreakpoints; + } + + public void setWDTEnabled(boolean bWDTEnabled) { + this.bWDTEnabled = bWDTEnabled; + } +} diff --git a/src/Model/Runtime/ProgramStepInformation.java b/src/Model/ProgramStepInformation.java similarity index 57% rename from src/Model/Runtime/ProgramStepInformation.java rename to src/Model/ProgramStepInformation.java index ec847f1..d5d36b9 100755 --- a/src/Model/Runtime/ProgramStepInformation.java +++ b/src/Model/ProgramStepInformation.java @@ -1,7 +1,10 @@ -package Model.Runtime; +package Model; import Model.Microcontroller.PIC; +/** + * Class to store program-state. TODO + */ public class ProgramStepInformation { private PIC oPIC; } diff --git a/src/Model/Runtime/Main.java b/src/Model/Runtime/Main.java deleted file mode 100755 index 73fce95..0000000 --- a/src/Model/Runtime/Main.java +++ /dev/null @@ -1,17 +0,0 @@ -package Model.Runtime; - -import Control.MyControlModelPIC; -import Control.MyControlModelRuntime; -import Control.MyControlView; -import Model.MyModel; -import View.MyView; - -public class Main { - public static void main(String[] args) { - MyModel oModel = new MyModel(); - MyView oView = new MyView(oModel); - MyControlView oControlView = new MyControlView(oModel, oView); - MyControlModelRuntime oControlModelRuntime = new MyControlModelRuntime(oModel, oView); - MyControlModelPIC oControlModelPIC = new MyControlModelPIC(oModel, oView); - } -} \ No newline at end of file diff --git a/src/Model/Runtime/Testfile.java b/src/Model/Runtime/Testfile.java deleted file mode 100644 index cca6d2f..0000000 --- a/src/Model/Runtime/Testfile.java +++ /dev/null @@ -1,8 +0,0 @@ -package Model.Runtime; - -import java.util.ArrayList; - -public class Testfile { - ArrayList lsTestfile; - -} \ No newline at end of file diff --git a/src/Runtime/Main.java b/src/Runtime/Main.java new file mode 100755 index 0000000..11f8077 --- /dev/null +++ b/src/Runtime/Main.java @@ -0,0 +1,39 @@ +package Runtime; + +import java.util.concurrent.ConcurrentLinkedQueue; + +import Control.MyControlModel; +import Control.MyControlView; +import Model.MyModel; +import Model.MyModelData; +import Model.Microcontroller.PIC; +import View.MyView; + +public class Main { + + public static void main(String[] args) { + PIC oPIC = new PIC(); + + ConcurrentLinkedQueue qCommandsToModel = new ConcurrentLinkedQueue(); + ConcurrentLinkedQueue qDataToView = new ConcurrentLinkedQueue(); + ConcurrentLinkedQueue qDataToModel = new ConcurrentLinkedQueue(); + + MyModel oModel = new MyModel(qCommandsToModel, qDataToView, qDataToModel); + oModel.start(); + + MyView oView = new MyView(); + + MyControlView oControlView = new MyControlView(oPIC, oView); + + new MyControlModel(oView, qCommandsToModel, qDataToModel); + + //Check if model sent a new pic-element through queue and update view. + while (qCommandsToModel.peek() > 0) { + while (!qDataToView.isEmpty()) { + PIC pic = qDataToView.poll(); + oControlView.setPIC(pic); + oControlView.updateView(); + } + } + } +} \ No newline at end of file diff --git a/src/Model/Runtime/TODO.java b/src/Runtime/TODO.java similarity index 96% rename from src/Model/Runtime/TODO.java rename to src/Runtime/TODO.java index edd1a0d..cb3639a 100755 --- a/src/Model/Runtime/TODO.java +++ b/src/Runtime/TODO.java @@ -1,4 +1,4 @@ -package Model.Runtime; +package Runtime; public class TODO { diff --git a/src/View/GUIMainFrame.java b/src/View/GUIMainFrame.java index f6dfd9c..c269c37 100755 --- a/src/View/GUIMainFrame.java +++ b/src/View/GUIMainFrame.java @@ -141,6 +141,7 @@ public class GUIMainFrame extends JFrame { } public void updateWindow() { + //update tables this.revalidate(); this.repaint(); } diff --git a/src/View/GUIMenuBar.java b/src/View/GUIMenuBar.java index f05a6e6..152c1e2 100644 --- a/src/View/GUIMenuBar.java +++ b/src/View/GUIMenuBar.java @@ -2,32 +2,24 @@ package View; import java.awt.Color; import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.KeyEvent; -import java.io.File; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JCheckBox; -import javax.swing.JFileChooser; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; -import Model.MyModel; import Model.EepromLoader.ReadEepromFile; -public class GUIMenuBar extends JMenuBar implements ActionListener { +public class GUIMenuBar extends JMenuBar { MyView oMyView; - MyModel oMyModel; - ArrayList oBreakpoints; ReadEepromFile oRef; boolean[] bBreakpointSet; - int iTestFileLoaded = 0; ArrayList oMenuItems = new ArrayList(); //Custom separators because addSeparator(default) looks not nice. @@ -69,16 +61,16 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { JMenuItem oAbout; //German language array - String[] sGermanLang = {"Datei", "Testdatei laden", "Programmzustand laden", "Programmzustand speichern", "Simulation beenden", + String[][] sLanguages = { + {"Datei", "Testdatei laden", "Programmzustand laden", "Programmzustand speichern", "Simulation beenden", "Ansicht", "Thema", "Dunkler Modus", "Heller Modus", "Microcontroller", "Programm starten", "Programm pausieren", "Programm zuruecksetzen", "Schritt fuer Schritt", "Bearbeitungsintervall", "Sofort", "1 Sekunde", "2 Sekunden", - "Hilfe", "Sprache", "Deutsch", "Englisch", "Anleitung", "Ueber"}; - - //English language array - String[] sEnglishLang = {"File", "Load Testfile", "Load Programstate", "Save Programstate", "Exit simulation", - "View", "Theme", "Dark Theme", "Light Theme", - "Microcontroller", "Start program", "Pause program", "Reset program", "Step by Step", "Workinterval", "Instant", "1 second", "2 seconds", - "Help", "Language", "German", "English", "Manual", "About"}; + "Hilfe", "Sprache", "Deutsch", "Englisch", "Anleitung", "Ueber"}, + + {"File", "Load Testfile", "Load Programstate", "Save Programstate", "Exit simulation", + "View", "Theme", "Dark Theme", "Light Theme", + "Microcontroller", "Start program", "Pause program", "Reset program", "Step by Step", "Workinterval", "Instant", "1 second", "2 seconds", + "Help", "Language", "German", "English", "Manual", "About"}}; //Color for separators is always the same. Color oColorSeparators = new Color(47, 47, 47); @@ -87,7 +79,7 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { * Constructor initializes menubar. * @param frame */ - public GUIMenuBar(MyModel model, MyView view) { //TODO maybe single components, with methods, of frame to set theme + public GUIMenuBar(MyView view) { //Custom Separators since default is not able to change background. oSeparator0 = new JMenuItem(); @@ -106,77 +98,44 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { //Referrence to change different parts of gui for theme. oMyView = view; - oMyModel = model; - //File - oFileMenu = new JMenu(sGermanLang[0]); - oLoadTestFile = new JMenuItem(sGermanLang[1]); - oLoadProgStateItem = new JMenuItem(sGermanLang[2]); - oSaveProgStateItem = new JMenuItem(sGermanLang[3]); - oExitItem = new JMenuItem(sGermanLang[4]); + oFileMenu = new JMenu(sLanguages[0][0]); + oLoadTestFile = new JMenuItem(sLanguages[0][1]); + oLoadProgStateItem = new JMenuItem(sLanguages[0][2]); + oSaveProgStateItem = new JMenuItem(sLanguages[0][3]); + oExitItem = new JMenuItem(sLanguages[0][4]); //View - oViewMenu = new JMenu(sGermanLang[5]); - oChangeColors = new JMenu(sGermanLang[6]); - oDarkTheme = new JMenuItem(sGermanLang[7]); - oLightTheme = new JMenuItem(sGermanLang[8]); + oViewMenu = new JMenu(sLanguages[0][5]); + oChangeColors = new JMenu(sLanguages[0][6]); + oDarkTheme = new JMenuItem(sLanguages[0][7]); + oLightTheme = new JMenuItem(sLanguages[0][8]); //Microcontroller - oMicrocontroller = new JMenu(sGermanLang[9]); - oStartProg = new JMenuItem(sGermanLang[10]); - oPauseProg = new JMenuItem(sGermanLang[11]); - oResetProg = new JMenuItem(sGermanLang[12]); - oStepProg = new JMenuItem(sGermanLang[13]); - oChangeWorkInterval = new JMenu(sGermanLang[14]); - oIntervalASAP = new JMenuItem(sGermanLang[15]); - oInterval1Sec = new JMenuItem(sGermanLang[16]); - oInterval2Sec = new JMenuItem(sGermanLang[17]); + oMicrocontroller = new JMenu(sLanguages[0][9]); + oStartProg = new JMenuItem(sLanguages[0][10]); + oPauseProg = new JMenuItem(sLanguages[0][11]); + oResetProg = new JMenuItem(sLanguages[0][12]); + oStepProg = new JMenuItem(sLanguages[0][13]); + oChangeWorkInterval = new JMenu(sLanguages[0][14]); + oIntervalASAP = new JMenuItem(sLanguages[0][15]); + oInterval1Sec = new JMenuItem(sLanguages[0][16]); + oInterval2Sec = new JMenuItem(sLanguages[0][17]); //Help - oHelpMenu = new JMenu(sGermanLang[18]); - oChangeLanguageMenu = new JMenu(sGermanLang[19]); - oGerLangItem = new JMenuItem(sGermanLang[20]); - oEngLangItem = new JMenuItem(sGermanLang[21]); - oManual = new JMenuItem(sGermanLang[22]); - oAbout = new JMenuItem(sGermanLang[23]); + oHelpMenu = new JMenu(sLanguages[0][18]); + oChangeLanguageMenu = new JMenu(sLanguages[0][19]); + oGerLangItem = new JMenuItem(sLanguages[0][20]); + oEngLangItem = new JMenuItem(sLanguages[0][21]); + oManual = new JMenuItem(sLanguages[0][22]); + oAbout = new JMenuItem(sLanguages[0][23]); fillList(); - setActionListeners(); setGerMnemonics(); buildMenubar(); setTheme(0); } - /** - * Sets ActionListeners to all items. - */ - private void setActionListeners() { - //File - oLoadTestFile.addActionListener(this); - oLoadProgStateItem.addActionListener(this); - oSaveProgStateItem.addActionListener(this); - oExitItem.addActionListener(this); - - //View - oDarkTheme.addActionListener(this); - oLightTheme.addActionListener(this); - - //Microcontroller - oStartProg.addActionListener(this); - oPauseProg.addActionListener(this); - oResetProg.addActionListener(this); - oStepProg.addActionListener(this); - oIntervalASAP.addActionListener(this); - oInterval1Sec.addActionListener(this); - oInterval2Sec.addActionListener(this); - - //Help - oGerLangItem.addActionListener(this); - oEngLangItem.addActionListener(this); - oManual.addActionListener(this); - oAbout.addActionListener(this); - } - /** * Sets english mnemonics. */ @@ -298,122 +257,47 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { * Change language to overhanded language array. * @param lang = language to change to. */ - private void changeLangMenuBar(String[] lang) { + public void changeLangMenuBar(int iLang) { + switch (iLang) { + case 0: { + setGerMnemonics(); + }break; + case 1: { + setEngMnemonics(); + }break; + } + //File - oFileMenu.setText(lang[0]); - oLoadTestFile.setText(lang[1]); - oLoadProgStateItem.setText(lang[2]); - oSaveProgStateItem.setText(lang[3]); - oExitItem.setText(lang[4]); + oFileMenu.setText(sLanguages[iLang][0]); + oLoadTestFile.setText(sLanguages[iLang][1]); + oLoadProgStateItem.setText(sLanguages[iLang][2]); + oSaveProgStateItem.setText(sLanguages[iLang][3]); + oExitItem.setText(sLanguages[iLang][4]); //View - oViewMenu.setText(lang[5]); - oChangeColors.setText(lang[6]); - oDarkTheme.setText(lang[7]); - oLightTheme.setText(lang[8]); + oViewMenu.setText(sLanguages[iLang][5]); + oChangeColors.setText(sLanguages[iLang][6]); + oDarkTheme.setText(sLanguages[iLang][7]); + oLightTheme.setText(sLanguages[iLang][8]); //Microcontroller - oMicrocontroller.setText(lang[9]); - oStartProg.setText(lang[10]); - oPauseProg.setText(lang[11]); - oResetProg.setText(lang[12]); - oStepProg.setText(lang[13]); - oChangeWorkInterval.setText(lang[14]); - oIntervalASAP.setText(lang[15]); - oInterval1Sec.setText(lang[16]); - oInterval2Sec.setText(lang[17]); + oMicrocontroller.setText(sLanguages[iLang][9]); + oStartProg.setText(sLanguages[iLang][10]); + oPauseProg.setText(sLanguages[iLang][11]); + oResetProg.setText(sLanguages[iLang][12]); + oStepProg.setText(sLanguages[iLang][13]); + oChangeWorkInterval.setText(sLanguages[iLang][14]); + oIntervalASAP.setText(sLanguages[iLang][15]); + oInterval1Sec.setText(sLanguages[iLang][16]); + oInterval2Sec.setText(sLanguages[iLang][17]); //Help - oHelpMenu.setText(lang[18]); - oChangeLanguageMenu.setText(lang[19]); - oGerLangItem.setText(lang[20]); - oEngLangItem.setText(lang[21]); - oManual.setText(lang[22]); - oAbout.setText(lang[23]); - } - - @Override - public void actionPerformed(ActionEvent e) { - //File - if (e.getSource() == oLoadTestFile) { - loadTestFile(); - } - if (e.getSource() == oLoadProgStateItem) { - System.out.println("Bro do you even code? load"); - //TODO - } - if (e.getSource() == oSaveProgStateItem) { - System.out.println("Bro do you even code? save"); - //TODO - System.exit(0); - } - if (e.getSource() == oExitItem) { - System.out.println("Bro do you even code? exit"); - //TODO - System.exit(0); - } - - //View - //Change to dark theme - if (e.getSource() == oDarkTheme) { - System.out.println("It's gettin dark brooo"); //TODO - setTheme(1); - oMyView.setTheme(1); - } - //Change to light theme - if (e.getSource() == oLightTheme) { - System.out.println("Death to all vampires!"); //TODO - setTheme(0); - oMyView.setTheme(0); - } - - //Microcontroller - if (e.getSource() == oStartProg) { - System.out.println("Start prog"); //TODO - } - if (e.getSource() == oPauseProg) { - System.out.println("oPauseProg"); //TODO - } - if (e.getSource() == oResetProg) { - System.out.println("oResetProg"); //TODO - } - if (e.getSource() == oStepProg) { - System.out.println("oStepProg"); //TODO - } - if (e.getSource() == oIntervalASAP) { - System.out.println("oIntervalASAP"); //TODO - } - if (e.getSource() == oInterval1Sec) { - System.out.println("oInterval1Sec"); //TODO - } - if (e.getSource() == oInterval2Sec) { - System.out.println("oInterval2Sec"); //TODO - } - - //Help - //Change language at gui. - if (e.getSource() == oGerLangItem) { - changeLangMenuBar(sGermanLang); - setGerMnemonics(); - oMyView.setLanguage(0); - //TODO rest of gui - } - if (e.getSource() == oEngLangItem) { - changeLangMenuBar(sEnglishLang); - setEngMnemonics(); - oMyView.setLanguage(1); - //TODO rest of gui - } - //Show manual - if (e.getSource() == oManual) { - //TODO - } - //Show about - if (e.getSource() == oAbout) { - //TODO - } - - controlBreakpoints(e); + oHelpMenu.setText(sLanguages[iLang][18]); + oChangeLanguageMenu.setText(sLanguages[iLang][19]); + oGerLangItem.setText(sLanguages[iLang][20]); + oEngLangItem.setText(sLanguages[iLang][21]); + oManual.setText(sLanguages[iLang][22]); + oAbout.setText(sLanguages[iLang][23]); } private void fillList() { @@ -640,75 +524,11 @@ public class GUIMenuBar extends JMenuBar implements ActionListener { } } - private void loadTestFile() { - File oFile; - //select file to open - JFileChooser oFileChooser = new JFileChooser(); - int iResponse = oFileChooser.showOpenDialog(null); - if (iResponse == JFileChooser.APPROVE_OPTION) { - oFile = new File(oFileChooser.getSelectedFile().getAbsolutePath()); - //System.out.println(oFile); - oRef = new ReadEepromFile(); - oRef.setData(oFile); - oRef.setOPCode(oRef.getData()); - oMyView.getGUITestFileTable().setData(oRef.getData()); - - setBreakpointsActionListeners(); - - oRef.readFileAndWriteToEEPROM(oMyModel.getPIC()); - oMyView.getGUIMainFrame().updateWindow(); - iTestFileLoaded = 1; - } - } - - private void setBreakpointsActionListeners() { - ArrayList data = oRef.getData(); - int iDataSize = data.size(); - ArrayList opcode = oRef.getOPCode(); - - int iOPCodeSize = opcode.size(); - //If testfile was loaded before, reset all checkboxes - if (iTestFileLoaded > 0) { - oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); - for (int i = 0; i < iDataSize; i++) { - oBreakpoints.get(i).setEnabled(false); - } - } - //Enable only checkboxes which belong to real code - for (int i = 0; i < iDataSize; i++) { - for (int j = 0; j < iOPCodeSize; j++) { - if (data.get(i).equals(opcode.get(j))) { - oBreakpoints = oMyView.getGUITestFileTable().getCheckboxes(); - oBreakpoints.get(i).setEnabled(true); - oBreakpoints.get(i).addActionListener(this); - } - } - } - bBreakpointSet = new boolean[iOPCodeSize]; - } - - private void controlBreakpoints(ActionEvent e) { - if (oRef != null) { - int iOPCode = oRef.getOPCode().size(); - if (iOPCode > 0) { - for (int i = 0; i < oBreakpoints.size(); i++) { - if (e.getSource() == oBreakpoints.get(i)) { - for (int j = 0; j < iOPCode; j++) { - if (oRef.getOPCode().get(j).equals(oRef.getData().get(i))) { - bBreakpointSet[j] = !bBreakpointSet[j]; - if (bBreakpointSet[j]) - System.out.println("Breakpoint " + j + " got set."); - else - System.out.println("Breakpoint " + j + " got reset."); - } - } - } - } - } - } - } - public boolean[] getBreakpoints() { return bBreakpointSet; } + + public ArrayList getMenuItems() { + return oMenuItems; + } } \ No newline at end of file diff --git a/src/View/GUIProgramMemory.java b/src/View/GUIProgramMemory.java new file mode 100644 index 0000000..e04ffa7 --- /dev/null +++ b/src/View/GUIProgramMemory.java @@ -0,0 +1,5 @@ +package View; + +public class GUIProgramMemory { + +} \ No newline at end of file diff --git a/src/View/GUITestFileTable.java b/src/View/GUITestFileTable.java index 1b52df6..95e6f5c 100644 --- a/src/View/GUITestFileTable.java +++ b/src/View/GUITestFileTable.java @@ -194,11 +194,12 @@ public class GUITestFileTable extends JScrollPane { * Mark line at testfiletable. * @param iLineToMark */ - public void markLine(int iLineToMark) { //TODO + public void markLine(int iLineToMark) { if (iLineToMark > -1) { - oLineInformation.get(iLineToMark).setForeground(getThemeColor()[3]); - oLineInformation.get(iLineToMark).setBackground(getThemeColor()[4]); - oLineInformation.get(iLineToMark).setBorder(BorderFactory.createLineBorder(getThemeColor()[5])); + oLineInformation.get(iLineToMark * 2).setForeground(getThemeColor()[3]); + oLineInformation.get(iLineToMark * 2).setBorder(BorderFactory.createLineBorder(getThemeColor()[3])); + oLineInformation.get(iLineToMark * 2 + 1).setForeground(getThemeColor()[3]); + oLineInformation.get(iLineToMark * 2 + 1).setBorder(BorderFactory.createLineBorder(getThemeColor()[3])); } } @@ -206,11 +207,12 @@ public class GUITestFileTable extends JScrollPane { * Unmark line at testfiletable. * @param iLineToUnmark */ - public void unmarkLine(int iLineToUnmark) { //TODO + public void unmarkLine(int iLineToUnmark) { if (iLineToUnmark > -1) { - oLineInformation.get(iLineToUnmark).setForeground(getThemeColor()[0]); - oLineInformation.get(iLineToUnmark).setBackground(getThemeColor()[1]); - oLineInformation.get(iLineToUnmark).setBorder(BorderFactory.createLineBorder(getThemeColor()[2])); + oLineInformation.get(iLineToUnmark * 2).setForeground(getThemeColor()[0]); + oLineInformation.get(iLineToUnmark * 2).setBorder(BorderFactory.createLineBorder(getThemeColor()[2])); + oLineInformation.get(iLineToUnmark * 2 + 1).setForeground(getThemeColor()[0]); + oLineInformation.get(iLineToUnmark * 2 + 1).setBorder(BorderFactory.createLineBorder(getThemeColor()[2])); } } diff --git a/src/View/GUITime.java b/src/View/GUITime.java index e25ad82..50e2269 100644 --- a/src/View/GUITime.java +++ b/src/View/GUITime.java @@ -82,6 +82,14 @@ public class GUITime extends JPanel { } } + public JComboBox getQuarzComboBox() { + return oIntervals; + } + + public JCheckBox getWDTEnableCheckbox() { + return oEnableWDT; + } + public void setRuntime(int iRuntime) { this.iRuntime = iRuntime; } diff --git a/src/View/MyView.java b/src/View/MyView.java index 6a2c6fb..7cec26c 100644 --- a/src/View/MyView.java +++ b/src/View/MyView.java @@ -1,8 +1,10 @@ package View; -import javax.swing.JPanel; +import java.util.ArrayList; -import Model.MyModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JPanel; public class MyView implements IMyView { @@ -19,8 +21,8 @@ public class MyView implements IMyView { private JPanel oGUIMainPanel; - public MyView(MyModel model) { - oGUIMenuBar = new GUIMenuBar(model, this); + public MyView() { + oGUIMenuBar = new GUIMenuBar(this); oGUIMCMenu = new GUIMCMenu(); oGUIPorts = new GUIPorts(); oGUIRamTable = new GUIRamTable(); @@ -48,13 +50,37 @@ public class MyView implements IMyView { } public void setLanguage(int iLangNr) { + oGUIMenuBar.changeLangMenuBar(iLangNr); oGUIMCMenu.setLanguage(iLangNr); oGUIRegister.setLanguage(iLangNr); oGUITestFileTable.setLanguage(iLangNr); oGUITime.setLanguage(iLangNr); } - public GUIMainFrame getGUIMainFrame() { + + + public void test() { + this.getGUITime().getQuarzComboBox(); + this.getGUIMenuBar().getMenuItems(); + } + + public ArrayList getControlButtons() { + return this.getGUIMCMenu().getControlButtons(); + } + + public ArrayList getCheckboxes() { + return this.getGUITestFileTable().getCheckboxes(); + } + + public JCheckBox getWDTEnableCheckbox() { + return this.getGUITime().getWDTEnableCheckbox(); + } + + public void updateWindow() { + this.getGUIMainFrame().updateWindow(); + } + + private GUIMainFrame getGUIMainFrame() { return this.oGUIMainFrame; } @@ -93,4 +119,8 @@ public class MyView implements IMyView { public JPanel getGUIMainPanel() { return this.oGUIMainPanel; } + + public GUIMenuBar getGUIMenuBar() { + return oGUIMenuBar; + } } \ No newline at end of file diff --git a/src/View/MyViewData.java b/src/View/MyViewData.java new file mode 100644 index 0000000..bbb0baa --- /dev/null +++ b/src/View/MyViewData.java @@ -0,0 +1,16 @@ +package View; + +import Model.Microcontroller.PIC; + +public class MyViewData { + private PIC oPIC; + + public PIC getPIC() { + return oPIC; + } + + public void setPIC(PIC oPIC) { + this.oPIC = oPIC; + } + +}