/* This file is part of Wattzap Community Edition. * * Wattzap Community Edtion is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Wattzap Community Edition is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Wattzap. If not, see <http://www.gnu.org/licenses/>. */ package com.wattzap.view.graphs; import java.awt.Color; import java.awt.Font; import javax.swing.JLabel; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import com.wattzap.model.UserPreferences; import com.wattzap.model.dto.WorkoutData; /** * (c) 2014 Wattzap.com * * Workout information panel. Displays all the analyzed data from the workout. * * @author David George * @date 22 September 2014 */ public class InfoPanel extends JPanel { private final static int style1 = Font.CENTER_BASELINE; private final static Font font1 = new Font("Arial", style1, 11); private final static UserPreferences userPrefs = UserPreferences.INSTANCE; private final static String COLGAP = "gapright 10"; // Cadence private JLabel maxCadence; private JLabel aveCadence; // Heart Rate private JLabel ftHeartRate; private JLabel maxHeartRate; private JLabel aveHeartRate; private JLabel distance; // Power private JLabel totalPower; private JLabel avePower; private JLabel maxPower; private JLabel qPower; private JLabel ftPower; private JLabel ft1Power; private JLabel ft20Power; private JLabel fiveSecondPower; private JLabel fiveSecondWKG; private JLabel oneMinutePower; private JLabel oneMinuteWKG; private JLabel fiveMinutePower; private JLabel fiveMinuteWKG; private JLabel twentyMinutePower; private JLabel twentyMinuteWKG; private JLabel load; private JLabel stress; private JLabel time; public InfoPanel() { MigLayout layout = new MigLayout(); this.setLayout(layout); setBackground(Color.LIGHT_GRAY); // time JLabel timeLabel = new JLabel(); timeLabel.setFont(font1); timeLabel.setText("Time"); add(timeLabel); time = new JLabel(); time.setFont(font1); time.setForeground(Color.DARK_GRAY); add(time, COLGAP); // distance JLabel distanceLabel = new JLabel(); distanceLabel.setFont(font1); distanceLabel.setText(userPrefs.getString("distance")); add(distanceLabel); distance = new JLabel(); distance.setFont(font1); distance.setForeground(Color.DARK_GRAY); add(distance, "wrap"); // Max Heart Rate JLabel maxHeartRateLabel = new JLabel(); maxHeartRateLabel.setFont(font1); maxHeartRateLabel.setText(userPrefs.getString("maxhr")); add(maxHeartRateLabel); maxHeartRate = new JLabel(); maxHeartRate.setFont(font1); maxHeartRate.setForeground(Color.DARK_GRAY); add(maxHeartRate, COLGAP); // Average Heartrate JLabel aveHeartRateLabel = new JLabel(); aveHeartRateLabel.setFont(font1); aveHeartRateLabel.setText(userPrefs.getString("avehr")); add(aveHeartRateLabel); aveHeartRate = new JLabel(); aveHeartRate.setFont(font1); aveHeartRate.setForeground(Color.DARK_GRAY); add(aveHeartRate, COLGAP); // Functional Threshold Heartrate JLabel fthrLabel = new JLabel(); fthrLabel.setFont(font1); fthrLabel.setText(userPrefs.getString("fthr")); add(fthrLabel); ftHeartRate = new JLabel(); ftHeartRate.setFont(font1); ftHeartRate.setForeground(Color.DARK_GRAY); add(ftHeartRate, COLGAP); // Average Cadence JLabel aveCadenceLabel = new JLabel(); aveCadenceLabel.setFont(font1); aveCadenceLabel.setText(userPrefs.getString("avecad")); add(aveCadenceLabel); aveCadence = new JLabel(); aveCadence.setFont(font1); aveCadence.setForeground(Color.DARK_GRAY); add(aveCadence, COLGAP); JLabel maxCadenceLabel = new JLabel(); maxCadenceLabel.setFont(font1); maxCadenceLabel.setText(userPrefs.getString("maxcad")); add(maxCadenceLabel); maxCadence = new JLabel(); maxCadence.setFont(font1); maxCadence.setForeground(Color.DARK_GRAY); add(maxCadence, "wrap"); // Total Power JLabel powerLabel = new JLabel(); powerLabel.setFont(font1); powerLabel.setText(userPrefs.getString("power")); add(powerLabel); totalPower = new JLabel(); totalPower.setFont(font1); totalPower.setForeground(Color.DARK_GRAY); add(totalPower, COLGAP); // Average Power JLabel aveLabel = new JLabel(); aveLabel.setFont(font1); aveLabel.setText(userPrefs.getString("avepow")); add(aveLabel); avePower = new JLabel(); avePower.setFont(font1); avePower.setForeground(Color.DARK_GRAY); add(avePower, COLGAP); // Max Power JLabel maxLabel = new JLabel(); maxLabel.setFont(font1); maxLabel.setText(userPrefs.getString("maxpow")); add(maxLabel); maxPower = new JLabel(); maxPower.setFont(font1); maxPower.setForeground(Color.DARK_GRAY); add(maxPower, COLGAP); // Quadratic Power JLabel qLabel = new JLabel(); qLabel.setFont(font1); qLabel.setText(userPrefs.getString("qpow")); add(qLabel); qPower = new JLabel(); qPower.setFont(font1); qPower.setForeground(Color.DARK_GRAY); add(qPower, "wrap"); // Current FTP JLabel ftpLabel = new JLabel(); ftpLabel.setFont(font1); ftpLabel.setText(userPrefs.getString("cftp")); add(ftpLabel); ftPower = new JLabel(); ftPower.setFont(font1); ftPower.setForeground(Color.DARK_GRAY); add(ftPower, COLGAP); JLabel ftp1Label = new JLabel(); ftp1Label.setFont(font1); ftp1Label.setText(userPrefs.getString("1minftp")); add(ftp1Label); ft1Power = new JLabel(); ft1Power.setFont(font1); ft1Power.setForeground(Color.DARK_GRAY); add(ft1Power, COLGAP); JLabel ftp2Label = new JLabel(); ftp2Label.setFont(font1); ftp2Label.setText(userPrefs.getString("20minftp")); add(ftp2Label); ft20Power = new JLabel(); ft20Power.setFont(font1); ft20Power.setForeground(Color.DARK_GRAY); add(ft20Power, COLGAP); // Load JLabel loadLabel = new JLabel(); loadLabel.setFont(font1); loadLabel.setText(userPrefs.getString("load")); add(loadLabel); load = new JLabel(); load.setFont(font1); load.setForeground(Color.DARK_GRAY); add(load, COLGAP); JLabel stressLabel = new JLabel(); stressLabel.setFont(font1); stressLabel.setText(userPrefs.getString("stress")); add(stressLabel); stress = new JLabel(); stress.setFont(font1); stress.setForeground(Color.DARK_GRAY); add(stress, COLGAP); } public void update(WorkoutData data) { if (data == null) { return; } maxHeartRate.setText(data.getMaxHR() + " bpm"); aveHeartRate.setText(data.getAveHR() + " bpm"); ftHeartRate.setText(data.getFtHR() + " bpm"); aveCadence.setText(data.getAveCadence() + " rpm"); maxCadence.setText(data.getMaxCadence() + " rpm"); avePower.setText(data.getAvePower() + " Watts"); maxPower.setText(data.getMaxPower() + " Watts"); totalPower.setText(data.getTotalPower() + " Watts"); qPower.setText(data.getQuadraticPower() + " Watts"); ftPower.setText(UserPreferences.INSTANCE.getMaxPower() + " Watts"); ft1Power.setText((int) (data.getOneMinutePwr()*0.75) + " Watts"); ft20Power.setText((int) (data.getTwentyMinutePwr()*0.95) + " Watts"); load.setText("" + (int)(data.getIntensity()*100)); stress.setText("" + data.getStress()); time.setText(data.getDateAsString()); distance.setText(String.format("%.3f", data.getDistanceMeters() / 1000) + " km"); } private static final long serialVersionUID = 1L; }