diff --git a/.gitattributes b/.gitattributes index cee90b580df..5866e368dcd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15266,6 +15266,7 @@ src/main/java/forge/gui/toolbox/FButton.java -text src/main/java/forge/gui/toolbox/FCheckBox.java -text src/main/java/forge/gui/toolbox/FComboBoxPanel.java -text src/main/java/forge/gui/toolbox/FComboBoxWrapper.java -text +src/main/java/forge/gui/toolbox/FDigitalClock.java -text src/main/java/forge/gui/toolbox/FLabel.java -text src/main/java/forge/gui/toolbox/FList.java -text src/main/java/forge/gui/toolbox/FOverlay.java -text diff --git a/src/main/java/forge/gui/toolbox/FDigitalClock.java b/src/main/java/forge/gui/toolbox/FDigitalClock.java new file mode 100644 index 00000000000..ca40135d1d6 --- /dev/null +++ b/src/main/java/forge/gui/toolbox/FDigitalClock.java @@ -0,0 +1,37 @@ +package forge.gui.toolbox; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import javax.swing.JLabel; +import javax.swing.Timer; + +/** + * Digital clock label that displays current time + * + */ +@SuppressWarnings("serial") +public class FDigitalClock extends JLabel { + private final Calendar now; + private final SimpleDateFormat format = new SimpleDateFormat("h:mm a"); + + public FDigitalClock() { + Timer timer = new Timer(60000, new ActionListener() { + public void actionPerformed(ActionEvent e) { + now.add(Calendar.MINUTE, 1); + updateDisplay(); + } + }); + now = Calendar.getInstance(); + updateDisplay(); + //ensure timer starts when current minute ends + timer.setInitialDelay(60000 - (now.get(Calendar.MILLISECOND) + now.get(Calendar.SECOND) * 1000)); + timer.start(); + } + + private void updateDisplay() { + setText(format.format(now.getTime())); + } +} diff --git a/src/main/java/forge/view/FTitleBar.java b/src/main/java/forge/view/FTitleBar.java index 4a1a8cec364..4efc43eac37 100644 --- a/src/main/java/forge/view/FTitleBar.java +++ b/src/main/java/forge/view/FTitleBar.java @@ -18,6 +18,7 @@ import javax.swing.SpringLayout; import javax.swing.SwingUtilities; import forge.gui.framework.ILocalRepaint; +import forge.gui.toolbox.FDigitalClock; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin.Colors; import forge.gui.toolbox.FSkin.JLabelSkin; @@ -33,6 +34,7 @@ public class FTitleBar extends JMenuBar { private final FFrame frame; private final SpringLayout layout = new SpringLayout(); private final JLabel lblTitle = new JLabel(); + private final FDigitalClock clock = new FDigitalClock(); private final MinimizeButton btnMinimize = new MinimizeButton(); private final MaximizeButton btnMaximize = new MaximizeButton(); private final CloseButton btnClose = new CloseButton(); @@ -46,6 +48,7 @@ public class FTitleBar extends JMenuBar { setTitle(f.getTitle()); //set default title based on frame title setIconImage(f.getIconImage()); //set default icon image based on frame icon image FSkin.get(lblTitle).setForeground(foreColor); + FSkin.get(clock).setForeground(foreColor); add(lblTitle); layout.putConstraint(SpringLayout.WEST, lblTitle, 1, SpringLayout.WEST, this); @@ -62,9 +65,15 @@ public class FTitleBar extends JMenuBar { add(btnMinimize); layout.putConstraint(SpringLayout.EAST, btnMinimize, 0, SpringLayout.WEST, btnMaximize); layout.putConstraint(SpringLayout.NORTH, btnMinimize, 0, SpringLayout.NORTH, btnMaximize); + + add(clock); + clock.setVisible(false); //hide unless maximized + layout.putConstraint(SpringLayout.EAST, clock, -6, SpringLayout.WEST, btnMinimize); + layout.putConstraint(SpringLayout.NORTH, clock, 0, SpringLayout.NORTH, lblTitle); } public void handleMaximizedChanged() { + clock.setVisible(frame.getMaximized()); if (frame.getMaximized()) { btnMaximize.setToolTipText("Restore Down"); }