Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / task / DefaultJTasksStatus.java @ 449

History | View | Annotate | Download (4.05 KB)

1
package org.gvsig.tools.swing.impl.task;
2

    
3
import java.awt.Dimension;
4
import java.awt.FlowLayout;
5
import java.awt.LayoutManager;
6
import java.awt.event.ActionEvent;
7
import java.awt.event.ActionListener;
8
import java.net.URL;
9

    
10
import javax.swing.ImageIcon;
11
import javax.swing.JButton;
12
import javax.swing.JComponent;
13
import javax.swing.JLabel;
14
import javax.swing.JProgressBar;
15
import javax.swing.SwingUtilities;
16

    
17
import org.gvsig.tools.ToolsLocator;
18
import org.gvsig.tools.observer.Observable;
19
import org.gvsig.tools.observer.Observer;
20
import org.gvsig.tools.swing.api.ToolsSwingLocator;
21
import org.gvsig.tools.swing.api.task.JTasksStatus;
22
import org.gvsig.tools.swing.api.task.JTasksStatusList;
23
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
24
import org.gvsig.tools.task.TaskStatus;
25
import org.gvsig.tools.task.TaskStatusManager;
26

    
27
public class DefaultJTasksStatus extends JTasksStatus implements Observer {
28

    
29
        /**
30
         * 
31
         */
32
        private static final long serialVersionUID = 245436792193991920L;
33

    
34
        private TaskStatusManager manager = null;
35
        private JLabel label = null;
36
        private JProgressBar progressBar = null;
37
        private JButton showAllTaskStatusButton = null;
38
        
39
        public DefaultJTasksStatus() {
40
                this(ToolsLocator.getTaskStatusManager());
41
        }
42
        
43
        public DefaultJTasksStatus(TaskStatusManager manager) {
44
                this.bind(manager);
45
                this.createComponents();
46
        }
47
        
48
        public JComponent asJComponent() {
49
                return this;
50
        }
51
        
52
        public void bind(TaskStatusManager manager) {
53
                if( this.manager!=null ) {
54
                        this.manager.deleteObserver(this);
55
                }
56
                this.manager = manager;
57
                if( this.manager!= null ) {
58
                        this.manager.addObserver(this);
59
                }
60
        }
61

    
62
        private void createComponents() {
63
                this.label = new JLabel();
64
                this.label.setPreferredSize( new Dimension( 200, 16));
65
                
66
                this.progressBar = new JProgressBar(1,100);
67
                this.progressBar.setPreferredSize(new Dimension( 40, 10));
68
                this.progressBar.setIndeterminate(true);
69
                this.progressBar.setBorderPainted(true);
70
                this.progressBar.setVisible(false);
71
                
72
                this.showAllTaskStatusButton = new JButton();
73
                this.showAllTaskStatusButton.setPreferredSize( new Dimension(16, 16));
74
                this.showAllTaskStatusButton.setBorderPainted(false);
75
                this.showAllTaskStatusButton.setIcon( this.getIcon("showAllTaskStatusButton.png"));
76
                this.showAllTaskStatusButton.setVisible(false);
77
                this.showAllTaskStatusButton.addActionListener(new ActionListener() {
78
                        public void actionPerformed(ActionEvent arg0) {
79
                                JTasksStatusList dialog = ToolsSwingLocator.getTaskStatusSwingManager().createJTasksStatusList(manager);
80
                                WindowManager wm = ToolsSwingLocator.getWindowManager();
81
                                wm.showWindow(dialog, "Tasks",WindowManager.MODE.TOOL);
82
                        }
83
                });
84
                
85
                LayoutManager layout = new FlowLayout();
86
                this.setLayout(layout);
87
                
88
                this.add(this.label);
89
                this.add(this.progressBar);
90
                this.add(this.showAllTaskStatusButton);
91
        }
92
        
93
        private ImageIcon getIcon(String name) {
94
                URL iconurl = this.getClass().getResource(name);
95
                if( iconurl == null ) {
96
                        return new ImageIcon();
97
                }
98
                return new ImageIcon(iconurl);
99
        }
100
        public void update(final Observable observable, final Object notification) {
101

    
102
                if(notification != null && !(notification instanceof TaskStatus) ) {
103
                        return;
104
                }
105
                if( !SwingUtilities.isEventDispatchThread()) {
106
                        SwingUtilities.invokeLater( new Runnable() {
107
                                public void run() {
108
                                        update(observable, notification);
109
                                }
110
                        });
111
                        return;
112
                }
113
                if( notification == null ) {
114
                        this.label.setText("");
115
                        this.progressBar.setVisible(false);
116
                        this.showAllTaskStatusButton.setVisible(false);
117
                        return;
118
                }
119
                TaskStatus taskStatus = (TaskStatus) notification;
120
                String label = taskStatus.getLabel();
121
                if( label == null || label.trim().equals("") ) {
122
                        label = taskStatus.getTitle();
123
                } else {
124
                        label = taskStatus.getTitle() + ": " + label;
125
                }
126
                this.label.setText( label );
127
                this.progressBar.setIndeterminate( taskStatus.isIndeterminate() );
128
                this.progressBar.setValue( taskStatus.getCompleted() );
129
                if( !this.progressBar.isVisible() ) {
130
                        this.progressBar.setVisible(true);
131
                }
132
                if( !this.showAllTaskStatusButton.isVisible() ) {
133
                        this.showAllTaskStatusButton.setVisible(true);
134
                }
135
                
136
        }
137

    
138
}