From: <ste...@us...> - 2010-08-13 15:57:52
|
Revision: 1382 http://rails.svn.sourceforge.net/rails/?rev=1382&view=rev Author: stefanfrey Date: 2010-08-13 15:57:46 +0000 (Fri, 13 Aug 2010) Log Message: ----------- Changes to MessagePanel, allows to display revenue results Some fixes to scales, others needed Removed call of updateUI in gameinitUI of GameUIManager Modified Paths: -------------- trunk/18xx/rails/algorithms/RevenueAdapter.java trunk/18xx/rails/algorithms/RevenueTrainRun.java trunk/18xx/rails/ui/swing/GameUIManager.java trunk/18xx/rails/ui/swing/MessagePanel.java trunk/18xx/rails/ui/swing/ORPanel.java trunk/18xx/rails/ui/swing/ORUIManager.java trunk/18xx/rails/ui/swing/Scale.java trunk/18xx/rails/ui/swing/UpgradesPanel.java Modified: trunk/18xx/rails/algorithms/RevenueAdapter.java =================================================================== --- trunk/18xx/rails/algorithms/RevenueAdapter.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/algorithms/RevenueAdapter.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -628,17 +628,23 @@ } - public String getOptimalRunPrettyPrint() { + public String getOptimalRunPrettyPrint(boolean includeDetails) { List<RevenueTrainRun> listRuns = getOptimalRun(); if (listRuns== null) return "No Optimal Run"; StringBuffer runPrettyPrint = new StringBuffer(); for (RevenueTrainRun run:listRuns) { - runPrettyPrint.append(run.prettyPrint()); + runPrettyPrint.append(run.prettyPrint(includeDetails)); + if (includeDetails) + runPrettyPrint.append("<BR>"); + else if (run != listRuns.get(listRuns.size()-1)) + runPrettyPrint.append("; "); } - // add dynamic Modifier - for (RevenueDynamicModifier modifier:dynamicModifiers) { - runPrettyPrint.append(modifier.prettyPrint(this)); + if (includeDetails) { + // add dynamic Modifier + for (RevenueDynamicModifier modifier:dynamicModifiers) { + runPrettyPrint.append(modifier.prettyPrint(this)); + } } return runPrettyPrint.toString(); Modified: trunk/18xx/rails/algorithms/RevenueTrainRun.java =================================================================== --- trunk/18xx/rails/algorithms/RevenueTrainRun.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/algorithms/RevenueTrainRun.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -195,75 +195,76 @@ int length = runPrettyPrint.length() - initLength; if (length / PRETTY_PRINT_LENGTH != multiple) { multiple = length / PRETTY_PRINT_LENGTH; - runPrettyPrint.append("\n"); + runPrettyPrint.append("<BR>"); for (int i=0; i < PRETTY_PRINT_INDENT; i++) runPrettyPrint.append(" ") ; } return multiple; } - String prettyPrint() { + String prettyPrint(boolean includeDetails) { StringBuffer runPrettyPrint = new StringBuffer(); runPrettyPrint.append(LocalText.getText("N_Train", train.toString())); - runPrettyPrint.append(": " + getRunValue()); - - Set<NetworkVertex> uniqueVertices = getUniqueVertices(); - int majors = NetworkVertex.numberOfVertexType(uniqueVertices, VertexType.STATION, StationType.MAJOR); - int minors = NetworkVertex.numberOfVertexType(uniqueVertices, VertexType.STATION, StationType.MINOR); - if (train.ignoresMinors() || minors == 0) { - runPrettyPrint.append(LocalText.getText("RevenueStationsIgnoreMinors", majors)); - } else { - runPrettyPrint.append(LocalText.getText("RevenueStations", majors, minors)); - } - - int initLength = runPrettyPrint.length(); - int multiple = prettyPrintNewLine(runPrettyPrint, -1, initLength); - String currentHexName = null; - NetworkVertex startVertex = null; - for (NetworkVertex vertex:vertices) { - if (startVertex == null) { - currentHexName = prettyPrintHexName(vertex); - startVertex = vertex; - runPrettyPrint.append(prettyPrintHexName(vertex) + "("); - } else if (startVertex == vertex) { - currentHexName = prettyPrintHexName(vertex); - runPrettyPrint.append(") / "); - multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); - runPrettyPrint.append(prettyPrintHexName(vertex) + "(0"); - continue; - } else if (!currentHexName.equals(prettyPrintHexName(vertex))) { - currentHexName = prettyPrintHexName(vertex); - runPrettyPrint.append("), "); - multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); - runPrettyPrint.append(prettyPrintHexName(vertex) + "("); + runPrettyPrint.append(" = " + getRunValue()); + if (includeDetails) { + // details of the run + Set<NetworkVertex> uniqueVertices = getUniqueVertices(); + int majors = NetworkVertex.numberOfVertexType(uniqueVertices, VertexType.STATION, StationType.MAJOR); + int minors = NetworkVertex.numberOfVertexType(uniqueVertices, VertexType.STATION, StationType.MINOR); + if (train.ignoresMinors() || minors == 0) { + runPrettyPrint.append(LocalText.getText("RevenueStationsIgnoreMinors", majors)); } else { - runPrettyPrint.append(","); + runPrettyPrint.append(LocalText.getText("RevenueStations", majors, minors)); } - if (vertex.isStation()) { - runPrettyPrint.append(revenueAdapter.getVertexValueAsString(vertex, train, revenueAdapter.getPhase())); - } else { - runPrettyPrint.append(vertex.getHex().getOrientationName(vertex.getSide())); + int initLength = runPrettyPrint.length(); + int multiple = prettyPrintNewLine(runPrettyPrint, -1, initLength); + String currentHexName = null; + NetworkVertex startVertex = null; + for (NetworkVertex vertex:vertices) { + if (startVertex == null) { + currentHexName = prettyPrintHexName(vertex); + startVertex = vertex; + runPrettyPrint.append(prettyPrintHexName(vertex) + "("); + } else if (startVertex == vertex) { + currentHexName = prettyPrintHexName(vertex); + runPrettyPrint.append(") / "); + multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); + runPrettyPrint.append(prettyPrintHexName(vertex) + "(0"); + continue; + } else if (!currentHexName.equals(prettyPrintHexName(vertex))) { + currentHexName = prettyPrintHexName(vertex); + runPrettyPrint.append("), "); + multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); + runPrettyPrint.append(prettyPrintHexName(vertex) + "("); + } else { + runPrettyPrint.append(","); + } + if (vertex.isStation()) { + runPrettyPrint.append(revenueAdapter.getVertexValueAsString(vertex, train, revenueAdapter.getPhase())); + } else { + runPrettyPrint.append(vertex.getHex().getOrientationName(vertex.getSide())); + } } - } - - if (currentHexName != null) { - runPrettyPrint.append(")"); - } - - // check revenueBonuses (complex) - List<RevenueBonus> activeBonuses = new ArrayList<RevenueBonus>(); - for (RevenueBonus bonus:revenueAdapter.getRevenueBonuses()) { - if (bonus.checkComplexBonus(vertices, train.getRailsTrain(), revenueAdapter.getPhase())) { - activeBonuses.add(bonus); + + if (currentHexName != null) { + runPrettyPrint.append(")"); } + + // check revenueBonuses (complex) + List<RevenueBonus> activeBonuses = new ArrayList<RevenueBonus>(); + for (RevenueBonus bonus:revenueAdapter.getRevenueBonuses()) { + if (bonus.checkComplexBonus(vertices, train.getRailsTrain(), revenueAdapter.getPhase())) { + activeBonuses.add(bonus); + } + } + Map<String,Integer> printBonuses = RevenueBonus.combineBonuses(activeBonuses); + for (String bonusName:printBonuses.keySet()) { + runPrettyPrint.append(" + "); + runPrettyPrint.append(bonusName + "(" + printBonuses.get(bonusName) + ")"); + multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); + } + runPrettyPrint.append("\n"); } - Map<String,Integer> printBonuses = RevenueBonus.combineBonuses(activeBonuses); - for (String bonusName:printBonuses.keySet()) { - runPrettyPrint.append(" + "); - runPrettyPrint.append(bonusName + "(" + printBonuses.get(bonusName) + ")"); - multiple = prettyPrintNewLine(runPrettyPrint, multiple, initLength); - } - runPrettyPrint.append("\n"); return runPrettyPrint.toString(); } @@ -286,50 +287,5 @@ } } return path; - -// NetworkVertex startVertex = null; -// NetworkVertex previousVertex = null; -// for (NetworkVertex vertex:vertices) { -// log.debug("Revenue Path: Next vertex " + vertex); -// Point2D vertexPoint = NetworkVertex.getVertexPoint2D(map, vertex); -// if (startVertex == null) { -// startVertex = vertex; -// previousVertex = vertex; -// path.moveTo((float)vertexPoint.getX(), (float)vertexPoint.getY()); -// continue; -// } else if (startVertex == vertex) { -// path.moveTo((float)vertexPoint.getX(), (float)vertexPoint.getY()); -// previousVertex = vertex; -// continue; -// } -// // draw hidden vertexes -// NetworkEdge edge = revenueAdapter.getRCGraph().getEdge(previousVertex, vertex); -// if (edge != null) { -// log.debug("Revenue Path: draw edge "+ edge.toFullInfoString()); -// List<NetworkVertex> hiddenVertexes = edge.getHiddenVertexes(); -// if (edge.getSource() == vertex) { -// log.debug("Revenue Path: reverse hiddenVertexes"); -// for (int i = hiddenVertexes.size() - 1; i >= 0; i--) { -// NetworkVertex v = hiddenVertexes.get(i); -// Point2D vPoint = NetworkVertex.getVertexPoint2D(map, v); -// if (vPoint != null) { -// path.lineTo((float)vPoint.getX(), (float)vPoint.getY()); -// } -// } -// } else { -// for (NetworkVertex v:hiddenVertexes) { -// Point2D vPoint = NetworkVertex.getVertexPoint2D(map, v); -// if (vPoint != null) { -// path.lineTo((float)vPoint.getX(), (float)vPoint.getY()); -// } -// } -// } -// } -// if (vertexPoint != null) { -// path.lineTo((float)vertexPoint.getX(), (float)vertexPoint.getY()); -// } -// previousVertex = vertex; -// } -// return path; } } \ No newline at end of file Modified: trunk/18xx/rails/ui/swing/GameUIManager.java =================================================================== --- trunk/18xx/rails/ui/swing/GameUIManager.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/GameUIManager.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -141,15 +141,8 @@ if (font != null) log.debug("Change text fonts globally to " + font.getName() + " / " + (boldStyle ? "Bold" : "Plain")); } - String fontScale = Config.getGameSpecific("font.ui.scale"); - if (Util.hasValue(fontScale)) { - try { - changeGlobalFont(font, Double.parseDouble(fontScale)); - log.debug("Change text fonts to relative scale " + fontScale); - } catch (NumberFormatException e) { - // do nothing - } - } + log.debug("Change text fonts to relative scale " + Scale.getFontScale()); + changeGlobalFont(font, Scale.getFontScale()); } @@ -183,7 +176,8 @@ System.exit(1); } - updateUI(); + // uncommented by sfy on 13/08/10 to avoid double revenue calculation +// updateUI(); reportWindow.scrollDown(); @@ -844,6 +838,7 @@ * (after configuration changes) */ public static void updateUILookAndFeel() { + Scale.initFromConfiguration(); instance.initFontSettings(); instance.updateWindowsLookAndFeel(); Modified: trunk/18xx/rails/ui/swing/MessagePanel.java =================================================================== --- trunk/18xx/rails/ui/swing/MessagePanel.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/MessagePanel.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -2,6 +2,10 @@ package rails.ui.swing; import java.awt.Color; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.List; import javax.swing.*; @@ -9,6 +13,11 @@ private static final long serialVersionUID = 1L; private JLabel message; + + private String currentMessage; + private StringBuffer currentInformation; + private List<String> currentDetails = new ArrayList<String>(); + private boolean showDetails; Color background = new Color(225, 225, 225); @@ -27,15 +36,71 @@ add(message); message.setVisible(true); setVisible(true); + + this.addMouseListener(new MouseListener() { + public void mouseClicked(MouseEvent arg0) { + showDetails = !showDetails; + updateMessageText(); + } + + public void mouseEntered(MouseEvent arg0) {} + public void mouseExited(MouseEvent arg0) {} + public void mousePressed(MouseEvent arg0) {} + public void mouseReleased(MouseEvent arg0) {} + }); + } - public void setMessage(String messageText) { - if (messageText != null) { - int lines = messageText.split("<[Bb][Rr]>").length + 1; + private void updateMessageText() { + StringBuffer messageText = new StringBuffer() ; + if (currentMessage != null) { + messageText.append(currentMessage); + } + if (currentInformation != null) { + messageText.append("<span style='color:green'>"); + messageText.append(currentInformation); + messageText.append("</span>"); + } + if (showDetails) { + messageText.append("<span style='color:blue'>"); + for (String detail:currentDetails) { + messageText.append(detail); + } + messageText.append("</span>"); + } else if (currentDetails.size() != 0) { + messageText.append("<span style='color:blue'>"); + messageText.append("<BR> Click for more details"); + messageText.append("</span>"); + } + if (currentMessage != null) { + String text = messageText.toString(); + int lines = text.split("<[Bb][Rr]>").length + 1; setLines(lines); - message.setText("<html><center>" + messageText + "</center></html>"); + message.setText("<html><center>" + text + "</center></html>"); } + } + + public void setMessage(String messageText) { + currentMessage = messageText; + currentInformation = null; + currentDetails.clear(); + showDetails = false; + updateMessageText(); + } + + public void addInformation(String infoText) { + if (currentInformation == null) { + currentInformation = new StringBuffer(); + } + currentInformation.append("<BR>" + infoText); + updateMessageText(); + } + + public void addDetail(String detailText) { + currentDetails.add("<BR>" + detailText); + updateMessageText(); + } public void setLines(int numberOfLines) { setSize(1000, numberOfLines * 12); Modified: trunk/18xx/rails/ui/swing/ORPanel.java =================================================================== --- trunk/18xx/rails/ui/swing/ORPanel.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/ORPanel.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -633,11 +633,11 @@ log.info("Revenue Adapter:" + ra); int revenueValue = ra.calculateRevenue(); log.info("Revenue Value:" + revenueValue); - log.info("Revenue Run:" + ra.getOptimalRunPrettyPrint()); + log.info("Revenue Run:" + ra.getOptimalRunPrettyPrint(true)); ra.drawOptimalRunAsPath(orUIManager.getMap()); orUIManager.getMap().repaint(); JOptionPane.showMessageDialog(orWindow, "RevenueValue = " + revenueValue + - "\nRevenueRun = \n" + ra.getOptimalRunPrettyPrint()); + "\nRevenueRun = \n" + ra.getOptimalRunPrettyPrint(true)); // simple ra = RevenueAdapter.createRevenueAdapter(gm, company, gm.getCurrentPhase()); @@ -648,11 +648,11 @@ log.info("Revenue Adapter:" + ra); revenueValue = ra.calculateRevenue(); log.info("Revenue Value:" + revenueValue); - log.info("Revenue Run:" + ra.getOptimalRunPrettyPrint()); + log.info("Revenue Run:" + ra.getOptimalRunPrettyPrint(true)); ra.drawOptimalRunAsPath(orUIManager.getMap()); orUIManager.getMap().repaint(); JOptionPane.showMessageDialog(orWindow, "RevenueValue = " + revenueValue + - "\nRevenueRun = \n" + ra.getOptimalRunPrettyPrint()); + "\nRevenueRun = \n" + ra.getOptimalRunPrettyPrint(true)); String trainString = JOptionPane.showInputDialog(orWindow, "Another train", @@ -831,7 +831,7 @@ private RevenueAdapter initRevenueCalculation(PublicCompanyI company){ GameManagerI gm = orUIManager.getGameUIManager().getGameManager(); RevenueAdapter ra = RevenueAdapter.createRevenueAdapter(gm, company, gm.getCurrentPhase()); - ra.initRevenueCalculator(false); + ra.initRevenueCalculator(true); ra.addRevenueListener(this); return ra; } @@ -841,8 +841,9 @@ if (finalResult) { revenueAdapter.drawOptimalRunAsPath(orUIManager.getMap()); orUIManager.getMap().repaint(); - JOptionPane.showMessageDialog(orWindow, "Best Run Value = " + bestRevenue + - "\n" + revenueAdapter.getOptimalRunPrettyPrint()); + orUIManager.addInformation("Best Run Value = " + bestRevenue + + " with " + revenueAdapter.getOptimalRunPrettyPrint(false)); + orUIManager.addDetail(revenueAdapter.getOptimalRunPrettyPrint(true)); } } Modified: trunk/18xx/rails/ui/swing/ORUIManager.java =================================================================== --- trunk/18xx/rails/ui/swing/ORUIManager.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/ORUIManager.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -1856,6 +1856,14 @@ public void setMessage(String message) { messagePanel.setMessage(message); } + + public void addInformation(String infoText) { + messagePanel.addInformation(infoText); + } + + public void addDetail(String detailText) { + messagePanel.addDetail(detailText); + } public void setLocalAction(boolean value) { localAction = value; Modified: trunk/18xx/rails/ui/swing/Scale.java =================================================================== --- trunk/18xx/rails/ui/swing/Scale.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/Scale.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -4,12 +4,17 @@ import java.awt.Dimension; import java.awt.Toolkit; +import rails.util.Config; +import rails.util.Util; + /** * Class Scale holds static information used to scale all GUI elements. */ public final class Scale { public static int scale = 15; + + public static double fontScale = 0; static { fitScreenRes(); @@ -23,10 +28,31 @@ Scale.scale = scale; } + public static double getFontScale() { + if (fontScale == 0) { + initFromConfiguration(); + } + return fontScale; + } + + public static void initFromConfiguration() { + String fontScaleString = Config.getGameSpecific("font.ui.scale"); + if (Util.hasValue(fontScaleString)) { + try { + fontScale = Double.parseDouble(fontScaleString); + } catch (NumberFormatException e) { + fontScale = 1; + } + } + + } + + /** * Set the scale so that the MasterBoard fits on the screen. Default scale * should be 15 for screen resolutions with height 1000 or more. For less, * scale it down linearly. + * */ public static void fitScreenRes() { Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); Modified: trunk/18xx/rails/ui/swing/UpgradesPanel.java =================================================================== --- trunk/18xx/rails/ui/swing/UpgradesPanel.java 2010-08-12 20:58:05 UTC (rev 1381) +++ trunk/18xx/rails/ui/swing/UpgradesPanel.java 2010-08-13 15:57:46 UTC (rev 1382) @@ -19,6 +19,7 @@ import rails.ui.swing.elements.ActionLabel; import rails.ui.swing.hexmap.GUIHex; import rails.ui.swing.hexmap.HexMap; +import rails.util.Config; import rails.util.LocalText; public class UpgradesPanel extends Box implements MouseListener, ActionListener { @@ -36,7 +37,7 @@ private JPanel upgradePanel; private JScrollPane scrollPane; - private Dimension preferredSize = new Dimension(100, 200); + private Dimension preferredSize; private Border border = new EtchedBorder(); private final String INIT_CANCEL_TEXT = "NoTile"; private final String INIT_DONE_TEXT = "LayTile"; @@ -55,6 +56,7 @@ this.orUIManager = orUIManager; + preferredSize = new Dimension((int)Math.round(100 * (2 + Scale.getFontScale())/3), 200); setSize(preferredSize); setVisible(true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |