Skip to content

Commit d4f7ee3

Browse files
committed
Right-click menu for editing planetary events, and loading/saving them
1 parent 1a1f336 commit d4f7ee3

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

Diff for: MekHQ/src/mekhq/campaign/Campaign.java

+59
Original file line numberDiff line numberDiff line change
@@ -3351,6 +3351,26 @@ public void writeToXml(PrintWriter pw1) {
33513351
}
33523352
retirementDefectionTracker.writeToXml(pw1, 1);
33533353
}
3354+
3355+
// Customised planetary events
3356+
pw1.println("\t<customPlanetaryEvents>");
3357+
for(Planet p : Planets.getInstance().getPlanets().values()) {
3358+
List<Planet.PlanetaryEvent> customEvents = new ArrayList<>();
3359+
for(Planet.PlanetaryEvent event : p.getEvents()) {
3360+
if(event.custom) {
3361+
customEvents.add(event);
3362+
}
3363+
}
3364+
if(!customEvents.isEmpty()) {
3365+
pw1.println("\t\t<planet><id>" + p.getId() + "</id>");
3366+
for(Planet.PlanetaryEvent event : customEvents) {
3367+
Planets.getInstance().writePlanetaryEvent(pw1, event);
3368+
pw1.println();
3369+
}
3370+
pw1.println("\t\t</planet>");
3371+
}
3372+
}
3373+
pw1.println("\t</customPlanetaryEvents>");
33543374

33553375
writeCustoms(pw1);
33563376
// Okay, we're done.
@@ -3643,6 +3663,8 @@ else if (xn.equalsIgnoreCase("info")) {
36433663
processLanceNodes(retVal, wn);
36443664
} else if (xn.equalsIgnoreCase("retirementDefectionTracker")) {
36453665
retVal.retirementDefectionTracker = RetirementDefectionTracker.generateInstanceFromXML(wn, retVal);
3666+
} else if (xn.equalsIgnoreCase("customPlanetaryEvents")) {
3667+
updatePlanetaryEventsFromXML(wn);
36463668
}
36473669

36483670
} else {
@@ -4060,6 +4082,43 @@ else if (xn.equalsIgnoreCase("info")) {
40604082
return retVal;
40614083
}
40624084

4085+
private static void updatePlanetaryEventsFromXML(Node wn) {
4086+
Planets.reload(true);
4087+
NodeList wList = wn.getChildNodes();
4088+
for (int x = 0; x < wList.getLength(); x++) {
4089+
Node wn2 = wList.item(x);
4090+
4091+
// If it's not an element node, we ignore it.
4092+
if (wn2.getNodeType() != Node.ELEMENT_NODE) {
4093+
continue;
4094+
}
4095+
4096+
if (wn2.getNodeName().equalsIgnoreCase("planet")) {
4097+
NodeList planetNodes = wn2.getChildNodes();
4098+
String planetId = null;
4099+
List<Planet.PlanetaryEvent> events = new ArrayList<>();
4100+
for(int n = 0; n < planetNodes.getLength(); ++ n) {
4101+
Node planetNode = planetNodes.item(n);
4102+
if(planetNode.getNodeType() != Node.ELEMENT_NODE) {
4103+
continue;
4104+
}
4105+
if(planetNode.getNodeName().equalsIgnoreCase("id")) {
4106+
planetId = planetNode.getTextContent();
4107+
} else if(planetNode.getNodeName().equalsIgnoreCase("event")) {
4108+
Planet.PlanetaryEvent event = Planets.getInstance().readPlanetaryEvent(planetNode);
4109+
if(null != event) {
4110+
event.custom = true;
4111+
events.add(event);
4112+
}
4113+
}
4114+
}
4115+
if(null != planetId) {
4116+
Planets.getInstance().updatePlanetaryEvents(planetId, events, true);
4117+
}
4118+
}
4119+
}
4120+
}
4121+
40634122
private static void fixIdReferences(Campaign retVal) {
40644123
// set up translation hashes
40654124
Hashtable<Integer, UUID> uHash = new Hashtable<Integer, UUID>();

Diff for: MekHQ/src/mekhq/gui/InterstellarMapPanel.java

+26
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.awt.geom.Arc2D;
2121
import java.awt.geom.Line2D;
2222
import java.util.ArrayList;
23+
import java.util.List;
2324
import java.util.Set;
2425

2526
import javax.swing.BorderFactory;
@@ -33,6 +34,8 @@
3334
import mekhq.campaign.JumpPath;
3435
import mekhq.campaign.universe.Faction;
3536
import mekhq.campaign.universe.Planet;
37+
import mekhq.campaign.universe.Planets;
38+
import mekhq.gui.dialog.NewPlanetaryEventDialog;
3639

3740

3841
/**
@@ -184,6 +187,18 @@ public void actionPerformed(ActionEvent ae) {
184187
});
185188
}
186189
menuGM.add(item);
190+
item = new JMenuItem("Edit planetary events");
191+
item.setEnabled(selectedPlanet != null && campaign.isGM());
192+
if (selectedPlanet != null) {
193+
item.setText("Edit planetary events for " + selectedPlanet.getPrintableName(new DateTime(campaign.getCalendar())));
194+
item.addActionListener(new ActionListener() {
195+
@Override
196+
public void actionPerformed(ActionEvent ae) {
197+
openPlanetEventEditor(selectedPlanet);
198+
}
199+
});
200+
}
201+
menuGM.add(item);
187202
popup.add(menuGM);
188203
popup.show(e.getComponent(), e.getX() + 10, e.getY() + 10);
189204
}
@@ -495,6 +510,17 @@ private void changeSelectedPlanet(Planet p) {
495510
hqview.refreshPlanetView();
496511
}
497512

513+
private void openPlanetEventEditor(Planet p) {
514+
NewPlanetaryEventDialog editor = new NewPlanetaryEventDialog(null, campaign, selectedPlanet);
515+
editor.setVisible(true);
516+
List<Planet.PlanetaryEvent> result = editor.getChangedEvents();
517+
if((null != result) && !result.isEmpty()) {
518+
Planets.getInstance().updatePlanetaryEvents(p.getId(), result, true);
519+
repaint();
520+
hqview.refreshPlanetView();
521+
}
522+
523+
}
498524
/**
499525
* All configuration behaviour of InterStellarMap are saved here.
500526
*

0 commit comments

Comments
 (0)