X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosuilib%2FAltosUIFrame.java;h=3fc99910d8c6f016d4770311146cf923dc7345b0;hp=8a1ba2051d0ccf51a496737efa7f34b0b4697b29;hb=5c4b3658a96f1a64ccebf7bddda06b15b4ac4a6f;hpb=5d35fd843299b5ff09a36220e6ecd8aefceb9b2c diff --git a/altosuilib/AltosUIFrame.java b/altosuilib/AltosUIFrame.java index 8a1ba205..3fc99910 100644 --- a/altosuilib/AltosUIFrame.java +++ b/altosuilib/AltosUIFrame.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib; +package org.altusmetrum.altosuilib_1; import java.awt.*; import java.awt.event.*; @@ -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(); } }