Files
DemonEditor/main/ui/satellites_dialog.py

104 lines
3.6 KiB
Python
Raw Normal View History

2017-10-26 01:23:05 +03:00
from main.commons import run_task
2017-10-20 14:45:51 +03:00
from main.eparser import get_satellites, write_satellites, Satellite, Transponder
from . import Gtk, Gdk
2017-10-14 13:23:34 +03:00
def show_satellites_dialog(transient, data_path):
2017-10-30 16:20:19 +03:00
dialog = SatellitesDialog(transient, data_path)
2017-10-14 13:23:34 +03:00
dialog.run()
dialog.destroy()
2017-10-30 16:20:19 +03:00
class SatellitesDialog:
__slots__ = ["_dialog", "_data_path", "_stores"]
def __init__(self, transient, data_path):
self._data_path = data_path
handlers = {"on_satellites_list_load": self.on_satellites_list_load,
"on_remove": self.on_remove,
"on_save": self.on_save,
"on_popup_menu": self.on_popup_menu,
"on_edited": self.on_edited}
builder = Gtk.Builder()
builder.add_from_file("./ui/satellites_dialog.glade")
builder.connect_signals(handlers)
self._dialog = builder.get_object("satellites_editor_dialog")
self._dialog.set_transient_for(transient)
self._stores = {3: builder.get_object("pol_store"),
4: builder.get_object("fec_store"),
5: builder.get_object("system_store"),
6: builder.get_object("mod_store")}
def run(self):
self._dialog.run()
def destroy(self):
self._dialog.destroy()
@run_task
def on_satellites_list_load(self, model):
""" Load satellites data into model """
satellites = get_satellites(self._data_path)
model.clear()
aggr = [None for x in range(9)]
for name, flags, pos, transponders in satellites:
parent = model.append(None, [name, *aggr, flags, pos])
for transponder in transponders:
model.append(parent, ["Transponder:", *transponder, None, None])
def on_edited(self, view, path, value):
path, focus_column = view.get_cursor()
column_index = view.get_columns().index(focus_column)
model = view.get_model()
if column_index > 2:
# value type is Gtk.TreeIter
new_value = self._stores[column_index].get_value(value, 0)
# model[path][column_index] = new_value
else:
model[path][column_index] = value
@staticmethod
def on_remove(view):
selection = view.get_selection()
model, paths = selection.get_selected_rows()
itrs = [model.get_iter(path) for path in paths]
for itr in itrs:
model.remove(itr)
@run_task
def on_save(self, view):
model = view.get_model()
satellites = []
model.foreach(self.parse_data, satellites)
write_satellites(satellites, self._data_path + "tmp/") # temporary!!!
@staticmethod
def parse_data(model, path, itr, sats):
if model.iter_has_child(itr):
num_of_children = model.iter_n_children(itr)
transponders = []
num_columns = model.get_n_columns()
for num in range(num_of_children):
transponder_itr = model.iter_nth_child(itr, num)
transponder = model.get(transponder_itr, *[item for item in range(num_columns)])
transponders.append(Transponder(*transponder[1:-2]))
sat = model.get(itr, *[item for item in range(num_columns)])
satellite = Satellite(sat[0], sat[-2], sat[-1], transponders)
sats.append(satellite)
@staticmethod
def on_popup_menu(menu, event):
if event.get_event_type() == Gdk.EventType.BUTTON_PRESS and event.button == Gdk.BUTTON_SECONDARY:
menu.popup(None, None, None, None, event.button, event.time)
2017-10-20 14:45:51 +03:00
2017-10-14 12:24:59 +03:00
if __name__ == "__main__":
pass