示例#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
文件: main_view.py 项目: vo0xr0c/SI
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        uic.loadUi("editor.ui", self)

        self.import_controller = ImportController(self)
        self.remove_controller = RemoveController(self)
        self.edit_controller = EditController(self)
        self.fill_controller = FillController(self)
        self.undo_redo_controller = UndoRedoController(self)
        self.module_controller = ModuleController(self)

        self.stack = OperationStack()
        self.stack.menu = self

        self.delete_route.setEnabled(False)
        self.delete_point.setEnabled(False)
        self.redo.setEnabled(False)
        self.undo.setEnabled(False)
        self.count_turns.setEnabled(False)
        self.count_slopes.setEnabled(False)
        self.count_desc_asc.setEnabled(False)
        self.call_module.setEnabled(False)

        self.info.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.routes.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

        self.redo.clicked.connect(lambda: self.undo_redo_controller.redo())
        self.undo.clicked.connect(lambda: self.undo_redo_controller.undo())

        self.import_gpx.clicked.connect(
            lambda: self.import_controller.import_gpx())
        self.import_polyline.clicked.connect(
            lambda: self.import_controller.import_polyline())
        self.delete_route.clicked.connect(
            lambda: self.remove_controller.remove_route())
        self.delete_point.clicked.connect(
            lambda: self.remove_controller.remove_point())
        self.count_turns.clicked.connect(
            lambda: self.module_controller.count_turns())
        self.count_slopes.clicked.connect(
            lambda: self.module_controller.count_slopes())
        self.count_desc_asc.clicked.connect(
            lambda: self.module_controller.count_desc_asc())
        self.call_module.clicked.connect(
            lambda: self.module_controller.call_runtime_module())

        self.routes.cellClicked.connect(
            lambda: self.fill_controller.fill_points())
        self.points.cellChanged.connect(
            lambda: self.edit_controller.edit_points())
示例#4
0
 def __init__(self, view):
     self.view = view
     self.module_manager = ModuleManager()
     self.operation_stack = OperationStack()
示例#5
0
 def __init__(self, view):
     self.fill_controller = FillController(view)
     self.view = view
     self.operation_stack = OperationStack()
     self._import_gpx = ImportGPX()
     self._import_polyline = ImportPolyline()
示例#6
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)
示例#7
0
 def __init__(self, view):
     self.view = view
     self.fill_controller = FillController(self.view)
     self._remove = Remove()
     self.operation_stack = OperationStack()
示例#8
0
 def __init__(self, view):
     self.view = view
     self.operation_stack = OperationStack()
     self._edit = Edit()
     self.fill_controller = FillController(self.view)
     self.counter = 0
示例#9
0
class UndoRedoController():
    def __init__(self, view):
        self.view = view
        self.operation_stack = OperationStack()
        self.fill_controller = FillController(self.view)
        self._remove = Remove()
        self._edit = Edit()

    def undo(self):
        global_action = self.operation_stack.pop()
        key = list(global_action.keys())[0]
        action = global_action[key]
        print(self.operation_stack)
        print(global_action)
        print(key)
        print(action)

        if key == "ImportPolyline":
            item = self.view.routes.findItems(action['import'],
                                              Qt.MatchFixedString)[0]
            item.setSelected(True)
            self.view.delete_route.click()

        elif key == "ImportGPX":
            print("view routes", self.view.routes.itemAt(0, 0))
            print('action', action)
            item = self.view.routes.findItems(action['import'],
                                              Qt.MatchFixedString)[0]
            item.setSelected(True)
            self.view.delete_route.click()

        elif key == "Edit":
            self.operation_stack.print()
            self._edit.cancel(action)
            self.fill_controller.fill_points()

        elif key == "Remove":
            self._remove.cancel(action)
            if list(action.keys())[0] == 'Point':
                self.fill_controller.fill_points()
            else:
                self.fill_controller.fill_all_routes()

    def redo(self):
        print("redo starts")
        if len(HISTORY) <= self.view.stack.pointer + 1:
            return

        self.view.stack.pointer += 1
        act = HISTORY[self.view.stack.pointer]
        print('act', act)
        key = list(act.keys())[0]
        sub = act[key]

        if key == "ImportPolyline":
            pass

        elif key == "ImportGPX":
            pass

        elif key == "Edit":
            if list(sub.keys())[0] == "point":
                route = ROUTE_POOL[sub['point'][0]]
                new_val = route.points[sub['point'][1]]
                new_val.update(
                    {field_idx_to_name(sub['point'][2]): sub['point'][3]})
                route.points[sub['point'][1]] = new_val
                route.recount_length()
                route.recount_polyline()
                self.fill_controller.fill_points()
                self.fill_controller.fill_info(route.length, route.polyline)

        elif key == "Remove":
            if list(sub.keys())[0] == "Point":
                route = ROUTE_POOL[sub['Point'][0]]
                route.points.pop(sub['Point'][1])
                route.recount_length()
                route.recount_polyline()
                self.view.points.removeRow(sub['Point'][1])
                self.fill_controller.fill_info(route.length, route.polyline)

            elif list(sub.keys())[0] == "GPX":
                route = sub['GPX']
                items = self.view.routes.findItems(route.title,
                                                   Qt.MatchFixedString)
                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 len(ROUTE_POOL) == 0:
                    self.view.delete_route.setEnabled(False)
            elif list(sub.keys())[0] == "Polyline":
                route = sub['Polyline']
                items = self.view.routes.findItems(route.title,
                                                   Qt.MatchFixedString)
                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 len(ROUTE_POOL) == 0:
                    self.view.delete_route.setEnabled(False)