001 /*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2013
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas
009 *
010 * All Rights Reserved
011 *
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.
014 *
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 *
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023 * GNU Lesser Public License for more details.
024 *
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program. If not, see http://www.gnu.org/licenses.
027 */
028 package edu.wisc.ssec.mcidasv.ui;
029
030 import static edu.wisc.ssec.mcidasv.util.CollectionHelpers.cast;
031
032 import java.awt.EventQueue;
033 import java.awt.Font;
034 import java.awt.event.ActionEvent;
035 import java.awt.event.ActionListener;
036 import java.awt.event.ItemEvent;
037 import java.awt.event.ItemListener;
038 import java.util.List;
039
040 import javax.swing.JFrame;
041 import javax.swing.JPanel;
042 import javax.swing.JButton;
043 import javax.swing.JToggleButton;
044
045 import edu.wisc.ssec.mcidasv.util.McVGuiUtils;
046 import net.miginfocom.swing.MigLayout;
047 import javax.swing.JTextField;
048 import javax.swing.JLabel;
049
050 import org.slf4j.Logger;
051 import org.slf4j.LoggerFactory;
052
053 import ucar.unidata.idv.ViewManager;
054 import ucar.unidata.idv.ui.IdvComponentGroup;
055 import ucar.unidata.idv.ui.IdvWindow;
056
057 public class LayerAnimationWindow extends JFrame {
058
059 private static final Logger logger = LoggerFactory.getLogger(LayerAnimationWindow.class);
060
061 private JPanel contentPane;
062 private JTextField fieldCurrentDwell;
063 private JToggleButton tglbtnEnableAnimation;
064 private JButton btnSlower;
065 private JButton btnFaster;
066 private JLabel lblDwell;
067 private JLabel statusLabel;
068
069 /**
070 * Create the frame.
071 */
072 public LayerAnimationWindow() {
073 setTitle("Animate Visibility");
074 setResizable(true);
075 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
076 setBounds(100, 100, 208, 162);
077 contentPane = new JPanel();
078 setContentPane(contentPane);
079 tglbtnEnableAnimation = new JToggleButton("Enable Animation");
080
081 tglbtnEnableAnimation.addItemListener(new ItemListener() {
082 public void itemStateChanged(ItemEvent event) {
083 tglbtnEnableAnimationChanged(event);
084 }
085 });
086 btnSlower = new JButton("Slower");
087 btnSlower.setEnabled(false);
088 btnSlower.addActionListener(new ActionListener() {
089 public void actionPerformed(ActionEvent event) {
090 btnSlowerActionPerformed(event);
091 }
092 });
093
094 btnFaster = new JButton("Faster");
095 btnFaster.setEnabled(false);
096 btnFaster.addActionListener(new ActionListener() {
097 public void actionPerformed(ActionEvent event) {
098 btnFasterActionPerformed(event);
099 }
100 });
101
102 lblDwell = new JLabel("Dwell (s):");
103 lblDwell.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
104 lblDwell.setEnabled(false);
105
106 fieldCurrentDwell = new JTextField();
107 fieldCurrentDwell.setEnabled(false);
108 fieldCurrentDwell.setEditable(false);
109 fieldCurrentDwell.setText("0.0");
110 fieldCurrentDwell.setColumns(6);
111
112 statusLabel = new JLabel("");
113 statusLabel.setEnabled(false);
114
115 contentPane.setLayout(new MigLayout("", "[grow][grow][][]", "[][][][]"));
116 contentPane.add(tglbtnEnableAnimation, "flowy,cell 0 0 3 1,growx,aligny top");
117 contentPane.add(btnSlower, "cell 0 1,alignx right,growy");
118 contentPane.add(btnFaster, "cell 2 1,alignx left,growy");
119 contentPane.add(lblDwell, "cell 0 2,alignx right,aligny baseline");
120 contentPane.add(fieldCurrentDwell, "cell 2 2,alignx left,aligny baseline");
121 contentPane.add(statusLabel, "cell 0 3 3 1");
122 }
123
124 // dear god! change thes
125 private void tglbtnEnableAnimationChanged(final ItemEvent event) {
126 logger.trace("toggle: {}", event);
127 boolean animationEnabled = (event.getStateChange() == ItemEvent.SELECTED);
128 btnSlower.setEnabled(animationEnabled);
129 btnFaster.setEnabled(animationEnabled);
130 ViewManager viewManager = getActiveViewManager();
131 viewManager.setAnimatedVisibilityCheckBox(animationEnabled);
132 double currentSpeed = viewManager.getVisibilityAnimationSpeed();
133 String dwell = Double.toString(currentSpeed / 1000.0);
134 fieldCurrentDwell.setText(dwell);
135 }
136
137 private void btnFasterActionPerformed(final ActionEvent event) {
138 ViewManager viewManager = getActiveViewManager();
139 viewManager.fasterVisibilityAnimation();
140 double currentSpeed = viewManager.getVisibilityAnimationSpeed();
141 String dwell = Double.toString(currentSpeed / 1000.0);
142 fieldCurrentDwell.setText(dwell);
143 logger.trace("faster: animationSpeed={}", dwell);
144 }
145
146 private void btnSlowerActionPerformed(final ActionEvent event) {
147 ViewManager viewManager = getActiveViewManager();
148 viewManager.slowerVisibilityAnimation();
149 double currentSpeed = viewManager.getVisibilityAnimationSpeed();
150 String dwell = Double.toString(currentSpeed / 1000.0);
151 fieldCurrentDwell.setText(dwell);
152 logger.trace("slower: animationSpeed={}", dwell);
153 }
154
155 private ViewManager getActiveViewManager() {
156 List<ViewManager> viewManagers = McVGuiUtils.getActiveViewManagers();
157 if (viewManagers.size() != 1) {
158 statusLabel.setText("no multipanel support yet :(");
159 logger.trace("woe betide the person venturing into shared groups");
160 }
161 ViewManager viewManager = viewManagers.get(0);
162 logger.trace("found a ViewManager: name={} isActive={}", viewManager.getName(), viewManager.getIsActive());
163 return viewManager;
164 }
165
166 /**
167 * Launch the application.
168 */
169 public static void main(String[] args) {
170 EventQueue.invokeLater(new Runnable() {
171 public void run() {
172 try {
173 LayerAnimationWindow frame = new LayerAnimationWindow();
174 frame.setVisible(true);
175 } catch (Exception e) {
176 logger.error("init window", e);
177 }
178 }
179 });
180 }
181 }