Mercurial > octave-nkf
diff scripts/plot/uiputfile.m @ 13697:0f8ff98929b2
Allow a toolkit to provide its own version of UI dialogs.
* plot/modules.mk (plot_PRIVATE_FCN_FILES): Add __file_filter__.m,
__is_function__.m, __uigetdir_fltk__.m, __uigetfile_fltk__.m,
__uiputfile_fltk__.m.
* plot/uigetdir.m: Rework to remove FLTK-specific stuffs and allow use of
toolkit-provided dialogs. Fallback to FLTK dialogs.
* plot/uigetfile.m: Likewise.
* plot/uiputfile.m: Likewise.
* plot/private/__fltk_file_filter__.m: Assumes input is now always a cell
array of strings.
* plot/private/__file_filter__.m: New file.
* plot/private/__is_function__.m: Likewise.
* plot/private/uigetdir_fltk__.m: Likewise.
* plot/private/uigetfile_fltk__.m: Likewise.
* plot/private/uiputfile_fltk__.m: Likewise.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Thu, 13 Oct 2011 16:46:28 +0100 |
parents | cb8fd692b600 |
children | 72c96de7a403 |
line wrap: on
line diff
--- a/scripts/plot/uiputfile.m Thu Oct 13 11:05:30 2011 -0400 +++ b/scripts/plot/uiputfile.m Thu Oct 13 16:46:28 2011 +0100 @@ -55,42 +55,68 @@ function [retfile, retpath, retindex] = uiputfile (varargin) - if (exist("__fltk_uigetfile__") != 3) - error ("uiputfile: fltk graphics toolkit required"); + defaulttoolkit = get (0, "defaultfigure__graphics_toolkit__"); + funcname = ["__uiputfile_", defaulttoolkit, "__"]; + functype = exist (funcname); + if (! __is_function__ (funcname)) + funcname = "__uiputfile_fltk__"; + if (! __is_function__ (funcname)) + error ("uiputfile: fltk graphics toolkit required"); + elseif (! strcmp (defaulttoolkit, "gnuplot")) + warning ("uiputfile: no implementation for toolkit `%s', using `fltk' instead", + defaulttoolkit); + endif endif if (nargin > 3) print_usage (); endif - defaultvals = {"All Files(*)", #FLTK File Filter - "Save File?", #Dialog Title - pwd, #FLTK default file name - [240, 120], #Dialog Position (pixel x/y) - "create"}; + defaultvals = {cell(0, 2), # File Filter + "Save File", # Dialog Title + "", # Default file name + [240, 120], # Dialog Position (pixel x/y) + "create", + pwd}; # Default directory - outargs = cell(5, 1); - for i = 1 : 5 + outargs = cell(6, 1); + for i = 1 : 6 outargs{i} = defaultvals{i}; endfor if (nargin > 0) file_filter = varargin{1}; - outargs{1} = __fltk_file_filter__ (file_filter); - if (ischar (file_filter)) - outargs{3} = file_filter; + [outargs{1}, outargs{3}, defdir] = __file_filter__ (file_filter); + if (length (defdir) > 0) + outargs{6} = defdir; endif + else + outargs{1} = __file_filter__ (outargs{1}); endif if (nargin > 1) - outargs{2} = varargin{2}; + if (ischar (varargin{2})) + outargs{2} = varargin{2}; + elseif (! isempty (varargin{2})) + print_usage (); + endif endif if (nargin > 2) - outargs{3} = varargin{3}; + if (ischar (varargin{3})) + [fdir, fname, fext] = fileparts (varargin{3}); + if (! isempty (fdir)) + outargs{6} = fdir; + endif + if (! isempty (fname) || ! isempty (fext)) + outargs{3} = strcat (fname, fext); + endif + elseif (! isempty (varargin{3})) + print_usage (); + endif endif - [retfile, retpath, retindex] = __fltk_uigetfile__ (outargs{:}); + [retfile, retpath, retindex] = feval (funcname, outargs{:}); endfunction