From aaaa3f8c55e43212d3664f16a1292194d6a22da2 Mon Sep 17 00:00:00 2001
From: Qianqian Fang <fangq@nmr.mgh.harvard.edu>
Date: Sat, 22 Nov 2014 16:43:33 +0000
Subject: [PATCH] show progress bar in loadjson

git-svn-id: http://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab@452 786e58fb-9377-0410-9ff7-e4ac0ac0635c
---
 loadjson.m | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/loadjson.m b/loadjson.m
index 964a8e5..bcf0751 100644
--- a/loadjson.m
+++ b/loadjson.m
@@ -42,6 +42,8 @@ function data = loadjson(fname,varargin)
 %                         arrays; setting to 3 will return to a 2D cell
 %                         array of 1D vectors; setting to 4 will return a
 %                         3D cell array.
+%        opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar.
+%
 % output:
 %      dat: a cell array, where {...} blocks are converted into cell arrays,
 %           and [...] are converted to arrays
@@ -76,6 +78,10 @@ esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]');
 index_esc = 1; len_esc = length(esc);
 
 opt=varargin2struct(varargin{:});
+
+if(jsonopt('ShowProgress',0,opt)==1)
+    opt.progressbar_=waitbar(0,'loading ...');
+end
 jsoncount=1;
 while pos <= len
     switch(next_char)
@@ -101,7 +107,9 @@ if(~isempty(data))
           data=jcell2array(data);
       end
 end
-
+if(isfield(opt,'progressbar_'))
+    close(opt.progressbar_);
+end
 
 %%
 function newdata=jcell2array(data)
@@ -206,6 +214,8 @@ global pos inStr isoct
     object = cell(0, 1);
     dim2=[];
     arraydepth=jsonopt('JSONLAB_ArrayDepth_',1,varargin{:});
+    pbar=jsonopt('progressbar_',-1,varargin{:});
+
     if next_char ~= ']'
 	if(jsonopt('FastArrayParser',1,varargin{:})>=1 && arraydepth>=jsonopt('FastArrayParser',1,varargin{:}))
             [endpos, e1l, e1r, maxlevel]=matching_bracket(inStr,pos);
@@ -246,6 +256,9 @@ global pos inStr isoct
                     object=reshape(obj,dim2,numel(obj)/dim2)';
                     pos=endpos;
                     parse_char(']');
+                    if(pbar>0)
+                        waitbar(pos/length(inStr),pbar,'loading ...');
+                    end
                     return;
         	end
             end
@@ -284,7 +297,10 @@ global pos inStr isoct
       end
     end
     parse_char(']');
-
+    
+    if(pbar>0)
+        waitbar(pos/length(inStr),pbar,'loading ...');
+    end
 %%-------------------------------------------------------------------------
 
 function parse_char(c)
@@ -400,7 +416,12 @@ function num = parse_number(varargin)
 function val = parse_value(varargin)
     global pos inStr len
     true = 1; false = 0;
-
+    
+    pbar=jsonopt('progressbar_',-1,varargin{:});
+    if(pbar>0)
+        waitbar(pos/len,pbar,'loading ...');
+    end
+    
     switch(inStr(pos))
         case '"'
             val = parseStr(varargin{:});
-- 
GitLab