root / org.gvsig.proj / branches / refactor2018 / org.gvsig.proj / org.gvsig.proj.swing / org.gvsig.proj.swing.impl / src / main / java / org / gvsig / proj / swing / impl / tree / LoadingNode.java @ 854
History | View | Annotate | Download (1.81 KB)
1 | 852 | cmartinez | package org.gvsig.proj.swing.impl.tree; |
---|---|---|---|
2 | |||
3 | import java.awt.Image; |
||
4 | import java.awt.Rectangle; |
||
5 | import java.awt.image.ImageObserver; |
||
6 | import java.util.Objects; |
||
7 | |||
8 | import javax.swing.ImageIcon; |
||
9 | import javax.swing.JTree; |
||
10 | import javax.swing.tree.TreeNode; |
||
11 | import javax.swing.tree.TreePath; |
||
12 | |||
13 | 854 | cmartinez | import org.gvsig.tools.swing.api.ToolsSwingLocator; |
14 | |||
15 | 852 | cmartinez | public class LoadingNode extends LeafNode { |
16 | private String message; |
||
17 | private ImageIcon icon; |
||
18 | final protected TreePath path; |
||
19 | final protected JTree tree; |
||
20 | |||
21 | public LoadingNode(BranchNode parent, TreeContainer container, String message) { |
||
22 | super(parent);
|
||
23 | 854 | cmartinez | |
24 | 852 | cmartinez | // we don't want to reuse the icon for other nodes, since we'll add an observer to the icon
|
25 | 854 | cmartinez | this.icon = new ImageIcon(ToolsSwingLocator.getIconThemeManager().getCurrent().get("spinner").getImage()); |
26 | 852 | cmartinez | this.message = message;
|
27 | this.tree = container.getTree();
|
||
28 | |||
29 | TreeNode[] nodeList = container.getModel().getPathToRoot(this); |
||
30 | if (nodeList!=null) { |
||
31 | path = new TreePath(nodeList); |
||
32 | } |
||
33 | else {
|
||
34 | path = null;
|
||
35 | } |
||
36 | |||
37 | // required for animaged gifs in treenodes
|
||
38 | this.icon.setImageObserver(new ImageObserver() { |
||
39 | @Override
|
||
40 | public boolean imageUpdate( |
||
41 | Image img, int infoflags, int x, int y, int w, int h) { |
||
42 | if (path == null || !LoadingNode.this.tree.isShowing()) { |
||
43 | return false; |
||
44 | } |
||
45 | Rectangle cellRect = LoadingNode.this.tree.getPathBounds(path);
|
||
46 | if ((infoflags & (FRAMEBITS | ALLBITS)) != 0 && Objects.nonNull(cellRect)) { |
||
47 | LoadingNode.this.tree.repaint(cellRect); |
||
48 | } |
||
49 | return (infoflags & (ALLBITS | ABORT)) == 0; |
||
50 | } |
||
51 | }); |
||
52 | } |
||
53 | |||
54 | public void setMessage(String message) { |
||
55 | this.message = message;
|
||
56 | } |
||
57 | |||
58 | @Override
|
||
59 | public String toString() { |
||
60 | return message;
|
||
61 | } |
||
62 | |||
63 | @Override
|
||
64 | public ImageIcon getIcon() { |
||
65 | return icon;
|
||
66 | } |
||
67 | } |