Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gui.doc
Скачиваний:
19
Добавлен:
22.11.2018
Размер:
261.63 Кб
Скачать
  1. Пример графического интерфейса пользователя

На рисунке 8 приведён пример графического интерфейса программы выполненной в ходе лабораторной работы.

Рис. 8. Графический интерфейс пользователя

  1. Листинг исходного кода приложения

5.1 Листинг guiformj.m

function varargout = guiform(varargin)

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @guiform_OpeningFcn, ...

'gui_OutputFcn', @guiform_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin & isstr(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

function guiform_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

optionsList = [ handles.rbMarkNone handles.rbMarkSq handles.rbMarkCirc ];

optionsValues = [ 'n' 's' 'o' ];

colors = ['b', 'r', 'g' ];

setappdata(hObject, 'colors', colors);

setappdata(hObject, 'optionsList', optionsList);

setappdata(hObject, 'optionsValues', optionsValues);

function varargout = guiform_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function BtnPlot_Callback(hObject, eventdata, handles)

plotDialog(hObject, handles)

set(hObject,'Enable','off');

set(handles.clear,'Enable','on');

function clear_Callback(hObject, eventdata, handles)

plotClearDialog(hObject, handles)

function chbxGridX_Callback(hObject, eventdata, handles)

set(handles.axMain, 'XGrid', mapValue(hObject, 'Value'))

function chbxGridY_Callback(hObject, eventdata, handles)

set(handles.axMain, 'YGrid', mapValue(hObject, 'Value'))

function rbMarkCirc_Callback(hObject, eventdata, handles)

switchMarkers(hObject, handles);

changeMarker(handles)

function rbMarkNone_Callback(hObject, eventdata, handles)

switchMarkers(hObject, handles);

changeMarker(handles)

function rbMarkSq_Callback(hObject, eventdata, handles)

switchMarkers(hObject, handles);

changeMarker(handles)

function editTitle_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function editTitle_Callback(hObject, eventdata, handles)

title(get(hObject, 'String'))

function editTitle_ButtonDownFcn(hObject, eventdata, handles)

title(get(handles.editTitle, 'String'))

function pmColor_Callback(hObject, eventdata, handles)

changeColor(handles)

function widthSlider_CreateFcn(hObject, eventdata, handles)

usewhitebg = 1;

if usewhitebg

set(hObject,'BackgroundColor',[.9 .9 .9]);

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function widthSlider_Callback(hObject, eventdata, handles)

try

thePlot = getappdata(handles.axMain, 'plot');

set(thePlot, 'LineWidth', round(get(hObject, 'value')))

catch

;

end

function figure1_CreateFcn(hObject, eventdata, handles)

function pmColor_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function cmLineBlue_Callback(hObject, eventdata, handles)

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

changeColor(handles)

function cmLineRed_Callback(hObject, eventdata, handles)

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

changeColor(handles)

function cmLineGreen_Callback(hObject, eventdata, handles)

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

changeColor(handles)

function mnGraphPlot_Callback(hObject, eventdata, handles)

plotDialog(hObject, handles)

set(handles.mnGraphPlot,'Enable','off');

set(handles.mnGraphClear,'Enable','on');

set(handles.BtnPlot,'Enable','off');

set(handles.clear,'Enable','on');

function mnGraphClear_Callback(hObject, eventdata, handles)

plotClearDialog(hObject, handles)

function mnGraph_Callback(hObject, eventdata, handles);

function userFunction_CreateFcn(hObject, eventdata, handles)

if ispc

set(hObject,'BackgroundColor','white');

else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

5.2 Листинг changeColor.m

function changeColor(handles)

try

thePlot = getappdata(handles.axMain, 'plot');

colors = getappdata(handles.figure1, 'colors');

set(thePlot, 'Color', colors(get(handles.pmColor, 'value')))

catch

;

end

5.3 Листинг changeMarker.m

function changeMarker(handles)

try

thePlot = getappdata(handles.axMain, 'plot');

markers = getappdata(handles.figure1, 'optionsValues');

set(thePlot, 'Marker', markers(getMarkerValue(handles)))

catch

;

end

5.4 Листинг getMarkerValue.m

function markerValue = getMarkerValue(handles)

markerValue = getSelectedOption(getappdata(handles.figure1, 'optionsList'));

5.5 Листинг getSelectedOption.m

function index = getSelectedOption(hObjectList)

index = 1;

for counter = (1 : length(hObjectList))

if get(hObjectList(counter), 'value') == 1

index = counter;

return

end

end

5.6 Листинг drawPlot.m

function drawPlot(xVector, yVector, handles)

newPlot = plot(xVector, yVector);

setappdata(handles.axMain, 'plot', newPlot);

changeMarker(handles)

changeColor(handles)

title(get(handles.editTitle, 'String'))

set(newPlot, 'LineWidth', round(get(handles.widthSlider, 'value')))

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

5.7 Листинг mapValue.m

function retval = mapValue(hObject, property)

if get(hObject, property)

retval = 'On';

else

retval = 'Off';

end

5.8 Листинг switchOptions.m

function switchOptions(hObjectList, hObject, handles)

for counter = hObjectList(1, 1:length(hObjectList))

if counter == hObject

set(hObject, 'value', 1);

else

set(counter, 'value', 0);

end

end

5.9.1 Листинг plotDialog.m

function plotDialog(hObject, handles)

default = 'По умолчанию';

fromFile = 'Из файла';

userInput = 'Пользовательский ввод';

errorMessage = 'Неизвестный формат файла с данными';

errorCaption = 'Ошибка!';

dialogCaption = 'Источник данных';

dataFile = 'files\data.mat';

result = questdlg(dialogCaption, 'mygui', default, fromFile, userInput, default);

if strcmp(result, fromFile)

try

load(dataFile);

catch

errordlg(errorMessage, errorCaption)

end

arraySize = size(mymatrix);

if(ndims(mymatrix) ~= 2 | ~isnumeric(mymatrix))

errordlg(errorMessage, errorCaption)

end

x = mymatrix;

y = exp(-mymatrix.^2);

end

if strcmp(result, userInput)

try

x = [ -2.5 : 0.6 : 2 ];

y = sym(get(handles.userFunction, 'String'));

y = subs(y);

catch

errordlg('Ошибка разбора пользовательской функции', errorCaption)

end

end

if strcmp(result, default)

x = [ -2.5 : 0.6 : 2 ];

y = exp(-x.^2);

end

drawPlot(x, y, handles)

set(handles.axMain, 'YGrid', mapValue(handles.chbxGridY, 'Value'))

set(handles.axMain, 'XGrid', mapValue(handles.chbxGridX, 'Value'))

5.9.2 Листинг plotClearDialog.m

function plotClearDialog(hObject, handles)

yesButton = 'Да';

noButton = 'Нет';

message = 'Очистить график';

button = questdlg(message, 'mygui', yesButton, noButton, noButton);

if strcmp(button, yesButton)

cla

set(handles.axMain, 'YGrid', mapValue(handles.chbxGridY, 'Value'))

set(handles.axMain, 'XGrid', mapValue(handles.chbxGridX, 'Value'))

set(handles.mnGraphClear,'Enable','off');

set(handles.mnGraphPlot,'Enable','on');

set(handles.clear,'Enable','off');

set(handles.BtnPlot,'Enable','on');

end