|
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.
|