diff options
author | Keith Packard <keithp@keithp.com> | 2013-01-20 15:42:05 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-01-20 15:45:16 -0800 |
commit | 3454592169dcb61b81de9af2b631b87e7dd86231 (patch) | |
tree | f0c164421914de1363d09c464200d55c82325364 /altosuilib/AltosUIFrame.java | |
parent | cf03ab3383b679e6617e8ab7004be91e5a727562 (diff) |
altosui: Make initial AltOS window position configurable
Give the user a choice of nine locations on the screen
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosuilib/AltosUIFrame.java')
-rw-r--r-- | altosuilib/AltosUIFrame.java | 89 |
1 files changed, 84 insertions, 5 deletions
diff --git a/altosuilib/AltosUIFrame.java b/altosuilib/AltosUIFrame.java index 8a1ba205..b93b2d21 100644 --- a/altosuilib/AltosUIFrame.java +++ b/altosuilib/AltosUIFrame.java @@ -28,7 +28,7 @@ class AltosUIFrameListener extends WindowAdapter { } } -public class AltosUIFrame extends JFrame implements AltosUIListener { +public class AltosUIFrame extends JFrame implements AltosUIListener, AltosPositionListener { public void ui_changed(String look_and_feel) { SwingUtilities.updateComponentTreeUI(this); @@ -73,22 +73,101 @@ public class AltosUIFrame extends JFrame implements AltosUIListener { super.setLocationByPlatform(lbp); } + public void setSize() { + /* Smash sizes around so that the window comes up in the right shape */ + Insets i = getInsets(); + Dimension ps = rootPane.getPreferredSize(); + ps.width += i.left + i.right; + ps.height += i.top + i.bottom; + setPreferredSize(ps); + setSize(ps); + } + + public void setPosition (int position) { + Insets i = getInsets(); + Dimension ps = getSize(); + + /* Stick the window in the desired location on the screen */ + setLocationByPlatform(false); + GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); + GraphicsConfiguration gc = gd.getDefaultConfiguration(); + Rectangle r = gc.getBounds(); + + /* compute X position */ + int x = 0; + int y = 0; + switch (position) { + case AltosUILib.position_top_left: + case AltosUILib.position_left: + case AltosUILib.position_bottom_left: + x = 0; + break; + case AltosUILib.position_top: + case AltosUILib.position_center: + case AltosUILib.position_bottom: + x = (r.width - ps.width) / 2; + break; + case AltosUILib.position_top_right: + case AltosUILib.position_right: + case AltosUILib.position_bottom_right: + x = r.width - ps.width + i.right; + break; + } + + /* compute Y position */ + switch (position) { + case AltosUILib.position_top_left: + case AltosUILib.position_top: + case AltosUILib.position_top_right: + y = 0; + break; + case AltosUILib.position_left: + case AltosUILib.position_center: + case AltosUILib.position_right: + y = (r.height - ps.height) / 2; + break; + case AltosUILib.position_bottom_left: + case AltosUILib.position_bottom: + case AltosUILib.position_bottom_right: + y = r.height - ps.height + i.bottom; + break; + } + setLocation(x, y); + } + + int position; + + public void position_changed(int position) { + this.position = position; + if (!location_by_platform) + setPosition(position); + } + public void setVisible (boolean visible) { if (visible) setLocationByPlatform(location_by_platform); super.setVisible(visible); + if (visible) { + setSize(); + if (!location_by_platform) + setPosition(position); + } } - public AltosUIFrame() { + void init() { AltosUIPreferences.register_ui_listener(this); + AltosUIPreferences.register_position_listener(this); + position = AltosUIPreferences.position(); addWindowListener(new AltosUIFrameListener()); set_icon(); } + public AltosUIFrame() { + init(); + } + public AltosUIFrame(String name) { super(name); - AltosUIPreferences.register_ui_listener(this); - addWindowListener(new AltosUIFrameListener()); - set_icon(); + init(); } } |