From 9c7f862f2c2ba11aafdbc0d75e9352558224e11b Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Tue, 18 Jun 2013 22:21:05 +0100
Subject: [PATCH] [Add] <resedit> You may now add fleets to systems.

---
 utils/resedit/data.pyc    | Bin 3567 -> 0 bytes
 utils/resedit/faction.pyc | Bin 3817 -> 0 bytes
 utils/resedit/fleet.py    |  22 +++++++++++++
 utils/resedit/resedit.py  |  10 ++++--
 utils/resedit/space.glade |  49 +++++++++++++++++++++++++----
 utils/resedit/space.py    |  63 ++++++++++++++++++++++++++++++--------
 utils/resedit/space.pyc   | Bin 21797 -> 0 bytes
 7 files changed, 123 insertions(+), 21 deletions(-)
 delete mode 100644 utils/resedit/data.pyc
 delete mode 100644 utils/resedit/faction.pyc
 create mode 100644 utils/resedit/fleet.py
 delete mode 100644 utils/resedit/space.pyc

diff --git a/utils/resedit/data.pyc b/utils/resedit/data.pyc
deleted file mode 100644
index 20a6c5aee8ef99f8997a695d1aea303d35f79209..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3567
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
Zdq1@w>b<bK9yc?=RORHUxyvWd{sWpHt`h(N

diff --git a/utils/resedit/faction.pyc b/utils/resedit/faction.pyc
deleted file mode 100644
index 950f52a7aff33335ca84ca85a4ecb7179ad831c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3817
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
X(Vv%Xg4#WY(|wXaaJ{KpUd#Ij-`o&&

diff --git a/utils/resedit/fleet.py b/utils/resedit/fleet.py
new file mode 100644
index 0000000..f6f399f
--- /dev/null
+++ b/utils/resedit/fleet.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+
+import data
+
+class Fleets:
+  def __init__(self):
+    self.fleets = {}
+    self.fleetsXML = "../../dat/fleet.xml"
+
+  def loadFleets(self, xmlfile=None):
+    if xmlfile == None:
+      xmlFile = self.fleetsXML
+    self.fleets = data.load(xmlfile, "fleet", True)
+
+  def data(self):
+    return self.fleets
+
+  def debug(self):
+    print "---FACTIONS---"
+    print self.fleets
+    print "--------------"
+
diff --git a/utils/resedit/resedit.py b/utils/resedit/resedit.py
index 059c9b1..a20a128 100755
--- a/utils/resedit/resedit.py
+++ b/utils/resedit/resedit.py
@@ -4,20 +4,24 @@ try:
   import gtk, gtk.glade
   import gobject
 except:
-  print "You do not have python gtk bindings, or you're missin glade libs"
+  print "You do not have python gtk bindings, or you're missing glade libs"
   print "To use Lephisto's resedit you must install them"
   print "http://pygtk.org/"
   raise SystemExit
 
-import space, faction
+import space, faction, fleet
 
 # Load the factions
 factions = faction.Factions()
 factions.loadFactions("../../dat/faction.xml")
 factions.window()
 
+# Load the fleets.
+fleets = fleet.Fleets()
+fleets.loadFleets("../../dat/fleet.xml")
+
 # Load the universe.
-universe = space.Space(factions.data())
+universe = space.Space(factions.data(), fleets.data())
 universe.loadSystems("../../dat/ssys.xml")
 universe.loadPlanets("../../dat/planet.xml")
 universe.window()
diff --git a/utils/resedit/space.glade b/utils/resedit/space.glade
index 9b30dcf..c27ed3d 100644
--- a/utils/resedit/space.glade
+++ b/utils/resedit/space.glade
@@ -406,7 +406,7 @@
                   </widget>
                   <packing>
                     <property name="x">270</property>
-                    <property name="y">460</property>
+                    <property name="y">480</property>
                   </packing>
                 </child>
                 <child>
@@ -421,7 +421,7 @@
                   </widget>
                   <packing>
                     <property name="x">360</property>
-                    <property name="y">460</property>
+                    <property name="y">480</property>
                   </packing>
                 </child>
                 <child>
@@ -441,14 +441,14 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkComboBox" id="comFleet">
-                    <property name="width_request">183</property>
-                    <property name="height_request">20</property>
+                  <widget class="GtkComboBox" id="comFleets">
+                    <property name="width_request">189</property>
+                    <property name="height_request">25</property>
                     <property name="visible">True</property>
                   </widget>
                   <packing>
                     <property name="x">270</property>
-                    <property name="y">425</property>
+                    <property name="y">445</property>
                   </packing>
                 </child>
                 <child>
@@ -473,6 +473,43 @@
                     <property name="y">556</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkLabel" id="label5">
+                    <property name="width_request">72</property>
+                    <property name="height_request">20</property>
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">Fleet</property>
+                  </widget>
+                  <packing>
+                    <property name="x">278</property>
+                    <property name="y">421</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkLabel" id="label6">
+                    <property name="width_request">84</property>
+                    <property name="height_request">23</property>
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">Chance</property>
+                  </widget>
+                  <packing>
+                    <property name="x">430</property>
+                    <property name="y">416</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkSpinButton" id="spiFleets">
+                    <property name="width_request">50</property>
+                    <property name="height_request">20</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="adjustment">0 0 100 1 10 10</property>
+                  </widget>
+                  <packing>
+                    <property name="x">472</property>
+                    <property name="y">445</property>
+                  </packing>
+                </child>
               </widget>
               <packing>
                 <property name="resize">True</property>
diff --git a/utils/resedit/space.py b/utils/resedit/space.py
index da9c403..5f32667 100644
--- a/utils/resedit/space.py
+++ b/utils/resedit/space.py
@@ -21,6 +21,7 @@ class Space:
        self.factions = factions
      if fleets==None:
        self.fleets = {}
+     else:
        self.fleets = fleets
 
   def loadSystems(self, xmlfile):
@@ -92,6 +93,18 @@ class Space:
     area.connect("button-press-event", self.__space_down)
     area.connect("motion-notify-event", self.__space_drag)
 
+    # Factions.
+    wgt = self.__swidget("comFleets")
+    combo = gtk.ListStore(str)
+    combo.append(["None"])
+    for f in self.fleets.keys():
+      node = combo.append([f])
+    cell = gtk.CellRendererText()
+    wgt.pack_start(cell, True)
+    wgt.add_attribute(cell, 'text', 0)
+    wgt.set_model(combo)
+    wgt.set_active(0)
+
     # Display the window and such.
     self.__swidget("winSystems").show_all()
     self.cur_system = ""
@@ -129,6 +142,7 @@ class Space:
     wgt.pack_start(cell, True)
     wgt.add_attribute(cell, 'text', 0)
     wgt.set_model(combo)
+    wgt.set_active(0)
 
     # Factions.
     wgt = self.__pwidget("comFaction")
@@ -140,6 +154,7 @@ class Space:
     wgt.pack_start(cell, True)
     wgt.add_attribute(cell, "text", 0)
     wgt.set_model(combo)
+    wgt.set_active(0)
 
     # ---------------------------------------------
 
@@ -599,6 +614,9 @@ class Space:
     # Draw the frame at the end.
     area.window.draw_rectangle(sys_gc, False, 0, 0, ww-1, wh-1)
 
+  """
+  Add or remove jumps from a star system.
+  """
   def __jump_add(self, wgt=None, event=None):
     if self.space_sel in self.systems.keys() and self.cur_system in self.systems.keys():
       self.systems[self.cur_system]["jumps"].append(self.space_sel)
@@ -611,25 +629,40 @@ class Space:
 
   def __jump_rm(self, wgt=None, event=None):
     if self.space_sel in self.systems.keys() and self.cur_system in self.systems.keys():
-      i = 0
-      for e in self.systems[self.cur_system]["jumps"]:
-        if e == self.space_sel:
-          self.systems[self.cur_system]["jumps"].pop(i)
-        i = i + 1
-      i = 0
-      for e in self.systems[self.space_sel]["jumps"]:
-        if e == self.cur_system:
-          self.systems[self.space_sel]["jumps"].pop(i)
-        i = i + 1
+      self.systems[self.cur_system]["jumps"].remove(self.space_sel)
+      self.systems[self.space_sel]["jumps"].remove(self.cur_system)
       self.__supdate()
       self.__space_draw()
 
+  """
+  Add or remove fleets from a star system.
+  """
+  def __fleet_sel(self):
+    tree = self.__swidget("treFleets")
+    model = tree.get_model()
+    try:
+      iter = tree.get_selection().get_selected()[1]
+    except:
+      return ""
+    return model.get_value(iter, 0)
+
   def __fleet_add(self, wgt=None, event=None):
-    return
+    fleet = self.__swidget("comFleets").get_active_text()
+    value = self.__swidget("spiFleets").get_value_as_int()
+    if fleet != "None" and value > 0:
+      self.systems[self.cur_system]["fleets"][fleet] = str(value)
+      self.__supdate()
 
   def __fleet_rm(self, wgt=None, event=None):
-    reutrn
+    sel = self.__fleet_sel()
+    if sel is "":
+      return
+    del self.systems[self.cur_system]["fleets"][sel]
+    self.__supdate()
 
+  """
+  Create a new star system.
+  """
   def __snew(self, wgt=None, event=None):
     name = "new system"
     gen = { "asteroids":0, "interference":0, "stars":100 }
@@ -639,6 +672,9 @@ class Space:
     self.__create_treSystems()
     self.__selSys(name)
 
+  """
+  Create a new planet.
+  """
   def __pnew(self, wgt=None, event=None):
     name = "new planet"
     gfx = { "space":"none.png" }
@@ -695,6 +731,9 @@ class Space:
     self.__pupdate()
 
   def __pnewFact(self, wgt=None, event=None):
+    if self.cur_planet == "":
+      return
+
     combo = self.__pwidget("comFaction")
     fact = combo.get_active_text()
     planet = self.planets[self.cur_planet]
diff --git a/utils/resedit/space.pyc b/utils/resedit/space.pyc
deleted file mode 100644
index d9ca801a75fc31f1c77824d44fb31251cd293611..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21797
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