From: Erik V. <ev...@us...> - 2009-01-11 17:24:52
|
Update of /cvsroot/rails/18xx/rails/ui/swing In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv6543/rails/ui/swing Modified Files: ORUIManager.java ORPanel.java GameStatus.java Log Message: Basic loans taking and specific rules for 1856. Index: ORUIManager.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/ui/swing/ORUIManager.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** ORUIManager.java 30 Nov 2008 21:49:08 -0000 1.22 --- ORUIManager.java 11 Jan 2009 17:24:46 -0000 1.23 *************** *** 25,29 **** private MessagePanel messagePanel; private RemainingTilesWindow remainingTiles; ! public GameUIManager gameUIManager; --- 25,29 ---- private MessagePanel messagePanel; private RemainingTilesWindow remainingTiles; ! public GameUIManager gameUIManager; *************** *** 93,98 **** } ! ! public void initOR(OperatingRound or) { --- 93,98 ---- } ! ! public void initOR(OperatingRound or) { *************** *** 313,317 **** /** * Processes button presses and menu selection actions ! * * @param command * @param actions --- 313,317 ---- /** * Processes button presses and menu selection actions ! * * @param command * @param actions *************** *** 337,344 **** orWindow.process(actions.get(0)); ! } else if (actionType == ReachDestinations.class) { ! reachDestinations ((ReachDestinations) actions.get(0)); } --- 337,348 ---- orWindow.process(actions.get(0)); ! } else if (actionType == ReachDestinations.class) { ! reachDestinations ((ReachDestinations) actions.get(0)); + + } else if (actionType == TakeLoans.class) { + + takeLoans ((TakeLoans)actions.get(0)); } *************** *** 354,357 **** --- 358,362 ---- displayRemainingTiles(); + } *************** *** 409,415 **** } ! protected void reachDestinations (ReachDestinations action) { ! int index; List<String> options = new ArrayList<String>(); --- 414,420 ---- } ! protected void reachDestinations (ReachDestinations action) { ! int index; List<String> options = new ArrayList<String>(); *************** *** 421,425 **** if (options.size() > 0) { ! boolean[] destined = new CheckBoxDialog(orPanel, LocalText.getText("DestinationsReached"), --- 426,430 ---- if (options.size() > 0) { ! boolean[] destined = new CheckBoxDialog(orPanel, LocalText.getText("DestinationsReached"), *************** *** 559,563 **** allowance.setOrientation(selectedHex.getProvisionalTileRotation()); allowance.setLaidTile(selectedHex.getProvisionalTile()); ! relayBaseTokens (allowance); --- 564,568 ---- allowance.setOrientation(selectedHex.getProvisionalTileRotation()); allowance.setLaidTile(selectedHex.getProvisionalTile()); ! relayBaseTokens (allowance); *************** *** 642,649 **** } } ! ! /** * Manually relay the tokens. ! * This is only needed in special cases, * such as the 1830 Erie home token. * If applicable, the TileSet entry for the <i>old</i> tile --- 647,654 ---- } } ! ! /** * Manually relay the tokens. ! * This is only needed in special cases, * such as the 1830 Erie home token. * If applicable, the TileSet entry for the <i>old</i> tile *************** *** 653,661 **** */ protected void relayBaseTokens (LayTile action) { ! MapHex hex = action.getChosenHex(); TileI newTile = action.getLaidTile(); TileI oldTile = hex.getCurrentTile(); ! if (!action.isRelayBaseTokens() && !oldTile.relayBaseTokensOnUpgrade()) return; for (City oldCity : hex.getCities()) { --- 658,666 ---- */ protected void relayBaseTokens (LayTile action) { ! MapHex hex = action.getChosenHex(); TileI newTile = action.getLaidTile(); TileI oldTile = hex.getCurrentTile(); ! if (!action.isRelayBaseTokens() && !oldTile.relayBaseTokensOnUpgrade()) return; for (City oldCity : hex.getCities()) { *************** *** 663,667 **** // Assume only 1 token (no exceptions known) PublicCompanyI company = ((BaseToken)oldCity.getTokens().get(0)).getCompany(); ! List<String> prompts = new ArrayList<String>(); Map<String, Integer> promptToCityMap = new HashMap<String, Integer>(); --- 668,672 ---- // Assume only 1 token (no exceptions known) PublicCompanyI company = ((BaseToken)oldCity.getTokens().get(0)).getCompany(); ! List<String> prompts = new ArrayList<String>(); Map<String, Integer> promptToCityMap = new HashMap<String, Integer>(); *************** *** 703,707 **** /** * Lay Token finished. ! * * @param action The LayBonusToken action object of the laid token. */ --- 708,712 ---- /** * Lay Token finished. ! * * @param action The LayBonusToken action object of the laid token. */ *************** *** 1027,1030 **** --- 1032,1064 ---- } + /** Default implementation. + * The <Loans> attributes number and value <b>must</b> + * have been configured in CompanyManager.xml */ + protected void takeLoans(TakeLoans action) { + + if (action.getMaxNumber() == 1) { + + String message = LocalText.getText("PleaseConfirm"); + String prompt = LocalText.getText("TakeLoanPrompt", + action.getCompanyName(), + Bank.format(action.getPrice())); + if (JOptionPane.showConfirmDialog(orWindow, prompt, + message, JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE) + == JOptionPane.OK_OPTION) { + action.setNumberTaken(1); + orWindow.process(action); + } + + } else { + // For now we disregard the case of multiple loans + } + + } + + protected void repayLoans () { + + } + public void updateStatus() { *************** *** 1037,1041 **** mapRelatedActions.clear(); ! orPanel.setHighlightsOff(); if (actionToComplete != null) { --- 1071,1075 ---- mapRelatedActions.clear(); ! orPanel.resetActions(); if (actionToComplete != null) { *************** *** 1124,1127 **** --- 1158,1165 ---- // discardTrain(); + + } else if (possibleActions.contains(TakeLoans.class)) { + + orPanel.enableLoanTaking (possibleActions.getType(TakeLoans.class).get(0)); } else if (orStep == OperatingRound.STEP_FINAL) { *************** *** 1130,1133 **** --- 1168,1175 ---- } + if (possibleActions.contains(TakeLoans.class)) { + orPanel.enableLoanTaking (possibleActions.getType(TakeLoans.class).get(0)); + } + setMapRelatedActions(mapRelatedActions); *************** *** 1184,1188 **** } } ! if (possibleActions.contains(ReachDestinations.class)) { orPanel.addSpecialAction(possibleActions.getType(ReachDestinations.class).get(0), --- 1226,1230 ---- } } ! if (possibleActions.contains(ReachDestinations.class)) { orPanel.addSpecialAction(possibleActions.getType(ReachDestinations.class).get(0), Index: GameStatus.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/ui/swing/GameStatus.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** GameStatus.java 28 Nov 2008 19:41:58 -0000 1.21 --- GameStatus.java 11 Jan 2009 17:24:46 -0000 1.22 *************** *** 1,41 **** package rails.ui.swing; ! import java.awt.Color; ! import java.awt.GridBagConstraints; ! import java.awt.GridBagLayout; ! import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ! import java.util.ArrayList; ! import java.util.Arrays; ! import java.util.HashMap; import java.util.List; - import java.util.Map; ! import javax.swing.BorderFactory; ! import javax.swing.ButtonGroup; ! import javax.swing.JComponent; ! import javax.swing.JOptionPane; ! import javax.swing.JPanel; ! import javax.swing.UIManager; import org.apache.log4j.Logger; import rails.common.Defs; ! import rails.game.Bank; ! import rails.game.Player; ! import rails.game.Portfolio; ! import rails.game.PublicCertificateI; ! import rails.game.PublicCompanyI; ! import rails.game.action.BuyCertificate; ! import rails.game.action.NullAction; ! import rails.game.action.PossibleAction; ! import rails.game.action.PossibleActions; ! import rails.game.action.SellShares; ! import rails.game.action.StartCompany; ! import rails.ui.swing.elements.Caption; ! import rails.ui.swing.elements.ClickField; ! import rails.ui.swing.elements.Field; ! import rails.ui.swing.elements.RadioButtonDialog; import rails.util.LocalText; --- 1,18 ---- package rails.ui.swing; ! import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ! import java.util.*; import java.util.List; ! import javax.swing.*; import org.apache.log4j.Logger; import rails.common.Defs; ! import rails.game.*; ! import rails.game.action.*; ! import rails.ui.swing.elements.*; import rails.util.LocalText; *************** *** 91,94 **** --- 68,73 ---- protected Field compPrivates[]; protected int compPrivatesXOffset, compPrivatesYOffset; + protected Field compLoans[]; + protected int compLoansXOffset, compLoansYOffset; protected Field playerCash[]; protected int playerCashXOffset, playerCashYOffset; *************** *** 122,126 **** //protected CompanyManagerI cm; protected Portfolio ipo, pool; ! protected GameUIManager gameUIManager; --- 101,105 ---- //protected CompanyManagerI cm; protected Portfolio ipo, pool; ! protected GameUIManager gameUIManager; *************** *** 131,134 **** --- 110,114 ---- protected boolean compCanHoldOwnShares = false; protected boolean compCanHoldForeignShares = false; // NOT YET USED + protected boolean hasCompanyLoans = false; private PublicCompanyI c; *************** *** 178,181 **** --- 158,162 ---- compCanBuyPrivates = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.CAN_ANY_COMPANY_BUY_PRIVATES); compCanHoldOwnShares = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.CAN_ANY_COMPANY_HOLD_OWN_SHARES); + hasCompanyLoans = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.HAS_ANY_COMPANY_LOANS); ipo = Bank.getIpo(); *************** *** 199,202 **** --- 180,185 ---- compTokens = new Field[nc]; compPrivates = new Field[nc]; + compLoans = new Field[nc]; + playerCash = new Field[np]; playerPrivates = new Field[np]; *************** *** 236,239 **** --- 219,226 ---- compPrivatesYOffset = lastY; } + if (hasCompanyLoans) { + compLoansXOffset = ++lastX; + compLoansYOffset = lastY; + } rightCompCaptionXOffset = ++lastX; *************** *** 293,297 **** } addField(new Caption(LocalText.getText("COMPANY_DETAILS")), ! compCashXOffset, 0, this.compCanBuyPrivates ? 5 : 4, 1, 0); addField(new Caption(LocalText.getText("CASH")), compCashXOffset, 1, 1, 1, WIDE_BOTTOM); --- 280,285 ---- } addField(new Caption(LocalText.getText("COMPANY_DETAILS")), ! compCashXOffset, 0, 4 + (compCanBuyPrivates ? 1 : 0) ! + (hasCompanyLoans ? 1 : 0), 1, 0); addField(new Caption(LocalText.getText("CASH")), compCashXOffset, 1, 1, 1, WIDE_BOTTOM); *************** *** 306,309 **** --- 294,302 ---- compPrivatesXOffset, 1, 1, 1, WIDE_BOTTOM); } + if (hasCompanyLoans) { + addField (new Caption (LocalText.getText("LOANS")), + compLoansXOffset, 1, 1, 1, WIDE_BOTTOM); + } + addField(new Caption(LocalText.getText("COMPANY")), rightCompCaptionXOffset, 0, 1, 2, WIDE_LEFT + WIDE_BOTTOM); *************** *** 409,412 **** --- 402,409 ---- 0); } + if (hasCompanyLoans) { + f = compLoans[i] = new Field (c.getLoanValueModel()); + addField (f, compLoansXOffset, compLoansYOffset+i, 1, 1, 0); + } f = new Caption(c.getName()); *************** *** 640,644 **** buyAmounts.add(startPrices[0]); } ! } else { --- 637,641 ---- buyAmounts.add(startPrices[0]); } ! } else { *************** *** 719,723 **** if (chosenAction != null) ! ((StatusWindow) parent).process(chosenAction); repaint(); --- 716,720 ---- if (chosenAction != null) ! (parent).process(chosenAction); repaint(); *************** *** 810,814 **** if (nullActions != null) { for (NullAction na : nullActions) { ! ((StatusWindow) parent).setPassButton(na); } } --- 807,811 ---- if (nullActions != null) { for (NullAction na : nullActions) { ! (parent).setPassButton(na); } } Index: ORPanel.java =================================================================== RCS file: /cvsroot/rails/18xx/rails/ui/swing/ORPanel.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** ORPanel.java 20 Nov 2008 21:49:38 -0000 1.27 --- ORPanel.java 11 Jan 2009 17:24:46 -0000 1.28 *************** *** 38,41 **** --- 38,43 ---- private static final String REDO_CMD = "Redo"; public static final String REM_TILES_CMD = "RemainingTiles"; + public static final String TAKE_LOANS_CMD = "TakeLoans"; + public static final String REPAY_LOANS_CMD = "RepayLoans"; ORWindow orWindow; *************** *** 49,52 **** --- 51,57 ---- private JMenuItem remainingTilesMenuItem; private JMenu specialMenu; + private JMenu loansMenu; + private ActionMenuItem takeLoans; + private ActionMenuItem repayLoans; private GridBagLayout gb; *************** *** 67,70 **** --- 72,77 ---- private int privatesXOffset, privatesYOffset; private Field newPrivatesCost[]; + private Field[] compLoans; + private int loansXOffset, loansYOffset; private Field tiles[]; private int tilesXOffset, tilesYOffset; *************** *** 85,91 **** private boolean privatesCanBeBought = false; private boolean bonusTokensExist = false; private Caption tileCaption, tokenCaption, revenueCaption, trainCaption, ! privatesCaption; private ActionButton button1; --- 92,99 ---- private boolean privatesCanBeBought = false; private boolean bonusTokensExist = false; + private boolean hasCompanyLoans = false; private Caption tileCaption, tokenCaption, revenueCaption, trainCaption, ! privatesCaption, loansCaption; private ActionButton button1; *************** *** 110,113 **** --- 118,123 ---- private PublicCompanyI orComp = null; + + private List<JMenuItem> menuItemsToReset = new ArrayList<JMenuItem>(); protected static Logger log = *************** *** 130,133 **** --- 140,144 ---- privatesCanBeBought = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.CAN_ANY_COMPANY_BUY_PRIVATES); bonusTokensExist = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.DO_BONUS_TOKENS_EXIST); + hasCompanyLoans = gameUIManager.getCommonParameterAsBoolean(Defs.Parm.HAS_ANY_COMPANY_LOANS); initButtonPanel(); *************** *** 159,167 **** specialMenu = new JMenu(LocalText.getText("SPECIAL")); ! specialMenu.setBackground(Color.YELLOW); // Normally not seen ! // because menu is not ! // opaque specialMenu.setEnabled(false); menuBar.add(specialMenu); add(menuBar, BorderLayout.NORTH); --- 170,197 ---- specialMenu = new JMenu(LocalText.getText("SPECIAL")); ! specialMenu.setBackground(Color.YELLOW); ! // Normally not seen because menu is not opaque specialMenu.setEnabled(false); menuBar.add(specialMenu); + + if (hasCompanyLoans) { + loansMenu = new JMenu (LocalText.getText("LOANS")); + specialMenu.setEnabled(true); + + takeLoans = new ActionMenuItem (LocalText.getText("TakeLoans")); + takeLoans.addActionListener(this); + takeLoans.setEnabled(false); + loansMenu.add(takeLoans); + menuItemsToReset.add(takeLoans); + + repayLoans = new ActionMenuItem (LocalText.getText("RepayLoans")); + repayLoans.addActionListener(this); + repayLoans.setEnabled(false); + loansMenu.add(repayLoans); + menuItemsToReset.add(repayLoans); + + menuBar.add(loansMenu); + } + add(menuBar, BorderLayout.NORTH); *************** *** 259,262 **** --- 289,293 ---- tokensLeft = new Field[nc]; if (bonusTokensExist) tokenBonus = new Field[nc]; + if (hasCompanyLoans) compLoans = new Field[nc]; revenue = new Field[nc]; revenueSelect = new Spinner[nc]; *************** *** 300,303 **** --- 331,341 ---- } + if (hasCompanyLoans) { + loansXOffset = currentXOffset += lastXWidth; + loansYOffset = leftCompNameYOffset; + addField (loansCaption = new Caption(LocalText.getText("LOANS")), + loansXOffset, 0, lastXWidth = 1, 2, WIDE_RIGHT); + } + tilesXOffset = currentXOffset += lastXWidth; tilesYOffset = leftCompNameYOffset; *************** *** 379,382 **** --- 417,425 ---- } + if (hasCompanyLoans) { + f = compLoans[i] = new Field (c.getLoanValueModel()); + addField (f, loansXOffset, loansYOffset + i, 1, 1, WIDE_RIGHT); + } + f = tiles[i] = new Field(c.getTilesLaidThisTurnModel()); addField(f, tilesXOffset, tilesYOffset + i, 1, 1, 0); *************** *** 502,506 **** } ! public void setHighlightsOff() { tileCaption.setHighlight(false); tokenCaption.setHighlight(false); --- 545,549 ---- } ! public void resetActions() { tileCaption.setHighlight(false); tokenCaption.setHighlight(false); *************** *** 511,514 **** --- 554,564 ---- president[i].setHighlight(false); } + + for (JMenuItem item : menuItemsToReset) { + item.setEnabled(false); + if (item instanceof ActionMenuItem) { + ((ActionMenuItem)item).clearPossibleActions(); + } + } } *************** *** 669,672 **** --- 719,727 ---- if (action != null) redoButton.setPossibleAction(action); } + + public void enableLoanTaking (TakeLoans action) { + if (action != null) takeLoans.addPossibleAction(action); + takeLoans.setEnabled(action != null); + } public void finishORCompanyTurn(int orCompIndex) { |