[Add] Initial code for resource editor.

This commit is contained in:
Allanis 2013-04-13 15:01:41 +01:00
parent 21d25a5585
commit 17e5164ab4
6 changed files with 544 additions and 0 deletions

41
utils/resedit/data.py Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env python
from xml.dom import minidom
def load(xmlfile, tag, has_name=True, do_array=None):
dom = minidom.parse(xmlfile)
xmlNodes = dom.getElementsByTagName(tag)
dictionary = {}
for xmlNode in xmlNodes:
mdic = {}
# Name is stored as a property and not a node.
if(has_name):
name = xmlNode.attributes["name"].value
# Process the nodes.
for bignode in filter(lambda x: x.nodeType==x.ELEMENT_NODE, xmlNode.childNodes):
# Load the nodes.
section = {}
array = []
for node in filter(lambda x: x.nodeType==x.ELEMENT_NODE,
bignode.childNodes):
if bignode.nodeName in do_array: # Big ugly hack to use list instead of array.
array.append(node.firstChild.data)
else: # Normal way (but will overwrite lists).
section[node.nodeName] = node.firstChild.data
if len(array) > 0:
mdic[bignode.nodeName] = array
else:
mdic[bignode.nodeName] = section
# Append the element to the dictionary.
dictionary[name] = mdic
dom.unlink()
return dictionary
def save(xmlfile, basetag, tag, has_name=True):
print "TODO"

BIN
utils/resedit/data.pyc Normal file

Binary file not shown.

11
utils/resedit/resedit.py Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env python
import space
# Load the universe.
universe = space.space()
universe.loadSystems("../../dat/ssys.xml")
universe.loadPlanets("../../dat/planet.xml")
universe.debug()
universe.window()

360
utils/resedit/space.glade Normal file
View File

@ -0,0 +1,360 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.1 on Thu Feb 7 11:50:56 2008 -->
<glade-interface>
<widget class="GtkWindow" id="winSystems">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">Systems</property>
<property name="default_width">600</property>
<property name="default_height">420</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkTreeView" id="treSystems">
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
</widget>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<widget class="GtkLayout" id="layout1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkLabel" id="label1">
<property name="width_request">67</property>
<property name="height_request">31</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Name:</property>
</widget>
<packing>
<property name="x">31</property>
<property name="y">26</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="inpName">
<property name="width_request">134</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="truncate_multiline">True</property>
</widget>
<packing>
<property name="x">95</property>
<property name="y">31</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labPos">
<property name="width_request">65</property>
<property name="height_request">25</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">X,Y</property>
</widget>
<packing>
<property name="x">242</property>
<property name="y">28</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butRepos">
<property name="width_request">75</property>
<property name="height_request">33</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Reposition</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">319</property>
<property name="y">23</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="width_request">103</property>
<property name="height_request">28</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Interference</property>
</widget>
<packing>
<property name="x">19</property>
<property name="y">75</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="width_request">402</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">6</property>
<property name="y">55</property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="spiInterference">
<property name="width_request">74</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">0 0 100 1 10 10</property>
</widget>
<packing>
<property name="x">117</property>
<property name="y">79</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="width_request">75</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Asteroids</property>
</widget>
<packing>
<property name="x">29</property>
<property name="y">114</property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="spiAsteroids">
<property name="width_request">72</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">0 0 100 1 10 10</property>
</widget>
<packing>
<property name="x">119</property>
<property name="y">113</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label4">
<property name="width_request">68</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Stars</property>
</widget>
<packing>
<property name="x">32</property>
<property name="y">144</property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="spiStars">
<property name="width_request">73</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">0 0 100 1 10 10</property>
</widget>
<packing>
<property name="x">120</property>
<property name="y">143</property>
</packing>
</child>
<child>
<widget class="GtkVSeparator" id="vseparator1">
<property name="width_request">20</property>
<property name="height_request">259</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">202</property>
<property name="y">72</property>
</packing>
</child>
<child>
<widget class="GtkDrawingArea" id="draSpace">
<property name="width_request">180</property>
<property name="height_request">171</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">221</property>
<property name="y">88</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator2">
<property name="width_request">204</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">5</property>
<property name="y">169</property>
</packing>
</child>
<child>
<widget class="GtkTreeView" id="treJumps">
<property name="width_request">193</property>
<property name="height_request">86</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
</widget>
<packing>
<property name="x">10</property>
<property name="y">205</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butAddJump">
<property name="width_request">70</property>
<property name="height_request">27</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Add</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">25</property>
<property name="y">298</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butRmJump">
<property name="width_request">70</property>
<property name="height_request">29</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Delete</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">121</property>
<property name="y">298</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label5">
<property name="width_request">126</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Jumps</property>
</widget>
<packing>
<property name="x">44</property>
<property name="y">184</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labSpace">
<property name="width_request">100</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Space</property>
</widget>
<packing>
<property name="x">263</property>
<property name="y">69</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator3">
<property name="width_request">190</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">218</property>
<property name="y">265</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butSave">
<property name="width_request">87</property>
<property name="height_request">38</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Save</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">227</property>
<property name="y">290</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butDone">
<property name="width_request">83</property>
<property name="height_request">41</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Done</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">322</property>
<property name="y">288</property>
</packing>
</child>
</widget>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
</widget>
</child>
<child>
<widget class="GtkStatusbar" id="staBottom">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

132
utils/resedit/space.py Normal file
View File

@ -0,0 +1,132 @@
#!/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):
print "TODO"
def loadPlanets(self, xmlfile):
self.planets = data.load(xmlfile, "planet", True, ["commodities"])
def savePlanets(self, xmlfile):
print "TODO"
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("butDone").connect("clicked", self.__done)
self.__swidget("treSystems").connect("row-activated", self.__update)
# 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

BIN
utils/resedit/space.pyc Normal file

Binary file not shown.