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)
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())
def __init__(self, view): self.view = view self.module_manager = ModuleManager() self.operation_stack = OperationStack()
def __init__(self, view): self.fill_controller = FillController(view) self.view = view self.operation_stack = OperationStack() self._import_gpx = ImportGPX() self._import_polyline = ImportPolyline()
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)
def __init__(self, view): self.view = view self.fill_controller = FillController(self.view) self._remove = Remove() self.operation_stack = OperationStack()
def __init__(self, view): self.view = view self.operation_stack = OperationStack() self._edit = Edit() self.fill_controller = FillController(self.view) self.counter = 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)