LazMapViewer: Add event and plugin hook for drawing missing tiles (OnDrawMissingTile). Issue #39086.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9541 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
79aeac4bb7
commit
626917227d
@ -130,6 +130,12 @@ type
|
|||||||
TMvPluginCenterMovingEvent = procedure (Sender: TObject; AMapView: TMapView;
|
TMvPluginCenterMovingEvent = procedure (Sender: TObject; AMapView: TMapView;
|
||||||
var ANewCenter: TRealPoint; var Allow, Handled: Boolean) of object;
|
var ANewCenter: TRealPoint; var Allow, Handled: Boolean) of object;
|
||||||
|
|
||||||
|
TMvPluginDrawGPSPointEvent = procedure (Sender: TObject; AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; APoint: TGPSPoint; var Handled: Boolean) of object;
|
||||||
|
|
||||||
|
TMvPluginDrawMissingTileEvent = procedure (Sender: TObject; AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; const ARect: TRect; var Handled: Boolean) of object;
|
||||||
|
|
||||||
TMvPluginGPSItemsModifiedEvent = procedure (Sender: TObject; AMapView: TMapView;
|
TMvPluginGPSItemsModifiedEvent = procedure (Sender: TObject; AMapView: TMapView;
|
||||||
ChangedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean;
|
ChangedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean;
|
||||||
var Handled: Boolean) of Object;
|
var Handled: Boolean) of Object;
|
||||||
@ -158,6 +164,8 @@ type
|
|||||||
FBeforeDrawObjectsEvent : TMvPluginNotifyEvent;
|
FBeforeDrawObjectsEvent : TMvPluginNotifyEvent;
|
||||||
FCenterMoveEvent : TMvPluginNotifyEvent;
|
FCenterMoveEvent : TMvPluginNotifyEvent;
|
||||||
FCenterMovingEvent: TMvPluginCenterMovingEvent;
|
FCenterMovingEvent: TMvPluginCenterMovingEvent;
|
||||||
|
FDrawGPSPointEvent: TMvPluginDrawGPSPointEvent;
|
||||||
|
FDrawMissingTileEvent: TMvPluginDrawMissingTileEvent;
|
||||||
FGPSItemsModifiedEvent : TMvPluginGPSItemsModifiedEvent;
|
FGPSItemsModifiedEvent : TMvPluginGPSItemsModifiedEvent;
|
||||||
FMouseDownEvent : TMvPluginMouseEvent;
|
FMouseDownEvent : TMvPluginMouseEvent;
|
||||||
FMouseEnterEvent : TMvPluginNotifyEvent;
|
FMouseEnterEvent : TMvPluginNotifyEvent;
|
||||||
@ -174,6 +182,10 @@ type
|
|||||||
procedure CenterMove(AMapView: TMapView; var Handled: Boolean); override;
|
procedure CenterMove(AMapView: TMapView; var Handled: Boolean); override;
|
||||||
procedure CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
procedure CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
||||||
var Allow, Handled: Boolean); override;
|
var Allow, Handled: Boolean); override;
|
||||||
|
procedure DrawGPSPoint(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
APoint: TGPSPoint; var Handled: Boolean); override;
|
||||||
|
procedure DrawMissingTile(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
const ARect: TRect; var Handled: Boolean); override;
|
||||||
procedure GPSItemsModified(AMapView: TMapView; ChangedList: TGPSObjectList;
|
procedure GPSItemsModified(AMapView: TMapView; ChangedList: TGPSObjectList;
|
||||||
ActualObjs: TGPSObjList; Adding: Boolean; var Handled: Boolean); override;
|
ActualObjs: TGPSObjList; Adding: Boolean; var Handled: Boolean); override;
|
||||||
procedure MouseDown(AMapView: TMapView; Button: TMouseButton; Shift: TShiftState;
|
procedure MouseDown(AMapView: TMapView; Button: TMouseButton; Shift: TShiftState;
|
||||||
@ -195,6 +207,7 @@ type
|
|||||||
property OnBeforeDrawObjects : TMvPluginNotifyEvent read FBeforeDrawObjectsEvent write FBeforeDrawObjectsEvent;
|
property OnBeforeDrawObjects : TMvPluginNotifyEvent read FBeforeDrawObjectsEvent write FBeforeDrawObjectsEvent;
|
||||||
property OnCenterMove : TMvPluginNotifyEvent read FCenterMoveEvent write FCenterMoveEvent;
|
property OnCenterMove : TMvPluginNotifyEvent read FCenterMoveEvent write FCenterMoveEvent;
|
||||||
property OnCenterMoving: TMvPluginCenterMovingEvent read FCenterMovingEvent write FCenterMovingEvent;
|
property OnCenterMoving: TMvPluginCenterMovingEvent read FCenterMovingEvent write FCenterMovingEvent;
|
||||||
|
property OnDrawGPSPoint: TMvPluginDrawGPSPointEvent read FDrawGPSPointEvent write FDrawGPSPointEvent;
|
||||||
property OnGPSItemsModified : TMvPluginGPSItemsModifiedEvent read FGPSItemsModifiedEvent write FGPSItemsModifiedEvent;
|
property OnGPSItemsModified : TMvPluginGPSItemsModifiedEvent read FGPSItemsModifiedEvent write FGPSItemsModifiedEvent;
|
||||||
property OnMouseDown : TMvPluginMouseEvent read FMouseDownEvent write FMouseDownEvent;
|
property OnMouseDown : TMvPluginMouseEvent read FMouseDownEvent write FMouseDownEvent;
|
||||||
property OnMouseEnter : TMvPluginNotifyEvent read FMouseEnterEvent write FMouseEnterEvent;
|
property OnMouseEnter : TMvPluginNotifyEvent read FMouseEnterEvent write FMouseEnterEvent;
|
||||||
@ -677,6 +690,20 @@ begin
|
|||||||
FCenterMovingEvent(Self, AMapView, NewCenter, Allow, Handled);
|
FCenterMovingEvent(Self, AMapView, NewCenter, Allow, Handled);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TUserDefinedPlugin.DrawGPSPoint(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; APoint: TGPSPoint; var Handled: Boolean);
|
||||||
|
begin
|
||||||
|
if Assigned(FDrawGPSPointEvent) then
|
||||||
|
FDrawGPSPointEvent(Self, AMapView, ADrawingEngine, APoint, Handled);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TUserDefinedPlugin.DrawMissingTile(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; const ARect: TRect; var Handled: Boolean);
|
||||||
|
begin
|
||||||
|
if Assigned(FDrawMissingTileEvent) then
|
||||||
|
FDrawMissingTileEvent(Self, AMapView, ADrawingEngine, ARect, Handled);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TUserDefinedPlugin.GPSItemsModified(AMapView: TMapView;
|
procedure TUserDefinedPlugin.GPSItemsModified(AMapView: TMapView;
|
||||||
ChangedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean;
|
ChangedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean;
|
||||||
var Handled: Boolean);
|
var Handled: Boolean);
|
||||||
|
@ -38,6 +38,9 @@ Type
|
|||||||
TDrawGpsPointEvent = procedure (Sender: TObject;
|
TDrawGpsPointEvent = procedure (Sender: TObject;
|
||||||
ADrawer: TMvCustomDrawingEngine; APoint: TGpsPoint) of object;
|
ADrawer: TMvCustomDrawingEngine; APoint: TGpsPoint) of object;
|
||||||
|
|
||||||
|
TDrawMissingTileEvent = procedure (Sender: TObject;
|
||||||
|
ADrawer: TMvCustomDrawingEngine; const ARect: TRect) of object;
|
||||||
|
|
||||||
TMapViewOption =
|
TMapViewOption =
|
||||||
(
|
(
|
||||||
mvoEditorEnabled, // Point/Track editor enabled
|
mvoEditorEnabled, // Point/Track editor enabled
|
||||||
@ -446,6 +449,10 @@ type
|
|||||||
function CenterMove(AMapView: TMapView): Boolean; virtual;
|
function CenterMove(AMapView: TMapView): Boolean; virtual;
|
||||||
function CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
function CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
||||||
var Allow: Boolean): Boolean; virtual;
|
var Allow: Boolean): Boolean; virtual;
|
||||||
|
function DrawGPSPoint(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
APoint: TGPSPoint): Boolean; virtual;
|
||||||
|
function DrawMissingTile(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
const ARect: TRect): Boolean; virtual;
|
||||||
function GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
function GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
||||||
ActualObjs: TGPSObjList; Adding: Boolean): Boolean; virtual;
|
ActualObjs: TGPSObjList; Adding: Boolean): Boolean; virtual;
|
||||||
function MouseDown(AMapView: TMapView; AButton: TMouseButton; AShift: TShiftState;
|
function MouseDown(AMapView: TMapView; AButton: TMouseButton; AShift: TShiftState;
|
||||||
@ -473,11 +480,6 @@ type
|
|||||||
FBuiltinDownloadEngine: TMvCustomDownloadEngine;
|
FBuiltinDownloadEngine: TMvCustomDownloadEngine;
|
||||||
FBuiltinPluginManager: TMvCustomPluginManager;
|
FBuiltinPluginManager: TMvCustomPluginManager;
|
||||||
FPluginManager: TMvCustomPluginManager;
|
FPluginManager: TMvCustomPluginManager;
|
||||||
FOnEditDrag: TNotifyEvent;
|
|
||||||
FOnEditEndDrag: TNotifyEvent;
|
|
||||||
FOnEditIsDirty: TNotifyEvent;
|
|
||||||
FOnEditSelectionCompleted: TNotifyEvent;
|
|
||||||
FOnEditStartDrag: TNotifyEvent;
|
|
||||||
FEngine: TMapViewerEngine;
|
FEngine: TMapViewerEngine;
|
||||||
FBuiltinDrawingEngine: TMvCustomDrawingEngine;
|
FBuiltinDrawingEngine: TMvCustomDrawingEngine;
|
||||||
FDrawingEngine: TMvCustomDrawingEngine;
|
FDrawingEngine: TMvCustomDrawingEngine;
|
||||||
@ -488,7 +490,6 @@ type
|
|||||||
FOptions: TMapViewOptions;
|
FOptions: TMapViewOptions;
|
||||||
FPOIImage: TCustomBitmap;
|
FPOIImage: TCustomBitmap;
|
||||||
FPOITextBgColor: TColor;
|
FPOITextBgColor: TColor;
|
||||||
FOnDrawGpsPoint: TDrawGpsPointEvent;
|
|
||||||
FDebugTiles: Boolean;
|
FDebugTiles: Boolean;
|
||||||
FDefaultTrackColor: TColor;
|
FDefaultTrackColor: TColor;
|
||||||
FDefaultTrackWidth: Integer;
|
FDefaultTrackWidth: Integer;
|
||||||
@ -500,6 +501,13 @@ type
|
|||||||
FZoomMin: Integer;
|
FZoomMin: Integer;
|
||||||
FOnCenterMove: TNotifyEvent;
|
FOnCenterMove: TNotifyEvent;
|
||||||
FOnCenterMoving: TCenterMovingEvent;
|
FOnCenterMoving: TCenterMovingEvent;
|
||||||
|
FOnDrawGpsPoint: TDrawGpsPointEvent;
|
||||||
|
FOnDrawMissingTile: TDrawMissingTileEvent;
|
||||||
|
FOnEditDrag: TNotifyEvent;
|
||||||
|
FOnEditEndDrag: TNotifyEvent;
|
||||||
|
FOnEditIsDirty: TNotifyEvent;
|
||||||
|
FOnEditSelectionCompleted: TNotifyEvent;
|
||||||
|
FOnEditStartDrag: TNotifyEvent;
|
||||||
FOnZoomChange: TNotifyEvent;
|
FOnZoomChange: TNotifyEvent;
|
||||||
FOnZoomChanging: TZoomChangingEvent;
|
FOnZoomChanging: TZoomChangingEvent;
|
||||||
FBeforeDrawObjectsEvent: TNotifyEvent;
|
FBeforeDrawObjectsEvent: TNotifyEvent;
|
||||||
@ -577,6 +585,8 @@ type
|
|||||||
procedure DblClick; override;
|
procedure DblClick; override;
|
||||||
procedure DoCenterMove(Sender: TObject);
|
procedure DoCenterMove(Sender: TObject);
|
||||||
procedure DoCenterMoving(Sender: TObject; var NewCenter: TRealPoint; var Allow: Boolean);
|
procedure DoCenterMoving(Sender: TObject; var NewCenter: TRealPoint; var Allow: Boolean);
|
||||||
|
procedure DoDrawMissingTile(const ARect: TRect);
|
||||||
|
procedure DoDrawPoint(const Area: TRealArea; APt: TGPSPoint; AImageIndex: Integer);
|
||||||
procedure DoDrawStretchedTile(const TileId: TTileID; X, Y: Integer; TileImg: TPictureCacheItem; const R: TRect);
|
procedure DoDrawStretchedTile(const TileId: TTileID; X, Y: Integer; TileImg: TPictureCacheItem; const R: TRect);
|
||||||
procedure DoDrawTile(const TileId: TTileId; X,Y: integer; TileImg: TPictureCacheItem);
|
procedure DoDrawTile(const TileId: TTileId; X,Y: integer; TileImg: TPictureCacheItem);
|
||||||
procedure DoDrawTileInfo(const {%H-}TileID: TTileID; X,Y: Integer);
|
procedure DoDrawTileInfo(const {%H-}TileID: TTileID; X,Y: Integer);
|
||||||
@ -701,15 +711,16 @@ type
|
|||||||
property OnBeforeDrawObjects: TNotifyEvent read FBeforeDrawObjectsEvent write FBeforeDrawObjectsEvent;
|
property OnBeforeDrawObjects: TNotifyEvent read FBeforeDrawObjectsEvent write FBeforeDrawObjectsEvent;
|
||||||
property OnCenterMove: TNotifyEvent read FOnCenterMove write FOnCenterMove;
|
property OnCenterMove: TNotifyEvent read FOnCenterMove write FOnCenterMove;
|
||||||
property OnCenterMoving: TCenterMovingEvent read FOnCenterMoving write FOnCenterMoving;
|
property OnCenterMoving: TCenterMovingEvent read FOnCenterMoving write FOnCenterMoving;
|
||||||
property OnZoomChange: TNotifyEvent read FOnZoomChange write FOnZoomChange;
|
|
||||||
property OnZoomChanging: TZoomChangingEvent read FOnZoomChanging write FOnZoomChanging;
|
|
||||||
property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
|
property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
|
||||||
property OnDrawGpsPoint: TDrawGpsPointEvent read FOnDrawGpsPoint write FOnDrawGpsPoint;
|
property OnDrawGpsPoint: TDrawGpsPointEvent read FOnDrawGpsPoint write FOnDrawGpsPoint;
|
||||||
|
property OnDrawMissingTile: TDrawMissingTileEvent read FOnDrawMissingTile write FOnDrawMissingTile;
|
||||||
property OnEditSelectionCompleted: TNotifyEvent read FOnEditSelectionCompleted write FOnEditSelectionCompleted;
|
property OnEditSelectionCompleted: TNotifyEvent read FOnEditSelectionCompleted write FOnEditSelectionCompleted;
|
||||||
property OnEditStartDrag: TNotifyEvent read FOnEditStartDrag write FOnEditStartDrag;
|
property OnEditStartDrag: TNotifyEvent read FOnEditStartDrag write FOnEditStartDrag;
|
||||||
property OnEditDrag: TNotifyEvent read FOnEditDrag write FOnEditDrag;
|
property OnEditDrag: TNotifyEvent read FOnEditDrag write FOnEditDrag;
|
||||||
property OnEditEndDrag: TNotifyEvent read FOnEditEndDrag write FOnEditEndDrag;
|
property OnEditEndDrag: TNotifyEvent read FOnEditEndDrag write FOnEditEndDrag;
|
||||||
property OnEditIsDirty: TNotifyEvent read FOnEditIsDirty write FOnEditIsDirty;
|
property OnEditIsDirty: TNotifyEvent read FOnEditIsDirty write FOnEditIsDirty;
|
||||||
|
property OnZoomChange: TNotifyEvent read FOnZoomChange write FOnZoomChange;
|
||||||
|
property OnZoomChanging: TZoomChangingEvent read FOnZoomChanging write FOnZoomChanging;
|
||||||
property OnMouseDown;
|
property OnMouseDown;
|
||||||
property OnMouseEnter;
|
property OnMouseEnter;
|
||||||
property OnMouseLeave;
|
property OnMouseLeave;
|
||||||
@ -2587,11 +2598,11 @@ begin
|
|||||||
FDragger.MouseDown(FEditMark, X, Y);
|
FDragger.MouseDown(FEditMark, X, Y);
|
||||||
end
|
end
|
||||||
// With editor enabled, dragging is with the middle button
|
// With editor enabled, dragging is with the middle button
|
||||||
else if (Button = mbMiddle) and DraggingEnabled and
|
else if (Button = mbMiddle) and DraggingEnabled and (not lHandled) then
|
||||||
(not lHandled) then
|
|
||||||
StartDragging(X, Y);
|
StartDragging(X, Y);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
begin
|
||||||
// With editor disabled, dragging is with the left button
|
// With editor disabled, dragging is with the left button
|
||||||
if IsActive and DraggingEnabled and
|
if IsActive and DraggingEnabled and
|
||||||
(Button = mbLeft) and (not lHandled) then
|
(Button = mbLeft) and (not lHandled) then
|
||||||
@ -2599,6 +2610,7 @@ begin
|
|||||||
Engine.MouseDown(self,Button,Shift,X,Y);
|
Engine.MouseDown(self,Button,Shift,X,Y);
|
||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMapView.MouseUp(Button: TMouseButton; Shift: TShiftState;
|
procedure TMapView.MouseUp(Button: TMouseButton; Shift: TShiftState;
|
||||||
@ -3039,34 +3051,38 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMapView.DrawPointOfInterest(const Area: TRealArea; APt: TGPSPointOfInterest);
|
procedure TMapView.DoDrawPoint(const Area: TRealArea; APt: TGPSPoint; AImageIndex: Integer);
|
||||||
var
|
var
|
||||||
pt: TPoint;
|
pt: TPoint;
|
||||||
ptCyc: TPointArray;
|
ptCyc: TPointArray;
|
||||||
ptColor: TColor;
|
ptColor: TColor;
|
||||||
extent: TSize;
|
txt: String;
|
||||||
s: String;
|
txtExtent: TSize;
|
||||||
bmp: TBitmap;
|
bmp: TBitmap;
|
||||||
w, h: Integer;
|
wBmp, hBmp: Integer;
|
||||||
OldOpacity: Single;
|
savedOpacity: Single;
|
||||||
OldPenStyle: TPenStyle;
|
savedPen: TMvPen;
|
||||||
|
|
||||||
procedure DrawOne(pt: TPoint);
|
procedure DrawOne(P: TPoint);
|
||||||
|
const
|
||||||
|
SYMBOL_SIZE = 5;
|
||||||
begin
|
begin
|
||||||
|
// Draw as bitmap from ImageList...
|
||||||
if Assigned(bmp) then
|
if Assigned(bmp) then
|
||||||
DrawingEngine.DrawBitmap(pt.X - w div 2, pt.Y - h, bmp, true)
|
DrawingEngine.DrawBitmap(P.X - wBmp div 2, P.Y - hBmp, bmp, true)
|
||||||
else
|
else
|
||||||
|
// ... or draw as global POI bitmap image ...
|
||||||
|
if Assigned(FPOIImage) and not (FPOIImage.Empty) then
|
||||||
|
DrawingEngine.DrawBitmap(P.X - FPOIImage.Width div 2, P.Y - FPOIImage.Height, FPOIImage, true)
|
||||||
|
else
|
||||||
|
// ... or as cross
|
||||||
begin
|
begin
|
||||||
// ... or as cross
|
DrawingEngine.Line(P.X, P.Y - SYMBOL_SIZE, P.X, P.Y + SYMBOL_SIZE);
|
||||||
ptColor := clRed;
|
DrawingEngine.Line(P.X - SYMBOL_SIZE, P.Y, P.X + SYMBOL_SIZE, P.Y);
|
||||||
if (APt.ExtraData <> nil) and APt.ExtraData.InheritsFrom(TDrawingExtraData) then
|
P.Y := P.Y + 5; // distance to text
|
||||||
ptColor := TDrawingExtraData(APt.ExtraData).Color;
|
|
||||||
DrawingEngine.PenColor := ptColor;
|
|
||||||
DrawingEngine.PenWidth := 3;
|
|
||||||
DrawingEngine.Line(pt.X, pt.Y - 5, pt.X, pt.Y + 5);
|
|
||||||
DrawingEngine.Line(pt.X - 5, pt.Y, pt.X + 5, pt.Y);
|
|
||||||
pt.Y := pt.Y + 5;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// Draw the point text
|
||||||
if FPOITextBgColor = clNone then
|
if FPOITextBgColor = clNone then
|
||||||
DrawingEngine.BrushStyle := bsClear
|
DrawingEngine.BrushStyle := bsClear
|
||||||
else
|
else
|
||||||
@ -3074,38 +3090,58 @@ var
|
|||||||
DrawingEngine.BrushStyle := bsSolid;
|
DrawingEngine.BrushStyle := bsSolid;
|
||||||
DrawingEngine.BrushColor := FPOITextBgColor;
|
DrawingEngine.BrushColor := FPOITextBgColor;
|
||||||
end;
|
end;
|
||||||
DrawingEngine.TextOut(pt.X - extent.CX div 2, pt.Y + 5, s);
|
DrawingEngine.TextOut(P.X - txtExtent.CX div 2, P.Y + 5, txt);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
pt := Engine.LatLonToScreen(APt.RealPoint);
|
// Custom-draw the point. Note that cyclic points must be handled in the event handler.
|
||||||
|
if GetPluginManager.DrawGpsPoint(Self, DrawingEngine, APt) then
|
||||||
|
exit;
|
||||||
|
if Assigned(FOnDrawGpsPoint) then begin
|
||||||
|
FOnDrawGpsPoint(Self, DrawingEngine, APt);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
OldOpacity := DrawingEngine.Opacity;
|
savedOpacity := DrawingEngine.Opacity;
|
||||||
OldPenStyle := DrawingEngine.PenStyle;
|
savedPen := DrawingEngine.GetPen;
|
||||||
bmp := Nil;
|
bmp := nil;
|
||||||
try
|
try
|
||||||
DrawingEngine.Opacity := 1.0;
|
DrawingEngine.Opacity := 1.0;
|
||||||
DrawingEngine.PenStyle := psSolid;
|
|
||||||
|
|
||||||
// Draw point as symbol from image list ...
|
// Prepare point image as symbol from image list ...
|
||||||
if Assigned(FPOIImages) and (APt.ImageIndex <> -1) and (APt.ImageIndex < FPOIImages.Count) then
|
if Assigned(FPOIImages) and (AImageIndex <> -1) and (AImageIndex < FPOIImages.Count) then
|
||||||
begin
|
begin
|
||||||
bmp := TBitmap.Create;
|
bmp := TBitmap.Create;
|
||||||
FPOIImages.GetBitmap(APt.ImageIndex, bmp);
|
FPOIImages.GetBitmap(AImageIndex, bmp);
|
||||||
{$IF LCL_FullVersion >= 2000000}
|
{$IF LCL_FullVersion >= 2000000}
|
||||||
w := FPOIImages.WidthForPPI[FPOIImagesWidth, Font.PixelsPerInch];
|
wBmp := FPOIImages.WidthForPPI[FPOIImagesWidth, Font.PixelsPerInch];
|
||||||
h := FPOIImages.HeightForPPI[FPOIImagesWidth, Font.PixelsPerInch];
|
hBmp := FPOIImages.HeightForPPI[FPOIImagesWidth, Font.PixelsPerInch];
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
w := FPOIImages.Width;
|
wBmp := FPOIImages.Width;
|
||||||
h := FPOIImages.Height;
|
hBmp := FPOIImages.Height;
|
||||||
{$IFEND}
|
{$IFEND}
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
// Otherwise prepare default point
|
||||||
|
ptColor := clRed;
|
||||||
|
if APt.ExtraData <> nil then
|
||||||
|
begin
|
||||||
|
if APt.ExtraData.InheritsFrom(TDrawingExtraData) then
|
||||||
|
ptColor := TDrawingExtraData(APt.ExtraData).Color;
|
||||||
|
end;
|
||||||
|
DrawingEngine.PenStyle := psSolid;
|
||||||
|
DrawingEngine.PenWidth := 3;
|
||||||
|
DrawingEngine.PenColor := ptColor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Draw point text
|
// Prepare point text
|
||||||
s := APt.Name;
|
txt := APt.Name;
|
||||||
if FPOITextBgColor <> clNone then
|
if FPOITextBgColor <> clNone then
|
||||||
s := ' ' + s + ' ';
|
txt := ' ' + txt + ' '; // add some margin
|
||||||
extent := DrawingEngine.TextExtent(s);
|
txtExtent := DrawingEngine.TextExtent(txt);
|
||||||
|
|
||||||
|
// Draw point, in case of cyclic points multiple times.
|
||||||
|
pt := Engine.LatLonToScreen(APt.RealPoint);
|
||||||
if Cyclic then
|
if Cyclic then
|
||||||
begin
|
begin
|
||||||
ptCyc := CyclicPointsOf(pt);
|
ptCyc := CyclicPointsOf(pt);
|
||||||
@ -3116,62 +3152,19 @@ begin
|
|||||||
DrawOne(pt);
|
DrawOne(pt);
|
||||||
finally
|
finally
|
||||||
bmp.Free;
|
bmp.Free;
|
||||||
DrawingEngine.Opacity := OldOpacity;
|
DrawingEngine.Opacity := savedOpacity;
|
||||||
DrawingEngine.PenStyle := OldPenStyle;
|
DrawingEngine.SetPen(savedPen);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMapView.DrawPt(const Area: TRealArea; APt: TGPSPoint);
|
procedure TMapView.DrawPointOfInterest(const Area: TRealArea; APt: TGPSPointOfInterest);
|
||||||
var
|
|
||||||
Pt: TPoint;
|
|
||||||
PtCyc: TPointArray;
|
|
||||||
PtColor: TColor;
|
|
||||||
extent: TSize;
|
|
||||||
s: String;
|
|
||||||
|
|
||||||
procedure DrawOne(Pt: TPoint);
|
|
||||||
begin
|
|
||||||
// Draw point marker
|
|
||||||
if Assigned(FPOIImage) and not (FPOIImage.Empty) then
|
|
||||||
DrawingEngine.DrawBitmap(Pt.X - FPOIImage.Width div 2, Pt.Y - FPOIImage.Height, FPOIImage, true)
|
|
||||||
else begin
|
|
||||||
DrawingEngine.PenColor := ptColor;
|
|
||||||
DrawingEngine.PenWidth := 3;
|
|
||||||
DrawingEngine.Line(Pt.X, Pt.Y - 5, Pt.X, Pt.Y + 5);
|
|
||||||
DrawingEngine.Line(Pt.X - 5, Pt.Y, Pt.X + 5, Pt.Y);
|
|
||||||
Pt.Y := Pt.Y + 5;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Draw point text
|
|
||||||
s := APt.Name;
|
|
||||||
if FPOITextBgColor = clNone then
|
|
||||||
DrawingEngine.BrushStyle := bsClear
|
|
||||||
else begin
|
|
||||||
DrawingEngine.BrushStyle := bsSolid;
|
|
||||||
DrawingEngine.BrushColor := FPOITextBgColor;
|
|
||||||
s := ' ' + s + ' ';
|
|
||||||
end;
|
|
||||||
extent := DrawingEngine.TextExtent(s);
|
|
||||||
DrawingEngine.Textout(Pt.X - extent.CX div 2, Pt.Y + 5, s);
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnDrawGpsPoint) then begin
|
DoDrawPoint(ARea, APt, APt.ImageIndex);
|
||||||
FOnDrawGpsPoint(Self, DrawingEngine, APt);
|
end;
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
Pt := Engine.LatLonToScreen(APt.RealPoint);
|
procedure TMapView.DrawPt(const Area: TRealArea; APt: TGPSPoint);
|
||||||
PtColor := clRed;
|
begin
|
||||||
if APt.ExtraData <> nil then
|
DoDrawPoint(Area, APt, -1);
|
||||||
begin
|
|
||||||
if APt.ExtraData.inheritsFrom(TDrawingExtraData) then
|
|
||||||
PtColor := TDrawingExtraData(APt.ExtraData).Color;
|
|
||||||
end;
|
|
||||||
|
|
||||||
PtCyc := CyclicPointsOf(Pt);
|
|
||||||
for Pt in PtCyc do
|
|
||||||
DrawOne(Pt);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMapView.DrawGpsObj(const Area: TRealArea; AObj: TGPSObj);
|
procedure TMapView.DrawGpsObj(const Area: TRealArea; AObj: TGPSObj);
|
||||||
@ -3251,7 +3244,7 @@ begin
|
|||||||
if Assigned(TileImg) then
|
if Assigned(TileImg) then
|
||||||
DrawingEngine.DrawScaledCacheItem(Rect(X, Y, X + TileSize.CX, Y + TileSize.CY), R, TileImg)
|
DrawingEngine.DrawScaledCacheItem(Rect(X, Y, X + TileSize.CX, Y + TileSize.CY), R, TileImg)
|
||||||
else
|
else
|
||||||
DrawingEngine.FillPixels(X, Y, X + TileSize.CX, Y + TileSize.CY, InactiveColor);
|
DoDrawMissingTile(Rect(X, Y, X+TileSize.CX, Y+TileSize.CY));
|
||||||
|
|
||||||
if FDebugTiles then
|
if FDebugTiles then
|
||||||
DoDrawTileInfo(TileID, X, Y);
|
DoDrawTileInfo(TileID, X, Y);
|
||||||
@ -3263,13 +3256,24 @@ begin
|
|||||||
if Assigned(TileImg) then
|
if Assigned(TileImg) then
|
||||||
DrawingEngine.DrawCacheItem(X, Y, TileImg)
|
DrawingEngine.DrawCacheItem(X, Y, TileImg)
|
||||||
else
|
else
|
||||||
DrawingEngine.FillPixels(X, Y, X + TileSize.CX, Y + TileSize.CY, InactiveColor);
|
DoDrawMissingTile(Rect(X, Y, X+TileSize.CX, Y+TileSize.CY));
|
||||||
|
|
||||||
if FDebugTiles then
|
if FDebugTiles then
|
||||||
DoDrawTileInfo(TileID, X, Y);
|
DoDrawTileInfo(TileID, X, Y);
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMapView.DoDrawMissingTile(const ARect: TRect);
|
||||||
|
var
|
||||||
|
lHandled: Boolean;
|
||||||
|
begin
|
||||||
|
lHandled := PluginManager.DrawMissingTile(Self, DrawingEngine, ARect);
|
||||||
|
if (not lHandled) and Assigned(FOnDrawMissingTile) then
|
||||||
|
FOnDrawMissingTile(Self, DrawingEngine, ARect)
|
||||||
|
else
|
||||||
|
DrawingEngine.FillPixels(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, InactiveColor);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMapView.DoDrawTileInfo(const TileID: TTileID; X, Y: Integer);
|
procedure TMapView.DoDrawTileInfo(const TileID: TTileID; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
DrawingEngine.PenColor := clGray;
|
DrawingEngine.PenColor := clGray;
|
||||||
@ -4437,6 +4441,20 @@ begin
|
|||||||
Result := false;
|
Result := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TMvCustomPluginManager.DrawGPSPoint(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; APoint: TGPSPoint): Boolean;
|
||||||
|
begin
|
||||||
|
Unused(AMapView, ADrawingEngine, APoint);
|
||||||
|
Result := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMvCustomPluginManager.DrawMissingTile(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; const ARect: TRect): Boolean;
|
||||||
|
begin
|
||||||
|
Unused(AMapView, ADrawingEngine, ARect);
|
||||||
|
Result := false;
|
||||||
|
end;
|
||||||
|
|
||||||
function TMvCustomPluginManager.GPSItemsModified(AMapView: TMapView;
|
function TMvCustomPluginManager.GPSItemsModified(AMapView: TMapView;
|
||||||
ModifiedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean): Boolean;
|
ModifiedList: TGPSObjectList; ActualObjs: TGPSObjList; Adding: Boolean): Boolean;
|
||||||
begin
|
begin
|
||||||
|
@ -7,7 +7,7 @@ interface
|
|||||||
uses
|
uses
|
||||||
Classes, SysUtils, StrUtils, Contnrs, Math, LazLoggerBase,
|
Classes, SysUtils, StrUtils, Contnrs, Math, LazLoggerBase,
|
||||||
Graphics, Controls, Dialogs,
|
Graphics, Controls, Dialogs,
|
||||||
mvMapViewer, mvTypes, mvGpsObj, mvClassRegistration;
|
mvMapViewer, mvTypes, mvGpsObj, mvClassRegistration, mvDrawingEngine;
|
||||||
|
|
||||||
type
|
type
|
||||||
TMvCustomPlugin = class;
|
TMvCustomPlugin = class;
|
||||||
@ -51,6 +51,10 @@ type
|
|||||||
procedure CenterMove(AMapView: TMapView; var Handled: Boolean); virtual;
|
procedure CenterMove(AMapView: TMapView; var Handled: Boolean); virtual;
|
||||||
procedure CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
procedure CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
||||||
var Allow, Handled: Boolean); virtual;
|
var Allow, Handled: Boolean); virtual;
|
||||||
|
procedure DrawGPSPoint(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
APoint: TGPSPoint; var Handled: Boolean); virtual;
|
||||||
|
procedure DrawMissingTile(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
const ARect: TRect; var Handled: Boolean); virtual;
|
||||||
procedure GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
procedure GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
||||||
ActualObjs: TGPSObjList; Adding: Boolean; var Handled: Boolean); virtual;
|
ActualObjs: TGPSObjList; Adding: Boolean; var Handled: Boolean); virtual;
|
||||||
procedure MouseDown(AMapView: TMapView; Button: TMouseButton; Shift: TShiftState;
|
procedure MouseDown(AMapView: TMapView; Button: TMouseButton; Shift: TShiftState;
|
||||||
@ -188,6 +192,10 @@ type
|
|||||||
function CenterMove(AMapView: TMapView): Boolean; override;
|
function CenterMove(AMapView: TMapView): Boolean; override;
|
||||||
function CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
function CenterMoving(AMapView: TMapView; var NewCenter: TRealPoint;
|
||||||
var Allow: Boolean): Boolean; override;
|
var Allow: Boolean): Boolean; override;
|
||||||
|
function DrawGPSPoint(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
APoint: TGPSPoint): Boolean; override;
|
||||||
|
function DrawMissingTile(AMapView: TMapView; ADrawingEngine: TMvCustomDrawingEngine;
|
||||||
|
const ARect: TRect): Boolean; override;
|
||||||
function GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
function GPSItemsModified(AMapView: TMapView; ModifiedList: TGPSObjectList;
|
||||||
ActualObjs: TGPSObjList; Adding: Boolean): Boolean; override;
|
ActualObjs: TGPSObjList; Adding: Boolean): Boolean; override;
|
||||||
function MouseDown(AMapView: TMapView; AButton: TMouseButton; AShift: TShiftState;
|
function MouseDown(AMapView: TMapView; AButton: TMouseButton; AShift: TShiftState;
|
||||||
@ -300,6 +308,20 @@ begin
|
|||||||
Unused(NewCenter, Allow);
|
Unused(NewCenter, Allow);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMvCustomPlugin.DrawGPSPoint(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; APoint: TGPSPoint; var Handled: Boolean);
|
||||||
|
begin
|
||||||
|
Unused(AMapView, Handled);
|
||||||
|
Unused(ADrawingEngine, APoint);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMvCustomPlugin.DrawMissingTile(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; const ARect: TRect; var Handled: Boolean);
|
||||||
|
begin
|
||||||
|
Unused(AMapView, Handled);
|
||||||
|
Unused(ADrawingEngine, ARect);
|
||||||
|
end;
|
||||||
|
|
||||||
function TMvCustomPlugin.GetIndex: Integer;
|
function TMvCustomPlugin.GetIndex: Integer;
|
||||||
begin
|
begin
|
||||||
if FPluginManager = nil then
|
if FPluginManager = nil then
|
||||||
@ -772,6 +794,36 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TMvPluginManager.DrawGPSPoint(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; APoint: TGPSPoint): Boolean;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
plugin: TMvCustomPlugin;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
for i := 0 to FPluginList.Count-1 do
|
||||||
|
begin
|
||||||
|
plugin := Item[i];
|
||||||
|
if HandlePlugin(plugin, AMapView) then
|
||||||
|
plugin.DrawGPSPoint(AMapView, ADrawingEngine, APoint, Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMvPluginManager.DrawMissingTile(AMapView: TMapView;
|
||||||
|
ADrawingEngine: TMvCustomDrawingEngine; const ARect: TRect): Boolean;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
plugin: TMvCustomPlugin;
|
||||||
|
begin
|
||||||
|
Result := false;
|
||||||
|
for i := 0 to FPluginList.Count-1 do
|
||||||
|
begin
|
||||||
|
plugin := Item[i];
|
||||||
|
if HandlePlugin(plugin, AMapView) then
|
||||||
|
plugin.DrawMissingTile(AMapView, ADrawingEngine, ARect, Result);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMvPluginManager.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
procedure TMvPluginManager.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
||||||
var
|
var
|
||||||
plugin: TMvCustomPlugin;
|
plugin: TMvCustomPlugin;
|
||||||
|
Loading…
Reference in New Issue
Block a user