Lephisto/utils/resedit/space.py
2013-04-13 16:48:36 +01:00

135 lines
3.7 KiB
Python

#!/usr/bin/env python
try:
import gtk,gtk.glade
import gobject
except:
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 data
class space:
def __init__(self):
self.glade = "space.glade"
self.systemsXML = "../../dat/ssys.xml"
self.planetsXML = "../../dat/planet.xml"
self.loadSystems(self.systemsXML)
self.loadPlanets(self.planetsXML)
def loadSystems(self, xmlfile):
self.systems = data.load(xmlfile, "ssys", True, ["jumps","fleets","planets"])
def saveSystems(self, xmlfile):
data.save("ssys.xml", self.systems, "Systems", "ssys", True,
{ "jumps":"jump", "fleets":"fleet", "planets":"planet" })
def loadPlanets(self, xmlfile):
self.planets = data.load(xmlfile, "planet", True, ["commodities"])
def savePlanets(self, xmlfile):
data.save("planet.xml", self.planets, "Planets", "planet", True,
{ "commodities":"commodity" })
def window(self):
"""
create the window
"""
# --------------- SYSTEMS --------------------
self.swtree = gtk.glade.XML(self.glade, "winSystems")
# Hook events and stuff.
self.__swidget("winSystems").connect("destroy", self.__done)
self.__swidget("treSystems").connect("row-activated", self.__update)
# Buttons.
self.__swidget("butDone").connect("clicked", self.__done)
self.__swidget("butSave").connect("clicked", self.saveSystems)
# Populate the tree.
self.tree_systems = gtk.TreeStore(str)
for system in self.systems: # Load the planets.
treenode = self.tree_systems.append(None, [system])
for planet in self.systems[system]['planets']:
self.tree_systems.append(treenode, [planet])
col = gtk.TreeViewColumn('Systems')
cell = gtk.CellRendererText()
self.__swidget("treSystems").append_column(col)
col.pack_start(cell, True)
col.add_attribute(cell, 'text', 0)
self.__swidget("treSystems").set_model(self.tree_systems)
# Display the window and such.
self.__swidget("winSystems").show_all()
# ---------------- PLANETS --------------------
# ---------------------------------------------
gtk.main()
def __swidget(self,wgtname):
"""
get a widget from the winSystems
"""
return self.swtree.get_widget(wgtname)
def __update(self, wgt=None, foo=None, bar=None):
"""
Update the window
"""
# Important thingies.
tree = self.__swidget("treSystems")
model = tree.get_model()
# Get system.
sel = model.iter_nth_child(None, foo[0])
sys_name = model.get_value( sel, 0 )
system = self.systems[sys_name]
# Load it all.
dic = {
"inpName":sys_name,
"spiInterference":system["general"]["interference"],
"spiAsteroids":system["general"]["asteroids"],
"spiStars":system["general"]["stars"],
"labPos":"%s,%s" % (system["pos"]["x"],system["pos"]["y"])
}
for key, value in dic.items():
self.__swidget(key).set_text(value)
# Load jumps.
jumps = gtk.ListStore(str)
for jump in system["jumps"]: # Load the planets.
treenode = jumps.append([jump])
col = gtk.TreeViewColumn('Jumps')
cell = gtk.CellRendererText()
wgt = self.__swidget("treJumps")
if wgt.get_column(0):
wgt.remove_column( wgt.get_column(0) )
wgt.append_column(col)
col.pack_start(cell, True)
col.add_attribute(cell, 'text', 0)
wgt.set_model(jumps)
def __done(self, widget=None, data=None):
"""
Window is done
"""
gtk.main_quit()
def debug(self):
print "SYSTEMS LOADED:"
print self.systems
print
print
print "PLANETS LOADED:"
print self.planets