rst
rst

Reputation: 2724

MATLAB callback when saving figure file

I need to check programmaticall whether a fig (guide) file was saved or not, so bascially I need a callback when:

myfigure_SavedCallback(hObject, varargin)

I didn't find anything online, so I guess it is not possible, can someone verify this?

SOLVED:

So I just found out how to do this by myself. In the guide editor you can open the Toolbar Editor and change all the icon-buttons a gui usually has. There is somewhere the field Clicked Callback. You can enter the regular callback-formalism, e.g.

mygui('uipushtool2_ClickedCallback',hObject,eventdata,guidata(hObject))

And add this callback to the code. In that particular callback, a UD-flag for saved/unsaved can be handled if necessary.

Upvotes: 0

Views: 454

Answers (3)

rst
rst

Reputation: 2724

So I just found out how to do this by myself. In the guide editor you can open the Toolbar Editor and change all the icon-buttons a gui usually has. There is somewhere the field Clicked Callback. You can enter the regular callback-formalism, e.g.

mygui('uipushtool2_ClickedCallback',hObject,eventdata,guidata(hObject))

And add this callback to the code. In that particular callback, a UD-flag for saved/unsaved can be handled if necessary.

Upvotes: 0

SamuelNLP
SamuelNLP

Reputation: 4136

To check if the image was saved manually:

You can check if the Filename field of the figure is empty or not. As soon as the figure is saved it get the path of the saved figure.

Run the code and save the figure manually yourself.

clc
close all
clear

img = imread('cameraman.tif');

h = figure(1);
imshow(img);

while(isempty(h.FileName))
    clc
    disp('not saved yet');
    pause(0.3)
end

disp('saved in:');
disp(h.FileName);

this will give you:

not saved yet
saved in:
C:\Users\samuel\Desktop\fig.fig
>> 

Upvotes: 0

Sam Roberts
Sam Roberts

Reputation: 24127

No, as far as I know there is no callback for figures (or other HG components) that executes when they are saved.

However, I think you might be able to work around this. You can create an object of your own that executes code when it is saved - something like this:

classdef mytest < handle    
    methods         
        function sobj = saveobj(obj)
            sobj = obj;
            disp('saved') % Put your code here
        end        
    end    
end

Then you can create one of these objects, and store it in, for example, the UserData property of the figure. When the figure gets saved, so does the object, and whatever code you would like will get executed.

I imagine that there may be some ways in which the above workaround might be defeated by various things that the user could do. But with some care, it might be enough for your needs.

Upvotes: 2

Related Questions