Show clock in titlebar if maximized and status bar hidden

This commit is contained in:
drdev
2013-10-04 02:43:14 +00:00
parent b400f22d15
commit a99386ac1d
4 changed files with 57 additions and 19 deletions

View File

@@ -179,6 +179,7 @@ public final class LayoutMenu {
prefs.setPref(FPref.UI_HIDE_STATUS_BAR, !showStatusBar); prefs.setPref(FPref.UI_HIDE_STATUS_BAR, !showStatusBar);
prefs.save(); prefs.save();
Singletons.getView().getStatusBar().setVisible(showStatusBar); Singletons.getView().getStatusBar().setVisible(showStatusBar);
Singletons.getView().getNavigationBar().updateClockVisibility();
SResizingUtil.resizeWindow(); SResizingUtil.resizeWindow();
} }
}; };

View File

@@ -3,6 +3,7 @@ package forge.gui.toolbox;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import javax.swing.JLabel; import javax.swing.JLabel;
@@ -14,23 +15,35 @@ import javax.swing.Timer;
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class FDigitalClock extends JLabel { public class FDigitalClock extends JLabel {
private final Calendar now = Calendar.getInstance(); private static final Calendar now = Calendar.getInstance();
private final DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT); private static final DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT);
private static final ArrayList<FDigitalClock> clocks = new ArrayList<FDigitalClock>();
private static Timer timer;
private static String currentTimeDisplay;
public FDigitalClock() { public FDigitalClock() {
Timer timer = new Timer(60000, new ActionListener() { clocks.add(this);
public void actionPerformed(ActionEvent e) { if (timer == null) {
now.add(Calendar.MINUTE, 1); timer = new Timer(60000, new ActionListener() {
updateDisplay(); public void actionPerformed(ActionEvent e) {
} now.add(Calendar.MINUTE, 1);
}); updateTimeDisplay();
updateDisplay(); }
//ensure timer starts when current minute ends });
timer.setInitialDelay(60000 - (now.get(Calendar.MILLISECOND) + now.get(Calendar.SECOND) * 1000)); updateTimeDisplay();
timer.start(); //ensure timer starts when current minute ends
timer.setInitialDelay(60000 - (now.get(Calendar.MILLISECOND) + now.get(Calendar.SECOND) * 1000));
timer.start();
}
else {
setText(currentTimeDisplay);
}
} }
private void updateDisplay() { private static void updateTimeDisplay() {
setText(timeFormatter.format(now.getTime())); currentTimeDisplay = timeFormatter.format(now.getTime());
for (FDigitalClock clock : clocks) {
clock.setText(currentTimeDisplay);
}
} }
} }

View File

@@ -12,13 +12,19 @@ import javax.swing.event.PopupMenuListener;
import forge.Singletons; import forge.Singletons;
import forge.gui.menus.ForgeMenu; import forge.gui.menus.ForgeMenu;
import forge.gui.toolbox.FButton; import forge.gui.toolbox.FButton;
import forge.gui.toolbox.FDigitalClock;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class FNavigationBar extends FTitleBarBase { public class FNavigationBar extends FTitleBarBase {
private static final ForgeMenu forgeMenu = Singletons.getControl().getForgeMenu();
private static final ForgePreferences prefs = Singletons.getModel().getPreferences();
private final FButton btnForge = new FButton("Forge"); private final FButton btnForge = new FButton("Forge");
private final ForgeMenu forgeMenu = Singletons.getControl().getForgeMenu(); private final FDigitalClock clock = new FDigitalClock();
private long timeMenuHidden = 0; private long timeMenuHidden = 0;
public FNavigationBar(FFrame f) { public FNavigationBar(FFrame f) {
@@ -27,6 +33,7 @@ public class FNavigationBar extends FTitleBarBase {
btnForge.setPreferredSize(new Dimension(100, 23)); btnForge.setPreferredSize(new Dimension(100, 23));
setIconImage(this.frame.getIconImage()); //set default icon image based on frame icon image setIconImage(this.frame.getIconImage()); //set default icon image based on frame icon image
FSkin.get(btnForge).setForeground(foreColor); FSkin.get(btnForge).setForeground(foreColor);
FSkin.get(clock).setForeground(foreColor);
addControls(); addControls();
} }
@@ -36,7 +43,19 @@ public class FNavigationBar extends FTitleBarBase {
layout.putConstraint(SpringLayout.WEST, btnForge, 1, SpringLayout.WEST, this); layout.putConstraint(SpringLayout.WEST, btnForge, 1, SpringLayout.WEST, this);
layout.putConstraint(SpringLayout.NORTH, btnForge, 1, SpringLayout.NORTH, this); layout.putConstraint(SpringLayout.NORTH, btnForge, 1, SpringLayout.NORTH, this);
addForgeButtonListeners(); addForgeButtonListeners();
super.addControls(); super.addControls();
add(clock);
layout.putConstraint(SpringLayout.EAST, clock, -6, SpringLayout.WEST, btnMinimize);
layout.putConstraint(SpringLayout.NORTH, clock, 4, SpringLayout.NORTH, this);
updateClockVisibility();
}
@Override
public void handleMaximizedChanged() {
super.handleMaximizedChanged();
updateClockVisibility();
} }
private void addForgeButtonListeners() { private void addForgeButtonListeners() {
@@ -61,6 +80,11 @@ public class FNavigationBar extends FTitleBarBase {
}); });
} }
//only show clock if maximized and status bar hidden
public void updateClockVisibility() {
this.clock.setVisible(this.frame.getMaximized() && prefs.getPrefBoolean(FPref.UI_HIDE_STATUS_BAR));
}
public void showForgeMenu(boolean hideIfAlreadyShown) { public void showForgeMenu(boolean hideIfAlreadyShown) {
if (!btnForge.isToggled()) { if (!btnForge.isToggled()) {
btnForge.setToggled(true); btnForge.setToggled(true);

View File

@@ -34,9 +34,9 @@ public abstract class FTitleBarBase extends JMenuBar {
protected final FFrame frame; protected final FFrame frame;
protected final JComponentSkin<FTitleBarBase> skin = FSkin.get(this); protected final JComponentSkin<FTitleBarBase> skin = FSkin.get(this);
protected final SpringLayout layout = new SpringLayout(); protected final SpringLayout layout = new SpringLayout();
private final MinimizeButton btnMinimize = new MinimizeButton(); protected final MinimizeButton btnMinimize = new MinimizeButton();
private final MaximizeButton btnMaximize = new MaximizeButton(); protected final MaximizeButton btnMaximize = new MaximizeButton();
private final CloseButton btnClose = new CloseButton(); protected final CloseButton btnClose = new CloseButton();
protected FTitleBarBase(FFrame f) { protected FTitleBarBase(FFrame f) {
this.frame = f; this.frame = f;