Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
More spinner stuff.
#1
I added a slinner to a Filebox.

FileboxDemo.yab ( minor changes)

Code:
#!yab

import spinner
import Filebox_spin



dir$ = "/boot/home/"

window open 100,100 to 500,500, "Demo",dir$
Window set "Demo","flags","Not-Zoomable Not-Resizable"
Filebox(10,20,350,385,"Filebox", 1, "Demo")
button 10,0,32,20, "DirUp", "..", "Demo"
FileboxDirectory("Filebox", dir$, true)


dim msg$(1)
inloop = true
while(inloop)
        n = split(message$, msg$(), "|")
    for i=1 to n
        print msg$(i)
        // Quit
        if(msg$(i) = "Demo:_QuitRequested") inloop = false

        // Button pressed and we are not in the root directory
        if(msg$(i) = "DirUp" and dir$"/") then
            t = len(dir$)-1
            while(mid$(dir$,t,1)"/")
                t = t - 1
            wend
            dir$ = left$(dir$,t)
            WINDOW SET "Demo", "Title", dir$
            FileboxDirectory("Filebox", dir$, false)
            
        endif

        // An item is invoked
        if(instr(msg$(i),"Filebox:_Invoke:")) then
            position = val(right$(msg$(i),len(msg$(i))-16))

            // if the item is a directory, then update the filebox else print the filename
            if(FileboxIsDirectory("Filebox", position,dir$)) then
                dir$ = dir$ + FileboxName$("Filebox", position) + "/"
                WINDOW SET "Demo", "Title", dir$
                FileboxDirectory("Filebox", dir$, true)
            else
                print dir$+FileboxName$("Filebox", position)
            endif
        endif
    next i
    
        sleep 0.01
wend

window close "Demo"


Filebox_spin.yab (modified Filebox.yab library file)

Code:
// Filebox is a library to have an easy access to a list of files.
// This is easier than poking around with columnboxes yourself.

// Open a new filebox from (x1,y1) to (x2,y2)
// with the id ID$, the type of scrollbar ScrollbarType on View$
export sub Filebox(x1,y1,x2,y2, ID$, ScrollbarType, View$)
    local myscrollbar
    columnbox x1,y1 to x2,y2, ID$, ScrollbarType, "resizable", View$
    columnbox column ID$, " ", 1, 20, 20, 20, "align-center"
    if(scrollbarType=1 or scrollbarType=3) myscrollbar = peek("scrollbarwidth")
    columnbox column ID$, "Name", 2, 1000, 21, x2-x1-24-myscrollbar, "align-left"
    columnbox color ID$, "Selection-Active", 220,220,250
        columnbox color ID$, "Row-Divider", 255,255,255
        new_spinner(x2-12,y2-12,12,12, ID$, View$)
        spinner_set(1,ID$)
        
    return
end sub

// Easy interface to a Filebox, simply name a directory
export sub FileboxDirectorySimple(ID$, dir$)
    FileboxDirectory(ID$,dir$,false)
    return
end sub

// return the name of the row position
export sub FileboxName$(ID$, position)
    return columnbox get$ ID$, 2, position
end sub

// return true, if the row position is a directory
export sub FileboxIsDirectory(ID$, position,dir$)
    local t$
    t$ = columnbox get$ ID$, 2, position
    print "t$ "+t$
    //if(t$ =  "__Path__="+path$+Name$"__Mime__=application/x-vnd.Be-directory") return true
    if(system("test -d \""+ dir$+t$+"\"") = 0) system("addattr -t mime BEOS:TYPE application/x-vnd.Be-directory \""+dir$+t$+"\"") : return true
    return false
end sub

// Give a directory and the following options:
// showDot: set this to true to show hidden (dot) files
export sub FileboxDirectory(ID$, dir$, showDot)
display_spinner(ID$)
spin(ID$)
    local t$
    local i
    local n
    local arraysizeDir
    local arraysizeFiles

    dim directories$(1)
    dim files$(1)

    arraysizeDir = 0
    arraysizeFiles = 0

    columnbox clear ID$
    if(showDot) then
        t$ = system$("ls --format=single-column --color=none -aF \""+dir$+"\" |sort -f")
    else
        t$ = system$("ls --format=single-column --color=none -F \""+dir$+"\" |sort -f")
    endif

    dim splitdir$(1)
    spin=1
    n = split(t$, splitdir$(), "\n")
    for i=1 to n-1
    if n=spin spin(ID$):spin=spin+10
                
                //print dir$+splitdir$(i)
                
                
                //print dir$+splitdir$(i)
                if  (right$(splitdir$(i),1)="/") then
    
               //if(system("test -d \""+ dir$+splitdir$(i)+"\"") = 0) then
                        // comment the if clause out if you want to have the direcotries "." and ".." listed
                        if(splitdir$(i)<>"./" and splitdir$(i)<>"../") then
                            arraysizeDir = arraysizeDir + 1
                            dim directories$(arraysizeDir)
                            splitdir$(i) = left$(splitdir$(i),len( splitdir$(i))-1)
                            directories$(arraysizeDir-1) = splitdir$(i)
                       endif
                // handle files
              
                else
                
                
                        arraysizeFiles = arraysizeFiles + 1
                        dim files$(arraysizeFiles)
                        if right$(splitdir$(i),1)="*" then
                            files$(arraysizeFiles-1) = left$(splitdir$(i), len(splitdir$(i)) -1)
                        elseif right$(splitdir$(i),1)="@" then
                            files$(arraysizeFiles-1) = left$(splitdir$(i), len(splitdir$(i)) -1)
                        else    
                            files$(arraysizeFiles-1) = splitdir$(i)
                        endif
                endif
    next i
    
    for i=0 to arraysizeDir-1
        FileboxAdd(ID$, directories$(i), true,dir$)
        spin(ID$)
    next i
    for i=0 to arraysizeFiles-1
        FileboxAdd(ID$, files$(i), false,dir$)
        spin(ID$)
    next i
    hide_spinner(ID$)
    return
end sub

sub FileboxAdd(ID$, Name$, IsFolder, path$)
    local maxpos

    maxpos = (columnbox count ID$) + 1
    a$=""
        
    if(IsFolder) then
        columnbox add ID$, 1, maxpos, 18, "__SmIC__="+path$+Name$
    else
        columnbox add ID$, 1, maxpos, 18, "__SmIC__="+path$+Name$
    
    //else    
        //columnbox add ID$, 1, maxpos, 18, "__Mime__=application/octet-stream"
    endif
    columnbox add ID$, 2, maxpos, 20, Name$
    columnbox select ID$, 1
    columnbox select ID$, 0
    return
end sub

[Image: Filebox-spinner.png]

Note the spinner in the lower right. It only shows as the file listing is being filled.
Reply
#2
---Error in Filebox_spin.yab, line 37: syntax error at ""+ dir$+t$+""

Sorry, don't have time to trace that fault right now.
Reply
#3
I cannot duplicate your issue. I get no errors. Any help would be appreciated.
Reply
#4
Let me copy that code from my Mac and try again.Will let you know.
Reply
#5
Nope. Still doing it.
Reply
#6
I just copied and pasted from the forum, and the program runs fine. What version of Haiku and yab are you running?
Reply
#7
I've copied this text from three browsers now on two OS's and it keeps giving me errors. Probably embedded binary codes, although I don't see anything stange in DiskProbe.

I've copied the two libraries into the demo and removed the export statements

---Error in fileboxdemo.yab, line 86: syntax error at "") = 0) then0x0a"
---Error: Program not executed
~/Desktop/fileboxdemo> yab fileboxdemo.yab
---Error in fileboxdemo.yab, line 87: syntax error at "")0x0a"
---Error: Program not executed
~/Desktop/fileboxdemo> yab fileboxdemo.yab
---Error in fileboxdemo.yab, line 87: syntax error at "")0x0a"
---Error: Program not executed
~/Desktop/fileboxdemo> yab fileboxdemo.yab
---Error in fileboxdemo.yab, line 112: syntax error at ""+dir$+""
---Error: Program not executed
~/Desktop/fileboxdemo> yab fileboxdemo.yab
---Error in fileboxdemo.yab, line 110: syntax error at ""+dir$+""

As you can see the error just keeps moving up as I try to edit. "0x0a" is computerese for linefeed, so that must be the issue here.

Do you think you can zip up the two files and give a link? Perhaps that would be a good policy for all of us. Paste the code here so people can read it, but also give a download link.
Reply
#8
(05-19-2016, 04:56 AM)clasqm Wrote: Do you think you can zip up the two files and give a link? Perhaps that would be a good policy for all of us. Paste the code here so people can read it, but also give a download link.


OK, here is a link to the zipped files. http://coquillemartialarts.com/jim/FBDemo.zip
Reply
#9
Ah I found the issue. I was not seeing it because my library was in ~/config/settings/yab. There seems to have been a problem with the escape characters not being copied. I corected the post and updated the zip with the proper file. Arg!
Reply
#10
Works perfectly now.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)
Free Web Hosting