Changeset 191
- Timestamp:
- 02/23/10 21:18:49 (2 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 13 modified
-
CHANGELOG (modified) (1 diff)
-
src/org/jergometer/diagram/BikeDiagram.java (modified) (1 diff)
-
src/org/jergometer/diagram/BikeProgramVisualizer.java (modified) (1 diff)
-
src/org/jergometer/diagram/BikeSessionVisualizer.java (modified) (1 diff)
-
src/org/jergometer/diagram/ProgressionVisualizer.java (modified) (2 diffs)
-
src/org/jergometer/gui/Diagram.java (modified) (9 diffs)
-
src/org/jergometer/gui/MainWindow.java (modified) (6 diffs)
-
src/org/jergometer/Jergometer.java (modified) (10 diffs)
-
src/org/jergometer/JergometerConsole.java (added)
-
src/org/jergometer/model/BikeSession.java (modified) (10 diffs)
-
src/org/jergometer/model/SessionTableModel.java (modified) (1 diff)
-
src/org/jergometer/model/StatsRecord.java (added)
-
src/org/jergometer/model/UserData.java (modified) (4 diffs)
-
src/org/jergometer/translation/jergometer_de.properties (modified) (1 diff)
-
src/org/jergometer/translation/jergometer.properties (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/CHANGELOG
r190 r191 3 3 4 4 //== 0.7.9 == 5 6 2010-02-23 7 * [stefan] * implemented feature #177: extend timeline automatically when reaching end of traning program 5 8 6 9 2010-02-20 -
trunk/src/org/jergometer/diagram/BikeDiagram.java
r182 r191 12 12 */ 13 13 public class BikeDiagram { 14 public static void createLegend(Diagram diagram, boolean dest, boolean bright, long programLength) { 15 diagram.addVerticalMarker(programLength, Color.BLACK, new BasicStroke(), "End of program"); 16 17 createLegend(diagram, dest, bright); 18 } 19 14 20 public static void createLegend(Diagram diagram, boolean dest, boolean bright) { 15 21 String suffix = ""; -
trunk/src/org/jergometer/diagram/BikeProgramVisualizer.java
r175 r191 18 18 } 19 19 20 public void visualize(BikeProgram bikeProgram, boolean bright ) {20 public void visualize(BikeProgram bikeProgram, boolean bright, long duration) { 21 21 synchronized(diagram) { 22 22 BikeProgramData data = bikeProgram.getProgramData(); 23 diagram.setTimeRange(new Diagram.Range(0,data.getDuration())); 23 duration = duration == -1 ? data.getDuration() : duration; 24 25 diagram.setTimeRange(new Diagram.Range(0, duration)); 24 26 diagram.setTimeAxisType(Diagram.TimeAxisType.minute); 25 27 26 28 diagram.clearGraphs(); 27 BikeDiagram.createLegend(diagram, true, bright );29 BikeDiagram.createLegend(diagram, true, bright, data.getDuration()); 28 30 29 31 BikeProgramData.Action lastAction = null; -
trunk/src/org/jergometer/diagram/BikeSessionVisualizer.java
r175 r191 21 21 } 22 22 23 public void visualize(BikeSession bikeSession, boolean clearBefore ) throws IOException {23 public void visualize(BikeSession bikeSession, boolean clearBefore, boolean fullSessionLength) throws IOException { 24 24 synchronized(diagram) { 25 25 ArrayList<MiniDataRecord> miniDataRecords = bikeSession.getData(); 26 26 27 int duration = fullSessionLength ? bikeSession.getStatsTotal().getDuration() : bikeSession.getProgramDuration(); 28 27 29 if (clearBefore) { 28 diagram.setTimeRange(new Diagram.Range(0, bikeSession.getProgramDuration()));30 diagram.setTimeRange(new Diagram.Range(0, duration)); 29 31 diagram.setTimeAxisType(Diagram.TimeAxisType.minute); 30 32 diagram.clearGraphs(); 31 33 } 32 BikeDiagram.createLegend(diagram, false, false );34 BikeDiagram.createLegend(diagram, false, false, bikeSession.getProgramDuration()); 33 35 34 36 int time = 0; 35 37 for (MiniDataRecord miniDataRecord : miniDataRecords) { 36 38 if (stopped) return; 37 if (time == bikeSession.getProgramDuration()) break;39 if (time == duration) break; 38 40 39 41 diagram.addValue("pulse", time, miniDataRecord.getPulse()); -
trunk/src/org/jergometer/diagram/ProgressionVisualizer.java
r175 r191 4 4 import org.jergometer.model.BikeSession; 5 5 import org.jergometer.model.MiniDataRecord; 6 import org.jergometer.model.StatsRecord; 6 7 7 8 import java.util.ArrayList; … … 42 43 long time = bikeSession.getStartTime().getTime() - start; 43 44 int programDuration = bikeSession.getProgramDuration(); 44 MiniDataRecord sum = bikeSession.getSum();45 StatsRecord sum = bikeSession.getStatsRegular(); 45 46 46 if ( bikeSession.getPulseCount() != 0) {47 diagram.addValue("pulse", time, sum.getPulse()/bikeSession.getPulseCount());47 if (sum.getPulseCount() != 0) { 48 diagram.addValue("pulse", time, (int) (sum.getAveragePulse() + 0.5)); 48 49 } 49 50 if (programDuration != 0) { 50 diagram.addValue("pedalRPM", time, sum.getPedalRpm()/programDuration);51 diagram.addValue("power", time, sum.getPower()/programDuration);52 double performance = ( (double) sum.getPower()/programDuration * sum.getPedalRpm()/programDuration/ 60);53 diagram.addValue("performance", time, (int) performance);51 diagram.addValue("pedalRPM", time, (int) (sum.getAveragePedalRPM() + 0.5)); 52 diagram.addValue("power", time, (int) (sum.getAveragePower() + 0.5)); 53 double performance = (sum.getAveragePower() * sum.getAveragePedalRPM() / 60); 54 diagram.addValue("performance", time, (int) (performance + 0.5)); 54 55 } 55 56 } -
trunk/src/org/jergometer/gui/Diagram.java
r181 r191 53 53 private ArrayList<Graph>[] graphs = new ArrayList[] { new ArrayList<Graph>(), new ArrayList<Graph>() }; 54 54 private HashMap<Object,Graph> key2Graph = new HashMap<Object, Graph>(); 55 private ArrayList<Marker> verticalMarkers = new ArrayList<Marker>(); 55 56 56 57 /** Background image. */ … … 146 147 147 148 redrawImage(); 148 repaint();149 149 } 150 150 151 151 public void clearGraphs() { 152 verticalMarkers.clear(); 153 152 154 for (ArrayList<Graph> graph : graphs) { 153 155 graph.clear(); … … 156 158 157 159 redrawImage(); 158 repaint();159 160 } 160 161 … … 191 192 } 192 193 194 public synchronized void addVerticalMarker(long time, Color color, Stroke stroke, String msg) { 195 verticalMarkers.add(new Marker(time, color, stroke, msg)); 196 } 197 193 198 public void paint(Graphics g) { 194 199 super.paint(g); … … 196 201 } 197 202 198 p rivatevoid redrawImage() {203 public void redrawImage() { 199 204 Graphics2D g = backgroundImage.createGraphics(); 200 205 int width = backgroundImage.getWidth(); … … 212 217 // draw highlights 213 218 drawHighlights(g); 219 220 // draw marker lines 221 drawVerticalMarkers(g); 214 222 215 223 // draw graph … … 227 235 drawVerticalAxisMarkers(g, Side.left, true); 228 236 drawTimeAxisMarkers(g, true); 237 238 repaint(); 239 } 240 241 private void drawVerticalMarkers(Graphics2D g) { 242 int height = backgroundImage.getHeight(); 243 244 Color oldColor = g.getColor(); 245 Stroke oldStroke = g.getStroke(); 246 for (Marker verticalMarker : verticalMarkers) { 247 if (verticalMarker.color != null) g.setColor(verticalMarker.color); 248 if (verticalMarker.stroke != null) g.setStroke(verticalMarker.stroke); 249 long x = verticalMarker.x; 250 g.draw(new Line2D.Float(getX(x), margin.top, getX(x), height - margin.bottom + crossSize)); 251 } 252 g.setColor(oldColor); 253 g.setStroke(oldStroke); 229 254 } 230 255 … … 425 450 backgroundImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); 426 451 redrawImage(); 427 repaint();428 452 } 429 453 … … 518 542 } 519 543 } 544 545 public static class Marker { 546 private long x; 547 public Color color; 548 public Stroke stroke; 549 private String msg; 550 551 public Marker(long x, Color color, Stroke stroke, String msg) { 552 this.x = x; 553 this.color = color; 554 this.stroke = stroke; 555 this.msg = msg; 556 } 557 } 520 558 } -
trunk/src/org/jergometer/gui/MainWindow.java
r187 r191 52 52 private JRadioButtonMenuItem diagramProgressionMenuItem; 53 53 private JCheckBoxMenuItem showOnlyCompletedSessionsMenuItem; 54 private JCheckBoxMenuItem showFullSessionLength; 54 55 private JMenu userMenu; 55 56 private ButtonGroup userButtonGroup; … … 205 206 showOnlyCompletedSessionsMenuItem.addActionListener(this); 206 207 sessionsMenu.add(showOnlyCompletedSessionsMenuItem); 208 showFullSessionLength = new JCheckBoxMenuItem(I18n.getString("menu.sessions.show_full_length")); 209 showFullSessionLength.setMnemonic(I18n.getMnemonic("menu.sessions.show_full_length_mn")); 210 showFullSessionLength.setAccelerator(KeyStroke.getKeyStroke(I18n.getString("menu.sessions.show_full_length_ks"))); 211 showFullSessionLength.addActionListener(this); 212 sessionsMenu.add(showFullSessionLength); 207 213 JMenuItem selectAllSessionsMenuItem = new JMenuItem(I18n.getString("menu.sessions.select_all")); 208 214 selectAllSessionsMenuItem.setActionCommand(AC_SELECT_ALL_SESSIONS); … … 382 388 jergometer.setSessionsVis(Jergometer.SessionsVis.progression); 383 389 } else if (e.getSource() == showOnlyCompletedSessionsMenuItem) { 384 System.out.println(showOnlyCompletedSessionsMenuItem.isSelected());385 390 jergometer.setShowOnlyCompletedSessions(showOnlyCompletedSessionsMenuItem.isSelected()); 391 } else if (e.getSource() == showFullSessionLength) { 392 jergometer.setShowFullSessionLength(showFullSessionLength.isSelected()); 386 393 } else if (e.getActionCommand() == AC_SELECT_ALL_SESSIONS) { 387 394 sessionTable.selectAll(); … … 448 455 } catch (Exception e) { 449 456 JOptionPane.showMessageDialog(mainWindow, I18n.getString("msg.could_not_open_file.please_configure_editor"), 450 I18n.getString("msg.could_not_open_xml_editor"), JOptionPane.ERROR_MESSAGE);457 I18n.getString("msg.could_not_open_xml_editor"), JOptionPane.ERROR_MESSAGE); 451 458 openSettingsWindow(); 452 459 } … … 457 464 } catch (IOException e) { 458 465 JOptionPane.showMessageDialog(mainWindow, I18n.getString("msg.error_during_execution_of", command), 459 I18n.getString("msg.could_not_open_xml_editor"), JOptionPane.ERROR_MESSAGE);466 I18n.getString("msg.could_not_open_xml_editor"), JOptionPane.ERROR_MESSAGE); 460 467 } catch (InterruptedException ignored) { 461 468 } … … 759 766 } 760 767 768 public void setShowFullSessionLength(boolean value) { 769 showFullSessionLength.setSelected(value); 770 } 771 772 public boolean isShowFullSessionLength() { 773 return showFullSessionLength.isSelected(); 774 } 775 761 776 { 762 777 // GUI initializer generated by IntelliJ IDEA GUI Designer -
trunk/src/org/jergometer/Jergometer.java
r187 r191 16 16 import javax.swing.*; 17 17 import java.awt.event.*; 18 import java.io.File;19 18 import java.io.IOException; 20 19 import java.util.ArrayList; … … 140 139 141 140 switchToUser(jergometerSettings.getLastUserName()); 141 142 new JergometerConsole(this).start(); 142 143 143 144 Runtime.getRuntime().addShutdownHook(new Thread(){ … … 328 329 Diagram diagram = mainWindow.getDiagram(); 329 330 // diagram.clearGraphs(); 330 BikeDiagram.createLegend(diagram, false, false );331 BikeDiagram.createLegend(diagram, false, false, program.getProgramData().getDuration()); 331 332 332 333 try { … … 408 409 diagramVisualizer.stopVisualization(); 409 410 filterSessions(); 410 visualizeBikeProgram(bikeProgram, bright );411 visualizeBikeProgram(bikeProgram, bright, -1); 411 412 } 412 413 … … 421 422 } 422 423 423 private void visualizeBikeProgram(BikeProgram bikeProgram, boolean bright ) {424 private void visualizeBikeProgram(BikeProgram bikeProgram, boolean bright, long duration) { 424 425 BikeProgramVisualizer bikeProgramVisualizer = new BikeProgramVisualizer(mainWindow.getDiagram()); 425 426 diagramVisualizer = bikeProgramVisualizer; 426 bikeProgramVisualizer.visualize(bikeProgram, bright );427 bikeProgramVisualizer.visualize(bikeProgram, bright, duration); 427 428 } 428 429 … … 463 464 diagramVisualizer.stopVisualization(); 464 465 466 int duration = mainWindow.isShowFullSessionLength() ? bikeSession.getStatsTotal().getDuration() : bikeSession.getProgramDuration(); 467 465 468 // draw the program 466 469 BikeProgram bikeProgram = programTree.getProgram(bikeSession.getProgramName()); 467 470 boolean programFound = bikeProgram != null; 468 471 if (programFound) { 469 visualizeBikeProgram(bikeProgram, true );472 visualizeBikeProgram(bikeProgram, true, duration); 470 473 } 471 474 … … 473 476 BikeSessionVisualizer bikeSessionVisualizer = new BikeSessionVisualizer(mainWindow.getDiagram()); 474 477 diagramVisualizer = bikeSessionVisualizer; 475 bikeSessionVisualizer.visualize(bikeSession, !programFound );478 bikeSessionVisualizer.visualize(bikeSession, !programFound, mainWindow.isShowFullSessionLength()); 476 479 } 477 480 … … 481 484 switch (sessionsVis) { 482 485 case average: 486 boolean fullLength = mainWindow.isShowFullSessionLength(); 487 488 // calculate minimal duration 483 489 int duration = Integer.MAX_VALUE; 484 490 for (BikeSession bikeSession : bikeSessions) { 485 duration = Math.min(duration,bikeSession.getProgramDuration()); 491 int thisDuration = fullLength ? bikeSession.getStatsTotal().getDuration() : bikeSession.getProgramDuration(); 492 duration = Math.min(duration, thisDuration); 486 493 } 487 494 … … 545 552 } 546 553 554 public void setShowFullSessionLength(boolean value) { 555 mainWindow.setShowFullSessionLength(value); 556 557 if (selectedSessions.size() == 1) { 558 selectBikeSession(selectedSessions.get(0)); 559 } else 560 if (selectedSessions.size() > 1) { 561 selectBikeSessions(selectedSessions); 562 } 563 } 564 565 public BikeProgram getProgram() { 566 return program; 567 } 568 547 569 public ArrayList<BikeSession> getSelectedBikeSessions() { 548 570 return selectedSessions; … … 580 602 public void bikeData(DataRecord data) { 581 603 mainWindow.setData(data); 582 if (program.getSession().getDuration() < program.getSession().getProgramDuration()) { 583 mainWindow.getDiagram().addValue("pulse", program.getSession().getDuration(), data.getPulse()); 584 mainWindow.getDiagram().addValue("pedalRPM", program.getSession().getDuration(), data.getPedalRpm()); 585 mainWindow.getDiagram().addValue("power", program.getSession().getDuration(), data.getRealPower()); 604 605 Diagram diagram = mainWindow.getDiagram(); 606 607 // extends time range when we are at the end 608 if (program.getSession().getDuration() >= diagram.getTimeRange().max) { 609 long newMax = diagram.getTimeRange().max + (program.getProgramData().getDuration() / 2); 610 diagram.setTimeRange(new Diagram.Range(0, newMax)); 611 diagram.redrawImage(); 612 } 613 614 if (program.getSession().getDuration() < diagram.getTimeRange().max) { 615 int time = program.getSession().getDuration(); 616 diagram.addValue("pulse", time, data.getPulse()); 617 diagram.addValue("pedalRPM", time, data.getPedalRpm()); 618 diagram.addValue("power", time, data.getRealPower()); 586 619 } 587 620 -
trunk/src/org/jergometer/model/BikeSession.java
r189 r191 14 14 private String programName; 15 15 private int programDuration; 16 private int duration;17 16 private ArrayList<MiniDataRecord> data; 18 private MiniDataRecord sum = new MiniDataRecord(0, 0, 0); 19 private int pulseCount = 0; 20 private DataRecord lastRecord = new DataRecord(0,0,0,0,0,0,"",0); 17 private StatsRecord statsRegular = new StatsRecord(0, 0, 0, 0, 0); 18 private StatsRecord statsTotal = statsRegular; 19 private StatsRecord currentStats = statsRegular; 20 private DataRecord lastRecordRegular = new DataRecord(0,0,0,0,0,0,"",0); 21 private DataRecord lastRecordTotal = new DataRecord(0,0,0,0,0,0,"",0); 21 22 private File file; 22 23 private boolean onlyMiniInfo = false; … … 53 54 * @param programName name of the program used for this session 54 55 * @param programDuration duration of the program 55 * @param duration duration of this session 56 * @param sumPulse pulse sum 57 * @param sumPower power sum 58 * @param sumPedalRpm pedal RPM sum 59 * @param pulseCount number of totalized pulse values 56 * @param statsRegular statistics in the regular training time 57 * @param statsTotal statistics in the real total training time 60 58 */ 61 59 public BikeSession(String parentDir, Date startTime, String programName, int programDuration, 62 int duration, int sumPulse, int sumPower, int sumPedalRpm, int pulseCount) {63 this(new File(getFileName(parentDir, startTime)), startTime, programName, programDuration, duration, sumPulse, sumPower, sumPedalRpm, pulseCount);60 StatsRecord statsRegular, StatsRecord statsTotal) { 61 this(new File(getFileName(parentDir, startTime)), startTime, programName, programDuration, statsRegular, statsTotal); 64 62 } 65 63 … … 75 73 * @param programName name of the program used for this session 76 74 * @param programDuration duration of the program 77 * @param duration duration of this session 78 * @param sumPulse pulse sum 79 * @param sumPower power sum 80 * @param sumPedalRpm pedal RPM sum 81 * @param pulseCount number of totalized pulse values 75 * @param statsRegular statistics in the regular training time 76 * @param statsTotal statistics in the real total training time 82 77 */ 83 78 public BikeSession(File file, Date startTime, String programName, int programDuration, 84 int duration, int sumPulse, int sumPower, int sumPedalRpm, int pulseCount) {79 StatsRecord statsRegular, StatsRecord statsTotal) { 85 80 this.onlyMiniInfo = true; 86 81 this.file = file; 87 82 this.startTime = startTime; 88 83 this.programName = programName; 89 this.duration = duration;90 84 this.programDuration = programDuration; 91 this.s um = new MiniDataRecord(sumPulse, sumPower, sumPedalRpm);92 this. pulseCount = pulseCount;85 this.statsRegular = statsRegular; 86 this.statsTotal = statsTotal; 93 87 } 94 88 95 89 public void initialVirtualBikeSession() { 96 90 data = new ArrayList<MiniDataRecord>(); 97 duration = programDuration;91 statsTotal.duration = programDuration; 98 92 } 99 93 100 94 public boolean update(DataRecord record) { 101 if(!record.time.equals(lastRecord .time)) {95 if(!record.time.equals(lastRecordRegular.time)) { 102 96 // ergometer is not paused -> add the data record to my list 103 97 data.add(new MiniDataRecord(record.pulse, record.realPower, record.pedalRpm)); 104 duration++; 98 105 99 // update statistics 106 if (data.size() < programDuration) { 107 if (record.pulse > 0) { 108 pulseCount++; 109 sum.pulse += record.pulse; 110 } 111 sum.power += record.realPower; 112 sum.pedalRpm += record.pedalRpm; 113 } 114 lastRecord = record; 100 currentStats.duration++; 101 if (record.pulse > 0) { 102 currentStats.pulseCount++; 103 currentStats.pulseSum += record.pulse; 104 } 105 currentStats.powerSum += record.realPower; 106 currentStats.pedalRpmSum += record.pedalRpm; 107 108 if (currentStats == statsRegular) { 109 lastRecordRegular = record; 110 } 111 lastRecordTotal = record; 112 113 // switch from regular to total stats end of program reached 114 if (currentStats.duration == programDuration) { 115 statsTotal = statsRegular.clone(); 116 currentStats = statsTotal; 117 } 115 118 116 119 return true; … … 121 124 122 125 public void recalculateMiniInfo() { 123 sum = new MiniDataRecord(0, 0, 0); 124 pulseCount = 0; 125 for (int i = 0; i < duration && i < programDuration; i++) { 126 currentStats = null; 127 int size = data.size(); 128 129 statsRegular = new StatsRecord(0, 0, 0, 0, 0); 130 for (int i = 0; i < size && i < programDuration; i++) { 126 131 MiniDataRecord record = data.get(i); 132 133 statsRegular.duration++; 127 134 if (record.pulse > 0) { 128 pulseCount++; 129 sum.pulse += record.pulse; 130 } 131 sum.power += record.power; 132 sum.pedalRpm += record.pedalRpm; 133 } 135 statsRegular.pulseCount++; 136 statsRegular.pulseSum += record.pulse; 137 } 138 statsRegular.powerSum += record.power; 139 statsRegular.pedalRpmSum += record.pedalRpm; 140 } 141 142 statsTotal = statsRegular.clone(); 143 for (int i = statsRegular.duration; i < size; i++) { 144 MiniDataRecord record = data.get(i); 145 146 statsTotal.duration++; 147 if (record.pulse > 0) { 148 statsTotal.pulseCount++; 149 statsTotal.pulseSum += record.pulse; 150 } 151 statsTotal.powerSum += record.power; 152 statsTotal.pedalRpmSum += record.pedalRpm; 153 } 154 134 155 needToBeSaved = true; 135 156 } … … 142 163 143 164 toStream(out); 144 145 165 out.close(); 146 166 … … 150 170 private void toStream(DataOutputStream out) throws IOException { 151 171 out.writeUTF("jergometer session"); 152 out.writeUTF(" 2");172 out.writeUTF("3"); 153 173 out.writeLong(startTime.getTime()); 154 174 out.writeUTF(programName); 155 sum.toStream(out);156 out.writeInt(pulseCount);157 lastRecord.toStream(out);158 175 out.writeInt(programDuration); 176 lastRecordRegular.toStream(out); 177 lastRecordTotal.toStream(out); 178 statsRegular.toStream(out); 179 statsTotal.toStream(out); 159 180 out.writeInt(data.size()); 160 181 for (MiniDataRecord miniDataRecord : data) { … … 167 188 if (type.equals("jergometer session")) { 168 189 int format = Integer.parseInt(in.readUTF()); 169 startTime = new Time(in.readLong()); 170 programName = in.readUTF(); 171 sum = new MiniDataRecord(in); 172 pulseCount = in.readInt(); 173 lastRecord = new DataRecord(in); 174 if (format >= 2) { 190 191 if (format <= 2) { 192 startTime = new Time(in.readLong()); 193 programName = in.readUTF(); 194 MiniDataRecord regularSum = new MiniDataRecord(in); 195 int pulseCount = in.readInt(); 196 lastRecordRegular = new DataRecord(in); 197 if (format >= 2) { 198 programDuration = in.readInt(); 199 } 200 int duration = in.readInt(); 201 data = new ArrayList<MiniDataRecord>(duration); 202 for (int i = 0; i < duration; i++) { 203 data.add(new MiniDataRecord(in)); 204 } 205 statsRegular = new StatsRecord(regularSum.getPulse(), regularSum.getPower(), regularSum.getPedalRpm(), duration, pulseCount); 206 statsTotal = statsRegular; 207 currentStats = null; 208 } else 209 if (format == 3) { 210 startTime = new Time(in.readLong()); 211 programName = in.readUTF(); 175 212 programDuration = in.readInt(); 176 } 177 duration = in.readInt(); 178 data = new ArrayList<MiniDataRecord>(duration); 179 for (int i = 0; i < duration; i++) { 180 data.add(new MiniDataRecord(in)); 213 lastRecordRegular = new DataRecord(in); 214 lastRecordTotal = new DataRecord(in); 215 statsRegular = new StatsRecord(in); 216 statsTotal = new StatsRecord(in); 217 int size = in.readInt(); 218 data = new ArrayList<MiniDataRecord>(size); 219 for (int i = 0; i < size; i++) { 220 data.add(new MiniDataRecord(in)); 221 } 181 222 } 182 223 } … … 203 244 204 245 public int getDuration() { 205 return duration;246 return statsTotal.duration; 206 247 } 207 248 … … 211 252 } 212 253 213 public MiniDataRecord getSum() { 214 return sum; 215 } 216 217 public DataRecord getLastRecord() throws IOException { 254 public StatsRecord getStatsRegular() { 255 return statsRegular; 256 } 257 258 public StatsRecord getStatsTotal() { 259 return statsTotal; 260 } 261 262 public DataRecord getLastRecordRegular() throws IOException { 218 263 loadFull(); 219 return lastRecord ;264 return lastRecordRegular; 220 265 } 221 266 222 267 public String getProgramName() { 223 268 return programName; 224 }225 226 public double getAveragePulse() {227 return (double) sum.getPulse()/pulseCount;228 }229 230 public double getAveragePower() {231 return (double) sum.getPower()/duration;232 }233 234 public double getAveragePedalRPM() {235 return (double) sum.getPedalRpm()/duration;236 }237 238 public int getPulseCount() {239 return pulseCount;240 269 } 241 270 … … 255 284 256 285 public boolean isCompleted() { 257 return duration >= programDuration;286 return statsTotal.duration >= programDuration; 258 287 } 259 288 -
trunk/src/org/jergometer/model/SessionTableModel.java
r76 r191 29 29 case 0: return String.format("%1$td.%1$tm.%1$ty %1$tH:%1$tM", bikeSession.getStartTime()); 30 30 case 1: return bikeSession.getProgramName(); 31 case 2: return String.format("%.1f", bikeSession.get AveragePulse());32 case 3: return String.format("%.1f", bikeSession.get AveragePower());31 case 2: return String.format("%.1f", bikeSession.getStatsRegular().getAveragePulse()); 32 case 3: return String.format("%.1f", bikeSession.getStatsRegular().getAveragePower()); 33 33 case 4: 34 34 int duration = Math.min(bikeSession.getDuration(), bikeSession.getProgramDuration()); -
trunk/src/org/jergometer/model/UserData.java
r76 r191 80 80 } 81 81 } 82 int duration = Integer.parseInt(sessionXml.getAttribute("duration")); 83 int sumPulse = Integer.parseInt(sessionXml.getAttribute("sumPulse")); 84 int sumPower = Integer.parseInt(sessionXml.getAttribute("sumPower")); 85 int sumPedalRpm = Integer.parseInt(sessionXml.getAttribute("sumPedalRpm")); 86 int pulseCount = Integer.parseInt(sessionXml.getAttribute("pulseCount")); 82 83 StatsRecord statsRegular, statsTotal; 84 XMLElement statsRegularXml = sessionXml.getChildElement("statsRegular"); 85 if (statsRegularXml != null) { 86 statsRegular = new StatsRecord(statsRegularXml); 87 } else { 88 int duration = Integer.parseInt(sessionXml.getAttribute("duration")); 89 int sumPulse = Integer.parseInt(sessionXml.getAttribute("sumPulse")); 90 int sumPower = Integer.parseInt(sessionXml.getAttribute("sumPower")); 91 int sumPedalRpm = Integer.parseInt(sessionXml.getAttribute("sumPedalRpm")); 92 int pulseCount = Integer.parseInt(sessionXml.getAttribute("pulseCount")); 93 statsRegular = new StatsRecord(sumPulse, sumPower, sumPedalRpm, duration, pulseCount); 94 } 95 96 XMLElement statsTotalXml = sessionXml.getChildElement("statsTotal"); 97 if (statsTotalXml != null) { 98 statsTotal = new StatsRecord(statsTotalXml); 99 } else { 100 statsTotal = statsRegular; 101 } 87 102 88 103 sessions.add(new BikeSession(sessionsDirName, new Date(time), programName, programduration, 89 duration, sumPulse, sumPower, sumPedalRpm, pulseCount));104 statsRegular, statsTotal)); 90 105 } 91 106 92 } catch (Exception e) {107 } catch (Exception ignored) { 93 108 } 94 109 } else { … … 119 134 public void save() { 120 135 XMLElement root = new XMLElement("sessions"); 121 root.setAttribute("version", " 2");136 root.setAttribute("version", "3"); 122 137 123 138 { … … 130 145 sessionXml.setAttribute("programName", "" + session.getProgramName()); 131 146 sessionXml.setAttribute("programDuration", "" + session.getProgramDuration()); 132 sessionXml.setAttribute("duration", "" + session.getDuration()); 133 sessionXml.setAttribute("sumPulse", "" + session.getSum().getPulse()); 134 sessionXml.setAttribute("sumPower", "" + session.getSum().getPower()); 135 sessionXml.setAttribute("sumPedalRpm", "" + session.getSum().getPedalRpm()); 136 sessionXml.setAttribute("pulseCount", "" + session.getPulseCount()); 147 sessionXml.addChildElement(session.getStatsRegular().toXml("statsRegular")); 148 sessionXml.addChildElement(session.getStatsTotal().toXml("statsTotal")); 137 149 138 150 sessionsXml.addChildElement(sessionXml); … … 152 164 writer.write(doc.toString()); 153 165 writer.close(); 154 } catch (IOException e) {166 } catch (IOException ignored) { 155 167 } 156 168 } -
trunk/src/org/jergometer/translation/jergometer_de.properties
r182 r191 44 44 menu.sessions.show_only_completed_mn=v 45 45 menu.sessions.show_only_completed_ks=control M 46 menu.sessions.show_full_length=Zeige volle Länge 47 menu.sessions.show_full_length_mn=L 48 menu.sessions.show_full_length_ks=control L 46 49 menu.sessions.select_all=Alle selektieren 47 50 menu.sessions.select_all_mn=A -
trunk/src/org/jergometer/translation/jergometer.properties
r182 r191 44 44 menu.sessions.show_only_completed_mn=c 45 45 menu.sessions.show_only_completed_ks=control M 46 menu.sessions.show_full_length=Show full length 47 menu.sessions.show_full_length_mn=l 48 menu.sessions.show_full_length_ks=control L 46 49 menu.sessions.select_all=Select all 47 50 menu.sessions.select_all_mn=A
![(please configure the [header_logo] section in trac.ini)](https://jergometer.org/images/fork_me_on_github.png)