1
package org.helioviewer.jhv.gui.components;
3
import java.awt.CardLayout;
4
import java.awt.Component;
5
import java.util.HashMap;
7
import javax.swing.JPanel;
8
import javax.swing.SwingUtilities;
10
import org.helioviewer.jhv.layers.LayersListener;
11
import org.helioviewer.jhv.layers.LayersModel;
12
import org.helioviewer.viewmodel.view.ImageInfoView;
13
import org.helioviewer.viewmodel.view.View;
15
public class ControlPanelContainer extends JPanel implements LayersListener {
17
private static final long serialVersionUID = 5760418851530682634L;
18
HashMap<ImageInfoView, Component> controlMap = new HashMap<ImageInfoView, Component>();
20
public ControlPanelContainer() {
21
this.setLayout(new CardLayout());
22
LayersModel.getSingletonInstance().addLayersListener(this);
25
public void addLayer(ImageInfoView view, Component controlPanel) {
26
controlMap.put(view, controlPanel);
27
this.add(controlPanel, view.toString());
30
public void removeLayer(ImageInfoView view) {
31
Component toRemove = controlMap.get(view);
32
this.getLayout().removeLayoutComponent(toRemove);
35
public Component getViewComponent(ImageInfoView view) {
36
return controlMap.get(view);
39
public void updateActiveView() {
40
final View activeView = LayersModel.getSingletonInstance().getActiveView();
41
final ImageInfoView view = activeView != null ? activeView.getAdapter(ImageInfoView.class) : null;
42
final CardLayout cl = (CardLayout) (this.getLayout());
43
final ControlPanelContainer thisComp = this;
44
SwingUtilities.invokeLater(new Runnable() {
46
cl.show(thisComp, view == null ? "null" : view.toString());
47
thisComp.ensureSize();
52
private void ensureSize() {
53
for (Component comp : this.getComponents()) {
54
if (comp.isVisible()) {
55
this.setPreferredSize(comp.getPreferredSize());
61
public void setDefaultPanel(Component comp) {
62
this.add(comp, "null");
63
this.controlMap.put(null, comp);
69
public void activeLayerChanged(int index) {
70
this.updateActiveView();
76
public void layerAdded(int newIndex) {
77
this.updateActiveView();
83
public void layerChanged(int index) {
85
// this is called very often. refine the events to layer visibility
87
boolean visible = LayersModel.getSingletonInstance().isVisible(index);
88
View view = LayersModel.getSingletonInstance().getLayer(index);
89
ImageInfoView imageInfoView = view != null ? view.getAdapter(ImageInfoView.class) : null;
91
Component c = this.getViewComponent(imageInfoView);
94
c.setEnabled(visible);
101
public void layerRemoved(View oldView, int oldIndex) {
107
public void viewportGeometryChanged() {
113
public void subImageDataChanged() {
119
public void timestampChanged(int idx) {
125
public void layerDownloaded(int idx) {