/**
* @author Dylan Myers <ralgith@gmail.com>
*
*/
package mekhq.gui.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import megamek.common.event.Subscribe;
import mekhq.MekHQ;
import mekhq.campaign.event.ReportEvent;
import mekhq.gui.CampaignGUI;
import mekhq.gui.DailyReportLogPanel;
import mekhq.gui.ReportHyperlinkListener;
public class AdvanceDaysDialog extends JDialog implements ActionListener {
private static final long serialVersionUID = 1L;
private JSpinner spnDays;
private JButton btnStart;
private JLabel lblDays = new JLabel("Days");
private JPanel pnlNumDays;
private DailyReportLogPanel logPanel;
private CampaignGUI gui;
private ReportHyperlinkListener listener;
public AdvanceDaysDialog(Frame owner, CampaignGUI gui, ReportHyperlinkListener listener) {
super(owner, true);
this.gui = gui;
this.listener = listener;
setName("formADD"); // NOI18N
setTitle("Advanced Days Dialog");
getContentPane().setLayout(new java.awt.GridBagLayout());
this.setPreferredSize(new Dimension(500,500));
this.setMinimumSize(new Dimension(500,500));
initComponents();
setLocationRelativeTo(owner);
}
public void initComponents() {
setLayout(new BorderLayout());
pnlNumDays = new JPanel();
spnDays = new JSpinner(new SpinnerNumberModel(7, 1, 365, 1));
((JSpinner.DefaultEditor)spnDays.getEditor()).getTextField().setEditable(true);
pnlNumDays.add(spnDays);
pnlNumDays.add(lblDays);
btnStart = new JButton("Start Advancement");
btnStart.addActionListener(this);
pnlNumDays.add(btnStart);
getContentPane().add(pnlNumDays, BorderLayout.NORTH);
logPanel = new DailyReportLogPanel(listener);
getContentPane().add(logPanel, BorderLayout.CENTER);
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource().equals(btnStart)) {
boolean firstDay = true;
MekHQ.registerHandler(this);
for (int numDays = (int)spnDays.getValue(); numDays > 0; numDays--) {
spnDays.setValue(numDays);
if (gui.getCampaign().checkOverDueLoans()
|| gui.nagShortMaintenance()
|| (gui.getCampaign().getCampaignOptions().getUseAtB())
&& (gui.nagShortDeployments() || gui.nagOutstandingScenarios())) {
break;
}
if (gui.getCampaign().checkRetirementDefections()
|| gui.getCampaign().checkYearlyRetirements()) {
gui.showRetirementDefectionDialog();
break;
}
if(!gui.getCampaign().newDay()) {
break;
}
//String newLogString = logPanel.getLogText();
//newLogString = newLogString.concat(gui.getCampaign().getCurrentReportHTML());
if(firstDay) {
logPanel.refreshLog(gui.getCampaign().getCurrentReportHTML());
firstDay = false;
} else {
logPanel.appendLog(Collections.singletonList("<hr/>")); //$NON-NLS-1$
logPanel.appendLog(gui.getCampaign().fetchAndClearNewReports());
}
}
MekHQ.unregisterHandler(this);
gui.refreshCalendar();
gui.refreshLocation();
gui.initReport();
gui.refreshAllTabs();
}
}
@Subscribe(priority = 1)
public void reportOverride(ReportEvent ev) {
ev.cancel();
}
}