class EditController(): def __init__(self, view): self.view = view self.operation_stack = OperationStack() self._edit = Edit() self.fill_controller = FillController(self.view) self.counter = 0 def edit_points(self): items = self.view.routes.selectedItems() route = ROUTE_POOL[self.view.routes.item(items[0].row(), 0).text()] points = self.view.points.selectedItems() if not points: return changed_points = self._edit.execute({"route": route, "points": points}) if changed_points: for point in changed_points: self.operation_stack.push({ "Edit": { "point": [ point.get('title'), point.get('row'), point.get('col'), point.get('value'), point.get('point') ] } }) self.fill_controller.fill_info(route.length, route.polyline) self.fill_controller.construct_plot(route)
class RemoveController(): def __init__(self, view): self.view = view self.fill_controller = FillController(self.view) self._remove = Remove() self.operation_stack = OperationStack() def remove_route(self): items = self.view.routes.selectedItems() if len(items) == 0: QtWidgets.QMessageBox.warning(None, "Warning", "Routes was not selected!", buttons=QtWidgets.QMessageBox.Ok) return route = self.view.routes.item(items[0].row(), 0).text() deleted_route = self._remove.execute(route, "route") if isinstance(deleted_route, RouteGPX): self.operation_stack.push({"Remove": {"GPX": route}}) elif isinstance(deleted_route, RoutePolyline): self.operation_stack.push({"Remove": {"Polyline": route}}) self.view.routes.removeRow(items[0].row()) while self.view.info.rowCount() != 0: self.view.info.removeRow(0) while self.view.points.rowCount() != 0: self.view.points.removeRow(0) if not ROUTE_POOL: self.view.delete_route.setEnabled(False) self.view.delete_point.setEnabled(False) def remove_point(self): items = self.view.routes.selectedItems() route = ROUTE_POOL[self.view.routes.item(items[0].row(), 0).text()] print("remove_point", items) items = self.view.points.selectedItems() for i in items: self.view.stack.push({ "Remove": { "Point": [route.title, i.row(), route.points[i.row()]] } }) self._remove.execute({"route": route, "items": items}, "point") self.fill_controller.fill_info(route.length, route.polyline) for i in items: self.view.points.removeRow(i.row()) if len(route.points) == 0: self.view.delete_point.setEnabled(False)
class ImportController(): def __init__(self, view): self.fill_controller = FillController(view) self.view = view self.operation_stack = OperationStack() self._import_gpx = ImportGPX() self._import_polyline = ImportPolyline() def import_gpx(self): self.view.statusbar.showMessage("choose file") file = QtWidgets.QFileDialog.getOpenFileName(parent=self.view, caption="Open file...", filter="*.gpx") if file == ('', ''): QtWidgets.QMessageBox.warning(None, "Warning", "File was not selected!", buttons=QtWidgets.QMessageBox.Ok) else: route = self._import_gpx.execute(file[0]) ROUTE_POOL.update({route.title: route}) if route: self.operation_stack.push( {"ImportGPX": { "import": route.title }}) self.view.statusbar.showMessage( "The route from {0} was loaded.".format(file[0])) self.fill_controller.fill_route(route) else: QtWidgets.QMessageBox.critical( None, "Error!", "Error!", defaultButton=QtWidgets.QMessageBox.Ok) #print('import_gpx_controller', ROUTE_POOL) def import_polyline(self): self.view.statusbar.showMessage("Enter polyline.") polyline, status = QtWidgets.QInputDialog.getText( self.view, "Input polyline.", "", text="soe~Hovqu@dCrk@xZpR~VpOfwBmtG") if status: route = self._import_polyline.execute(polyline) print("polyline_route", route.title) ROUTE_POOL.update({route.title: route}) self.view.stack.push({"ImportPolyline": {"import": route.title}}) self.view.statusbar.showMessage( "The polyline {0} with title {1} was loaded.".format( polyline, route.title)) self.fill_controller.fill_route(route) else: QtWidgets.QMessageBox.warning(None, "Warning", "Polyline enter error!", buttons=QtWidgets.QMessageBox.Ok) print('import_polyline_controller', ROUTE_POOL)