Search in sources :

Example 81 with TreeNode

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);
    }
}
Also used : TreePath(javax.swing.tree.TreePath) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) Step(games.strategy.engine.history.Step)

Example 82 with TreeNode

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);
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) PlayerID(games.strategy.engine.data.PlayerID) EndRoundDelegate(games.strategy.triplea.delegate.EndRoundDelegate) GameData(games.strategy.engine.data.GameData) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) ArrayList(java.util.ArrayList) ExtendedStats(games.strategy.triplea.ui.ExtendedStats) Step(games.strategy.engine.history.Step) UnitAttachment(games.strategy.triplea.attachments.UnitAttachment) IStat(games.strategy.engine.stats.IStat) ProductionRule(games.strategy.engine.data.ProductionRule) UnitType(games.strategy.engine.data.UnitType) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) Round(games.strategy.engine.history.Round) PlayerOrderComparator(games.strategy.triplea.util.PlayerOrderComparator) Resource(games.strategy.engine.data.Resource) IOException(java.io.IOException) JFileChooser(javax.swing.JFileChooser) HistoryNode(games.strategy.engine.history.HistoryNode) File(java.io.File) Writer(java.io.Writer)

Example 83 with TreeNode

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;
}
Also used : AbstractNode(org.sonarlint.intellij.ui.nodes.AbstractNode) TreeNode(javax.swing.tree.TreeNode) CheckForNull(javax.annotation.CheckForNull)

Example 84 with TreeNode

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;
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode)

Example 85 with TreeNode

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();
}
Also used : Task(nars.entity.Task) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) TreeNode(javax.swing.tree.TreeNode) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode)

Aggregations

TreeNode (javax.swing.tree.TreeNode)313 DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)146 TreePath (javax.swing.tree.TreePath)125 FilteredTreeModel (gov.sandia.n2a.ui.eq.FilteredTreeModel)31 Enumeration (java.util.Enumeration)30 PanelEquationTree (gov.sandia.n2a.ui.eq.PanelEquationTree)28 MPart (gov.sandia.n2a.eqset.MPart)27 ArrayList (java.util.ArrayList)27 NodeBase (gov.sandia.n2a.ui.eq.tree.NodeBase)25 JTree (javax.swing.JTree)23 DefaultTreeModel (javax.swing.tree.DefaultTreeModel)23 Nullable (org.jetbrains.annotations.Nullable)23 MutableTreeNode (javax.swing.tree.MutableTreeNode)19 CannotRedoException (javax.swing.undo.CannotRedoException)18 NodePart (gov.sandia.n2a.ui.eq.tree.NodePart)16 CannotUndoException (javax.swing.undo.CannotUndoException)14 NodeVariable (gov.sandia.n2a.ui.eq.tree.NodeVariable)12 MouseEvent (java.awt.event.MouseEvent)11 NotNull (org.jetbrains.annotations.NotNull)11 PanelEquations (gov.sandia.n2a.ui.eq.PanelEquations)10