function mwizard(file) %MWIZARD - M2HTML Graphical User Interface % MWIZARD launches a Matlab GUI front-end to edit parameters % that are then used by M2HTML to generate HTML documentation. % MWIZARD(FILE) allows to specify a mat-file FILE from which % default parameters are extracted and can be updated. % % For more information, please read the M2HTML tutorial and FAQ at: % % % See also M2HTML % Copyright (C) 2004 Guillaume Flandin % $Revision: 0.5 $Date: 2004/05/24 20:12:17 $ % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation Inc, 59 Temple Pl. - Suite 330, Boston, MA 02111-1307, USA. % Suggestions for improvement and fixes are always welcome, although no % guarantee is made whether and when they will be implemented. % Send requests to Guillaume@artefact.tk error(nargchk(0,1,nargin)); disp('This is a beta version of mwizard.'); disp('Please use the online version m2html instead.'); h = initWindow; initOptions(h); buildWindow(h); setappdata(h, 'handles', guihandles(h)); % M. Krauski % setappdata(h, 'pwd', pwd); if nargin == 0 setappdata(h, 'file', ''); setappdata(h, 'needsave', 1); else setappdata(h, 'file', file); setappdata(h, 'needsave', 0); opt = load(file, 'options'); setappdata(h, 'options', opt.options); refreshOptions(h); end set(h, 'HandleVisibility', 'callback'); %=============================================================================== function h = initWindow h = figure('Resize', 'on',... 'MenuBar', 'none',... 'NumberTitle', 'off',... 'Name', ':: M2HTML Wizard ::',... 'Position', [200 200 500 650],... 'Tag', mfilename); set(h, 'CloseRequestFcn', {@doClose,h}); %=============================================================================== function buildWindow(h) wincolor = struct('bg', [0.9 0.9 0.9], ... 'fg', [0.8 0.8 0.8], ... 'title', [0.8 0.8 0.9]); set(h, 'Color', wincolor.bg); %------------------------------------------------------------------------------- %- Menu %------------------------------------------------------------------------------- icons = load(fullfile(fileparts(which(mfilename)),'private', ... 'm2htmltoolbarimages.mat')); uipushtool('CData',icons.newIcon,... 'enable','on',... 'Separator','off',... 'ToolTipString','New File',... 'ClickedCallback',{@doNewFile,h},... 'Tag','NewTool'); uipushtool('CData',icons.openIcon,... 'enable','on',... 'Separator','off',... 'ToolTipString','Open File',... 'ClickedCallback',{@doOpenFile,h},... 'Tag','OpenTool'); uipushtool('CData',icons.saveIcon,... 'enable','on',... 'Separator','off',... 'ToolTipString','Save File',... 'ClickedCallback',{@doSaveFile,h},... 'Tag','SaveTool'); uipushtool('CData',icons.saveAsIcon,... 'enable','on',... 'Separator','off',... 'ToolTipString','Save File As',... 'ClickedCallback',{@doSaveAsFile,h},... 'Tag','SaveAsTool'); uipushtool('CData',icons.wheelIcon,... 'enable','on',... 'Separator','on',... 'ToolTipString','Save and Run M2HTML',... 'ClickedCallback',{@doRunFile,h},... 'Tag','RunTool'); uipushtool('CData',icons.webIcon,... 'enable','on',... 'Separator','on',... 'ToolTipString','Online Tutorial',... 'ClickedCallback',... 'web(''http://www.artefact.tk/software/matlab/m2html/'')',... 'Tag','WebTool'); uipushtool('CData',icons.helpIcon,... 'enable','on',... 'Separator','off',... 'ToolTipString','Help',... 'ClickedCallback',{@doHelp,h},... 'Tag','HelpTool'); %------------------------------------------------------------------------------- %- Title %------------------------------------------------------------------------------- uicontrol('Style','Frame',... 'Units','Normalized',... 'Position',[0.02,0.92,0.96,0.06],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','M2HTML Wizard',... 'FontSize',18,... 'HorizontalAlignment','center',... 'Position',[0.03,0.93,0.94,0.038],... 'BackgroundColor',wincolor.title); %------------------------------------------------------------------------------- %- Input %------------------------------------------------------------------------------- uicontrol('Style','Frame',... 'Units','Normalized',... 'Position',[0.02,0.74,0.96,0.16],... 'BackgroundColor',wincolor.fg); uicontrol('Style','Frame',... 'Units','Normalized',... 'HorizontalAlignment','center',... 'Position',[0.02,0.87,0.96,0.03],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','M-Files Input',... 'HorizontalAlignment','left',... 'Position',[0.03,0.875,0.94,0.02],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Root directory:',... 'FontAngle','oblique',... 'HorizontalAlignment','left',... 'Position',[0.04,0.825,0.6,0.03],... 'BackgroundColor',wincolor.fg); % M. Krauski 7/20/04 % changed and resized control to work with browse push button % uicontrol('Style','edit',... % 'Units','Normalized',... % 'Position',[0.21,0.83,0.74,0.03],... % 'String',pwd,... % 'Enable','inactive',... % 'HorizontalAlignment','left',... % 'Callback','uigetfile;',...%uigetdir % 'BackgroundColor',wincolor.bg,... % 'Tag','rootdir'); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.21,0.83,0.59,0.03],... 'String',pwd,... %this will be over written in refreshOptions 'Enable','inactive',... 'HorizontalAlignment','left',... 'BackgroundColor',wincolor.bg,... 'Tag','rootdir'); % M. Krauski 7/20/04 % added control uicontrol('Style','pushbutton',... 'Units','Normalized',... 'Position',[0.81,0.83,0.14,0.03],... 'String','Browse...',... 'HorizontalAlignment','left',... 'Callback',{@doBrowseButton,h},... 'BackgroundColor',wincolor.bg,... 'Tag','browsebutton'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Relative pathes:',... 'HorizontalAlignment','left',... 'Position',[0.04,0.785,0.6,0.03],... 'BackgroundColor',wincolor.fg); % M. Krauski 7/20/04 % changed and resized control to work with select push button % uicontrol('Style','edit',... % 'Units','Normalized',... % 'Position',[0.21,0.79,0.74,0.03],... % 'String','',... % 'HorizontalAlignment','left',... % 'Callback',{@doSetMfiles,h},... % 'CreateFcn',{@doInitMfiles,h},... % 'BackgroundColor',wincolor.bg,... % 'Tag','mfiles'); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.21,0.79,0.59,0.03],... 'String','',... 'Enable','inactive',... 'HorizontalAlignment','left',... 'CreateFcn',{@doInitMfiles,h},... 'BackgroundColor',wincolor.bg,... 'Tag','mfiles'); uicontrol('Style','pushbutton',... 'Units','Normalized',... 'Position',[0.81,0.79,0.14,0.03],... 'String','Select...',... 'HorizontalAlignment','left',... 'Callback',{@doSelectMfiles,h},... 'BackgroundColor',wincolor.bg,... 'Tag','selectbutton'); uicontrol('Style','CheckBox',... 'Units','Normalized',... 'Position',[0.04,0.749,0.42,0.032],... 'String',' Recursive',... 'HorizontalAlignment','left',... 'Callback',{@doSetRecursive,h},... 'Value',0,... 'BackgroundColor',wincolor.bg,... 'Tag','recursive'); %------------------------------------------------------------------------------- %- Output %------------------------------------------------------------------------------- uicontrol('Style','Frame',... 'Units','Normalized',... 'Position',[0.02, 0.56,0.96,0.16],... 'BackgroundColor',wincolor.fg); uicontrol('Style','Frame',... 'Units','Normalized',... 'HorizontalAlignment','center',... 'Position',[0.02,0.69,0.96,0.03],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','HTML Output',... 'HorizontalAlignment','left',... 'Position',[0.03,0.695,0.94,0.02],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Output Directory:',... 'HorizontalAlignment','left',... 'Position',[0.04,0.645,0.6,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.21,0.65,0.74,0.03],... 'String','',... 'HorizontalAlignment','left',... 'Callback',{@doSetOutputDir,h},... 'CreateFcn',{@doInitHTMLDir,h},... 'BackgroundColor',wincolor.bg,... 'Tag','htmldir'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','HTML Index:',... 'HorizontalAlignment','left',... 'Position',[0.04,0.605,0.6,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.21,0.61,0.25,0.03],... 'String','index',... 'HorizontalAlignment','left',... 'Callback',{@doSetIndex,h},... 'BackgroundColor',wincolor.bg,... 'Tag','index'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Extension:',... 'HorizontalAlignment','left',... 'Position',[0.53,0.605,0.3,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.70,0.61,0.25,0.03],... 'String','html',... 'HorizontalAlignment','left',... 'Callback',{@doSetExtension,h},... 'BackgroundColor',wincolor.bg,... 'Tag','extension'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Template:',... 'HorizontalAlignment','left',... 'Position',[0.04,0.565,0.3,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','popupmenu',... 'Units','Normalized',... 'Position',[0.21,0.57,0.25,0.03],... 'String','',... 'HorizontalAlignment','center',... 'Callback',{@doSetTemplate,h},... 'CreateFcn',{@doInitTpl,h},... 'BackgroundColor',wincolor.bg,... 'Tag','template'); %------------------------------------------------------------------------------- %- Other options %------------------------------------------------------------------------------- uicontrol('Style','Frame',... 'Units','Normalized',... 'Position',[0.02,0.24,0.96,0.30],... 'BackgroundColor',wincolor.fg); uicontrol('Style','Frame',... 'Units','Normalized',... 'HorizontalAlignment','center',... 'Position',[0.02,0.51,0.96,0.03],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Other Options',... 'HorizontalAlignment','left',... 'Position',[0.03,0.515,0.94,0.02],... 'BackgroundColor',wincolor.title); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.04,0.464,0.42,0.032],... 'String',' Include Source Code',... 'HorizontalAlignment','left',... 'Callback',{@doSetSource,h},... 'Value',1,... 'TooltipString','Include Source Code of each M-file',... 'BackgroundColor',wincolor.bg,... 'Tag','source'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.53,0.464,0.42,0.032],... 'String',' Syntax Highlighting',... 'HorizontalAlignment','left',... 'Callback',{@doSetHighlight,h},... 'Value',1,... 'TooltipString','Source Code Syntax Highlighting',... 'BackgroundColor',wincolor.bg,... 'Tag','highlight'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.04,0.42,0.42,0.032],... 'String',' Create Dependency Graphs',... 'HorizontalAlignment','left',... 'Callback',{@doSetGraph,h},... 'CreateFcn',{@doInitGraphs,h},... 'Value',0,... 'TooltipString','Compute a Dependency Graph using GraphViz',... 'BackgroundColor',wincolor.bg,... 'Tag','graph'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.53,0.42,0.42,0.032],... 'String',' PHP Search Engine',... 'HorizontalAlignment','left',... 'Callback',{@doSetSearch,h},... 'Value',0,... 'TooltipString','Create an Index for a PHP Search Engine',... 'BackgroundColor',wincolor.bg,... 'Tag','search'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.04,0.378,0.42,0.032],... 'String',' Global Hyperlinks',... 'HorizontalAlignment','left',... 'Callback',{@doSetGlobal,1},... 'Value',0,... 'TooltipString','Hypertext links among separate Matlab Directories',... 'BackgroundColor',wincolor.bg,... 'Tag','globalhypertext'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.53,0.378,0.42,0.032],... 'String',' Downloadable M-files',... 'HorizontalAlignment','left',... 'Callback',{@doSetDownload,h},... 'TooltipString','Add a link to download each M-file separately',... 'Value',0,... 'BackgroundColor',wincolor.bg,... 'Tag','download'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.04,0.336,0.42,0.032],... 'String',' To Do List',... 'HorizontalAlignment','left',... 'Callback',{@doSetTodo,h},... 'TooltipString',['Create a TODO list in each directory summarizing'... ' all the ''% TODO %'' lines found in Matlab code'],... 'Value',0,... 'BackgroundColor',wincolor.bg,... 'Tag','todo'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.53,0.336,0.42,0.032],... 'String',' Verbose Mode',... 'HorizontalAlignment','left',... 'Callback',{@doSetVerbose,h},... 'TooltipString','Verbose mode',... 'Value',1,... 'BackgroundColor',wincolor.bg,... 'Tag','verbose'); uicontrol('Style','checkbox',... 'Units','Normalized',... 'Position',[0.04,0.294,0.42,0.032],... 'String',' Save M-files Parsing',... 'HorizontalAlignment','left',... 'Callback',{@doSetSaveAsMat,h},... 'TooltipString',['Save current state after M-files parsing in '... '''m2html.mat'' in the Output directory'],... 'Value',0,... 'BackgroundColor',wincolor.bg,... 'Tag','save'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Load File:',... 'HorizontalAlignment','left',... 'Position',[0.53,0.289,0.3,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.70,0.294,0.25,0.03],... 'String','',... 'HorizontalAlignment','left',... 'Callback',{@doSetLoadMat,h},... 'TooltipString',['Load a previously saved MAT file '... 'to generate HTML files once again'],... 'BackgroundColor',wincolor.bg,... 'Tag','load'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Tabs Length:',... 'HorizontalAlignment','left',... 'Position',[0.04,0.247,0.3,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.21,0.252,0.25,0.03],... 'String','4',... 'HorizontalAlignment','right',... 'Callback',{@doSetTabs,h},... 'TooltipString',['Replace horizontal tabs in source code '... 'by N white space characters'],... 'BackgroundColor',wincolor.bg,... 'Tag','tabs'); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Nb Columns:',... 'FontAngle','oblique',... 'HorizontalAlignment','left',... 'Position',[0.53,0.247,0.3,0.03],... 'BackgroundColor',wincolor.fg); uicontrol('Style','edit',... 'Units','Normalized',... 'Position',[0.70,0.252,0.25,0.03],... 'String','4',... 'HorizontalAlignment','right',... 'Callback',{@doSetNbColumns,h},... 'TooltipString','Number of columns for M-files output - not available',... 'Enable','inactive',... 'BackgroundColor',wincolor.bg,... 'Tag','column'); %------------------------------------------------------------------------------- %- Space available %------------------------------------------------------------------------------- % uicontrol('Style','Frame',... % 'Units','Normalized',... % 'Position',[0.02,0.07,0.96,0.14],... % 'BackgroundColor',wincolor.fg); % simulate a frame using an axes % http://www.mathworks.com/support/solutions/data/1-15P9E.html axes('Color',wincolor.fg,... 'XTick',[],'YTick',[],... 'Units','Normalized',... 'Box','on',... 'Position',[0.02,0.07,0.9585,0.14]); uicontrol('Style','Frame',... 'Units','Normalized',... 'HorizontalAlignment','center',... 'Position',[0.02,0.19,0.96,0.03],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','M2HTML status',... 'HorizontalAlignment','left',... 'Position',[0.03,0.195,0.94,0.02],... 'BackgroundColor',wincolor.title); uicontrol('Style','Text',... 'Units','Normalized',... 'String','Click on the wheel in the toolbar to launch M2HTML...',... 'HorizontalAlignment','left',... % center 'Position',[0.12,0.135,0.76,0.02],... 'Visible','on',... 'BackgroundColor',wincolor.fg,... 'Tag','textmisc'); axes('XLim',[0 100],... 'YLim',[0 1],... 'Box','on', ... 'Units','Normalized',... 'Position',[0.07,0.09,0.86,0.03],... 'XTickMode','manual',... 'YTickMode','manual',... 'layer','top',... 'XTick',[],... 'YTick',[],... 'XTickLabelMode','manual',... 'XTickLabel',[],... 'YTickLabelMode','manual',... 'Visible','on',... 'YTickLabel',[],... 'Color',wincolor.bg); x = 0; % between 0 and 100 xpatch = [0 x x 0]; ypatch = [0 0 1 1]; p = patch(xpatch,ypatch,'r',... 'EdgeColor','r',... 'Visible','on',... 'EraseMode','none',... 'Tag','waitbarmisc'); l = line([100 0 0 100 100], [0 0 1 1 0], ... 'EraseMode','none', ... 'Visible','on',... 'Color',get(gca,'XColor')); % for i=10:5:100 % set(p,'Xdata',[0 i i 0]); pause(0.02); % end % set(p,'EraseMode','normal'); % set(p,'Xdata',[0 0 0 0]); % set(p,'EraseMode','none'); %------------------------------------------------------------------------------- %- Footnote %------------------------------------------------------------------------------- uicontrol('Style','Frame',... 'Units','Normalized',... 'Position',[0.02,0.02,0.96,0.03],... 'BackgroundColor',[0.8 0.8 0.9]); uicontrol('Style','Text',... 'Units','Normalized',... 'String',['M2HTML © 2004 Guillaume Flandin '],... 'HorizontalAlignment','right',... 'Position',[0.03,0.025,0.94,0.02],... 'BackgroundColor',[0.8 0.8 0.9]); %=============================================================================== function doClose(fig,evd,h) status = doCheckSave(h); if status delete(h); end function doNewFile(fig,evd,h) status = doCheckSave(h); if status initOptions(h); setappdata(h, 'needsave', 1); % refresh options in GUI... refreshOptions(h); end function doOpenFile(fig,evd,h) status = doCheckSave(h); if status [filename, pathname] = uigetfile('*.mat','Open File'); if ~(isequal(filename,0)|isequal(pathname,0)) opt = load(fullfile(pathname,filename),'options'); setappdata(h,'options',opt.options); setappdata(h,'file',fullfile(pathname,filename)); end end % refresh options in GUI... refreshOptions(h); function status = doSaveFile(fig,evd,h) file = getappdata(h,'file'); status = 1; if isempty(file) status = doSaveAsFile(fig,evd,h); else options = getappdata(h,'options'); save(file, 'options'); end setappdata(h,'needsave',0); function status = doSaveAsFile(fig,evd,h) opt = getappdata(h,'options'); [filename, pathname] = uiputfile(strcat(opt.rootdir,filesep,'matlab.mat'),... 'Save File as'); if ~(isequal(filename,0)|isequal(pathname,0)) setappdata(h,'file',fullfile(pathname,filename)); status = doSaveFile(fig,evd,h); else status = 0; end function doRunFile(fig,evd,h) status = doSaveFile(fig,evd,h); if status opt = getappdata(h,'options'); file = getappdata(h,'file'); r = {'off' 'on'}; % opt could be directly given to m2html (no need for file saving) % just need to convert on/off using opt.param = r{opt.param+1} m2html('load',file,'recursive',r{opt.recursive+1}); % 'recursive' is specified to force m2html to parse M-files end function status = doCheckSave(h) file = getappdata(h,'file'); if isempty(file), file = 'Untitled'; end needsave = getappdata(h,'needsave'); status = 1; if needsave button = questdlg(sprintf('Save changes to %s?',file),... 'Mwizard','Yes','No','Cancel','Yes'); if strcmp(button,'Yes') status = doSaveFile([],[],h); elseif strcmp(button,'Cancel') status = 0; end end function doHelp(fig,evd,h) helpdlg(sprintf(['M2HTML by Guillaume Flandin\n'... 'Copyright © 2003-2004\nGuillaume@artefact.tk\n'... '']),'M2HTML Wizard'); %=============================================================================== %------------------------------------------------------------------------------- %- Default parameters %------------------------------------------------------------------------------- function varargout = initOptions(h) options = struct('verbose', 1,... 'mFiles', {{''}},... 'htmlDir', 'doc',... 'recursive', 0,... 'source', 1,... 'download',0,... 'syntaxHighlighting', 1,... 'tabs', 4,... 'globalHypertextLinks', 0,... 'graph', 0,... 'todo', 0,... 'load', 0,... 'save', 0,... 'search', 0,... 'helptocxml', 0,... 'indexFile', 'index',... 'extension', '.html',... 'template', 'blue',... 'rootdir', pwd,... 'ignoredDir', {{'.svn' 'cvs'}}, ... 'language','english'); if nargin == 1, setappdata(h,'options',options); else varargout{1} = options; end function refreshOptions(h) opt = getappdata(h,'options'); handles = getappdata(h,'handles'); doInitTpl(handles.template, 0, h); doInitMfiles(handles.mfiles, 0, h); doInitHTMLDir(handles.htmldir, 0, h) set(handles.recursive, 'Value', opt.recursive); set(handles.graph, 'Value', opt.graph); %doInitGraphs(handles.graph,0,h); set(handles.save, 'Value', opt.save); set(handles.verbose, 'Value', opt.verbose); set(handles.todo, 'Value', opt.todo); set(handles.download, 'Value', opt.download); set(handles.search, 'Value', opt.search); set(handles.highlight, 'Value', opt.syntaxHighlighting); set(handles.source, 'Value', opt.source); set(handles.globalhypertext, 'Value', opt.globalHypertextLinks); set(handles.index, 'String', opt.indexFile); set(handles.extension, 'String', opt.extension(2:end)); %remove the '.' set(handles.tabs, 'String', num2str(opt.tabs)); % if ~strcmp(opt.rootdir, pwd) % warning('[M2HTML] You should ''cd %s'' before...',opt.rootdir); % end set(handles.rootdir, 'String', opt.rootdir); % need to 'cd' if different... set(handles.column, 'String', num2str(4)); %- not saved... default here if ischar(opt.load) set(handles.load, 'String', opt.load); else set(handles.load, 'String', ''); end set(handles.textmisc, 'String', ... 'Click on the wheel in the toolbar to launch M2HTML...'); %- not saved... default here set(handles.waitbarmisc, 'EraseMode','normal'); set(handles.waitbarmisc, 'Xdata',[0 0 0 0]); set(handles.waitbarmisc, 'EraseMode','none'); %------------------------------------------------------------------------------- %- CreateFcn Callbacks %------------------------------------------------------------------------------- function doInitHTMLDir(fig,evd,h) opt = getappdata(h,'options'); [path,name] = fileparts(opt.htmlDir); if isempty(path) opt.htmlDir = fullfile(opt.rootdir, opt.htmlDir); end set(fig,'String',opt.htmlDir); setappdata(h,'options',opt); function doInitTpl(fig,evd,h) %- problems when templates are still in full format opt = getappdata(h,'options'); d = dir(fullfile(fileparts(which(mfilename)),'templates')); d = {d([d.isdir]).name}; d = {d{~ismember(d,{'.' '..'})}}; if ~isempty(d) tpl = sprintf('%s|',d{:}); set(fig,'String',tpl(1:end-1)); i = strmatch(opt.template,d,'exact'); if ~isempty(i) set(fig,'Value',i(1)); else %- where is the default template ? warning('[M2HTML] Default template ''%s'' not found.',opt.template); set(fig,'Value',1); opt.template = d{1}; setappdata(h,'options',opt); warning('[M2HTML] Using template ''%s'' instead.',opt.template); end else error('[M2HTML] No template found.'); end function doInitMfiles(fig,evd,h) opt = getappdata(h,'options'); if ~isempty(opt.mFiles{1}) s = sprintf('''%s'', ',opt.mFiles{:}); s = s(1:end-2); set(fig,'String',['{' s '}']); return; end d = dir(opt.rootdir); d = {d([d.isdir]).name}; d = {d{~ismember(d,{'.' '..'})}}; if length(d) == 0 warning('[M2HTML] No subsequent directory found. Check your cwd.'); set(fig,'String',''); %- maybe open a uigetdir ? opt.mFiles = {''}; elseif length(d) == 1 set(fig,'String',d{1}); opt.mFiles = d; else s = sprintf('''%s'', ',d{:}); s = s(1:end-2); set(fig,'String',['{' s '}']); opt.mFiles = d; end setappdata(h,'options',opt); function doInitGraphs(fig,evd,h) opt = getappdata(h,'options'); [s, w] = system('dot -V'); if s disp('GraphViz not installed: Generation of dependency graphs desactivated.'); disp('See http://www.graphviz.org/ to get ''dot'' tool.'); set(fig,'FontAngle','Oblique','Enable','inactive'); set(fig,'Value',0); opt.graph = 0; setappdata(h,'options',opt); else set(fig,'Value',opt.graph); end %=============================================================================== %------------------------------------------------------------------------------- %- M-Files Input Callbacks %------------------------------------------------------------------------------- function doBrowseButton(fig,evd,h) opt = getappdata(h,'options'); handles = getappdata(h,'handles'); d = uigetdir(pwd,'Select the Root directory'); if ~d, return; end; opt.rootdir = d; set(handles.rootdir,'String',d); % set mfiles d = dir(opt.rootdir); d = {d([d.isdir]).name}; d = {d{~ismember(d,{'.' '..'})}}; if length(d) == 0 warning('[M2HTML] No subsequent directory found. Check your cwd.'); set(handles.mfiles,'String',''); opt.mFiles = {''}; elseif length(d) == 1 set(handles.mfiles,'String',d{1}); opt.mFiles = d; else s = sprintf('''%s'', ',d{:}); s = s(1:end-2); set(handles.mfiles,'String',['{' s '}']); opt.mFiles = d; end % set htmldir [path,name] = fileparts(opt.htmlDir); opt.htmlDir = fullfile(opt.rootdir, name); set(handles.htmldir,'String',opt.htmlDir); setappdata(h,'options',opt); function doSelectMfiles(fig,evd,h) opt = getappdata(h,'options'); handles = getappdata(h,'handles'); d = dir(opt.rootdir); d = {d([d.isdir]).name}; d = {d{~ismember(d,{'.' '..'})}}; [i,v] = listdlg('ListString',d,... 'PromptString','Select folder(s):',... 'Name',':: M2HTML :: M-files',... 'SelectionMode','multiple'); if v == 1 d = {d{i}}; s = sprintf('''%s'', ',d{:}); s = s(1:end-2); set(handles.mfiles,'String',['{' s '}']); end opt.mFiles = d; setappdata(h,'options',opt); function doSetRecursive(fig,evd,h) opt = getappdata(h,'options'); opt.recursive = get(fig,'Value'); setappdata(h,'options',opt); %------------------------------------------------------------------------------- %- HTML Output Callbacks %------------------------------------------------------------------------------- function doSetOutputDir(fig,evd,h) opt = getappdata(h,'options'); opt.htmlDir = get(fig,'String'); setappdata(h,'options',opt); function doSetIndex(fig,evd,h) opt = getappdata(h,'options'); opt.indexFile = get(fig,'String'); setappdata(h,'options',opt); function doSetExtension(fig,evd,h) opt = getappdata(h,'options'); e = get(fig,'String'); if ~isempty(e) & e(1) ~= '.' e = ['.' e]; end opt.extension = e; setappdata(h,'options',opt); function doSetTemplate(fig,evd,h) opt = getappdata(h,'options'); s = get(fig,'String'); v = get(fig,'Value'); opt.template = deblank(s(v,:)); setappdata(h,'options',opt); %------------------------------------------------------------------------------- %- Options Callbacks %------------------------------------------------------------------------------- function doSetSource(fig,evd,h) opt = getappdata(h,'options'); opt.source = get(fig,'Value'); setappdata(h,'options',opt); function doSetHighlight(fig,evd,h) opt = getappdata(h,'options'); opt.syntaxHighlighting = get(fig,'Value'); setappdata(h,'options',opt); function doSetGraph(fig,evd,h) opt = getappdata(h,'options'); opt.graph = get(fig,'Value'); setappdata(h,'options',opt); function doSetSearch(fig,evd,h) opt = getappdata(h,'options'); opt.search = get(fig,'Value'); setappdata(h,'options',opt); function doSetGlobal(fig,evd,h) opt = getappdata(h,'options'); opt.globalHypertextLinks = get(fig,'Value'); setappdata(h,'options',opt); function doSetDownload(fig,evd,h) opt = getappdata(h,'options'); opt.download = get(fig,'Value'); setappdata(h,'options',opt); function doSetTodo(fig,evd,h) opt = getappdata(h,'options'); opt.todo = get(fig,'Value'); setappdata(h,'options',opt); function doSetVerbose(fig,evd,h) opt = getappdata(h,'options'); opt.verbose = get(fig,'Value'); setappdata(h,'options',opt); function doSetSaveAsMat(fig,evd,h) opt = getappdata(h,'options'); opt.save = get(fig,'Value'); setappdata(h,'options',opt); function doSetLoadMat(fig,evd,h) opt = getappdata(h,'options'); [fname, pname, findex] = uigetfile('m2html.mat',... 'Load a m2html MAT-file'); if findex opt.load = fullfile(pname,fname); set(fig,'String',fullfile(pname,fname)); end setappdata(h,'options',opt); function doSetTabs(fig,evd,h) opt = getappdata(h,'options'); t = str2num(get(fig,'String')); if t >= 0 & length(t) == 1 opt.tabs = t; else set(fig,'String',num2str(opt.tabs)); end setappdata(h,'options',opt); function doSetNbColumns(fig,evd,h) opt = getappdata(h,'options'); disp 'Not available'; setappdata(h,'options',opt); %=============================================================================== function text2 = shortenText(text, l) if nargin == 1, l = 64; end m = length(text); text2 = text; if m > l s = floor((l - 3) / 2); text2 = [text(1:s) '...' text(end-(l-s-3)+1:end)]; end