def generate_model(self) -> Tuple[QStandardItemModel, QModelIndex]:
"""Generate a Qt Model based on the project structure."""
model = QStandardItemModel()
root = model.invisibleRootItem()
# TODO: Add these icon resources to library or something so they are not loaded every time
dgs_ico = QIcon('ui/assets/DGSIcon.xpm')
flt_ico = QIcon('ui/assets/flight_icon.png')
prj_header = QStandardItem(dgs_ico, "{name}: {path}".format(name=self.name, path=self.projectdir))
prj_header.setEditable(False)
fli_header = QStandardItem(flt_ico, "Flights")
fli_header.setEditable(False)
# TODO: Add a human readable identifier to flights
first_flight = None
for uid, flight in self.flights.items():
fli_item = QStandardItem(flt_ico, "Flight: {}".format(flight.name))
if first_flight is None:
first_flight = fli_item
fli_item.setToolTip("UUID: {}".format(uid))
fli_item.setEditable(False)
fli_item.setData(flight, QtCore.Qt.UserRole)
gps_path, gps_uid = flight.gps_file
gps = QStandardItem("GPS: {}".format(gps_uid))
gps.setToolTip("File Path: {}".format(gps_path))
gps.setEditable(False)
gps.setData(gps_uid) # For future use
grav_path, grav_uid = flight.gravity_file
if grav_path is not None:
_, grav_fname = os.path.split(grav_path)
else:
grav_fname = '<None>'
grav = QStandardItem("Gravity: {}".format(grav_fname))
grav.setToolTip("File Path: {}".format(grav_path))
grav.setEditable(False)
grav.setData(grav_uid) # For future use
fli_item.appendRow(gps)
fli_item.appendRow(grav)
for line in flight:
line_item = QStandardItem("Line {}:{}".format(line.start, line.end))
line_item.setEditable(False)
fli_item.appendRow(line_item)
fli_header.appendRow(fli_item)
prj_header.appendRow(fli_header)
root.appendRow(prj_header)
self.log.debug("Tree Model generated")
first_index = model.indexFromItem(first_flight)
return model, first_index
评论列表
文章目录