2013-10-22 46 views
3

我想在我制作的GUI中创建一个“撤消”功能。我的想法是创建一个对象的副本,当设置发生更改时,该对象将存储我的GUI的所有设置。要做到这一点,如果有一个“主”回调会很方便,只要用户触发任何其他GUI回调就会触发。这样的回调是否存在?谢谢!在MATLAB中是否有触发其他回调的回调?

+0

我不知道“回调回调”。但是你有没有考虑将所有设置存储在存储其历史记录的地方?每当你更新这个calss时,它就会存储它们,并且能够撤销你对它做出的任何更新。通过这种方式,您可以使更新功能成为设置的属性,而不是GUI。 – Shai

+2

仅供参考:在MATLAB中有一个未公开的撤消“框架”,您可以使用它作为发明这一全新功能的替代方案:http://undocumentedmatlab.com/blog/uiundo-matlab-undocumented-undo-redo-经理/ – sebastian

+0

以及我可以想到一个函数,使用该图的guidata;这个函数可以提取元素的所有属性并保存。在每个回调中,您可以调用此函数并将guidata作为参数。但我相当确信,如果有“很多”元素,这会降低GUI。 –

回答

1

我不知道像您所描述的回调,但如果您将设置存储在结构数组中,则可以返回到之前的设置。

这里是我的建议:

1)与命令的结构喜欢这家店的GUI设置:

gui_settings.button1=1;

gui_settings.button2 = 0;

2)存储在GUI中的设置结构你的gui图的用户数据

set(gcf, 'UserData', gui_settings) 3) “StoreGuiSettings”,将读取所有的GUI设置,然后将它们存回的UserData创建一个回调,该命令会是这个样子:

gui_settings = get(gcf, 'UserData');

gui_settings(end+1) = gui_settings(end); %copy the last group of settings

gui_settings(end).button1 = get(h_button1, 'value'); % read button 1's setting

% read all the other settings ...

set(gcf, 'UserData', gui_settings) % Store the settings in UserData

4)修改您的其他回调以在某个时间点调用“StoreGuiSettings”回调以启用撤消操作。5)制作一个“Undo”回调,从UserData中检索gui设置,删除结构中的最后一个元素array gui_settings(end) = [];,并将gui_settings存储回UserData。

如果您不想选择“重做”选项,那么删除最后的设置即可。如果你想“重做”,那么你将不得不保持一个指针,指向gui_settings结构数组中的哪个元素是当前的元素,然后当用户想要“重做”或“撤销”时更改指针。