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