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