add attempt counter display and a setting to turn it on/off

This commit is contained in:
Gered 2015-12-03 20:06:49 -05:00
parent d5d82a9a5e
commit 6db7171704
6 changed files with 55 additions and 9 deletions

View file

@ -57,6 +57,7 @@ public enum Language {
// Settings > Header
setting_header_goal,
setting_header_title,
setting_header_showAttempts,
// Settings > History
setting_history_rowCount,

View file

@ -99,6 +99,10 @@ public class Run implements TableModel, Serializable {
public static final String COUNTER_EDIT_PROPERTY = "run.counters.edit";
public static final String ATTEMPT_COUNTER_PROPERTY = "run.attemptCounter";
public static final String COMPLETED_ATTEMPT_COUNTER_PROPERTY = "run.completedAttemptCounter";
// ------------------------------------------------------------- ATTRIBUTES
/**
@ -700,6 +704,7 @@ public class Run implements TableModel, Serializable {
numberOfAttempts += 1;
pcSupport.firePropertyChange(ATTEMPT_COUNTER_PROPERTY, numberOfAttempts - 1, numberOfAttempts);
pcSupport.firePropertyChange(STATE_PROPERTY, State.READY, state);
pcSupport.firePropertyChange(CURRENT_SEGMENT_PROPERTY, -1, 0);
}
@ -725,6 +730,7 @@ public class Run implements TableModel, Serializable {
if (current == getRowCount()) {
// run is finished
numberOfCompletedAttempts += 1;
pcSupport.firePropertyChange(COMPLETED_ATTEMPT_COUNTER_PROPERTY, numberOfCompletedAttempts - 1, numberOfCompletedAttempts);
stop();
} else {
segments.get(current).setStartTime(stopTime);

View file

@ -66,6 +66,7 @@ public class Settings {
public static final Property<Boolean> headerShowGoal = new Property<>( "header.goal" );
public static final Property<Boolean> headerShowTitle = new Property<>( "header.title" );
public static final Property<Boolean> headerShowAttempts = new Property<>( "header.showAttempts" );
/* HISTORY properties */
@ -225,6 +226,7 @@ public class Settings {
global.put( headerShowGoal.key, true );
global.put( headerShowTitle.key, true );
global.put( headerShowAttempts.key, true );
global.put( historyRowCount.key, 8 );
global.put( historyTabular.key, true );

View file

@ -39,6 +39,7 @@ public class TabComponents extends SettingsTab
SCB_SETTINGS.add(Settings.coreShowSegmentTimer);
SCB_SETTINGS.add(Settings.coreShowIcons);
SCB_SETTINGS.add(Settings.headerShowGoal);
SCB_SETTINGS.add(Settings.headerShowAttempts);
}
private JComboBox iconSizes;
@ -219,6 +220,7 @@ public class TabComponents extends SettingsTab
miscPanel.add(checkBoxes.get(Settings.headerShowGoal.getKey()), GBC.grid(0, 0).anchor(GBC.LS));
miscPanel.add(checkBoxes.get(Settings.headerShowTitle.getKey()), GBC.grid(0, 1).anchor(GBC.LS));
miscPanel.add(checkBoxes.get(Settings.graphDisplay.getKey()), GBC.grid(0, 2).anchor(GBC.LS));
miscPanel.add(checkBoxes.get(Settings.headerShowAttempts.getKey()), GBC.grid(0, 3).anchor(GBC.LS));
miscPanel.setBorder(
BorderFactory.createTitledBorder("" + Language.MISC)
);

View file

@ -77,6 +77,11 @@ public class RunPane extends JPanel {
*/
private static final int FOOTER = 0x40;
/**
* Update identifier for the attempt counter component.
*/
private static final int ATTEMPTS = 0x80;
// ------------------------------------------------------------- ATTRIBUTES
@ -106,6 +111,11 @@ public class RunPane extends JPanel {
*/
private JPanel goalPane;
/**
* Label displaying the number of attempts the user has made of this run.
*/
private JLabel attemptCounter;
/**
* A list containing empty labels serving as separators.
*/
@ -149,6 +159,7 @@ public class RunPane extends JPanel {
title = new JLabel();
goal = new JLabel();
goalText = new JLabel();
attemptCounter = new JLabel();
core = new Core(run);
graph = new Graph(run);
history = new History(run);
@ -245,9 +256,15 @@ public class RunPane extends JPanel {
} else if (Settings.headerShowGoal.equals(property)) {
updateVisibility(TITLE | GOAL);
updateValues(SEPARATOR);
} else if (Settings.headerShowAttempts.equals(property)) {
updateVisibility(ATTEMPTS);
updateValues(SEPARATOR);
} else if (Settings.accuracy.equals(property)
|| Run.GOAL_PROPERTY.equals(property)) {
updateValues(GOAL);
} else if (Run.ATTEMPT_COUNTER_PROPERTY.equals(property) ||
Run.COMPLETED_ATTEMPT_COUNTER_PROPERTY.equals(property)) {
updateValues(ATTEMPTS);
}
}
@ -292,10 +309,11 @@ public class RunPane extends JPanel {
goalPane.add(goal, GBC.grid(1, 1).insets(0, 3, 0, 0));
goalPane.setOpaque(false);
}
add(createSeparator(), GBC.grid(0, 2).insets(3, 0).fill(GBC.H));
add(history, GBC.grid(0, 3).fill(GBC.H).insets(0, 5));
add(createSeparator(), GBC.grid(0, 4).insets(3, 0).fill(GBC.H));
add(createSeparator(), GBC.grid(0, 6).insets(3, 0, 0, 0).fill(GBC.H));
add(attemptCounter, GBC.grid(0, 2).insets(1, 0, 1, 3).anchor(GBC.LE));
add(createSeparator(), GBC.grid(0, 3).insets(3, 0).fill(GBC.H));
add(history, GBC.grid(0, 4).fill(GBC.H).insets(0, 5));
add(createSeparator(), GBC.grid(0, 5).insets(3, 0).fill(GBC.H));
add(createSeparator(), GBC.grid(0, 7).insets(3, 0, 0, 0).fill(GBC.H));
updateVisibility(ALL);
}
@ -321,12 +339,23 @@ public class RunPane extends JPanel {
if ((identifier & TITLE) == TITLE) {
title.setText("" + run.getName());
}
if ((identifier & ATTEMPTS) == ATTEMPTS) {
int attempts = run.getNumberOfAttempts();
int completedAttempts = run.getNumberOfCompletedAttempts();
if (attempts == 0)
attemptCounter.setText("0");
else if (completedAttempts == 0)
attemptCounter.setText(String.format("%d", attempts));
else
attemptCounter.setText(String.format("%d / %d", completedAttempts, attempts));
}
if ((identifier & SEPARATOR) == SEPARATOR) {
boolean hdTitle = Settings.headerShowGoal.get();
boolean hdGoal = Settings.headerShowTitle.get();
boolean hdAttempts = Settings.headerShowAttempts.get();
boolean hsRows = history.getRowCount() > 0;
separators.get(0).setVisible(hdTitle || hdGoal);
separators.get(0).setVisible(hdTitle || hdGoal || hdAttempts);
separators.get(1).setVisible(hsRows);
}
}
@ -357,6 +386,8 @@ public class RunPane extends JPanel {
BorderFactory.createMatteBorder(1, 0, 0, 0, color));
}
}
attemptCounter.setForeground(Color.WHITE);
}
/**
@ -369,19 +400,19 @@ public class RunPane extends JPanel {
if ((identifier & GRAPH) == GRAPH) {
if (Settings.graphDisplay.get()) {
remove(core);
add(core, GBC.grid(0, 5).insets(0, 5).fill(GBC.H));
add(graph, GBC.grid(0, 7).fill(GBC.B).insets(0, 0, 3, 0)
add(core, GBC.grid(0, 6).insets(0, 5).fill(GBC.H));
add(graph, GBC.grid(0, 8).fill(GBC.B).insets(0, 0, 3, 0)
.weight(1.0, 1.0));
} else {
remove(graph);
remove(core);
add(core, GBC.grid(0, 5).insets(0, 5).fill(GBC.H)
add(core, GBC.grid(0, 6).insets(0, 5).fill(GBC.H)
.weight(1.0, 1.0));
}
}
if ((identifier & FOOTER) == FOOTER) {
if (Settings.footerDisplay.get()) {
add(footer, GBC.grid(0, 8).insets(0, 3).fill(GBC.H));
add(footer, GBC.grid(0, 9).insets(0, 3).fill(GBC.H));
} else {
remove(footer);
}
@ -400,6 +431,9 @@ public class RunPane extends JPanel {
if ((identifier & TITLE) == TITLE) {
title.setVisible(Settings.headerShowTitle.get());
}
if ((identifier & ATTEMPTS) == ATTEMPTS) {
attemptCounter.setVisible(Settings.headerShowAttempts.get());
}
revalidate();
repaint();
}

View file

@ -38,6 +38,7 @@ GLOBAL_HOTKEYS_HOOK_ERROR = Key event hook registration failed. You will need to
# Settings > Header
setting_header_goal = Display Goal
setting_header_title = Display Run Title
setting_header_showAttempts = Display Attempt Counter
# Settings > History
setting_history_rowCount = Number of Rows