diff --git a/components/lazmapviewer/examples/plugin_demos/dragmarker_demo/project1.lpi b/components/lazmapviewer/examples/plugin_demos/dragmarker_demo/project1.lpi
index 0b4727301..67a680b2f 100644
--- a/components/lazmapviewer/examples/plugin_demos/dragmarker_demo/project1.lpi
+++ b/components/lazmapviewer/examples/plugin_demos/dragmarker_demo/project1.lpi
@@ -12,7 +12,6 @@
-
diff --git a/components/lazmapviewer/source/addons/plugins/mvplugins.pas b/components/lazmapviewer/source/addons/plugins/mvplugins.pas
index 8da82335a..8a62814ca 100644
--- a/components/lazmapviewer/source/addons/plugins/mvplugins.pas
+++ b/components/lazmapviewer/source/addons/plugins/mvplugins.pas
@@ -45,7 +45,7 @@ type
TLegalNoticePosition = (lnpTopLeft, lnpTopRight, lnpBottomLeft, lnpBottomRight);
- TLegalNoticePlugin = class(TMvMultiMapsPlugin)
+ TLegalNoticePlugin = class(TMvMultiMapsDrawPlugin)
private
const
DEFAULT_LEGALNOTICE_OPACITY = 0.55;
@@ -55,13 +55,11 @@ type
FLegalNoticeURL: String;
FBackgroundOpacity: Single;
FPosition: TLegalNoticePosition;
- FFont: TFont;
FSpacing: Integer;
FBackgroundColor: TColor;
private
procedure SetBackgroundColor(AValue: TColor);
procedure SetBackgroundOpacity(AValue: Single);
- procedure SetFont(AValue: TFont);
procedure SetLegalNotice(AValue: String);
procedure SetLegalNoticeURL(AValue: String);
procedure SetPosition(AValue: TLegalNoticePosition);
@@ -83,12 +81,12 @@ type
published
property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor default clNone;
property BackgroundOpacity: Single read FBackgroundOpacity write SetBackgroundOpacity default DEFAULT_LEGALNOTICE_OPACITY; // 0..1
- property Font: TFont read FFont write SetFont;
property LegalNotice: String read FLegalNotice write SetLegalNotice;
property LegalNoticeURL: String read FLegalNoticeURL write SetLegalNoticeURL;
property Position: TLegalNoticePosition read FPosition write SetPosition default lnpBottomRight;
property Spacing: Integer read FSpacing write SetSpacing default DEFAULT_LEGALNOTICE_SPACING;
// inherited properties
+ property Font;
property MapView;
end;
@@ -101,7 +99,7 @@ type
{ TDraggableMarkerData }
PDraggableMarkerData = ^TDraggableMarkerData;
TDraggableMarkerData = record
- FDraggableMarker : TGPSPoint;
+ FDraggedMarker : TGPSPoint;
FOrgPosition : TRealPoint;
end;
@@ -109,7 +107,10 @@ type
private
FDraggableMarkerCanMoveEvent : TDraggableMarkerCanMoveEvent;
FDraggableMarkerMovedEvent : TDraggableMarkerMovedEvent;
+ FDragMouseButton: TMouseButton;
function GetFirstMarkerAtMousePos(const AMapView: TMapView; const AX, AY : Integer) : TGPSPoint;
+ function GetDraggedMarker(AMapView : TMapView) : TGPSPoint;
+ function GetOrgPosition(AMapView : TMapView): TRealPoint;
protected
procedure MouseDown(AMapView: TMapView; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState;
X, Y: Integer; var Handled: Boolean); override;
@@ -120,9 +121,10 @@ type
published
property DraggableMarkerCanMoveEvent : TDraggableMarkerCanMoveEvent read FDraggableMarkerCanMoveEvent write FDraggableMarkerCanMoveEvent;
property DraggableMarkerMovedEvent : TDraggableMarkerMovedEvent read FDraggableMarkerMovedEvent write FDraggableMarkerMovedEvent;
+ property DragMouseButton : TMouseButton read FDragMouseButton write FDragMouseButton default mbLeft;
public
-// property DraggableMarker : TGPSPoint read FDraggableMarker;
-// property OrgPosition : TRealPoint read FOrgPosition;
+ property DraggedMarker[AMapView : TMapView] : TGPSPoint read GetDraggedMarker;
+ property OrgPosition[AMapView : TMapView] : TRealPoint read GetOrgPosition;
procedure Assign(Source: TPersistent); override;
end;
@@ -319,24 +321,6 @@ begin
end;
end;
- (*
-procedure TLinkedMapsPlugin.ZoomChanging(AMapView: TMapView;
- var NewZoom, Handled: Boolean);
-var
- i: integer;
- map: TMapView;
-begin
- if FLocked > 0 then
- exit;
- inc(FLocked);
- try
- for i := = to PluginManager.MapList.Count-1 do
- begin
- map := TMapView(PluginManager.MapList[i]);
- if AMapView <> map then
- map.ZoomChanging(NewZoom, Allow);
- *)
-
{ TLegalNoticePlugin }
@@ -344,16 +328,13 @@ constructor TLegalNoticePlugin.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBackgroundColor := clNone;
- FPosition := lnpBottomRight;
- FFont := TFont.Create;
- FFont.OnChange := @Changed;
FBackgroundOpacity := DEFAULT_LEGALNOTICE_OPACITY;
+ FPosition := lnpBottomRight;
FSpacing := DEFAULT_LEGALNOTICE_SPACING;
end;
destructor TLegalNoticePlugin.Destroy;
begin
- FFont.Free;
inherited;
end;
@@ -363,7 +344,6 @@ begin
begin
FBackgroundColor := TLegalNoticePlugin(Source).BackgroundColor;
FBackgroundOpacity := TLegalNoticePlugin(Source).BackgroundOpacity;
- FFont.Assign(TLegalNoticePlugin(Source).Font);
FLegalNotice := TLegalNoticePlugin(Source).LegalNotice;
FLegalNoticeURL := TLegalNoticePlugin(Source).LegalNoticeURL;
FPosition := TLegalNoticePlugin(Source).Position;
@@ -396,7 +376,7 @@ begin
AMapView.DrawingEngine.FillRect(Left, Top, Right, Bottom);
end;
AMapView.DrawingEngine.BrushStyle := bsClear;
- AMapView.DrawingEngine.SetFont(FFont.Name, FFont.Size, FFont.Style, FFont.Color);
+ AMapView.DrawingEngine.SetFont(Font.Name, Font.Size, Font.Style, Font.Color);
AMapView.DrawingEngine.TextOut(x, y, FLegalNotice);
finally
AMapView.DrawingEngine.Opacity := lSavedOpacity;
@@ -413,7 +393,7 @@ var
begin
lSavedFont := AMapView.DrawingEngine.GetFont;
try
- AMapView.DrawingEngine.SetFont(FFont.Name, FFont.Size, FFont.Style, FFont.Color);
+ AMapView.DrawingEngine.SetFont(Font.Name, Font.Size, Font.Style, Font.Color);
sz := AMapView.DrawingEngine.TextExtent(FLegalNotice);
case FPosition of
lnpTopLeft, lnpBottomLeft:
@@ -478,12 +458,12 @@ begin
if PtInRect(lClickableRect, Point(X, Y)) and (not AMapView.Engine.InDrag) and
(FLegalNoticeURL <> '') then
begin
- FFont.Style := [fsUnderline];
+ Font.Style := [fsUnderline];
AMapView.Cursor := crHandPoint;
Handled := true;
end else
begin
- FFont.Style := [];
+ Font.Style := [];
if not Handled then
AMapView.Cursor := crDefault;
end;
@@ -525,12 +505,6 @@ begin
Update;
end;
-procedure TLegalNoticePlugin.SetFont(AValue: TFont);
-begin
- FFont.Assign(AValue);
- Update;
-end;
-
procedure TLegalNoticePlugin.SetSpacing(AValue: Integer);
begin
if FSpacing = AValue then Exit;
@@ -579,17 +553,40 @@ begin
end;
end;
+function TDraggableMarkerPlugin.GetDraggedMarker(AMapView: TMapView): TGPSPoint;
+var
+ lDraggableMarkerData : TDraggableMarkerData;
+ cnt : Integer;
+begin
+ Result := Nil;
+ cnt := GetMapViewData(AMapView,lDraggableMarkerData,SizeOf(lDraggableMarkerData));
+ if (cnt >= SizeOf(lDraggableMarkerData)) then
+ Result := lDraggableMarkerData.FDraggedMarker;
+end;
+
+function TDraggableMarkerPlugin.GetOrgPosition(AMapView : TMapView): TRealPoint;
+var
+ lDraggableMarkerData : TDraggableMarkerData;
+ cnt : Integer;
+begin
+ Result.InitXY(0.0,0.0);
+ cnt := GetMapViewData(AMapView,lDraggableMarkerData,SizeOf(lDraggableMarkerData));
+ if (cnt >= SizeOf(lDraggableMarkerData)) then
+ Result := lDraggableMarkerData.FOrgPosition;
+end;
+
procedure TDraggableMarkerPlugin.MouseDown(AMapView: TMapView; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer; var Handled: Boolean);
var
lDraggableMarkerData : TDraggableMarkerData;
begin
if Handled then Exit;
- lDraggableMarkerData.FDraggableMarker := GetFirstMarkerAtMousePos(AMapView,X,Y);
- if Assigned(lDraggableMarkerData.FDraggableMarker) then
+ if FDragMouseButton <> Button then Exit;
+ lDraggableMarkerData.FDraggedMarker := GetFirstMarkerAtMousePos(AMapView,X,Y);
+ if Assigned(lDraggableMarkerData.FDraggedMarker) then
begin
- lDraggableMarkerData.FOrgPosition.Lon:= lDraggableMarkerData.FDraggableMarker.Lon;
- lDraggableMarkerData.FOrgPosition.Lat:= lDraggableMarkerData.FDraggableMarker.Lat;
+ lDraggableMarkerData.FOrgPosition.Lon:= lDraggableMarkerData.FDraggedMarker.Lon;
+ lDraggableMarkerData.FOrgPosition.Lat:= lDraggableMarkerData.FDraggedMarker.Lat;
SetMapViewData(AMapView,lDraggableMarkerData,SizeOf(lDraggableMarkerData));
Handled := True;
end;
@@ -607,14 +604,14 @@ var
begin
cnt := GetMapViewData(AMapView,lDraggableMarkerData,SizeOf(lDraggableMarkerData));
if (cnt >= SizeOf(lDraggableMarkerData)) and
- Assigned(lDraggableMarkerData.FDraggableMarker) then
+ Assigned(lDraggableMarkerData.FDraggedMarker) then
begin
pt.X := X;
pt.Y := Y;
rpt := AMapView.ScreenToLatLon(pt);
- ele := lDraggableMarkerData.FDraggableMarker.Elevation;
- dt := lDraggableMarkerData.FDraggableMarker.DateTime;
- lDraggableMarkerData.FDraggableMarker.MoveTo(rpt.Lon, rpt.Lat,ele,dt);
+ ele := lDraggableMarkerData.FDraggedMarker.Elevation;
+ dt := lDraggableMarkerData.FDraggedMarker.DateTime;
+ lDraggableMarkerData.FDraggedMarker.MoveTo(rpt.Lon, rpt.Lat,ele,dt);
AMapView.Invalidate;
Handled := True; // Prevent the dragging of the map!!
end
@@ -628,7 +625,6 @@ begin
else if not Handled then
AMapView.Cursor := crDefault;
end
-
end;
procedure TDraggableMarkerPlugin.MouseUp(AMapView: TMapView; Button: TMouseButton;
@@ -636,13 +632,14 @@ procedure TDraggableMarkerPlugin.MouseUp(AMapView: TMapView; Button: TMouseButto
var
lpDraggableMarkerData : PDraggableMarkerData;
begin
+ if FDragMouseButton <> Button then Exit;
lpDraggableMarkerData := MapViewDataPtr[AMapView];
- if Assigned(lpDraggableMarkerData) and Assigned(lpDraggableMarkerData^.FDraggableMarker) then
+ if Assigned(lpDraggableMarkerData) and Assigned(lpDraggableMarkerData^.FDraggedMarker) then
begin
if Assigned(FDraggableMarkerMovedEvent) then
- FDraggableMarkerMovedEvent(Self,lpDraggableMarkerData^.FDraggableMarker,lpDraggableMarkerData^.FOrgPosition);
+ FDraggableMarkerMovedEvent(Self,lpDraggableMarkerData^.FDraggedMarker,lpDraggableMarkerData^.FOrgPosition);
Handled := True;
- lpDraggableMarkerData^.FDraggableMarker := Nil;
+ lpDraggableMarkerData^.FDraggedMarker := Nil;
end;
end;
@@ -652,10 +649,12 @@ begin
begin
FDraggableMarkerCanMoveEvent := TDraggableMarkerPlugin(Source).DraggableMarkerCanMoveEvent;
FDraggableMarkerMovedEvent := TDraggableMarkerPlugin(Source).DraggableMarkerMovedEvent;
+ FDragMouseButton := TDraggableMarkerPlugin(Source).DragMouseButton;
end;
inherited;
end;
+
{ TMvCustomPlugin }
procedure TUserDefinedPlugin.AfterDrawObjects(AMapView: TMapView;
diff --git a/components/lazmapviewer/source/mvplugincore.pas b/components/lazmapviewer/source/mvplugincore.pas
index 99b960bc2..649bbcd18 100644
--- a/components/lazmapviewer/source/mvplugincore.pas
+++ b/components/lazmapviewer/source/mvplugincore.pas
@@ -160,6 +160,36 @@ type
property Enabled;
end;
+ { TMvMultiMapsDrawPlugin }
+
+ TMvMultiMapsDrawPlugin = class(TMvMultiMapsPlugin)
+ private
+ const
+ DEFAULT_OPACITY = 0.55;
+ DEFAULT_BACKGROUND_COLOR = clWhite;
+ private
+ FBackgroundColor: TColor;
+ FBackgroundOpacity: Single;
+ FFont: TFont;
+ FPen: TPen;
+ function IsOpacityStored: Boolean;
+ procedure SetBackgroundColor(AValue: TColor);
+ procedure SetBackgroundOpacity(AValue: Single);
+ procedure SetFont(AValue: TFont);
+ procedure SetPen(AValue: TPen);
+ protected
+ procedure Changed(Sender: TObject);
+ property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor default DEFAULT_BACKGROUND_COLOR;
+ property BackgroundOpacity: Single read FBackgroundOpacity write SetBackgroundOpacity stored IsOpacityStored;
+ property Font: TFont read FFont write SetFont;
+ property Pen: TPen read FPen write SetPen;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Assign(ASource: TPersistent); override;
+ end;
+
+
TMvCustomPluginClass = class of TMvCustomPlugin;
TMvPluginList = class(TMvIndexedComponentList)
@@ -682,6 +712,92 @@ begin
end;
+{ TMvMultiMapsDrawPlugin }
+
+constructor TMvMultiMapsDrawPlugin.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FBackgroundColor := DEFAULT_BACKGROUND_COLOR;
+ FBackgroundOpacity := DEFAULT_OPACITY;
+ FFont := TFont.Create;
+ FFont.OnChange := @Changed;
+ FPen := TPen.Create;
+ FPen.OnChange := @Changed;
+end;
+
+destructor TMvMultiMapsDrawPlugin.Destroy;
+begin
+ FFont.Free;
+ FPen.Free;
+ inherited Destroy;
+end;
+
+procedure TMvMultiMapsDrawPlugin.Assign(ASource: TPersistent);
+begin
+ if ASource is TMvDrawPlugin then
+ begin
+ FBackgroundColor := TMvDrawPlugin(ASource).BackgroundColor;
+ FBackgroundOpacity := TMvDrawPlugin(ASource).BackgroundOpacity;
+ FFont.Assign(TMvDrawPlugin(ASource).Font);
+ FPen.Assign(TMvDrawPlugin(ASource).Pen);
+ end;
+ inherited;
+end;
+
+procedure TMvMultiMapsDrawPlugin.Changed(Sender: TObject);
+begin
+ Update;
+end;
+
+function TMvMultiMapsDrawPlugin.IsOpacityStored: Boolean;
+begin
+ Result := FBackgroundOpacity <> DEFAULT_OPACITY;
+end;
+
+procedure TMvMultiMapsDrawPlugin.SetBackgroundColor(AValue: TColor);
+begin
+ if FBackgroundColor <> AValue then
+ begin
+ FBackgroundColor := AValue;
+ Update;
+ end;
+end;
+
+procedure TMvMultiMapsDrawPlugin.SetBackgroundOpacity(AValue: Single);
+begin
+ if FBackgroundOpacity <> AValue then
+ begin
+ FBackgroundOpacity := AValue;
+ Update;
+ end;
+end;
+
+procedure TMvMultiMapsDrawPlugin.SetFont(AValue: TFont);
+begin
+ if (AValue = nil) then
+ exit;
+ if (AValue.Name = FFont.Name) and (AValue.Size = FFont.Size) and
+ (AValue.Style = FFont.Style) and (AValue.Color = FFont.Color)
+ then
+ exit;
+ FFont.Assign(AValue);
+ Changed(Self);
+end;
+
+procedure TMvMultiMapsDrawPlugin.SetPen(AValue: TPen);
+begin
+ if (AValue = nil) then
+ exit;
+ if (AValue.Color = FPen.Color) and (AValue.Width = FPen.Width) and
+ (AValue.Style = FPen.Style) and (AValue.Mode = FPen.Mode) and
+ (AValue.JoinStyle = FPen.JoinStyle) and (AValue.EndCap = FPen.EndCap)
+ then
+ exit;
+ FPen.Assign(AValue);
+ Changed(Self);
+end;
+
+
{ TMvPluginList }
function TMvPluginList.GetItem(AIndex: Integer): TMvCustomPlugin;