2013-10-22 81 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結構數組中的哪個元素是當前的元素,然後當用戶想要「重做」或「撤銷」時更改指針。