📄 viewedf.m
字号:
if nargin == 0 % determine which plugin to remove if length(Data.EDF)==0 errordlg('No EDF-File is open!', 'Error'); return; end if length(Data.Plugin) == 0 errordlg('No Plugins are loaded!', 'Error'); return; end dlgh = dialog(... 'Name', 'Remove Plugin', ... 'CloseRequestFcn', 'set(gcf,''UserData'',''Cancel'');uiresume;'); dlgpos = get(dlgh, 'Position'); set(dlgh, 'Position', [dlgpos(1),dlgpos(2),200,100]); PlugNames = {}; % get Plugin names for i = 1:length(Data.Plugin) PlugNames = {PlugNames{:}, [Data.Plugin(i).Label, ' (File ', ... upper(Data.Plugin(i).Name), ')']}; end poph = uicontrol(dlgh, ... 'Style', 'Popup', ... 'Units', 'Normalized', ... 'String', PlugNames, ... 'Value', 1, ... 'Position', [0.05, 0.5, 0.9, 0.35]); % buttons uicontrol(dlgh, ... 'Style', 'PushButton', ... 'Units', 'Normalized', ... 'String', 'Remove', ... 'Position', [0.1, 0.05, 0.3, 0.3], ... 'Callback', 'set(gco,''UserData'',''OK'');uiresume;'); uicontrol(dlgh, ... 'Style', 'PushButton', ... 'Units', 'Normalized', ... 'String', 'Cancel', ... 'Position', [0.6, 0.05, 0.3, 0.3], ... 'Callback', 'set(gco,''UserData'',''Cancel'');uiresume;'); drawnow; uiwait(dlgh); whichplugin = get(poph, 'Value'); selbutton = get(gco,'UserData'); delete(dlgh); if strcmp(selbutton,'Cancel') return endenddelete(Data.Display.PluginMenu.Sub(whichplugin));for i = whichplugin:length(Data.Plugin)-1 Data.Display.PluginMenu.Sub(i) = Data.Display.PluginMenu.Sub(i+1); set(Data.Display.PluginMenu.Sub(i), 'UserData', i); Data.Display.Plugin(i) = Data.Display.Plugin(i+1); Data.Plugin(i) = Data.Plugin(i+1);endind = length(Data.Plugin) - 1;if ind == 0 Data.Plugin = []; Data.Display.Plugin = []; Data.Display.PluginMenu.Sub = [];else Data.Plugin = Data.Plugin(1:ind); Data.Display.Plugin = Data.Display.Plugin(1:ind); Data.Display.PluginMenu.Sub = Data.Display.PluginMenu.Sub(1:ind);endset(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);LocalRepaint;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LocalPluginMenu% Call plugin for setupfunction LocalPluginMenu()ind = get(gcbo, 'UserData');Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');[Data.Plugin(ind).EDF, Data.Plugin(ind).UserData] = ... feval(Data.Plugin(ind).Name, Data.EDF(Data.Plugin(ind).EDFFile), ... Data.Plugin(ind).UserData, 'Menu');% Uncomment to reset display properties after a call of the plugin-menu%Data.Display.Plugin(ind).ShowSignals = 1:Data.Plugin(ind).EDF.Head.NS;%Data.Display.Plugin(ind).DisplayMin = Data.Plugin(ind).EDF.Head.PhysMin;%Data.Display.Plugin(ind).DisplayMax = Data.Plugin(ind).EDF.Head.PhysMax;%Data.Display.Plugin(ind).StairPlot = ...% zeros(1, Data.Plugin(ind).EDF.Head.NS);%Data.Display.Plugin(ind).UpDownPlot = ...% zeros(1, Data.Plugin(ind).EDF.Head.NS);set(findobj('Tag', 'ViewEDFFigure'), 'UserData',Data);LocalRepaint(0);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalChangeRecord% Change displayed pagefunction LocalChangeRecord(increment, changetype)Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF) == 0 errordlg('No EDF-File is open!', 'Error'); return;endDur = LocalGetEDFInfo('Dur',Data.EDF);[MDur, MDInd] = max(Dur);FLen = max(LocalGetEDFInfo('FileDur', Data.EDF));[MFLen, MFInd] = max(FLen);RelInc = round(ones(size(Dur)) * max(Dur) ./ Dur);Inc = increment * RelInc;for i = 1:length(Data.EDF) switch changetype case 0 % incremental Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) ... + Inc(i) * Data.Display.EDF(MDInd).ShowRecords(2); case 1 % absolute Data.Display.EDF(i).ShowRecords(1) = Inc(i); endend% check whether we are moving to fartemp = Data.Display.EDF(MDInd).ShowRecords(1);if temp < 0 for i = 1:length(Data.EDF) Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) ... - temp * RelInc(i); endendtemp = sum(Data.Display.EDF(MFInd).ShowRecords(1:2)) - ... Data.EDF(MFInd).Head.NRec; if temp > 0 temp = ceil(temp / RelInc(MFInd)); for i = 1:length(Data.EDF) Data.Display.EDF(i).ShowRecords(1) = Data.Display.EDF(i).ShowRecords(1) - ... temp * RelInc(i); endend for i=1:length(Data.EDF) temp = sum(Data.Display.EDF(i).ShowRecords(1:2)) - ... Data.EDF(i).Head.NRec; whichrec(1) = Data.Display.EDF(i).ShowRecords(1); if temp > 0 % do not read to much data whichrec(2) = Data.Display.EDF(i).ShowRecords(2) - temp; if (whichrec(2) < 0) whichrec(2) = 0; end [temp, Data.EDF(i).Head] = LocalEDFRead(Data.EDF(i).Head, whichrec); for j = 1:Data.EDF(i).Head.NS Data.EDF(i).Record{j} = zeros(Data.Display.EDF(i).ShowRecords(2) * ... Data.EDF(i).Head.SPR(j)); if ~isempty(temp) Data.EDF(i).Record{j}(1:length(temp{j})) = temp{j}; end end else [Data.EDF(i).Record, Data.EDF(i).Head] = ... LocalEDFRead(Data.EDF(i).Head, Data.Display.EDF(i).ShowRecords); endendset(findobj('Tag', 'ViewEDFFigure'), 'UserData', Data);LocalRepaint(1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalHSroll% Goto recordfunction LocalHScrollData = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');MaxVal = max(LocalGetEDFInfo('FileDur',Data.EDF));MaxDur = max(LocalGetEDFInfo('Dur', Data.EDF));pos = get(gcbo, 'Value');LocalChangeRecord(round(pos*MaxVal/MaxDur), 1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalGotoRecord% Goto recordfunction LocalGotoRecord(Pos)Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF)==0 errordlg('No EDF-File is open!', 'Error'); return;end[temp, ind] = max(LocalGetEDFInfo('Dur', Data.EDF));if (nargin == 0) answer = inputdlg({'Select record'}, 'Change start record', 1, ... {int2str(Data.Display.EDF(ind).ShowRecords(1))}); if (length(answer) ~= 0) answer = str2num(answer{1}); if ~isempty(answer) LocalChangeRecord(answer, 1); end endelse Pos = round(Pos); if Pos >= 0 LocalChangeRecord(Pos, 1); endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalGotoSecond% Goto secondfunction LocalGotoSecond(Pos)Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF)==0 errordlg('No EDF-File is open!', 'Error'); return;end[temp, ind] = max(LocalGetEDFInfo('Dur', Data.EDF));if (nargin == 0) answer = inputdlg({'Select second'}, 'Change start time', 1, ... {int2str(round(Data.Display.EDF(ind).ShowRecords(1) / ...
Data.EDF(ind).Head.Dur))}); if (length(answer) ~= 0) answer = str2num(answer{1}); if ~isempty(answer) LocalChangeRecord(answer / Data.EDF(ind).Head.Dur, 1); end endelse Pos = round(Pos / Data.EDF(ind).Head.Dur); if Pos >= 0 LocalChangeRecord(Pos, 1); endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LocalRecordProp% display channel propertiesfunction LocalRecordProp()Data = get(findobj('Tag', 'ViewEDFFigure'), 'UserData');if length(Data.EDF)==0 errordlg('No EDF-File is open!', 'Error'); return;endwhichbut = get(gcbo, 'UserData');Rec = whichbut{2};Num = whichbut{3};switch whichbut{1} case 'EDF' RecHead = Data.EDF(Num).Head; RecDisp = Data.Display.EDF(Num); DataType = 'EDF File'; TypeString = 'Filename :'; OptString = [Data.EDF(Num).Head.FILE.Name '.' Data.EDF(Num).Head.FILE.Ext]; case 'PLUGIN' RecHead = Data.Plugin(Num).EDF.Head; RecDisp = Data.Display.Plugin(Num); DataType = 'Plugin'; TypeString = 'Name :'; OptString = Data.Plugin(Num).Label;enddlgh = dialog(... 'Name', 'Channel Information', ... 'CloseRequestFcn', 'set(gcf,''UserData'',''Cancel'');uiresume;');dlgpos = get(dlgh, 'Position');set(dlgh, 'Position', [dlgpos(1),dlgpos(2),350,300]);Fnthgt = LocalGetFontHeight;yinc = 0.085;% general informationlinenum=1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', [ 'Record read from ' DataType], ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt ]);% filenamelinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', TypeString, ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', OptString, ... 'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);% labellinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', 'Label : ', ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', RecHead.Label(Rec,:), ... 'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);% Transducerlinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', 'Transducer :', ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', RecHead.Transducer(Rec, :), ... 'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);% Prefilterlinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', 'Prefilter :', ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', RecHead.PreFilt(Rec, :), ... 'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);% samples per recordslinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', 'Samples per record :', ... 'Position', [0.02, 1-linenum*yinc, 0.96, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', sprintf('%d', RecHead.SPR(Rec)), ... 'Position', [0.35, 1-linenum*yinc, 0.63, Fnthgt]);% physical minlinenum=linenum+1;uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'String', 'Physical min :', ... 'Position', [0.02, 1-linenum*yinc, 0.45, Fnthgt]);uicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... 'HorizontalAlignment', 'left', ... 'FontWeight', 'bold', ... 'String', sprintf('%f', RecHead.PhysMin(Rec)), ... 'Position', [0.25, 1-linenum*yinc, 0.25, Fnthgt]);% physical maxuicontrol(dlgh, ... 'Style', 'Text', ... 'Units', 'Normalized', ... '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 minlinenum=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 maxuicontrol(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', ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -