📄 viewedf.m
字号:
'HorizontalAlignment', 'left', ...
'String', 'Physical max :', ...
'Position', [0.52, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'FontWeight', 'bold', ...
'String', sprintf('%f', RecHead.PhysMax(Rec)), ...
'Position', [0.77, 1-linenum*yinc, 0.25, Fnthgt]);
% digital min
linenum=linenum+1;
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'String', 'Digital min :', ...
'Position', [0.02, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'FontWeight', 'bold', ...
'String', sprintf('%d', RecHead.DigMin(Rec)), ...
'Position', [0.25, 1-linenum*yinc, 0.25, Fnthgt]);
% digital max
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'String', 'Digital max :', ...
'Position', [0.52, 1-linenum*yinc, 0.45, Fnthgt]);
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'FontWeight', 'bold', ...
'String', sprintf('%d', RecHead.DigMax(Rec)), ...
'Position', [0.77, 1-linenum*yinc, 0.25, Fnthgt]);
% display min
linenum=linenum+1;
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'String', 'Display min :', ...
'Position', [0.02, 1-linenum*yinc, 0.2, Fnthgt]);
dminh = uicontrol(dlgh, ...
'Style', 'Edit', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'BackGroundColor', [1 1 1], ...
'String', sprintf('%f', RecDisp.DisplayMin(Rec)), ...
'Position', [0.25, 1-linenum*yinc, 0.20, Fnthgt+0.02]);
LocalResizeUI(dminh, [NaN 1.1 0 0]);
% display max
uicontrol(dlgh, ...
'Style', 'Text', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'String', 'Display max :', ...
'Position', [0.52, 1-linenum*yinc, 0.2, Fnthgt]);
dmaxh = uicontrol(dlgh, ...
'Style', 'Edit', ...
'Units', 'Normalized', ...
'HorizontalAlignment', 'left', ...
'BackGroundColor', [1 1 1], ...
'String', sprintf('%f', RecDisp.DisplayMax(Rec)), ...
'Position', [0.77, 1-linenum*yinc, 0.20, Fnthgt+0.02]);
LocalResizeUI(dmaxh, [NaN 1.1 0 0]);
% Plot-type
linenum=linenum+1;
ploth = uicontrol(dlgh, ...
'Style', 'CheckBox', ...
'Units', 'Normalized', ...
'String', ' Stairstep-Plot', ...
'Value', RecDisp.StairPlot(Rec), ...
'Position', [0.02, 1-linenum*yinc, 0.7, Fnthgt]);
LocalResizeUI(ploth, [1 1 0.05 0]);
% Invert plot
updownh = uicontrol(dlgh, ...
'Style', 'CheckBox', ...
'Units', 'Normalized', ...
'String', ' Plot upside down', ...
'Value', RecDisp.UpDownPlot(Rec), ...
'Position', [0.52, 1-linenum*yinc, 0.7, Fnthgt]);
LocalResizeUI(updownh, [1 1 0.05 0]);
% buttons
linenum=linenum+1;
uicontrol(dlgh, ...
'Style', 'PushButton', ...
'Units', 'Normalized', ...
'String', 'OK', ...
'Position', [0.05, 0.02, 0.3, 0.08], ...
'Callback', 'set(gco,''UserData'',''OK'');uiresume;');
uicontrol(dlgh, ...
'Style', 'PushButton', ...
'Units', 'Normalized', ...
'String', 'Apply to all', ...
'Position', [0.4, 0.02, 0.2, 0.08], ...
'Callback', 'set(gco,''UserData'',''ApplyAll'');uiresume;');
uicontrol(dlgh, ...
'Style', 'PushButton', ...
'Units', 'Normalized', ...
'String', 'Cancel', ...
'Position', [0.65, 0.02, 0.3, 0.08], ...
'Callback', 'set(gco,''UserData'',''Cancel'');uiresume;');
drawnow;
uiwait(dlgh);
changed = 0;
if ~strcmp(get(gco,'UserData'),'Cancel')
dmin = str2num(get(dminh, 'String'));
dmax = str2num(get(dmaxh, 'String'));
stplot = get(ploth, 'Value');
udplot = get(updownh, 'Value');
if (length(dmin) == 1) & (length(dmax) == 1) & (dmin < dmax)
changed = 1;
if strcmp(get(gco,'UserData'),'OK')
switch(whichbut{1})
case 'EDF'
Data.Display.EDF(Num).DisplayMin(Rec) = dmin;
Data.Display.EDF(Num).DisplayMax(Rec) = dmax;
Data.Display.EDF(Num).StairPlot(Rec) = stplot;
Data.Display.EDF(Num).UpDownPlot(Rec) = udplot;
case 'PLUGIN'
Data.Display.Plugin(Num).DisplayMin(Rec) = dmin;
Data.Display.Plugin(Num).DisplayMax(Rec) = dmax;
Data.Display.Plugin(Num).StairPlot(Rec) = stplot;
Data.Display.Plugin(Num).UpDownPlot(Rec) = udplot;
end
else
% set all files
for fnum = 1:length(Data.Display.EDF)
for rec = 1:length(Data.Display.EDF(fnum).DisplayMin)
Data.Display.EDF(fnum).DisplayMin(rec) = dmin;
Data.Display.EDF(fnum).DisplayMax(rec) = dmax;
Data.Display.EDF(fnum).StairPlot(rec) = stplot;
Data.Display.EDF(fnum).UpDownPlot(rec) = udplot;
end
end
if isfield(Data.Display, 'Plugin')
for fnum = 1:length(Data.Display.Plugin)
for rec = 1:length(Data.Display.Plugin(fnum).DisplayMin)
Data.Display.Plugin(fnum).DisplayMin(rec) = dmin;
Data.Display.Plugin(fnum).DisplayMax(rec) = dmax;
Data.Display.Plugin(fnum).StairPlot(rec) = stplot;
Data.Display.Plugin(fnum).UpDownPlot(rec) = udplot;
end
end
end
end
end
end
delete(dlgh);
if changed
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalRescale
% change range of a plot
function LocalRescale(Mode)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
whichbut = get(gcbo, 'UserData');
Rec = whichbut{2};
Num = whichbut{3};
switch(whichbut{1})
case 'EDF'
DisData = Data.Display.EDF(Num);
[DisData.DisplayMin(Rec), DisData.DisplayMax(Rec)] = ...
LocalCalcNewRange(DisData.DisplayMin(Rec), DisData.DisplayMax(Rec), ...
Mode);
Data.Display.EDF(Num) = DisData;
case 'PLUGIN'
DisData = Data.Display.Plugin(Num);
[DisData.DisplayMin(Rec), DisData.DisplayMax(Rec)] = ...
LocalCalcNewRange(DisData.DisplayMin(Rec), DisData.DisplayMax(Rec), ...
Mode);
Data.Display.Plugin(Num) = DisData;
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalRescaleAll
% change range of all plots
function LocalRescaleAll(Mode)
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF)==0
return;
end
% EDF files
for i=1:length(Data.EDF)
DisData = Data.Display.EDF(i);
[DisData.DisplayMin, DisData.DisplayMax] = ...
LocalCalcNewRange(DisData.DisplayMin, DisData.DisplayMax, Mode);
Data.Display.EDF(i) = DisData;
end
% plugins
for i=1:length(Data.Plugin)
DisData = Data.Display.Plugin(i);
[DisData.DisplayMin, DisData.DisplayMax] = ...
LocalCalcNewRange(DisData.DisplayMin, DisData.DisplayMax, Mode);
Data.Display.Plugin(i) = DisData;
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalCalcNewRange
% calculate new range for plots
function [ResMin, ResMax] = LocalCalcNewRange(PMin, PMax, Mode)
dmean = (PMin+PMax) / 2;
switch Mode
case 'up'
ResMin = (PMin - dmean)*0.5 + dmean;
ResMax = (PMax - dmean)*0.5 + dmean;
case 'down'
ResMin = (PMin - dmean)*2 + dmean;
ResMax = (PMax - dmean)*2 + dmean;
otherwise
ResMin = PMin;
ResMax = PMax;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalToggleUpdatePlugin
% Toggle flag for updating plugin-results
function LocalToggleUpdatePlugin()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
Data.UpdatePlugin = ~Data.UpdatePlugin;
if Data.UpdatePlugin
set(gcbo, 'Checked', 'on');
else
set(gcbo, 'Checked', 'off');
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalToggleShowRange
% Toggle flag for showing plot ranges
function LocalToggleShowRange()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
Data.ShowRange = ~Data.ShowRange;
if Data.ShowRange
set(gcbo, 'Checked', 'on');
else
set(gcbo, 'Checked', 'off');
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
LocalRepaint;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalToggleShowCursor
% Toggle flag for showing cursor
function LocalToggleShowCursor()
figure(findobj('Tag', 'ViewEDFFigure'));
Data = get(gcf, 'UserData');
Data.ShowCursor = ~Data.ShowCursor;
if Data.ShowCursor
set(gcbo, 'Checked', 'on');
set(gcf, 'WindowButtonDownFcn', 'viewedf MoveCursor Down');
Data.Display.Cursor = LocalDrawCursor(Data.Display);
else
delete(Data.Display.Cursor.Line(:));
delete(Data.Display.Cursor.Menu.Text);
delete(Data.Display.Cursor.Menu.Menu);
Data.Display.Cursor = [];
set(gcbo, 'Checked', 'off');
set(gcf, 'WindowButtonMotionFcn', '', ...
'WindowButtonDownFcn', '', ...
'WindowButtonUpFcn', '');
end
set(gcf, 'UserData', Data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalDrawCursor
% Show cursor
function Cursor = LocalDrawCursor(DisplayData, NewPos, TimeStr)
if nargin ~= 3
% find good placement for lines
Cursor.Pos = 0.5;
Cursor.Menu.Menu = uicontextmenu;
Cursor.Menu.Text = uimenu(Cursor.Menu.Menu, ...
'Label', '', ...
'Callback', '');
% generate lines
for i=1:length(DisplayData.Axes)
Cursor.AxesLim(i, :) = get(DisplayData.Axes(i).Plot, 'XLim');
XPos = Cursor.AxesLim(i,1) + (Cursor.AxesLim(i,2) - Cursor.AxesLim(i,1)) ...
* Cursor.Pos;
Cursor.Line(i) = line('Parent', DisplayData.Axes(i).Plot, ...
'XData', [XPos XPos], ...
'YData', get(DisplayData.Axes(i).Plot, 'YLim'), ...
'EraseMode', 'xor', ...
'UIContextMenu', Cursor.Menu.Menu, ...
'Color', [1 0.2 0.2]);
Cursor.AxesPos(i, :) = get(DisplayData.Axes(i).Plot, 'Position');
end
else
Cursor = DisplayData.Cursor;
Cursor.Pos = NewPos;
for i=1:length(DisplayData.Axes)
XPos = Cursor.AxesLim(i,1) + (Cursor.AxesLim(i,2) - Cursor.AxesLim(i,1)) ...
* Cursor.Pos;
set(Cursor.Line(i), 'XData', [XPos XPos]);
end
set(Cursor.Menu.Text, 'Label', TimeStr);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalMoveCursor
% Move cursor
function LocalMoveCursor(Option)
Data = get(gcf, 'UserData');
CurrPt = get(gcf, 'CurrentPoint');
% check if click was in axis
AxPos = Data.Display.Cursor.AxesPos;
temp = CurrPt(1) > AxPos(:,1) & CurrPt(1) < (AxPos(:,1) + AxPos(:,3)) & ...
CurrPt(2) > AxPos(:,2) & CurrPt(2) < (AxPos(:,2) + AxPos(:,4));
if ~any(temp)
return;
end
% find axis under pointer and calculate position
ax = find(temp);
Pos = get(Data.Display.Axes(ax).Plot, 'CurrentPoint');
Pos = Pos(2,1);
Pos = (Pos - Data.Display.Cursor.AxesLim(ax,1)) / (Data.Display.Cursor.AxesLim(ax,2) ...
- Data.Display.Cursor.AxesLim(ax,1));
tsec = Data.EDF(1).Head.Dur * Data.Display.EDF(1).ShowRecords(1) + ...
Data.EDF(1).Head.Dur * Data.Display.EDF(1).ShowRecords(2) * Pos;
tmin = floor(tsec/60);
tsec = rem(tsec,60);
th = floor(tmin/60);
tmin = rem(tmin, 60);
TimeStr = sprintf('%02d:%02d:%02.1f', th,tmin,tsec);
switch Option
case 'Down'
Data.Display.Cursor = LocalDrawCursor(Data.Display, Pos, TimeStr);
set(gcf, 'WindowButtonMotionFcn', 'viewedf MoveCursor Move', ...
'WindowButtonUpFcn', 'viewedf MoveCursor Up');
case 'Move'
Data.Display.Cursor = LocalDrawCursor(Data.Display, Pos, TimeStr);
case 'Up'
set(gcf, 'WindowButtonMotionFcn', '');
end
set(gcf, 'UserData', Data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalResizeUI
% resize UI control according to label size
function uihandle = LocalResizeUI(uihandle, options)
if nargin < 2
options = [1 1 0 0];
end
ext = get(uihandle, 'Extent');
pos = get(uihandle, 'Position');
if ~isnan(options(1))
pos(3) = ext(3)*options(1) + options(3);
end
if ~isnan(options(2))
pos(4) = ext(4)*options(2) + options(4);
end
set(uihandle, 'Position', pos);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LocalNumRecords
% select the number of records to be shown simultaniously
function LocalNumRecords()
Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');
if length(Data.EDF) == 0
errordlg('No EDF-File is open!', 'Error');
return;
end
Dur = LocalGetEDFInfo('Dur', Data.EDF);
[MaxDur, MDInd] = max(Dur);
answer = inputdlg({'Select number of records'}, ...
'Number of records on screen', 1, ...
{int2str(Data.Display.EDF(MDInd).ShowRecords(2))});
if (length(answer) ~= 0)
answer = str2num(answer{1});
if ~isempty(answer)
for i=1:length(Data.EDF)
Data.Display.EDF(i).ShowRecords(2) = answer * MaxDur / Dur(i);
[Data.EDF(i).Record, Data.EDF(i).Head] = ...
LocalEDFRead(Data.EDF(i).Head, Data.Display.EDF(i).ShowRecords);
end
set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -