/* * Copyright 2015 Torridity. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.tor.tribes.ui.wiz.dep; import de.tor.tribes.types.DefenseInformation; import de.tor.tribes.ui.components.VillageOverviewMapPanel; import de.tor.tribes.ui.models.DEPResultTableModel; import de.tor.tribes.ui.renderer.DefaultTableHeaderRenderer; import de.tor.tribes.ui.renderer.DefenseStatusTableCellRenderer; import de.tor.tribes.ui.util.ColorGradientHelper; import de.tor.tribes.ui.views.DSWorkbenchSOSRequestAnalyzer; import de.tor.tribes.ui.wiz.dep.types.SupportSourceElement; import de.tor.tribes.util.Constants; import de.tor.tribes.util.TableHelper; import java.awt.BorderLayout; import java.awt.Color; import java.util.List; import java.util.Map; import javax.swing.SwingUtilities; import org.jdesktop.swingx.decorator.HighlighterFactory; import org.netbeans.spi.wizard.Wizard; import org.netbeans.spi.wizard.WizardPage; import org.netbeans.spi.wizard.WizardPanelNavResult; /** * @author Torridity */ public class DefenseFinishPanel extends WizardPage { private static final String GENERAL_INFO = "<html>Fertig! Wenn alles geklappt hat befinden sich nun in der Tabelle Informationen zu gefundenen Unterstützungen. " + "Diese solltest du über den entsprechenden Button in die Angriffsübersicht transferieren, um die Unterstützungen komfortabel abschicken zu können. " + "Das sollte natü sobald wie möglich geschehen.<br/>" + "Wurden nicht ausreichend Unterstützungen gefunden, so kannst du über den zweiten Button eine passende Unterstützungsanfrage stellen und sie im Stammesforum " + "posten. Bei der Anfrage werden auch gleich die Informationen einbezogen, die für die Berechnung verwendet wurden.<br/>" + "<br/>" + "Viel Erfolg bei der Verteidigung!" + "</html>"; private static DefenseFinishPanel singleton = null; private VillageOverviewMapPanel overviewPanel = null; public static synchronized DefenseFinishPanel getSingleton() { if (singleton == null) { singleton = new DefenseFinishPanel(); } return singleton; } /** * Creates new form AttackSourcePanel */ DefenseFinishPanel() { initComponents(); jxResultsTable.setModel(new DEPResultTableModel()); jxResultsTable.setHighlighters(HighlighterFactory.createAlternateStriping(Constants.DS_ROW_A, Constants.DS_ROW_B)); jxResultsTable.getTableHeader().setDefaultRenderer(new DefaultTableHeaderRenderer()); jxResultsTable.getColumnExt("Status").setCellRenderer(new DefenseStatusTableCellRenderer()); jXCollapsiblePane1.setLayout(new BorderLayout()); jXCollapsiblePane1.add(jInfoScrollPane, BorderLayout.CENTER); jInfoTextPane.setText(GENERAL_INFO); overviewPanel = new VillageOverviewMapPanel(); jPanel4.add(overviewPanel, BorderLayout.CENTER); jXCollapsiblePane2.add(jSummaryPanel, BorderLayout.CENTER); } public static String getDescription() { return "Fertig"; } public static String getStep() { return "id-defense-finish"; } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this * method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jInfoScrollPane = new javax.swing.JScrollPane(); jInfoTextPane = new javax.swing.JTextPane(); jSummaryPanel = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jSaveTargets = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jFineTargets = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jDangerousTargets = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); jUsedSupports = new javax.swing.JLabel(); jXCollapsiblePane1 = new org.jdesktop.swingx.JXCollapsiblePane(); jLabel1 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jResultScrollPane = new javax.swing.JScrollPane(); jxResultsTable = new org.jdesktop.swingx.JXTable(); jPanel3 = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); jPanel4 = new javax.swing.JPanel(); jToggleButton1 = new javax.swing.JToggleButton(); jXCollapsiblePane2 = new org.jdesktop.swingx.JXCollapsiblePane(); jToggleButton2 = new javax.swing.JToggleButton(); jInfoScrollPane.setMinimumSize(new java.awt.Dimension(19, 180)); jInfoScrollPane.setPreferredSize(new java.awt.Dimension(19, 180)); jInfoTextPane.setContentType("text/html"); jInfoTextPane.setEditable(false); jInfoTextPane.setText("<html>Du befindest dich im <b>Angriffsmodus</b>. Hier kannst du die Herkunftsdörfer auswählen, die für Angriffe verwendet werden dürfen. Hierfür hast die folgenden Möglichkeiten:\n<ul>\n<li>Einfügen von Dorfkoordinaten aus der Zwischenablage per STRG+V</li>\n<li>Einfügen der Herkunftsdörfer aus der Gruppenübersicht</li>\n<li>Einfügen der Herkunftsdörfer aus dem SOS-Analyzer</li>\n<li>Einfügen der Herkunftsdörfer aus Berichten</li>\n<li>Einfügen aus der Auswahlübersicht</li>\n<li>Manuelle Eingabe</li>\n</ul>\n</html>\n"); jInfoScrollPane.setViewportView(jInfoTextPane); jSummaryPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Zusammenfassung")); jSummaryPanel.setLayout(new java.awt.GridBagLayout()); jLabel2.setText("Sichere Ziele"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jLabel2, gridBagConstraints); jSaveTargets.setText("0"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jSaveTargets, gridBagConstraints); jLabel4.setText("Gefährdete Ziele"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jLabel4, gridBagConstraints); jFineTargets.setText("0"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jFineTargets, gridBagConstraints); jLabel6.setText("Unsichere Ziele"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jLabel6, gridBagConstraints); jDangerousTargets.setText("0"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jDangerousTargets, gridBagConstraints); jLabel8.setText("Verwendete Unterstützungen"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jLabel8, gridBagConstraints); jUsedSupports.setText("0"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jSummaryPanel.add(jUsedSupports, gridBagConstraints); setLayout(new java.awt.GridBagLayout()); jXCollapsiblePane1.setCollapsed(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; add(jXCollapsiblePane1, gridBagConstraints); jLabel1.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel1.setText("Informationen einblenden"); jLabel1.setToolTipText("Blendet Informationen zu dieser Ansicht und zu den Datenquellen ein/aus"); jLabel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true)); jLabel1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { fireHideInfoEvent(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; add(jLabel1, gridBagConstraints); jPanel2.setLayout(new java.awt.GridBagLayout()); jResultScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Berechnete Unterstützungen")); jxResultsTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jResultScrollPane.setViewportView(jxResultsTable); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanel2.add(jResultScrollPane, gridBagConstraints); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Abschließende Aktionen")); jPanel3.setLayout(new java.awt.GridBagLayout()); jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); jLabel3.setText("<html><b>Keine weiteren Aktionen notwendig.<br/>Die berechneten Unterstützungen sind nun im SOS-Analyzer verfügbar.<br/>\nFehlende Truppen können im SOS-Analyzer über die Funktion \"Unterstützungsanfrage stellen\" beim Stamm angefordert werden.</b></html>"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10); jPanel3.add(jLabel3, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanel2.add(jPanel3, gridBagConstraints); jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel4.setMinimumSize(new java.awt.Dimension(100, 100)); jPanel4.setPreferredSize(new java.awt.Dimension(100, 100)); jPanel4.setLayout(new java.awt.BorderLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(12, 5, 5, 5); jPanel2.add(jPanel4, gridBagConstraints); jToggleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/search.png"))); // NOI18N jToggleButton1.setToolTipText("Informationskarte vergrößern"); jToggleButton1.setMaximumSize(new java.awt.Dimension(100, 23)); jToggleButton1.setMinimumSize(new java.awt.Dimension(100, 23)); jToggleButton1.setPreferredSize(new java.awt.Dimension(100, 23)); jToggleButton1.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { fireChangeViewEvent(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; jPanel2.add(jToggleButton1, gridBagConstraints); jXCollapsiblePane2.setCollapsed(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jPanel2.add(jXCollapsiblePane2, gridBagConstraints); jToggleButton2.setFont(new java.awt.Font("Tahoma", 0, 9)); // NOI18N jToggleButton2.setText("Zusammenfassung anzeigen"); jToggleButton2.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { fireShowHideSummaryEvent(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 2; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanel2.add(jToggleButton2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(jPanel2, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents private void fireHideInfoEvent(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fireHideInfoEvent if (jXCollapsiblePane1.isCollapsed()) { jXCollapsiblePane1.setCollapsed(false); jLabel1.setText("Informationen ausblenden"); } else { jXCollapsiblePane1.setCollapsed(true); jLabel1.setText("Informationen einblenden"); } }//GEN-LAST:event_fireHideInfoEvent private void fireChangeViewEvent(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_fireChangeViewEvent if (jToggleButton1.isSelected()) { overviewPanel.setOptimalSize(2); jResultScrollPane.setViewportView(overviewPanel); jPanel4.remove(overviewPanel); } else { jResultScrollPane.setViewportView(jxResultsTable); jPanel4.add(overviewPanel, BorderLayout.CENTER); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { jPanel4.updateUI(); } }); } }//GEN-LAST:event_fireChangeViewEvent private void fireShowHideSummaryEvent(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_fireShowHideSummaryEvent jXCollapsiblePane2.setCollapsed(!jToggleButton2.isSelected()); }//GEN-LAST:event_fireShowHideSummaryEvent private DEPResultTableModel getModel() { return TableHelper.getTableModel(jxResultsTable); } public void update() { DefenseInformation[] results = DefenseAnalysePanel.getSingleton().getAllElements(); int saveTargets = 0; int fineTargets = 0; int dangerousTargets = 0; int usedSupports = 0; int[] defenseInfo = DefenseAnalysePanel.getSingleton().getDefenseInfo(); DEPResultTableModel model = getModel(); model.clear(); overviewPanel.reset(); for (DefenseInformation info : results) { model.addRow(info); if (info.getSupports().length == info.getNeededSupports()) { saveTargets++; info.setDefenseStatus(DefenseInformation.DEFENSE_STATUS.SAVE); } else if (info.getSupports().length >= ((double) info.getNeededSupports()) / 2) { fineTargets++; info.setDefenseStatus(DefenseInformation.DEFENSE_STATUS.FINE); } else { dangerousTargets++; info.setDefenseStatus(DefenseInformation.DEFENSE_STATUS.DANGEROUS); } float percentFilled = 100f * ((float) info.getSupports().length / (float) info.getNeededSupports()); overviewPanel.addVillage(info.getTarget(), ColorGradientHelper.getGradientColor(percentFilled, Color.RED, Color.lightGray)); usedSupports += info.getSupports().length; } model.fireTableDataChanged(); overviewPanel.repaint(); List<SupportSourceElement> elements = DefenseSourcePanel.getSingleton().getAllElements(); int availableSupports = 0; for (SupportSourceElement element : elements) { availableSupports += element.getSupports(); } jUsedSupports.setText(usedSupports + "/" + Integer.toString(availableSupports)); jSaveTargets.setText(Integer.toString(saveTargets) + "/" + Integer.toString(defenseInfo[0])); jFineTargets.setText(Integer.toString(fineTargets) + "/" + Integer.toString(defenseInfo[0])); jDangerousTargets.setText(Integer.toString(dangerousTargets) + "/" + Integer.toString(defenseInfo[0])); DSWorkbenchSOSRequestAnalyzer.getSingleton().updateExternally(); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jDangerousTargets; private javax.swing.JLabel jFineTargets; private javax.swing.JScrollPane jInfoScrollPane; private javax.swing.JTextPane jInfoTextPane; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel8; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JScrollPane jResultScrollPane; private javax.swing.JLabel jSaveTargets; private javax.swing.JPanel jSummaryPanel; private javax.swing.JToggleButton jToggleButton1; private javax.swing.JToggleButton jToggleButton2; private javax.swing.JLabel jUsedSupports; private org.jdesktop.swingx.JXCollapsiblePane jXCollapsiblePane1; private org.jdesktop.swingx.JXCollapsiblePane jXCollapsiblePane2; private org.jdesktop.swingx.JXTable jxResultsTable; // End of variables declaration//GEN-END:variables @Override public WizardPanelNavResult allowNext(String string, Map map, Wizard wizard) { return WizardPanelNavResult.PROCEED; } @Override public WizardPanelNavResult allowBack(String string, Map map, Wizard wizard) { return WizardPanelNavResult.PROCEED; } @Override public WizardPanelNavResult allowFinish(String string, Map map, Wizard wizard) { return WizardPanelNavResult.PROCEED; } }