function uitree_demo
% function based on treeExperiment6 by John Anderson
% see http://www.mathworks.com/matlabcentral/newsreader/view_thread/104957#269485
%global tree container
global out

import javax.swing.*
import javax.swing.tree.*;

% figure window
f = figure('Units', 'normalized');

b1 = uicontrol( 'string','add Node', ...
   'units' , 'normalized', ...
   'position', [0 0.95 0.5 0.05], ...
   'callback', @b1_cb);

b2 = uicontrol( 'string','remove Node', ...
   'units' , 'normalized', ...
   'position', [0.5 0.95 0.5 0.05], ...
   'callback', @b2_cb);

% create top node
rootNode = uitreenode('v0','root', 'signals', [], 0);
% [matlab_work_path, '/fileListIcon.gif'],0);

% set treeModel
treeModel = DefaultTreeModel( rootNode );

% create the tree
[tree, container] = uitree('v0');
tree.setModel( treeModel );
% we often rely on the underlying java tree
jtree = handle(tree.getTree,'CallbackProperties');
% some layout
drawnow;
set(tree, 'Units', 'normalized', 'position', [0 0 1 0.95]);
%set(tree, 'NodeSelectedCallback', @selected_cb );

% make root the initially selected node
tree.setSelectedNode( rootNode );
  
% add node
function b1_cb( h, env )
    nodename = inputdlg('Enter the name of the node:','Nodename');
	if isempty(nodename)
        return;
    else
        nodes = tree.getSelectedNodes;
        node = nodes(1);
        parent = node;
        childNode = uitreenode('v0',nodename, nodename, [], 0);
        treeModel.insertNodeInto(childNode,parent,parent.getChildCount());

        % expand to show added child
        tree.setSelectedNode( childNode );

        % insure additional nodes are added to parent
        tree.setSelectedNode( parent );
        
        out = tree.getTree;
    end
end
 
% remove node
function b2_cb( h, env )
    selectedNodes = tree.getSelectedNodes;  
  nodes = tree.getSelectedNodes;
  node = nodes(1);
	if ~node.isRoot
        nP = node.getPreviousSibling;
        nN = node.getNextSibling;
	if ~isempty( nN )
        tree.setSelectedNode( nN );
    elseif ~isempty( nP )
        tree.setSelectedNode( nP );
    else
        tree.setSelectedNode( node.getParent );
    end
        treeModel.removeNodeFromParent( node );
	end
end

end