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(*_^