# HG changeset patch # User Guillaume Flandin # Date 1589987889 25200 # Node ID 6c2366242767f28925eddb78a1429362afab58cf # Parent d9551fd70fc6cf572ad55cc4b90f01beb469f0cf Improve implementation of default File menu for plots (bug #58397) * __add_default_menu__.m: Add trailing dots '...' to "Open" and "Save As" menu entries to indicate a new dialog will appear. __add_default_menu__.m (open_cb): Use openfig rather than hgload. __add_default_menu__.m (__save_as__): Use a longer, clearer file filter input to uiputfile. __add_default_menu__.m (close_cb): Use parentheses with gcbf () to match Octave conventions. diff -r d9551fd70fc6 -r 6c2366242767 scripts/plot/util/private/__add_default_menu__.m --- a/scripts/plot/util/private/__add_default_menu__.m Tue May 19 17:44:24 2020 +0900 +++ b/scripts/plot/util/private/__add_default_menu__.m Wed May 20 08:18:09 2020 -0700 @@ -45,11 +45,11 @@ ## File menu hui = uimenu (hf, "label", "&File", "tag", "__default_menu__File", ... "handlevisibility", "off"); - uimenu (hui, "label", "&Open", "callback", @open_cb, ... + uimenu (hui, "label", "&Open...", "callback", @open_cb, ... "accelerator", "o"); uimenu (hui, "label", "&Save", "callback", {@save_cb, "save"}, ... "accelerator", "s"); - uimenu (hui, "label", "Save &As", "callback", {@save_cb, "saveas"}, ... + uimenu (hui, "label", "Save &As...", "callback", {@save_cb, "saveas"}, ... "accelerator", "S"); uimenu (hui, "label", "&Close", "callback", @close_cb, ... "accelerator", "w", "separator", "on"); @@ -174,12 +174,11 @@ endfunction function open_cb (h, e) - [filename, filedir] = uigetfile ({"*.ofig", "Octave Figure File"}, ... + [filename, filedir] = uigetfile ({"*.ofig;*.fig", "Figure Files"}, ... "Open Figure"); if (filename != 0) fname = fullfile (filedir, filename); - tmphf = hgload (fname); - set (tmphf, "filename", fname); + tmphf = openfig (fname); endif endfunction @@ -198,34 +197,49 @@ endif endfunction +function __save_as__ (hf, fname = "") + def = ifelse (! isempty (fname), fname, fullfile (pwd (), "untitled.ofig")); + filter = {"*.ofig", "Octave Figure"; + "*.eps", "Encapsulated PostScript"; + "*.pdf", "Portable Document Format"; + "*.svg", "Scalable Vector Graphics"; + "*.ps", "PostScript"; + "*.gif", "GIF Image"; + "*.jpg", "JPEG Image"; + "*.png", "Portable Network Graphics Image"; + "*.tiff", "TIFF Image"}; + ## Reorder filters to have current first + [~, ~, ext] = fileparts (def); + idx = ismember (filter(:,1), ["*" tolower(ext)]) + filter = [filter(idx,:); filter(~idx,:)]; -function __save_as__ (hf, fname = "") - filter = ifelse (! isempty (fname), fname, ... - {"*.ofig", "Octave Figure File"; - "*.eps;*.pdf;*.svg;*.ps", "Vector Image Formats"; - "*.gif;*.jpg;*.png;*.tiff", "Bitmap Image Formats"}); - def = ifelse (! isempty (fname), fname, fullfile (pwd, "untitled.ofig")); - - [filename, filedir] = uiputfile (filter, "Save Figure", def); + [filename, filedir, filterindex] = uiputfile (filter, "Save Figure", def); if (filename != 0) fname = fullfile (filedir, filename); - set (gcbf, "filename", fname); - flen = numel (fname); - if (flen > 5 && strcmp (fname(flen-4:end), ".ofig")) - hgsave (hf, fname); + [~, ~, ext] = fileparts(fname); + if (filterindex > size (filter, 1)) + ## "All Files" option + if (isempty (ext)) + fmt = ""; + else + fmt = ext(2:end); + endif else - saveas (hf, fname); + fmt = filter{filterindex,1}(3:end); + if (isempty (ext)) + fname = [fname "." fmt]; + endif endif + set (hf, "filename", fname); + saveas (hf, fname, fmt); endif endfunction - function close_cb (h, e) - close (gcbf); + close (gcbf ()); endfunction - function [hax, fig] = __get_axes__ (h) ## Get parent figure fig = ancestor (h, "figure");