From 28c7d3cee16c9ab7c373c472b8de19ccbb9becf9 Mon Sep 17 00:00:00 2001 From: Krish Joshi Date: Fri, 19 Jun 2026 09:55:29 +0530 Subject: [PATCH] cleaner closing --- .../__pycache__/Databases.cpython-36.pyc | Bin 9303 -> 0 bytes .../__pycache__/Databases.cpython-37.pyc | Bin 9187 -> 0 bytes src/main/Simulator/Generated/data.mo | 64 ++++++++++++++ src/main/Simulator/Generated/package.mo | 5 ++ ...ationColumnStagewiseResults.cpython-36.pyc | Bin 942 -> 0 bytes ...ationColumnStagewiseResults.cpython-37.pyc | Bin 946 -> 0 bytes .../__pycache__/DockWidget.cpython-36.pyc | Bin 4843 -> 0 bytes .../__pycache__/DockWidget.cpython-37.pyc | Bin 4847 -> 0 bytes ...DockWidgetCompoundSeparator.cpython-36.pyc | Bin 4450 -> 0 bytes ...DockWidgetCompoundSeparator.cpython-37.pyc | Bin 4454 -> 0 bytes ...ockWidgetCompressorExpander.cpython-36.pyc | Bin 5466 -> 0 bytes ...ockWidgetCompressorExpander.cpython-37.pyc | Bin 5470 -> 0 bytes ...ockWidgetDistillationColumn.cpython-36.pyc | Bin 10450 -> 0 bytes ...ockWidgetDistillationColumn.cpython-37.pyc | Bin 10387 -> 0 bytes .../DockWidgetFlash.cpython-36.pyc | Bin 3547 -> 0 bytes .../DockWidgetFlash.cpython-37.pyc | Bin 3551 -> 0 bytes .../DockWidgetMaterialStream.cpython-36.pyc | Bin 9701 -> 0 bytes .../DockWidgetMaterialStream.cpython-37.pyc | Bin 9690 -> 0 bytes .../DockWidgetMixer.cpython-36.pyc | Bin 2703 -> 0 bytes .../DockWidgetMixer.cpython-37.pyc | Bin 2707 -> 0 bytes .../DockWidgetShortcutColumn.cpython-36.pyc | Bin 5592 -> 0 bytes .../DockWidgetShortcutColumn.cpython-37.pyc | Bin 5589 -> 0 bytes .../DockWidgetSplitter.cpython-36.pyc | Bin 3338 -> 0 bytes .../DockWidgetSplitter.cpython-37.pyc | Bin 3342 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 208 -> 0 bytes src/main/python/Landing_page.py | 83 +++++++++++------- .../OMChem/__pycache__/EngStm.cpython-36.pyc | Bin 925 -> 0 bytes .../OMChem/__pycache__/EngStm.cpython-37.pyc | Bin 929 -> 0 bytes .../__pycache__/Flowsheet.cpython-36.pyc | Bin 8426 -> 0 bytes .../__pycache__/Flowsheet.cpython-37.pyc | Bin 8400 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 203 -> 0 bytes src/main/python/mainApp.py | 52 ++++++++--- src/main/python/utils/Container.py | 2 +- .../__pycache__/Bin_Phase_env.cpython-37.pyc | Bin 7968 -> 0 bytes .../ComponentSelector.cpython-37.pyc | Bin 5514 -> 0 bytes .../__pycache__/Container.cpython-37.pyc | Bin 7735 -> 0 bytes .../utils/__pycache__/Graphics.cpython-37.pyc | Bin 23723 -> 0 bytes .../utils/__pycache__/Streams.cpython-37.pyc | Bin 12744 -> 0 bytes .../__pycache__/UnitOperations.cpython-37.pyc | Bin 26682 -> 0 bytes .../utils/__pycache__/__init__.cpython-37.pyc | Bin 202 -> 0 bytes src/main/python/utils/undo_manager.py | 26 +++--- 41 files changed, 174 insertions(+), 58 deletions(-) delete mode 100644 src/main/Simulator/Databases/__pycache__/Databases.cpython-36.pyc delete mode 100644 src/main/Simulator/Databases/__pycache__/Databases.cpython-37.pyc create mode 100644 src/main/Simulator/Generated/data.mo create mode 100644 src/main/Simulator/Generated/package.mo delete mode 100644 src/main/python/DockWidgets/__pycache__/DistillationColumnStagewiseResults.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DistillationColumnStagewiseResults.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidget.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidget.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetFlash.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetMixer.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-36.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc delete mode 100644 src/main/python/DockWidgets/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/main/python/OMChem/__pycache__/EngStm.cpython-36.pyc delete mode 100644 src/main/python/OMChem/__pycache__/EngStm.cpython-37.pyc delete mode 100644 src/main/python/OMChem/__pycache__/Flowsheet.cpython-36.pyc delete mode 100644 src/main/python/OMChem/__pycache__/Flowsheet.cpython-37.pyc delete mode 100644 src/main/python/OMChem/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/Bin_Phase_env.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/ComponentSelector.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/Container.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/Graphics.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/Streams.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/UnitOperations.cpython-37.pyc delete mode 100644 src/main/python/utils/__pycache__/__init__.cpython-37.pyc diff --git a/src/main/Simulator/Databases/__pycache__/Databases.cpython-36.pyc b/src/main/Simulator/Databases/__pycache__/Databases.cpython-36.pyc deleted file mode 100644 index fd10705c5bd6eefb373435a1033636d98bcce342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9303 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 W-nKoyqv+`&sv&)f%;D!b4E=vB(*@rE diff --git a/src/main/python/DockWidgets/__pycache__/DockWidget.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidget.cpython-36.pyc deleted file mode 100644 index 853e89a98ea90d3fc358e23bf76591d89dd835bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4843 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 A1ONa4 diff --git a/src/main/python/DockWidgets/__pycache__/DockWidget.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidget.cpython-37.pyc deleted file mode 100644 index 90c3ef9da438e5e3c5bd375ae8236d0457b085e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4847 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 RHqkKt$PegWKY#3|{Xe!~vqb;^ diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-36.pyc deleted file mode 100644 index 88102aaf6c3ab49019aaeb7ebb00cbca6bf60de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5466 zcmb7ITW=f372erhE|<%Tsf#bU)KO9=HFJ^Ev;~5|a1%?m=q@|Wz zYIbN-?9wkX`cNQ1`;s3}^rb*i^rb*ipg?~?f55!<$uE8CQy$uWXO^NQ$8}H=Gdp|c ze&(F-e6!!HR)atPiSge*XIcNSPW%cezmJsu1{t?Fi>;0P$u^j$s+$}pKJIhoUOO&RqqH*=5|GSs)c z2rXO19m;+5DIHp-N6;yEDtNC>MyPepnD;upn?5s~`pjl7@;Pqd0N6@nUYFO77q9(R zE9yn6)zZaOs6qc;q-!XwM?IcAXhtd)+U>o(7kvXK47H6>v3y{3&-)D8Z&OF;=qgRiIeacWr2iayc4t`{Kgb>E~Iw-(cV18qk zG5P-Ra>kae&lkopF~SK2BS9@p?m6Jdb1+LXqy5=+>gAEi^gQe(V$oXw0y4rz6m+pr$3b$gB%2}!{!vvS3lq6hM zNK!F&&;m3lA@xjdfku{^Q5%i~I$H7~HD(=i(s}kR64#KuhLqCq7W0`4H7~HhCRJD1 z=#^)x)-3*%UZ+ky!f?jftl?{lDbgl6ve6&(TZgtuQpj?BKEG}a--g8N6j6K0)S{e0 zXpYPLM(G&@;6uPxWl)dTvy5E%{R1hhdZ7Nb)xwY$vjN zCp<_7aL{%#=qX*2qMO_oA14oT7kL>w$j_uaaoDC9D*0^^UqUv~tY(pXgJfi;Cp1e6 zeFtfxS&v5=8C)e5qbDVY zLK(t_tAMe*@P!M+MZ1hbi3eHrSazy!ksJqY{1g4G4v;y^v3;_>tJZ#f-Qp!4JhD_> z&G0hKw~R!1J-mor%wmu8;{r-^oq0H?3E*(Ze;IR_qkZzqRcqbqz3E!&>|XFICT}up z>@jOpQ|B^-c!t`~pa~A?L+?|oXMc(^qCj=!@hX&SJoGE}o+Q9PI4*^8wA1SXDIb$W zy8{G<$2N-7bD4TYoOMlW5-(fG5iP9dvc`E`61_oJ$PgG~P^YwZ2W!5;BW1#)af}75P*(v^H>088 zpet$@A@!Dw_{7gjfVP~)Xm9OKxFzCaN7MEiJn#cj^c}ISblDV_pmQPRWg6K-Z}_Hm zlfLNbAP-%uAtou1{!;C>x0H&z37>_&jC!h3G$^Q9TfRvRSgf5mJdm%N zmnW5P-1~>9N@-?`x%NDe(MG7Lv3cO5$1dY}2^d+kF90Ry;n}lnwD|v>&D40vsK|JX zQxk0DWQa3F6lWSYbm?}tpGbwsJX%}fl%o)C0qGhnj|HbqO$X_2@}LDhCvpR`8&k8`=sVBc&T*gVK4=e9aC$EXr<|l& z!osCbglO4j>CXe-$nNL zKln9fC%3%ZHgsiMsP=9P*Hv8DA^;0L zToB1ZOx!mYmHJxq*no`WJZ6kWVkwCS-Co*EmVg_G+%#`1W ze7f}fm{wwd!vV?w)+FM-R0sK;8;c{pPJTzVWh`(tNh6B*PX(8sVenrfrF7RJaItOQ zz(@_?QK3MN5Ki~YiwNcy*(^cIThFxSeDY(bpBgkpK?ljW-c1x>AQs{UeM!O%$i$4} z_X29X2|+(CB~s1uNOI(`YZ$HJ8$dQkE1M9=d&u;;r{FUo?Pt`2qPqMkvI!vT0&YXN z@dT-X@(-yYLGP2e6tv?c6*s8uZ&96k$Sgq8xo;u|$NlKbN{v3Im@gD99kg1wG!9~c z4=a^cYkv^Nd5yX5o9n2#=^6@_hcyZex{|6;MeVM@X9O-oh$N?s4p#o0vg2@KO6GP; zXEB46&Li{fV9u}jRsRLw@n5d^zUx0PsYTJ~7H7kEAg)+#AE#h_D5) zEn0SQ63Fs%SjGV0rhSl7t}CktYw8D!YicQxLZ3N$n|!*{VwY diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetCompressorExpander.cpython-37.pyc deleted file mode 100644 index 05d0157b1f7f645c8963170345f32349f3828f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5470 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 A(*OVf diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-36.pyc deleted file mode 100644 index f5eccbbbedc6c6770d773afecfe11e41fb6a36a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10450 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 EA62&DB>(^b diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc deleted file mode 100644 index a3cba32cf9f7b22d45f550f88892393fffae92d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10387 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 Y&X|&9=IkX(DzH!=w(0`|wCC*q0!^NHlmGw# diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc deleted file mode 100644 index 08f6dae1ec005b05c30be6600590a60c8efdeacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3551 zcmai1TW=e=6((m!(&%FOn#3uBth;a8?mA5tL5ppW2DX!|i>}vcoOml}Axws}HS$QK zaHzyKl%hcL1GcYyD5SP8{So~KMS&K5;%lG$7xGZ_I~-kXZ_tjw!$Y3KL-O$4v@thV zV)*{?{y*WLs*L@c29qxb_f!p>h4tmoYxPZ9< z=*|2g=*i|8Qu$2&`FzdlxpL?&|Omq<0w3m z0!Y&BN^s^ZkMU?(EpNP3#s{j18yi1NIz5uC$P`TxD|8Tbr80S}kzM^4rmlhV{y$xajo z@n=t?PCpKGqCR{4Y`c-Fu+afuqj#cPNw+amO?nQ`Or&?B=((2B(iH&4E4+l3AOC#5 zz)x3a60%hj1&5rL;3Lzbi`pmuCuYCnCx5_W*@tgCZCCK?@DVikntlAt*tDl%^W+0t zX!PvIH?btGAH`{mV z(!NX6eJdCCtqiY-x$)VS&*6phI8JPx2K^G+@?j2IzPiu4pL$GRJ1Tw0)!#UK1IIkA z=+%Mq7JA;NIEK03INz{evo4@@wCawj>XuZUq}dC?qu@|lQ-9CDn3{nD6QBV56fM09 zKz{md6;H{B5HjMwb6$Gnvxb)d@+#FT>eU?MtpC_}G5H5MMFv)Zy)WG(|08F*|1k-r z9rEn-?q!Sop3AP^ixap;dLPI{!s$o1GMBj3*HN6_%5F2h%(^~?L%#~*KElJEkO#)= zBZ`>ZMmE@`soVy2XS+B>?YeQ|+cw1P$zwhC^H+h2f)}w&jhFOf*OW4E-wkxjmK_`cYu@q_nI~(_)56K8= z2mm%9W&C%D|8wwvZstII6dg-})Sz3cLaT}ok3-qhQPM@+Qc+jeTt$9wc-!#HidS=> ze1w*M3c$F>Z}3&bg%!T)+_3lp##79xfL3vCI!pZYhyV9&ruIVNgF=T58@~hs6Gg}v zF|`T|saROY?^ebmXKe1C<++F1+yx#QSsrV!?#`pVT3+3TTvLqFv9i=18keDOLr z6WkqB-0t)er4js3*LGtWq;l;bisQ8a?I4n|NY`FRy0s<(9l%w}Prj0A3h&!Uj!iCj zk@WS4j|~fHC9j)OsYE@*?$&o0KmEbwGtbzjN2f=b#`Aw+aPnuHa_NCM#qyyu%5cQ= zp*v#QvlJJj+{ngq@Oc+#xe3k2AX=RtBEh#O#Q+k$`aKeUam3oCb{R2yZp4Pw5u;3S zX?A|VMSgX%a)C+&#I#Qk(-x0P>hIHtw)8(ET46_#1)f!l;eMYs**Y zbDwfJb5QkjOq<*RiZP7>V(R`CTMsm0TN;@jHupSABbb?EQe6JBXH zU-pAIqu64~#!eeF)D|6q^sm0Tco=&u%5aJlOB^=1_)e+f-|$Pm>(5(C?TT>{8-pNz); z9ZY#L@wgwEVm8442SpxXZf0q7-KNd;O=M%#qFwz|#wbG*Wv*PHKb}~4u^*wL4&vm{ q@TST^lD*TpH<_xz`1dl6-X~{FNiz%13MCa-s1IB9fdM)T&VK<)!;Ag^ diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-36.pyc deleted file mode 100644 index 1181e1383c6ade7f11a7b86b30dbdd47692101a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9701 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 C7+|3Q diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc deleted file mode 100644 index abc5f500643ff4b1374d2be76d13d7dccbe21e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9690 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 diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetMixer.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetMixer.cpython-36.pyc deleted file mode 100644 index 1fc6df4d381968ea631c520af79f0c7fd50ff9af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2703 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 a&NlrH1q~BjEB2hR{1QBX{w1Pz#r`jul4?)@ diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc deleted file mode 100644 index 46cd5360d5b5867522c052f10904250c6feb9be7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5589 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 diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-36.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-36.pyc deleted file mode 100644 index 6c8bb1612815b92da086c7b3cced7d0eeb6b2079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3338 zcmaJ^%WvDr8Rw9cMA4G`jN|QYTNT&>t3~59j~0bdEYdi;Sr?7#)K1(ADhQf0wkcDj zb~uV{LFq*~^%V5nQ*ZqP3iQ%zPyGw#+LQlds^EarrGBJev*a!RlIjT6yqP?AI0~dWzorg%#Vc1ui?AHBvwku^-&y= z{Osodd4iRH0U)d{<5t(^EpBt?9qT&W<&}3<*X31S!?VIYUdOY_eLjb0jW>7`PtV+J zUN2p}eD=cas0z*WqbI#?6D#ilD67vV)}%7EnKgl-C-`)OITNSv8XWY%oj8D%3Ftxf z2%JF;+}_kOy!F1{pToXE{4r6R+=7|dcBiH1US3^DdqEJVu?hlR%Y_;ZU&XowWIs-M zcDfg74o52BaisKOfe%9&4)P$0bETaFmFilQ#Lxzg>fpRu0lqn>hG4k3(B|C&5hoxT*$nq zj>A;-ew&JCGJYd^&qRKrvSDv)Ywu}$GaTkBOGWPml(ctb*2n96o5x}hM`3brHy(_V zP-XJo^H*EFTt>YC_+%Lfy}H>vboix?g|1}JnuOCo*}u0^ER!saZEbI7CPcqw8@lo) zOh(9t5z<9_n_&`}^5X9*DZ)YfL3=~jcZVW+9VS68$<5;#?O}W4f(|-s+D;yrOxqJ@ zstorxp^U?WMC95@!~^Z*N@{!b0IUynYxbUCka6OO4j$@S$oZBM1CyznBS|Sj`XKR$ zbUcDMR`QrOkFj~Im!pDhE9K&B6UlQVxTNsY&fzGP4Z`YQo<(A);w(k3$~aXWM^d0` z7HcL<1{PoqhY}sbYGdV}0$9vtpWtuJ{)DyI3Z4ztW@|`{Hcl7p@7YUi{OK)e@jun$ zGC#;(HkQec1PHu|+?b*lo!Ig->?kUY|A4zQJbiM>=YVggpNIcEXbR|5FYIQl^Aa;p;n76fklTl|b}8t0;Wj znbFEUN>agV5}ksi+NVx9D}U&S@-Nuerxx|Zexu(6)|y&H$-8knKViJGHj`YSUW&r; zISR+(i7)?sSvHpbZ`r7Bo8*^2#D`swVJ_%Y&MPB(o%W z8cO-Gk$^fBC#qq`F&FX?>3R$>%X7bsVlc^{6Oo$kwUl4P_A9Ki^V#TmPZ6^oTSbyL zsPnDe5&-5?A`>ByrKlx)n6M#b##cyeO6R`&7V`{zH``Z$RpBelIvfPc^Bk`siPE{F?F?NcKhL#04Arr&@mQMq&O;YV z%n>ezDnXa2l>uRFs{LXZ+aa-PI2?+U>&DLcOZBt$mufSULeI~3<*2RaW(Utlv91>z z%-WJ7K>wf^xzMb diff --git a/src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc deleted file mode 100644 index d23e668d213fb54f155e251436df1a9bf6d6aa4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3342 zcmaJ@&2QVt6`vs~iIOFM$8oybRt2`eYSB2&M~lKJ7O9=xtc#7;shzkLR0uR@Y*VI4 z?U0IXLFpwq^%V5ngVbC9hN9P=`WMW#C;tmupy=-nDalEVN|-lq=Dm5GdEZ;LT7}{F zw}1b~->EV7FIr4~1t5-3hjzy?IOuI>Xag38 zptp-BptnolamS2!JLOJgG>5rL`~gvGfOg0$V%r9`Iv-itub z133&L5uYCfX(+W5d0naP_^6|u6dKi)AnNtgwg~)GFJ*YoQ(iY|he48R`zVcc$qxhn zObQ@z6iILv43Bo`Sfi+&M25$zj2COykGnmRtjHmC87ERNh@{d*oRLxbSEg=*^4**5 z&DM)Vs-%^kdQsZ?CX!E7@JhCx$mA@Id##v0n4&nvFzMZ>3#~Jao0G2A7r9Q<9HAq+!n@{lQ@s!U7-(Jq= zT;nr%w4PH?zl;|jbAD3+QOMu~4^ zj}hQxB1(ZHXUww1C+rC=Un3=Dye81eNs1#>!p@{>q9Uq4p)!`otW)XCb*iJW6sP6)EP5-h1_TfX0d< zV`&?~mBpNsQXbf(&B8I7mOLj^O|5LB5TiTMc3>U_cc#-1k)+hFhLeADI&nhvY;#>@*NkJtSF=048x>$-Nj%>gPnHqI)gm zm$3X2Bd>fGYTg!n*5zvm@+wun^&1?(JjFL2g0s}?O#2-Y1}iYw25n*o{mpCiGqd%m z09zGdEA%=a?3RWokeRKFw_CgFSCH0lXDU)pv7x>K&}%m+g zg^UU(H~RaE7{4Z-_tl{*ei$e63*!9^$O$zD3|d&@HwMCto7%84bzan1q4TP=DZBSW z!mI7}w|y_nD5lpinO0H0P}GhpvVz(pFuRYzOj;)05=T-6aIH$sU3ceP+pQ|1G;V1t zMioge6Ycc8^i-EbpiF<~qKbuP3l~F{pv#nUhcG(Tm8==tqhm#{*OQUZ)xFE->CZNv zr`xfTdSSB4TWviz*?8IybU9m~*H#n}`UhFdwb4(5Fxl8f4~V8MO7~@mel1q|)_e4) y6L&B71GJuA7@ug~R+I(J({9p+c7K^E_H(Kx2`OmNT7|3PZ@F+>7Z{+mX#E$uQ&zJ8 diff --git a/src/main/python/DockWidgets/__pycache__/__init__.cpython-37.pyc b/src/main/python/DockWidgets/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 9a9342e0ca602631d608766124fc1bf4def2d30a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmZ?b<>g`kg1p(^lR@-j5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o5lV*(xTqIJKxa zrX(XVuO!AlFV&?evn(~nCAB!aB)=fW(=)_L!8x&@xFkO>HO4nFGfyF)C_gJTxg^Fp zBQ-ZOIWb2!I5W32C$S{INY_2oGp4vGIVKmVE~cQeBqKjB#w9;FJ3KQbJ+-7bCO$qh cFS8^*Uaz3?7Kcr4eoARhsvXEl#X!se0H&EcmjD0& diff --git a/src/main/python/Landing_page.py b/src/main/python/Landing_page.py index 7c0d735..f91693b 100644 --- a/src/main/python/Landing_page.py +++ b/src/main/python/Landing_page.py @@ -22,6 +22,20 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))) from src.main.ui.utils.LandingPageUI import IconPanel, GlassButton +# Import the module-level globals that Graphics.py uses so we can +# purge them before stashing the old MainApp window. +try: + from python.utils.Graphics import dock_widget_lst as _dock_widget_lst, lst as _node_lst +except Exception: + _dock_widget_lst = None + _node_lst = None + +# Keep old MainApp instances alive (hidden) so their C++ objects are never +# destroyed while something might still reference them. This prevents the +# "wrapped C/C++ object has been deleted" crashes and the "Not responding" +# freezes caused by asynchronous deleteLater() destruction. +_stashed_windows = [] + class LandingPage(QWidget): def __init__(self): super().__init__() @@ -41,7 +55,7 @@ def __init__(self): self.main_window = None self.init_ui() - # 🔥 Start background preload once the window is ready + # Start background preload once the window is ready QTimer.singleShot(500, self.preload_main_window) def paintEvent(self, event): @@ -157,13 +171,33 @@ def start_simulation(self): def _cleanup_main_window(self): - """Safely schedule the old main window for deletion.""" + """Hide the old main window and stash it so it stays alive. + + We intentionally do NOT call deleteLater(). Destroying a QMainWindow + with dozens of child widgets, dock widgets, QThreads, and scene items + triggers asynchronous C++ object destruction that races with the Qt + event loop and causes 'Not responding' freezes or outright segfaults. + Keeping the old window alive but hidden is safe and costs very little + memory (users won't create hundreds of sessions). + """ if self.main_window is not None: + # Clear the module-level global Graphics lists so the new + # MainApp starts with clean state. + try: + if _dock_widget_lst is not None: + _dock_widget_lst.clear() + if _node_lst is not None: + _node_lst.clear() + except Exception: + pass + try: self.main_window.hide() - self.main_window.deleteLater() except Exception: pass + + # Stash — prevent Python GC from collecting (and destroying) it + _stashed_windows.append(self.main_window) self.main_window = None def open_existing_project(self): @@ -184,18 +218,8 @@ def open_existing_project(self): self._cleanup_main_window() self.main_window = MainApp() - # Preserve original closeEvent - orig_close = getattr(self.main_window, "closeEvent", None) - def _wrapped_close(event): - try: - if orig_close is not None: - orig_close(event) - except Exception: - pass - if event.isAccepted(): - # Defer restoration so closeEvent finishes before we touch self.main_window - QTimer.singleShot(0, self.restore_landing_page) - self.main_window.closeEvent = _wrapped_close + # Connect to closed signal to restore landing page + self.main_window.closed.connect(lambda: QTimer.singleShot(0, self.restore_landing_page)) # Open project file self.main_window.open(file_path) @@ -241,18 +265,8 @@ def launch_main_window(self): self.main_window = MainApp() self.main_window.new_project() # reset all components for new project - # Wrap closeEvent to restore landing page - orig_close = getattr(self.main_window, "closeEvent", None) - def _wrapped_close(event): - if orig_close: - try: - orig_close(event) - except Exception: - pass - if event.isAccepted(): - # Defer restoration so closeEvent finishes before we touch self.main_window - QTimer.singleShot(0, self.restore_landing_page) - self.main_window.closeEvent = _wrapped_close + # Connect to closed signal to restore landing page + self.main_window.closed.connect(lambda: QTimer.singleShot(0, self.restore_landing_page)) # Show main window maximized self.main_window.showMaximized() @@ -324,20 +338,26 @@ def fit_canvas(self): gv.centerOn(self.main_window.scene.itemsBoundingRect().center()) self.reset_cursor() + def closeEvent(self, event): + # Explicitly quit the entire application when the landing page is closed + QApplication.quit() + event.accept() + def restore_landing_page(self): + # Drain the entire override cursor stack left by MainApp/Graphics/Container + # before showing the landing page, to prevent corrupted mouse events. + while QApplication.overrideCursor() is not None: + QApplication.restoreOverrideCursor() + # Safely clean up old main window using Qt event loop self._cleanup_main_window() - # Show landing page in full screen - # self.showFullScreen() - # Show landing page (windowed) self.show() # Make sure it is active self.activateWindow() self.raise_() - # QApplication.processEvents() def resizeEvent(self, event): # """Make sure gradient background fills screen on resize.""" @@ -391,6 +411,7 @@ def reset_cursor(self): def run(): app = QApplication(sys.argv) + app.setQuitOnLastWindowClosed(False) window = LandingPage() window.show() sys.exit(app.exec_()) diff --git a/src/main/python/OMChem/__pycache__/EngStm.cpython-36.pyc b/src/main/python/OMChem/__pycache__/EngStm.cpython-36.pyc deleted file mode 100644 index a5f5a78d54edbf3095d8208954691bfa4bb2518d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmZuv&5qMB5O$ojO|va594H446$hjowij+JLWpiz_0Sfn?4`0~MX}j-$zN?3)T%f7 zGCTkh&yp)|u_tDnZYi*iJmZYNvA_8|FWc?l=MP8RI)wZpN5h5nTbTMWm`fsvaCR`i z(HRkRNNJ5f_n(_##`F z^5pJMF0+u9o|efc%V8h|Zcinze zXp?7>jiN=?{h;z285`E0%XAS($=P&~u9C>)>g@7r$h3-C3OH7*%{JD+gIL{%&%0jl}1|Ft^-suqG;)>fSNaT$bzR;$7;MbcP zC8JdL2ANdXYhL|!H}pIRsj36miUVt8RW>6bq=@shuwqpvz@0~+>-!}Cs^?M~J_M;x zAgu8OtmTQbdAhIUKj8f(wIK0NNkE=fa_U~A7vA?#l+r+-~BSZ1dH(x@#`*>vtB z0;n+@jqMiJ@jx1uA-#cQCOd9qj`V^o9D=&D7GK*L@R?&gN9$T XF}w+T^$2g%t&;xh>cTfR6Hw$g+i1|= diff --git a/src/main/python/OMChem/__pycache__/EngStm.cpython-37.pyc b/src/main/python/OMChem/__pycache__/EngStm.cpython-37.pyc deleted file mode 100644 index d065cdbe49cbe59b75e38633a28629d907f6bb3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmZuv&5qMB5O#jrrrj164wM6jiUU#(+XsLZLfb8?9@-+6y;PR0C^p+HiIdtcsMX%+ zTkr(DQm#A%(w>-c+Oj|$dB&c6V}J8`E;^kSfg!*Ditimle&S|7JXpMgsh@(mBAjq% z3-g;hC)}Np(2F5{7zgw#2njNGIGMY=$zASkow>(-UfYtn&+EJazQzMMp;gw0@@8f- z>$S;ZcXu9ooCBEp1(-YMjxe|#tixTfuC*Q~$Yi2`JSj=&m%fZLQTk?Gh_XE$Gai|U zB{DJP$$lr6GIUE{i}aK7A@2uKO>p;W@S0w0p)@s%NE$ko;!-7F1icjcv&joO8hyOz z4WdGuTnajl650Ep@>>xbI#`G-iKFyvmSn3mGPydtx*k!jVwwSt7HhM}C7q5DNUN&* z#kvfbCC3;N(E%9Z)a|!>Vo+uOKrTA{1z0Jh@58d;Uih;zZ?JS(hNmBHpIpMb9K)BLMm2w~U= zq&|VL#uKoXXU^vNu9E+N$4hEM;-8X$yjzhE9o2weJ4Om&|8hC~>x$u0o&rdtwn$~u zJw^mj6F3^%Ev(~%UsHG6Zg` a5!7r9Z^B-EfVb&Z$>6-Y@U6`R6!{GsKGA;w diff --git a/src/main/python/OMChem/__pycache__/Flowsheet.cpython-36.pyc b/src/main/python/OMChem/__pycache__/Flowsheet.cpython-36.pyc deleted file mode 100644 index 403908454a768b95e85e13338761e6e1d26a9347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8426 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 QZor`^KAmCOCCV!Q54v6(XaE2J diff --git a/src/main/python/OMChem/__pycache__/Flowsheet.cpython-37.pyc b/src/main/python/OMChem/__pycache__/Flowsheet.cpython-37.pyc deleted file mode 100644 index 1a76d038e28a0024879ddc63d20ad4d3dc2b92a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8400 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 XUe;Y;u7$I?O6T9DGfcZgdE@^9#wSG% diff --git a/src/main/python/OMChem/__pycache__/__init__.cpython-37.pyc b/src/main/python/OMChem/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index ee871fe9fc0cbb339e17e6bff3d9a052a620ac4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmZ?b<>g`kg1p(^lR@-j5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o5lH*(xTqIJKxa zrX(XVuO!AlFV&?evn(~nCAB!aB)=fW(=)_L!8x&@xFkO>HO4nFGfyF)C_gJTxg^Fp zBQ-ZOIWb2!I5W32C$S{INY_2oGp4vGIVKmVE~cQeBqKjB#@`pDFeW}eGcU6wK3=b& V@)n0pZhlH>PO2TqHN`;8003mOIa2@t diff --git a/src/main/python/mainApp.py b/src/main/python/mainApp.py index 943dee3..5ffc177 100644 --- a/src/main/python/mainApp.py +++ b/src/main/python/mainApp.py @@ -88,6 +88,7 @@ def eventFilter(self, obj, event): MainApp class is responsible for all the main App Ui operations ''' class MainApp(QMainWindow,ui): + closed = pyqtSignal() global compound_selected ''' Initializing the application @@ -446,20 +447,27 @@ def simulate(self, mode): Terminate the current running simulation ''' def terminate(self): - os.chdir(self.container.flowsheet.root_dir) - if self.thrd: + try: + os.chdir(self.container.flowsheet.root_dir) + except Exception: + pass + + if self.thrd and self.thrd.is_alive(): thread_id = self.thrd.ident - # print('____________________Going to terminate simulation thread with Thread ID:',thread_id,'____________________') - # print('____________________Going to terminate the new process created for omc____________________') - self.container.flowsheet.process.terminate() - print('____________________New process created for omc is terminated.____________________') - res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, ctypes.py_object(SystemExit)) + if hasattr(self.container, 'flowsheet') and hasattr(self.container.flowsheet, 'process') and self.container.flowsheet.process: + try: + self.container.flowsheet.process.terminate() + print('____________________New process created for omc is terminated.____________________') + except Exception: + pass + + res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(thread_id), ctypes.py_object(SystemExit)) self.textBrowser.append("["+str(self.current_time())+"]Simulation Terminated.") self.container.disableInterfaceforSimulation(False) - # print('____________________Simulation thread terminated____________________') if res > 1: - ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0) - # print('Exception raise (Thread termination) failure') + ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(thread_id), 0) + + self.thrd = None ''' Resets the zoom level to default scaling @@ -626,10 +634,13 @@ def new(self): if hasattr(cls, "counter"): cls.counter = 1 - # Clear old dock widgets + # Clear old dock widgets — guard against already-deleted C++ objects for dw in dock_widget_lst: - dw.hide() - dw.setParent(None) + try: + dw.hide() + dw.setParent(None) + except RuntimeError: + pass # C++ object already deleted — safe to skip dock_widget_lst.clear() # Reset compound selection @@ -893,6 +904,21 @@ def _clear_selected_compounds_panel(self): self.selectedElementsList.clear() self._sel_status_label.setText("No compounds selected") + def closeEvent(self, event): + # Stop simulation thread if still running + try: + if self.thrd and self.thrd.is_alive(): + self.terminate() + except Exception: + pass + + # Drain any override cursors this window left on the stack + while QApplication.overrideCursor() is not None: + QApplication.restoreOverrideCursor() + + event.accept() + self.closed.emit() + from python.utils.ComponentSelectorWindow import ComponentSelectorWindow def select_compounds(self): diff --git a/src/main/python/utils/Container.py b/src/main/python/utils/Container.py index 8d9e51c..c8c7f02 100644 --- a/src/main/python/utils/Container.py +++ b/src/main/python/utils/Container.py @@ -44,7 +44,7 @@ def __init__(self, msgbrowser, graphicsView): self.result = [] self.graphics = Graphics(self, self.graphicsView) self.scene = self.graphics.get_scene() - print(f"[DEBUG] Scene check → container.scene id={id(self.scene)}, graphics.scene id={id(self.graphics.scene)}") + print(f"[DEBUG] Scene check -> container.scene id={id(self.scene)}, graphics.scene id={id(self.graphics.scene)}") # ----------------- Utility ----------------- diff --git a/src/main/python/utils/__pycache__/Bin_Phase_env.cpython-37.pyc b/src/main/python/utils/__pycache__/Bin_Phase_env.cpython-37.pyc deleted file mode 100644 index 35c475347e9d648eba6b037c714c9a51d0083cec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7968 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 Bi8=rP diff --git a/src/main/python/utils/__pycache__/Graphics.cpython-37.pyc b/src/main/python/utils/__pycache__/Graphics.cpython-37.pyc deleted file mode 100644 index 7426c2f37e273090d7ced4d23a01a15c9830beea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23723 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 mcNNGo=>MP&l diff --git a/src/main/python/utils/__pycache__/Streams.cpython-37.pyc b/src/main/python/utils/__pycache__/Streams.cpython-37.pyc deleted file mode 100644 index 18287f2738c4168915904c1e6160b007bfeeea8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12744 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 diff --git a/src/main/python/utils/__pycache__/UnitOperations.cpython-37.pyc b/src/main/python/utils/__pycache__/UnitOperations.cpython-37.pyc deleted file mode 100644 index ac4d056eafba99f43c8d9275bafb2550ee9ddffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26682 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 K@!}Z%?fyTp^ew{x diff --git a/src/main/python/utils/__pycache__/__init__.cpython-37.pyc b/src/main/python/utils/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index a687f516160798ff2dd101365e3c778011b86f98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZ?b<>g`kg1p(^lR@-j5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o5lb*(xTqIJKxa zrX(XVuO!AlFV&?evn(~nCAB!aB)=fW(=)_L!8x&@xFkO>HO4nFGfyF)C_gJTxg^Fp zBQ-ZOIWb2!I5W32C$S{INY_2oGp4vGIVKmVE~cQeBqKjBrnDq8r#L1)J~J<~BtBlR Wpz;=nO>TZlX-=vg$T7u0%m4s5oH=R$ diff --git a/src/main/python/utils/undo_manager.py b/src/main/python/utils/undo_manager.py index ace2a8d..9becf75 100644 --- a/src/main/python/utils/undo_manager.py +++ b/src/main/python/utils/undo_manager.py @@ -1,4 +1,4 @@ -import os +import os import pickle import copy @@ -17,11 +17,11 @@ def _load_stack(file_name): with open(file_path, "rb") as f: stack = pickle.load(f) if not isinstance(stack, list): - print(f"[DEBUG] UndoManager._load_stack → invalid format (not list)") + print(f"[DEBUG] UndoManager._load_stack -> invalid format (not list)") return [] return stack except Exception as e: - print(f"[DEBUG] UndoManager._load_stack failed → {e}") + print(f"[DEBUG] UndoManager._load_stack failed -> {e}") return [] @@ -37,32 +37,32 @@ def _save_stack(file_name, stack): pickle.dump(stack, f) os.replace(tmp_path, file_path) except Exception as e: - print(f"[DEBUG] UndoManager._save_stack failed → {e}") + print(f"[DEBUG] UndoManager._save_stack failed -> {e}") # -------------------- Public Interface -------------------- # def push(file_name, data): """Push snapshot to Undo/Redo stack (file-based).""" if data is None: - print(f"[DEBUG] UndoManager.push → skipped (None data)") + print(f"[DEBUG] UndoManager.push -> skipped (None data)") return stack = _load_stack(file_name) stack.append(copy.deepcopy(data)) _save_stack(file_name, stack) - print(f"[DEBUG] UndoManager.push → file='{file_name}', stack_size={len(stack)}") + print(f"[DEBUG] UndoManager.push -> file='{file_name}', stack_size={len(stack)}") def pop(file_name): """Pop last snapshot from stack and return it.""" stack = _load_stack(file_name) if not stack: - print(f"[DEBUG] UndoManager.pop → file='{file_name}', stack empty") + print(f"[DEBUG] UndoManager.pop -> file='{file_name}', stack empty") return None data = stack.pop() _save_stack(file_name, stack) - print(f"[DEBUG] UndoManager.pop → file='{file_name}', remaining={len(stack)}") + print(f"[DEBUG] UndoManager.pop -> file='{file_name}', remaining={len(stack)}") return data @@ -70,7 +70,7 @@ def get_last_list(file_name): """Return top snapshot from the stack (without popping).""" stack = _load_stack(file_name) if not stack: - print(f"[DEBUG] UndoManager.get_last_list → {file_name} empty") + print(f"[DEBUG] UndoManager.get_last_list -> {file_name} empty") return None return copy.deepcopy(stack[-1]) @@ -86,9 +86,9 @@ def clean_file(file_name): try: if os.path.exists(file_path): os.remove(file_path) - print(f"[DEBUG] UndoManager.clean_file → cleared {file_name}") + print(f"[DEBUG] UndoManager.clean_file -> cleared {file_name}") except Exception as e: - print(f"[DEBUG] UndoManager.clean_file failed → {e}") + print(f"[DEBUG] UndoManager.clean_file failed -> {e}") # -------------------- Optional Convenience -------------------- # @@ -100,11 +100,11 @@ def reset_all(): def swap_to_redo(): """ - Utility: move current snapshot from Undo → Redo. + Utility: move current snapshot from Undo -> Redo. Used automatically during Undo operations. """ last = get_last_list("Undo") if last: push("Redo", last) pop("Undo") - print("[DEBUG] UndoManager.swap_to_redo → moved top from Undo → Redo") + print("[DEBUG] UndoManager.swap_to_redo -> moved top from Undo -> Redo")