Le samedi 28 février 2015 à 07:59 -0800, Eric S a écrit :
> Milan,
>
>
>
> I don't quite get the GetOpenFile{S<:String}(;
> filetypes::Vector{S}=String[] syntax. I thought a function call needed
> () after it rather than curly braces.
These are called parametric methods: see
http://docs.julialang.org/en/latest/manual/methods.html#parametric-methods
The idea here is that we want to accept a Vector{S} with S being any
type inheriting from String., including for example a Vector{String} and
Vector{ASCIIString} (this behavior is called covariance). Writing
filetypes::Vector{String} would not accept the second (which is called
invariance).
> In any case here are my three functions (with an extra "2" in the
> file names so I could test them without worrying about duplicating
> existing functions. It isn't clear to me whether the GetSaveFile
> should remove the filetypes keyword.
No, it's also useful to tell users what file types are supported.
Anyway, the goal is to mirror the Tk API, we don't need to worry about
every design choice they made.
> I'm only setup to test this on a Mac so I don't know how they work on
> Linux or Windows. One less than ideal issue is that on my computer the
> dialog isn't presented on top so I need to sometimes find it behind
> other windows. Something with the parent keyword might be needed, but
> I could only get that to work by creating a Tk TopLevel and even then
> it still was associated with the Terminal and not my browser or Juno.
> If you think the code as written is good enough to submit, I can try
> to do a pull request.
Yes, it looks good to me (though other will probably have more
comments). The fact that the window is not presented on top is a broader
problem which can be investigated separately.
Regards
> Many thanks,
>
>
> Eric
>
>
> function GetOpenFile2(;filetypes::Vector=String[],
> initialdir::String="",
> initialfile::String="", multiple::Bool=false, title::String="")
> args = Dict()
> if length(filetypes) > 0 args["filetypes"] = filetypes end
> if length(initialdir) > 0 args["initialdir"] = initialdir end
> if length(initialfile) > 0 args["initialfile"] = initialfile end
> args["multiple"] = multiple
> if length(title) > 0 args["title"] = title end
> tcl("tk_getOpenFile", args)
> end
>
>
>
>
> function GetSaveFile2(;filetypes::Vector=String[],
> initialdir::String="",
> initialfile::String="", title::String="")
> args = Dict()
> if length(filetypes) > 0 args["filetypes"] = filetypes end
> if length(initialdir) > 0 args["initialdir"] = initialdir end
> if length(initialfile) > 0 args["initialfile"] = initialfile end
> if length(title) > 0 args["title"] = title end
> tcl("tk_getSaveFile", args)
> end
>
>
>
>
> function
> ChooseDirectory2(;initialdir::String="",mustexist=false,title::String="")
> args = Dict()
> if length(initialdir) > 0 args["initialdir"] = initialdir end
> if length(title) > 0 args["title"] = title end
> args["mustexist"] = mustexist
> tcl("tk_chooseDirectory", args)
> end
>
>
>
>
> On Saturday, February 28, 2015 at 9:05:57 AM UTC-6, Milan
> Bouchet-Valat wrote:
>
> Le samedi 28 février 2015 à 06:58 -0800, Eric S a écrit :
>
> > Milan,
> >
> >
> > My problem was a semicolon instead of a comma in the call to
> > tcl("tk_getOpenFile", args). The function now seems to work.
> > I can work up versions for GetSaveFile and ChooseDirectory.
> > Once they seem to work, what is the process for suggesting
> > they be included in the Tk package?
>
> You can open a pull request against that package.
>
> Before that, I think you should change
> filetypes::Array=[]
> to
> filetypes::Vector=[]
> (or even
> function GetOpenFile{S<:String}(;
> filetypes::Vector{S}=String[]
> so that it is clear that a vector of strings is expected)
>
> and change
> multiple=false
> to
> multiple::Bool=false
>
>
> Regards
>
>
> > function GetOpenFile2(; filetypes::Array=[],
> > initialdir::String="",
> > initialfile::String="",
> > multiple=false, title::String="")
> > args = Dict()
> > if length(filetypes) > 0 args["filetypes"] = filetypes end
> > if length(initialdir) > 0 args["initialdir"] = initialdir
> > end
> > if length(initialfile) > 0 args["initialfile"] =
> > initialfile end
> > args["multiple"] = multiple
> > if length(title) > 0 args["title"] = title end
> > tcl("tk_getOpenFile", args)
> > end
> >
> >
> > In [46]:
> >
> >
> >
> > GetOpenFile2(filetypes=["{Text files} {.txt}","{CSV files} {.csv}"],
> > title="Select File",initialdir="/Users/ericshain/Documents/")
> >
> >
> >
> >
> > Out[46]:
> >
> > "/Users/ericshain/Documents/MATLAB/Test
> Data/CMV/11910_FP_PCR_3192010135222_MC.csv"
> >
> >
>
>
>