use of javax.swing.tree.TreeNode in project triplea by triplea-game.
the class HistoryPanel method next.
private void next() {
if (tree.getSelectionCount() == 0) {
tree.setSelectionInterval(0, 0);
return;
}
final TreePath path = tree.getSelectionPath();
final TreeNode selected = (TreeNode) path.getLastPathComponent();
@SuppressWarnings("unchecked") final Enumeration<TreeNode> nodeEnum = ((DefaultMutableTreeNode) tree.getModel().getRoot()).preorderEnumeration();
TreeNode next = null;
boolean foundSelected = false;
while (nodeEnum.hasMoreElements()) {
final TreeNode current = nodeEnum.nextElement();
if (current == selected) {
foundSelected = true;
} else if (foundSelected) {
if (current.getParent() instanceof Step) {
next = current;
break;
}
}
}
if (next != null) {
navigateTo(next);
}
}
use of javax.swing.tree.TreeNode in project triplea by triplea-game.
the class ExportMenu method createAndSaveStats.
private void createAndSaveStats(final boolean showPhaseStats) {
final ExtendedStats statPanel = new ExtendedStats(gameData, uiContext);
final JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
final File rootDir = new File(SystemProperties.getUserDir());
final int currentRound = gameData.getCurrentRound();
String defaultFileName = "stats_" + dateTimeFormatter.format(LocalDateTime.now()) + "_" + gameData.getGameName() + "_round_" + currentRound + (showPhaseStats ? "_full" : "_short");
defaultFileName = FileNameUtils.removeIllegalCharacters(defaultFileName);
defaultFileName = defaultFileName + ".csv";
chooser.setSelectedFile(new File(rootDir, defaultFileName));
if (chooser.showSaveDialog(frame) != JOptionPane.OK_OPTION) {
return;
}
final StringBuilder text = new StringBuilder(1000);
try {
gameData.acquireReadLock();
final GameData clone = GameDataUtils.cloneGameData(gameData);
final IStat[] stats = statPanel.getStats();
// extended stats covers stuff that doesn't show up in the game stats menu bar, like custom resources or tech
// tokens or # techs, etc.
final IStat[] statsExtended = statPanel.getStatsExtended(gameData);
final String[] alliances = statPanel.getAlliances().toArray(new String[0]);
final PlayerID[] players = statPanel.getPlayers().toArray(new PlayerID[0]);
// its important here to translate the player objects into our game data
// the players for the stat panel are only relevant with respect to
// the game data they belong to
Arrays.setAll(players, i -> clone.getPlayerList().getPlayerId(players[i].getName()));
text.append(defaultFileName).append(",");
text.append("\n");
text.append("TripleA Engine Version: ,");
text.append(ClientContext.engineVersion()).append(",");
text.append("\n");
text.append("Game Name: ,");
text.append(gameData.getGameName()).append(",");
text.append("\n");
text.append("Game Version: ,");
text.append(gameData.getGameVersion()).append(",");
text.append("\n");
text.append("\n");
text.append("Current Round: ,");
text.append(currentRound).append(",");
text.append("\n");
text.append("Number of Players: ,");
text.append(statPanel.getPlayers().size()).append(",");
text.append("\n");
text.append("Number of Alliances: ,");
text.append(statPanel.getAlliances().size()).append(",");
text.append("\n");
text.append("\n");
text.append("Turn Order: ,");
text.append("\n");
final List<PlayerID> playerOrderList = new ArrayList<>(gameData.getPlayerList().getPlayers());
playerOrderList.sort(new PlayerOrderComparator(gameData));
final Set<PlayerID> playerOrderSetNoDuplicates = new LinkedHashSet<>(playerOrderList);
for (final PlayerID currentPlayerId : playerOrderSetNoDuplicates) {
text.append(currentPlayerId.getName()).append(",");
final Collection<String> allianceNames = gameData.getAllianceTracker().getAlliancesPlayerIsIn(currentPlayerId);
for (final String allianceName : allianceNames) {
text.append(allianceName).append(",");
}
text.append("\n");
}
text.append("\n");
text.append("Winners: ,");
final EndRoundDelegate delegateEndRound = (EndRoundDelegate) gameData.getDelegateList().getDelegate("endRound");
if (delegateEndRound != null && delegateEndRound.getWinners() != null) {
for (final PlayerID p : delegateEndRound.getWinners()) {
text.append(p.getName()).append(",");
}
} else {
text.append("none yet; game not over,");
}
text.append("\n");
text.append("\n");
text.append("Resource Chart: ,");
text.append("\n");
for (final Resource resource : gameData.getResourceList().getResources()) {
text.append(resource.getName()).append(",");
text.append("\n");
}
// if short, we won't both showing production and unit info
if (showPhaseStats) {
text.append("\n");
text.append("Production Rules: ,");
text.append("\n");
text.append("Name,Result,Quantity,Cost,Resource,\n");
final Collection<ProductionRule> purchaseOptions = gameData.getProductionRuleList().getProductionRules();
for (final ProductionRule pr : purchaseOptions) {
String costString = pr.toStringCosts().replaceAll("; ", ",");
costString = costString.replaceAll(" ", ",");
text.append(pr.getName()).append(",").append(pr.getResults().keySet().iterator().next().getName()).append(",").append(pr.getResults().getInt(pr.getResults().keySet().iterator().next())).append(",").append(costString).append(",");
text.append("\n");
}
text.append("\n");
text.append("Unit Types: ,");
text.append("\n");
text.append("Name,Listed Abilities\n");
for (final UnitType unitType : gameData.getUnitTypeList()) {
final UnitAttachment ua = UnitAttachment.get(unitType);
if (ua == null) {
continue;
}
String toModify = ua.allUnitStatsForExporter();
toModify = toModify.replaceFirst("UnitType called ", "").replaceFirst(" with:", "").replaceAll("games.strategy.engine.data.", "").replaceAll("\n", ";").replaceAll(",", ";");
toModify = toModify.replaceAll(" ", ",");
toModify = toModify.replaceAll(", ", ",").replaceAll(" ,", ",");
text.append(toModify);
text.append("\n");
}
}
text.append("\n");
text.append((showPhaseStats ? "Full Stats (includes each phase that had activity)," : "Short Stats (only shows first phase with activity per player per round),"));
text.append("\n");
text.append("Turn Stats: ,");
text.append("\n");
text.append("Round,Player Turn,Phase Name,");
for (final IStat stat : stats) {
for (final PlayerID player : players) {
text.append(stat.getName()).append(" ");
text.append(player.getName());
text.append(",");
}
for (final String alliance : alliances) {
text.append(stat.getName()).append(" ");
text.append(alliance);
text.append(",");
}
}
for (final IStat element : statsExtended) {
for (final PlayerID player : players) {
text.append(element.getName()).append(" ");
text.append(player.getName());
text.append(",");
}
for (final String alliance : alliances) {
text.append(element.getName()).append(" ");
text.append(alliance);
text.append(",");
}
}
text.append("\n");
clone.getHistory().gotoNode(clone.getHistory().getLastNode());
@SuppressWarnings("unchecked") final Enumeration<TreeNode> nodes = ((DefaultMutableTreeNode) clone.getHistory().getRoot()).preorderEnumeration();
PlayerID currentPlayer = null;
int round = 0;
while (nodes.hasMoreElements()) {
// we want to export on change of turn
final HistoryNode element = (HistoryNode) nodes.nextElement();
if (element instanceof Round) {
round++;
}
if (!(element instanceof Step)) {
continue;
}
final Step step = (Step) element;
if (step.getPlayerId() == null || step.getPlayerId().isNull()) {
continue;
}
// this is to stop from having multiple entries for each players turn.
if (!showPhaseStats) {
if (step.getPlayerId() == currentPlayer) {
continue;
}
}
currentPlayer = step.getPlayerId();
clone.getHistory().gotoNode(element);
final String playerName = step.getPlayerId() == null ? "" : step.getPlayerId().getName() + ": ";
String stepName = step.getStepName();
// copied directly from TripleAPlayer, will probably have to be updated in the future if more delegates are made
if (stepName.endsWith("Bid")) {
stepName = "Bid";
} else if (stepName.endsWith("Tech")) {
stepName = "Tech";
} else if (stepName.endsWith("TechActivation")) {
stepName = "TechActivation";
} else if (stepName.endsWith("Purchase")) {
stepName = "Purchase";
} else if (stepName.endsWith("NonCombatMove")) {
stepName = "NonCombatMove";
} else if (stepName.endsWith("Move")) {
stepName = "Move";
} else if (stepName.endsWith("Battle")) {
stepName = "Battle";
} else if (stepName.endsWith("BidPlace")) {
stepName = "BidPlace";
} else if (stepName.endsWith("Place")) {
stepName = "Place";
} else if (stepName.endsWith("Politics")) {
stepName = "Politics";
} else if (stepName.endsWith("EndTurn")) {
stepName = "EndTurn";
} else {
stepName = "";
}
text.append(round).append(",").append(playerName).append(",").append(stepName).append(",");
for (final IStat stat : stats) {
for (final PlayerID player : players) {
text.append(stat.getFormatter().format(stat.getValue(player, clone)));
text.append(",");
}
for (final String alliance : alliances) {
text.append(stat.getFormatter().format(stat.getValue(alliance, clone)));
text.append(",");
}
}
for (final IStat element2 : statsExtended) {
for (final PlayerID player : players) {
text.append(element2.getFormatter().format(element2.getValue(player, clone)));
text.append(",");
}
for (final String alliance : alliances) {
text.append(element2.getFormatter().format(element2.getValue(alliance, clone)));
text.append(",");
}
}
text.append("\n");
}
} finally {
gameData.releaseReadLock();
}
try (Writer writer = Files.newBufferedWriter(chooser.getSelectedFile().toPath(), StandardCharsets.UTF_8)) {
writer.write(text.toString());
} catch (final IOException e1) {
ClientLogger.logQuietly("Failed to write stats: " + chooser.getSelectedFile().getAbsolutePath(), e1);
}
}
use of javax.swing.tree.TreeNode in project sonarlint-intellij by SonarSource.
the class IssueTreeModelBuilder method getPreviousNode.
@CheckForNull
private static AbstractNode getPreviousNode(AbstractNode startNode) {
AbstractNode parent = (AbstractNode) startNode.getParent();
if (parent == null) {
return null;
}
TreeNode previous = parent.getChildBefore(startNode);
if (previous == null) {
return getPreviousNode(parent);
}
return (AbstractNode) previous;
}
use of javax.swing.tree.TreeNode in project opt4j by felixreimann.
the class DefaultModulesPanel method removeEmptyCategories.
/**
* Removes empty categories. This method can create some new empty
* categories!
*
* @param current
* the current node
* @return true if an empty category was removed
*/
private boolean removeEmptyCategories(DefaultMutableTreeNode current) {
if (!current.children().hasMoreElements()) {
return false;
}
TreeNode node = current.getFirstChild();
boolean removed = false;
while (node != null) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode) node;
node = current.getChildAfter(n);
if (n.isLeaf()) {
if (n instanceof CategoryTreeNode && n.getChildCount() == 0) {
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) n.getParent();
parent.remove(n);
removed = true;
}
} else {
removed = removed || removeEmptyCategories(n);
}
}
return removed;
}
use of javax.swing.tree.TreeNode in project opennars by opennars.
the class TaskTree method run.
@Override
public void run() {
for (Task t : toRemove) {
DefaultMutableTreeNode node = nodes.get(t);
if (node != null) {
TreeNode p = node.getParent();
node.removeFromParent();
needRefresh.add(p);
needRefresh.remove(node);
}
nodes.remove(t);
components.remove(t);
toAdd.remove(t);
}
for (Task t : toAdd) {
// t.getParentTask();
Task parent = null;
if (parent != null && parent.equals(t)) {
// System.err.println(t + " has parentTask equal to itself");
parent = null;
}
DefaultMutableTreeNode tnode = getNode(t);
if (tnode != null) {
continue;
}
tnode = newNode(t);
if (parent == null) {
// System.out.println(tnode + " add to root");
root.add(tnode);
needRefresh.add(root);
} else {
DefaultMutableTreeNode pnode = getNode(parent);
if (pnode != null) {
// System.out.println(tnode + "Adding to: " + pnode);
if (tnode.getParent() != null) {
// pnode.isNodeAncestor(tnode)) {
tnode.removeFromParent();
}
pnode.add(tnode);
needRefresh.add(pnode);
} else {
// missing parent, reparent to root?
// System.out.println(tnode + " add to root by default");
root.add(tnode);
needRefresh.add(root);
}
}
}
for (TaskLabel t : components.values()) t.updateTask();
for (TreeNode t : needRefresh) model.reload(t);
needRefresh.clear();
toAdd.clear();
toRemove.clear();
repaint();
lastUpdateTime = System.currentTimeMillis();
}
Aggregations