From 31b1f706e3f25f448b51b23313ffafb31cba1757 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Fri, 19 Apr 2013 18:55:50 +0100
Subject: [PATCH] [Add] resedit: Recursive data loading implemented.

---
 utils/resedit/data.py   |  94 +++++++++++++++++++++++++---------------
 utils/resedit/data.pyc  | Bin 2933 -> 3504 bytes
 utils/resedit/space.py  |   5 ++-
 utils/resedit/space.pyc | Bin 19805 -> 19802 bytes
 4 files changed, 61 insertions(+), 38 deletions(-)

diff --git a/utils/resedit/data.py b/utils/resedit/data.py
index 7703b8c..6633417 100644
--- a/utils/resedit/data.py
+++ b/utils/resedit/data.py
@@ -19,46 +19,59 @@ def load(xmlfile, tag, has_name=True, do_array=None, do_special=None):
     # 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.
-      
-      # Figure out if we need an array or dictionary.
-      if bignode.nodeName in do_array:
-        array = []
-        use_array = True
-      else:
-        section = {}
-        use_array = False
-
-      for node in filter(lambda x: x.nodeType==x.ELEMENT_NODE,
-          bignode.childNodes):
-          
-          # Big ugly hack to use list instead of array.
-          if bignode.nodeName in do_array:
-            use_array = True
-            array.append(node.firstChild.data)
-
-          # Uglier hack for special things.
-          elif do_special != None and bignode.nodeName in do_special.keys():
-            section[node.firstChild.data] = node.attributes[do_special[bignode.nodeName]].value
-
-          # Normal way (but will overwrite lists).
-          else:
-            section[node.nodeName] = node.firstChild.data
-
-      if use_array:
-        mdic[bignode.nodeName] = array
-      else:
-        mdic[bignode.nodeName] = section
-
+    
     # Append the element to the dictionary.
+    for bignode in filter(lambda x: x.nodeType==x.ELEMENT_NODE, xmlNode.childNodes):
+      mdic[bignode.nodeName], size = load_Tag(bignode, do_array, do_special)
+
     dictionary[name] = mdic
 
   dom.unlink()
   return dictionary
 
+def load_Tag(node, do_array=None, do_special=None):
+  i = 0
+
+  # Figure out if we need an array or dic.
+  if node.nodeName in do_array:
+    array = []
+    use_array = True
+  else:
+    section = {}
+    use_array = False
+
+  for child in filter(lambda x: x.nodeType == x.ELEMENT_NODE, node.childNodes):
+    n = 0
+    if node.nodeName not in do_array and \
+        do_special != None and \
+        node.nodeName not in do_special.keys():
+      children, n = load_Tag(child, do_array, do_special)
+
+    # Just slap the children on.
+    if n > 0:
+      section[child.nodeName] = children
+
+    # Big ugly hack to use list instead of array.
+    elif use_array:
+      array.append(child.firstChild.data)
+
+    # Uglier hack for special things.
+    elif do_special != None and node.nodeName in do_special.keys():
+      section[child.firstChild.data] = \
+          child.attributes[do_special[node.nodeName]].value
+
+    # Normal way (but will overwrite lists).
+    else:
+      section[child.nodeName] = child.firstChild.data
+
+    i = i+1
+
+  # Return.
+  if use_array:
+    return array, i
+  else:
+    return section, i
+  
 def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=None):
   """
   do_array is a DICTIONARY, not a list here
@@ -97,8 +110,17 @@ def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=N
       else:
         for key3, value3 in value2.items():
           node2 = xml.createElement(key3)
-          txtnode = xml.createTextNode(str(value3))
-          node2.appendChild(txtnode)
+
+          if isinstance(value3, dict):
+            for key4, value4 in value3.items():
+              node3 = xml.createElement(key4)
+              txtnode = xml.createTextNode(str(value4))
+              node3.appendChild(txtnode)
+              node2.appendChild(node3)
+            else:
+              txtnode = xml.createTextNode(str(value3))
+              node2.appendChild(txtnode)
+
           node.appendChild(node2)
 
       elem.appendChild(node)
diff --git a/utils/resedit/data.pyc b/utils/resedit/data.pyc
index 8b469d5b856e98bc8f5bea076259e5525e632853..e853806fd0e5676ac8fca6675424769a4314d22d 100644
GIT binary patch
delta 1404
zcmYjRU27aw7=F%~-TB(@>_?hxC7LvLprTj`LWyWe+Y3`xGA*Pnsk-it>FjPMW@plF
zWriThmA#Tf@9ZDY8+%m*Z+amJUWgZhcj6xqM7;NX&u*g2oU`+OocHT_&ivE*w%s=V
zF1b&R_cwc({c`mGF0FX`%l75-eF=W@IF`6;A;@WwG$xJ>+_hP}=~>Tq^P*CsQzor-
zKK%{U=i<Ec0I7+q_adlgV&(E0l02U{22vXX6GxJatH=sSETjdb2GSgk3~WoJ4r>NB
z*0Lhh@3K{Na0H0dqKt+T#`n^5)n=}@JlgB_KfKl5No>j-?e&9BcQ;75l!Is#MnkWp
z3i-ztcNT}AsTcW<IHRg&<4~-~vUEkyAd5@OqNS_9BY?g@M&$qls#aiVVtfueK$b&7
zraYn|LK00RlEsNF662&hIz@eOcYh(XbS(RSu`G<AB0Z!z0z*R!(>zj7g_PQZheD4)
zDrZB<9Aq{kJwGaNn8WxxJt>ntsnWG5L7K<-R~{q{kF^d4E{+65bekj1axRL)S#zgJ
zsl`Q}?|_gX0CY(U3xgtqcp7Les{bd<43w9k>l>J-k?mi{7MHLgs031fLKI=Y=^JIg
z=`j?YkawuE@uvFIxP9XS2{CIz8a_N`li#2%VYgf3gMhdLT<?zJz^}1!?!?&HivsO6
z3?9XPoz&{*+)JKcVXrD}9)qhrm>vEC>lazYnL_m>zj~Hq_wI+IzSc#WN?INVk?Oeb
zyszWFOkVNpv_Y6gMVP{orZDAMdaH<{Xo|K`6jj3%E#nn=E?1XjdUs`yiFJmSLrW9v
zh1xckDj!M0c3?2Auio>e`og?eDa+J7)j_JC%(ujIWmvxK3$<k}$#tP7)}zB8G5G;$
z>D2W(-<fO<*%TduZ;mm~sz_X<btDDm<9I_(G8Rv=zNe2hkTo@^bgZF|wX|q~29Y*d
z!?9{eTTG|4h9>hVt!k;oMzQ~!*ivnK*&ueRx9uyh5pC!e>1&Y9>u@Ec^ZYTHJ#_!`
z`aTcJ>TCPHsHnQLZm!ad{8!bs^Tr1ZTNsB?oOGk!6yko^OEi*up9WKu9*)B#nCy=H
zCV6{2WxvInM;l!r;Nxx_B;6f<p0(OOC4l<HdDv!h5p6E%&&7l8=peYHc}7H0*W68W
zgY5AQ^_6>ZNmj%H!Q2!jQIkzkl{HxtHBn-{^c?kvyVP9a9J+&Leq%2B9aSydDRVDX
MQIw83*Qi|h7r;LCg8%>k

delta 939
zcmY*X%}*0i5TAM5ZnxXr?w0aZ3pN6Y6-|hkXkt)EAQ*{ODI_4uq0$xEmKNG2K(ZSW
z;o!$b^R6D`?m_P!Jb3Wp)r%jA2mb=1o=BYON1~gZd2i<Z<~MKV&71VE?zD1b>WAOm
z*%fGgAzCL$>Nj7cFZVhjD2m1(h64qbBD|l=s&D-;S~kHVB$EvHQ9j4h(QD|dFtt36
z@;wgjndpT%;sC(cz*S*i(BW?gV&KQXjexH}Nrl=|SOo|S@H7Zas2H$DW*odIn>(+7
zS(F9~MYUL-Kw$mP@~su`8{q2TTd?O6+<<)q+<Xl_)dEmbpf-T5>>+UDuuo39134{l
z6^1oWQz@6WaVBc=j4?^uXdOg=y$ikxwOdGu{b(zCZ1Vw(Fz8>$0$WtIPEltmDh#g0
z`H`G+*^nF;@8k_}UY=1GV}smP63E)}SgfQg)uNLttUDgR(0pynp{4*#7s_=<ep350
z4S%j$X#z^lZrxJ}uvICqRZ7J1NO>lcks*!4nM=-^6H9EAtA(OLYyBcAKnpFQqKPW$
zq|z6%P{k<iRbim5u+^=c!l6(P`D~F;;zGw29)m6tjifOS^YTX|V;!N7+*2xXYWXKh
zOB=Ngk;-rTB+A>`C7h9uwY>NP@~f5+pFtjLyTf;3XA!8cZRiZ#6A*MjkmMG+0{jks
z*}w*=>jUzm7MEA_3+L$J0g54>w4k$rq*?2PB27^9r|}6l8txkMrT!328IDb=y>#(>
zO6FoC)7+ElhEt(o1lX>vdCtyyIe&tTESH#1v+5z`an<(=b;m2L=KI*&&*~(rjQkSY
zmK#P+y-H?%LVhqtlh{RlO^5_0&=eM?L{^hsX2$O1h{g?uc{eGqn|BP(ZlfWhYRBkb
D?qscb

diff --git a/utils/resedit/space.py b/utils/resedit/space.py
index 84c1212..caa8d94 100644
--- a/utils/resedit/space.py
+++ b/utils/resedit/space.py
@@ -104,7 +104,8 @@ class Space:
     hooks = {
         "butNew":["clicked", self.__pnew],
         "trePlanets":["button-release-event", self.__pupdate],
-        "comSystem":["changed", self.__pnewSys]
+        "comSystem":["changed", self.__pnewSys],
+        "butSave":["clicked", self.savePlanets]
     }
     for key, val in hooks.items():
       self.__pwidget(key).connect(val[0], val[1])
@@ -273,7 +274,7 @@ class Space:
       wgt.pack_start(cell, True)
       wgt.add_attribute(cell, 'text', 0)
     wgt.set_model(combo)
-    self.__genPlanerTree()
+    self.__genPlanetTree()
     i = 0
     for row in combo:
       if row[0] == self.planetTree[self.cur_planet]:
diff --git a/utils/resedit/space.pyc b/utils/resedit/space.pyc
index 484cdbb4623db1a8ceb890a32bcf976c572848dd..e8547abec7da388f4aa500c47c49156e08963dab 100644
GIT binary patch
delta 935
zcmY+BT}YEr7{|}^Ztlxj=~^UhWm9U+uiTm%RJ#1mUBsexl~cE=jGC#llr~J(7epdG
zbrTU4b|WR&K?u5tK(w+?qCit33JEGBt*nc(^StY(o8Nn$kN^LFIPc6wn7Rlm#X^ei
z$MIp+LoJ-+&$V_5l&I7fEDNYvl(A4YYnE6*i&u0O+^b)!>6N_H&cUPlrk-3D$zyR~
zF*WNlvuF}4-*03w4U4K-D4#_&@=VLx@)h2Q5N&30#$q}aRk2V3i|SZpC5uZ8sJ2rb
zaInA%7FQ%%4)PK1K-w*&g}@fJ$LeH^b*vHK^(iI^oIJLCL`w3QsAEqn0cgT@LoL5!
zI3YotyH;r>IFGff7hwR)(yzfFpG|+SfSY{6tX2Tvi;PS#@x_cn05i|CNPxRCU&1S%
zku@Qy#)YY848Lv&h@E{KQzdwUEt_2H5`7vP3B!a3golI)1Wh^WZF(rjblY{IxobNK
zAzqnn1sKQHoH}U3CpkB=CTV+$FfCwJ(n(F2A;=+v!mC>E^Z7g5cOPg72O~W=pF0Jo
z@p0ZU7^R@J6tV2{bsTE&2Yv0qj$ovZ59HsH;01c^{bJ{Xy$)vNEA{V4QMMilBfsPr
z0hmRP(`_83s4$_G@RRTfhnyyS>h!}MbQBIIa?ny_5T1oaegA50aT-i=Q*p0SSY6)s
zE?2fXE*lU&6XpnC1R|1vzbo<S_RQnZcGrsMG_?@E5x(Qn_N(xQU)^yU{)L1~mq7-P
zmDT|~#c7vWC5MdRlFJJ=?%lZ#j30&6DnFZyljJmtXUY!3R{pEZ0R~yJUbG_$f##+z
zPbQXBG{R22R`EJ{jP~URzb`-1qe?xvakBDumJP(@uozpDXh(LJ|M&lrYW!W54EwmY
zx)+k=tW&hUfEQ|7pdSC!%)$aW>&PV#Z0v0AMn~;gc!u|CD^lt9o(+_AgiZy3bM7jv
MbDLo|M%{1!0v{6sdjJ3c

delta 904
zcmZ9IT}YEr7{|}^zPh<NOI@0#bAF*y=hx=fg_dj14-|}P7)1_s(=zj`g&Nbcg$iMo
z&s7G6Mi-eE*+Gbix)Q&FQZ!0Y=o=ym(u~TWb6&mb=J%fSJkS4k&U==JV08#&;<}GA
zrfXa_tALAiUSSYGL=ROejwr*?p$hYA5h`4S)F<F&Rqc5_aV8QskWM*i*ASN{$vYlE
zI=zTXPU@40%S-AhNQ+jiaI#P`aTC(1BrX}LPa!TPaqb~*fdJp9^1a<i?7qY;ZkG()
z!|cGbMxF(G8Y$DI6GF~}Fwkb7Pyy0t|LzHa7Wf|kg`HK2XNV}`HMJT?)G2gP?H1Ud
z90^nifLI;$6K><t;1Re>{|3JoVT``j$VCXn&*4#^p}Qh70K%vxQh<HV0OqolHCNR*
zY_>W_<DrJCMn`LTtHXf>QA@ByHPLf|Y?=*Or|@fx9YSbXte*hS(Gh3TZr6E}YpmlO
zvmA3A&k(%wP!X>JGX}=rVVTGAJ#dnm6LbL6*r2b3W}MTHMKAN|6^>N~od;jZIo3F&
zLq?ga5TEKj<<bqEUHC0=8G3Ox=>kkj=L{tKK|dW%ejvaimK(0J@&`jDtVvC6hL1;6
zTjL<TZkz!4gr(^vzLQ+u$kD{{3-70g3fAv9lU@stFePJjN36|M!vY#Juk7q)S^n^f
z24{79Fwu?dcQQ$IiN*K&It8YxY2W^ISl97hj>&g{>mxaSaBSjM&M>UeoBR7<M|moD
z7ij6Z+)98K_}Zk|R!-rTsRH6?`9UoNd|^?Y^e7T~xM>pm%%>rXZkmmtmTnQj%1)7?
zuD0D8joFrJFySrBiuV+sm!5M*dXSlX6%^yk{D+W$0|i0<^$YQLfj1ncvchigmc+e0
zzk!2AC%}e(iax>y*C;(%+3u)5Ti1>$#r-gkPl_$lRjskW0&P5HU@IMA<7PZoqJdKE
HD0%Y_O(*_^