From 7956d4e393ca9b2018759c39db2b1b62e1918d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9sir=C3=A9=20Werner=20Menrath?= Date: Sat, 9 Aug 2025 01:36:30 +0200 Subject: [PATCH] commit 81 --- .../custom_file_dialog.cpython-312.pyc | Bin 105614 -> 107713 bytes custom_file_dialog.py | 46 +++++++++++++++--- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/__pycache__/custom_file_dialog.cpython-312.pyc b/__pycache__/custom_file_dialog.cpython-312.pyc index 3cc7c5ab3624ad8c75f2ca45b81089e7e47bdb9c..c3208117634e45d6153f147c4f69b90afc5b7c56 100644 GIT binary patch delta 7467 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 delta 6315 zcmaJ_d3aRCvQM2^lgYl4KvtG80wF|Y5hb9=CbAg71#p-oC&`dWCh3_ZBt{a^#}xsI zwxOQ^4G`sCwjhph5b@yx-cLXUeGm0`MfB6BpaP;SqQI-_69eM?-u&^K>ZO*huCA^= zZ@z1N@>Of(fryB(5d1CukCkOVWo(OFQO+-a7pmM2;;9>oa_nt}1t+ z%%xTaSiP%Ut#>iitGfNy@J(@s@dtdv6sMWL>FXQqH=|V~k~Jg2_VcNMMBck9)n0+k z=8)5NKB21Ea@rIU?hFp9eifi2_$^xruratW;4?#K@ZcuCA3_q(Td@)z{~Szh6WQ> zSDRrC|J#~3;lAL+wJX8#AkB0U%;P84r7J4%!{g(4TE{S$ADq>(QAr5W;41{HN#J&( z4)BEaS+JWAU%wc9!9DAnOwb(6-&m|TKBZxu;9tCRbALF>Ki)hGmIiaSJPWW*j9CDQ z{Agzc{3rjR^K#Y>FRrWOT!tX>Z- zsquPcTrmg#c=wa=Ww7M+N@bE0^hnxVSHS1;W0(~MoECOf%o)=5JwZEy)5eYveRZ7F zuxL^k$79}TRxT<*{>BMN*iGsq41pdDXj~)<6EOoZDmJ{8nb2*b!5d=;_~NZPu=9K0 zehCV=eeVo#@wt0bhaDvqkCR%Js9i*DC3uNo2r07RIw?Atg9L>WMDQ(phbG7nZ6LO@ zG&zz+qWFcqneYQo+2scq&xg>?!h9vUuX`L6AWZ#~b(E z1M7ny?0ej7rp@4|K1dY1t6?x-v%e?Q@!k8ULmwV_Aj@&pS7$^ugE&6rfGr`8gj^kw z4y@zz4@|+RdG)|5WuZ(dLwUz3k zMcZ^siLa=}ubcd;>NK%xnk*yA<_V}3E>E%Fgk9YUXQ+5^AX>ilqj+mS9Plp}U)E#$ z*hjVI*pP^rVCMfM1Kb!Kd89&#zLSlF^NS=H2378Ok z?dUiYY~;#Uz55vbIOsG>TXaW>&s(fABc7)dR~Vo8)qU_laNSpPAxaOGW>OYK>nC&j z*9<(thrZ5&;SZ1$3!6(kr^tZG6djKurAK0%N9cD5k#G%5U0Q39X$^8je$ z%YNSC7(@QJo#2k(*k9(rWQxCPY#*l}!kqFfc|W|)Q(5A3sS7aW`*oYqs%L)Ulesv6 zlpbDBw*eYes|I|?x|=_CIG^u7o5epp9LLX`9R=I@kaO*^bS9liYzA>ZOwh=`IyX34 zN+YeTA9ZH)%=1I%E+q1wWQxOx^hwll7eOXD&sOJVm7dB{mP1`KXqFMxM9@sI6v6L6 z3G?ts&~NnU(S|c7is#}XokyGtg(bny&tHVl;nt9lzlDg9CE{=rBnHp@dILaZF!Q(V z5Ej*FD({ct5|{AI+(d4^)C+R?+VE^X;Zh{r%n$z-&&w|*@&5LBzVcE$jNsd5#qs~T z)Ps7I*d@Z(3lE)gIjw8trpwWA8^80i6Y}|&FURvoFDD~KJTG1D)kPhPl(V{Gy|EE@UYXqdj zp4LGyFzGXj;2e~5JQ)F_%(#zRtDw&SAC5IRCSq*m%$V#hRJ~5cC<%xO>3+x|dD$ba zd*BB6tn~zVpjgZRP?cXy;x&NY;1*v1+zl=CD;G?{V}e@ieA>WO;u{mpR4$stt!Bu+<(i1aQD-J=#6R6s;i+UjX(2MAUMI7z zCNfzxOcl?W;r1rFsPxEE<|%enF<+INiatE00XGYD9d`CMabLZj=2O#+fYZu+3~L}) zKwS`Ebn~-!30!1Jk`bUSQoeEOT}I`|Sa;Ow;sFaxlogL|D)M>RQqgIFWUHH2nkU|~ z!0oV5WTrv3NH;^Mbssv#pDxB(;bpi<{Az_QTBi**gUtgsg(jc&YVJ^|vo(E-N->+t zJJKAeuTt4@>|rMez9;w*K{rpKyfB6=K1H1?iTa5sVr0J%$P%U&tr^F*NypBpuQG(4 zrQve~M#_`334Vik#LGk)^$t;2K$OS8kG&RW2R>wi=@GN5LP0)uxYV1pt zEHsT2L(TpK*VHlMr#QF?=8Jyu;GD7@2c2R6F7vP!;u}Qp1DQOSs2v29iTv~ynJ3c? zWgH{lOrU(zAELB(;vvC4C4?pef^MD4iZO2+t5c}QG8UuKBUj4IG|z(273-{>IdzYp!^UZim+%vCabl5MhTa~NLj zMIBUZGwE7cVyEU(zQY_V%eEtAa5_!fM=%?q>&8ZR7_Qhw<=YLgLR&Hr<}0=?6UD-z zkaSxZG0D1+HtSD9NfaX=FzIQd4Coe0d6f_8h)eoQf%7Z|kH6!O649dZ!O)_>YSAYT z{Fv6!mgHDjhZXy33h`x9#}xh{t$RGdM+zUaG*0|_2V^PVn6=cg@FVRWYUk z7v4>Q8o#U1%}knUI&4+KbgRct2Z~kkwGHv&y#mOBEbVjwv;p)JOJ~COFi_OZg1{;d2Pqlis~V{hg?P5NsgWLhzb2f~Xw??-P7LprX;TYMPfZ z&u}g!mxkV=x)#0B;Kj4FNbBQ+h034a!MWC(aT*&Y&Q!zw)^(U0*l;nOK>~$-8H3(w zxioG(d{K|gpYyt}u@td^;p*G8V+^p6Y27Psqm_I_ z5Tr@32&ERLrN|W7jvd!0g%bJ*lN5nPR~>!=@p%KDsu#4DT6heSNG3iwrAM#Iui}Ts zCqOB&^@f);bpeclIGI&(Iz^%3rFCN7Gmt1gs7D9AqW!BL?zLo6xHQCPXUI2>M`eMG zLY1kWfIr8mJPwN)O;Dah;m5jzTeryXfNZun(u8I2UTt(U;K#a8#Mnh}GZcu1MKCj0 zW?`9+-y*l>kc3=&*(qB(LE9efgC)_x^^14_<25h2`n@yBFbDM>)1rzg5(b)ot=8sS}A95m2eAWUz zAznM*0&fA-iCs@)+DOr&I1B{P#I4U@V1-loWIX(zmJ-82?_~H2+9b`l_tcAL@p$lKtN@&eDttaiP}X#H3cgs*h%mK0ezQb zM~M1_;4^}&m-9(#UZ5#wi28-#AT{Y)Vp|E!=$t#4om?dIE9EzqLd_ByE+vqKDt+2w z*#xwcESCmkk=sGdIbzsa$cDATwHER$cFUkMi9)P}GK<3!b0$St*1^rz31CV8d4?Fh z4nD?fvPTDG!gO&<2fPTsienv+=*%SPv1DHhfkuKKA*vbSqWxC-@x{BL diff --git a/custom_file_dialog.py b/custom_file_dialog.py index 6d873fd..e14962b 100644 --- a/custom_file_dialog.py +++ b/custom_file_dialog.py @@ -406,15 +406,24 @@ class CustomFileDialog(tk.Toplevel): self.search_process = None def handle_path_entry_return(self, event): - """Handles the Enter key in the path entry to navigate. - Search is handled by on_path_entry_key_release. + """ + Handles the Enter key in the path entry. + - If the path is a directory, it navigates into it. + - If the path is a file, it navigates to the containing directory + and selects the file. """ path_text = self.widget_manager.path_entry.get().strip() potential_path = os.path.realpath(os.path.expanduser(path_text)) if os.path.isdir(potential_path): self.navigate_to(potential_path) - # If not a directory, do nothing on Enter. Search is triggered on key release. + elif os.path.isfile(potential_path): + directory = os.path.dirname(potential_path) + filename = os.path.basename(potential_path) + self.navigate_to(directory, file_to_select=filename) + else: + self.widget_manager.search_status_label.config( + text=f"Pfad nicht gefunden: {self.shorten_text(path_text, 50)}") def load_settings(self): self.settings = CfdConfigManager.load() @@ -811,10 +820,32 @@ class CustomFileDialog(tk.Toplevel): self.tree.focus(item_id) self.tree.see(item_id) break - else: # icon view - # This is more complex as items are in a grid. A simple selection is not straightforward. - # For now, we just navigate to the folder. - pass + elif self.view_mode.get() == "icons": + if not hasattr(self, 'icon_canvas') or not self.icon_canvas.winfo_exists(): + return + + container_frame = self.icon_canvas.winfo_children()[0] + target_path = os.path.join(self.current_dir, filename) + + for widget in container_frame.winfo_children(): + if hasattr(widget, 'item_path') and widget.item_path == target_path: + self.on_item_select(widget.item_path, widget) + + def scroll_to_widget(): + self.update_idletasks() + if not widget.winfo_exists(): return + y = widget.winfo_y() + canvas_height = self.icon_canvas.winfo_height() + scroll_region = self.icon_canvas.bbox("all") + if not scroll_region: return + + scroll_height = scroll_region[3] + if scroll_height > canvas_height: + fraction = y / scroll_height + self.icon_canvas.yview_moveto(fraction) + + self.after(100, scroll_to_widget) + break def _unbind_mouse_wheel_events(self): # Unbind all mouse wheel events from the root window @@ -992,6 +1023,7 @@ class CustomFileDialog(tk.Toplevel): container, width=item_width, height=item_height, style="Item.TFrame") item_frame.grid(row=row, column=col, padx=5, ipadx=25, pady=5) item_frame.grid_propagate(False) + item_frame.item_path = path # Store path for later reference if name == item_to_rename: self.start_rename(item_frame, path)