⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui_elec_open.m

📁 Matlab下的EEG处理程序库
💻 M
字号:
function [p] = gui_elec_open(p,elec_open_command,parent)

% GUI_ELEC_OPEN - Load an electrode data file into matlab workspace
% 
% Useage: [p] = gui_elec_open(p,[command],[parent])
%
% p is a structure, generated by 'eeg_toolbox_defaults'
% command is either 'init' or 'load'
% parent is a handle to the gui that calls this gui, useful
% for updating the UserData field of the parent from this gui.
% The p structure is returned to the parent when the parent 
% handle is given.
%

% $Revision: 1.3 $ $Date: 2003/04/07 06:12:02 $

% Licence:  GNU GPL, no express or implied warranties
% History:  01/02 Darren.Weber@flinders.edu.au
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if ~exist('p','var'), p = eeg_toolbox_defaults; end

if ~exist('elec_open_command','var'), elec_open_command = 'init'; end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Paint the GUI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

switch elec_open_command,
    
case 'init',

    if exist('parent','var'),
        ELECOpen = INIT(p,parent);
    else
        ELECOpen = INIT(p,'');
    end
        
case 'plot',

    ELECOpen = get(gcbf,'Userdata');
    
    ELECOpen.p.elec.plot = 1;
    ELECOpen.p = elec_open(ELECOpen.p);
    
    set(ELECOpen.gui,'Userdata',ELECOpen);
    
    if ~isequal(get(ELECOpen.handles.Bhold,'Value'),0),
        p = gui_updateparent(ELECOpen,0);
    else
        p = gui_updateparent(ELECOpen);
        close gcbf;
    end
    
case 'save',
    
    fprintf('\nGUI_ELEC_OPEN: Save As not implemented yet.\n');
    
case 'return',
    
    ELECOpen = get(gcbf,'Userdata');
    
    set(ELECOpen.gui,'Pointer','watch');
    
    ELECOpen.p.elec.plot = 0;
    ELECOpen.p = elec_open(ELECOpen.p);
    
    set(ELECOpen.gui,'Pointer','arrow');
    
    if isequal(get(ELECOpen.handles.Bhold,'Value'),1),
        p = gui_updateparent(ELECOpen,0);
    else
        p = gui_updateparent(ELECOpen);
        close gcbf;
    end
    
case 'cancel',
    
    ELECOpen = get(gcbf,'Userdata');
    GUI.parent = ELECOpen.parent;
    gui_updateparent(GUI);
    close gcbf;
end


return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ELECOpen] = INIT(p,parent)

    % GUI General Parameters
    
    GUIwidth  = 500;
    GUIheight = 120;
    
    GUI = figure('Name','ELEC File Load','Tag','ELEC_OPEN',...
                 'NumberTitle','off','HandleVisibility','callback',...
                 'MenuBar','none','Position',[1 1 GUIwidth GUIheight]);
    movegui(GUI,'center');
    
    ELECOpen.gui = GUI;
    
    Font.FontName   = 'Helvetica';
    Font.FontUnits  = 'Pixels';
    Font.FontSize   = 12;
    Font.FontWeight = 'normal';
    Font.FontAngle  = 'normal';
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Voltage Data Selection and Parameters

    G.Title_data = uicontrol('Parent',GUI,'Style','text','Units','Normalized',Font, ...
        'Position',[.01 .75 .15 .2],...
        'String','Coordinates','HorizontalAlignment','left');
    
    switch p.elec.type
        case 'Cartesian',   elecType = 1;
        case 'Spherical1',  elecType = 2;
        case 'Spherical2',  elecType = 3;
        case 'scantri',     elecType = 4;
        case 'brainstorm',  elecType = 5;
        case 'EMSE',        elecType = 6;
        otherwise,          elecType = 1;
    end
    G.PelectrodeType = uicontrol('Tag','PelecType','Parent',GUI,'Style','popupmenu',...
        'Units','Normalized',Font,  ...
        'Position',[.18 .75 .2 .2],...
        'String',{'Cartesian' 'Spherical1' 'Spherical2' 'scantri' 'brainstorm' 'EMSE'},'Value',elecType,...
        'TooltipString',strcat('Coordinate Type: ',...
                               ' ''Spherical1'' = theta and phi in degrees,',...
                               ' ''Spherical2'' = theta and phi in radians' ,...
                               ' ''scantri''    = scan 3Dspace .tri file',....
                               ' ''brainstorm'' = brainstorm channel file',...
                               ' ''EMSE''       = EMSE .elp file'),...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
                          'set(gcbf,''Userdata'',ELECOpen); clear ELECOpen;'));
    
    G.Title_elecN = uicontrol('Tag','Title_elecN','Parent',GUI,'Style','text',...
        'Units','Normalized',Font,...
        'Position',[.58 .75 .1 .2],...
        'String','N =',...
        'TooltipString','Maximum number of consecutive electrodes to load from file.');
    G.EelectrodeN = uicontrol('Tag','EelecN','Parent',GUI,'Style','edit',...
        'Units','Normalized',Font,  ...
        'Position',[.68 .75 .1 .2],...
        'String',num2str(p.elec.n),'Value',p.elec.n,...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'ELECOpen.p.elec.n = str2num( get(ELECOpen.handles.EelectrodeN,''String'') );',...
                          'set(ELECOpen.handles.EelectrodeN,''Value'',ELECOpen.p.elec.n,''String'',num2str(ELECOpen.p.elec.n) );',...
                          'set(gcbf,''Userdata'',ELECOpen); clear ELECOpen;'));
    
    G.Title_path = uicontrol('Parent',GUI,'Style','text','Units','Normalized',Font, ...
        'Position',[.01 .50 .15 .2],...
        'String','Path','HorizontalAlignment','left');
    G.EelectrodePath = uicontrol('Parent',GUI,'Style','edit','Units','Normalized',Font,  ...
    	'Position',[.18 .50 .6 .2], 'String',p.elec.path,...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'ELECOpen.p.elec.path = get(ELECOpen.handles.EelectrodePath,''String'');',...
                          'set(gcbf,''Userdata'',ELECOpen); clear ELECOpen;'));
    
    G.Title_file = uicontrol('Parent',GUI,'Style','text','Units','Normalized',Font, ...
        'Position',[.01 .25 .15 .2],...
        'String','File','HorizontalAlignment','left');
    G.EelectrodeFile = uicontrol('Parent',GUI,'Style','edit','Units','Normalized',Font,  ...
    	'Position',[.18 .25 .6 .2], 'String',p.elec.file,...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'ELECOpen.p.elec.file = get(ELECOpen.handles.EelectrodeFile,''String'');',...
                          'set(gcbf,''Userdata'',ELECOpen); clear ELECOpen;'));
    
    Font.FontWeight = 'bold';
    
    % BROWSE: Look for the data
    browsecommand = strcat('ELECOpen = get(gcbf,''Userdata'');',...
        'cd(ELECOpen.p.elec.path);',...
        '[file, path] = uigetfile(',...
        '{''*.*'',   ''All Files (*.*)'';', ...
        ' ''*.mat'', ''MATLAB (BrainStorm) Files (*.mat)'';', ...
        ' ''*.elp'', ''EMSE Files (*.elp)'';', ...
        ' ''*.tri'', ''Scan 3Dspace Files (*.tri)'';', ...
        ' ''*.dat;*.asc;*.txt'', ''ASCII Data Files (*.dat,*.asc,*.txt)''},', ...
        '''Select Electrode Coordinate File'');',...
        'if ~isequal(path,0), ELECOpen.p.elec.path = path; end;',...
        'if ~isequal(file,0), ELECOpen.p.elec.file = file; end;',...
        'set(ELECOpen.handles.EelectrodePath,''String'',ELECOpen.p.elec.path);',...
        'set(ELECOpen.handles.EelectrodeFile,''String'',ELECOpen.p.elec.file);',...
        'if ~isempty(findstr(file,''.dat'')) | ~isempty(findstr(file,''.txt'')) | ~isempty(findstr(file,''.asc'')), ',...
            'set(ELECOpen.handles.PelectrodeType,''Value'',1); ',...
            'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
        'elseif ~isempty(findstr(file,''.tri'')), ',...
            'set(ELECOpen.handles.PelectrodeType,''Value'',4); ',...
            'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
        'elseif ~isempty(findstr(file,''.mat'')), ',...
            'set(ELECOpen.handles.PelectrodeType,''Value'',5); ',...
            'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
        'elseif ~isempty(findstr(file,''.elp'')), ',...
            'set(ELECOpen.handles.PelectrodeType,''Value'',6); ',...
            'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
        'else, ',...
            'set(ELECOpen.handles.PelectrodeType,''Value'',1); ',...
            'ELECOpen.p.elec.type = popupstr(ELECOpen.handles.PelectrodeType);',...
        'end;',...
        'set(gcbf,''Userdata'',ELECOpen); clear ELECOpen;');
    G.BelectrodeFile = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized',Font, ...
        'Position',[.01 .01 .18 .2], 'String','BROWSE',...
        'BackgroundColor',[0.8 0.8 0.0],...
        'ForegroundColor', [1 1 1], 'HorizontalAlignment', 'center',...
        'Callback', browsecommand );
    
    % PLOT: Load & plot the data!
    G.Bplot = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
        'Position',[.20 .01 .18 .2],...
        'String','PLOT','BusyAction','queue',...
        'TooltipString','Plot the data and return the file parameters.',...
        'BackgroundColor',[0.0 0.5 0.0],...
        'ForegroundColor', [1 1 1], 'HorizontalAlignment', 'center',...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'gui_elec_open(ELECOpen.p,''plot'');',...
                          'clear ELECOpen;'));

    % Save As
	G.Bsave = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
        'Position',[.40 .01 .18 .2],'HorizontalAlignment', 'center',...
        'String','SAVE AS','TooltipString','ELEC File Conversion Tool (not implemented yet)',...
        'BusyAction','queue',...
        'Visible','on',...
        'BackgroundColor',[0.0 0.0 0.75],...
        'ForegroundColor', [1 1 1], 'HorizontalAlignment', 'center',...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'p = gui_elec_open(ELECOpen.p,''save'');',...
                          'clear ELECOpen;'));

    % Return file parameters
    G.Breturn = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
        'Position',[.60 .01 .18 .2],...
        'String','RETURN','BusyAction','queue',...
        'TooltipString','Close and return file parameters',...
        'BackgroundColor',[0.75 0.0 0.0],...
        'ForegroundColor', [1 1 1], 'HorizontalAlignment', 'center',...
        'Callback',strcat('ELECOpen = get(gcbf,''Userdata'');',...
                          'p = gui_elec_open(ELECOpen.p,''return'');',...
                          'clear ELECOpen;'));
    
    % Cancel
    G.Bcancel = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
        'Position',[.80 .01 .18 .2],...
        'String','CANCEL','BusyAction','queue',...
        'TooltipString','Close, do not return parameters.',...
        'BackgroundColor',[0.75 0.0 0.0],...
        'ForegroundColor', [1 1 1], 'HorizontalAlignment', 'center',...
        'Callback','gui_elec_open([],''cancel'');');
    
	% Help
	G.Bhelp = uicontrol('Parent',GUI,'Style','pushbutton','Units','Normalized', Font, ...
        'Position',[.80 .25 .18 .2],'String','Help','BusyAction','queue',...
        'BackgroundColor',[1 1 0],...
        'ForegroundColor',[0 0 0], 'HorizontalAlignment', 'center',...
        'Callback','doc elec_open;');
    
	% Hold GUI Open checkbox
	G.Bhold = uicontrol('Parent',GUI,'Style','checkbox','Units','Normalized', Font, ...
        'Position',[.80 .50 .18 .2],'String','Hold GUI','BusyAction','queue',...
        'TooltipString','ELEC File Load GUI remains open after ''Plot'' and ''Return'' commands.',...
        'Value',p.hold,'HorizontalAlignment', 'center');
    
    
    % Store userdata
    if exist('parent','var'), ELECOpen.parent.gui = parent; end
    ELECOpen.handles = G;
    ELECOpen.p = p;
    set(GUI,'Userdata',ELECOpen);

return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -