7
7
import subprocess
8
8
import tempfile
9
9
from texture import Texture
10
+ from PIL import Image , ImageTk
10
11
11
12
class VPK :
12
13
"""
@@ -22,6 +23,7 @@ def __init__(self, sourceSDK) -> None:
22
23
"""
23
24
self .sdk = sourceSDK
24
25
self .vpk_file = None
26
+ self .thumbnails = {}
25
27
26
28
def display_vpk_contents (self , file = "" ):
27
29
"""
@@ -103,15 +105,24 @@ def populate_tree(self, files):
103
105
if subfolder in [self .tree .item (node , "text" ) for node in nodes ]:
104
106
parent = [node for node in nodes if self .tree .item (node , "text" ) == subfolder ][0 ]
105
107
else :
106
- parent = self .tree .insert ("" , "end" , text = subfolder , open = True )
108
+ parent = self .tree .insert ("" , "end" , text = subfolder , open = False )
107
109
else :
108
110
nodes = self .tree .get_children (parent )
109
111
if subfolder in [self .tree .item (node , "text" ) for node in nodes ]:
110
112
parent = [node for node in nodes if self .tree .item (node , "text" ) == subfolder ][0 ]
111
113
else :
112
- parent = self .tree .insert (parent , "end" , text = subfolder , open = True )
114
+ parent = self .tree .insert (parent , "end" , text = subfolder , open = False )
113
115
for file_name in file_list :
116
+ parent_folder_path = os .path .join (self .sdk .parent_folder , folder ) # Define parentFolder
117
+
114
118
self .tree .insert (parent , "end" , text = file_name , tags = (folder ,))
119
+ """
120
+ thumbnail = self.load_thumbnail(file_name, parent_folder_path)
121
+ if thumbnail:
122
+ self.tree.insert(parent, "end", text=file_name, image=thumbnail, tags=(folder,))
123
+ else:
124
+ self.tree.insert(parent, "end", text=file_name, tags=(folder,))
125
+ """
115
126
116
127
def open_file_in_vpk (self , event ):
117
128
"""
@@ -327,3 +338,59 @@ def extract_to(self):
327
338
destination_folder = filedialog .askdirectory (title = "Select Destination Folder" )
328
339
if destination_folder :
329
340
self .extract_and_save_file (file_path , destination_folder )
341
+
342
+ def load_thumbnail (self , file_path , parent = "" ):
343
+ """
344
+ Load the appropriate thumbnail for a given file path.
345
+
346
+ Args:
347
+ file_path (str): The path to the file.
348
+
349
+ Returns:
350
+ ImageTk.PhotoImage: The thumbnail image.
351
+ """
352
+ try :
353
+ image = None
354
+ base_path = os .path .dirname (os .path .abspath (__file__ ))
355
+
356
+ file_icons = {
357
+ ".vtf" : "VTFEdit.png" ,
358
+ ".mdl" : "hlmv.png" ,
359
+ ".tga" : None ,
360
+ ".vmf" : "hammer.png" ,
361
+ ".vcd" : "hlposer.png" ,
362
+ ".bsp" : "source.png" ,
363
+ ".txt" : "txt.png" ,
364
+ ".res" : "txt.png" ,
365
+ ".vmt" : "txt.png" ,
366
+ ".qc" : "txt.png" ,
367
+ ".smd" : "txt.png" ,
368
+ ".cfg" : "txt.png" ,
369
+ ".sln" : "Visual_Studio.png" ,
370
+ ".wav" : "audio.png" ,
371
+ ".mp3" : "audio.png" ,
372
+ ".bik" : "video.png" ,
373
+ ".bat" : "terminal.png"
374
+ }
375
+
376
+ file_name , file_extension = os .path .splitext (file_path )
377
+
378
+ if file_extension in file_icons :
379
+ if file_icons [file_extension ]:
380
+ image = Image .open (os .path .join (base_path , "icons" , file_icons [file_extension ]))
381
+ else :
382
+ image = Image .open (parent + "/" + file_path )
383
+ elif os .path .isdir (file_path ):
384
+ image = Image .open (os .path .join (base_path , "icons" , "fileexplorer.png" ))
385
+
386
+
387
+ if image :
388
+ image .thumbnail ((16 , 16 ), Image .Resampling .LANCZOS )
389
+ thumbnail = ImageTk .PhotoImage (image )
390
+ self .thumbnails [file_path ] = thumbnail
391
+ return thumbnail
392
+ except MemoryError :
393
+ print ("MemoryError: Failed to allocate bitmap for" , file_path )
394
+ except Exception as e :
395
+ print ("Error loading thumbnail:" , e )
396
+ return None
0 commit comments