[Add] resedit: Space is drawn, you can move systems around etc.

This commit is contained in:
Allanis 2013-04-13 18:50:11 +01:00
parent 8b27730dc2
commit dc1134d6d7
3 changed files with 255 additions and 59 deletions

View File

@ -2,10 +2,10 @@
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="winSystems">
<property name="width_request">750</property>
<property name="height_request">450</property>
<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">
@ -42,8 +42,8 @@
<property name="label" translatable="yes">Name:</property>
</widget>
<packing>
<property name="x">31</property>
<property name="y">25</property>
<property name="x">114</property>
<property name="y">21</property>
</packing>
</child>
<child>
@ -56,8 +56,8 @@
<property name="truncate_multiline">True</property>
</widget>
<packing>
<property name="x">95</property>
<property name="y">30</property>
<property name="x">184</property>
<property name="y">26</property>
</packing>
</child>
<child>
@ -69,24 +69,8 @@
<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>
<property name="x">371</property>
<property name="y">26</property>
</packing>
</child>
<child>
@ -104,7 +88,7 @@
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="width_request">402</property>
<property name="width_request">525</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>
@ -185,7 +169,7 @@
<child>
<widget class="GtkVSeparator" id="vseparator1">
<property name="width_request">20</property>
<property name="height_request">259</property>
<property name="height_request">322</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>
@ -196,14 +180,14 @@
</child>
<child>
<widget class="GtkDrawingArea" id="draSpace">
<property name="width_request">180</property>
<property name="height_request">171</property>
<property name="width_request">296</property>
<property name="height_request">248</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>
<property name="x">220</property>
<property name="y">97</property>
</packing>
</child>
<child>
@ -229,7 +213,7 @@
</widget>
<packing>
<property name="x">10</property>
<property name="y">181</property>
<property name="y">180</property>
</packing>
</child>
<child>
@ -244,8 +228,8 @@
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">25</property>
<property name="y">300</property>
<property name="x">20</property>
<property name="y">296</property>
</packing>
</child>
<child>
@ -260,8 +244,8 @@
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">121</property>
<property name="y">300</property>
<property name="x">112</property>
<property name="y">295</property>
</packing>
</child>
<child>
@ -273,20 +257,8 @@
<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>
<property name="x">215</property>
<property name="y">70</property>
</packing>
</child>
<child>
@ -301,8 +273,8 @@
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">227</property>
<property name="y">290</property>
<property name="x">14</property>
<property name="y">350</property>
</packing>
</child>
<child>
@ -317,8 +289,97 @@
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">322</property>
<property name="y">290</property>
<property name="x">115</property>
<property name="y">350</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labCurPos">
<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">X,Y</property>
</widget>
<packing>
<property name="x">333</property>
<property name="y">72</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butNew">
<property name="width_request">81</property>
<property name="height_request">37</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">New</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">20</property>
<property name="y">17</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator3">
<property name="width_request">202</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">326</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butZoomIn">
<property name="width_request">35</property>
<property name="height_request">35</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">+</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">300</property>
<property name="y">350</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="butZoomOut">
<property name="width_request">35</property>
<property name="height_request">35</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">-</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="x">345</property>
<property name="y">350</property>
</packing>
</child>
<child>
<widget class="GtkToggleButton" id="butReposition">
<property name="width_request">81</property>
<property name="height_request">37</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">433</property>
<property name="y">18</property>
</packing>
</child>
</widget>

View File

@ -44,11 +44,16 @@ class space:
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)
hooks = {
"winSystems":["destroy",self.__done],
"treSystems":["row-activated", self.__update],
"butDone":["clicked", self.__done],
"butSave":["clicked",self.saveSystems],
"butZoomIn":["clicked", self.__space_zoomin],
"butZoomOut":["clicked", self.__space_zoomout]
}
for key, val in hooks.items():
self.__swidget(key).connect(val[0], val[1])
# Populate the tree.
self.tree_systems = gtk.TreeStore(str)
@ -63,9 +68,22 @@ class space:
col.add_attribute(cell, 'text', 0)
self.__swidget("treSystems").set_model(self.tree_systems)
self.zoom = 1
area = self.__swidget("draSpace")
area.set_events(gtk.gdk.EXPOSURE_MASK
| gtk.gdk.LEAVE_NOTIFY_MASK
| gtk.gdk.BUTTON_PRESS_MASK
| gtk.gdk.POINTER_MOTION_MASK
| gtk.gdk.POINTER_MOTION_HINT_MASK)
area.connect("expose-event", self.__space_draw)
area.connect("button-press-event", self.__space_down)
area.connect("motion-notify-event", self.__space_drag)
# Display the window and such.
self.__swidget("winSystems").show_all()
self.cur_system = ""
self.x = self.y = 0
self.lx = self.ly = 0
# ---------------- PLANETS --------------------
@ -117,12 +135,32 @@ class space:
col.add_attribute(cell, 'text', 0)
wgt.set_model(jumps)
self.__space_draw()
def __store(self):
sys_name = self.__swidget("inpName").get_text()
# Renamed the current system.
if sys_name != self.cur_system:
self.systems[sys_name] = self.systems[self.cur_systems] # Copy it over.
self.systems[sys_name] = self.systems[self.cur_system] # Copy it over.
model = self.__swidget("treSystems").get_model()
# Must rename the node in the treeview.
for i in model:
if i[0] == self.cur_system:
i[0] = sys_name
break
# Update the jump paths.
for key, value in self.systems.items():
i = 0
for jump in value["jumps"]:
if jump == self.cur_system:
self.systems[key]["jumps"].pop(i)
self.systems[key]["Jumps"].append(sys_name)
i = i+1
# Delete the old system and change current to it.
del self.systems[self.cur_system] # Get rid of the old one.
self.cur_system = sys_name # Now use self.cur_system again.
@ -161,6 +199,103 @@ class space:
"""
gtk.main_quit()
def __space_down(self, wgt, event):
if event.button == 1:
x = event.x
y = event.y
# Modify the current position.
if self.__swidget("butReposition").get_active() and self.cur_system != "":
wx, wy, ww, wh = self.__swidget("draSpace").get_allocation()
mx = x - (self.x*self.zoom + ww/2)
my = y - (self.y*self.zoom + wh/2)
system = self.systems[self.cur_system]
system["pos"]["x"] = str(mx)
system["pos"]["y"] = str(-my)
self.__space_draw()
self.__swidget("butReposition").set_active(False)
self.lx = x
self.ly = y
return True
def __space_drag(self, wgt, event):
x = event.x
y = event.y
state = event.state
wx, wy, ww, wh = self.__swidget("draSpace").get_allocation()
mx = x - (self.x*self.zoom + ww/2)
my = y - (self.y*self.zoom + wh/2)
self.__swidget("labCurPos").set_text("%d%d" % (mx, my))
if state & gtk.gdk.BUTTON1_MASK:
xrel = x - self.lx
yrel = y - self.ly
self.x = self.x + xrel/self.zoom
self.y = self.y + yrel/self.zoom
self.lx = x
self.ly = y
self.__space_draw()
return True
def __space_zoomout(self, wgt=None, event=None):
self.zoom = self.zoom/2
if self.zoom < 0.1:
self.zoom = 0.1
self.__space_draw()
def __space_zoomin(self, wgt=None, event=None):
self.zoom = self.zoom*2
if self.zoom > 4:
self.zoom = 4
self.__space_draw()
def __space_draw(self, wgt=None, event=None):
area = self.__swidget("draSpace")
style = area.get_syle()
gc = style.fg_gc[gtk.STATE_NORMAL]
bg_gc = style.bg_gc[gtk.STATE_NORMAL]
wx, wy, ww, wh = area.get_allocation()
cx = self.x*self.zoom + ww/2
cy = sefl.y*self.zoom + wh/2
r = 15
# Cleanup.
area.window.draw_rectangle(bg_gc, True, 0, 0, ww, wh)
area.window.draw_rectangle(gc, False, 0, 0, ww-1, wh-1)
for sys_name, system in self.systems.items():
sx = float(system["pos"]["x"])
sy = -float(system["pos"]["y"])
dx = cx+sx*self.zoom
dy = cy+sy*self.zoom
# Draw jumps.
for jump in system["jumps"]:
jsx = float(self.systems[jump]["pos"]["x"])
jsy = -float(self.systems[jump]["pos"]["y"])
jdx = cx+jsx*self.zoom
jdy = cy+jsy*self.zoom
area.window.draw_line(gc, dx, dy, jdx, jdy)
# Draw circle.
area.window.draw_arc(gc, True, dx-r/2, dy-r/2, r, r, 0, 360*64)
area.window.draw_arc(bg_gc, True, dxr/2+2, dy-r/2+2, r-4, r-4, 0, 360*64)
# Draw name.
layout = area.create_pango_layout(sys_name)
area.window.draw_layout(gc, dx+r/2+2, dy-r/2, layout)
def debug(self):
print "SYSTEMS LOADED:"
print self.systems

Binary file not shown.