From: Frederick W. <fre...@us...> - 2012-01-13 17:50:42
|
rails/ui/swing/MapPanel.java | 6 ++- rails/ui/swing/MessagePanel.java | 75 +++++++++++++++++++++++++++----------- rails/ui/swing/ORPanel.java | 4 +- rails/ui/swing/ORUIManager.java | 26 +++++++++---- rails/ui/swing/ORWindow.java | 7 --- rails/ui/swing/hexmap/HexMap.java | 33 +++++++++++++++- 6 files changed, 110 insertions(+), 41 deletions(-) New commits: commit 4cdf576bea5a4364d278af8dc6f736b6b4868624 Author: Frederick Weld <fre...@gm...> Date: Fri Jan 13 18:47:21 2012 +0100 Enlarged message panel for route details Upon click details, the message panel's height is now increased. In addition, the bug of duplicating message contents for set revenue is fixed. diff --git a/rails/ui/swing/MessagePanel.java b/rails/ui/swing/MessagePanel.java index 6e8e1fc..6c50471 100644 --- a/rails/ui/swing/MessagePanel.java +++ b/rails/ui/swing/MessagePanel.java @@ -2,10 +2,9 @@ package rails.ui.swing; import java.awt.Color; +import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.util.ArrayList; -import java.util.List; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -14,14 +13,20 @@ public class MessagePanel extends JPanel { private static final long serialVersionUID = 1L; //the height of this panel (fixed because scroll bar is used) - public static final int fixedHeight = 45; + public static final int defaultHeight = 45; + + //the height of this panel if details are open + public static final int fullHeight = 90; + public static final int minWidth = 100; public static final int scrollUnit = 8; + public static final int minMarginForFullHeight = 8; private JLabel message; + private JScrollPane parentSlider; private String currentMessage; private StringBuffer currentInformation; - private List<String> currentDetails = new ArrayList<String>(); + private String currentDetails; private boolean showDetails; Color background = new Color(225, 225, 225); @@ -44,8 +49,7 @@ public class MessagePanel extends JPanel { this.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent arg0) { - showDetails = !showDetails; - updateMessageText(); + toggleDetailsEnablement(); } public void mouseEntered(MouseEvent arg0) {} @@ -56,6 +60,41 @@ public class MessagePanel extends JPanel { } + /** + * @param parentSlider Component between OR window and the panel + */ + public void setParentSlider(JScrollPane parentSlider) { + this.parentSlider = parentSlider; + parentSlider.setBorder(BorderFactory.createLoweredBevelBorder()); + parentSlider.getVerticalScrollBar().setUnitIncrement(scrollUnit); + parentSlider.setPreferredSize(new Dimension(minWidth,defaultHeight)); + } + + private void disableDetails() { + if (showDetails) { + showDetails = false; + parentSlider.setPreferredSize(new Dimension(minWidth,defaultHeight)); + parentSlider.getParent().revalidate(); + } + } + + private void enableDetails() { + if (!showDetails && currentDetails != null) { + showDetails = true; + parentSlider.setPreferredSize(new Dimension(minWidth,fullHeight)); + parentSlider.getParent().revalidate(); + } + } + + private void toggleDetailsEnablement() { + if (showDetails) { + disableDetails(); + } else { + enableDetails(); + } + updateMessageText(); + } + private void updateMessageText() { StringBuffer messageText = new StringBuffer() ; if (currentMessage != null) { @@ -68,19 +107,15 @@ public class MessagePanel extends JPanel { } if (showDetails) { messageText.append("<span style='color:blue; font-size:80%'>"); - for (String detail:currentDetails) { - messageText.append(detail); - } + messageText.append(currentDetails); messageText.append("</span>"); - } else if (currentDetails.size() != 0) { + } else if (currentDetails != null) { messageText.append("<span style='color:blue; font-size:80%'>"); - messageText.append("<BR> Click for more details"); + messageText.append(" Click for more details"); messageText.append("</span>"); } // display String text = messageText.toString(); - //int lines = text.split("<[Bb][Rr]>").length + 1; -// setLines(lines); message.setText("<html><center>" + text + "</center></html>"); } @@ -88,21 +123,19 @@ public class MessagePanel extends JPanel { public void setMessage(String messageText) { currentMessage = messageText; currentInformation = null; - currentDetails.clear(); - showDetails = false; + currentDetails = null; + disableDetails(); updateMessageText(); } - public void addInformation(String infoText) { - if (currentInformation == null) { - currentInformation = new StringBuffer(); - } + public void setInformation(String infoText) { + currentInformation = new StringBuffer(); currentInformation.append("<BR>" + infoText); updateMessageText(); } - public void addDetail(String detailText) { - currentDetails.add("<BR>" + detailText); + public void setDetail(String detailText) { + currentDetails = "<BR>" + detailText; updateMessageText(); } diff --git a/rails/ui/swing/ORPanel.java b/rails/ui/swing/ORPanel.java index b2251c3..0d0c5ec 100644 --- a/rails/ui/swing/ORPanel.java +++ b/rails/ui/swing/ORPanel.java @@ -1055,9 +1055,9 @@ implements ActionListener, KeyListener, RevenueListener { orUIManager.getMap().setTrainPaths(null); revenueAdapter.drawOptimalRunAsPath(orUIManager.getMap()); if (isRevenueValueToBeSet) { - orUIManager.addInformation("Best Run Value = " + bestRevenue + + orUIManager.setInformation("Best Run Value = " + bestRevenue + " with " + Util.convertToHtml(revenueAdapter.getOptimalRunPrettyPrint(false))); - orUIManager.addDetail(Util.convertToHtml(revenueAdapter.getOptimalRunPrettyPrint(true))); + orUIManager.setDetail(Util.convertToHtml(revenueAdapter.getOptimalRunPrettyPrint(true))); } } } diff --git a/rails/ui/swing/ORUIManager.java b/rails/ui/swing/ORUIManager.java index a7bef1c..410605e 100644 --- a/rails/ui/swing/ORUIManager.java +++ b/rails/ui/swing/ORUIManager.java @@ -1934,12 +1934,12 @@ public class ORUIManager implements DialogOwner { messagePanel.setMessage(message); } - public void addInformation(String infoText) { - messagePanel.addInformation(infoText); + public void setInformation(String infoText) { + messagePanel.setInformation(infoText); } - public void addDetail(String detailText) { - messagePanel.addDetail(detailText); + public void setDetail(String detailText) { + messagePanel.setDetail(detailText); } public void setLocalAction(boolean value) { diff --git a/rails/ui/swing/ORWindow.java b/rails/ui/swing/ORWindow.java index c0a162f..5c6f5bb 100644 --- a/rails/ui/swing/ORWindow.java +++ b/rails/ui/swing/ORWindow.java @@ -2,13 +2,11 @@ package rails.ui.swing; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.Rectangle; import java.awt.event.*; import java.util.ArrayList; import java.util.List; -import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; @@ -65,9 +63,7 @@ public class ORWindow extends JFrame implements ActionPerformer { messagePanel = new MessagePanel(); JScrollPane slider = new JScrollPane(messagePanel); - slider.setBorder(BorderFactory.createLoweredBevelBorder()); - slider.getVerticalScrollBar().setUnitIncrement(MessagePanel.scrollUnit); - slider.setPreferredSize(new Dimension(100,MessagePanel.fixedHeight)); + messagePanel.setParentSlider(slider); getContentPane().add(slider, BorderLayout.NORTH); commit d011569730b37316997b35d67778dcd2014ba6cb Author: Frederick Weld <fre...@gm...> Date: Fri Jan 13 17:13:24 2012 +0100 Configured tooltips such that they remain visible forever unless mouse move Upon Erik's request: tool tip dismiss delay is on infinity. diff --git a/rails/ui/swing/MapPanel.java b/rails/ui/swing/MapPanel.java index 7f19442..265defe 100644 --- a/rails/ui/swing/MapPanel.java +++ b/rails/ui/swing/MapPanel.java @@ -64,6 +64,9 @@ public class MapPanel extends JPanel { //lightwight tooltip possible since tool tip has its own layer in hex map ToolTipManager.sharedInstance().setLightWeightPopupEnabled(true); + //tooltip should not be dismissed after at all + ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE); + layeredPane = new JLayeredPane(); layeredPane.setLayout(null); layeredPane.setPreferredSize(originalMapSize); commit 115afe5d4f7d12f6e8109e4f1e7aebd190979039 Author: Frederick Weld <fre...@gm...> Date: Fri Jan 13 17:07:44 2012 +0100 Polished hex map tool tips (lightwight tooltips, tooltip upon click) - mouseover on tooltip no longer leads to no highlighted hex (put tooltips as lightwight - possible due to new hexmap layering) - clicking on hex without associated action does not lead to disappearance of tooltip diff --git a/rails/ui/swing/MapPanel.java b/rails/ui/swing/MapPanel.java index 66c81d6..7f19442 100644 --- a/rails/ui/swing/MapPanel.java +++ b/rails/ui/swing/MapPanel.java @@ -61,7 +61,8 @@ public class MapPanel extends JPanel { return; } - ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); + //lightwight tooltip possible since tool tip has its own layer in hex map + ToolTipManager.sharedInstance().setLightWeightPopupEnabled(true); layeredPane = new JLayeredPane(); layeredPane.setLayout(null); diff --git a/rails/ui/swing/ORUIManager.java b/rails/ui/swing/ORUIManager.java index a097bf7..a7bef1c 100644 --- a/rails/ui/swing/ORUIManager.java +++ b/rails/ui/swing/ORUIManager.java @@ -600,9 +600,15 @@ public class ORUIManager implements DialogOwner { if (!(dialog instanceof MessageDialog)) orPanel.disableButtons(); } - public void hexClicked(GUIHex clickedHex, GUIHex selectedHex) { + /** + * @return True if the map panel expected hex clicks for actions / corrections + */ + public boolean hexClicked(GUIHex clickedHex, GUIHex selectedHex) { + boolean triggerORPanelRepaint = false; + if (mapCorrectionEnabled) { + triggerORPanelRepaint = true; boolean checkClickedHex = false; switch (mapCorrectionAction.getStep()) { case SELECT_HEX: @@ -622,11 +628,12 @@ public class ORUIManager implements DialogOwner { orWindow.process(mapCorrectionAction); } } else if (tokenLayingEnabled) { + triggerORPanelRepaint = true; // if clickedHex == null, then go back to select hex step if (clickedHex == null) { upgradePanel.setPossibleTokenLays(null); setLocalStep(SELECT_HEX_FOR_TOKEN); - return; + return true; } List<LayToken> allowances = map.getTokenAllowanceForHex(clickedHex.getHexModel()); @@ -645,10 +652,11 @@ public class ORUIManager implements DialogOwner { } } else if (tileLayingEnabled) { + triggerORPanelRepaint = true; if (localStep == ROTATE_OR_CONFIRM_TILE && clickedHex == selectedHex) { selectedHex.rotateTile(); - return; + return true; } else { if (selectedHex != null && clickedHex != selectedHex) { @@ -676,7 +684,9 @@ public class ORUIManager implements DialogOwner { } } - orWindow.repaintORPanel(); + if (triggerORPanelRepaint) orWindow.repaintORPanel(); + + return triggerORPanelRepaint; } public void tileSelected(int tileId) { diff --git a/rails/ui/swing/ORWindow.java b/rails/ui/swing/ORWindow.java index dcef993..c0a162f 100644 --- a/rails/ui/swing/ORWindow.java +++ b/rails/ui/swing/ORWindow.java @@ -12,7 +12,6 @@ import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; -import javax.swing.border.EmptyBorder; import org.apache.log4j.Logger; diff --git a/rails/ui/swing/hexmap/HexMap.java b/rails/ui/swing/hexmap/HexMap.java index 6029c93..e220614 100644 --- a/rails/ui/swing/hexmap/HexMap.java +++ b/rails/ui/swing/hexmap/HexMap.java @@ -780,7 +780,7 @@ public abstract class HexMap implements MouseListener, // } // do nothing as tooltip update before display } - + /** * Mouse Listener methods (hexMap offers listener for all layers) */ @@ -789,7 +789,34 @@ public abstract class HexMap implements MouseListener, Point point = arg0.getPoint(); GUIHex clickedHex = getHexContainingPoint(point); - orUIManager.hexClicked(clickedHex, selectedHex); + //if no action/correction was expected on the map panel + if (!orUIManager.hexClicked(clickedHex, selectedHex)) { + + // force the tool tip popup to appear immediately + ToolTipManager ttm = ToolTipManager.sharedInstance(); + MouseEvent phantomME = new MouseEvent( + toolTipsLayer, + MouseEvent.MOUSE_MOVED, + System.currentTimeMillis(), + 0, + arg0.getX(), + arg0.getY(), + 0, + false); + + int priorToolTipDelay = ttm.getInitialDelay(); + ttm.setInitialDelay(0); + ttm.mouseMoved(phantomME); + ttm.setInitialDelay(priorToolTipDelay); + +// int priorToolTipDelay = ttm.getInitialDelay(); +// ttm.mouseEntered(new MouseAdapter()); +// ToolTipManager.sharedInstance().setInitialDelay(0); +// try { +// this.wait(1); +// } catch (InterruptedException e) {} +// map = map; + } } public void mouseDragged(MouseEvent arg0) {} @@ -806,7 +833,7 @@ public abstract class HexMap implements MouseListener, if (newHex != null) newHex.addHighlightRequest(); //display tool tip - setToolTipText(newHex != null ? newHex.getToolTip() : ""); + setToolTipText(newHex != null ? newHex.getToolTip() : null); hexAtMousePosition = newHex; } |