summaryrefslogtreecommitdiffstats
path: root/src/cppcheckplus/shortcut/MyTree.java
blob: 775e3a2c565f22d3f066fa8aa92eda448b2e60dc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package cppcheckplus.shortcut;

import java.io.File;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;

import cppcheckplus.control.Main;
import cppcheckplus.text.FileTools;

public class MyTree extends JPanel {
    private JTree tree;
    public File result;
    public String src; 
    private Main jf; 
    private JTextArea textCode;
    public MyTree() {
        tree = new JTree();
        tree.addTreeExpansionListener(new TreeExpansionAction());
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent evt) {
                jTreeValueChanged(evt);
            }
        });

        add(new JScrollPane(tree));
        setRootDir(new File("c:/"));
        setVisible(true);
    }
    
    public void setCode(JTextArea textCode, Main jf){
    	this.textCode = textCode;
    	this.jf=jf;
    }
    
    public void setRootDir(File dir) {
    	if(dir==null)
    		return;
        tree.setModel(new DefaultTreeModel(createNode(dir)));
        MutableTreeNode rootNode = (MutableTreeNode) tree.getModel().getRoot();
        rootNode.setUserObject(dir);
        updateNode(rootNode);
        tree.updateUI();
    }
    private void updateNode(Object object) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) object;
        for (int i = 0; i < node.getChildCount(); i++) {
            DefaultMutableTreeNode node2 = (DefaultMutableTreeNode) node.getChildAt(i);
            FileObject fileObject = (FileObject) node2.getUserObject();
            if (!fileObject.isUpdated()) {
                fileObject.setUpdated(true);
                File file = fileObject.getFile();
                if (file.isDirectory()) {
                    addSubFile(node2, file);
                }
            }
        }
    }
    
    private void jTreeValueChanged(TreeSelectionEvent evt) {
        DefaultMutableTreeNode selectedNode=(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();//返回最后选定的节点
        if(selectedNode!=null && selectedNode.isLeaf()){
        	result = ((FileObject) selectedNode.getUserObject()).file;
        	jf.src = result.getAbsolutePath();
        	if (!jf.centerTabPanel.isSelectTabComponents("代码")) {
        		jf.centerTabPanel.addTab("代码", jf.testCode);
        		jf.centerTabPanel.isSelectTabComponents("代码");
			}
        	textCode.setText(FileTools.readFile(result));
        }
    }
    
    public MutableTreeNode createNode(File dir) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(new FileObject(dir));
        if (dir.isDirectory()) {
            addSubFile(node, dir);
        }
        return node;
    }
    private void addSubFile(DefaultMutableTreeNode node, File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                node.add(new DefaultMutableTreeNode(new FileObject(file)));
            }
        }
    }
    public class TreeExpansionAction implements TreeExpansionListener {
        public void treeExpanded(TreeExpansionEvent event) {
            updateNode(event.getPath().getLastPathComponent());
        }
        public void treeCollapsed(TreeExpansionEvent event) {
        	
        }
    }
    public class FileObject {
        private File file;
        private boolean updated;
        public FileObject(File file) {
            this.file = file;
        }
        public File getFile() {
            return file;
        }
        public boolean isUpdated() {
            return updated;
        }
        public void setUpdated(boolean updated) {
            this.updated = updated;
        }
        public String toString() {
            return file.getName();
        }
    }
}