[Master Index] [Index for Toolbox]

# layout_manager

## (Toolbox/layout_manager.m in BrainStorm 2.0 (Alpha))

### Function Synopsis

    varargout = layout_manager(varargin)

### Help Text

    LAYOUT_MANAGER - Application M-file to manage the window layout
     function varargout = layout_manager(varargin)
        FIG = LAYOUT_MANAGER launch layout_manager GUI.
        LAYOUT_MANAGER('callback_name', ...) invoke the named callback.

     Clicking on the figure background automatically refreshes the window list.
     Right click the "Set" button or press the "Help" button for information on
      how to set the BrainStorm margins.

### Cross-Reference Information

This function calls

    bst_color_scheme                   C:\BrainStorm_2001\Toolbox\bst_color_scheme.m
    bst_layout                         C:\BrainStorm_2001\Toolbox\bst_layout.m
    bst_message_window                 C:\BrainStorm_2001\Toolbox\bst_message_window.m

This function is called by

    bst_static_taskbar                 C:\BrainStorm_2001\Toolbox\bst_static_taskbar.m

### Listing of function C:\BrainStorm_2001\Toolbox\layout_manager.m

    function varargout = layout_manager(varargin)
    %LAYOUT_MANAGER - Application M-file to manage the window layout
    % function varargout = layout_manager(varargin)
    %    FIG = LAYOUT_MANAGER launch layout_manager GUI.
    %    LAYOUT_MANAGER('callback_name', ...) invoke the named callback.
    %
    % Clicking on the figure background automatically refreshes the window list.
    % Right click the "Set" button or press the "Help" button for information on
    %  how to set the BrainStorm margins.

    %<autobegin> ---------------------- 12-Oct-2004 01:11:23 -----------------------
    % --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
    %
    % CATEGORY: GUI and Related
    %
    % Alphabetical list of external functions (non-Matlab):
    %   toolbox\bst_color_scheme.m
    %   toolbox\bst_layout.m
    %   toolbox\layout_manager.m  NOTE: Routine calls itself explicitly
    %
    % Subfunctions in this file, in order of occurrence in file:
    %   load_listbox(handles);
    %   varargout = pushbutton_align_Callback(h, eventdata, handles, varargin)
    %   varargout = pushbutton_close_Callback(h, eventdata, handles, varargin)
    %   varargout = pushbutton_close_tiles_Callback(h, eventdata, handles, varargin)
    %   varargout = pushbutton_margins_Callback(h, eventdata, handles, varargin)
    %   varargout = pushbutton_full_Callback(h, eventdata, handles, varargin)
    %   varargout = listbox_tiles_Callback(h, eventdata, handles, varargin)
    %   varargout = pushbutton_refresh_Callback(h, eventdata, handles, varargin)
    %   varargout = layout_manager_WindowButtonDownFcn(h, eventdata, handles, varargin)
    %   varargout = pushbutton_margins_ButtonDownFcn(h, eventdata, handles, varargin)
    %   varargout = pushbutton_help_Callback(h, eventdata, handles, varargin)
    %
    % Group : Preference data and their calls in this file:
    %   brainstormHomeDirectory = getpref('BrainStorm','brainstormHomeDir');
    %
    % Application data and their calls in this file:
    %   'TileHandle'
    %   'TileType'
    %
    %   setappdata(fig,'TileType','D');
    %   setappdata(hl,'TileHandle',TileHandle);
    %
    %   TileHandle = getappdata(h,'TileHandle');
    %   tempTileType = getappdata(hf(i),'TileType');
    %
    % Figure Files opened by this function:
    %   mfilename
    %
    %   Format of strings below: Type:Style:Tag, "String", CallBack Type and Call
    %   <automatic> callback is <Tag>_Callback by Matlab default
    %
    % Callbacks by figure layout_manager.fig
    %   figure::layout_manager "" uses WindowButtonDownFcn for <automatic>
    %   uicontrol:listbox:listbox_tiles "Listbox" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_align "Snap" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_close "Close All" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_close_tiles "Close Tiles" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_full "Default" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_help "Help" uses ButtonDownFcn for
    %     layout_manager('pushbutton_margins_ButtonDownFcn',gcbo,[],guidata(gcbo))
    %   uicontrol:pushbutton:pushbutton_help "Help" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_margins "Set" uses ButtonDownFcn for <automatic>
    %   uicontrol:pushbutton:pushbutton_margins "Set" uses Callback for <automatic>
    %   uicontrol:pushbutton:pushbutton_refresh "Refresh" uses Callback for <automatic>
    %
    % At Check-in: $Author: Mosher $  $Revision: 27 $  $Date: 10/11/04 11:33p $
    %
    % This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 23-Sep-2004
    %
    % Principal Investigators and Developers:
    % ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
    %    University of Southern California, Los Angeles, CA
    % ** John C. Mosher, PhD, Biophysics Group,
    %    Los Alamos National Laboratory, Los Alamos, NM
    % ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
    %    CNRS, Hopital de la Salpetriere, Paris, France
    %
    % See BrainStorm website at http://neuroimage.usc.edu for further information.
    %
    % Copyright (c) 2004 BrainStorm by the University of Southern California
    % This software distributed  under the terms of the GNU General Public License
    % as published by the Free Software Foundation. Further details on the GPL
    % license can be found at http://www.gnu.org/copyleft/gpl.html .
    %
    % FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
    % UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
    % WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
    % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
    % LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
    %<autoend> ------------------------ 12-Oct-2004 01:11:23 -----------------------

    % Script History---------------------------------------------------------------------------------------------------------------------------
    % EK  5-Oct-2004 Tile type 'd' is also included
    % -----------------------------------------------------------------------------------------------------------------------------------------

    % Last Modified by GUIDE v2.0 17-Nov-2003 10:42:56

    if nargin == 0  % LAUNCH GUI

       fig = openfig(mfilename,'reuse');

       % Use system color scheme for figure:
       set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
       bst_color_scheme(fig);
       setappdata(fig,'TileType','D'); % dynamic window
       bst_layout('align',fig);

       % custom fig handling
       hlistbox = findobj(fig,'tag','listbox_tiles');
       set(hlistbox,'fontname','arial');

       % now show it
       set(fig,'visible','on');

       % Generate a structure of handles to pass to callbacks, and store it.
       handles = guihandles(fig);
       guidata(fig, handles);

       if nargout > 0
          varargout{1} = fig;
       end

       load_listbox(handles);

    elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK

       try
          if (nargout)
             [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
          else
             feval(varargin{:}); % FEVAL switchyard
          end
       catch
          disp(lasterr);
       end

    end

    % local functions
    % --------------------------------------------------------------
    function load_listbox(handles);

    fig = handles.layout_manager; % handy ref
    hl = handles.listbox_tiles;

    set(0,'showhidden','on');
    hf = findobj(0,'type','figure'); % all of the windows

    hf = sort(hf);  % for consistent ordering

    % start with the command window
    String = cell(1000,1); % allocate
    TileHandle = zeros(1000,1);
    iString = 0;
    TileType = cell(1000,1);

    for i = 1:length(hf),
       tempTileType = getappdata(hf(i),'TileType');
       if(~isempty(tempTileType)),
          tempTileType = tempTileType(1); % only care about first letter
          switch tempTileType
          case {'T','M','S','D', 'd'} % a bst tile or window
             iString = iString + 1; % increment counter
             TileType{iString} = tempTileType;
             String{iString} = sprintf('%s',get(hf(i),'Name'));
             TileHandle(iString) = hf(i); % append
             if(strcmp(tempTileType,'M') | strcmp(tempTileType,'S')),
                % don't bring automatically up the tiles
                % since they may have lots of data
                % don't bring up dynamic windows, since they will
                % coverup the Window Manager
                % But do bring forward the message window and static toolbar
                figure(hf(i)); % bring to forefront
             end
          end
       end
    end

    % add dash line for prettiness
    iString = iString + 1; % increment counter
    String{iString} = '---- Tiles ----';
    TileHandle(iString) = NaN;
    TileType{iString} = '-'; % special handling case here

    % trim allocations
    String = String(1:iString);
    TileHandle = TileHandle(1:iString);
    TileType = TileType(1:iString);

    % sort
    [String,ndex] = sort(String);
    TileHandle = TileHandle(ndex); % sorted correspondingly
    TileType = TileType(ndex);

    % Now put the special windows at the top
    Types = {'-','D','M','S'}; % reverse order
    for i = 1:length(Types),
       ndex = find(strncmp(Types{i},TileType,1));
       if ~isempty(ndex),
          ndex = ndex(:)';
          ndx = 1:iString;
          ndx(ndex) = [];
          String = String([ndex ndx]);
          TileHandle = TileHandle([ndex ndx]);
          TileType = TileType([ndex ndx]);
       end
    end

    % add top dash line for prettiness
    iString = iString + 1; % increment counter
    String{iString} = '---- Toolbars ----';
    TileHandle(iString) = NaN;
    TileType{iString} = '-'; % special handling case here
    String = String([end 1:(end-1)]); % put at top
    TileHandle = TileHandle([end 1:(end-1)]);
    TileType = TileType([end 1:(end-1)]);

    set(hl,'Val',1); % reset index
    set(hl,'String',String);
    setappdata(hl,'TileHandle',TileHandle); % for recalling
    figure(fig) % make this gui the current figure

    % --------------------------------------------------------------------
    function varargout = pushbutton_align_Callback(h, eventdata, handles, varargin)

    load_listbox(handles)
    bst_layout('align');

    % --------------------------------------------------------------------
    function varargout = pushbutton_close_Callback(h, eventdata, handles, varargin)
    % close all but the BrainStorm toolbar and message window

    bst_layout('close all');
    layout_manager; % reinstall the layout manager

    % --------------------------------------------------------------------
    function varargout = pushbutton_close_tiles_Callback(h, eventdata, handles, varargin)
    % close only the tiles
    bst_layout('close');
    load_listbox(handles)

    % --------------------------------------------------------------------
    function varargout = pushbutton_margins_Callback(h, eventdata, handles, varargin)

    bst_layout('margins');
    load_listbox(handles)

    % --------------------------------------------------------------------
    function varargout = pushbutton_full_Callback(h, eventdata, handles, varargin)

    bst_layout('full');
    load_listbox(handles)

    % --------------------------------------------------------------------
    function varargout = listbox_tiles_Callback(h, eventdata, handles, varargin)

    TileHandle = getappdata(h,'TileHandle'); % list of handles
    Val = get(h,'Val'); % what line clicked on

    if isnan(TileHandle(Val)),
       % dashed line or other pretty character
       % do nothing

    elseif ~ishandle(TileHandle(Val)),

       % figure has already disappeared, user probably closed
       load_listbox(handles) % reload

    else
       % figure handle is valid

       status = get(handles.layout_manager,'SelectionType');
       switch status
       case 'normal'
          figure(TileHandle(Val)); % bring to front
       case 'open' % user double clicked
          close(TileHandle(Val));
          load_listbox(handles) % refresh
       end

    end

    % --------------------------------------------------------------------
    function varargout = pushbutton_refresh_Callback(h, eventdata, handles, varargin)

    load_listbox(handles) % refresh

    % --------------------------------------------------------------------
    function varargout = layout_manager_WindowButtonDownFcn(h, eventdata, handles, varargin)
    % make sure window names are refreshed when clicking in this window
    % note that frames and static text have been set to "inactive" so that clicking
    %  on them also acts like clicking on the background of the figure.
    % This function does not activate when clicking on an active uicontrol.

    pushbutton_refresh_Callback(handles.pushbutton_refresh, eventdata, handles, varargin);

    % ------------------------- HELP FUNCTIONS -------------------------------------

    % --------------------------------------------------------------------
    function varargout = pushbutton_margins_ButtonDownFcn(h, eventdata, handles, varargin)
    % right click on the "Set" button for help

    % --------------------------------------------------------------------
    function varargout = pushbutton_help_Callback(h, eventdata, handles, varargin)
    % Explicit HELP button in the manager
    % Now a Word Document

    brainstormHomeDirectory = getpref('BrainStorm','brainstormHomeDir');

    if 0, % old help style

       msg1 = {'Windows:','',['The "control" GUIs "Messages" and "BrainStorm" are always at the bottom of the BrainStorm ',...
                'viewing area, and various "managers" appear along the right hand side. The "tiles" are the ',...
                'GUIs appearing in the large upper left area. Single click any GUI name in the list to ',...
                'have it brought to the foreground. Double-click any GUI name to close it.'],...
             '',['Pressing "Refresh" ',...
                'refreshes the list, as does a single click in the background of the Layout Manager.'],...
             '','Pressing "Close All" closes all "tiles" but not the BrainStorm control GUIs.',...
             '',['Pressing "Snap" realigns all GUIs to their correct locations (as Set by Margins), ',...
                'as resizes all tiles to the nearest standard size.']};

       % get the current margin help
       msg2 = pushbutton_margins_ButtonDownFcn(h, eventdata, handles, varargin); % get the margin help

       fig = bst_message_window('unique',[msg1 {'','Margins Buttons:',''} msg2]);

       set(fig,'name','Help Layout Manager')
       bst_layout('align',fig,1,2,2); % right hand column

       pushbutton_refresh_Callback(handles.pushbutton_refresh, eventdata, handles, varargin);

    end

    web(fullfile(brainstormHomeDirectory,'Documents','help_gui_layout_manager.htm'));

Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON