📄 viewedf.m
字号:
'FontWeight', 'bold', ... 'String', sprintf('%d', RecHead.DigMax(Rec)), ... 'Position', [0.77, 1-linenum*yinc, 0.25, Fnthgt]);% display minlinenum=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 maxuicontrol(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-typelinenum=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 plotupdownh = 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]);% buttonslinenum=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 endenddelete(dlgh);if changed set(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data); LocalRepaint;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalRescale% change range of a plotfunction 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;endset(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);LocalRepaint;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalRescaleAll% change range of all plotsfunction LocalRescaleAll(Mode)Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF)==0 return;end% EDF filesfor 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% pluginsfor 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;endset(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);LocalRepaint;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalCalcNewRange% calculate new range for plotsfunction [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');endset(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalToggleShowRange% Toggle flag for showing plot rangesfunction LocalToggleShowRange()Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');Data.ShowRange = ~Data.ShowRange;if Data.ShowRange set(gcbo, 'Checked', 'on');else set(gcbo, 'Checked', 'off');endset(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', '');endset(gcf, 'UserData', Data);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalDrawCursor% Show cursorfunction 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'); endelse 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 cursorfunction LocalMoveCursor(Option)Data = get(gcf, 'UserData');CurrPt = get(gcf, 'CurrentPoint');% check if click was in axisAxPos = 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 positionax = 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', '');endset(gcf, 'UserData', Data);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LocalResizeUI% resize UI control according to label sizefunction uihandle = LocalResizeUI(uihandle, options)if nargin < 2 options = [1 1 0 0];endext = get(uihandle, 'Extent');pos = get(uihandle, 'Position');if ~isnan(options(1)) pos(3) = ext(3)*options(1) + options(3);endif ~isnan(options(2)) pos(4) = ext(4)*options(2) + options(4);endset(uihandle, 'Position', pos); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalNumRecords% select the number of records to be shown simultaniouslyfunction LocalNumRecords()Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF) == 0 errordlg('No EDF-File is open!', 'Error'); return;endDur = 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); LocalRepaint(0); endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalFileInfo% display information about current filefunction LocalFileInfo(Update)if nargin == 0 Data=get(findobj('Tag', 'ViewEDFFigure'), 'UserData'); if length(Data.EDF)==0 errordlg('No EDF-File is open!', 'Error'); return; end dlgh = dialog(... 'Name', 'EDF-File information', ... 'CloseRequestFcn', 'set(gcf,''UserData'',''Cancel'');uiresume;'); dlgpos = get(dlgh, 'Position'); set(dlgh, 'Position', [dlgpos(1),dlgpos(2),450,250]); fnthght = LocalGetFontHeight; Local.EDFNames = {}; % get filenames for i = 1:length(Data.EDF) Local.EDFNames = {Local.EDFNames{:}, Data.EDF(i).Head.FileName}; Local.EDFInfo{i,1} = Data.EDF(i).Head.Version; Local.EDFInfo{i,2} = Data.EDF(i).Head.PID; Local.EDFInfo{i,3} = Data.EDF(i).Head.RID; Local.EDFInfo{i,4} = sprintf('%02d/%02d/%02d', Data.EDF(i).Head.TO([3 2 1])); Local.EDFInfo{i,5} = sprintf('%02d:%02d:%02d', Data.EDF(i).Head.TO([4 5 6])); Local.EDFInfo{i,6} = sprintf('%d', Data.EDF(i).Head.NS); Local.EDFInfo{i,7} = sprintf('%d', Data.EDF(i).Head.NRec); end Local.poph = uicontrol(dlgh, ... 'Style', 'Popup', ... 'Units', 'Normalized', ... 'String', Local.EDFNames, ... 'Value', 1, ... 'Position', [0.05, 0.9, 0.9, 0.1], ... 'Callback', 'viewedf FileInfo Update'); LocalResizeUI(Local.poph, [NaN 1.1 0 0]); %HeaderVersion num = 1; yinc = (1 - 4*fnthght) / 8; ystart = 0.9; uicontrol(dlgh, ... 'Style', 'Text', ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -