001/* 002 * This file is part of McIDAS-V 003 * 004 * Copyright 2007-2016 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 */ 028package edu.wisc.ssec.mcidasv.ui; 029 030import java.awt.EventQueue; 031import java.awt.Font; 032import java.awt.event.ActionEvent; 033import java.awt.event.ActionListener; 034import java.awt.event.ItemEvent; 035import java.awt.event.ItemListener; 036import java.util.List; 037 038import javax.swing.JFrame; 039import javax.swing.JPanel; 040import javax.swing.JButton; 041import javax.swing.JToggleButton; 042 043import edu.wisc.ssec.mcidasv.util.McVGuiUtils; 044import net.miginfocom.swing.MigLayout; 045import javax.swing.JTextField; 046import javax.swing.JLabel; 047 048import org.slf4j.Logger; 049import org.slf4j.LoggerFactory; 050 051import ucar.unidata.idv.ViewManager; 052 053public class LayerAnimationWindow extends JFrame { 054 055 private static final Logger logger = LoggerFactory.getLogger(LayerAnimationWindow.class); 056 057 private JPanel contentPane; 058 private JTextField fieldCurrentDwell; 059 private JToggleButton tglbtnEnableAnimation; 060 private JButton btnSlower; 061 private JButton btnFaster; 062 private JLabel lblDwell; 063 private JLabel statusLabel; 064 065 /** 066 * Create the frame. 067 */ 068 public LayerAnimationWindow() { 069 setTitle("Animate Visibility"); 070 setResizable(true); 071 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 072 setBounds(100, 100, 208, 162); 073 contentPane = new JPanel(); 074 setContentPane(contentPane); 075 tglbtnEnableAnimation = new JToggleButton("Enable Animation"); 076 077 tglbtnEnableAnimation.addItemListener(new ItemListener() { 078 public void itemStateChanged(ItemEvent event) { 079 tglbtnEnableAnimationChanged(event); 080 } 081 }); 082 btnSlower = new JButton("Slower"); 083 btnSlower.setEnabled(false); 084 btnSlower.addActionListener(new ActionListener() { 085 public void actionPerformed(ActionEvent event) { 086 btnSlowerActionPerformed(event); 087 } 088 }); 089 090 btnFaster = new JButton("Faster"); 091 btnFaster.setEnabled(false); 092 btnFaster.addActionListener(new ActionListener() { 093 public void actionPerformed(ActionEvent event) { 094 btnFasterActionPerformed(event); 095 } 096 }); 097 098 lblDwell = new JLabel("Dwell (s):"); 099 lblDwell.setFont(new Font("Lucida Grande", Font.PLAIN, 11)); 100 lblDwell.setEnabled(false); 101 102 fieldCurrentDwell = new JTextField(); 103 fieldCurrentDwell.setEnabled(false); 104 fieldCurrentDwell.setEditable(false); 105 fieldCurrentDwell.setText("0.0"); 106 fieldCurrentDwell.setColumns(6); 107 108 statusLabel = new JLabel(""); 109 statusLabel.setEnabled(false); 110 111 contentPane.setLayout(new MigLayout("", "[grow][grow][][]", "[][][][]")); 112 contentPane.add(tglbtnEnableAnimation, "flowy,cell 0 0 3 1,growx,aligny top"); 113 contentPane.add(btnSlower, "cell 0 1,alignx right,growy"); 114 contentPane.add(btnFaster, "cell 2 1,alignx left,growy"); 115 contentPane.add(lblDwell, "cell 0 2,alignx right,aligny baseline"); 116 contentPane.add(fieldCurrentDwell, "cell 2 2,alignx left,aligny baseline"); 117 contentPane.add(statusLabel, "cell 0 3 3 1"); 118 } 119 120 // dear god! change thes 121 private void tglbtnEnableAnimationChanged(final ItemEvent event) { 122 logger.trace("toggle: {}", event); 123 boolean animationEnabled = (event.getStateChange() == ItemEvent.SELECTED); 124 btnSlower.setEnabled(animationEnabled); 125 btnFaster.setEnabled(animationEnabled); 126 ViewManager viewManager = getActiveViewManager(); 127 viewManager.setAnimatedVisibilityCheckBox(animationEnabled); 128 double currentSpeed = viewManager.getVisibilityAnimationSpeed(); 129 String dwell = Double.toString(currentSpeed / 1000.0); 130 fieldCurrentDwell.setText(dwell); 131 } 132 133 private void btnFasterActionPerformed(final ActionEvent event) { 134 ViewManager viewManager = getActiveViewManager(); 135 viewManager.fasterVisibilityAnimation(); 136 double currentSpeed = viewManager.getVisibilityAnimationSpeed(); 137 String dwell = Double.toString(currentSpeed / 1000.0); 138 fieldCurrentDwell.setText(dwell); 139 logger.trace("faster: animationSpeed={}", dwell); 140 } 141 142 private void btnSlowerActionPerformed(final ActionEvent event) { 143 ViewManager viewManager = getActiveViewManager(); 144 viewManager.slowerVisibilityAnimation(); 145 double currentSpeed = viewManager.getVisibilityAnimationSpeed(); 146 String dwell = Double.toString(currentSpeed / 1000.0); 147 fieldCurrentDwell.setText(dwell); 148 logger.trace("slower: animationSpeed={}", dwell); 149 } 150 151 private ViewManager getActiveViewManager() { 152 List<ViewManager> viewManagers = McVGuiUtils.getActiveViewManagers(); 153 if (viewManagers.size() != 1) { 154 statusLabel.setText("no multipanel support yet :("); 155 logger.trace("woe betide the person venturing into shared groups"); 156 } 157 ViewManager viewManager = viewManagers.get(0); 158 logger.trace("found a ViewManager: name={} isActive={}", viewManager.getName(), viewManager.getIsActive()); 159 return viewManager; 160 } 161 162 /** 163 * Launch the application. 164 */ 165 public static void main(String[] args) { 166 EventQueue.invokeLater(new Runnable() { 167 public void run() { 168 try { 169 LayerAnimationWindow frame = new LayerAnimationWindow(); 170 frame.setVisible(true); 171 } catch (Exception e) { 172 logger.error("init window", e); 173 } 174 } 175 }); 176 } 177}