diff scripts/plot/uiputfile.m @ 11283:58f175d39a7a

GUI file functions
author Kai Habel <kai.habel@gmx.de>
date Sun, 21 Nov 2010 14:25:32 +0100
parents
children b9bc32327c4d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/uiputfile.m	Sun Nov 21 14:25:32 2010 +0100
@@ -0,0 +1,101 @@
+## Copyright (C) 2010 Kai Habel
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {[@var{fname}, @var{fpath}, @var{fltidx}] =} uiputfile (@var{flt}, @var{dialog_name}, @var{default_file})
+## @deftypefnx {Function File} {[@var{fname}, @var{fpath}, @var{fltidx}] =} uiputfile (@var{flt}, @var{dialog_name})
+## @deftypefnx {Function File} {[@var{fname}, @var{fpath}, @var{fltidx}] =} uiputfile (@var{flt})
+## @deftypefnx {Function File} {[@var{fname}, @var{fpath}, @var{fltidx}] =} uiputfile ())
+## Open a GUI dialog to select a file. @var{flt} contains a (list of) file
+## filter string(s) in one of the following formats:
+##
+## @table @code
+## @item "/path/to/filename.ext"
+## If a filename is given the file extension is 
+## extracted and used as filter.
+## In addtion the path is selected as current path and the filname is selected
+## as default file.
+## Example: uiputfile("myfun.m");
+##
+## @item "*.ext"
+## A single file extension. 
+## Example: uiputfile("*.ext");
+##
+## @item @{"*.ext","My Description"@}
+## A 2-column cell array containing the file extension in the 1st column and
+## a brief description in the 2nd column.
+## Example: uiputfile(@{"*.ext","My Description";"*.xyz","XYZ-Format"@});
+## @end table
+## 
+## The filter string can also contain a semicolon separated list of filter
+## extensions.
+## Example: uiputfile(@{"*.gif;*.png;*.jpg", "Supported Picture Formats"@});
+##
+## @var{dialog_name} can be used to customize the dialog title.
+## If @var{default_file} is given it is preselected in the GUI dialog. 
+## If in addtion a path is given it is also used as current path.
+## @end deftypefn
+
+## Author: Kai Habel
+
+function [retfile, retpath, retindex] = uiputfile (varargin)
+
+
+  if (nargin <= 3)
+
+    defaultvals = {"All Files(*)", #FLTK File Filter
+                   "Save File?",   #Dialog Title
+                   "",             #FLTK default file name
+                   [240, 120],     #Dialog Position (pixel x/y)
+                   "create"};
+
+    outargs = cell(5, 1);
+    for i = 1 : 5
+      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;
+      endif
+    endif
+    
+    if (nargin > 1)
+      outargs{2} = varargin{2};
+    endif
+
+    if (nargin > 2)
+      outargs{3} = varargin{3};
+    endif
+
+  else
+    error ("Number of input arguments must be less than four.");
+  endif
+
+  if (any (cellfun(@(x)strcmp (x, "fltk"), available_backends)))
+    [retfile, retpath, retindex] = __fltk_uigetfile__ (outargs{:});  
+  else
+    error ("uiputfile requires fltk backend.");
+  endif
+
+endfunction
+
+%!demo 
+%! uiputfile({"*.gif;*.png;*.jpg", "Supported Picture Formats"})