Связывание контекстного меню с объектом

Любой объект, размещенный в окне приложения, имеет свойство UIContextMenu, значением которого может являться указатель на имеющееся контекстное меню. Для того чтобы созданный объект, т. е. линия графика, обладал контекстным меню, следует установить свойству UIContextMenu значение указателя на меню cmLine, содержащееся в структуре handles. Построение линии в приложении myguiпроизводится или при нажатии пользователем кнопки Построить, или при выборе пункта Построить меню График. Присвойте свойству линии UIContextMenu требуемое значение во всех блоках М-файла, связанного с mygui, которые отвечают за отображение графика функции(листинг 8).

Листинг 13. Связывание контекстного меню с линией

handles.line = plot (x, у);

guidata(gcbo, handles);

% Связывание контекстного меню cmLine с линией графика

set(handles.line, 'UIContextMenu', handles.cmLine)

Запустите приложение mygui, постройте линию любым из доступных способов и убедитесь, что щелчок правой кнопкой мыши по линии приводит к появлению контекстного меню с пунктами синий, красный, зеленый. Выбор пунктов не приводит к изменению цвета линии, очевидно, что следует запрограммировать событие Callback каждого пункта.

Программирование контекстного меню

Обработка событий Callback пунктов контекстного меню производится аналогично программированию меню приложения. Установите в редакторе меню для пунктов cmLineBlue, cmLineRed, cmLineGreen соответственно вызовы:

mygui('cmLineBlue_Callback',gcbo,[ ],guidata(gcbo))

mygui('cmLineRed_Callback',gcbo,[],guidata(gcbo)) mygui('cmLineGreen_Callback',gcbo,[],guidata(gcbo))

а в файле mygui.m опишите данные подфункции в соответствии с листингом 14.

Листинг 14. Программирование контекстного меню

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

Запрограммированное и связанное с линией контекстное меню разрешает быстрый доступ пользователя к цвету линии. Осталось обеспечить согласованную работу контекстного меню со списком Цвет линии с именем pmColor. Выбор цвета из меню должен приводить не только к изменению цвета линии, но и к появлению соответствующей строки в раскрывающемся списке. В каждую подфункцию обработки события Callback пункта контекстного меню следует добавить операторы, устанавливающие нужное значение (1, 2 или 3) свойства valueраскрывающегося списка (листинг 15).

Листинг 15. Согласованная работа меню и списка выбора цвета

function cmLineBlue_Callback(hObject, eventdata, handles)

%Пользователь выбрал синий цвет линии в контекстном меню

set(handles.line,'Color', 'b')

set(handles.pmColor, 'Value', 1)

function cmLineRed_Callback(hObject, eventdata, handles)

% Пользователь выбрал красный цвет линии в контекстном меню

set(handles.line,'Color', 'r')

set(handles.pmColor, 'Value', 2)

function cmLineGreen_Callback(hObject, eventdata, handles)

% Пользователь выбрал зеленый цвет линии в контекстном меню

set(handles.line,'Color', 'g')

set(handles.pmColor, 'Value', 3)