diff --git a/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.lfm b/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.lfm index 248b85bfb..b0cd9ce4c 100644 --- a/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.lfm +++ b/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.lfm @@ -2,17 +2,17 @@ object MainForm: TMainForm Left = 513 Height = 566 Top = 157 - Width = 796 + Width = 833 Caption = 'Marker Select & Drag Demo' ClientHeight = 566 - ClientWidth = 796 + ClientWidth = 833 LCLVersion = '4.99.0.0' OnCreate = FormCreate object MapView: TMapView Left = 0 - Height = 457 + Height = 442 Top = 0 - Width = 796 + Width = 833 Align = alClient DownloadEngine = MapView.BuiltInDLE DrawingEngine = MapView.BuiltInDE @@ -25,7 +25,7 @@ object MainForm: TMainForm object Bevel1: TBevel AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter - Left = 395 + Left = 413 Height = 50 Top = 108 Width = 6 @@ -33,14 +33,14 @@ object MainForm: TMainForm end object Panel1: TPanel Left = 0 - Height = 109 - Top = 457 - Width = 796 + Height = 124 + Top = 442 + Width = 833 Align = alBottom AutoSize = True BevelOuter = bvNone - ClientHeight = 109 - ClientWidth = 796 + ClientHeight = 124 + ClientWidth = 833 TabOrder = 1 object cgPointTypes: TCheckGroup AnchorSideLeft.Control = Panel1 @@ -51,6 +51,7 @@ object MainForm: TMainForm Width = 363 AutoFill = True AutoSize = True + BorderSpacing.Right = 8 BorderSpacing.Around = 8 Caption = 'Allowed point types' ChildSizing.LeftRightSpacing = 12 @@ -111,16 +112,17 @@ object MainForm: TMainForm object rgClickMode: TRadioGroup AnchorSideLeft.Control = cgPointTypes AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = cgPointTypes + AnchorSideTop.Control = Panel1 AnchorSideBottom.Control = cbMultiSelect AnchorSideBottom.Side = asrBottom - Left = 379 - Height = 95 + Left = 387 + Height = 108 Top = 8 Width = 166 - Anchors = [akTop, akLeft, akBottom] AutoFill = True AutoSize = True + BorderSpacing.Right = 8 + BorderSpacing.Around = 8 Caption = 'Click mode' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 @@ -130,10 +132,11 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 75 + ClientHeight = 88 ClientWidth = 162 ItemIndex = 0 Items.Strings = ( + 'Create new point' 'Add point to selection' 'Add shape to selection' 'Toggle selected point' @@ -142,29 +145,26 @@ object MainForm: TMainForm OnClick = rgClickModeClick end object cbMultiSelect: TCheckBox - AnchorSideLeft.Control = Label2 - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = Label1 - AnchorSideTop.Side = asrCenter - Left = 219 + AnchorSideLeft.Control = rgNewPointType + AnchorSideTop.Control = rgNewPointType + AnchorSideTop.Side = asrBottom + Left = 569 Height = 19 - Top = 84 + Top = 83 Width = 77 - BorderSpacing.Left = 24 Caption = 'MultiSelect' TabOrder = 2 OnChange = cbMultiSelectChange end object btnDeleteSelection: TButton - AnchorSideLeft.Control = rgClickMode + AnchorSideLeft.Control = rgNewPointType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rgClickMode - Left = 553 + Left = 685 Height = 25 Top = 8 Width = 109 AutoSize = True - BorderSpacing.Left = 8 Caption = 'Delete selection' TabOrder = 3 OnClick = btnDeleteSelectionClick @@ -173,7 +173,7 @@ object MainForm: TMainForm AnchorSideLeft.Control = btnDeleteSelection AnchorSideTop.Control = btnDeleteSelection AnchorSideTop.Side = asrBottom - Left = 553 + Left = 685 Height = 25 Top = 33 Width = 111 @@ -186,7 +186,7 @@ object MainForm: TMainForm AnchorSideLeft.Control = btnDeleteSelection AnchorSideTop.Control = btnConvertToTrack AnchorSideTop.Side = asrBottom - Left = 553 + Left = 685 Height = 25 Top = 58 Width = 107 @@ -195,21 +195,22 @@ object MainForm: TMainForm TabOrder = 5 OnClick = btnConvertToAreaClick end - object rgGpsObjOrMapItem: TRadioGroup - AnchorSideLeft.Control = btnConvertToTrack + object rgNewPointType: TRadioGroup + AnchorSideLeft.Control = rgClickMode AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = btnDeleteSelection + AnchorSideTop.Control = Panel1 AnchorSideBottom.Control = btnConvertToArea AnchorSideBottom.Side = asrBottom - Left = 672 - Height = 63 - Top = 20 - Width = 103 + Left = 569 + Height = 67 + Top = 8 + Width = 100 Anchors = [akTop, akLeft, akBottom] AutoFill = True AutoSize = True - BorderSpacing.Left = 8 - BorderSpacing.Top = 12 + BorderSpacing.Right = 8 + BorderSpacing.Around = 8 + Caption = 'New point type' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize @@ -217,14 +218,15 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 43 - ClientWidth = 99 + ClientHeight = 47 + ClientWidth = 96 ItemIndex = 0 Items.Strings = ( - 'as TGPSObj' - 'as TMapItem' + 'TGPSPoint' + 'TMapPoint' ) TabOrder = 6 + OnClick = rgNewPointTypeClick end end object PluginManager: TMvPluginManager diff --git a/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.pas b/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.pas index 0042a5ccf..80cddf620 100644 --- a/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.pas +++ b/components/lazmapviewer/examples/plugin_demos/markerselectdrag_demo/main.pas @@ -26,7 +26,7 @@ type POI_Images: TImageList; MapView: TMapView; PluginManager: TMvPluginManager; - rgGpsObjOrMapItem: TRadioGroup; + rgNewPointType: TRadioGroup; rgClickMode: TRadioGroup; procedure btnDeleteSelectionClick(Sender: TObject); procedure btnConvertToTrackClick(Sender: TObject); @@ -35,8 +35,10 @@ type procedure cbMultiSelectChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure rgClickModeClick(Sender: TObject); + procedure rgNewPointTypeClick(Sender: TObject); private - Plugin: TMarkerSelectAndDragPlugin; + Plugin: TMarkerEditorPlugin; + procedure NewPointHandler(AMapView: TMapView; APoint: TGPSPoint); public end; @@ -169,7 +171,8 @@ begin AddGPSArea ([RealPoint(-60, -142), RealPoint(-70, -148), RealPoint(-64, -129)]); AddMapArea ([RealPoint(-60, -42), RealPoint(-70, -48), RealPoint(-64, -29)]); - Plugin := TMarkerSelectAndDragPlugin.Create(PluginManager); + Plugin := TMarkerEditorPlugin.Create(PluginManager); + Plugin.OnNewPoint := @NewPointHandler; for i := 0 to cgPointTypes.Items.Count-1 do cgPointTypes.Checked[i] := true; @@ -180,6 +183,11 @@ begin Plugin.ClickMode := TMarkerClickMode(rgClickMode.ItemIndex); end; +procedure TMainForm.rgNewPointTypeClick(Sender: TObject); +begin + plugin.NewPointType := TMarkerNewPointType(rgNewPointType.ItemIndex); +end; + procedure TMainForm.cgPointTypesItemClick(Sender: TObject; Index: integer); var pointTypes: TMvPointTypes; @@ -201,16 +209,18 @@ procedure TMainForm.btnConvertToTrackClick(Sender: TObject); const counter: Integer = 0; begin - case rgGpsObjOrMapItem.ItemIndex of - 0: with Plugin.ConvertSelectedPointsToGPSTrack(MapView, 2000 + counter) do - begin - LineColor := clGreen; - lineWidth := 1.0; - end; - 1: with Plugin.ConvertSelectedPointsToMapTrack(MapView, MapView.Layers[0]) do - begin - LineColor := clGreen; - LineWidth := 1.0; + case Plugin.NewPointType of + nptGPSPoint: + with Plugin.ConvertSelectedPointsToGPSTrack(MapView, 2000 + counter) do + begin + LineColor := clGreen; + lineWidth := 1.0; + end; + nptMapPoint: + with Plugin.ConvertSelectedPointsToMapTrack(MapView, MapView.Layers[0]) do + begin + LineColor := clGreen; + LineWidth := 1.0; end; end; inc(counter); @@ -220,7 +230,7 @@ procedure TMainForm.btnConvertToAreaClick(Sender: TObject); var counter: Integer = 0; begin - case rgGpsObjOrMapItem.ItemIndex of + case rgNewPointType.ItemIndex of 0: with Plugin.ConvertSelectedPointsToGPSArea(MapView, 3000 + counter) do begin FillColor := clGray; @@ -242,5 +252,11 @@ begin Plugin.MultiSelect := cbMultiSelect.Checked; end; +procedure TMainForm.NewPointHandler(AMapView: TMapView; APoint: TGPSPoint); +begin + if (Plugin.NewPointType = nptMapPoint) and (APoint is TGPSPointOfInterest) then + TGPSPointOfInterest(APoint).ImageIndex := 0; +end; + end. diff --git a/components/lazmapviewer/source/addons/plugins/markers/mvmarkerplugins.pas b/components/lazmapviewer/source/addons/plugins/markers/mvmarkerplugins.pas index 9a5814ae3..63be4b363 100644 --- a/components/lazmapviewer/source/addons/plugins/markers/mvmarkerplugins.pas +++ b/components/lazmapviewer/source/addons/plugins/markers/mvmarkerplugins.pas @@ -90,25 +90,31 @@ type end; - { TMarkerSelectAndDragPlugin } + { TMarkerEditorPlugin } TMarkerDrawPointEvent = procedure (AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine; AGPSPoint: TGPSPoint; AScreenPoint: TPoint; AMarkerSize: Integer) of object; + TMarkerNewPointEvent = procedure (AMapView: TMapView; APoint: TGPSPoint) of object; + TMarkerStartDragEvent = procedure (AMapView: TMapView; var CanDrag: Boolean) of object; - TMarkerClickMode = (mcmAddPointToSelection, mcmAddShapeToSelection, mcmToggleSelectedPoint); + TMarkerClickMode = (mcmNewPoint, mcmAddPointToSelection, mcmAddShapeToSelection, mcmToggleSelectedPoint); - TMarkerSelectAndDragPlugin = class(TMarkerClickPlugin) + TMarkerNewPointType = (nptGPSPoint, nptMapPoint); + + TMarkerEditorPlugin = class(TMarkerClickPlugin) private FClickMode: TMarkerClickMode; FDragCursor: TCursor; FDragging: Boolean; FMultiSelect: Boolean; + FNewPointType: TMarkerNewPointType; FSelection: TGPSPointList; FOrigSelection: array of TRealPoint; // Selection before dragging starts FOnDrawPoint: TMarkerDrawPointEvent; + FOnNewPoint: TMarkerNewPointEvent; FOnSelectionChange: TNotifyEvent; FOnStartDrag: TMarkerStartDragEvent; FOnEndDrag: TNotifyEvent; @@ -144,14 +150,17 @@ type procedure DeleteSelectedPoints(AMapView: TMapView); procedure MoveSelectionBy(AMapView: TMapView; dx, dy: Double); procedure MoveSelectionBy(AMapView: TMapView; dx, dy: Integer); + function NewPoint(AMapView: TMapView; X, Y: Integer): TGPSPoint; procedure SelectAllPointsOfShape(AMapView: TMapView; APoint: TGPSPoint); property Selection: TGPSPointList read FSelection; published property ClickMode: TMarkerClickMode read FClickMode write FClickMode default mcmAddPointToSelection; property DragCursor: TCursor read FDragCursor write FDragCursor default crSizeAll; property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default false; + property NewPointType: TMarkerNewPointType read FNewPointType write FNewPointType default nptGPSPoint; property OnDrawPoint: TMarkerDrawPointEvent read FOnDrawPoint write FOnDrawPoint; property OnEndDrag: TNotifyEvent read FOnEndDrag write FOnEndDrag; + property OnNewPoint: TMarkerNewPointEvent read FOnNewPoint write FOnNewPoint; property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange; property OnStartDrag: TMarkerStartDragEvent read FOnStartDrag write FOnStartDrag; end; @@ -368,7 +377,7 @@ begin end; -{ TMarkerSelectAndDragPlugin } +{ TMarkerEditorPlugin } type TMarkerData = record @@ -393,20 +402,20 @@ begin P.DateTime := M.DateTime; end; -constructor TMarkerSelectAndDragPlugin.Create(AOwner: TComponent); +constructor TMarkerEditorPlugin.Create(AOwner: TComponent); begin inherited; FDragCursor := crSizeAll; FSelection := TGPSPointList.Create(false); // false = do not free objects end; -destructor TMarkerSelectAndDragPlugin.Destroy; +destructor TMarkerEditorPlugin.Destroy; begin FSelection.Free; inherited; end; -procedure TMarkerSelectAndDragPlugin.AddToSelection(AMapView: TMapView; +procedure TMarkerEditorPlugin.AddToSelection(AMapView: TMapView; APoint: TGPSPoint); var idx: Integer; @@ -426,14 +435,14 @@ begin DoSelectionChange(AMapView); end; -procedure TMarkerSelectAndDragPlugin.AfterDrawObjects(AMapView: TMapView; +procedure TMarkerEditorPlugin.AfterDrawObjects(AMapView: TMapView; var {%H-}Handled: Boolean); begin inherited; DrawSelection(AMapView); end; -function TMarkerSelectAndDragPlugin.ConvertSelectedPointsToGPSArea( +function TMarkerEditorPlugin.ConvertSelectedPointsToGPSArea( AMapView: TMapView; AreaID: Integer): TGPSArea; var M: TMarkerData; @@ -457,7 +466,7 @@ begin DoSelectionChange(AMapView); end; -function TMarkerSelectAndDragPlugin.ConvertSelectedPointsToMapArea( +function TMarkerEditorPlugin.ConvertSelectedPointsToMapArea( AMapView: TMapView; ALayer: TMapLayer): TMapArea; var M: TMarkerData; @@ -479,7 +488,7 @@ begin DoSelectionChange(AMapView); end; -function TMarkerSelectAndDragPlugin.ConvertSelectedPointsToGPSTrack( +function TMarkerEditorPlugin.ConvertSelectedPointsToGPSTrack( AMapView: TMapView; ATrackID: Integer): TGPSTrack; var M: TMarkerData; @@ -503,7 +512,7 @@ begin DoSelectionChange(AMapView); end; -function TMarkerSelectAndDragPlugin.ConvertSelectedPointsToMapTrack( +function TMarkerEditorPlugin.ConvertSelectedPointsToMapTrack( AMapView: TMapView; ALayer: TMapLayer): TMapTrack; var M: TMarkerData; @@ -528,7 +537,7 @@ end; { Searches for the given point in all the point lists of the mapviewer (GPSItems, Layers, Tracks, Areas, POIs). If found, the point is removed from the list and destroyed. } -procedure TMarkerSelectAndDragPlugin.DeleteFromList(AMapView: TMapView; +procedure TMarkerEditorPlugin.DeleteFromList(AMapView: TMapView; APoint: TGPSPoint); var gpsObj: TGPSObj; @@ -554,7 +563,7 @@ begin collection.Delete(idx); end; -procedure TMarkerSelectAndDragPlugin.DeleteSelectedPoints(AMapView: TMapView); +procedure TMarkerEditorPlugin.DeleteSelectedPoints(AMapView: TMapView); var i: Integer; begin @@ -566,13 +575,13 @@ begin Update; end; -procedure TMarkerSelectAndDragPlugin.DoSelectionChange(AMapView: TMapView); +procedure TMarkerEditorPlugin.DoSelectionChange(AMapView: TMapView); begin if Assigned(FOnSelectionChange) then FOnSelectionChange(AMapView); end; -procedure TMarkerSelectAndDragPlugin.DragStart(AMapView: TMapView); +procedure TMarkerEditorPlugin.DragStart(AMapView: TMapView); var i: Integer; canDrag: Boolean; @@ -591,7 +600,7 @@ begin FOrigSelection[i] := FSelection[i].RealPoint; end; -procedure TMarkerSelectAndDragPlugin.DragTo(AMapView: TMapView; X, Y: Integer); +procedure TMarkerEditorPlugin.DragTo(AMapView: TMapView; X, Y: Integer); var dX, dY: Integer; begin @@ -605,7 +614,7 @@ begin end; end; -procedure TMarkerSelectAndDragPlugin.DragEnd(AMapView: TMapView); +procedure TMarkerEditorPlugin.DragEnd(AMapView: TMapView); begin FDragging := false; AMapView.Cursor := FSavedCursor; @@ -615,7 +624,7 @@ end; { Draw the selection marker for the given point. The drawing engine already has been setup for the correct settings. } -procedure TMarkerSelectAndDragPlugin.DrawPoint(AMapView: TMapView; +procedure TMarkerEditorPlugin.DrawPoint(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine; AGpsPoint: TGPSPoint; AScreenPoint: TPoint; AMarkerSize: Integer); begin @@ -630,7 +639,7 @@ begin ); end; -procedure TMarkerSelectAndDragPlugin.DrawSelection(AMapView: TMapView); +procedure TMarkerEditorPlugin.DrawSelection(AMapView: TMapView); const MARKER_SIZE = 5; var @@ -674,7 +683,7 @@ end; { Tries to find the point in one of the gps-type lists. If found, returns the found object and the index of the point in the list. Otherwise, nil and -1 are returned, respectively. } -procedure TMarkerSelectAndDragPlugin.FindContainerOfPoint(AMapView: TMapView; +procedure TMarkerEditorPlugin.FindContainerOfPoint(AMapView: TMapView; APoint: TGPSPoint; var AContainer: TGPSObj; var AIndex: Integer); var i, j, k: Integer; @@ -721,7 +730,7 @@ end; { Tries to find the point in one of the map-type collections of all layers. If found, returns the collection and the index of the point in the collection. Otherwise, nil and -1 are returned, respectively. } -procedure TMarkerSelectAndDragPlugin.FindMapCollection(AMapView: TMapView; +procedure TMarkerEditorPlugin.FindMapCollection(AMapView: TMapView; APoint: TGPSPoint; var ACollection: TMapCollectionBase; var AIndex: Integer); var i, j, k: Integer; @@ -782,7 +791,7 @@ begin end; { Moves the selection by the given amound of pixels in x and y direction. } -procedure TMarkerSelectAndDragPlugin.MoveSelectionBy(AMapView: TMapView; dx, dy: Integer); +procedure TMarkerEditorPlugin.MoveSelectionBy(AMapView: TMapView; dx, dy: Integer); var i: Integer; P: TPoint; @@ -799,7 +808,7 @@ begin end; { Moves the selection by the given amound of degrees in x and y direction } -procedure TMarkerSelectAndDragPlugin.MoveSelectionBy(AMapView: TMapView; dx, dy: Double); +procedure TMarkerEditorPlugin.MoveSelectionBy(AMapView: TMapView; dx, dy: Double); var i: Integer; P: TPoint; @@ -820,7 +829,7 @@ begin end; end; -procedure TMarkerSelectAndDragPlugin.MouseDown(AMapView: TMapView; +procedure TMarkerEditorPlugin.MouseDown(AMapView: TMapView; {%H-}Button: TMouseButton; {%H-}AShift: TShiftState; X, Y: Integer; var Handled: Boolean); begin @@ -829,20 +838,31 @@ begin if FMouseDownOnMarker then begin case FClickMode of - mcmAddPointToSelection: AddToSelection(AMapView, FOrigGPSPoint); - mcmAddShapeToSelection: SelectAllPointsOfShape(AMapView, FOrigGPSPoint); - mcmToggleSelectedPoint: ToggleSelected(AMapView, FOrigGPSPoint); + mcmAddPointToSelection: + AddToSelection(AMapView, FOrigGPSPoint); + mcmAddShapeToSelection: + SelectAllPointsOfShape(AMapView, FOrigGPSPoint); + mcmToggleSelectedPoint: + ToggleSelected(AMapView, FOrigGPSPoint); end; Update; Handled := true; end else begin - FSelection.Clear; + case FClickMode of + mcmNewPoint: + begin + FOrigGPSPoint := NewPoint(AMapView, X, Y); + AddToSelection(AMapView, FOrigGPSPoint); + end; + else + FSelection.Clear; + end; Update; end; end; -procedure TMarkerSelectAndDragPlugin.MouseMove(AMapView: TMapView; +procedure TMarkerEditorPlugin.MouseMove(AMapView: TMapView; {%H-}AShift: TShiftState; X,Y: Integer; var Handled: Boolean); const SENSITIVITY = 5; @@ -869,7 +889,7 @@ begin end; end; -procedure TMarkerSelectAndDragPlugin.MouseUp(AMapView: TMapView; +procedure TMarkerEditorPlugin.MouseUp(AMapView: TMapView; {%H-}Button: TMouseButton; {%H-}AShift: TShiftState; X, Y: Integer; var Handled: Boolean); begin @@ -878,7 +898,40 @@ begin DragEnd(AMapView); end; -procedure TMarkerSelectAndDragPlugin.SelectAllPointsOfShape(AMapView: TMapView; +function TMarkerEditorPlugin.NewPoint(AMapView: TMapView; + X, Y: Integer): TGPSPoint; +const + ID = 4000; +var + gpsPoint: TGPSPoint; + mapPoint: TMapPoint; + layer: TMapLayer; + rPt: TRealPoint; +begin + rPt := AMapView.ScreenToLatLon(Point(X, Y)); + case FNewPointType of + nptGPSPoint: + begin + gpsPoint := TGPSPointOfInterest.CreateFrom(rPt); + AMapView.GPSItems.Add(gpsPoint, ID); + Result := gpsPoint; + end; + nptMapPoint: + begin + if AMapView.Layers.Count = 0 then + layer := AMapView.Layers.Add as TMapLayer + else + layer := AMapView.Layers[0]; + mapPoint := layer.PointsOfInterest.Add as TMapPoint; + mapPoint.RealPoint := rPt; + Result := mapPoint.GPSObj as TGPSPoint; + end; + end; + if Assigned(FOnNewPoint) then + FOnNewPoint(AMapView, Result); +end; + +procedure TMarkerEditorPlugin.SelectAllPointsOfShape(AMapView: TMapView; APoint: TGPSPoint); var obj: TGPSObj = nil; @@ -938,7 +991,7 @@ begin Finished; end; -procedure TMarkerSelectAndDragPlugin.SetMultiSelect(AValue: Boolean); +procedure TMarkerEditorPlugin.SetMultiSelect(AValue: Boolean); begin if FMultiSelect = AValue then exit; FMultiSelect := AValue; @@ -950,7 +1003,7 @@ begin Update; end; -procedure TMarkerSelectAndDragPlugin.ToggleSelected(AMapView: TMapView; +procedure TMarkerEditorPlugin.ToggleSelected(AMapView: TMapView; APoint: TGPSPoint); var idx: Integer; @@ -1141,7 +1194,7 @@ end; initialization RegisterPluginClass(TMarkerHintPlugin, 'Marker hint'); RegisterPluginClass(TMarkerClickPlugin, 'Marker click'); - RegisterPluginClass(TMarkerSelectAndDragPlugin, 'Marker select and drag'); + RegisterPluginClass(TMarkerEditorPlugin, 'Marker select and drag'); RegisterPluginClass(TDraggableMarkerPlugin, 'Draggable marker'); end.