示例#1
0
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)
示例#2
0
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)
示例#3
0
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)