Ooops
January 15, 2021, 06:07:49 PM

Author Topic: [bb] File Requester by elias_t [ 1+ years ago ]  (Read 532 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] File Requester by elias_t [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : File Requester
Author : elias_t
Posted : 1+ years ago

Description : A simple file requester easy to implement in your applications.

Code :
Code: BlitzBasic
  1. ;File requester
  2. ;
  3. ;activePath$ = the active path
  4. ;
  5. ;selectedFile$ = the selected file
  6. ;
  7. ;drv$(drive) = the selected drive
  8. ;
  9. ;-------------------------------------------------------------------------
  10.  
  11. Graphics3D 400, 300, 32, 2
  12.  
  13. SetBuffer BackBuffer()
  14.  
  15. cam=CreateCamera ()
  16.  
  17. light=CreateLight()
  18.  
  19. CameraClsColor cam,40, 40, 55
  20.  
  21.  
  22. ;------------------------GLOBALS------------------------------------------
  23. Global filter$=".txt"   ;file filter
  24.  
  25. Dim drctrs$(0)                  ;temp directories
  26. Dim realfiles$(0)               ;temp files
  27. Dim txtfiles$(0)                ;temp filtered files
  28. Dim drv$(0)                             ;drives
  29.  
  30. Global selectedFile$    ;current selected file $
  31. Global directories              ;temp no. of directories
  32. Global drvcnt                   ;no. of drives
  33. Global check$                   ;$ to compare with filter$
  34. Global txtcount                 ;temp no. of files in a directory
  35. Global drd1                             ;start position of directories to display
  36. Global drd2                             ;end    -"-      -"-
  37. Global trd1                             ;start position of files to display
  38. Global trd2                             ;end    -"-      -"-
  39. Global dscr                             ;how many more directories then 20
  40. Global tscr                             ;how many more files then 20
  41. Global drive                    ;current drive no.
  42. Global mouseInUse               ;if mouse in use
  43. Global activePath$              ;the active path
  44.  
  45. ;----------------OPEN FILE------------------------------------------------
  46. count_drives
  47.  
  48. ;--------------------loop
  49. While Not  KeyHit(1)
  50.  
  51. RenderWorld
  52.  
  53. ;highlight ^up--------------------------------------------------
  54. If MouseY()>47 And MouseY()<60 And MouseX()>144 And MouseX()<170
  55. Color 64,80,110
  56. Rect 144,47,27,12
  57.  If MouseDown(1)
  58.                                 ypos=0
  59.                                 ypos2=0
  60.         actualpos=0
  61.         pos=1
  62.         While (pos>actualpos)And (pos<Len(activePath$))
  63.                 actualpos=pos
  64.                 pos=Instr(activePath$,"",pos+1)
  65.         Wend
  66.         If (actualpos=1) Then actualpos=0
  67.         activePath$ =Left$(activePath$,actualpos)
  68.        
  69.         read_dir(drive,activePath$)
  70.         selectedFile$=""       
  71.   Repeat
  72.   Until (Not MouseDown(1))
  73.  EndIf
  74. EndIf
  75.  
  76. ;----------------------
  77. Color 56,78,112:Rect 0,30,40,270:Rect 0,0,400,29
  78. Line 41,45,400,45:Line 41,60,400,60
  79. Line 384,46,384,300:Line 180,46,180,300:Line 196,46,196,300
  80. Color 50,50,75:Rect 41,30,359,15
  81. Color 50,255,100:Line 40,0,40,300:Line 0,29,400,29
  82.  
  83. Text 1,2,"Select"
  84. Text 1,13,"Drive"
  85. Text 50,7,"Open file     Back"
  86. Text 50,48,"Directories                    File:"
  87. Text 50,32,"Path: "
  88. Color 255,255,80:Text 80,32,drv$(drive)+":"+Left$(activePath$, 60)
  89. Text 145,48,"|^Up|":Text 233,48,Left$(selectedFile$,29)
  90. Text 200,7,"Filter: "+filter$
  91.  
  92. ;-----------------------------------------------------
  93.  
  94. If MouseY()<29
  95.                 ;----open file --------------------
  96.                 If MouseX()>50 And MouseX()<100
  97.                 Color 50,170,170:Rect 47,3,51,23,0
  98.  
  99. ;Put here your action when open file is pressed
  100. ;                       If MouseDown(1) Then .....
  101.  
  102.                 EndIf
  103.                 ; back--------------------------
  104.                 If MouseX()>113 And MouseX()<145
  105.                 Color 50,170,170:Rect 113,3,36,23,0
  106.                
  107.                         If MouseDown(1) Then End                       
  108.                                
  109.                 EndIf          
  110.                
  111.         EndIf
  112.  
  113. ;------------------------------------------------
  114.  
  115. For t=0 To drvcnt-1
  116.  
  117. Color 50,255,100
  118. Text 16,35+t*20,drv$(t)+":"
  119.  
  120.         If MouseX()<29 And MouseY()>30+t*20
  121.        
  122.                 If MouseY()<30+(drvcnt)*20 And MouseDown(1)
  123.        
  124.                 drive=(MouseY()-30)/20
  125.                 read_dir(drive,"")
  126.                 activePath$=""
  127.                 selectedFile$=""
  128.                 ypos=0
  129.                 ypos2=0
  130.        
  131.         EndIf
  132. ;--------------------------------------------- 
  133.         If MouseY()>30+(drvcnt)*20 Then Goto skip
  134.        
  135.         Color 50,170,170       
  136.         Rect 1,31+t*20,38,20,0
  137.        
  138.                 If t=0 Then Goto skip
  139.                 Color 56,78,112
  140.                 Rect 1,31+(t-1)*20,38,20,0
  141. .skip
  142.                 EndIf
  143.         Next
  144.  
  145.  
  146. ;--------------------scroller position----------------------------
  147. If directories>19              
  148.         FlushMouse()
  149.         If MouseDown(1)
  150.                 If (MouseX()>179 And MouseX()<197 Or (mouseInUse And MouseX()<210 And MouseX()>160)) And MouseY()>61 And MouseY()<299
  151.  
  152.                 ypos = MouseY()-6
  153.                 If dscr >0
  154.                 met#=227.0/dscr
  155.                 drd1=Floor ((ypos-56)/met#)
  156.                 drd2=drd1+19
  157.                 EndIf
  158.                 mouseInUse =True
  159.  
  160.                 EndIf
  161.         Else
  162.                 mouseInUse =False
  163.         EndIf
  164.  
  165.         Color 255,234,99
  166.         If (ypos<62) Then ypos=62
  167.         If (ypos>284) Then ypos=284
  168.         Rect 182,ypos,13,15            
  169.        
  170. EndIf
  171.        
  172.         ;-----------------------------------------------       
  173. If txtcount>19
  174.         FlushMouse()
  175.         If MouseDown(1)
  176.                 If (MouseX()>383 And MouseX()<400 Or (mouseInUse And MouseX()<400 And MouseX()>360)) And MouseY()>61 And MouseY()<292
  177.                         ypos2 = MouseY()-6
  178.                         If tscr >0
  179.                         met2#=227.0/tscr
  180.                         trd1=Floor ((ypos2-56)/met2#)
  181.                         trd2=trd1+19
  182.                         EndIf
  183.                 mouseInUse =True
  184.                 EndIf
  185.         Else
  186.                 mouseInUse =False
  187.         EndIf
  188.  
  189.         Color 255,234,99
  190.         If (ypos2<62) Then ypos2=62
  191.         If (ypos2>284) Then ypos2=284
  192.         Rect 386,ypos2,13,15
  193.  
  194. EndIf
  195.  
  196. ;---------------------file selector highlight-----------------------------
  197.  
  198.         If MouseY()>60 And MouseX()>50 And MouseX()<180 And (Not mouseInUse)
  199.        
  200.         Color 64,80,110
  201.         Rect 49,49+((MouseY()-46)/12)*12,130,11
  202.                         FlushMouse()
  203.                         If MouseDown(1)
  204.                        
  205.                         dirmet=(drd1+Floor ((MouseY()-46)/12))-1
  206.                        
  207.                         If dirmet<directories
  208.                                 activePath$ = activePath$+drctrs$(dirmet)+""
  209.                                 read_dir(drive,activePath$)
  210.                                 ypos=0
  211.                                 ypos2=0
  212.                                 selectedFile$=""
  213.                         EndIf
  214.  
  215.                         Repeat
  216.                         Until Not MouseDown(1)
  217.                        
  218.                 EndIf
  219.                
  220.         EndIf
  221. ;--------------------------------------------------------------------  
  222.  
  223. If MouseY()>60 And MouseX()>202 And MouseX()<384 And (Not mouseInUse)
  224.        
  225.         Color 64,80,110
  226.         Rect 201,49+((MouseY()-46)/12)*12,182,11
  227.  
  228.  
  229.                 If MouseDown(1)
  230.  
  231.                 filmet=(trd1+Floor ((MouseY()-46)/12))-1
  232.                 If filmet<txtcount
  233.                         selectedFile$ = txtfiles$(filmet)
  234.                 EndIf
  235.  
  236.                         Repeat
  237.                         Until Not MouseDown(1)
  238.                        
  239.                 EndIf
  240.        
  241.         EndIf
  242.  
  243. ;----------display Directories and Files-------------
  244. display
  245.        
  246. Flip
  247.  
  248. Wend
  249.  
  250.  
  251.  
  252. ;---------------F U N C T I O N S ----------------------------------------
  253.  
  254.  
  255.  
  256. ;---------------READ_DIR--------------------------------------------------
  257.  
  258. Function read_dir(drive,path$)
  259. directories=0
  260. drf=0
  261. drd1=0
  262. trd1=0
  263.  
  264. dir=ReadDir (drv$(drive)+":"+path$)
  265.  
  266. Repeat
  267.  
  268. file$=NextFile$(dir)
  269.  
  270. If file$="" Then Goto readfiles
  271.         drf=drf+1
  272.         If file$<>".." And file$<>"."
  273.         If FileType (drv$(drive)+":"+path$+file$)=2 Then directories=directories+1
  274.         EndIf
  275. Forever
  276.  
  277. ;--------readfiles---------------------------
  278.  
  279. .readfiles
  280. Dim drctrs$(directories)
  281. Dim realfiles$(drf-directories)
  282.  
  283.  
  284. tempdir=(ReadDir(drv$(drive)+":"+path$))
  285. tmpcnt=0
  286.  
  287. For i=0 To drf-1
  288. temp$=NextFile$(tempdir)
  289.  
  290.         If FileType (drv$(drive)+":"+path$+temp$)=2
  291.         If temp$<>".." And temp$<>"."
  292.         drctrs$(tmpcnt)=temp$
  293.         tmpcnt=tmpcnt+1
  294.         EndIf
  295.        
  296.         Else realfiles$(i-tmpcnt)=temp$
  297.         EndIf
  298.                
  299. Next
  300.  
  301. ; sort directories
  302. For i=1 To directories-1
  303. If Upper(drctrs$(i))< Upper(drctrs$(i-1))
  304.  temp$ = Upper(drctrs$(i-1))
  305.  drctrs$(i-1) = Upper(drctrs$(i))
  306.  drctrs$(i) =Upper$(temp$)
  307.  For j= i-1 To 1 Step -1
  308.   If drctrs$(j)<drctrs$(j-1)
  309.    temp$ = Upper(drctrs$(j-1))
  310.    drctrs$(j-1) = Upper(drctrs$(j))
  311.    drctrs$(j) =Upper(temp$)
  312.   Else
  313.    j=1
  314.   EndIf
  315.  Next
  316. EndIf
  317. Next
  318.  
  319. ; get only filtered files
  320. tmpcnt=0
  321. For i=0 To drf-directories-1
  322.  check$ = Right(realfiles$(i),4)
  323.  check$=Lower(check$)
  324.  If (check$=filter$)
  325.   tmpcnt=tmpcnt+1
  326.  EndIf         
  327. Next
  328. txtcount =tmpcnt
  329.  
  330. Dim txtfiles$(txtcount+21)
  331. tmpcnt=0
  332. For i=0 To drf-directories-1
  333.  check$ = Right(realfiles$(i),4)
  334.  check$=Lower(check$)
  335.  If (check$=filter$)
  336.   txtfiles$(tmpcnt)=realfiles$(i)
  337.   tmpcnt=tmpcnt+1
  338.  EndIf         
  339. Next
  340.  
  341. ; sort filtered files
  342. For i=1 To txtcount-1
  343. If Upper(txtfiles$(i)) < Upper(txtfiles$(i-1))
  344.  temp$ = Upper(txtfiles$(i-1))
  345.  txtfiles$(i-1) = Upper(txtfiles$(i))
  346.  txtfiles$(i) =temp$
  347.  For j= i-1 To 1 Step -1
  348.   If txtfiles$(j)<txtfiles$(j-1)
  349.    temp$ = Upper(txtfiles$(j-1))
  350.    txtfiles$(j-1) = Upper(txtfiles$(j))
  351.     txtfiles$(j) = Upper(temp$)
  352.   Else
  353.    j=1
  354.   EndIf
  355.  Next
  356. EndIf
  357. Next
  358.  
  359. ;---if more then 20 directories or files calculate how many more
  360.         If directories<20
  361.                 drd2=directories-1
  362.                                 Else drd2=19:dscr=directories-20
  363.                         EndIf
  364.  
  365.         If txtcount<20
  366.                 trd2=txtcount-1
  367.                         Else trd2=19:tscr=txtcount-20
  368.                 EndIf
  369.  
  370. End Function
  371.  
  372. ;-------------------DISPLAY-----------------------------------------------
  373. Function display()
  374.  
  375. Color 70,255,220
  376. For i=drd1 To drd2
  377. Text 50,60+12*(i-drd1), Left$(drctrs$(i),25)
  378. Next
  379.  
  380. Color 180,180,230
  381. For i=trd1 To trd2
  382. Text 205,60+12*(i-trd1), Left$(txtfiles$(i),35)
  383. Next
  384.  
  385. End Function
  386.  
  387. ;---------COUNT_DRIVES----------------------------------------------------
  388. Function count_drives()
  389. drvcnt=0
  390.  
  391. Dim drv$(14)
  392.    
  393.         For i=Asc("C") To Asc("K")
  394. ;For i=Asc("c") To Asc("k");put this if the above doesn't work
  395.         fr=ReadDir(Chr$(i)+":")
  396.         If fr<>0 Then
  397.         drv$(drvcnt)=Chr$(i)
  398.         drvcnt=drvcnt+1
  399.         CloseDir(fr)
  400.         EndIf
  401.         Next
  402.  
  403. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal