From 87fe1be7d22b8f1bf27695e6978d3499fb638d7e Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 23 Sep 2016 14:46:20 +0200 Subject: [PATCH 01/36] Multiple tracks wip --- PBMap.pb | 125 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 52 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 2c4b00e..4fffbce 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -40,6 +40,7 @@ DeclareModule PBMap #MODE_SELECT = 2 #MODE_EDIT = 3 + ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) Declare LoadOptions(PreferencesFile.s = "PBMap.prefs") @@ -50,7 +51,8 @@ DeclareModule PBMap Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() Declare SetZoom(Zoom.i, mode.i = #PB_Relative) - Declare ZoomToArea() + Declare ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) + Declare ZoomToTracks(*Tracks) Declare SetCallBackLocation(*CallBackLocation) Declare SetCallBackMainPointer(CallBackMainPointer.i) Declare SetMapScaleUnit(ScaleUnit=PBMAP::#SCALE_KM) @@ -176,6 +178,10 @@ Module PBMap ServerURL.s ; Web URL ex: http://tile.openstreetmap.org/ EndStructure + Structure Tracks + List Track.GeographicCoordinates() ; To display a GPX track + EndStructure + ;-PBMap Structure Structure PBMap Window.i ; Parent Window @@ -206,7 +212,7 @@ Module PBMap Moving.i Dirty.i ; To signal that drawing need a refresh - List track.GeographicCoordinates() ; To display a GPX track + List TracksList.Tracks() List Markers.Marker() ; To diplay marker EditMarker.l @@ -667,21 +673,23 @@ Module PBMap Protected *MainNode,*subNode,*child,child.l *MainNode=MainXMLNode(0) *MainNode=XMLNodeFromPath(*MainNode,"/gpx/trk/trkseg") - ClearList(PBMap\track()) + Protected *NewTrack.Tracks = AddElement(PBMap\TracksList()) + ;ClearList(PBMap\track()) For child = 1 To XMLChildCount(*MainNode) *child = ChildXMLNode(*MainNode, child) - AddElement(PBMap\track()) + AddElement(*NewTrack\Track()) If ExamineXMLAttributes(*child) While NextXMLAttribute(*child) Select XMLAttributeName(*child) Case "lat" - PBMap\track()\Latitude=ValD(XMLAttributeValue(*child)) + *NewTrack\Track()\Latitude=ValD(XMLAttributeValue(*child)) Case "lon" - PBMap\track()\Longitude=ValD(XMLAttributeValue(*child)) + *NewTrack\Track()\Longitude=ValD(XMLAttributeValue(*child)) EndSelect Wend EndIf Next + ZoomToTracks(LastElement(PBMap\TracksList())) ; <-To center the view, and zoom on the tracks EndIf EndProcedure @@ -1002,47 +1010,51 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure - Procedure DrawTrack(*Drawing.DrawingParameters) + Procedure DrawTracks(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates Protected km.f, memKm.i - If ListSize(PBMap\track())>0 - ;Trace Track - ForEach PBMap\track() + ;Trace Track + ForEach PBMap\TracksList() + ForEach PBMap\TracksList()\Track() ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 - LatLon2PixelRel(@PBMap\track(), @Pixel, PBMap\Zoom) - If ListIndex(PBMap\track())=0 + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If ListIndex(PBMap\TracksList()\Track()) = 0 MovePathCursor(Pixel\X, Pixel\Y) Else AddPathLine(Pixel\X, Pixel\Y) - EndIf + EndIf ;EndIf Next VectorSourceColor(RGBA(0, 255, 0, 150)) StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) - ;Draw Distance - ForEach PBMap\track() - ;Test Distance - If ListIndex(PBMap\track())=0 - Location\Latitude=PBMap\track()\Latitude - Location\Longitude=PBMap\track()\Longitude - Else - km=km+HaversineInKM(@Location,@PBMap\track()) ;<- display Distance - Location\Latitude=PBMap\track()\Latitude - Location\Longitude=PBMap\track()\Longitude - EndIf - If PBMap\Options\TrackShowKms - LatLon2PixelRel(@PBMap\track(),@Pixel, PBMap\Zoom) - If Int(km)<>memKm - memKm=Int(km) - If PBMap\Zoom>10 - BeginVectorLayer() + Next + ;Draw Distance + If PBMap\Options\TrackShowKms + BeginVectorLayer() + ForEach PBMap\TracksList() + km = 0 + ForEach PBMap\TracksList()\Track() + ;Test Distance + If ListIndex(PBMap\TracksList()\Track()) = 0 + Location\Latitude = PBMap\TracksList()\Track()\Latitude + Location\Longitude = PBMap\TracksList()\Track()\Longitude + Else + km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) + Location\Latitude = PBMap\TracksList()\Track()\Latitude + Location\Longitude = PBMap\TracksList()\Track()\Longitude + EndIf + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If Int(km) <> memKm + memKm = Int(km) + If PBMap\Zoom > 10 + TrackPointer(Pixel\X , Pixel\Y, Int(km)) - EndVectorLayer() EndIf EndIf - EndIf + Next Next + EndVectorLayer() EndIf EndProcedure @@ -1174,7 +1186,7 @@ Module PBMap DrawTiles(*Drawing, ListIndex(PBMap\Layers())) Next If PBMap\Options\ShowTrack - DrawTrack(*Drawing) + DrawTracks(*Drawing) EndIf If PBMap\Options\ShowMarkers DrawMarkers() @@ -1252,24 +1264,9 @@ Module PBMap EndIf EndProcedure - Procedure ZoomToArea() + Procedure ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) ;Source => http://gis.stackexchange.com/questions/19632/how-to-calculate-the-optimal-zoom-level-to-display-two-or-more-points-on-a-map ;bounding box in long/lat coords (x=long, y=lat) - Protected MinY.d,MaxY.d,MinX.d,MaxX.d - ForEach PBMap\track() - If ListIndex(PBMap\track())=0 Or PBMap\track()\LongitudeMaxX - MaxX=PBMap\track()\Longitude - EndIf - If ListIndex(PBMap\track())=0 Or PBMap\track()\LatitudeMaxY - MaxY=PBMap\track()\Latitude - EndIf - Next Protected DeltaX.d=MaxX-MinX ;assumption ! In original code DeltaX have no source Protected centerX.d=MinX+DeltaX/2 ; assumption ! In original code CenterX have no source Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. @@ -1294,6 +1291,31 @@ Module PBMap EndIf EndProcedure + Procedure ZoomToTracks(*Tracks.Tracks) + Protected MinY.d, MaxY.d, MinX.d, MaxX.d + If ListSize(*Tracks\Track()) > 0 + With *Tracks\Track() + FirstElement(*Tracks\Track()) + MinX = \Longitude : MaxX = MinX : MinY = \Latitude : MaxY = MinY + ForEach *Tracks\Track() + If \Longitude < MinX + MinX = \Longitude + EndIf + If \Longitude > MaxX + MaxX = \Longitude + EndIf + If \Latitude < MinY + MinY = \Latitude + EndIf + If \Latitude > MaxY + MaxY = \Latitude + EndIf + Next + ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) + EndWith + EndIf + EndProcedure + Procedure SetZoom(Zoom.i, mode.i = #PB_Relative) Select mode Case #PB_Relative @@ -1712,7 +1734,6 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetZoom( - 1) Case #Gdt_LoadGpx PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) - PBMap::ZoomToArea() ; <-To center the view, and zoom on the tracks Case #StringLatitude, #StringLongitude Select EventType() Case #PB_EventType_LostFocus @@ -1744,8 +1765,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1500 -; FirstLine = 1478 +; CursorPosition = 1035 +; FirstLine = 1013 ; Folding = ------------- ; EnableThread ; EnableXP From 578a8b7c8b42c411dce3ab87d0a0cb35706a6b54 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 23 Sep 2016 16:20:50 +0200 Subject: [PATCH 02/36] Revert "Multiple tracks wip" This reverts commit 87fe1be7d22b8f1bf27695e6978d3499fb638d7e. --- PBMap.pb | 125 +++++++++++++++++++++++-------------------------------- 1 file changed, 52 insertions(+), 73 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 4fffbce..2c4b00e 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -40,7 +40,6 @@ DeclareModule PBMap #MODE_SELECT = 2 #MODE_EDIT = 3 - ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) Declare LoadOptions(PreferencesFile.s = "PBMap.prefs") @@ -51,8 +50,7 @@ DeclareModule PBMap Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() Declare SetZoom(Zoom.i, mode.i = #PB_Relative) - Declare ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) - Declare ZoomToTracks(*Tracks) + Declare ZoomToArea() Declare SetCallBackLocation(*CallBackLocation) Declare SetCallBackMainPointer(CallBackMainPointer.i) Declare SetMapScaleUnit(ScaleUnit=PBMAP::#SCALE_KM) @@ -178,10 +176,6 @@ Module PBMap ServerURL.s ; Web URL ex: http://tile.openstreetmap.org/ EndStructure - Structure Tracks - List Track.GeographicCoordinates() ; To display a GPX track - EndStructure - ;-PBMap Structure Structure PBMap Window.i ; Parent Window @@ -212,7 +206,7 @@ Module PBMap Moving.i Dirty.i ; To signal that drawing need a refresh - List TracksList.Tracks() + List track.GeographicCoordinates() ; To display a GPX track List Markers.Marker() ; To diplay marker EditMarker.l @@ -673,23 +667,21 @@ Module PBMap Protected *MainNode,*subNode,*child,child.l *MainNode=MainXMLNode(0) *MainNode=XMLNodeFromPath(*MainNode,"/gpx/trk/trkseg") - Protected *NewTrack.Tracks = AddElement(PBMap\TracksList()) - ;ClearList(PBMap\track()) + ClearList(PBMap\track()) For child = 1 To XMLChildCount(*MainNode) *child = ChildXMLNode(*MainNode, child) - AddElement(*NewTrack\Track()) + AddElement(PBMap\track()) If ExamineXMLAttributes(*child) While NextXMLAttribute(*child) Select XMLAttributeName(*child) Case "lat" - *NewTrack\Track()\Latitude=ValD(XMLAttributeValue(*child)) + PBMap\track()\Latitude=ValD(XMLAttributeValue(*child)) Case "lon" - *NewTrack\Track()\Longitude=ValD(XMLAttributeValue(*child)) + PBMap\track()\Longitude=ValD(XMLAttributeValue(*child)) EndSelect Wend EndIf Next - ZoomToTracks(LastElement(PBMap\TracksList())) ; <-To center the view, and zoom on the tracks EndIf EndProcedure @@ -1010,51 +1002,47 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure - Procedure DrawTracks(*Drawing.DrawingParameters) + Procedure DrawTrack(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates Protected km.f, memKm.i - ;Trace Track - ForEach PBMap\TracksList() - ForEach PBMap\TracksList()\Track() + If ListSize(PBMap\track())>0 + ;Trace Track + ForEach PBMap\track() ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 - LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) - If ListIndex(PBMap\TracksList()\Track()) = 0 + LatLon2PixelRel(@PBMap\track(), @Pixel, PBMap\Zoom) + If ListIndex(PBMap\track())=0 MovePathCursor(Pixel\X, Pixel\Y) Else AddPathLine(Pixel\X, Pixel\Y) - EndIf + EndIf ;EndIf Next VectorSourceColor(RGBA(0, 255, 0, 150)) StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) - Next - ;Draw Distance - If PBMap\Options\TrackShowKms - BeginVectorLayer() - ForEach PBMap\TracksList() - km = 0 - ForEach PBMap\TracksList()\Track() - ;Test Distance - If ListIndex(PBMap\TracksList()\Track()) = 0 - Location\Latitude = PBMap\TracksList()\Track()\Latitude - Location\Longitude = PBMap\TracksList()\Track()\Longitude - Else - km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) - Location\Latitude = PBMap\TracksList()\Track()\Latitude - Location\Longitude = PBMap\TracksList()\Track()\Longitude - EndIf - LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) - If Int(km) <> memKm - memKm = Int(km) - If PBMap\Zoom > 10 - + ;Draw Distance + ForEach PBMap\track() + ;Test Distance + If ListIndex(PBMap\track())=0 + Location\Latitude=PBMap\track()\Latitude + Location\Longitude=PBMap\track()\Longitude + Else + km=km+HaversineInKM(@Location,@PBMap\track()) ;<- display Distance + Location\Latitude=PBMap\track()\Latitude + Location\Longitude=PBMap\track()\Longitude + EndIf + If PBMap\Options\TrackShowKms + LatLon2PixelRel(@PBMap\track(),@Pixel, PBMap\Zoom) + If Int(km)<>memKm + memKm=Int(km) + If PBMap\Zoom>10 + BeginVectorLayer() TrackPointer(Pixel\X , Pixel\Y, Int(km)) + EndVectorLayer() EndIf EndIf - Next + EndIf Next - EndVectorLayer() EndIf EndProcedure @@ -1186,7 +1174,7 @@ Module PBMap DrawTiles(*Drawing, ListIndex(PBMap\Layers())) Next If PBMap\Options\ShowTrack - DrawTracks(*Drawing) + DrawTrack(*Drawing) EndIf If PBMap\Options\ShowMarkers DrawMarkers() @@ -1264,9 +1252,24 @@ Module PBMap EndIf EndProcedure - Procedure ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) + Procedure ZoomToArea() ;Source => http://gis.stackexchange.com/questions/19632/how-to-calculate-the-optimal-zoom-level-to-display-two-or-more-points-on-a-map ;bounding box in long/lat coords (x=long, y=lat) + Protected MinY.d,MaxY.d,MinX.d,MaxX.d + ForEach PBMap\track() + If ListIndex(PBMap\track())=0 Or PBMap\track()\LongitudeMaxX + MaxX=PBMap\track()\Longitude + EndIf + If ListIndex(PBMap\track())=0 Or PBMap\track()\LatitudeMaxY + MaxY=PBMap\track()\Latitude + EndIf + Next Protected DeltaX.d=MaxX-MinX ;assumption ! In original code DeltaX have no source Protected centerX.d=MinX+DeltaX/2 ; assumption ! In original code CenterX have no source Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. @@ -1291,31 +1294,6 @@ Module PBMap EndIf EndProcedure - Procedure ZoomToTracks(*Tracks.Tracks) - Protected MinY.d, MaxY.d, MinX.d, MaxX.d - If ListSize(*Tracks\Track()) > 0 - With *Tracks\Track() - FirstElement(*Tracks\Track()) - MinX = \Longitude : MaxX = MinX : MinY = \Latitude : MaxY = MinY - ForEach *Tracks\Track() - If \Longitude < MinX - MinX = \Longitude - EndIf - If \Longitude > MaxX - MaxX = \Longitude - EndIf - If \Latitude < MinY - MinY = \Latitude - EndIf - If \Latitude > MaxY - MaxY = \Latitude - EndIf - Next - ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) - EndWith - EndIf - EndProcedure - Procedure SetZoom(Zoom.i, mode.i = #PB_Relative) Select mode Case #PB_Relative @@ -1734,6 +1712,7 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetZoom( - 1) Case #Gdt_LoadGpx PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) + PBMap::ZoomToArea() ; <-To center the view, and zoom on the tracks Case #StringLatitude, #StringLongitude Select EventType() Case #PB_EventType_LostFocus @@ -1765,8 +1744,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1035 -; FirstLine = 1013 +; CursorPosition = 1500 +; FirstLine = 1478 ; Folding = ------------- ; EnableThread ; EnableXP From 6eb134d36a4bd51f85001822125697da77277eee Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 23 Sep 2016 16:21:44 +0200 Subject: [PATCH 03/36] Revert "CTRL key multiselect" This reverts commit 1089eb80b0a61d722743115a4fe2b3c4519411bf. --- PBMap.pb | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 2c4b00e..f35ecb6 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -1401,22 +1401,21 @@ Module PBMap Procedure CanvasEvents() Protected MouseX.i, MouseY.i Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize - Protected key.s, Touch.i - Static CtrlKey + Protected key.s, Touch.i, CtrlKey.i PBMap\Moving = #False Select EventType() Case #PB_EventType_KeyUp Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) Case #PB_Shortcut_Delete DeleteSelectedMarkers() + Case #PB_Canvas_Control + CtrlKey = #False + EndSelect + Case #PB_EventType_KeyDown + Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) + Case #PB_Canvas_Control + CtrlKey = #True EndSelect - If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control = 0 - CtrlKey = #False - EndIf - Case #PB_EventType_KeyDown - If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control <> 0 - CtrlKey = #True - EndIf Case #PB_EventType_LeftDoubleClick If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT ;Check if the mouse touch a marker, if so, jump to it @@ -1456,9 +1455,7 @@ Module PBMap PBMap\EditMarker = #False ;Check if we select marker(s) ForEach PBMap\Markers() - If CtrlKey = #False - PBMap\Markers()\Selected = #False ;If no CTRL key, deselect everything and select only the focused marker - EndIf + PBMap\Markers()\Selected = #False If PBMap\Markers()\Focus PBMap\Markers()\Selected = #True PBMap\EditMarker = #True;ListIndex(PBMap\Markers()) @@ -1744,8 +1741,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1500 -; FirstLine = 1478 +; CursorPosition = 1514 +; FirstLine = 1487 ; Folding = ------------- ; EnableThread ; EnableXP From ad0533a8260146ffda9977f4cf65451f2aa84309 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 23 Sep 2016 16:34:38 +0200 Subject: [PATCH 04/36] CTRL Key multiselect + Multiple tracks TODO : debunk the faulty image bug --- PBMap.pb | 166 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 68 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index f35ecb6..45309a7 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -40,6 +40,7 @@ DeclareModule PBMap #MODE_SELECT = 2 #MODE_EDIT = 3 + ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) Declare LoadOptions(PreferencesFile.s = "PBMap.prefs") @@ -50,7 +51,8 @@ DeclareModule PBMap Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() Declare SetZoom(Zoom.i, mode.i = #PB_Relative) - Declare ZoomToArea() + Declare ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) + Declare ZoomToTracks(*Tracks) Declare SetCallBackLocation(*CallBackLocation) Declare SetCallBackMainPointer(CallBackMainPointer.i) Declare SetMapScaleUnit(ScaleUnit=PBMAP::#SCALE_KM) @@ -176,6 +178,10 @@ Module PBMap ServerURL.s ; Web URL ex: http://tile.openstreetmap.org/ EndStructure + Structure Tracks + List Track.GeographicCoordinates() ; To display a GPX track + EndStructure + ;-PBMap Structure Structure PBMap Window.i ; Parent Window @@ -206,7 +212,7 @@ Module PBMap Moving.i Dirty.i ; To signal that drawing need a refresh - List track.GeographicCoordinates() ; To display a GPX track + List TracksList.Tracks() List Markers.Marker() ; To diplay marker EditMarker.l @@ -667,21 +673,23 @@ Module PBMap Protected *MainNode,*subNode,*child,child.l *MainNode=MainXMLNode(0) *MainNode=XMLNodeFromPath(*MainNode,"/gpx/trk/trkseg") - ClearList(PBMap\track()) + Protected *NewTrack.Tracks = AddElement(PBMap\TracksList()) + ;ClearList(PBMap\track()) For child = 1 To XMLChildCount(*MainNode) *child = ChildXMLNode(*MainNode, child) - AddElement(PBMap\track()) + AddElement(*NewTrack\Track()) If ExamineXMLAttributes(*child) While NextXMLAttribute(*child) Select XMLAttributeName(*child) Case "lat" - PBMap\track()\Latitude=ValD(XMLAttributeValue(*child)) + *NewTrack\Track()\Latitude=ValD(XMLAttributeValue(*child)) Case "lon" - PBMap\track()\Longitude=ValD(XMLAttributeValue(*child)) + *NewTrack\Track()\Longitude=ValD(XMLAttributeValue(*child)) EndSelect Wend EndIf Next + ZoomToTracks(LastElement(PBMap\TracksList())) ; <-To center the view, and zoom on the tracks EndIf EndProcedure @@ -1002,47 +1010,56 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure - Procedure DrawTrack(*Drawing.DrawingParameters) + Procedure DrawTracks(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates Protected km.f, memKm.i - If ListSize(PBMap\track())>0 - ;Trace Track - ForEach PBMap\track() - ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 - LatLon2PixelRel(@PBMap\track(), @Pixel, PBMap\Zoom) - If ListIndex(PBMap\track())=0 - MovePathCursor(Pixel\X, Pixel\Y) - Else - AddPathLine(Pixel\X, Pixel\Y) - EndIf - ;EndIf - Next - VectorSourceColor(RGBA(0, 255, 0, 150)) - StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) - ;Draw Distance - ForEach PBMap\track() - ;Test Distance - If ListIndex(PBMap\track())=0 - Location\Latitude=PBMap\track()\Latitude - Location\Longitude=PBMap\track()\Longitude - Else - km=km+HaversineInKM(@Location,@PBMap\track()) ;<- display Distance - Location\Latitude=PBMap\track()\Latitude - Location\Longitude=PBMap\track()\Longitude + ;Trace Track + If ListSize(PBMap\TracksList()) > 0 + BeginVectorLayer() + ForEach PBMap\TracksList() + If ListSize(PBMap\TracksList()\Track()) > 0 + ForEach PBMap\TracksList()\Track() + ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If ListIndex(PBMap\TracksList()\Track()) = 0 + MovePathCursor(Pixel\X, Pixel\Y) + Else + AddPathLine(Pixel\X, Pixel\Y) + EndIf + ;EndIf + Next + VectorSourceColor(RGBA(0, 255, 0, 150)) + StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) EndIf - If PBMap\Options\TrackShowKms - LatLon2PixelRel(@PBMap\track(),@Pixel, PBMap\Zoom) - If Int(km)<>memKm - memKm=Int(km) - If PBMap\Zoom>10 - BeginVectorLayer() + Next + EndVectorLayer() + EndIf + ;Draw Distance + If PBMap\Options\TrackShowKms And ListSize(PBMap\TracksList()) > 0 + BeginVectorLayer() + ForEach PBMap\TracksList() + km = 0 + ForEach PBMap\TracksList()\Track() + ;Test Distance + If ListIndex(PBMap\TracksList()\Track()) = 0 + Location\Latitude = PBMap\TracksList()\Track()\Latitude + Location\Longitude = PBMap\TracksList()\Track()\Longitude + Else + km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) + Location\Latitude = PBMap\TracksList()\Track()\Latitude + Location\Longitude = PBMap\TracksList()\Track()\Longitude + EndIf + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If Int(km) <> memKm + memKm = Int(km) + If PBMap\Zoom > 10 TrackPointer(Pixel\X , Pixel\Y, Int(km)) - EndVectorLayer() EndIf EndIf - EndIf + Next Next + EndVectorLayer() EndIf EndProcedure @@ -1174,7 +1191,7 @@ Module PBMap DrawTiles(*Drawing, ListIndex(PBMap\Layers())) Next If PBMap\Options\ShowTrack - DrawTrack(*Drawing) + DrawTracks(*Drawing) EndIf If PBMap\Options\ShowMarkers DrawMarkers() @@ -1252,24 +1269,9 @@ Module PBMap EndIf EndProcedure - Procedure ZoomToArea() + Procedure ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) ;Source => http://gis.stackexchange.com/questions/19632/how-to-calculate-the-optimal-zoom-level-to-display-two-or-more-points-on-a-map ;bounding box in long/lat coords (x=long, y=lat) - Protected MinY.d,MaxY.d,MinX.d,MaxX.d - ForEach PBMap\track() - If ListIndex(PBMap\track())=0 Or PBMap\track()\LongitudeMaxX - MaxX=PBMap\track()\Longitude - EndIf - If ListIndex(PBMap\track())=0 Or PBMap\track()\LatitudeMaxY - MaxY=PBMap\track()\Latitude - EndIf - Next Protected DeltaX.d=MaxX-MinX ;assumption ! In original code DeltaX have no source Protected centerX.d=MinX+DeltaX/2 ; assumption ! In original code CenterX have no source Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. @@ -1294,6 +1296,31 @@ Module PBMap EndIf EndProcedure + Procedure ZoomToTracks(*Tracks.Tracks) + Protected MinY.d, MaxY.d, MinX.d, MaxX.d + If ListSize(*Tracks\Track()) > 0 + With *Tracks\Track() + FirstElement(*Tracks\Track()) + MinX = \Longitude : MaxX = MinX : MinY = \Latitude : MaxY = MinY + ForEach *Tracks\Track() + If \Longitude < MinX + MinX = \Longitude + EndIf + If \Longitude > MaxX + MaxX = \Longitude + EndIf + If \Latitude < MinY + MinY = \Latitude + EndIf + If \Latitude > MaxY + MaxY = \Latitude + EndIf + Next + ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) + EndWith + EndIf + EndProcedure + Procedure SetZoom(Zoom.i, mode.i = #PB_Relative) Select mode Case #PB_Relative @@ -1401,21 +1428,22 @@ Module PBMap Procedure CanvasEvents() Protected MouseX.i, MouseY.i Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize - Protected key.s, Touch.i, CtrlKey.i + Protected key.s, Touch.i + Static CtrlKey PBMap\Moving = #False Select EventType() Case #PB_EventType_KeyUp Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) Case #PB_Shortcut_Delete DeleteSelectedMarkers() - Case #PB_Canvas_Control - CtrlKey = #False - EndSelect - Case #PB_EventType_KeyDown - Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) - Case #PB_Canvas_Control - CtrlKey = #True EndSelect + If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control = 0 + CtrlKey = #False + EndIf + Case #PB_EventType_KeyDown + If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control <> 0 + CtrlKey = #True + EndIf Case #PB_EventType_LeftDoubleClick If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT ;Check if the mouse touch a marker, if so, jump to it @@ -1455,7 +1483,9 @@ Module PBMap PBMap\EditMarker = #False ;Check if we select marker(s) ForEach PBMap\Markers() - PBMap\Markers()\Selected = #False + If CtrlKey = #False + PBMap\Markers()\Selected = #False ;If no CTRL key, deselect everything and select only the focused marker + EndIf If PBMap\Markers()\Focus PBMap\Markers()\Selected = #True PBMap\EditMarker = #True;ListIndex(PBMap\Markers()) @@ -1709,7 +1739,6 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetZoom( - 1) Case #Gdt_LoadGpx PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) - PBMap::ZoomToArea() ; <-To center the view, and zoom on the tracks Case #StringLatitude, #StringLongitude Select EventType() Case #PB_EventType_LostFocus @@ -1741,9 +1770,10 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1514 -; FirstLine = 1487 +; CursorPosition = 1195 +; FirstLine = 1169 ; Folding = ------------- ; EnableThread ; EnableXP +; DisableDebugger ; EnableUnicode \ No newline at end of file From a5f68fdc392979639e50a086db93671588c0b8f5 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 23 Sep 2016 17:02:52 +0200 Subject: [PATCH 05/36] Cleanup --- PBMap.pb | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 45309a7..4147195 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -113,8 +113,8 @@ Module PBMap TileCoordinates.Coordinates Bounds.TileBounds Canvas.i - PBMapTileX.i - PBMapTileY.i + ;PBMapTileX.i + ;PBMapTileY.i PBMapZoom.i GeographicCoordinates.GeographicCoordinates CenterX.i @@ -897,6 +897,14 @@ Module PBMap DrawVectorImage(ImageID(PBMap\ImgNothing)) ;EndIf EndIf + If PBMap\Options\ShowDebugInfos + VectorFont(FontID(PBMap\Font), 16) + VectorSourceColor(RGBA(0, 0, 0, 80)) + MovePathCursor(px, py) + DrawVectorText("x:" + Str(tilex)) + MovePathCursor(px, py + 16) + DrawVectorText("y:" + Str(tiley)) + EndIf Next Next EndProcedure @@ -1039,7 +1047,7 @@ Module PBMap If PBMap\Options\TrackShowKms And ListSize(PBMap\TracksList()) > 0 BeginVectorLayer() ForEach PBMap\TracksList() - km = 0 + km = 0 : memKm = -1 ForEach PBMap\TracksList()\Track() ;Test Distance If ListIndex(PBMap\TracksList()\Track()) = 0 @@ -1164,7 +1172,9 @@ Module PBMap EndIf EndIf Next - DrawVectorText(Str(ThreadCounter)) + DrawVectorText(Str(ThreadCounter)) + MovePathCursor(50,110) + DrawVectorText(Str(PBMap\Zoom)) EndProcedure ;-*** Main drawing @@ -1707,7 +1717,7 @@ CompilerIf #PB_Compiler_IsMainFile ;Our main gadget PBMap::InitPBMap(#Window_0) PBMap::SetOption("ShowDegrees", "1") - PBMap::SetOption("ShowDebugInfos", "1") + PBMap::SetOption("ShowDebugInfos", "0") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") PBMap::SetOption("TrackShowKms", "1") @@ -1770,8 +1780,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1195 -; FirstLine = 1169 +; CursorPosition = 1719 +; FirstLine = 1707 ; Folding = ------------- ; EnableThread ; EnableXP From 90f3d8a6a5def73913bbce8cdf93c4dedc1a6ebb Mon Sep 17 00:00:00 2001 From: djes Date: Sat, 24 Sep 2016 12:54:22 +0200 Subject: [PATCH 06/36] esthetic --- PBMap.pb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 2f9aaa1..20d4588 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2,18 +2,14 @@ ; Program: PBMap ; Description: Permits the use of tiled maps like ; OpenStreetMap in a handy PureBASIC module -; Author: Thyphoon, Djes And Idle +; Author: Thyphoon, djes And Idle ; Date: Mai 17, 2016 ; License: Free, unrestricted, credit appreciated ; but not required. ; Note: Please share improvement ! ; Thanks: Progi1984 -; Usage: Change the Proxy global variables if needed -; (see also Proxy Details) ;************************************************************** -;#Red = 255 - CompilerIf #PB_Compiler_Thread = #False MessageRequester("Warning !!","You must enable ThreadSafe support in compiler options",#PB_MessageRequester_Ok ) End @@ -1810,7 +1806,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 11 +; CursorPosition = 24 +; FirstLine = 159 ; Folding = ------------- ; EnableThread ; EnableXP From a79c06299b465111f735ef3ccd04434aa22a22ed Mon Sep 17 00:00:00 2001 From: djes Date: Sun, 25 Sep 2016 18:49:36 +0200 Subject: [PATCH 07/36] New marker with legend by yves86 + colour options wip --- PBMap.pb | 144 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 97 insertions(+), 47 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 20d4588..1373b1f 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -143,6 +143,7 @@ Module PBMap CallBackPointer.i ; @Procedure(X.i, Y.i) to DrawPointer (you must use VectorDrawing lib) EndStructure + ;-Options Structure Option HDDCachePath.s ; Path where to load and save tiles downloaded from server DefaultOSMServer.s ; Base layer OSM server @@ -157,13 +158,15 @@ Module PBMap ShowDebugInfos.i ShowScale.i ShowTrack.i + ShowTrackKms.i ShowMarkers.i ShowPointer.i TimerInterval.i MaxMemCache.i ; in MiB - TrackShowKms.i ShowMarkersNb.i ShowMarkersLegend.i + ;Colours + ColourFocus.i EndStructure Structure Layer @@ -348,6 +351,27 @@ Module PBMap EndSelect EndMacro + Procedure.i ColourString2Value(Value.s) + ;TODO : better string check + Protected Col.s = RemoveString(Value, " ") + If Left(Col, 1) = "$" + Protected r.i, g.i, b.i, a.i = 255 + Select Len(Col) + Case 4 ;RGB (eg : "$9BC" + r = Val("$"+Mid(Col, 2, 1)) : g = Val("$"+Mid(Col, 3, 1)) : b = Val("$"+Mid(Col, 4, 1)) + Case 5 ;RGBA (eg : "$9BC5") + r = Val("$"+Mid(Col, 2, 1)) : g = Val("$"+Mid(Col, 3, 1)) : b = Val("$"+Mid(Col, 4, 1)) : a = Val("$"+Mid(Col, 5, 1)) + Case 7 ;RRGGBB (eg : "$95B4C2") + r = Val("$"+Mid(Col, 2, 2)) : g = Val("$"+Mid(Col, 4, 2)) : b = Val("$"+Mid(Col, 6, 2)) + Case 9 ;RRGGBBAA (eg : "$95B4C249") + r = Val("$"+Mid(Col, 2, 2)) : g = Val("$"+Mid(Col, 4, 2)) : b = Val("$"+Mid(Col, 6, 2)) : a = Val("$"+Mid(Col, 8, 2)) + EndSelect + ProcedureReturn RGBA(r, g, b, a) + Else + ProcedureReturn Val(Value) + EndIf + EndProcedure + Procedure SetOption(Option.s, Value.s) Option = StringCheck(Option) Select LCase(Option) @@ -381,8 +405,10 @@ Module PBMap SelBool(ShowMarkersNb) Case "showmarkerslegend" SelBool(ShowMarkersLegend) - Case "trackshowkms" - SelBool(TrackShowKms) + Case "showtrackkms" + SelBool(ShowTrackKms) + Case "colourfocus" + PBMap\Options\ColourFocus = ColourString2Value(Value) EndSelect EndProcedure @@ -393,28 +419,32 @@ Module PBMap Else CreatePreferences(PreferencesFile) EndIf + With PBMap\Options PreferenceGroup("PROXY") - WritePreferenceInteger("Proxy", PBMap\Options\Proxy) - WritePreferenceString("ProxyURL", PBMap\Options\ProxyURL) - WritePreferenceString("ProxyPort", PBMap\Options\ProxyPort) - WritePreferenceString("ProxyUser", PBMap\Options\ProxyUser) + WritePreferenceInteger("Proxy", \Proxy) + WritePreferenceString("ProxyURL", \ProxyURL) + WritePreferenceString("ProxyPort", \ProxyPort) + WritePreferenceString("ProxyUser", \ProxyUser) PreferenceGroup("URL") - WritePreferenceString("DefaultOSMServer", PBMap\Options\DefaultOSMServer) + WritePreferenceString("DefaultOSMServer", \DefaultOSMServer) PreferenceGroup("PATHS") - WritePreferenceString("TilesCachePath", PBMap\Options\HDDCachePath) + WritePreferenceString("TilesCachePath", \HDDCachePath) PreferenceGroup("OPTIONS") - WritePreferenceInteger("WheelMouseRelative", PBMap\Options\WheelMouseRelative) - WritePreferenceInteger("MaxMemCache", PBMap\Options\MaxMemCache) - WritePreferenceInteger("ShowDegrees", PBMap\Options\ShowDegrees) - WritePreferenceInteger("ShowDebugInfos", PBMap\Options\ShowDebugInfos) - WritePreferenceInteger("ShowScale", PBMap\Options\ShowScale) - WritePreferenceInteger("ShowMarkers", PBMap\Options\ShowMarkers) - WritePreferenceInteger("ShowPointer", PBMap\Options\ShowPointer) - WritePreferenceInteger("ShowTrack", PBMap\Options\ShowTrack) - WritePreferenceInteger("ShowMarkersNb", PBMap\Options\ShowMarkersNb) - WritePreferenceInteger("ShowMarkersLegend", PBMap\Options\ShowMarkersLegend) - WritePreferenceInteger("TrackShowKms", PBMap\Options\TrackShowKms) + WritePreferenceInteger("WheelMouseRelative", \WheelMouseRelative) + WritePreferenceInteger("MaxMemCache", \MaxMemCache) + WritePreferenceInteger("ShowDegrees", \ShowDegrees) + WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) + WritePreferenceInteger("ShowScale", \ShowScale) + WritePreferenceInteger("ShowMarkers", \ShowMarkers) + WritePreferenceInteger("ShowPointer", \ShowPointer) + WritePreferenceInteger("ShowTrack", \ShowTrack) + WritePreferenceInteger("ShowTrackKms", \ShowTrackKms) + WritePreferenceInteger("ShowMarkersNb", \ShowMarkersNb) + WritePreferenceInteger("ShowMarkersLegend", \ShowMarkersLegend) + ;Colours; + WritePreferenceInteger("ColourFocus", \ColourFocus) ClosePreferences() + EndWith EndProcedure Procedure LoadOptions(PreferencesFile.s = "PBMap.prefs") @@ -436,33 +466,37 @@ Module PBMap ; WritePreferenceString("ProxyUser", "myproxyname") ; WritePreferenceString("ProxyPass", "myproxypass") ;TODO !Warning! !not encoded! ; ClosePreferences() + With PBMap\Options PreferenceGroup("PROXY") - PBMap\Options\Proxy = ReadPreferenceInteger("Proxy", #False) - If PBMap\Options\Proxy - PBMap\Options\ProxyURL = ReadPreferenceString("ProxyURL", "") ;InputRequester("ProxyServer", "Do you use a Proxy Server? Then enter the full url:", "") - PBMap\Options\ProxyPort = ReadPreferenceString("ProxyPort", "") ;InputRequester("ProxyPort" , "Do you use a specific port? Then enter it", "") - PBMap\Options\ProxyUser = ReadPreferenceString("ProxyUser", "") ;InputRequester("ProxyUser" , "Do you use a user name? Then enter it", "") - PBMap\Options\ProxyPassword = InputRequester("ProxyPass", "Do you use a password ? Then enter it", "") ;TODO + \Proxy = ReadPreferenceInteger("Proxy", #False) + If \Proxy + \ProxyURL = ReadPreferenceString("ProxyURL", "") ;InputRequester("ProxyServer", "Do you use a Proxy Server? Then enter the full url:", "") + \ProxyPort = ReadPreferenceString("ProxyPort", "") ;InputRequester("ProxyPort" , "Do you use a specific port? Then enter it", "") + \ProxyUser = ReadPreferenceString("ProxyUser", "") ;InputRequester("ProxyUser" , "Do you use a user name? Then enter it", "") + \ProxyPassword = InputRequester("ProxyPass", "Do you use a password ? Then enter it", "") ;TODO EndIf PreferenceGroup("URL") - PBMap\Options\DefaultOSMServer = ReadPreferenceString("DefaultOSMServer", "http://tile.openstreetmap.org/") + \DefaultOSMServer = ReadPreferenceString("DefaultOSMServer", "http://tile.openstreetmap.org/") PreferenceGroup("PATHS") - PBMap\Options\HDDCachePath = ReadPreferenceString("TilesCachePath", GetTemporaryDirectory()) + \HDDCachePath = ReadPreferenceString("TilesCachePath", GetTemporaryDirectory()) PreferenceGroup("OPTIONS") - PBMap\Options\WheelMouseRelative = ReadPreferenceInteger("WheelMouseRelative", #True) - PBMap\Options\MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory - PBMap\Options\ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) - PBMap\Options\ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) - PBMap\Options\ShowScale = ReadPreferenceInteger("ShowScale", #False) - PBMap\Options\ShowMarkers = ReadPreferenceInteger("ShowMarkers", #True) - PBMap\Options\ShowPointer = ReadPreferenceInteger("ShowPointer", #True) - PBMap\Options\ShowTrack = ReadPreferenceInteger("ShowTrack", #True) - PBMap\Options\ShowMarkersNb = ReadPreferenceInteger("ShowMarkersNb", #True) - PBMap\Options\ShowMarkersLegend = ReadPreferenceInteger("ShowMarkersLegend", #False) - PBMap\Options\TrackShowKms = ReadPreferenceInteger("TrackShowKms", #False) - PBMap\Options\TimerInterval = 20 + \WheelMouseRelative = ReadPreferenceInteger("WheelMouseRelative", #True) + \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory + \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) + \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) + \ShowScale = ReadPreferenceInteger("ShowScale", #False) + \ShowMarkers = ReadPreferenceInteger("ShowMarkers", #True) + \ShowPointer = ReadPreferenceInteger("ShowPointer", #True) + \ShowTrack = ReadPreferenceInteger("ShowTrack", #True) + \ShowTrackKms = ReadPreferenceInteger("ShowTrackKms", #False) + \ShowMarkersNb = ReadPreferenceInteger("ShowMarkersNb", #True) + \ShowMarkersLegend = ReadPreferenceInteger("ShowMarkersLegend", #False) + \TimerInterval = 20 + PreferenceGroup("COLOURS") + \ColourFocus = ReadPreferenceInteger("ColourFocus", RGBA(255, 255, 0, 255)) ClosePreferences() + EndWith EndProcedure Procedure InitPBMap(Window) @@ -1041,7 +1075,7 @@ Module PBMap EndVectorLayer() EndIf ;Draw Distance - If PBMap\Options\TrackShowKms And ListSize(PBMap\TracksList()) > 0 + If PBMap\Options\ShowTrackKms And ListSize(PBMap\TracksList()) > 0 BeginVectorLayer() ForEach PBMap\TracksList() km = 0 : memKm = -1 @@ -1069,6 +1103,7 @@ Module PBMap EndProcedure Procedure DrawMarker(x.i, y.i, Nb, Color.l, Legend.s, Focus.i, Selected.i) + ;Nice marker by yves86 VectorSourceColor(color) MovePathCursor(x, y) AddPathLine(-8, -16, #PB_Path_Relative) @@ -1080,10 +1115,10 @@ Module PBMap VectorSourceColor(Color) FillPath(#PB_Path_Preserve) If Focus - VectorSourceColor(RGBA(255, 255, 0, 255)) + VectorSourceColor(PBMap\Options\ColourFocus) StrokePath(3) ElseIf Selected - VectorSourceColor(RGBA(255, 255, 0, 255)) + VectorSourceColor(PBMap\Options\ColourFocus) StrokePath(4) Else VectorSourceColor(Color) @@ -1098,7 +1133,21 @@ Module PBMap EndIf If PBMap\Options\ShowMarkersLegend VectorFont(FontID(PBMap\Font), 13) - Protected Height = VectorParagraphHeight(Legend, 100, 13) +; Protected Height = VectorParagraphHeight(Legend, 100, 13) + ;dessin d'un cadre avec fond transparent + Protected Height = VectorParagraphHeight(Legend, 100, 100) + Protected Width.l + If Height < 20 ; une ligne + Width = VectorTextWidth(Legend) + Else + Width = 100 + EndIf + AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) + VectorSourceColor(RGBA(168, 255, 255, 100)) + FillPath() + AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) + VectorSourceColor(RGBA(36, 36, 255, 100)) + StrokePath(2) MovePathCursor(x - 50, y - 30 - Height) VectorSourceColor(RGBA(0, 0, 0, 255)) DrawVectorParagraph(Legend, 100, Height, #PB_VectorParagraph_Center) @@ -1746,7 +1795,8 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetOption("ShowDebugInfos", "0") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") - PBMap::SetOption("TrackShowKms", "1") + PBMap::SetOption("ShowTrackKms", "1") + PBMap::SetOption("ColourFocus", "$FFFF00AA") PBMap::MapGadget(#Map, 10, 10, 512, 512) PBMap::SetCallBackMainPointer(@MainPointer()) ; To change the main pointer (center of the view) PBMap::SetCallBackLocation(@UpdateLocation()) ; To obtain realtime coordinates @@ -1806,8 +1856,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 24 -; FirstLine = 159 +; CursorPosition = 1104 +; FirstLine = 1107 ; Folding = ------------- ; EnableThread ; EnableXP From dcf460825d1b0e7f5e2dff83c42d49516ad827fa Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 28 Sep 2016 11:13:59 +0200 Subject: [PATCH 08/36] Select WIP - IsInDrawingBoundaries --- PBMap.pb | 158 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 115 insertions(+), 43 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index e7a710f..f2099d4 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -101,19 +101,21 @@ Module PBMap EndStructure Structure TileBounds - NorthWest.Coordinates - SouthEast.Coordinates + NorthWest.GeographicCoordinates + SouthEast.GeographicCoordinates EndStructure Structure DrawingParameters - TileCoordinates.Coordinates - Bounds.TileBounds Canvas.i - PBMapZoom.i - GeographicCoordinates.GeographicCoordinates - CenterX.i + CenterX.i ; Gadget center in screen relative pixels CenterY.i - DeltaX.i + GeographicCoordinates.GeographicCoordinates ; Real center + TileCoordinates.Coordinates ; Center coordinates in tile.decimal + Bounds.TileBounds ; Drawing boundaries in lat/lon + Height.d ; Drawing height in degrees + Width.d ; Drawing width in degrees + PBMapZoom.i + DeltaX.i ; Screen relative pixels tile shift DeltaY.i Dirty.i End.i @@ -175,8 +177,16 @@ Module PBMap ServerURL.s ; Web URL ex: http://tile.openstreetmap.org/ EndStructure + Structure Box + x1.i + y1.i + x2.i + y2.i + EndStructure + Structure Tracks List Track.GeographicCoordinates() ; To display a GPX track + BoundingBox.Box EndStructure ;-PBMap Structure @@ -624,6 +634,10 @@ Module PBMap ProcedureReturn Mod(Mod(Longitude + 180, 360.0) + 360.0, 360.0) - 180 EndProcedure +; Procedure.d Positivise(Value.d) +; ProcedureReturn Mod(Mod(Value, 360) + 360.0, 360) +; EndProcedure + ;Lat Lon coordinates 2 pixel absolute [0 to 2^Zoom * TileSize [ Procedure LatLon2Pixel(*Location.GeographicCoordinates, *Pixel.PixelCoordinates, Zoom) Protected tilemax = Pow(2.0, Zoom) * PBMap\TileSize @@ -981,17 +995,21 @@ Module PBMap Protected tx, ty, nx,ny,nx1,ny1,x,y,n,cx,dperpixel.d Protected pos1.PixelCoordinates,pos2.PixelCoordinates,Degrees1.GeographicCoordinates,degrees2.GeographicCoordinates Protected realx - tx = Int(*Drawing\TileCoordinates\x) - ty = Int(*Drawing\TileCoordinates\y) - nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point - ny = *Drawing\CenterY / PBMap\TileSize - *Drawing\Bounds\NorthWest\x = tx-nx-1 - *Drawing\Bounds\NorthWest\y = ty-ny-1 - *Drawing\Bounds\SouthEast\x = tx+nx+2 - *Drawing\Bounds\SouthEast\y = ty+ny+2 +; tx = Int(*Drawing\TileCoordinates\x) +; ty = Int(*Drawing\TileCoordinates\y) +; tx = *Drawing\TileCoordinates\x +; ty = *Drawing\TileCoordinates\y +; nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point +; ny = *Drawing\CenterY / PBMap\TileSize +; *Drawing\Bounds\NorthWest\x = tx-nx-1 +; *Drawing\Bounds\NorthWest\y = ty-ny-1 +; *Drawing\Bounds\SouthEast\x = tx+nx+2 +; *Drawing\Bounds\SouthEast\y = ty+ny+2 ; Debug "------------------" - TileXY2LatLon(*Drawing\Bounds\NorthWest, @Degrees1, PBMap\Zoom) - TileXY2LatLon(*Drawing\Bounds\SouthEast, @Degrees2, PBMap\Zoom) + CopyStructure(*Drawing\Bounds\NorthWest, @Degrees1, GeographicCoordinates) + CopyStructure(*Drawing\Bounds\SouthEast, @Degrees2, GeographicCoordinates) + ;TileXY2LatLon(*Drawing\Bounds\NorthWest, @Degrees1, PBMap\Zoom) + ;TileXY2LatLon(*Drawing\Bounds\SouthEast, @Degrees2, PBMap\Zoom) ;ensure we stay positive for the drawing nx = Mod(Mod(Round(Degrees1\Longitude, #PB_Round_Down)-1, 360) + 360, 360) ny = Round(Degrees1\Latitude, #PB_Round_Up) +1 @@ -1054,21 +1072,26 @@ Module PBMap Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates Protected km.f, memKm.i + With PBMap\TracksList() ;Trace Track If ListSize(PBMap\TracksList()) > 0 BeginVectorLayer() ForEach PBMap\TracksList() - If ListSize(PBMap\TracksList()\Track()) > 0 - ForEach PBMap\TracksList()\Track() + If ListSize(\Track()) > 0 + ForEach \Track() ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) - If ListIndex(PBMap\TracksList()\Track()) = 0 + If ListIndex(\Track()) = 0 MovePathCursor(Pixel\X, Pixel\Y) Else AddPathLine(Pixel\X, Pixel\Y) EndIf ;EndIf Next +; \BoundingBox\x = PathBoundsX() +; \BoundingBox\y = PathBoundsY() +; \BoundingBox\w = PathBoundsWidth() +; \BoundingBox\h = PathBoundsHeight() VectorSourceColor(RGBA(0, 255, 0, 150)) StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) EndIf @@ -1082,13 +1105,13 @@ Module PBMap km = 0 : memKm = -1 ForEach PBMap\TracksList()\Track() ;Test Distance - If ListIndex(PBMap\TracksList()\Track()) = 0 - Location\Latitude = PBMap\TracksList()\Track()\Latitude - Location\Longitude = PBMap\TracksList()\Track()\Longitude + If ListIndex(\Track()) = 0 + Location\Latitude = \Track()\Latitude + Location\Longitude = \Track()\Longitude Else km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) - Location\Latitude = PBMap\TracksList()\Track()\Latitude - Location\Longitude = PBMap\TracksList()\Track()\Longitude + Location\Latitude = \Track()\Latitude + Location\Longitude = \Track()\Longitude EndIf LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If Int(km) <> memKm @@ -1101,6 +1124,7 @@ Module PBMap Next EndVectorLayer() EndIf + EndWith EndProcedure Procedure DrawMarker(x.i, y.i, Nb, Color.l, Legend.s, Focus.i, Selected.i) @@ -1177,7 +1201,7 @@ Module PBMap Protected *Ptr = AddElement(PBMap\Markers()) If *Ptr PBMap\Markers()\GeographicCoordinates\Latitude = Latitude - PBMap\Markers()\GeographicCoordinates\Longitude = Mod(Mod(Longitude, 360) + 360, 360) + PBMap\Markers()\GeographicCoordinates\Longitude = ClipLongitude(Longitude) PBMap\Markers()\Legend = Legend PBMap\Markers()\Color = Color PBMap\Markers()\CallBackPointer = CallBackPointer @@ -1186,12 +1210,42 @@ Module PBMap EndIf EndProcedure + Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) + Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude + Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude + Protected LatSE.d = *Drawing\Bounds\SouthEast\Latitude, LonSE.d = *Drawing\Bounds\SouthEast\Longitude + If LatSE > LatNW + Debug "WTF" + CallDebugger + EndIf + If Lat >= LatSE And Lat <= LatNW + If *Drawing\Width >= 360 + ProcedureReturn #True + Else + If LonNW < LonSE + If Lon >= LonNW And Lon <= LonSE + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf + Else + If (Lon >= -180 And Lon <= LonSE) Or (Lon >= LonNW And Lon <= 180) + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf + EndIf + EndIf + Else + ProcedureReturn #False + EndIf + EndProcedure + ; Draw all markers - Procedure DrawMarkers() + Procedure DrawMarkers(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates ForEach PBMap\Markers() - If PBMap\Markers()\GeographicCoordinates\Latitude <> 0 And PBMap\Markers()\GeographicCoordinates\Longitude <> 0 - ;GetPixelCoordFromLocation(PBMap\Markers()\GeographicCoordinates, @Pixel) + If IsInDrawingBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) LatLon2PixelRel(PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) If Pixel\X >= 0 And Pixel\Y >= 0 And Pixel\X < GadgetWidth(PBMap\Gadget) And Pixel\Y < GadgetHeight(PBMap\Gadget) ; Only if visible ^_^ If PBMap\Markers()\CallBackPointer > 0 @@ -1204,13 +1258,13 @@ Module PBMap Next EndProcedure - Procedure DrawDebugInfos() + Procedure DrawDebugInfos(*Drawing.DrawingParameters) ; Display how many images in cache - VectorFont(FontID(PBMap\Font), 30) + VectorFont(FontID(PBMap\Font), 16) VectorSourceColor(RGBA(0, 0, 0, 80)) MovePathCursor(50,50) DrawVectorText(Str(MapSize(PBMap\MemCache\Images()))) - MovePathCursor(50,80) + MovePathCursor(50,70) Protected ThreadCounter = 0 ForEach PBMap\MemCache\Images() If PBMap\MemCache\Images()\Tile <> 0 @@ -1220,26 +1274,44 @@ Module PBMap EndIf Next DrawVectorText(Str(ThreadCounter)) - MovePathCursor(50,110) + MovePathCursor(50,90) DrawVectorText(Str(PBMap\Zoom)) + MovePathCursor(50,110) + DrawVectorText(StrD(*Drawing\Bounds\NorthWest\Latitude) + "," + StrD(*Drawing\Bounds\NorthWest\Longitude)) + MovePathCursor(50,130) + DrawVectorText(StrD(*Drawing\Bounds\SouthEast\Latitude) + "," + StrD(*Drawing\Bounds\SouthEast\Longitude)) EndProcedure ;-*** Main drawing Procedure Drawing() Protected *Drawing.DrawingParameters = @PBMap\Drawing - Protected Px.d, Py.d,a, ts = PBMap\TileSize + Protected Px.d, Py.d,a, ts = PBMap\TileSize, nx, ny + Protected NW.Coordinates, SE.Coordinates PBMap\Dirty = #False PBMap\Redraw = #False - ; Precalc some values + ;*** Precalc some values *Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 *Drawing\CenterY = GadgetHeight(PBMap\Gadget) / 2 *Drawing\GeographicCoordinates\Latitude = PBMap\GeographicCoordinates\Latitude *Drawing\GeographicCoordinates\Longitude = PBMap\GeographicCoordinates\Longitude LatLon2TileXY(*Drawing\GeographicCoordinates, *Drawing\TileCoordinates, PBMap\Zoom) ; Pixel shift, aka position in the tile - Px = *Drawing\TileCoordinates\x : Py = *Drawing\TileCoordinates\y + Px = *Drawing\TileCoordinates\x + Py = *Drawing\TileCoordinates\y *Drawing\DeltaX = Px * ts - (Int(Px) * ts) ;Don't forget the Int() ! *Drawing\DeltaY = Py * ts - (Int(Py) * ts) + ;Drawing boundaries + nx = *Drawing\CenterX / ts ;How many tiles around the point + ny = *Drawing\CenterY / ts + NW\x = Px - nx - 1 + NW\y = Py - ny - 1 + SE\x = Px + nx + 2 + SE\y = Py + ny + 2 + TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) + TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) + *Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping + *Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude + ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) ;TODO add in layers of tiles ;this way we can cache them as 0 base 1.n layers @@ -1251,13 +1323,13 @@ Module PBMap DrawTracks(*Drawing) EndIf If PBMap\Options\ShowMarkers - DrawMarkers() + DrawMarkers(*Drawing) EndIf If PBMap\Options\ShowPointer DrawPointer(*Drawing) EndIf If PBMap\Options\ShowDebugInfos - DrawDebugInfos() + DrawDebugInfos(*Drawing) EndIf If PBMap\Options\ShowDegrees DrawDegrees(*Drawing, 192) @@ -1794,7 +1866,7 @@ CompilerIf #PB_Compiler_IsMainFile ;Our main gadget PBMap::InitPBMap(#Window_0) PBMap::SetOption("ShowDegrees", "1") - PBMap::SetOption("ShowDebugInfos", "0") + PBMap::SetOption("ShowDebugInfos", "1") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") PBMap::SetOption("ShowTrackKms", "1") @@ -1804,7 +1876,7 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetCallBackLocation(@UpdateLocation()) ; To obtain realtime coordinates PBMap::SetLocation(-36.81148, 175.08634,12) ; Change the PBMap coordinates PBMAP::SetMapScaleUnit(PBMAP::#SCALE_KM) ; To change the scale unit - PBMap::AddMarker(49.0446828398, 2.0349812508, "", -1, @MyMarker()) ; To add a marker with a customised GFX + ;PBMap::AddMarker(49.0446828398, 2.0349812508, "", -1, @MyMarker()) ; To add a marker with a customised GFX Repeat Event = WaitWindowEvent() @@ -1859,8 +1931,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1078 -; FirstLine = 1074 +; CursorPosition = 638 +; FirstLine = 636 ; Folding = ------------- ; EnableThread ; EnableXP \ No newline at end of file From 67a8893ea76677fd4ad9fc5615207258485b6995 Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 28 Sep 2016 12:37:17 +0200 Subject: [PATCH 09/36] Select/delete tracks --- PBMap.pb | 360 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 234 insertions(+), 126 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index f2099d4..2ea3126 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -52,7 +52,10 @@ DeclareModule PBMap Declare SetCallBackLocation(*CallBackLocation) Declare SetCallBackMainPointer(CallBackMainPointer.i) Declare SetMapScaleUnit(ScaleUnit=PBMAP::#SCALE_KM) - Declare LoadGpxFile(file.s); + Declare.i LoadGpxFile(file.s); + Declare ClearTracks() + Declare DeleteTrack(*Ptr) + Declare DeleteSelectedTracks() Declare.i AddMarker(Latitude.d, Longitude.d, Legend.s = "", color.l=-1, CallBackPointer.i = -1) Declare ClearMarkers() Declare DeleteMarker(*Ptr) @@ -167,8 +170,12 @@ Module PBMap MaxMemCache.i ; in MiB ShowMarkersNb.i ShowMarkersLegend.i + ;Drawing stuff + StrokeWidthTrackDefault.i ;Colours ColourFocus.i + ColourSelected.i + ColourTrackDefault.i EndStructure Structure Layer @@ -187,6 +194,11 @@ Module PBMap Structure Tracks List Track.GeographicCoordinates() ; To display a GPX track BoundingBox.Box + Visible.i + Focus.i + Selected.i + Colour.i + StrokeWidth.i EndStructure ;-PBMap Structure @@ -418,8 +430,14 @@ Module PBMap SelBool(ShowMarkersLegend) Case "showtrackkms" SelBool(ShowTrackKms) + Case "strokewidthtrackdefault" + SelBool(StrokeWidthTrackDefault) Case "colourfocus" PBMap\Options\ColourFocus = ColourString2Value(Value) + Case "colourselected" + PBMap\Options\ColourSelected = ColourString2Value(Value) + Case "colourtrackdefault" + PBMap\Options\ColourTrackDefault = ColourString2Value(Value) EndSelect EndProcedure @@ -452,8 +470,12 @@ Module PBMap WritePreferenceInteger("ShowTrackKms", \ShowTrackKms) WritePreferenceInteger("ShowMarkersNb", \ShowMarkersNb) WritePreferenceInteger("ShowMarkersLegend", \ShowMarkersLegend) + PreferenceGroup("DRAWING") + WritePreferenceInteger("StrokeWidthTrackDefault", \StrokeWidthTrackDefault) ;Colours; WritePreferenceInteger("ColourFocus", \ColourFocus) + WritePreferenceInteger("ColourSelected", \ColourSelected) + WritePreferenceInteger("ColourTrackDefault", \ColourTrackDefault) ClosePreferences() EndWith EndProcedure @@ -503,9 +525,13 @@ Module PBMap \ShowTrackKms = ReadPreferenceInteger("ShowTrackKms", #False) \ShowMarkersNb = ReadPreferenceInteger("ShowMarkersNb", #True) \ShowMarkersLegend = ReadPreferenceInteger("ShowMarkersLegend", #False) - \TimerInterval = 20 + PreferenceGroup("DRAWING") + \StrokeWidthTrackDefault = ReadPreferenceInteger("StrokeWidthTrackDefault", 10) PreferenceGroup("COLOURS") \ColourFocus = ReadPreferenceInteger("ColourFocus", RGBA(255, 255, 0, 255)) + \ColourSelected = ReadPreferenceInteger("ColourSelected", RGBA(225, 225, 0, 255)) + \ColourTrackDefault = ReadPreferenceInteger("ColourTrackDefault", RGBA(0, 255, 0, 150)) + \TimerInterval = 20 ClosePreferences() EndWith EndProcedure @@ -633,11 +659,7 @@ Module PBMap Procedure.d ClipLongitude(Longitude.d) ProcedureReturn Mod(Mod(Longitude + 180, 360.0) + 360.0, 360.0) - 180 EndProcedure - -; Procedure.d Positivise(Value.d) -; ProcedureReturn Mod(Mod(Value, 360) + 360.0, 360) -; EndProcedure - + ;Lat Lon coordinates 2 pixel absolute [0 to 2^Zoom * TileSize [ Procedure LatLon2Pixel(*Location.GeographicCoordinates, *Pixel.PixelCoordinates, Zoom) Protected tilemax = Pow(2.0, Zoom) * PBMap\TileSize @@ -708,37 +730,37 @@ Module PBMap *Pixel\y=GadgetHeight(PBMap\Gadget)/2 - (y2-y1) EndProcedure - Procedure LoadGpxFile(file.s) - If LoadXML(0, file.s) - Protected Message.s - If XMLStatus(0) <> #PB_XML_Success - Message = "Error in the XML file:" + Chr(13) - Message + "Message: " + XMLError(0) + Chr(13) - Message + "Line: " + Str(XMLErrorLine(0)) + " Character: " + Str(XMLErrorPosition(0)) - MessageRequester("Error", Message) - EndIf - Protected *MainNode,*subNode,*child,child.l - *MainNode=MainXMLNode(0) - *MainNode=XMLNodeFromPath(*MainNode,"/gpx/trk/trkseg") - Protected *NewTrack.Tracks = AddElement(PBMap\TracksList()) - For child = 1 To XMLChildCount(*MainNode) - *child = ChildXMLNode(*MainNode, child) - AddElement(*NewTrack\Track()) - If ExamineXMLAttributes(*child) - While NextXMLAttribute(*child) - Select XMLAttributeName(*child) - Case "lat" - *NewTrack\Track()\Latitude=ValD(XMLAttributeValue(*child)) - Case "lon" - *NewTrack\Track()\Longitude=ValD(XMLAttributeValue(*child)) - EndSelect - Wend - EndIf - Next - ZoomToTracks(LastElement(PBMap\TracksList())) ; <-To center the view, and zoom on the tracks + Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) + Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude + Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude + Protected LatSE.d = *Drawing\Bounds\SouthEast\Latitude, LonSE.d = *Drawing\Bounds\SouthEast\Longitude + If LatSE > LatNW + Debug "WTF" + CallDebugger EndIf - EndProcedure - + If Lat >= LatSE And Lat <= LatNW + If *Drawing\Width >= 360 + ProcedureReturn #True + Else + If LonNW < LonSE + If Lon >= LonNW And Lon <= LonSE + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf + Else + If (Lon >= -180 And Lon <= LonSE) Or (Lon >= LonNW And Lon <= 180) + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf + EndIf + EndIf + Else + ProcedureReturn #False + EndIf + EndProcedure + ;-*** These are threaded Procedure.i GetTileFromHDD(CacheFile.s) Protected nImage.i @@ -1068,65 +1090,137 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure + Procedure DeleteTrack(*Ptr) + If *Ptr + ChangeCurrentElement(PBMap\TracksList(), *Ptr) + DeleteElement(PBMap\TracksList()) + EndIf + EndProcedure + + Procedure DeleteSelectedTracks() + ForEach PBMap\TracksList() + If PBMap\TracksList()\Selected + DeleteElement(PBMap\TracksList()) + PBMap\Redraw = #True + EndIf + Next + EndProcedure + + Procedure ClearTracks() + ClearList(PBMap\TracksList()) + PBMap\Redraw = #True + EndProcedure + Procedure DrawTracks(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates Protected km.f, memKm.i With PBMap\TracksList() - ;Trace Track - If ListSize(PBMap\TracksList()) > 0 - BeginVectorLayer() - ForEach PBMap\TracksList() - If ListSize(\Track()) > 0 - ForEach \Track() - ;If *Drawing\GeographicCoordinates\Latitude<>0 And *Drawing\GeographicCoordinates\Longitude<>0 - LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) - If ListIndex(\Track()) = 0 - MovePathCursor(Pixel\X, Pixel\Y) - Else - AddPathLine(Pixel\X, Pixel\Y) - EndIf - ;EndIf - Next -; \BoundingBox\x = PathBoundsX() -; \BoundingBox\y = PathBoundsY() -; \BoundingBox\w = PathBoundsWidth() -; \BoundingBox\h = PathBoundsHeight() - VectorSourceColor(RGBA(0, 255, 0, 150)) - StrokePath(10, #PB_Path_RoundEnd|#PB_Path_RoundCorner) - EndIf - Next - EndVectorLayer() - EndIf - ;Draw Distance - If PBMap\Options\ShowTrackKms And ListSize(PBMap\TracksList()) > 0 - BeginVectorLayer() - ForEach PBMap\TracksList() - km = 0 : memKm = -1 - ForEach PBMap\TracksList()\Track() - ;Test Distance - If ListIndex(\Track()) = 0 - Location\Latitude = \Track()\Latitude - Location\Longitude = \Track()\Longitude - Else - km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) - Location\Latitude = \Track()\Latitude - Location\Longitude = \Track()\Longitude - EndIf - LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) - If Int(km) <> memKm - memKm = Int(km) - If PBMap\Zoom > 10 - TrackPointer(Pixel\X , Pixel\Y, Int(km)) - EndIf + ;Trace Track + If ListSize(PBMap\TracksList()) > 0 + BeginVectorLayer() + ForEach PBMap\TracksList() + If ListSize(\Track()) > 0 + ;Check visibility + \Visible = #False + ForEach \Track() + If IsInDrawingBoundaries(*Drawing, @PBMap\TracksList()\Track()) + \Visible = #True + Break + EndIf + Next + If \Visible + ;Draw tracks + ForEach \Track() + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If ListIndex(\Track()) = 0 + MovePathCursor(Pixel\X, Pixel\Y) + Else + AddPathLine(Pixel\X, Pixel\Y) + EndIf + Next + ; \BoundingBox\x = PathBoundsX() + ; \BoundingBox\y = PathBoundsY() + ; \BoundingBox\w = PathBoundsWidth() + ; \BoundingBox\h = PathBoundsHeight() + If \Focus + VectorSourceColor(PBMap\Options\ColourFocus) + ElseIf \Selected + VectorSourceColor(PBMap\Options\ColourSelected) + Else + VectorSourceColor(\Colour) + EndIf + StrokePath(\StrokeWidth, #PB_Path_RoundEnd|#PB_Path_RoundCorner) + EndIf EndIf Next - Next - EndVectorLayer() - EndIf + EndVectorLayer() + ;Draw distances + If PBMap\Options\ShowTrackKms + BeginVectorLayer() + ForEach PBMap\TracksList() + If \Visible + km = 0 : memKm = -1 + ForEach PBMap\TracksList()\Track() + ;Test Distance + If ListIndex(\Track()) = 0 + Location\Latitude = \Track()\Latitude + Location\Longitude = \Track()\Longitude + Else + km = km + HaversineInKM(@Location, @PBMap\TracksList()\Track()) + Location\Latitude = \Track()\Latitude + Location\Longitude = \Track()\Longitude + EndIf + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If Int(km) <> memKm + memKm = Int(km) + If PBMap\Zoom > 10 + TrackPointer(Pixel\X , Pixel\Y, Int(km)) + EndIf + EndIf + Next + EndIf + Next + EndVectorLayer() + EndIf + EndIf EndWith EndProcedure + Procedure.i LoadGpxFile(file.s) + If LoadXML(0, file.s) + Protected Message.s + If XMLStatus(0) <> #PB_XML_Success + Message = "Error in the XML file:" + Chr(13) + Message + "Message: " + XMLError(0) + Chr(13) + Message + "Line: " + Str(XMLErrorLine(0)) + " Character: " + Str(XMLErrorPosition(0)) + MessageRequester("Error", Message) + EndIf + Protected *MainNode,*subNode,*child,child.l + *MainNode=MainXMLNode(0) + *MainNode=XMLNodeFromPath(*MainNode,"/gpx/trk/trkseg") + Protected *NewTrack.Tracks = AddElement(PBMap\TracksList()) + PBMap\TracksList()\StrokeWidth = PBMap\Options\StrokeWidthTrackDefault + PBMap\TracksList()\Colour = PBMap\Options\ColourTrackDefault + For child = 1 To XMLChildCount(*MainNode) + *child = ChildXMLNode(*MainNode, child) + AddElement(*NewTrack\Track()) + If ExamineXMLAttributes(*child) + While NextXMLAttribute(*child) + Select XMLAttributeName(*child) + Case "lat" + *NewTrack\Track()\Latitude=ValD(XMLAttributeValue(*child)) + Case "lon" + *NewTrack\Track()\Longitude=ValD(XMLAttributeValue(*child)) + EndSelect + Wend + EndIf + Next + ZoomToTracks(LastElement(PBMap\TracksList())) ; <-To center the view, and zoom on the tracks + ProcedureReturn *NewTrack + EndIf + EndProcedure + Procedure DrawMarker(x.i, y.i, Nb, Color.l, Legend.s, Focus.i, Selected.i) ;Nice marker by yves86 VectorSourceColor(color) @@ -1143,7 +1237,7 @@ Module PBMap VectorSourceColor(PBMap\Options\ColourFocus) StrokePath(3) ElseIf Selected - VectorSourceColor(PBMap\Options\ColourFocus) + VectorSourceColor(PBMap\Options\ColourSelected) StrokePath(4) Else VectorSourceColor(Color) @@ -1181,11 +1275,15 @@ Module PBMap Procedure ClearMarkers() ClearList(PBMap\Markers()) + PBMap\Redraw = #True EndProcedure Procedure DeleteMarker(*Ptr) - ChangeCurrentElement(PBMap\Markers(), *Ptr) - DeleteElement(PBMap\Markers()) + If *Ptr + ChangeCurrentElement(PBMap\Markers(), *Ptr) + DeleteElement(PBMap\Markers()) + PBMap\Redraw = #True + EndIf EndProcedure Procedure DeleteSelectedMarkers() @@ -1209,38 +1307,7 @@ Module PBMap ProcedureReturn *Ptr EndIf EndProcedure - - Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) - Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude - Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude - Protected LatSE.d = *Drawing\Bounds\SouthEast\Latitude, LonSE.d = *Drawing\Bounds\SouthEast\Longitude - If LatSE > LatNW - Debug "WTF" - CallDebugger - EndIf - If Lat >= LatSE And Lat <= LatNW - If *Drawing\Width >= 360 - ProcedureReturn #True - Else - If LonNW < LonSE - If Lon >= LonNW And Lon <= LonSE - ProcedureReturn #True - Else - ProcedureReturn #False - EndIf - Else - If (Lon >= -180 And Lon <= LonSE) Or (Lon >= LonNW And Lon <= 180) - ProcedureReturn #True - Else - ProcedureReturn #False - EndIf - EndIf - EndIf - Else - ProcedureReturn #False - EndIf - EndProcedure - + ; Draw all markers Procedure DrawMarkers(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates @@ -1256,7 +1323,7 @@ Module PBMap EndIf EndIf Next - EndProcedure + EndProcedure Procedure DrawDebugInfos(*Drawing.DrawingParameters) ; Display how many images in cache @@ -1558,6 +1625,7 @@ Module PBMap Protected MouseX.i, MouseY.i Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize Protected key.s, Touch.i + Protected Pixel.PixelCoordinates Static CtrlKey PBMap\Moving = #False Select EventType() @@ -1565,6 +1633,7 @@ Module PBMap Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) Case #PB_Shortcut_Delete DeleteSelectedMarkers() + DeleteSelectedTracks() EndSelect PBMap\Redraw = #True If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control = 0 @@ -1651,6 +1720,16 @@ Module PBMap PBMap\Markers()\Focus = #False EndIf Next + ;Check if we select track(s) + ForEach PBMap\TracksList() + If CtrlKey = #False + PBMap\TracksList()\Selected = #False ;If no CTRL key, deselect everything and select only the focused track + EndIf + If PBMap\TracksList()\Focus + PBMap\TracksList()\Selected = #True + PBMap\TracksList()\Focus = #False + EndIf + Next EndIf ;Mem cursor Coord PBMap\MoveStartingPoint\x = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) @@ -1692,8 +1771,8 @@ Module PBMap MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) ;Clip MouseX to the map range (in X, the map is infinite) MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) - ;Check if mouse touch markers If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT + ;Check if mouse touch markers ForEach PBMap\Markers() LatLon2Pixel(@PBMap\Markers()\GeographicCoordinates, @MarkerCoords, PBMap\Zoom) If Distance(MarkerCoords\x, MarkerCoords\y, MouseX, MouseY) < 8 @@ -1704,6 +1783,35 @@ Module PBMap ;EndIf EndIf Next + ;Check if mouse touch tracks + With PBMap\TracksList() + ;Trace Track + If ListSize(PBMap\TracksList()) > 0 + ForEach PBMap\TracksList() + If ListSize(\Track()) > 0 + If \Visible + StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + ;Draw tracks + ForEach \Track() + LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + If ListIndex(\Track()) = 0 + MovePathCursor(Pixel\X, Pixel\Y) + Else + AddPathLine(Pixel\X, Pixel\Y) + EndIf + Next + If IsInsideStroke(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY), \StrokeWidth) + \Focus = #True + Else + \Focus = #False + EndIf + StopVectorDrawing() + EndIf + EndIf + Next + EndIf + EndWith + EndIf PBMap\Redraw = #True EndIf @@ -1931,8 +2039,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 638 -; FirstLine = 636 -; Folding = ------------- +; CursorPosition = 55 +; FirstLine = 34 +; Folding = -------------- ; EnableThread ; EnableXP \ No newline at end of file From df10cc2965e6ad65953570f678486f4ee52b12d9 Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 28 Sep 2016 14:15:47 +0200 Subject: [PATCH 10/36] Map move limit --- PBMap.pb | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 2ea3126..132da30 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -646,6 +646,12 @@ Module PBMap ;Ensures the longitude to be in the range [-180;180[ *Location\Longitude = Mod(Mod(*Coords\x / n * 360.0, 360.0) + 360.0, 360.0) - 180 *Location\Latitude = Degree(ATan(SinH(#PI * (1.0 - 2.0 * *Coords\y / n)))) + If *Location\Latitude <= -89 + *Location\Latitude = -89 + EndIf + If *Location\Latitude >= 89 + *Location\Latitude = 89 + EndIf EndProcedure Procedure Pixel2LatLon(*Coords.PixelCoordinates, *Location.GeographicCoordinates, Zoom) @@ -653,6 +659,12 @@ Module PBMap ;Ensures the longitude to be in the range [-180;180[ *Location\Longitude = Mod(Mod(*Coords\x / n * 360.0, 360.0) + 360.0, 360.0) - 180 *Location\Latitude = Degree(ATan(SinH(#PI * (1.0 - 2.0 * *Coords\y / n)))) + If *Location\Latitude <= -89 + *Location\Latitude = -89 + EndIf + If *Location\Latitude >= 89 + *Location\Latitude = 89 + EndIf EndProcedure ;Ensures the longitude to be in the range [-180;180[ @@ -1028,10 +1040,10 @@ Module PBMap ; *Drawing\Bounds\SouthEast\x = tx+nx+2 ; *Drawing\Bounds\SouthEast\y = ty+ny+2 ; Debug "------------------" + ;TileXY2LatLon(*Drawing\Bounds\NorthWest, @Degrees1, PBMap\Zoom) + ;TileXY2LatLon(*Drawing\Bounds\SouthEast, @Degrees2, PBMap\Zoom) CopyStructure(*Drawing\Bounds\NorthWest, @Degrees1, GeographicCoordinates) CopyStructure(*Drawing\Bounds\SouthEast, @Degrees2, GeographicCoordinates) - ;TileXY2LatLon(*Drawing\Bounds\NorthWest, @Degrees1, PBMap\Zoom) - ;TileXY2LatLon(*Drawing\Bounds\SouthEast, @Degrees2, PBMap\Zoom) ;ensure we stay positive for the drawing nx = Mod(Mod(Round(Degrees1\Longitude, #PB_Round_Down)-1, 360) + 360, 360) ny = Round(Degrees1\Latitude, #PB_Round_Up) +1 @@ -1398,7 +1410,7 @@ Module PBMap If PBMap\Options\ShowDebugInfos DrawDebugInfos(*Drawing) EndIf - If PBMap\Options\ShowDegrees + If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 DrawDegrees(*Drawing, 192) EndIf If PBMap\Options\ShowScale @@ -1453,6 +1465,13 @@ Module PBMap PBMap\Zoom + Zoom EndIf EndSelect + PBMap\GeographicCoordinates\Longitude = ClipLongitude(PBMap\GeographicCoordinates\Longitude) + If PBMap\GeographicCoordinates\Latitude < -89 + PBMap\GeographicCoordinates\Latitude = -89 + EndIf + If PBMap\GeographicCoordinates\Latitude > 89 + PBMap\GeographicCoordinates\Latitude = 89 + EndIf If PBMap\Zoom > PBMap\ZoomMax : PBMap\Zoom = PBMap\ZoomMax : EndIf If PBMap\Zoom < PBMap\ZoomMin : PBMap\Zoom = PBMap\ZoomMin : EndIf LatLon2TileXY(@PBMap\GeographicCoordinates, @PBMap\Drawing\TileCoordinates, PBMap\Zoom) @@ -1974,7 +1993,7 @@ CompilerIf #PB_Compiler_IsMainFile ;Our main gadget PBMap::InitPBMap(#Window_0) PBMap::SetOption("ShowDegrees", "1") - PBMap::SetOption("ShowDebugInfos", "1") + PBMap::SetOption("ShowDebugInfos", "0") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") PBMap::SetOption("ShowTrackKms", "1") @@ -2039,8 +2058,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 55 -; FirstLine = 34 +; CursorPosition = 1467 +; FirstLine = 1437 ; Folding = -------------- ; EnableThread ; EnableXP \ No newline at end of file From a999381fd3c2801194925a29a7fd863000f856f3 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 12:10:06 +0200 Subject: [PATCH 11/36] Edit marker WIP --- Forms/MarkerEdit.pbf | 40 ++++++++ PBMap.pb | 219 +++++++++++++++++++++++++++---------------- gettext.pbi | 29 ++++++ 3 files changed, 207 insertions(+), 81 deletions(-) create mode 100644 Forms/MarkerEdit.pbf create mode 100644 gettext.pbi diff --git a/Forms/MarkerEdit.pbf b/Forms/MarkerEdit.pbf new file mode 100644 index 0000000..4d94df9 --- /dev/null +++ b/Forms/MarkerEdit.pbf @@ -0,0 +1,40 @@ +; +; This code is automatically generated by the FormDesigner. +; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled. +; Event procedures needs to be put in another source file. +; + +Global WindowMarkerEdit + +Global TextIdentifier, TextLegend, StringIdentifier, EditorLegend + + +Procedure OpenWindowMarkerEdit(x = 0, y = 0, width = 300, height = 100) + WindowMarkerEdit = OpenWindow(#PB_Any, x, y, width, height, Marker Edit, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_NoGadgets) + TextIdentifier = TextGadget(#PB_Any, 2, 2, 80, 25, Identifier) + TextLegend = TextGadget(#PB_Any, 2, 27, 80, 25, Legend) + StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, "") + EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) +EndProcedure + +Procedure WindowMarkerEdit_Events(event) + Select event + Case #PB_Event_CloseWindow + ProcedureReturn #False + + Case #PB_Event_Menu + Select EventMenu() + EndSelect + + Case #PB_Event_Gadget + Select EventGadget() + EndSelect + EndSelect + ProcedureReturn #True +EndProcedure + + +; IDE Options = PureBasic 5.50 (Windows - x64) +; CursorPosition = 11 +; Folding = - +; EnableXP \ No newline at end of file diff --git a/PBMap.pb b/PBMap.pb index 132da30..a8de004 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -56,7 +56,7 @@ DeclareModule PBMap Declare ClearTracks() Declare DeleteTrack(*Ptr) Declare DeleteSelectedTracks() - Declare.i AddMarker(Latitude.d, Longitude.d, Legend.s = "", color.l=-1, CallBackPointer.i = -1) + Declare.i AddMarker(Latitude.d, Longitude.d, Identifier.s = "", Legend.s = "", color.l=-1, CallBackPointer.i = -1) Declare ClearMarkers() Declare DeleteMarker(*Ptr) Declare DeleteSelectedMarkers() @@ -68,6 +68,8 @@ DeclareModule PBMap Declare.d MouseLatitude() Declare.d MouseLongitude() Declare.i GetZoom() + Declare.i GetMode() + Declare SetMode(Mode.i = #MODE_DEFAULT) EndDeclareModule Module PBMap @@ -141,6 +143,7 @@ Module PBMap Structure Marker GeographicCoordinates.GeographicCoordinates ; Marker latitude and longitude + Identifier.s Legend.s Color.l ; Marker color Focus.i @@ -263,6 +266,9 @@ Module PBMap EndIf EndProcedure + ;- *** GetText - Translation purpose + IncludeFile "gettext.pbi" + ;- *** CURL specific ; (program has To be compiled in console format for curl debug infos) @@ -1233,57 +1239,6 @@ Module PBMap EndIf EndProcedure - Procedure DrawMarker(x.i, y.i, Nb, Color.l, Legend.s, Focus.i, Selected.i) - ;Nice marker by yves86 - VectorSourceColor(color) - MovePathCursor(x, y) - AddPathLine(-8, -16, #PB_Path_Relative) - AddPathCircle(8, 0, 8, 180, 0, #PB_Path_Relative) - AddPathLine(-8, 16, #PB_Path_Relative) - ;FillPath(#PB_Path_Preserve) - ;ClipPath(#PB_Path_Preserve) - AddPathCircle(0, -16, 5, 0, 360, #PB_Path_Relative) - VectorSourceColor(Color) - FillPath(#PB_Path_Preserve) - If Focus - VectorSourceColor(PBMap\Options\ColourFocus) - StrokePath(3) - ElseIf Selected - VectorSourceColor(PBMap\Options\ColourSelected) - StrokePath(4) - Else - VectorSourceColor(Color) - StrokePath(1) - EndIf - If PBMap\Options\ShowMarkersNb - Protected Text.s = Str(Nb) - VectorFont(FontID(PBMap\Font), 13) - MovePathCursor(x - 10, y) - VectorSourceColor(RGBA(0, 0, 0, 255)) - DrawVectorParagraph(Text, 20, 20, #PB_VectorParagraph_Center) - EndIf - If PBMap\Options\ShowMarkersLegend - VectorFont(FontID(PBMap\Font), 13) -; Protected Height = VectorParagraphHeight(Legend, 100, 13) - ;dessin d'un cadre avec fond transparent - Protected Height = VectorParagraphHeight(Legend, 100, 100) - Protected Width.l - If Height < 20 ; une ligne - Width = VectorTextWidth(Legend) - Else - Width = 100 - EndIf - AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) - VectorSourceColor(RGBA(168, 255, 255, 100)) - FillPath() - AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) - VectorSourceColor(RGBA(36, 36, 255, 100)) - StrokePath(2) - MovePathCursor(x - 50, y - 30 - Height) - VectorSourceColor(RGBA(0, 0, 0, 255)) - DrawVectorParagraph(Legend, 100, Height, #PB_VectorParagraph_Center) - EndIf - EndProcedure Procedure ClearMarkers() ClearList(PBMap\Markers()) @@ -1307,11 +1262,12 @@ Module PBMap Next EndProcedure - Procedure.i AddMarker(Latitude.d, Longitude.d, Legend.s = "", Color.l=-1, CallBackPointer.i = -1) + Procedure.i AddMarker(Latitude.d, Longitude.d, Identifier.s = "", Legend.s = "", Color.l=-1, CallBackPointer.i = -1) Protected *Ptr = AddElement(PBMap\Markers()) If *Ptr PBMap\Markers()\GeographicCoordinates\Latitude = Latitude PBMap\Markers()\GeographicCoordinates\Longitude = ClipLongitude(Longitude) + PBMap\Markers()\Identifier = Identifier PBMap\Markers()\Legend = Legend PBMap\Markers()\Color = Color PBMap\Markers()\CallBackPointer = CallBackPointer @@ -1319,6 +1275,86 @@ Module PBMap ProcedureReturn *Ptr EndIf EndProcedure + + Procedure MarkerWindowEvents() + If EventType() = #PB_EventType_Change + If EventGadget() = GetGadgetText(EventGadget()) <> "" + *Marker\Identifier = GetGadgetText(StringIdentifier) + EndIf + If GetGadgetText(EditorLegend) <> "" + *Marker\Legend = GetGadgetText(EditorLegend) + EndIf + EndIf + EndProcedure + + Procedure EditMarker(*Marker.Marker) + CallDebugger + Protected WindowMarkerEdit = OpenWindow(#PB_Any, 0, 0, 300, 100, "Marker Edit", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_NoGadgets) + BindEvent() + TextGadget(#PB_Any, 2, 2, 80, 25, gettext("Identifier")) + TextGadget(#PB_Any, 2, 27, 80, 25, gettext("Legend")) + Protected StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, "") + Protected EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) + BindEvent(#PB_Event_CloseWindow, @MarkerWindowEvents(), WindowMarkerEdit, *Marker) + BindGadgetEvent(StringIdentifier, @MarkerWindowEvents()) + BindGadgetEvent(EditorLegend, @MarkerWindowEvents()) + EndProcedure + + Procedure DrawMarker(x.i, y.i, Nb.i, *Marker.Marker) + Protected Text.s + ;Nice marker by yves86 + VectorSourceColor(*Marker\Color) + MovePathCursor(x, y) + AddPathLine(-8, -16, #PB_Path_Relative) + AddPathCircle(8, 0, 8, 180, 0, #PB_Path_Relative) + AddPathLine(-8, 16, #PB_Path_Relative) + ;FillPath(#PB_Path_Preserve) + ;ClipPath(#PB_Path_Preserve) + AddPathCircle(0, -16, 5, 0, 360, #PB_Path_Relative) + VectorSourceColor(*Marker\Color) + FillPath(#PB_Path_Preserve) + If *Marker\Focus + VectorSourceColor(PBMap\Options\ColourFocus) + StrokePath(3) + ElseIf *Marker\Selected + VectorSourceColor(PBMap\Options\ColourSelected) + StrokePath(4) + Else + VectorSourceColor(*Marker\Color) + StrokePath(1) + EndIf + If PBMap\Options\ShowMarkersNb + If *Marker\Identifier = "" + Text.s = Str(Nb) + Else + Text.s = *Marker\Identifier + EndIf + VectorFont(FontID(PBMap\Font), 13) + MovePathCursor(x - VectorTextWidth(Text) / 2, y) + VectorSourceColor(RGBA(0, 0, 0, 255)) + DrawVectorText(Text) + EndIf + If PBMap\Options\ShowMarkersLegend And *Marker\Legend <> "" + VectorFont(FontID(PBMap\Font), 13) + ;dessin d'un cadre avec fond transparent + Protected Height = VectorParagraphHeight(*Marker\Legend, 100, 100) + Protected Width.l + If Height < 20 ; une ligne + Width = VectorTextWidth(*Marker\Legend) + Else + Width = 100 + EndIf + AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) + VectorSourceColor(RGBA(168, 255, 255, 100)) + FillPath() + AddPathBox(x - (Width / 2), y - 30 - Height, Width, Height) + VectorSourceColor(RGBA(36, 36, 255, 100)) + StrokePath(2) + MovePathCursor(x - 50, y - 30 - Height) + VectorSourceColor(RGBA(0, 0, 0, 255)) + DrawVectorParagraph(*Marker\Legend, 100, Height, #PB_VectorParagraph_Center) + EndIf + EndProcedure ; Draw all markers Procedure DrawMarkers(*Drawing.DrawingParameters) @@ -1330,7 +1366,7 @@ Module PBMap If PBMap\Markers()\CallBackPointer > 0 CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\X, Pixel\Y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) Else - DrawMarker(Pixel\X, Pixel\Y, ListIndex(PBMap\Markers()), PBMap\Markers()\Color, PBMap\Markers()\Legend, PBMap\Markers()\Focus, PBMap\Markers()\Selected) + DrawMarker(Pixel\X, Pixel\Y, ListIndex(PBMap\Markers()), @PBMap\Markers()) EndIf EndIf EndIf @@ -1575,9 +1611,13 @@ Module PBMap ; #MODE_HAND = 1 -> Hand only ; #MODE_SELECT = 2 -> Move objects only ; #MODE_EDIT = 3 -> Create objects - Procedure SetMode(Mode = #MODE_DEFAULT) - PBMap\Mode = Mode - EndProcedure + Procedure SetMode(Mode.i = #MODE_DEFAULT) + PBMap\Mode = Mode + EndProcedure + + Procedure.i GetMode() + ProcedureReturn PBMap\Mode + EndProcedure ;Zoom on x, y position relative to the canvas gadget Procedure SetZoomOnPosition(x, y, zoom) @@ -1692,23 +1732,27 @@ Module PBMap CtrlKey = #True EndIf Case #PB_EventType_LeftDoubleClick - If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT - ;Check if the mouse touch a marker, if so, jump to it - LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) - MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - ;Clip MouseX to the map range (in X, the map is infinite) - MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) - Touch = #False - ForEach PBMap\Markers() - LatLon2Pixel(@PBMap\Markers()\GeographicCoordinates, @MarkerCoords, PBMap\Zoom) - If Distance(MarkerCoords\x, MarkerCoords\y, MouseX, MouseY) < 8 + LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) + MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) + MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) + ;Clip MouseX to the map range (in X, the map is infinite) + MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) + Touch = #False + ;Check if the mouse touch a marker + ForEach PBMap\Markers() + LatLon2Pixel(@PBMap\Markers()\GeographicCoordinates, @MarkerCoords, PBMap\Zoom) + If Distance(MarkerCoords\x, MarkerCoords\y, MouseX, MouseY) < 8 + If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT + ;Jump to the marker Touch = #True SetLocation(PBMap\Markers()\GeographicCoordinates\Latitude, PBMap\Markers()\GeographicCoordinates\Longitude) - Break + ElseIf PBMap\Mode = #MODE_EDIT + ;Edit the legend + EditMarker(@PBMap\Markers()) EndIf - Next - EndIf + Break + EndIf + Next If Not Touch GotoPixelRel(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY)) EndIf @@ -1869,11 +1913,10 @@ Module PBMap Else PBMap\Gadget = Gadget CanvasGadget(PBMap\Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard) - EndIf + EndIf BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) BindEvent(#PB_Event_Timer, @TimerEvents()) - ;AddKeyboardShortcut(#PB_Shortcut_Delete EndProcedure EndModule @@ -1903,6 +1946,7 @@ CompilerIf #PB_Compiler_IsMainFile #Gdt_AddMarker #Gdt_AddOpenseaMap #Gdt_Degrees + #Gdt_EditMode EndEnumeration Structure Location @@ -1960,6 +2004,7 @@ CompilerIf #PB_Compiler_IsMainFile ResizeGadget(#Gdt_LoadGpx,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_AddOpenseaMap,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Degrees,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#Gdt_EditMode,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) PBMap::Refresh() EndProcedure @@ -1983,8 +2028,9 @@ CompilerIf #PB_Compiler_IsMainFile StringGadget(#StringLongitude, 600, 250, 90, 20, "") ButtonGadget(#Gdt_AddMarker, 530, 280, 150, 30, "Add Marker") ButtonGadget(#Gdt_LoadGpx, 530, 310, 150, 30, "Load GPX") - ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "OpenSeaMap") - ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees") + ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "OpenSeaMap", #PB_Button_Toggle) + ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle) + ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit Mode ON/OFF", #PB_Button_Toggle) Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d @@ -1992,7 +2038,7 @@ CompilerIf #PB_Compiler_IsMainFile ;Our main gadget PBMap::InitPBMap(#Window_0) - PBMap::SetOption("ShowDegrees", "1") + PBMap::SetOption("ShowDegrees", "0") : Degrees = 0 PBMap::SetOption("ShowDebugInfos", "0") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") @@ -2003,7 +2049,7 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetCallBackLocation(@UpdateLocation()) ; To obtain realtime coordinates PBMap::SetLocation(-36.81148, 175.08634,12) ; Change the PBMap coordinates PBMAP::SetMapScaleUnit(PBMAP::#SCALE_KM) ; To change the scale unit - ;PBMap::AddMarker(49.0446828398, 2.0349812508, "", -1, @MyMarker()) ; To add a marker with a customised GFX + PBMap::AddMarker(49.0446828398, 2.0349812508, "", "", -1, @MyMarker()) ; To add a marker with a customised GFX Repeat Event = WaitWindowEvent() @@ -2030,22 +2076,33 @@ CompilerIf #PB_Compiler_IsMainFile Select EventType() Case #PB_EventType_LostFocus PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates - PBMAP::Refresh() + PBMap::Refresh() EndSelect Case #Gdt_AddMarker - PBMap::AddMarker(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude)), "Test", RGBA(Random(255), Random(255), Random(255), 255)) + PBMap::AddMarker(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude)), "", "Test", RGBA(Random(255), Random(255), Random(255), 255)) Case #Gdt_AddOpenseaMap If OpenSeaMap = 0 OpenSeaMap = PBMap::AddMapServerLayer("OpenSeaMap", 2, "http://t1.openseamap.org/seamark/") ; Add a special osm overlay map on layer nb 2 + SetGadgetState(#Gdt_AddOpenseaMap, 1) Else PBMap::DeleteLayer(OpenSeaMap) OpenSeaMap = 0 + SetGadgetState(#Gdt_AddOpenseaMap, 0) EndIf PBMAP::Refresh() Case #Gdt_Degrees Degrees = 1 - Degrees PBMap::SetOption("ShowDegrees", Str(Degrees)) PBMap::Refresh() + SetGadgetState(#Gdt_Degrees, Degrees) + Case #Gdt_EditMode + If PBMap::GetMode() <> PBMap::#MODE_EDIT + PBMap::SetMode(PBMap::#MODE_EDIT) + SetGadgetState(#Gdt_EditMode, 1) + Else + PBMap::SetMode(PBMap::#MODE_DEFAULT) + SetGadgetState(#Gdt_EditMode, 0) + EndIf EndSelect Case #PB_Event_SizeWindow ResizeAll() @@ -2058,8 +2115,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1467 -; FirstLine = 1437 +; CursorPosition = 1278 +; FirstLine = 1269 ; Folding = -------------- ; EnableThread ; EnableXP \ No newline at end of file diff --git a/gettext.pbi b/gettext.pbi new file mode 100644 index 0000000..c5f5b7e --- /dev/null +++ b/gettext.pbi @@ -0,0 +1,29 @@ +Procedure.s gettext(String.s = "") + Protected Language.s = "EN_en" + + Select Language + + Case "EN_en" + ProcedureReturn String + + Case "FR_fr" + + Select String + + Case "Identifier" + ProcedureReturn("Identificateur") + + Default + ProcedureReturn String + + EndSelect + + Default + ProcedureReturn String + + EndSelect +EndProcedure +; IDE Options = PureBasic 5.50 (Windows - x64) +; CursorPosition = 21 +; Folding = - +; EnableXP \ No newline at end of file From 079297b75087d407ef4a5962cd2eb933b552f9a6 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 14:33:36 +0200 Subject: [PATCH 12/36] Markers legend and identifier edit --- Forms/MarkerEdit.pbf | 40 ------------ PBMap.pb | 144 +++++++++++++++++++++++++------------------ 2 files changed, 85 insertions(+), 99 deletions(-) delete mode 100644 Forms/MarkerEdit.pbf diff --git a/Forms/MarkerEdit.pbf b/Forms/MarkerEdit.pbf deleted file mode 100644 index 4d94df9..0000000 --- a/Forms/MarkerEdit.pbf +++ /dev/null @@ -1,40 +0,0 @@ -; -; This code is automatically generated by the FormDesigner. -; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled. -; Event procedures needs to be put in another source file. -; - -Global WindowMarkerEdit - -Global TextIdentifier, TextLegend, StringIdentifier, EditorLegend - - -Procedure OpenWindowMarkerEdit(x = 0, y = 0, width = 300, height = 100) - WindowMarkerEdit = OpenWindow(#PB_Any, x, y, width, height, Marker Edit, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_NoGadgets) - TextIdentifier = TextGadget(#PB_Any, 2, 2, 80, 25, Identifier) - TextLegend = TextGadget(#PB_Any, 2, 27, 80, 25, Legend) - StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, "") - EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) -EndProcedure - -Procedure WindowMarkerEdit_Events(event) - Select event - Case #PB_Event_CloseWindow - ProcedureReturn #False - - Case #PB_Event_Menu - Select EventMenu() - EndSelect - - Case #PB_Event_Gadget - Select EventGadget() - EndSelect - EndSelect - ProcedureReturn #True -EndProcedure - - -; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 11 -; Folding = - -; EnableXP \ No newline at end of file diff --git a/PBMap.pb b/PBMap.pb index a8de004..fe7d032 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -1,14 +1,15 @@ -;************************************************************** +;******************************************************************** ; Program: PBMap ; Description: Permits the use of tiled maps like ; OpenStreetMap in a handy PureBASIC module ; Author: Thyphoon, djes And Idle ; Date: Mai 17, 2016 -; License: Free, unrestricted, credit appreciated -; but not required. +; License: PBMap : Free, unrestricted, credit +; appreciated but not required. +; OSM : see http://www.openstreetmap.org/copyright ; Note: Please share improvement ! -; Thanks: Progi1984 -;************************************************************** +; Thanks: Progi1984, yves86 +;******************************************************************** CompilerIf #PB_Compiler_Thread = #False MessageRequester("Warning !!","You must enable ThreadSafe support in compiler options",#PB_MessageRequester_Ok ) @@ -36,6 +37,8 @@ DeclareModule PBMap #MODE_SELECT = 2 #MODE_EDIT = 3 + #MARKER_EDIT_EVENT = #PB_Event_FirstCustomValue + ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) @@ -149,6 +152,7 @@ Module PBMap Focus.i Selected.i ; Is the marker selected ? CallBackPointer.i ; @Procedure(X.i, Y.i) to DrawPointer (you must use VectorDrawing lib) + EditWindow.i EndStructure ;-Options @@ -541,31 +545,7 @@ Module PBMap ClosePreferences() EndWith EndProcedure - - Procedure InitPBMap(Window) - Protected Result.i - If Verbose - OpenConsole() - EndIf - PBMap\ZoomMin = 0 - PBMap\ZoomMax = 18 - PBMap\MoveStartingPoint\x = - 1 - PBMap\TileSize = 256 - PBMap\Dirty = #False - PBMap\EditMarker = #False - PBMap\Font = LoadFont(#PB_Any, "Arial", 20, #PB_Font_Bold) - PBMap\Window = Window - PBMap\Timer = 1 - PBMap\Mode = #MODE_DEFAULT - LoadOptions() - If PBMap\Options\DefaultOSMServer <> "" - AddMapServerLayer("OSM", 1, PBMap\Options\DefaultOSMServer) - EndIf - curl_global_init(#CURL_GLOBAL_WIN32) - TechnicalImagesCreation() - SetLocation(0, 0) - EndProcedure - + Procedure.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18) Protected *Ptr = AddElement(PBMap\Layers()) Protected DirName.s = PBMap\Options\HDDCachePath + LayerName + "\" @@ -1276,33 +1256,47 @@ Module PBMap EndIf EndProcedure - Procedure MarkerWindowEvents() - If EventType() = #PB_EventType_Change - If EventGadget() = GetGadgetText(EventGadget()) <> "" - *Marker\Identifier = GetGadgetText(StringIdentifier) - EndIf - If GetGadgetText(EditorLegend) <> "" - *Marker\Legend = GetGadgetText(EditorLegend) - EndIf + ;-*** Marker Edit + Procedure MarkerIdentifierChange() + Protected *Marker.Marker = GetGadgetData(EventGadget()) + If GetGadgetText(EventGadget()) <> *Marker\Identifier + *Marker\Identifier = GetGadgetText(EventGadget()) EndIf EndProcedure - - Procedure EditMarker(*Marker.Marker) - CallDebugger - Protected WindowMarkerEdit = OpenWindow(#PB_Any, 0, 0, 300, 100, "Marker Edit", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_NoGadgets) - BindEvent() - TextGadget(#PB_Any, 2, 2, 80, 25, gettext("Identifier")) - TextGadget(#PB_Any, 2, 27, 80, 25, gettext("Legend")) - Protected StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, "") - Protected EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) - BindEvent(#PB_Event_CloseWindow, @MarkerWindowEvents(), WindowMarkerEdit, *Marker) - BindGadgetEvent(StringIdentifier, @MarkerWindowEvents()) - BindGadgetEvent(EditorLegend, @MarkerWindowEvents()) + Procedure MarkerLegendChange() + Protected *Marker.Marker = GetGadgetData(EventGadget()) + If GetGadgetText(EventGadget()) <> *Marker\Legend + *Marker\Legend = GetGadgetText(EventGadget()) + EndIf + EndProcedure + Procedure MarkerEditCloseWindow() + ForEach PBMap\Markers() + If PBMap\Markers()\EditWindow = EventWindow() + PBMap\Markers()\EditWindow = 0 + EndIf + Next + CloseWindow(EventWindow()) EndProcedure + Procedure MarkerEdit(*Marker.Marker) + If *Marker\EditWindow = 0 ;Check that this marker has no already opened window + Protected WindowMarkerEdit = OpenWindow(#PB_Any, WindowX(PBMap\Window) + WindowWidth(PBMap\Window) / 2 - 150, WindowY(PBMap\Window)+ WindowHeight(PBMap\Window) / 2 + 50, 300, 100, "Marker Edit", #PB_Window_SystemMenu | #PB_Window_TitleBar) + StickyWindow(WindowMarkerEdit, #True) + TextGadget(#PB_Any, 2, 2, 80, 25, gettext("Identifier")) + TextGadget(#PB_Any, 2, 27, 80, 25, gettext("Legend")) + Protected StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, *Marker\Identifier) : SetGadgetData(StringIdentifier, *Marker) + Protected EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) : SetGadgetText(EditorLegend, *Marker\Legend) : SetGadgetData(EditorLegend, *Marker) + *Marker\EditWindow = WindowMarkerEdit + BindGadgetEvent(StringIdentifier, @MarkerIdentifierChange(), #PB_EventType_Change) + BindGadgetEvent(EditorLegend, @MarkerLegendChange(), #PB_EventType_Change) + BindEvent(#PB_Event_CloseWindow, @MarkerEditCloseWindow(), WindowMarkerEdit) + Else + SetActiveWindow(*Marker\EditWindow) + EndIf + EndProcedure + ;-*** Procedure DrawMarker(x.i, y.i, Nb.i, *Marker.Marker) Protected Text.s - ;Nice marker by yves86 VectorSourceColor(*Marker\Color) MovePathCursor(x, y) AddPathLine(-8, -16, #PB_Path_Relative) @@ -1397,6 +1391,14 @@ Module PBMap DrawVectorText(StrD(*Drawing\Bounds\SouthEast\Latitude) + "," + StrD(*Drawing\Bounds\SouthEast\Longitude)) EndProcedure + Procedure DrawOSMCopyright(*Drawing.DrawingParameters) + Protected Text.s = "© OpenStreetMap contributors" + VectorFont(FontID(PBMap\Font), 12) + VectorSourceColor(RGBA(0, 0, 0, 80)) + MovePathCursor(GadgetWidth(PBMAP\Gadget) - VectorTextWidth(Text), GadgetHeight(PBMAP\Gadget) - 20) + DrawVectorText(Text) + EndProcedure + ;-*** Main drawing Procedure Drawing() Protected *Drawing.DrawingParameters = @PBMap\Drawing @@ -1451,7 +1453,8 @@ Module PBMap EndIf If PBMap\Options\ShowScale DrawScale(*Drawing, 10, GadgetHeight(PBMAP\Gadget) - 20, 192) - EndIf + EndIf + DrawOSMCopyright(*Drawing) StopVectorDrawing() EndProcedure @@ -1748,7 +1751,7 @@ Module PBMap SetLocation(PBMap\Markers()\GeographicCoordinates\Latitude, PBMap\Markers()\GeographicCoordinates\Longitude) ElseIf PBMap\Mode = #MODE_EDIT ;Edit the legend - EditMarker(@PBMap\Markers()) + MarkerEdit(@PBMap\Markers()) EndIf Break EndIf @@ -1834,7 +1837,7 @@ Module PBMap MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) ;Clip MouseX to the map range (in X, the map is infinite) MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) - If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT + If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT Or PBMap\Mode = #MODE_EDIT ;Check if mouse touch markers ForEach PBMap\Markers() LatLon2Pixel(@PBMap\Markers()\GeographicCoordinates, @MarkerCoords, PBMap\Zoom) @@ -1918,6 +1921,30 @@ Module PBMap AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) BindEvent(#PB_Event_Timer, @TimerEvents()) EndProcedure + + Procedure InitPBMap(Window) + Protected Result.i + If Verbose + OpenConsole() + EndIf + PBMap\ZoomMin = 0 + PBMap\ZoomMax = 18 + PBMap\MoveStartingPoint\x = - 1 + PBMap\TileSize = 256 + PBMap\Dirty = #False + PBMap\EditMarker = #False + PBMap\Font = LoadFont(#PB_Any, "Arial", 20, #PB_Font_Bold) + PBMap\Window = Window + PBMap\Timer = 1 + PBMap\Mode = #MODE_DEFAULT + LoadOptions() + If PBMap\Options\DefaultOSMServer <> "" + AddMapServerLayer("OSM", 1, PBMap\Options\DefaultOSMServer) + EndIf + curl_global_init(#CURL_GLOBAL_WIN32) + TechnicalImagesCreation() + SetLocation(0, 0) + EndProcedure EndModule @@ -2028,9 +2055,9 @@ CompilerIf #PB_Compiler_IsMainFile StringGadget(#StringLongitude, 600, 250, 90, 20, "") ButtonGadget(#Gdt_AddMarker, 530, 280, 150, 30, "Add Marker") ButtonGadget(#Gdt_LoadGpx, 530, 310, 150, 30, "Load GPX") - ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "OpenSeaMap", #PB_Button_Toggle) + ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "Show/Hide OpenSeaMap", #PB_Button_Toggle) ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle) - ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit Mode ON/OFF", #PB_Button_Toggle) + ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit mode ON/OFF", #PB_Button_Toggle) Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d @@ -2115,8 +2142,7 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1278 -; FirstLine = 1269 -; Folding = -------------- +; CursorPosition = 10 +; Folding = --------------- ; EnableThread ; EnableXP \ No newline at end of file From c1f655523652bcc975b926ed116bccb76df277e8 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 16:01:07 +0200 Subject: [PATCH 13/36] Form --- Forms/MarkerEdit.pbf | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Forms/MarkerEdit.pbf diff --git a/Forms/MarkerEdit.pbf b/Forms/MarkerEdit.pbf new file mode 100644 index 0000000..4d94df9 --- /dev/null +++ b/Forms/MarkerEdit.pbf @@ -0,0 +1,40 @@ +; +; This code is automatically generated by the FormDesigner. +; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled. +; Event procedures needs to be put in another source file. +; + +Global WindowMarkerEdit + +Global TextIdentifier, TextLegend, StringIdentifier, EditorLegend + + +Procedure OpenWindowMarkerEdit(x = 0, y = 0, width = 300, height = 100) + WindowMarkerEdit = OpenWindow(#PB_Any, x, y, width, height, Marker Edit, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered | #PB_Window_NoGadgets) + TextIdentifier = TextGadget(#PB_Any, 2, 2, 80, 25, Identifier) + TextLegend = TextGadget(#PB_Any, 2, 27, 80, 25, Legend) + StringIdentifier = StringGadget(#PB_Any, 84, 2, 120, 25, "") + EditorLegend = EditorGadget(#PB_Any, 84, 27, 210, 70) +EndProcedure + +Procedure WindowMarkerEdit_Events(event) + Select event + Case #PB_Event_CloseWindow + ProcedureReturn #False + + Case #PB_Event_Menu + Select EventMenu() + EndSelect + + Case #PB_Event_Gadget + Select EventGadget() + EndSelect + EndSelect + ProcedureReturn #True +EndProcedure + + +; IDE Options = PureBasic 5.50 (Windows - x64) +; CursorPosition = 11 +; Folding = - +; EnableXP \ No newline at end of file From 39ee09edd75ac8bf60942c2c240fdae56e37f166 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 16:59:20 +0200 Subject: [PATCH 14/36] geolocation wip --- PBMap.pb | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index fe7d032..789361b 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -278,6 +278,79 @@ Module PBMap IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl + Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i, ReceivedData.s + + ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream) + Protected SizeProper.i = Size & 255 + Protected NMemBProper.i = NMemB + If *ReceiveHTTPToMemoryBuffer = 0 + *ReceiveHTTPToMemoryBuffer = AllocateMemory(SizeProper * NMemBProper) + If *ReceiveHTTPToMemoryBuffer = 0 + Error("Curl : Problem allocating memory") + EndIf + Else + *ReceiveHTTPToMemoryBuffer = ReAllocateMemory(*ReceiveHTTPToMemoryBuffer, MemorySize(*ReceiveHTTPToMemoryBuffer) + SizeProper * NMemBProper) + If *ReceiveHTTPToMemoryBuffer = 0 + Error("Curl : Problem reallocating memory") + EndIf + EndIf + CopyMemory(*ptr, *ReceiveHTTPToMemoryBuffer + ReceiveHTTPToMemoryBufferPtr, SizeProper * NMemBProper) + ReceiveHTTPToMemoryBufferPtr + SizeProper * NMemBProper + ProcedureReturn SizeProper * NMemBProper + EndProcedure + + Procedure.i CurlReceiveHTTPToMemory(URL$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") + Protected *Buffer, curl.i, Timeout.i, res.i + If Len(URL$) + curl = curl_easy_init() + If curl + Timeout = 3 + curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) + curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) + curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) + curl_easy_setopt(curl, #CURLOPT_HEADER, 0) + curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) + curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) + If Len(ProxyURL$) + ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) + If Len(ProxyPort$) + ProxyURL$ + ":" + ProxyPort$ + EndIf + ; Debug ProxyURL$ + curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) + If Len(ProxyUser$) + If Len(ProxyPassword$) + ProxyUser$ + ":" + ProxyPassword$ + EndIf + ;Debug ProxyUser$ + curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) + EndIf + EndIf + curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToMemoryFunction()) + res = curl_easy_perform(curl) + If res = #CURLE_OK + *Buffer = AllocateMemory(ReceiveHTTPToMemoryBufferPtr) + If *Buffer + CopyMemory(*ReceiveHTTPToMemoryBuffer, *Buffer, ReceiveHTTPToMemoryBufferPtr) + FreeMemory(*ReceiveHTTPToMemoryBuffer) + *ReceiveHTTPToMemoryBuffer = #Null + ReceiveHTTPToMemoryBufferPtr = 0 + Else + MyDebug("Problem allocating buffer", 4) + EndIf + ;curl_easy_cleanup(curl) ;Was its original place but moved below as it seems more logical to me. + Else + MyDebug("CURL problem", 4) + EndIf + curl_easy_cleanup(curl) + Else + MyDebug("Can't Init CURL", 4) + EndIf + EndIf + ; Debug "Curl Buffer : " + Str(*Buffer) + ProcedureReturn *Buffer + EndProcedure + ;Curl write callback (needed for win32 dll) ProcedureC ReceiveHTTPWriteToFileFunction(*ptr, Size.i, NMemB.i, FileHandle.i) ProcedureReturn WriteData(FileHandle, *ptr, Size * NMemB) @@ -299,7 +372,7 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_HEADER, 0) curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) + curl_easy_setopt(curl, #CURLOPT_VERBOSE, 0) ;curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, 60) If Len(ProxyURL$) ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) @@ -331,6 +404,7 @@ Module PBMap EndIf ProcedureReturn #False EndProcedure + ;- *** Procedure TechnicalImagesCreation() @@ -1944,6 +2018,24 @@ Module PBMap curl_global_init(#CURL_GLOBAL_WIN32) TechnicalImagesCreation() SetLocation(0, 0) + + Protected Name.s = PBMap\Options\HDDCachePath + "JSon.json" + +; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) +; Debug *Buffer +; Debug MemorySize(*Buffer) +; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) +; If *Buffer <> 0 +; Debug JSon +; EndIf + Protected i + ;Protected Size.i = CurlReceiveHTTPToFile("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", Name, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + LoadJSON(0, Name) + For i = 0 To JSONArraySize(JSONValue(0)) - 1 + Debug GetJSONElement(JSONValue(0), i) + Next i + + EndProcedure EndModule @@ -2142,7 +2234,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 10 +; CursorPosition = 2030 +; FirstLine = 2009 ; Folding = --------------- ; EnableThread ; EnableXP \ No newline at end of file From 2e59908fd1fcdd7da5280fedc0d494695aa89c69 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 17:13:15 +0200 Subject: [PATCH 15/36] wip --- PBMap.pb | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 789361b..a0c9c3d 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2030,10 +2030,23 @@ Module PBMap ; EndIf Protected i ;Protected Size.i = CurlReceiveHTTPToFile("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", Name, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - LoadJSON(0, Name) - For i = 0 To JSONArraySize(JSONValue(0)) - 1 - Debug GetJSONElement(JSONValue(0), i) - Next i + If LoadJSON(0, Name) = 0 + ;Demivec's code + MessageRequester("Error", JSONErrorMessage() + " at position " + + JSONErrorPosition() + " in line " + + JSONErrorLine() + " of JSON web Data") + EndIf + + Protected object_val = JSONValue(0) + Protected lat = GetJSONMember(object_val, "lat") + Protected lon = GetJSONMember(object_val, "lon") + CallDebugger +; forecast_mem = GetJSONMember(item_mem, "forecast") + +; ExtractJSONArray(forecast_mem, forecast()) +; For i = 0 To JSONArraySize(JSONValue(0)) - 1 +; Debug GetJSONElement(JSONValue(0), i) +; Next i EndProcedure @@ -2234,8 +2247,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 2030 -; FirstLine = 2009 +; CursorPosition = 2039 +; FirstLine = 2023 ; Folding = --------------- ; EnableThread ; EnableXP \ No newline at end of file From 6de6c21de735c7454f231a777904067e44befd97 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 21:56:48 +0200 Subject: [PATCH 16/36] Geolocation WIP --- PBMap.pb | 137 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 52 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index a0c9c3d..7862ebd 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -39,6 +39,11 @@ DeclareModule PBMap #MARKER_EDIT_EVENT = #PB_Event_FirstCustomValue + Structure GeographicCoordinates + Longitude.d + Latitude.d + EndStructure + ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) @@ -73,17 +78,13 @@ DeclareModule PBMap Declare.i GetZoom() Declare.i GetMode() Declare SetMode(Mode.i = #MODE_DEFAULT) + Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) ;Send back the position *ptr.GeographicCoordinates EndDeclareModule Module PBMap EnableExplicit - - Structure GeographicCoordinates - Longitude.d - Latitude.d - EndStructure - + Structure PixelCoordinates x.i y.i @@ -108,7 +109,7 @@ Module PBMap ServerURL.s EndStructure - Structure TileBounds + Structure BoundingBox NorthWest.GeographicCoordinates SouthEast.GeographicCoordinates EndStructure @@ -119,7 +120,7 @@ Module PBMap CenterY.i GeographicCoordinates.GeographicCoordinates ; Real center TileCoordinates.Coordinates ; Center coordinates in tile.decimal - Bounds.TileBounds ; Drawing boundaries in lat/lon + Bounds.BoundingBox ; Drawing boundaries in lat/lon Height.d ; Drawing height in degrees Width.d ; Drawing width in degrees PBMapZoom.i @@ -619,7 +620,7 @@ Module PBMap ClosePreferences() EndWith EndProcedure - + Procedure.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18) Protected *Ptr = AddElement(PBMap\Layers()) Protected DirName.s = PBMap\Options\HDDCachePath + LayerName + "\" @@ -1757,6 +1758,44 @@ Module PBMap ProcedureReturn Value EndProcedure + Procedure NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) + Protected Query.s = "http://nominatim.openstreetmap.org/search/" + + URLEncoder(Address) + + ;"Unter%20den%20Linden%201%20Berlin" + + "?format=json&addressdetails=0&polygon=0&limit=1" + Protected JSONFileName.s = PBMap\Options\HDDCachePath + "nominatimresponse.json" + ; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + ; Debug *Buffer + ; Debug MemorySize(*Buffer) + ; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) + Protected Size.i = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + If LoadJSON(0, JSONFileName) = 0 + ;Demivec's code + MyDebug( JSONErrorMessage() + " at position " + + JSONErrorPosition() + " in line " + + JSONErrorLine() + " of JSON web Data", 1) + EndIf + If JSONArraySize(JSONValue(0)) > 0 + Protected object_val = GetJSONElement(JSONValue(0), 0) + Protected object_box = GetJSONMember(object_val, "boundingbox") + Protected bbox.BoundingBox + bbox\SouthEast\Latitude = ValD(GetJSONString(GetJSONElement(object_box, 0))) + bbox\NorthWest\Latitude = ValD(GetJSONString(GetJSONElement(object_box, 1))) + bbox\NorthWest\Longitude = ValD(GetJSONString(GetJSONElement(object_box, 2))) + bbox\SouthEast\Longitude = ValD(GetJSONString(GetJSONElement(object_box, 3))) + Protected lat.s = GetJSONString(GetJSONMember(object_val, "lat")) + Protected lon.s = GetJSONString(GetJSONMember(object_val, "lon")) + If *ReturnPosition <> 0 + *ReturnPosition\Latitude = ValD(lat) + *ReturnPosition\Longitude = ValD(lon) + EndIf + If lat<> "" And lon <> "" + ZoomToArea(bbox\SouthEast\Latitude, bbox\NorthWest\Latitude, bbox\NorthWest\Longitude, bbox\SouthEast\Longitude) + ;SetLocation(Position\Latitude, Position\Longitude) + EndIf + EndIf + EndProcedure + Procedure CanvasEvents() Protected MouseX.i, MouseY.i Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize @@ -2018,37 +2057,6 @@ Module PBMap curl_global_init(#CURL_GLOBAL_WIN32) TechnicalImagesCreation() SetLocation(0, 0) - - Protected Name.s = PBMap\Options\HDDCachePath + "JSon.json" - -; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) -; Debug *Buffer -; Debug MemorySize(*Buffer) -; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) -; If *Buffer <> 0 -; Debug JSon -; EndIf - Protected i - ;Protected Size.i = CurlReceiveHTTPToFile("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", Name, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - If LoadJSON(0, Name) = 0 - ;Demivec's code - MessageRequester("Error", JSONErrorMessage() + " at position " + - JSONErrorPosition() + " in line " + - JSONErrorLine() + " of JSON web Data") - EndIf - - Protected object_val = JSONValue(0) - Protected lat = GetJSONMember(object_val, "lat") - Protected lon = GetJSONMember(object_val, "lon") - CallDebugger -; forecast_mem = GetJSONMember(item_mem, "forecast") - -; ExtractJSONArray(forecast_mem, forecast()) -; For i = 0 To JSONArraySize(JSONValue(0)) - 1 -; Debug GetJSONElement(JSONValue(0), i) -; Next i - - EndProcedure EndModule @@ -2079,6 +2087,8 @@ CompilerIf #PB_Compiler_IsMainFile #Gdt_AddOpenseaMap #Gdt_Degrees #Gdt_EditMode + #TextGeoLocationQuery + #StringGeoLocationQuery EndEnumeration Structure Location @@ -2129,14 +2139,16 @@ CompilerIf #PB_Compiler_IsMainFile ResizeGadget(#Button_4,WindowWidth(#Window_0)-150,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Button_5,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Text_3,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) - ResizeGadget(#StringLatitude,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore) - ResizeGadget(#StringLongitude,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#StringLatitude,WindowWidth(#Window_0)-120,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#StringLongitude,WindowWidth(#Window_0)-120,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Text_4,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_AddMarker,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_LoadGpx,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_AddOpenseaMap,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Degrees,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_EditMode,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#TextGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#StringGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) PBMap::Refresh() EndProcedure @@ -2154,15 +2166,19 @@ CompilerIf #PB_Compiler_IsMainFile TextGadget(#Text_2, 530, 160, 60, 15, "Zoom") ButtonGadget(#Button_4, 550, 180, 50, 30, " + ") : SetGadgetFont(#Button_4, FontID(1)) ButtonGadget(#Button_5, 600, 180, 50, 30, " - ") : SetGadgetFont(#Button_5, FontID(1)) - TextGadget(#Text_3, 530, 230, 60, 15, "Latitude : ") - StringGadget(#StringLatitude, 600, 230, 90, 20, "") - TextGadget(#Text_4, 530, 250, 60, 15, "Longitude : ") - StringGadget(#StringLongitude, 600, 250, 90, 20, "") + TextGadget(#Text_3, 530, 230, 50, 15, "Latitude ") + StringGadget(#StringLatitude, 580, 230, 90, 20, "") + TextGadget(#Text_4, 530, 250, 50, 15, "Longitude ") + StringGadget(#StringLongitude, 580, 250, 90, 20, "") ButtonGadget(#Gdt_AddMarker, 530, 280, 150, 30, "Add Marker") ButtonGadget(#Gdt_LoadGpx, 530, 310, 150, 30, "Load GPX") ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "Show/Hide OpenSeaMap", #PB_Button_Toggle) ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle) ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit mode ON/OFF", #PB_Button_Toggle) + TextGadget(#TextGeoLocationQuery, 530, 435, 150, 15, "Enter an address") + StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") + SetActiveGadget(#StringGeoLocationQuery) + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d @@ -2206,7 +2222,10 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) Case #StringLatitude, #StringLongitude Select EventType() + Case #PB_EventType_Focus + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) Case #PB_EventType_LostFocus + RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates PBMap::Refresh() EndSelect @@ -2235,10 +2254,24 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetMode(PBMap::#MODE_DEFAULT) SetGadgetState(#Gdt_EditMode, 0) EndIf - EndSelect - Case #PB_Event_SizeWindow - ResizeAll() - EndSelect + Case #StringGeoLocationQuery + Select EventType() + Case #PB_EventType_Focus + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + Case #PB_EventType_LostFocus + RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) + PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery)) + PBMap::Refresh() + EndSelect + EndSelect + Case #PB_Event_SizeWindow + ResizeAll() + Case #PB_Event_Menu + Select EventMenu() + Case 1 + SetActiveGadget(-1) + EndSelect + EndSelect Until Quit = #True PBMap::Quit() @@ -2247,8 +2280,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 2039 -; FirstLine = 2023 +; CursorPosition = 2183 +; FirstLine = 2166 ; Folding = --------------- ; EnableThread ; EnableXP \ No newline at end of file From 717de5f6a3f500fc23d096583f01dc154de48695 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 30 Sep 2016 22:16:20 +0200 Subject: [PATCH 17/36] Lil track update --- PBMap.pb | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 7862ebd..b034bb4 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -64,6 +64,7 @@ DeclareModule PBMap Declare ClearTracks() Declare DeleteTrack(*Ptr) Declare DeleteSelectedTracks() + Declare SetTrackColour(*Ptr, Colour.i) Declare.i AddMarker(Latitude.d, Longitude.d, Identifier.s = "", Legend.s = "", color.l=-1, CallBackPointer.i = -1) Declare ClearMarkers() Declare DeleteMarker(*Ptr) @@ -1163,6 +1164,25 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure + Procedure TrackPointerFirst(x.i, y.i, dist.l) + Protected color.l + color=RGBA(0, 0, 0, 255) + MovePathCursor(x,y) + AddPathLine(-9,-17,#PB_Path_Relative) + AddPathLine(17,0,#PB_Path_Relative) + AddPathLine(-9,17,#PB_Path_Relative) + VectorSourceColor(color) + AddPathCircle(x,y-24,16) + FillPath() + VectorSourceColor(RGBA(255, 0, 0, 255)) + AddPathCircle(x,y-24,14) + FillPath() + VectorFont(FontID(PBMap\Font), 14) + MovePathCursor(x-VectorTextWidth(Str(dist))/2, y-24-VectorTextHeight(Str(dist))/2) + VectorSourceColor(RGBA(0, 0, 0, 255)) + DrawVectorText(Str(dist)) + EndProcedure + Procedure DeleteTrack(*Ptr) If *Ptr ChangeCurrentElement(PBMap\TracksList(), *Ptr) @@ -1184,6 +1204,14 @@ Module PBMap PBMap\Redraw = #True EndProcedure + Procedure SetTrackColour(*Ptr, Colour.i) + If *Ptr + ChangeCurrentElement(PBMap\TracksList(), *Ptr) + PBMap\TracksList()\Colour = Colour + PBMap\Redraw = #True + EndIf + EndProcedure + Procedure DrawTracks(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates Protected Location.GeographicCoordinates @@ -1229,7 +1257,7 @@ Module PBMap Next EndVectorLayer() ;Draw distances - If PBMap\Options\ShowTrackKms + If PBMap\Options\ShowTrackKms And PBMap\Zoom > 10 BeginVectorLayer() ForEach PBMap\TracksList() If \Visible @@ -1247,9 +1275,11 @@ Module PBMap LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If Int(km) <> memKm memKm = Int(km) - If PBMap\Zoom > 10 + If Int(km) = 0 + TrackPointerFirst(Pixel\X , Pixel\Y, Int(km)) + Else TrackPointer(Pixel\X , Pixel\Y, Int(km)) - EndIf + EndIf EndIf Next EndIf @@ -2183,6 +2213,7 @@ CompilerIf #PB_Compiler_IsMainFile Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d Define OpenSeaMap = 0, Degrees = 1 + Define *Track ;Our main gadget PBMap::InitPBMap(#Window_0) @@ -2219,7 +2250,8 @@ CompilerIf #PB_Compiler_IsMainFile Case #Button_5 PBMap::SetZoom( - 1) Case #Gdt_LoadGpx - PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) + *Track = PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0)) + PBMap::SetTrackColour(*Track, RGBA(Random(255), Random(255), Random(255), 128)) Case #StringLatitude, #StringLongitude Select EventType() Case #PB_EventType_Focus @@ -2280,8 +2312,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 2183 -; FirstLine = 2166 -; Folding = --------------- +; CursorPosition = 1156 +; FirstLine = 1144 +; Folding = ---------------- ; EnableThread ; EnableXP \ No newline at end of file From 86483640d7271f5535f3e5d361bdebd83a79a2bb Mon Sep 17 00:00:00 2001 From: djes Date: Sun, 2 Oct 2016 19:52:49 +0200 Subject: [PATCH 18/36] Linux SetActiveGadget(-1) fix --- PBMap.pb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index b034bb4..86797ee 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2209,6 +2209,10 @@ CompilerIf #PB_Compiler_IsMainFile StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") SetActiveGadget(#StringGeoLocationQuery) AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + CompilerIf #PB_Compiler_OS = #PB_OS_Linux + Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") + HideGadget(Dummy, 1) + CompilerEndIf Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d @@ -2301,7 +2305,11 @@ CompilerIf #PB_Compiler_IsMainFile Case #PB_Event_Menu Select EventMenu() Case 1 - SetActiveGadget(-1) + CompilerIf #PB_Compiler_OS = #PB_OS_Linux + SetActiveGadget(Dummy) + CompilerElse + SetActiveGadget(-1) + CompilerEndIf EndSelect EndSelect Until Quit = #True @@ -2311,9 +2319,10 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf -; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1156 -; FirstLine = 1144 +; IDE Options = PureBasic 5.42 LTS (Windows - x64) +; CursorPosition = 2180 +; FirstLine = 2221 ; Folding = ---------------- +; EnableUnicode ; EnableThread ; EnableXP \ No newline at end of file From 43f0fc982fa8c5173f08425eda1bf568274cacef Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 09:22:42 +0200 Subject: [PATCH 19/36] BindMapGadget and SetActiveGadget(-1) workaround, and new screenshot --- PBMap.pb | 39 ++++++++++++++++++++++++++++----------- screenshot.png | Bin 382702 -> 292622 bytes 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index b034bb4..1ee65be 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -51,6 +51,7 @@ DeclareModule PBMap Declare SaveOptions(PreferencesFile.s = "PBMap.prefs") Declare.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18) Declare DeleteLayer(Nb.i) + Declare BindMapGadget(Gadget.i) Declare MapGadget(Gadget.i, X.i, Y.i, Width.i, Height.i) Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() @@ -1804,8 +1805,7 @@ Module PBMap MyDebug( JSONErrorMessage() + " at position " + JSONErrorPosition() + " in line " + JSONErrorLine() + " of JSON web Data", 1) - EndIf - If JSONArraySize(JSONValue(0)) > 0 + ElseIf JSONArraySize(JSONValue(0)) > 0 Protected object_val = GetJSONElement(JSONValue(0), 0) Protected object_box = GetJSONMember(object_val, "boundingbox") Protected bbox.BoundingBox @@ -1823,7 +1823,7 @@ Module PBMap ZoomToArea(bbox\SouthEast\Latitude, bbox\NorthWest\Latitude, bbox\NorthWest\Longitude, bbox\SouthEast\Longitude) ;SetLocation(Position\Latitude, Position\Longitude) EndIf - EndIf + EndIf EndProcedure Procedure CanvasEvents() @@ -2053,6 +2053,15 @@ Module PBMap EndIf EndProcedure + ; Could be called directly to attach our map to an existing canvas + Procedure BindMapGadget(Gadget.i) + PBMap\Gadget = Gadget + BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) + AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) + BindEvent(#PB_Event_Timer, @TimerEvents()) + EndProcedure + + ; Creates a canvas and attach our map Procedure MapGadget(Gadget.i, X.i, Y.i, Width.i, Height.i) If Gadget = #PB_Any PBMap\Gadget = CanvasGadget(PBMap\Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard) ;#PB_Canvas_Keyboard has to be set for mousewheel to work on windows @@ -2060,11 +2069,9 @@ Module PBMap PBMap\Gadget = Gadget CanvasGadget(PBMap\Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard) EndIf - BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) - AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) - BindEvent(#PB_Event_Timer, @TimerEvents()) + BindMapGadget(PBMap\Gadget) EndProcedure - + Procedure InitPBMap(Window) Protected Result.i If Verbose @@ -2209,7 +2216,15 @@ CompilerIf #PB_Compiler_IsMainFile StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") SetActiveGadget(#StringGeoLocationQuery) AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) - + ;*** TODO : code to remove when the SetActiveGadget(-1) will be fixed + CompilerIf #PB_Compiler_OS = #PB_OS_Linux + define Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") + HideGadget(Dummy, 1) + CompilerElse + Define Dummy = -1 + CompilerEndIf + ;*** + Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d Define OpenSeaMap = 0, Degrees = 1 @@ -2301,7 +2316,9 @@ CompilerIf #PB_Compiler_IsMainFile Case #PB_Event_Menu Select EventMenu() Case 1 - SetActiveGadget(-1) + ;*** TODO : code to change when the SetActiveGadget(-1) will be fixed + SetActiveGadget(Dummy) + ;*** EndSelect EndSelect Until Quit = #True @@ -2312,8 +2329,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1156 -; FirstLine = 1144 +; CursorPosition = 57 +; FirstLine = 48 ; Folding = ---------------- ; EnableThread ; EnableXP \ No newline at end of file diff --git a/screenshot.png b/screenshot.png index 4284dac04fce8abe1d09a303246d5482c8b2d313..a1b937dfcff68d44c53998d8db4558ea04eccb1c 100644 GIT binary patch literal 292622 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

w-Uz4v{9?TW$=w%(HRi%I@{s9cvtXUpqhh-_<(c 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

cbhx_#_O z74hkgiN@iUt;o%ToAIKoWw)8cvYkQm>3D*9oN{yseYVf=yHBEY;H9Qy`<9XM1LM_3CtHP$K-qjN*jv`Js-v;A^cXo) zj2&;S-MtQs1As@uUt^I002+Y!E(8cFBn{%-w6Aj?`*Uwg1@&G$oDLh$z)MZ9&uq0D zq=P&9A6rBHQcHfh4K#kU#iR0Bw75piR5|eQxhjAl4|7n!OFbmkk=JaB0qwRfwetT0ex22)2I1@lI z&9 z)azjA%1g7Vv#`pGrUM1j@#)OK+4iOffeR~Y2c1qM#wN$XQT(*krGn9g2~B=BJ%6dI z;(1DNQ%=BLo}hvpmY8nud6Tx`c|A-`>~YE>#1&61h90%?DH7iJ6svVoy+ z$nf0mO`n~BRc+*bD={b9#KWVXVf}1)@qcPl-MSHDV?TqdG~9LZ_k@Xx$=XUvCAL$V zP2Y^RgC*W!i$dw+NFxs8Kb|rW^L8qI?3%GC%vt+}@m7=bF)k$MhWSMZ02z(<%lm*P z-OVLu=k<%)#_I~XkLT$(y?Gb$oX-1Yv-kFG|8GXIJNfzz>lndU;_0;D8hHBT?aGaR z9!H>8-XyY!=%wNDMciP*AN%2JWJ+gh9^M|T7%YJNc~Xy>NjL2Kwgs2e>}r~Qi#|at z68NG3f+zd5z@tZ%^4S`lN5@U)t9zf;&B%%E$Hs+sUR|^5Ue(iYW>qs`_1YxG_mV&@Wz!*#IY_)D9YoFXud){>HS9reYQn z&|_Z5f#p!eI0)+L=jKy)5w*P09h@*?OVXVwTtB(?cvBA}qNm`J?a2HKn=J90eN~`f zA9p#kj96NVrkH}9z{HivdU^Na3_fs%fH;~u>rH0SNyOc-kAV8WN z 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�Bfn<&7+os5QTum0AMbm88{Y`kq{}I!blF=IS$GB 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 z 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 z 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®$KgOcZglaJrJ!kH%t;-_8f2bqW1h@YUE6+ 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⪙K3&JeJd8_ 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�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 Date: Mon, 3 Oct 2016 16:48:14 +0200 Subject: [PATCH 20/36] Cleaning up tile structure --- PBMap.pb | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 1ee65be..0d925ae 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -99,16 +99,12 @@ Module PBMap ;- Tile Structure Structure Tile - Position.Coordinates - PBMapTileX.i - PBMapTileY.i - PBMapZoom.i nImage.i key.s + URL.s CacheFile.s GetImageThread.i RetryNb.i - ServerURL.s EndStructure Structure BoundingBox @@ -136,6 +132,7 @@ Module PBMap nImage.i *Tile.Tile TimeStackPosition.i + Alpha.i EndStructure Structure ImgMemCachKey @@ -891,9 +888,8 @@ Module PBMap Procedure GetImageThread(*Tile.Tile) Protected nImage.i = -1 - Protected TileURL.s = *Tile\ServerURL + Str(*Tile\PBMapZoom) + "/" + Str(*Tile\PBMapTileX) + "/" + Str(*Tile\PBMapTileY) + ".png" Repeat - nImage = GetTileFromWeb(TileURL, *Tile\CacheFile) + nImage = GetTileFromWeb(*Tile\URL, *Tile\CacheFile) If nImage <> -1 MyDebug("Image key : " + *Tile\key + " web image loaded", 3) *Tile\RetryNb = 0 @@ -909,7 +905,7 @@ Module PBMap EndProcedure ;-*** - Procedure.i GetTile(key.s, CacheFile.s, px.i, py.i, tilex.i, tiley.i, ServerURL.s) + Procedure.i GetTile(key.s, URL.s, CacheFile.s) ; Try to find the tile in memory cache. If not found, add it, try To load it from the ; HDD, or launch a loading thread, and try again on the next drawing loop. Protected timg = -1 @@ -967,14 +963,9 @@ Module PBMap With *NewTile PBMap\MemCache\Images()\Tile = *NewTile ;New tile parameters - \Position\x = px - \Position\y = py - \PBMapTileX = tilex - \PBMapTileY = tiley - \PBMapZoom = PBMap\Zoom \key = key + \URL = URL \CacheFile = CacheFile - \ServerURL = ServerURL \RetryNb = 5 \nImage = -1 MyDebug(" Creating get image thread nb " + Str(\GetImageThread) + " to get " + CacheFile, 3) @@ -993,7 +984,8 @@ Module PBMap Protected ty = Int(*Drawing\TileCoordinates\y) Protected nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point Protected ny = *Drawing\CenterY / PBMap\TileSize - Protected px, py, img, tilex,tiley, key.s, CacheFile.s + Protected px, py, img, tilex,tiley, key.s + Protected URL.s, CacheFile.s Protected tilemax = 1< -1 MovePathCursor(px, py) DrawVectorImage(ImageID(img), alpha) @@ -2218,7 +2211,7 @@ CompilerIf #PB_Compiler_IsMainFile AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) ;*** TODO : code to remove when the SetActiveGadget(-1) will be fixed CompilerIf #PB_Compiler_OS = #PB_OS_Linux - define Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") + Define Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") HideGadget(Dummy, 1) CompilerElse Define Dummy = -1 @@ -2329,8 +2322,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 57 -; FirstLine = 48 +; CursorPosition = 911 +; FirstLine = 895 ; Folding = ---------------- ; EnableThread ; EnableXP \ No newline at end of file From 2fa810fb8857d35089b6c9d0c7642654cd92d22c Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 17:08:48 +0200 Subject: [PATCH 21/36] Alpha apparition + img loading update --- PBMap.pb | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 0d925ae..cadc4ba 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -908,18 +908,19 @@ Module PBMap Procedure.i GetTile(key.s, URL.s, CacheFile.s) ; Try to find the tile in memory cache. If not found, add it, try To load it from the ; HDD, or launch a loading thread, and try again on the next drawing loop. - Protected timg = -1 - If FindMapElement(PBMap\MemCache\Images(), key) + Protected img.i + Protected *timg.ImgMemCach = FindMapElement(PBMap\MemCache\Images(), key) + If *timg MyDebug("Key : " + key + " found in memory cache!", 3) - timg = PBMap\MemCache\Images()\nImage - If timg <> -1 - MyDebug("Image : " + timg + " found in memory cache!", 3) + img = PBMap\MemCache\Images()\nImage + If img <> -1 + MyDebug("Image : " + img + " found in memory cache!", 3) ;*** Cache management ; Move the newly used element to the last position of the time stack SelectElement(PBMap\MemCache\ImagesTimeStack(), PBMap\MemCache\Images()\TimeStackPosition) MoveElement(PBMap\MemCache\ImagesTimeStack(), #PB_List_Last) ;*** - ProcedureReturn timg + ProcedureReturn *timg EndIf Else AddMapElement(PBMap\MemCache\Images(), key) @@ -948,20 +949,23 @@ Module PBMap MyDebug("Key : " + key + " added in memory cache!", 3) PBMap\MemCache\Images()\nImage = -1 EndIf + *timg = PBMap\MemCache\Images() If PBMap\MemCache\Images()\Tile = 0 ; Check if a loading thread is not running MyDebug("Trying to load from HDD " + CacheFile, 3) - timg = GetTileFromHDD(CacheFile.s) - If timg <> -1 + img = GetTileFromHDD(CacheFile.s) + If img <> -1 MyDebug("Key : " + key + " found on HDD", 3) - PBMap\MemCache\Images()\nImage = timg - ProcedureReturn timg + *timg\nImage = img + *timg\Alpha = 0 + ProcedureReturn *timg EndIf MyDebug("Key : " + key + " not found on HDD", 3) ;Launch a new thread Protected *NewTile.Tile = AllocateMemory(SizeOf(Tile)) If *NewTile With *NewTile - PBMap\MemCache\Images()\Tile = *NewTile + *timg\Tile = *NewTile + *timg\Alpha = 0 ;New tile parameters \key = key \URL = URL @@ -975,16 +979,16 @@ Module PBMap MyDebug(" Error, can't create a new tile loading thread", 3) EndIf EndIf - ProcedureReturn timg + ProcedureReturn *timg EndProcedure - Procedure DrawTiles(*Drawing.DrawingParameters, Layer, alpha.i=255) + Procedure DrawTiles(*Drawing.DrawingParameters, Layer) Protected x.i, y.i,kq.q Protected tx = Int(*Drawing\TileCoordinates\x) ;Don't forget the Int() ! Protected ty = Int(*Drawing\TileCoordinates\y) Protected nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point Protected ny = *Drawing\CenterY / PBMap\TileSize - Protected px, py, img, tilex,tiley, key.s + Protected px, py, *timg.ImgMemCach, tilex, tiley, key.s Protected URL.s, CacheFile.s Protected tilemax = 1< -1 + *timg = GetTile(key, URL, CacheFile) + If *timg\nImage <> -1 MovePathCursor(px, py) - DrawVectorImage(ImageID(img), alpha) + DrawVectorImage(ImageID(*timg\nImage), *timg\Alpha) + If *timg\Alpha < 240 + *timg\Alpha + 16 + Else + *timg\Alpha = 255 + EndIf Else MovePathCursor(px, py) - DrawVectorImage(ImageID(PBMap\ImgLoading), alpha) + DrawVectorImage(ImageID(PBMap\ImgLoading)) EndIf Else ;If PBMap\Layers()\Name = "" @@ -1073,7 +1082,7 @@ Module PBMap sunit = " Km" EndSelect VectorFont(FontID(PBMap\Font), 10) - VectorSourceColor(RGBA(0, 0, 0,alpha)) + VectorSourceColor(RGBA(0, 0, 0, alpha)) MovePathCursor(x,y) DrawVectorText(StrD(Scale,3)+sunit) MovePathCursor(x,y+12) @@ -2322,8 +2331,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 911 -; FirstLine = 895 +; CursorPosition = 1037 +; FirstLine = 997 ; Folding = ---------------- ; EnableThread ; EnableXP \ No newline at end of file From b900bdc9dbbdd01b1c0b175b6ded15553fa16c06 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 22:34:06 +0200 Subject: [PATCH 22/36] transparency --- PBMap.pb | 127 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 71 insertions(+), 56 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 86797ee..1e63e59 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -26,8 +26,8 @@ DeclareModule PBMap #Red = 255 ;-Show debug infos - Global Verbose = 0 - Global MyDebugLevel = 5 + Global Verbose = 1 + Global MyDebugLevel = 4 #SCALE_NAUTICAL = 1 #SCALE_KM = 0 @@ -51,6 +51,7 @@ DeclareModule PBMap Declare SaveOptions(PreferencesFile.s = "PBMap.prefs") Declare.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18) Declare DeleteLayer(Nb.i) + Declare BindMapGadget(Gadget.i) Declare MapGadget(Gadget.i, X.i, Y.i, Width.i, Height.i) Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() @@ -98,16 +99,12 @@ Module PBMap ;- Tile Structure Structure Tile - Position.Coordinates - PBMapTileX.i - PBMapTileY.i - PBMapZoom.i nImage.i key.s + URL.s CacheFile.s GetImageThread.i RetryNb.i - ServerURL.s EndStructure Structure BoundingBox @@ -135,6 +132,7 @@ Module PBMap nImage.i *Tile.Tile TimeStackPosition.i + Alpha.i EndStructure Structure ImgMemCachKey @@ -890,9 +888,8 @@ Module PBMap Procedure GetImageThread(*Tile.Tile) Protected nImage.i = -1 - Protected TileURL.s = *Tile\ServerURL + Str(*Tile\PBMapZoom) + "/" + Str(*Tile\PBMapTileX) + "/" + Str(*Tile\PBMapTileY) + ".png" Repeat - nImage = GetTileFromWeb(TileURL, *Tile\CacheFile) + nImage = GetTileFromWeb(*Tile\URL, *Tile\CacheFile) If nImage <> -1 MyDebug("Image key : " + *Tile\key + " web image loaded", 3) *Tile\RetryNb = 0 @@ -908,21 +905,22 @@ Module PBMap EndProcedure ;-*** - Procedure.i GetTile(key.s, CacheFile.s, px.i, py.i, tilex.i, tiley.i, ServerURL.s) + Procedure.i GetTile(key.s, URL.s, CacheFile.s) ; Try to find the tile in memory cache. If not found, add it, try To load it from the ; HDD, or launch a loading thread, and try again on the next drawing loop. - Protected timg = -1 - If FindMapElement(PBMap\MemCache\Images(), key) + Protected img.i = -1 + Protected *timg.ImgMemCach = FindMapElement(PBMap\MemCache\Images(), key) + If *timg MyDebug("Key : " + key + " found in memory cache!", 3) - timg = PBMap\MemCache\Images()\nImage - If timg <> -1 - MyDebug("Image : " + timg + " found in memory cache!", 3) + img = *timg\nImage + If img <> -1 + MyDebug("Image : " + img + " found in memory cache!", 3) ;*** Cache management ; Move the newly used element to the last position of the time stack - SelectElement(PBMap\MemCache\ImagesTimeStack(), PBMap\MemCache\Images()\TimeStackPosition) + SelectElement(PBMap\MemCache\ImagesTimeStack(), *timg\TimeStackPosition) MoveElement(PBMap\MemCache\ImagesTimeStack(), #PB_List_Last) ;*** - ProcedureReturn timg + ProcedureReturn *timg EndIf Else AddMapElement(PBMap\MemCache\Images(), key) @@ -949,31 +947,30 @@ Module PBMap PBMap\MemCache\ImagesTimeStack()\MapKey = MapKey(PBMap\MemCache\Images()) ;*** MyDebug("Key : " + key + " added in memory cache!", 3) - PBMap\MemCache\Images()\nImage = -1 + *timg = PBMap\MemCache\Images() + *timg\nImage = -1 EndIf - If PBMap\MemCache\Images()\Tile = 0 ; Check if a loading thread is not running + If *timg\Tile = 0 ; Check if a loading thread is not running MyDebug("Trying to load from HDD " + CacheFile, 3) - timg = GetTileFromHDD(CacheFile.s) - If timg <> -1 + img = GetTileFromHDD(CacheFile.s) + If img <> -1 MyDebug("Key : " + key + " found on HDD", 3) - PBMap\MemCache\Images()\nImage = timg - ProcedureReturn timg + *timg\nImage = img + *timg\Alpha = 0 + ProcedureReturn *timg EndIf MyDebug("Key : " + key + " not found on HDD", 3) ;Launch a new thread Protected *NewTile.Tile = AllocateMemory(SizeOf(Tile)) If *NewTile With *NewTile - PBMap\MemCache\Images()\Tile = *NewTile + *timg\Tile = *NewTile + *timg\Alpha = 0 + ;*timg\nImage = -1 ;New tile parameters - \Position\x = px - \Position\y = py - \PBMapTileX = tilex - \PBMapTileY = tiley - \PBMapZoom = PBMap\Zoom \key = key + \URL = URL \CacheFile = CacheFile - \ServerURL = ServerURL \RetryNb = 5 \nImage = -1 MyDebug(" Creating get image thread nb " + Str(\GetImageThread) + " to get " + CacheFile, 3) @@ -983,16 +980,17 @@ Module PBMap MyDebug(" Error, can't create a new tile loading thread", 3) EndIf EndIf - ProcedureReturn timg + ProcedureReturn *timg EndProcedure - Procedure DrawTiles(*Drawing.DrawingParameters, Layer, alpha.i=255) + Procedure DrawTiles(*Drawing.DrawingParameters, Layer) Protected x.i, y.i,kq.q Protected tx = Int(*Drawing\TileCoordinates\x) ;Don't forget the Int() ! Protected ty = Int(*Drawing\TileCoordinates\y) Protected nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point Protected ny = *Drawing\CenterY / PBMap\TileSize - Protected px, py, img, tilex,tiley, key.s, CacheFile.s + Protected px, py, *timg.ImgMemCach, tilex, tiley, key.s + Protected URL.s, CacheFile.s Protected tilemax = 1< -1 + *timg = GetTile(key, URL, CacheFile) + If *timg\nImage <> -1 MovePathCursor(px, py) - DrawVectorImage(ImageID(img), alpha) + DrawVectorImage(ImageID(*timg\nImage), *timg\Alpha) + If *timg\Alpha < 224 + *timg\Alpha = (*timg\Alpha + 32) & $FF + PBMap\Redraw = #True + Else + *timg\Alpha = 255 + EndIf Else MovePathCursor(px, py) - DrawVectorImage(ImageID(PBMap\ImgLoading), alpha) + DrawVectorImage(ImageID(PBMap\ImgLoading), 255) EndIf Else ;If PBMap\Layers()\Name = "" MovePathCursor(px, py) - DrawVectorImage(ImageID(PBMap\ImgNothing)) + DrawVectorImage(ImageID(PBMap\ImgNothing), 255) ;EndIf EndIf If PBMap\Options\ShowDebugInfos @@ -1079,7 +1084,7 @@ Module PBMap sunit = " Km" EndSelect VectorFont(FontID(PBMap\Font), 10) - VectorSourceColor(RGBA(0, 0, 0,alpha)) + VectorSourceColor(RGBA(0, 0, 0, alpha)) MovePathCursor(x,y) DrawVectorText(StrD(Scale,3)+sunit) MovePathCursor(x,y+12) @@ -1536,6 +1541,8 @@ Module PBMap ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + VectorSourceColor(RGBA(150, 150, 150, 255)) + FillVectorOutput() ;TODO add in layers of tiles ;this way we can cache them as 0 base 1.n layers ; such as for openseamap tiles which are overlaid. not that efficent from here though. ForEach PBMap\Layers() @@ -1804,8 +1811,7 @@ Module PBMap MyDebug( JSONErrorMessage() + " at position " + JSONErrorPosition() + " in line " + JSONErrorLine() + " of JSON web Data", 1) - EndIf - If JSONArraySize(JSONValue(0)) > 0 + ElseIf JSONArraySize(JSONValue(0)) > 0 Protected object_val = GetJSONElement(JSONValue(0), 0) Protected object_box = GetJSONMember(object_val, "boundingbox") Protected bbox.BoundingBox @@ -1823,7 +1829,7 @@ Module PBMap ZoomToArea(bbox\SouthEast\Latitude, bbox\NorthWest\Latitude, bbox\NorthWest\Longitude, bbox\SouthEast\Longitude) ;SetLocation(Position\Latitude, Position\Longitude) EndIf - EndIf + EndIf EndProcedure Procedure CanvasEvents() @@ -2053,6 +2059,15 @@ Module PBMap EndIf EndProcedure + ; Could be called directly to attach our map to an existing canvas + Procedure BindMapGadget(Gadget.i) + PBMap\Gadget = Gadget + BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) + AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) + BindEvent(#PB_Event_Timer, @TimerEvents()) + EndProcedure + + ; Creates a canvas and attach our map Procedure MapGadget(Gadget.i, X.i, Y.i, Width.i, Height.i) If Gadget = #PB_Any PBMap\Gadget = CanvasGadget(PBMap\Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard) ;#PB_Canvas_Keyboard has to be set for mousewheel to work on windows @@ -2060,11 +2075,9 @@ Module PBMap PBMap\Gadget = Gadget CanvasGadget(PBMap\Gadget, X, Y, Width, Height, #PB_Canvas_Keyboard) EndIf - BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) - AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) - BindEvent(#PB_Event_Timer, @TimerEvents()) + BindMapGadget(PBMap\Gadget) EndProcedure - + Procedure InitPBMap(Window) Protected Result.i If Verbose @@ -2209,11 +2222,15 @@ CompilerIf #PB_Compiler_IsMainFile StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") SetActiveGadget(#StringGeoLocationQuery) AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + ;*** TODO : code to remove when the SetActiveGadget(-1) will be fixed CompilerIf #PB_Compiler_OS = #PB_OS_Linux - Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") - HideGadget(Dummy, 1) + Define Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") + HideGadget(Dummy, 1) + CompilerElse + Define Dummy = -1 CompilerEndIf - + ;*** + Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d Define OpenSeaMap = 0, Degrees = 1 @@ -2305,11 +2322,9 @@ CompilerIf #PB_Compiler_IsMainFile Case #PB_Event_Menu Select EventMenu() Case 1 - CompilerIf #PB_Compiler_OS = #PB_OS_Linux - SetActiveGadget(Dummy) - CompilerElse - SetActiveGadget(-1) - CompilerEndIf + ;*** TODO : code to change when the SetActiveGadget(-1) will be fixed + SetActiveGadget(Dummy) + ;*** EndSelect EndSelect Until Quit = #True @@ -2320,8 +2335,8 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 2180 -; FirstLine = 2221 +; CursorPosition = 961 +; FirstLine = 939 ; Folding = ---------------- ; EnableUnicode ; EnableThread From 8ac8a0805956295c8f933769f47ddb165bf0c011 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 22:39:14 +0200 Subject: [PATCH 23/36] Revert "Linux SetActiveGadget(-1) fix" This reverts commit 86483640d7271f5535f3e5d361bdebd83a79a2bb. # Conflicts: # PBMap.pb --- PBMap.pb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 1e63e59..c3fceec 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2229,8 +2229,6 @@ CompilerIf #PB_Compiler_IsMainFile CompilerElse Define Dummy = -1 CompilerEndIf - ;*** - Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d Define OpenSeaMap = 0, Degrees = 1 @@ -2334,10 +2332,21 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf +<<<<<<< HEAD ; IDE Options = PureBasic 5.42 LTS (Windows - x64) ; CursorPosition = 961 ; FirstLine = 939 +======= +; IDE Options = PureBasic 5.50 (Windows - x64) +; CursorPosition = 1156 +; FirstLine = 1144 +>>>>>>> parent of 8648364... Linux SetActiveGadget(-1) fix +; Folding = ---------------- +; EnableThread +; EnableXP +; IDE Options = PureBasic 5.42 LTS (Windows - x64) +; CursorPosition = 2308 +; FirstLine = 2291 ; Folding = ---------------- ; EnableUnicode -; EnableThread ; EnableXP \ No newline at end of file From 2cf4cfe8c0553a683b01ebc837f6bd3e26df6d51 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 22:39:40 +0200 Subject: [PATCH 24/36] check --- PBMap.pb | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index c3fceec..48af76d 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2332,21 +2332,10 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf -<<<<<<< HEAD + ; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 961 -; FirstLine = 939 -======= -; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1156 -; FirstLine = 1144 ->>>>>>> parent of 8648364... Linux SetActiveGadget(-1) fix -; Folding = ---------------- -; EnableThread -; EnableXP -; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 2308 -; FirstLine = 2291 +; CursorPosition = 2334 +; FirstLine = 2280 ; Folding = ---------------- ; EnableUnicode ; EnableXP \ No newline at end of file From 12bc4f19f132f6a95abfb0065c8a8cc18c0a6db4 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 22:42:35 +0200 Subject: [PATCH 25/36] test --- PBMap.pb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 48af76d..aad018f 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2334,8 +2334,8 @@ CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 2334 -; FirstLine = 2280 +; CursorPosition = 2231 +; FirstLine = 2191 ; Folding = ---------------- ; EnableUnicode ; EnableXP \ No newline at end of file From 105eef9231d5c17cd621f8a40751601948a33545 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 22:42:59 +0200 Subject: [PATCH 26/36] test --- PBMap.pb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PBMap.pb b/PBMap.pb index aad018f..556055c 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -2334,8 +2334,9 @@ CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 2231 +; CursorPosition = 2205 ; FirstLine = 2191 ; Folding = ---------------- ; EnableUnicode +; EnableThread ; EnableXP \ No newline at end of file From eed9491b6e8768dd22d1d57062bd99d1baa62864 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 3 Oct 2016 23:01:38 +0200 Subject: [PATCH 27/36] bugfix --- PBMap.pb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 556055c..d180820 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -944,6 +944,7 @@ Module PBMap Wend PopMapPosition(PBMap\MemCache\Images()) AddElement(PBMap\MemCache\ImagesTimeStack()) + MoveElement(PBMap\MemCache\ImagesTimeStack(), #PB_List_Last) PBMap\MemCache\ImagesTimeStack()\MapKey = MapKey(PBMap\MemCache\Images()) ;*** MyDebug("Key : " + key + " added in memory cache!", 3) @@ -1028,7 +1029,7 @@ Module PBMap If *timg\nImage <> -1 MovePathCursor(px, py) DrawVectorImage(ImageID(*timg\nImage), *timg\Alpha) - If *timg\Alpha < 224 + If *timg\Alpha < 224 *timg\Alpha = (*timg\Alpha + 32) & $FF PBMap\Redraw = #True Else @@ -2334,8 +2335,8 @@ CompilerEndIf ; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 2205 -; FirstLine = 2191 +; CursorPosition = 1015 +; FirstLine = 1007 ; Folding = ---------------- ; EnableUnicode ; EnableThread From cdfbe3e83986657ba3d92dbc699d30b82fab2a07 Mon Sep 17 00:00:00 2001 From: djes Date: Tue, 4 Oct 2016 14:01:27 +0200 Subject: [PATCH 28/36] Better curl error handling, tiles alpha, bugfix + cleanup --- PBMap.pb | 146 ++++++++++++++++++++++++++----------------------------- 1 file changed, 68 insertions(+), 78 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 8689761..8cdea25 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -26,8 +26,8 @@ DeclareModule PBMap #Red = 255 ;-Show debug infos - Global Verbose = 1 - Global MyDebugLevel = 4 + Global Verbose = 0 + Global MyDebugLevel = 0 #SCALE_NAUTICAL = 1 #SCALE_KM = 0 @@ -264,7 +264,7 @@ Module PBMap ;Send debug infos to stdout (allowing mixed debug infos with curl or other libs) Procedure MyDebug(msg.s, DbgLevel = 0) - If Verbose And MyDebugLevel >= DbgLevel + If Verbose And DbgLevel >= MyDebugLevel PrintN(msg) ;Debug msg EndIf @@ -300,7 +300,7 @@ Module PBMap EndProcedure Procedure.i CurlReceiveHTTPToMemory(URL$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") - Protected *Buffer, curl.i, Timeout.i, res.i + Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l If Len(URL$) curl = curl_easy_init() If curl @@ -311,6 +311,10 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_HEADER, 0) curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) + If Verbose + curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) + EndIf + curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) If Len(ProxyURL$) ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) If Len(ProxyPort$) @@ -340,7 +344,10 @@ Module PBMap EndIf ;curl_easy_cleanup(curl) ;Was its original place but moved below as it seems more logical to me. Else - MyDebug("CURL problem", 4) + curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) + MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) + curl_easy_cleanup(curl) + ProcedureReturn #False EndIf curl_easy_cleanup(curl) Else @@ -357,10 +364,10 @@ Module PBMap EndProcedure Procedure.i CurlReceiveHTTPToFile(URL$, DestFileName$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") - Protected *Buffer, curl.i, Timeout.i, res.i + Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l Protected FileHandle.i - MyDebug("CurlReceiveHTTPToFile from " + URL$ + " " + ProxyURL$ + " " + ProxyPort$ + " " + ProxyUser$, 4) - MyDebug(" to file : " + DestFileName$, 4) + MyDebug("CurlReceiveHTTPToFile from " + URL$ + " " + ProxyURL$ + " " + ProxyPort$ + " " + ProxyUser$, 8) + MyDebug(" to file : " + DestFileName$, 8) FileHandle = CreateFile(#PB_Any, DestFileName$) If FileHandle And Len(URL$) curl = curl_easy_init() @@ -371,21 +378,24 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) curl_easy_setopt(curl, #CURLOPT_HEADER, 0) curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) - curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - curl_easy_setopt(curl, #CURLOPT_VERBOSE, 0) + curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) + If Verbose + curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) + EndIf + curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) ;curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, 60) If Len(ProxyURL$) ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) If Len(ProxyPort$) ProxyURL$ + ":" + ProxyPort$ EndIf - MyDebug( ProxyURL$) + MyDebug(ProxyURL$, 8) curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) If Len(ProxyUser$) If Len(ProxyPassword$) ProxyUser$ + ":" + ProxyPassword$ EndIf - MyDebug( ProxyUser$) + MyDebug(ProxyUser$, 8) curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) EndIf EndIf @@ -393,11 +403,15 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToFileFunction()) res = curl_easy_perform(curl) If res <> #CURLE_OK - MyDebug("CURL problem", 4) + curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) + MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) + CloseFile(FileHandle) + curl_easy_cleanup(curl) + ProcedureReturn #False EndIf curl_easy_cleanup(curl) Else - MyDebug("Can't init CURL", 4) + MyDebug("Can't init CURL", 8) EndIf CloseFile(FileHandle) ProcedureReturn FileSize(DestFileName$) @@ -895,7 +909,7 @@ Module PBMap *Tile\RetryNb = 0 Else MyDebug("Image key : " + *Tile\key + " web image not correctly loaded", 3) - Delay(1000) + Delay(5000) *Tile\RetryNb - 1 EndIf Until *Tile\RetryNb <= 0 @@ -908,19 +922,11 @@ Module PBMap Procedure.i GetTile(key.s, URL.s, CacheFile.s) ; Try to find the tile in memory cache. If not found, add it, try To load it from the ; HDD, or launch a loading thread, and try again on the next drawing loop. -<<<<<<< HEAD - Protected img.i - Protected *timg.ImgMemCach = FindMapElement(PBMap\MemCache\Images(), key) - If *timg - MyDebug("Key : " + key + " found in memory cache!", 3) - img = PBMap\MemCache\Images()\nImage -======= Protected img.i = -1 Protected *timg.ImgMemCach = FindMapElement(PBMap\MemCache\Images(), key) If *timg MyDebug("Key : " + key + " found in memory cache!", 3) img = *timg\nImage ->>>>>>> refs/remotes/origin/tilewip If img <> -1 MyDebug("Image : " + img + " found in memory cache!", 3) ;*** Cache management @@ -931,10 +937,9 @@ Module PBMap ProcedureReturn *timg EndIf Else - AddMapElement(PBMap\MemCache\Images(), key) - PushMapPosition(PBMap\MemCache\Images()) + ;PushMapPosition(PBMap\MemCache\Images()) ;*** Cache management - ; if cache size exceeds limit, try to delete the oldest tile used + ; if cache size exceeds limit, try to delete the oldest tile used (first in the list) Protected CacheSize = MapSize(PBMap\MemCache\Images()) * Pow(PBMap\TileSize, 2) * 4 ; Size of a tile = TileSize * TileSize * 4 bytes (RGBA) Protected CacheLimit = PBMap\Options\MaxMemCache * 1024 MyDebug("Cache size : " + Str(CacheSize/1024) + " / CacheLimit : " + Str(CacheLimit/1024), 4) @@ -950,27 +955,24 @@ Module PBMap CacheSize = MapSize(PBMap\MemCache\Images()) * Pow(PBMap\TileSize, 2) * 4 ; Size of a tile = TileSize * TileSize * 4 bytes (RGBA) EndIf Wend - PopMapPosition(PBMap\MemCache\Images()) + LastElement(PBMap\MemCache\ImagesTimeStack()) + ;PopMapPosition(PBMap\MemCache\Images()) + AddMapElement(PBMap\MemCache\Images(), key) AddElement(PBMap\MemCache\ImagesTimeStack()) - MoveElement(PBMap\MemCache\ImagesTimeStack(), #PB_List_Last) + ;MoveElement(PBMap\MemCache\ImagesTimeStack(), #PB_List_Last) PBMap\MemCache\ImagesTimeStack()\MapKey = MapKey(PBMap\MemCache\Images()) ;*** MyDebug("Key : " + key + " added in memory cache!", 3) *timg = PBMap\MemCache\Images() *timg\nImage = -1 EndIf -<<<<<<< HEAD - *timg = PBMap\MemCache\Images() - If PBMap\MemCache\Images()\Tile = 0 ; Check if a loading thread is not running -======= If *timg\Tile = 0 ; Check if a loading thread is not running ->>>>>>> refs/remotes/origin/tilewip MyDebug("Trying to load from HDD " + CacheFile, 3) img = GetTileFromHDD(CacheFile.s) If img <> -1 MyDebug("Key : " + key + " found on HDD", 3) *timg\nImage = img - *timg\Alpha = 0 + *timg\Alpha = 256 ProcedureReturn *timg EndIf MyDebug("Key : " + key + " not found on HDD", 3) @@ -980,10 +982,7 @@ Module PBMap With *NewTile *timg\Tile = *NewTile *timg\Alpha = 0 -<<<<<<< HEAD -======= ;*timg\nImage = -1 ->>>>>>> refs/remotes/origin/tilewip ;New tile parameters \key = key \URL = URL @@ -1044,25 +1043,17 @@ Module PBMap *timg = GetTile(key, URL, CacheFile) If *timg\nImage <> -1 MovePathCursor(px, py) - DrawVectorImage(ImageID(*timg\nImage), *timg\Alpha) -<<<<<<< HEAD - If *timg\Alpha < 240 - *timg\Alpha + 16 -======= - If *timg\Alpha < 224 - *timg\Alpha = (*timg\Alpha + 32) & $FF + If *timg\Alpha <= 224 + DrawVectorImage(ImageID(*timg\nImage), *timg\Alpha) + *timg\Alpha + 32 PBMap\Redraw = #True ->>>>>>> refs/remotes/origin/tilewip Else - *timg\Alpha = 255 - EndIf + DrawVectorImage(ImageID(*timg\nImage), 255) + *timg\Alpha = 256 + EndIf Else MovePathCursor(px, py) -<<<<<<< HEAD - DrawVectorImage(ImageID(PBMap\ImgLoading)) -======= DrawVectorImage(ImageID(PBMap\ImgLoading), 255) ->>>>>>> refs/remotes/origin/tilewip EndIf Else ;If PBMap\Layers()\Name = "" @@ -2003,9 +1994,9 @@ Module PBMap CallFunctionFast(PBMap\CallBackLocation, @PBMap\GeographicCoordinates) EndIf EndIf - PBMap\Redraw = #True PBMap\MoveStartingPoint\x = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) PBMap\MoveStartingPoint\y = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) + PBMap\Redraw = #True Else LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) @@ -2018,6 +2009,7 @@ Module PBMap LatLon2Pixel(@PBMap\Markers()\GeographicCoordinates, @MarkerCoords, PBMap\Zoom) If Distance(MarkerCoords\x, MarkerCoords\y, MouseX, MouseY) < 8 PBMap\Markers()\Focus = #True + PBMap\Redraw = #True Else ;If CtrlKey = #False PBMap\Markers()\Focus = #False @@ -2032,7 +2024,7 @@ Module PBMap If ListSize(\Track()) > 0 If \Visible StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - ;Draw tracks + ;Simulate tracks drawing ForEach \Track() LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If ListIndex(\Track()) = 0 @@ -2043,6 +2035,7 @@ Module PBMap Next If IsInsideStroke(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY), \StrokeWidth) \Focus = #True + PBMap\Redraw = #True Else \Focus = #False EndIf @@ -2052,9 +2045,7 @@ Module PBMap Next EndIf EndWith - EndIf - PBMap\Redraw = #True EndIf Case #PB_EventType_LeftButtonUp PBMap\MoveStartingPoint\x = - 1 @@ -2160,6 +2151,12 @@ CompilerIf #PB_Compiler_IsMainFile #StringGeoLocationQuery EndEnumeration + ;Menu events + Enumeration + #MenuEventLonLatStringEnter + #MenuEventGeoLocationStringEnter + EndEnumeration + Structure Location Longitude.d Latitude.d @@ -2247,7 +2244,7 @@ CompilerIf #PB_Compiler_IsMainFile TextGadget(#TextGeoLocationQuery, 530, 435, 150, 15, "Enter an address") StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") SetActiveGadget(#StringGeoLocationQuery) - AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventGeoLocationStringEnter) ;*** TODO : code to remove when the SetActiveGadget(-1) will be fixed CompilerIf #PB_Compiler_OS = #PB_OS_Linux Define Dummy = ButtonGadget(#PB_Any, 0, 0, 1, 1, "Dummy") @@ -2255,11 +2252,7 @@ CompilerIf #PB_Compiler_IsMainFile CompilerElse Define Dummy = -1 CompilerEndIf -<<<<<<< HEAD ;*** - -======= ->>>>>>> refs/remotes/origin/tilewip Define Event.i, Gadget.i, Quit.b = #False Define pfValue.d Define OpenSeaMap = 0, Degrees = 1 @@ -2305,11 +2298,9 @@ CompilerIf #PB_Compiler_IsMainFile Case #StringLatitude, #StringLongitude Select EventType() Case #PB_EventType_Focus - AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventLonLatStringEnter) Case #PB_EventType_LostFocus RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) - PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates - PBMap::Refresh() EndSelect Case #Gdt_AddMarker PBMap::AddMarker(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude)), "", "Test", RGBA(Random(255), Random(255), Random(255), 255)) @@ -2339,21 +2330,27 @@ CompilerIf #PB_Compiler_IsMainFile Case #StringGeoLocationQuery Select EventType() Case #PB_EventType_Focus - AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1) + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventGeoLocationStringEnter) Case #PB_EventType_LostFocus RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) - PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery)) - PBMap::Refresh() EndSelect EndSelect Case #PB_Event_SizeWindow ResizeAll() Case #PB_Event_Menu + ;Receive "enter" key events Select EventMenu() - Case 1 + Case #MenuEventGeoLocationStringEnter + If GetGadgetText(#StringGeoLocationQuery) <> "" + PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery)) + PBMap::Refresh() + EndIf ;*** TODO : code to change when the SetActiveGadget(-1) will be fixed SetActiveGadget(Dummy) ;*** + Case #MenuEventLonLatStringEnter + PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates + PBMap::Refresh() EndSelect EndSelect Until Quit = #True @@ -2363,17 +2360,10 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf -<<<<<<< HEAD -; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1037 -; FirstLine = 997 -======= -; IDE Options = PureBasic 5.42 LTS (Windows - x64) -; CursorPosition = 1015 -; FirstLine = 1007 ->>>>>>> refs/remotes/origin/tilewip +; IDE Options = PureBasic 5.50 (Windows - x64) +; CursorPosition = 10 ; Folding = ---------------- -; EnableUnicode ; EnableThread -; EnableXP \ No newline at end of file +; EnableXP +; EnableUnicode \ No newline at end of file From 382fd53525e42419bfd762515390cb53911ec4fa Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 7 Oct 2016 12:03:34 +0200 Subject: [PATCH 29/36] Better mouse handling + rotation wip --- PBMap.pb | 177 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 122 insertions(+), 55 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 8cdea25..3112ce6 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -55,6 +55,7 @@ DeclareModule PBMap Declare MapGadget(Gadget.i, X.i, Y.i, Width.i, Height.i) Declare SetLocation(latitude.d, longitude.d, Zoom = -1, mode.i = #PB_Absolute) Declare Drawing() + Declare SetAngle(Angle.d, Mode = #PB_Absolute) Declare SetZoom(Zoom.i, mode.i = #PB_Relative) Declare ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) Declare ZoomToTracks(*Tracks) @@ -77,6 +78,7 @@ DeclareModule PBMap Declare.d GetLongitude() Declare.d MouseLatitude() Declare.d MouseLongitude() + Declare.d GetAngle() Declare.i GetZoom() Declare.i GetMode() Declare SetMode(Mode.i = #MODE_DEFAULT) @@ -88,8 +90,8 @@ Module PBMap EnableExplicit Structure PixelCoordinates - x.i - y.i + x.d + y.d EndStructure Structure Coordinates @@ -226,6 +228,7 @@ Module PBMap List Layers.Layer() ; + Angle.d ZoomMin.i ; Min Zoom supported by server ZoomMax.i ; Max Zoom supported by server Zoom.i ; Current zoom @@ -1167,7 +1170,7 @@ Module PBMap StrokePath(1) EndProcedure - Procedure TrackPointer(x.i, y.i, dist.l) + Procedure DrawTrackPointer(x.i, y.i, dist.l) Protected color.l color=RGBA(0, 0, 0, 255) MovePathCursor(x,y) @@ -1186,7 +1189,7 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure - Procedure TrackPointerFirst(x.i, y.i, dist.l) + Procedure DrawTrackPointerFirst(x.i, y.i, dist.l) Protected color.l color=RGBA(0, 0, 0, 255) MovePathCursor(x,y) @@ -1257,9 +1260,9 @@ Module PBMap ForEach \Track() LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If ListIndex(\Track()) = 0 - MovePathCursor(Pixel\X, Pixel\Y) + MovePathCursor(Pixel\x, Pixel\y) Else - AddPathLine(Pixel\X, Pixel\Y) + AddPathLine(Pixel\x, Pixel\y) EndIf Next ; \BoundingBox\x = PathBoundsX() @@ -1297,11 +1300,13 @@ Module PBMap LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If Int(km) <> memKm memKm = Int(km) + RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If Int(km) = 0 - TrackPointerFirst(Pixel\X , Pixel\Y, Int(km)) + DrawTrackPointerFirst(Pixel\x , Pixel\y, Int(km)) Else - TrackPointer(Pixel\X , Pixel\Y, Int(km)) - EndIf + DrawTrackPointer(Pixel\x , Pixel\y, Int(km)) + EndIf + RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndIf @@ -1483,12 +1488,14 @@ Module PBMap ForEach PBMap\Markers() If IsInDrawingBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) LatLon2PixelRel(PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) - If Pixel\X >= 0 And Pixel\Y >= 0 And Pixel\X < GadgetWidth(PBMap\Gadget) And Pixel\Y < GadgetHeight(PBMap\Gadget) ; Only if visible ^_^ + If Pixel\x >= 0 And Pixel\y >= 0 And Pixel\x < GadgetWidth(PBMap\Gadget) And Pixel\y < GadgetHeight(PBMap\Gadget) ; Only if visible ^_^ + RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If PBMap\Markers()\CallBackPointer > 0 - CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\X, Pixel\Y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) + CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\x, Pixel\y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) Else - DrawMarker(Pixel\X, Pixel\Y, ListIndex(PBMap\Markers()), @PBMap\Markers()) + DrawMarker(Pixel\x, Pixel\y, ListIndex(PBMap\Markers()), @PBMap\Markers()) EndIf + RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf EndIf Next @@ -1558,6 +1565,9 @@ Module PBMap ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + ;Main rotation + RotateCoordinates(*Drawing\CenterX, *Drawing\CenterY, PBMap\Angle) + ;Clearscreen VectorSourceColor(RGBA(150, 150, 150, 255)) FillVectorOutput() ;TODO add in layers of tiles ;this way we can cache them as 0 base 1.n layers @@ -1565,21 +1575,22 @@ Module PBMap ForEach PBMap\Layers() DrawTiles(*Drawing, ListIndex(PBMap\Layers())) Next + If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 + DrawDegrees(*Drawing, 192) + EndIf If PBMap\Options\ShowTrack DrawTracks(*Drawing) EndIf If PBMap\Options\ShowMarkers DrawMarkers(*Drawing) EndIf + ResetCoordinates() If PBMap\Options\ShowPointer DrawPointer(*Drawing) EndIf If PBMap\Options\ShowDebugInfos DrawDebugInfos(*Drawing) EndIf - If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 - DrawDegrees(*Drawing, 192) - EndIf If PBMap\Options\ShowScale DrawScale(*Drawing, 10, GadgetHeight(PBMAP\Gadget) - 20, 192) EndIf @@ -1724,6 +1735,16 @@ Module PBMap EndIf EndProcedure + Procedure SetAngle(Angle.d, Mode = #PB_Absolute) + If Mode = #PB_Absolute + PBmap\Angle = Angle + Else + PBMap\Angle + Angle + PBMap\Angle = Mod(PBMap\Angle,360) + EndIf + PBMap\Redraw = #True + EndProcedure + Procedure SetCallBackLocation(CallBackLocation.i) PBMap\CallBackLocation = CallBackLocation EndProcedure @@ -1751,14 +1772,8 @@ Module PBMap ProcedureReturn PBMap\Mode EndProcedure - ;Zoom on x, y position relative to the canvas gadget - Procedure SetZoomOnPosition(x, y, zoom) - Protected MouseX.d, MouseY.d - Protected OldPx.d, OldPy.d, OldMx.d, OldMy.d, Px.d, Py.d - Protected CenterX = GadgetWidth(PBMap\Gadget) / 2 - Protected CenterY = GadgetHeight(PBMap\Gadget) / 2 - x - CenterX - y - CenterY + ;Zoom on x, y pixel position from the center + Procedure ZoomOnPixel(x, y, zoom) ;*** First : Zoom PBMap\Zoom + zoom If PBMap\Zoom > PBMap\ZoomMax : PBMap\Zoom = PBMap\ZoomMax : ProcedureReturn : EndIf @@ -1780,7 +1795,16 @@ Module PBMap EndIf EndProcedure - ;Go to x, y position relative to the canvas gadget + ;Zoom on x, y position relative to the canvas gadget + Procedure ZoomOnPixelRel(x, y, zoom) + Protected CenterX = GadgetWidth(PBMap\Gadget) / 2 + Protected CenterY = GadgetHeight(PBMap\Gadget) / 2 + x - CenterX + y - CenterY + ZoomOnPixel(x, y, zoom) + EndProcedure + + ;Go to x, y position relative to the canvas gadget left up Procedure GotoPixelRel(x, y) Protected CenterX = GadgetWidth(PBMap\Gadget) / 2 Protected CenterY = GadgetHeight(PBMap\Gadget) / 2 @@ -1798,6 +1822,19 @@ Module PBMap EndIf EndProcedure + ;Go to x, y position relative to the canvas gadget + Procedure GotoPixel(x, y) + PBMap\PixelCoordinates\x = x + PBMap\PixelCoordinates\y = y + Pixel2LatLon(@PBMap\PixelCoordinates, @PBMap\GeographicCoordinates, PBMap\Zoom) + ; Start drawing + PBMap\Redraw = #True + ; If CallBackLocation send Location to function + If PBMap\CallBackLocation > 0 + CallFunctionFast(PBMap\CallBackLocation, @PBMap\GeographicCoordinates) + EndIf + EndProcedure + Procedure.d GetLatitude() ProcedureReturn PBMap\GeographicCoordinates\Latitude EndProcedure @@ -1807,9 +1844,11 @@ Module PBMap EndProcedure Procedure.i GetZoom() - Protected Value.d - Value = PBMap\Zoom - ProcedureReturn Value + ProcedureReturn PBMap\Zoom + EndProcedure + + Procedure.d GetAngle() + ProcedureReturn PBMap\Angle EndProcedure Procedure NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) @@ -1850,13 +1889,23 @@ Module PBMap EndProcedure Procedure CanvasEvents() - Protected MouseX.i, MouseY.i + Protected CanvasMouseX.d, CanvasMouseY.d, MouseX.d, MouseY.d Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize Protected key.s, Touch.i Protected Pixel.PixelCoordinates Static CtrlKey PBMap\Moving = #False + CanvasMouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\CenterX + CanvasMouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\CenterY + StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + RotateCoordinates(PBMap\Drawing\CenterX, PBMap\Drawing\CenterY, PBMap\Angle) + CanvasMouseX = ConvertCoordinateX(CanvasMouseX, CanvasMouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + CanvasMouseY = ConvertCoordinateY(CanvasMouseX, CanvasMouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + StopVectorDrawing() Select EventType() + Case #PB_EventType_Focus + PBMap\Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 + PBMap\Drawing\CenterY = GadgetHeight(PBMap\Gadget) / 2 Case #PB_EventType_KeyUp Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) Case #PB_Shortcut_Delete @@ -1902,8 +1951,8 @@ Module PBMap EndIf Case #PB_EventType_LeftDoubleClick LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) - MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) + MouseX = PBMap\PixelCoordinates\x + CanvasMouseX + MouseY = PBMap\PixelCoordinates\y + CanvasMouseY ;Clip MouseX to the map range (in X, the map is infinite) MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) Touch = #False @@ -1923,22 +1972,23 @@ Module PBMap EndIf Next If Not Touch - GotoPixelRel(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY)) + GotoPixel(MouseX, MouseY) EndIf Case #PB_EventType_MouseWheel If PBMap\Options\WheelMouseRelative ;Relative zoom (centered on the mouse) - SetZoomOnPosition(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_WheelDelta)) + ZoomOnPixel(CanvasMouseX, CanvasMouseY, GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_WheelDelta)) Else ;Absolute zoom (centered on the center of the map) SetZoom(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_WheelDelta), #PB_Relative) EndIf Case #PB_EventType_LeftButtonDown - LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) - MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) + ;LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) + ;Mem cursor Coord + PBMap\MoveStartingPoint\x = CanvasMouseX + PBMap\MoveStartingPoint\y = CanvasMouseY ;Clip MouseX to the map range (in X, the map is infinite) - MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) + PBMap\MoveStartingPoint\x = Mod(Mod(PBMap\MoveStartingPoint\x, MapWidth) + MapWidth, MapWidth) If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT PBMap\EditMarker = #False ;Check if we select marker(s) @@ -1963,14 +2013,14 @@ Module PBMap EndIf Next EndIf - ;Mem cursor Coord - PBMap\MoveStartingPoint\x = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\MoveStartingPoint\y = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) Case #PB_EventType_MouseMove PBMap\Moving = #True + ; Drag If PBMap\MoveStartingPoint\x <> - 1 - MouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\MoveStartingPoint\x - MouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\MoveStartingPoint\y + MouseX = CanvasMouseX - PBMap\MoveStartingPoint\x + MouseY = CanvasMouseY - PBMap\MoveStartingPoint\y + PBMap\MoveStartingPoint\x = CanvasMouseX + PBMap\MoveStartingPoint\y = CanvasMouseY ;Move selected markers If PBMap\EditMarker And (PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT) ForEach PBMap\Markers() @@ -1994,13 +2044,12 @@ Module PBMap CallFunctionFast(PBMap\CallBackLocation, @PBMap\GeographicCoordinates) EndIf EndIf - PBMap\MoveStartingPoint\x = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\MoveStartingPoint\y = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) PBMap\Redraw = #True Else + ; Touch test LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) - MouseX = PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - MouseY = PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) + MouseX = PBMap\PixelCoordinates\x + CanvasMouseX + MouseY = PBMap\PixelCoordinates\y + CanvasMouseY ;Clip MouseX to the map range (in X, the map is infinite) MouseX = Mod(Mod(MouseX, MapWidth) + MapWidth, MapWidth) If PBMap\Mode = #MODE_DEFAULT Or PBMap\Mode = #MODE_SELECT Or PBMap\Mode = #MODE_EDIT @@ -2010,10 +2059,10 @@ Module PBMap If Distance(MarkerCoords\x, MarkerCoords\y, MouseX, MouseY) < 8 PBMap\Markers()\Focus = #True PBMap\Redraw = #True - Else + ElseIf PBMap\Markers()\Focus ;If CtrlKey = #False PBMap\Markers()\Focus = #False - ;EndIf + PBMap\Redraw = #True EndIf Next ;Check if mouse touch tracks @@ -2024,20 +2073,22 @@ Module PBMap If ListSize(\Track()) > 0 If \Visible StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + RotateCoordinates(PBMap\Drawing\CenterX, PBMap\Drawing\CenterY, PBMap\Angle) ;Simulate tracks drawing ForEach \Track() - LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) + LatLon2Pixel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If ListIndex(\Track()) = 0 - MovePathCursor(Pixel\X, Pixel\Y) + MovePathCursor(Pixel\x, Pixel\y) Else - AddPathLine(Pixel\X, Pixel\Y) + AddPathLine(Pixel\x, Pixel\y) EndIf Next - If IsInsideStroke(GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX), GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY), \StrokeWidth) + If IsInsideStroke(MouseX, MouseY, \StrokeWidth) \Focus = #True - PBMap\Redraw = #True - Else + PBMap\Redraw = #True + ElseIf \Focus \Focus = #False + PBMap\Redraw = #True EndIf StopVectorDrawing() EndIf @@ -2082,6 +2133,8 @@ Module PBMap BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) BindEvent(#PB_Event_Timer, @TimerEvents()) + PBMap\Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 + PBMap\Drawing\CenterX = GadgetHeight(PBMap\Gadget) / 2 EndProcedure ; Creates a canvas and attach our map @@ -2132,6 +2185,8 @@ CompilerIf #PB_Compiler_IsMainFile #Gdt_Right #Gdt_Up #Gdt_Down + #Gdt_RotateLeft + #Gdt_RotateRight #Button_4 #Button_5 #Combo_0 @@ -2199,6 +2254,8 @@ CompilerIf #PB_Compiler_IsMainFile ResizeGadget(#Text_1,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Left, WindowWidth(#Window_0) - 150 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Right,WindowWidth(#Window_0) - 90 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#Gdt_RotateLeft, WindowWidth(#Window_0) - 150 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#Gdt_RotateRight,WindowWidth(#Window_0) - 90 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Up, WindowWidth(#Window_0) - 120 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Down, WindowWidth(#Window_0) - 120 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Text_2,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) @@ -2223,8 +2280,11 @@ CompilerIf #PB_Compiler_IsMainFile LoadFont(0, "Arial", 12) LoadFont(1, "Arial", 12, #PB_Font_Bold) + LoadFont(2, "Arial", 8) TextGadget(#Text_1, 530, 50, 60, 15, "Movements") + ButtonGadget(#Gdt_RotateLeft, 550, 070, 30, 30, "LRot") : SetGadgetFont(#Gdt_RotateLeft, FontID(2)) + ButtonGadget(#Gdt_RotateRight, 610, 070, 30, 30, "RRot") : SetGadgetFont(#Gdt_RotateRight, FontID(2)) ButtonGadget(#Gdt_Left, 550, 100, 30, 30, Chr($25C4)) : SetGadgetFont(#Gdt_Left, FontID(0)) ButtonGadget(#Gdt_Right, 610, 100, 30, 30, Chr($25BA)) : SetGadgetFont(#Gdt_Right, FontID(0)) ButtonGadget(#Gdt_Up, 580, 070, 30, 30, Chr($25B2)) : SetGadgetFont(#Gdt_Up, FontID(0)) @@ -2288,6 +2348,12 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetLocation(0, 10* -360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) Case #Gdt_Right PBMap::SetLocation(0, 10* 360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) + Case #Gdt_RotateLeft + PBMAP::SetAngle(-5,#PB_Relative) + PBMap::Refresh() + Case #Gdt_RotateRight + PBMAP::SetAngle(5,#PB_Relative) + PBMap::Refresh() Case #Button_4 PBMap::SetZoom(1) Case #Button_5 @@ -2362,8 +2428,9 @@ CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 10 -; Folding = ---------------- +; CursorPosition = 2094 +; FirstLine = 2070 +; Folding = ----------------- ; EnableThread ; EnableXP ; EnableUnicode \ No newline at end of file From 8825b35b1bf4dd86030c98ba59de8f8fd341d06e Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 7 Oct 2016 16:22:49 +0200 Subject: [PATCH 30/36] Rotation wip --- PBMap.pb | 65 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 3112ce6..6012716 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -116,8 +116,8 @@ Module PBMap Structure DrawingParameters Canvas.i - CenterX.i ; Gadget center in screen relative pixels - CenterY.i + CenterX.d ; Gadget center in screen relative pixels + CenterY.d GeographicCoordinates.GeographicCoordinates ; Real center TileCoordinates.Coordinates ; Center coordinates in tile.decimal Bounds.BoundingBox ; Drawing boundaries in lat/lon @@ -763,8 +763,8 @@ Module PBMap Protected cx.d = PBMap\Drawing\CenterX Protected dpx.d = PBMap\PixelCoordinates\x Protected LatRad.d = Radian(*Location\Latitude) - Protected px = tilemax * (Mod( *Location\Longitude + 180.0, 360) / 360.0 ) - Protected py = tilemax * ( 1.0 - Log(Tan(LatRad) + (1.0/Cos(LatRad))) / #PI ) / 2.0 + Protected px.d = tilemax * (Mod( *Location\Longitude + 180.0, 360) / 360.0 ) + Protected py.d = tilemax * ( 1.0 - Log(Tan(LatRad) + (1.0/Cos(LatRad))) / #PI ) / 2.0 ;check the x boundaries of the map to adjust the position (coz of the longitude wrapping) If dpx - px >= tilemax / 2 ;Debug "c1" @@ -823,10 +823,6 @@ Module PBMap Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude Protected LatSE.d = *Drawing\Bounds\SouthEast\Latitude, LonSE.d = *Drawing\Bounds\SouthEast\Longitude - If LatSE > LatNW - Debug "WTF" - CallDebugger - EndIf If Lat >= LatSE And Lat <= LatNW If *Drawing\Width >= 360 ProcedureReturn #True @@ -1170,7 +1166,7 @@ Module PBMap StrokePath(1) EndProcedure - Procedure DrawTrackPointer(x.i, y.i, dist.l) + Procedure DrawTrackPointer(x.d, y.d, dist.l) Protected color.l color=RGBA(0, 0, 0, 255) MovePathCursor(x,y) @@ -1189,7 +1185,7 @@ Module PBMap DrawVectorText(Str(dist)) EndProcedure - Procedure DrawTrackPointerFirst(x.i, y.i, dist.l) + Procedure DrawTrackPointerFirst(x.d, y.d, dist.l) Protected color.l color=RGBA(0, 0, 0, 255) MovePathCursor(x,y) @@ -1536,6 +1532,7 @@ Module PBMap ;-*** Main drawing Procedure Drawing() Protected *Drawing.DrawingParameters = @PBMap\Drawing + Protected PixelCenter.PixelCoordinates Protected Px.d, Py.d,a, ts = PBMap\TileSize, nx, ny Protected NW.Coordinates, SE.Coordinates PBMap\Dirty = #False @@ -1546,20 +1543,38 @@ Module PBMap *Drawing\GeographicCoordinates\Latitude = PBMap\GeographicCoordinates\Latitude *Drawing\GeographicCoordinates\Longitude = PBMap\GeographicCoordinates\Longitude LatLon2TileXY(*Drawing\GeographicCoordinates, *Drawing\TileCoordinates, PBMap\Zoom) + LatLon2Pixel(*Drawing\GeographicCoordinates, @PixelCenter, PBMap\Zoom) ; Pixel shift, aka position in the tile Px = *Drawing\TileCoordinates\x Py = *Drawing\TileCoordinates\y *Drawing\DeltaX = Px * ts - (Int(Px) * ts) ;Don't forget the Int() ! *Drawing\DeltaY = Py * ts - (Int(Py) * ts) ;Drawing boundaries - nx = *Drawing\CenterX / ts ;How many tiles around the point - ny = *Drawing\CenterY / ts - NW\x = Px - nx - 1 - NW\y = Py - ny - 1 - SE\x = Px + nx + 2 - SE\y = Py + ny + 2 - TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) - TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) + nx = *Drawing\CenterX / ts ;How many tiles around the point + ny = *Drawing\CenterY / ts + NW\x = Px - nx - 1 + NW\y = Py - ny - 1 + SE\x = Px + nx + 2 + SE\y = Py + ny + 2 + TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) + TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) +; nx = PixelCenter\x - *Drawing\CenterX +; ny = PixelCenter\y - *Drawing\CenterY +; StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) +; RotateCoordinates(PixelCenter\x, PixelCenter\y, PBMap\Angle) +; NW\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) +; NW\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) +; nx + GadgetWidth(PBMap\Gadget) +; ny + GadgetHeight(PBMap\Gadget) +; SE\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) +; SE\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) +; StopVectorDrawing() +; Pixel2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) +; Pixel2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) +; Debug *Drawing\Bounds\NorthWest\Latitude +; Debug *Drawing\Bounds\NorthWest\Longitude +; Debug *Drawing\Bounds\SouthEast\Latitude +; Debug *Drawing\Bounds\SouthEast\Longitude *Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping *Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude ;*** @@ -1895,12 +1910,12 @@ Module PBMap Protected Pixel.PixelCoordinates Static CtrlKey PBMap\Moving = #False - CanvasMouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\CenterX - CanvasMouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\CenterY + MouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\CenterX + MouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\CenterY StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - RotateCoordinates(PBMap\Drawing\CenterX, PBMap\Drawing\CenterY, PBMap\Angle) - CanvasMouseX = ConvertCoordinateX(CanvasMouseX, CanvasMouseY, #PB_Coordinate_Device, #PB_Coordinate_User) - CanvasMouseY = ConvertCoordinateY(CanvasMouseX, CanvasMouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + RotateCoordinates(0, 0, PBMap\Angle) + CanvasMouseX = ConvertCoordinateX(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + CanvasMouseY = ConvertCoordinateY(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) StopVectorDrawing() Select EventType() Case #PB_EventType_Focus @@ -2428,8 +2443,8 @@ CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 2094 -; FirstLine = 2070 +; CursorPosition = 766 +; FirstLine = 670 ; Folding = ----------------- ; EnableThread ; EnableXP From b126aacdadd6309dcfcb6ff89534c33414be5204 Mon Sep 17 00:00:00 2001 From: djes Date: Fri, 7 Oct 2016 17:10:36 +0200 Subject: [PATCH 31/36] Rotation wip --- PBMap.pb | 95 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 6012716..35b07bc 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -112,6 +112,8 @@ Module PBMap Structure BoundingBox NorthWest.GeographicCoordinates SouthEast.GeographicCoordinates + BottomLeft.PixelCoordinates + TopRight.PixelCoordinates EndStructure Structure DrawingParameters @@ -800,6 +802,7 @@ Module PBMap ProcedureReturn (1000 * HaversineInKM(@*posA,@*posB)); EndProcedure + ; No more used, see LatLon2PixelRel Procedure GetPixelCoordFromLocation(*Location.GeographicCoordinates, *Pixel.PixelCoordinates, Zoom) ; TODO to Optimize Protected mapWidth.l = Pow(2, Zoom + 8) Protected mapHeight.l = Pow(2, Zoom + 8) @@ -819,6 +822,17 @@ Module PBMap *Pixel\y=GadgetHeight(PBMap\Gadget)/2 - (y2-y1) EndProcedure + Procedure IsInDrawingPixelBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) + Protected Pixel.PixelCoordinates + LatLon2Pixel(*Position, @Pixel, PBMap\Zoom) + If Pixel\x >= *Drawing\Bounds\BottomLeft\x And Pixel\y <= *Drawing\Bounds\BottomLeft\y And Pixel\x <= *Drawing\Bounds\TopRight\x And Pixel\y >= *Drawing\Bounds\TopRight\y + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf + EndProcedure + + ;TODO : rotation fix Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude @@ -1246,7 +1260,7 @@ Module PBMap ;Check visibility \Visible = #False ForEach \Track() - If IsInDrawingBoundaries(*Drawing, @PBMap\TracksList()\Track()) + If IsInDrawingPixelBoundaries(*Drawing, @PBMap\TracksList()\Track()) \Visible = #True Break EndIf @@ -1482,17 +1496,15 @@ Module PBMap Procedure DrawMarkers(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates ForEach PBMap\Markers() - If IsInDrawingBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) - LatLon2PixelRel(PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) - If Pixel\x >= 0 And Pixel\y >= 0 And Pixel\x < GadgetWidth(PBMap\Gadget) And Pixel\y < GadgetHeight(PBMap\Gadget) ; Only if visible ^_^ - RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) - If PBMap\Markers()\CallBackPointer > 0 - CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\x, Pixel\y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) - Else - DrawMarker(Pixel\x, Pixel\y, ListIndex(PBMap\Markers()), @PBMap\Markers()) - EndIf - RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) - EndIf + If IsInDrawingPixelBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) + LatLon2PixelRel(@PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) + RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) + If PBMap\Markers()\CallBackPointer > 0 + CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\x, Pixel\y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) + Else + DrawMarker(Pixel\x, Pixel\y, ListIndex(PBMap\Markers()), @PBMap\Markers()) + EndIf + RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndProcedure @@ -1550,33 +1562,34 @@ Module PBMap *Drawing\DeltaX = Px * ts - (Int(Px) * ts) ;Don't forget the Int() ! *Drawing\DeltaY = Py * ts - (Int(Py) * ts) ;Drawing boundaries - nx = *Drawing\CenterX / ts ;How many tiles around the point - ny = *Drawing\CenterY / ts - NW\x = Px - nx - 1 - NW\y = Py - ny - 1 - SE\x = Px + nx + 2 - SE\y = Py + ny + 2 - TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) - TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) -; nx = PixelCenter\x - *Drawing\CenterX -; ny = PixelCenter\y - *Drawing\CenterY -; StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) -; RotateCoordinates(PixelCenter\x, PixelCenter\y, PBMap\Angle) -; NW\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) -; NW\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) -; nx + GadgetWidth(PBMap\Gadget) -; ny + GadgetHeight(PBMap\Gadget) -; SE\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) -; SE\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) -; StopVectorDrawing() -; Pixel2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) -; Pixel2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) -; Debug *Drawing\Bounds\NorthWest\Latitude -; Debug *Drawing\Bounds\NorthWest\Longitude -; Debug *Drawing\Bounds\SouthEast\Latitude -; Debug *Drawing\Bounds\SouthEast\Longitude - *Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping - *Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude +; nx = *Drawing\CenterX / ts ;How many tiles around the point +; ny = *Drawing\CenterY / ts +; NW\x = Px - nx - 1 +; NW\y = Py - ny - 1 +; SE\x = Px + nx + 2 +; SE\y = Py + ny + 2 +; TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) +; TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) + ;TODO : rotation fix + nx = PixelCenter\x - *Drawing\CenterX + ny = PixelCenter\y + *Drawing\CenterY + StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + RotateCoordinates(PixelCenter\x, PixelCenter\y, PBMap\Angle) + *Drawing\Bounds\BottomLeft\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) + *Drawing\Bounds\BottomLeft\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) + nx + GadgetWidth(PBMap\Gadget) + ny - GadgetHeight(PBMap\Gadget) + *Drawing\Bounds\TopRight\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) + *Drawing\Bounds\TopRight\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) + StopVectorDrawing() + Pixel2LatLon(*Drawing\Bounds\BottomLeft, *Drawing\Bounds\SouthEast, PBMap\Zoom) + Pixel2LatLon(*Drawing\Bounds\TopRight, *Drawing\Bounds\NorthWest, PBMap\Zoom) +; Debug *Drawing\Bounds\NorthWest\Latitude +; Debug *Drawing\Bounds\NorthWest\Longitude +; Debug *Drawing\Bounds\SouthEast\Latitude +; Debug *Drawing\Bounds\SouthEast\Longitude + ;*Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping + ;*Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) @@ -2443,8 +2456,8 @@ CompilerEndIf ; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 766 -; FirstLine = 670 +; CursorPosition = 1523 +; FirstLine = 1495 ; Folding = ----------------- ; EnableThread ; EnableXP From 3c87aa702ed7ed8503ef9b811361de7cac750ef3 Mon Sep 17 00:00:00 2001 From: djes Date: Mon, 27 Feb 2017 17:27:15 +0100 Subject: [PATCH 32/36] Bug fixes + bugged rotation removing --- PBMap.pb | 193 ++++++++++++++++++++++++------------------------------- 1 file changed, 84 insertions(+), 109 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 35b07bc..ae3371d 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -39,11 +39,6 @@ DeclareModule PBMap #MARKER_EDIT_EVENT = #PB_Event_FirstCustomValue - Structure GeographicCoordinates - Longitude.d - Latitude.d - EndStructure - ;-Declarations Declare InitPBMap(window) Declare SetOption(Option.s, Value.s) @@ -82,13 +77,18 @@ DeclareModule PBMap Declare.i GetZoom() Declare.i GetMode() Declare SetMode(Mode.i = #MODE_DEFAULT) - Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) ;Send back the position *ptr.GeographicCoordinates + Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition= 0) ;Send back the position *ptr.GeographicCoordinates EndDeclareModule Module PBMap EnableExplicit - + + Structure GeographicCoordinates + Longitude.d + Latitude.d + EndStructure + Structure PixelCoordinates x.d y.d @@ -112,19 +112,19 @@ Module PBMap Structure BoundingBox NorthWest.GeographicCoordinates SouthEast.GeographicCoordinates - BottomLeft.PixelCoordinates - TopRight.PixelCoordinates + BottomRight.PixelCoordinates + TopLeft.PixelCoordinates EndStructure Structure DrawingParameters Canvas.i - CenterX.d ; Gadget center in screen relative pixels - CenterY.d - GeographicCoordinates.GeographicCoordinates ; Real center + RadiusX.d ; Canvas radius, or center in pixels + RadiusY.d + GeographicCoordinates.GeographicCoordinates ; Real center in lat/lon TileCoordinates.Coordinates ; Center coordinates in tile.decimal Bounds.BoundingBox ; Drawing boundaries in lat/lon - Height.d ; Drawing height in degrees Width.d ; Drawing width in degrees + Height.d ; Drawing height in degrees PBMapZoom.i DeltaX.i ; Screen relative pixels tile shift DeltaY.i @@ -762,7 +762,7 @@ Module PBMap ;Lat Lon coordinates 2 pixel relative to the center of view Procedure LatLon2PixelRel(*Location.GeographicCoordinates, *Pixel.PixelCoordinates, Zoom) Protected tilemax = Pow(2.0, Zoom) * PBMap\TileSize - Protected cx.d = PBMap\Drawing\CenterX + Protected cx.d = PBMap\Drawing\RadiusX Protected dpx.d = PBMap\PixelCoordinates\x Protected LatRad.d = Radian(*Location\Latitude) Protected px.d = tilemax * (Mod( *Location\Longitude + 180.0, 360) / 360.0 ) @@ -781,7 +781,7 @@ Module PBMap ;Debug "c0" *Pixel\x = cx + (px - dpx) EndIf - *Pixel\y = PBMap\Drawing\CenterY + (py - PBMap\PixelCoordinates\y) + *Pixel\y = PBMap\Drawing\RadiusY + (py - PBMap\PixelCoordinates\y) EndProcedure ; HaversineAlgorithm @@ -818,14 +818,14 @@ Module PBMap latRad = PBMap\GeographicCoordinates\Latitude*#PI/180; mercN = Log(Tan((#PI/4)+(latRad/2))) y2 = (mapHeight/2)-(mapWidth*mercN/(2*#PI)); - *Pixel\x=GadgetWidth(PBMap\Gadget)/2 - (x2-x1) - *Pixel\y=GadgetHeight(PBMap\Gadget)/2 - (y2-y1) + *Pixel\x=PBMap\Drawing\RadiusX - (x2-x1) + *Pixel\y=PBMap\Drawing\RadiusY - (y2-y1) EndProcedure Procedure IsInDrawingPixelBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) Protected Pixel.PixelCoordinates - LatLon2Pixel(*Position, @Pixel, PBMap\Zoom) - If Pixel\x >= *Drawing\Bounds\BottomLeft\x And Pixel\y <= *Drawing\Bounds\BottomLeft\y And Pixel\x <= *Drawing\Bounds\TopRight\x And Pixel\y >= *Drawing\Bounds\TopRight\y + LatLon2PixelRel(*Position, @Pixel, PBMap\Zoom) + If Pixel\x >= 0 And Pixel\y >= 0 And Pixel\x < *Drawing\RadiusX * 2 And Pixel\y < *Drawing\RadiusY * 2 ProcedureReturn #True Else ProcedureReturn #False @@ -1016,8 +1016,8 @@ Module PBMap Protected x.i, y.i,kq.q Protected tx = Int(*Drawing\TileCoordinates\x) ;Don't forget the Int() ! Protected ty = Int(*Drawing\TileCoordinates\y) - Protected nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point - Protected ny = *Drawing\CenterY / PBMap\TileSize + Protected nx = *Drawing\RadiusX / PBMap\TileSize ;How many tiles around the point + Protected ny = *Drawing\RadiusY / PBMap\TileSize Protected px, py, *timg.ImgMemCach, tilex, tiley, key.s Protected URL.s, CacheFile.s Protected tilemax = 1< 0 ; @Procedure(X.i, Y.i) to DrawPointer (you must use VectorDrawing lib) - CallFunctionFast(PBMap\CallBackMainPointer, *Drawing\CenterX, *Drawing\CenterY) + CallFunctionFast(PBMap\CallBackMainPointer, *Drawing\RadiusX, *Drawing\RadiusY) Else VectorSourceColor(RGBA($FF, 0, 0, $FF)) - MovePathCursor(*Drawing\CenterX, *Drawing\CenterY) + MovePathCursor(*Drawing\RadiusX, *Drawing\RadiusY) AddPathLine(-8, -16, #PB_Path_Relative) AddPathCircle(8, 0, 8, 180, 0, #PB_Path_Relative) AddPathLine(-8, 16, #PB_Path_Relative) @@ -1126,21 +1126,27 @@ Module PBMap Protected tx, ty, nx,ny,nx1,ny1,x,y,n,cx,dperpixel.d Protected pos1.PixelCoordinates,pos2.PixelCoordinates,Degrees1.GeographicCoordinates,degrees2.GeographicCoordinates Protected realx -; tx = Int(*Drawing\TileCoordinates\x) -; ty = Int(*Drawing\TileCoordinates\y) -; tx = *Drawing\TileCoordinates\x -; ty = *Drawing\TileCoordinates\y -; nx = *Drawing\CenterX / PBMap\TileSize ;How many tiles around the point -; ny = *Drawing\CenterY / PBMap\TileSize -; *Drawing\Bounds\NorthWest\x = tx-nx-1 -; *Drawing\Bounds\NorthWest\y = ty-ny-1 -; *Drawing\Bounds\SouthEast\x = tx+nx+2 -; *Drawing\Bounds\SouthEast\y = ty+ny+2 - ; Debug "------------------" - ;TileXY2LatLon(*Drawing\Bounds\NorthWest, @Degrees1, PBMap\Zoom) - ;TileXY2LatLon(*Drawing\Bounds\SouthEast, @Degrees2, PBMap\Zoom) + + ;TODO to find why it doesn't work CopyStructure(*Drawing\Bounds\NorthWest, @Degrees1, GeographicCoordinates) + Debug "----" + Debug Degrees1\Longitude-1 CopyStructure(*Drawing\Bounds\SouthEast, @Degrees2, GeographicCoordinates) + ;tx = Int(*Drawing\TileCoordinates\x) + ;ty = Int(*Drawing\TileCoordinates\y) + tx = *Drawing\TileCoordinates\x + ty = *Drawing\TileCoordinates\y + nx = *Drawing\RadiusX / PBMap\TileSize ;How many tiles around the point + ny = *Drawing\RadiusY / PBMap\TileSize + *Drawing\Bounds\TopLeft\x = tx-nx-1 + *Drawing\Bounds\TopLeft\y = ty-ny-1 + *Drawing\Bounds\BottomRight\x = tx+nx+2 + *Drawing\Bounds\BottomRight\y = ty+ny+2 + TileXY2LatLon(*Drawing\Bounds\TopLeft, @Degrees1, PBMap\Zoom) + TileXY2LatLon(*Drawing\Bounds\BottomRight, @Degrees2, PBMap\Zoom) + Debug Degrees1\Longitude + ;*** + ;ensure we stay positive for the drawing nx = Mod(Mod(Round(Degrees1\Longitude, #PB_Round_Down)-1, 360) + 360, 360) ny = Round(Degrees1\Latitude, #PB_Round_Up) +1 @@ -1310,13 +1316,11 @@ Module PBMap LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If Int(km) <> memKm memKm = Int(km) - RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If Int(km) = 0 DrawTrackPointerFirst(Pixel\x , Pixel\y, Int(km)) Else DrawTrackPointer(Pixel\x , Pixel\y, Int(km)) EndIf - RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndIf @@ -1498,13 +1502,11 @@ Module PBMap ForEach PBMap\Markers() If IsInDrawingPixelBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) LatLon2PixelRel(@PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) - RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If PBMap\Markers()\CallBackPointer > 0 CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\x, Pixel\y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) Else DrawMarker(Pixel\x, Pixel\y, ListIndex(PBMap\Markers()), @PBMap\Markers()) EndIf - RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndProcedure @@ -1550,8 +1552,8 @@ Module PBMap PBMap\Dirty = #False PBMap\Redraw = #False ;*** Precalc some values - *Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 - *Drawing\CenterY = GadgetHeight(PBMap\Gadget) / 2 + *Drawing\RadiusX = GadgetWidth(PBMap\Gadget) / 2 + *Drawing\RadiusY = GadgetHeight(PBMap\Gadget) / 2 *Drawing\GeographicCoordinates\Latitude = PBMap\GeographicCoordinates\Latitude *Drawing\GeographicCoordinates\Longitude = PBMap\GeographicCoordinates\Longitude LatLon2TileXY(*Drawing\GeographicCoordinates, *Drawing\TileCoordinates, PBMap\Zoom) @@ -1562,39 +1564,21 @@ Module PBMap *Drawing\DeltaX = Px * ts - (Int(Px) * ts) ;Don't forget the Int() ! *Drawing\DeltaY = Py * ts - (Int(Py) * ts) ;Drawing boundaries -; nx = *Drawing\CenterX / ts ;How many tiles around the point -; ny = *Drawing\CenterY / ts -; NW\x = Px - nx - 1 -; NW\y = Py - ny - 1 -; SE\x = Px + nx + 2 -; SE\y = Py + ny + 2 -; TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) -; TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) - ;TODO : rotation fix - nx = PixelCenter\x - *Drawing\CenterX - ny = PixelCenter\y + *Drawing\CenterY - StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - RotateCoordinates(PixelCenter\x, PixelCenter\y, PBMap\Angle) - *Drawing\Bounds\BottomLeft\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) - *Drawing\Bounds\BottomLeft\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) - nx + GadgetWidth(PBMap\Gadget) - ny - GadgetHeight(PBMap\Gadget) - *Drawing\Bounds\TopRight\x = ConvertCoordinateX(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) - *Drawing\Bounds\TopRight\y = ConvertCoordinateY(nx, ny, #PB_Coordinate_Device, #PB_Coordinate_User) - StopVectorDrawing() - Pixel2LatLon(*Drawing\Bounds\BottomLeft, *Drawing\Bounds\SouthEast, PBMap\Zoom) - Pixel2LatLon(*Drawing\Bounds\TopRight, *Drawing\Bounds\NorthWest, PBMap\Zoom) -; Debug *Drawing\Bounds\NorthWest\Latitude -; Debug *Drawing\Bounds\NorthWest\Longitude -; Debug *Drawing\Bounds\SouthEast\Latitude -; Debug *Drawing\Bounds\SouthEast\Longitude + nx = *Drawing\RadiusX / ts ;How many tiles around the point + ny = *Drawing\RadiusY / ts + NW\x = Px - nx - 1 + NW\y = Py - ny - 1 + SE\x = Px + nx + 2 + SE\y = Py + ny + 2 + TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) + TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) ;*Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping ;*Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) ;Main rotation - RotateCoordinates(*Drawing\CenterX, *Drawing\CenterY, PBMap\Angle) + ;--r RotateCoordinates(*Drawing\RadiusX, *Drawing\RadiusY, PBMap\Angle) ;Clearscreen VectorSourceColor(RGBA(150, 150, 150, 255)) FillVectorOutput() @@ -1603,16 +1587,16 @@ Module PBMap ForEach PBMap\Layers() DrawTiles(*Drawing, ListIndex(PBMap\Layers())) Next - If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 - DrawDegrees(*Drawing, 192) - EndIf If PBMap\Options\ShowTrack DrawTracks(*Drawing) EndIf If PBMap\Options\ShowMarkers DrawMarkers(*Drawing) EndIf - ResetCoordinates() + If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 + DrawDegrees(*Drawing, 192) + EndIf + ;--r ResetCoordinates() If PBMap\Options\ShowPointer DrawPointer(*Drawing) EndIf @@ -1632,27 +1616,27 @@ Module PBMap EndProcedure Procedure.d Pixel2Lon(x) - Protected NewX.d = (PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + x) / PBMap\TileSize + Protected NewX.d = (PBMap\PixelCoordinates\x - PBMap\Drawing\RadiusX + x) / PBMap\TileSize Protected n.d = Pow(2.0, PBMap\Zoom) ; double mod is to ensure the longitude to be in the range [-180;180[ ProcedureReturn Mod(Mod(NewX / n * 360.0, 360.0) + 360.0, 360.0) - 180 EndProcedure Procedure.d Pixel2Lat(y) - Protected NewY.d = (PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + y) / PBMap\TileSize + Protected NewY.d = (PBMap\PixelCoordinates\y - PBMap\Drawing\RadiusY + y) / PBMap\TileSize Protected n.d = Pow(2.0, PBMap\Zoom) ProcedureReturn Degree(ATan(SinH(#PI * (1.0 - 2.0 * NewY / n)))) EndProcedure Procedure.d MouseLongitude() - Protected MouseX.d = (PBMap\PixelCoordinates\x - GadgetWidth(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX)) / PBMap\TileSize + Protected MouseX.d = (PBMap\PixelCoordinates\x - PBMap\Drawing\RadiusX + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX)) / PBMap\TileSize Protected n.d = Pow(2.0, PBMap\Zoom) ; double mod is to ensure the longitude to be in the range [-180;180[ ProcedureReturn Mod(Mod(MouseX / n * 360.0, 360.0) + 360.0, 360.0) - 180 EndProcedure Procedure.d MouseLatitude() - Protected MouseY.d = (PBMap\PixelCoordinates\y - GadgetHeight(PBMap\Gadget) / 2 + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY)) / PBMap\TileSize + Protected MouseY.d = (PBMap\PixelCoordinates\y - PBMap\Drawing\RadiusY + GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY)) / PBMap\TileSize Protected n.d = Pow(2.0, PBMap\Zoom) ProcedureReturn Degree(ATan(SinH(#PI * (1.0 - 2.0 * MouseY / n)))) EndProcedure @@ -1694,17 +1678,17 @@ Module PBMap Procedure ZoomToArea(MinY.d, MaxY.d, MinX.d, MaxX.d) ;Source => http://gis.stackexchange.com/questions/19632/how-to-calculate-the-optimal-zoom-level-to-display-two-or-more-points-on-a-map ;bounding box in long/lat coords (x=long, y=lat) - Protected DeltaX.d=MaxX-MinX ;assumption ! In original code DeltaX have no source - Protected centerX.d=MinX+DeltaX/2 ; assumption ! In original code CenterX have no source + Protected DeltaX.d = MaxX - MinX ;assumption ! In original code DeltaX have no source + Protected centerX.d = MinX + DeltaX / 2 ; assumption ! In original code CenterX have no source Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. Protected ry1.d = Log((Sin(Radian(MinY)) + 1) / Cos(Radian(MinY))) Protected ry2.d = Log((Sin(Radian(MaxY)) + 1) / Cos(Radian(MaxY))) Protected ryc.d = (ry1 + ry2) / 2 Protected centerY.d = Degree(ATan(SinH(ryc))) - Protected resolutionHorizontal.d = DeltaX / GadgetWidth(PBMap\Gadget) + Protected resolutionHorizontal.d = DeltaX / (PBMap\Drawing\RadiusX * 2) Protected vy0.d = Log(Tan(#PI*(0.25 + centerY/360))); Protected vy1.d = Log(Tan(#PI*(0.25 + MaxY/360))) ; - Protected viewHeightHalf.d = GadgetHeight(PBMap\Gadget)/2; + Protected viewHeightHalf.d = PBMap\Drawing\RadiusY; Protected zoomFactorPowered.d = viewHeightHalf / (40.7436654315252*(vy1 - vy0)) Protected resolutionVertical.d = 360.0 / (zoomFactorPowered * PBMap\TileSize) If resolutionHorizontal<>0 And resolutionVertical<>0 @@ -1825,22 +1809,14 @@ Module PBMap ;Zoom on x, y position relative to the canvas gadget Procedure ZoomOnPixelRel(x, y, zoom) - Protected CenterX = GadgetWidth(PBMap\Gadget) / 2 - Protected CenterY = GadgetHeight(PBMap\Gadget) / 2 - x - CenterX - y - CenterY - ZoomOnPixel(x, y, zoom) + ZoomOnPixel(x - PBMap\Drawing\RadiusX, y - PBMap\Drawing\RadiusY, zoom) EndProcedure ;Go to x, y position relative to the canvas gadget left up Procedure GotoPixelRel(x, y) - Protected CenterX = GadgetWidth(PBMap\Gadget) / 2 - Protected CenterY = GadgetHeight(PBMap\Gadget) / 2 - x - CenterX - y - CenterY LatLon2Pixel(@PBMap\GeographicCoordinates, @PBMap\PixelCoordinates, PBMap\Zoom) - PBMap\PixelCoordinates\x + x - PBMap\PixelCoordinates\y + y + PBMap\PixelCoordinates\x + x - PBMap\Drawing\RadiusX + PBMap\PixelCoordinates\y + y - PBMap\Drawing\RadiusY Pixel2LatLon(@PBMap\PixelCoordinates, @PBMap\GeographicCoordinates, PBMap\Zoom) ; Start drawing PBMap\Redraw = #True @@ -1923,17 +1899,17 @@ Module PBMap Protected Pixel.PixelCoordinates Static CtrlKey PBMap\Moving = #False - MouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\CenterX - MouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\CenterY - StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - RotateCoordinates(0, 0, PBMap\Angle) - CanvasMouseX = ConvertCoordinateX(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) - CanvasMouseY = ConvertCoordinateY(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) - StopVectorDrawing() + CanvasMouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\RadiusX + CanvasMouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\RadiusY + ;--r StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + ; RotateCoordinates(0, 0, PBMap\Angle) + ; CanvasMouseX = ConvertCoordinateX(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + ; CanvasMouseY = ConvertCoordinateY(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) + ; StopVectorDrawing() Select EventType() Case #PB_EventType_Focus - PBMap\Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 - PBMap\Drawing\CenterY = GadgetHeight(PBMap\Gadget) / 2 + PBMap\Drawing\RadiusX = GadgetWidth(PBMap\Gadget) / 2 + PBMap\Drawing\RadiusY = GadgetHeight(PBMap\Gadget) / 2 Case #PB_EventType_KeyUp Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) Case #PB_Shortcut_Delete @@ -2101,7 +2077,6 @@ Module PBMap If ListSize(\Track()) > 0 If \Visible StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - RotateCoordinates(PBMap\Drawing\CenterX, PBMap\Drawing\CenterY, PBMap\Angle) ;Simulate tracks drawing ForEach \Track() LatLon2Pixel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) @@ -2161,8 +2136,8 @@ Module PBMap BindGadgetEvent(PBMap\Gadget, @CanvasEvents()) AddWindowTimer(PBMap\Window, PBMap\Timer, PBMap\Options\TimerInterval) BindEvent(#PB_Event_Timer, @TimerEvents()) - PBMap\Drawing\CenterX = GadgetWidth(PBMap\Gadget) / 2 - PBMap\Drawing\CenterX = GadgetHeight(PBMap\Gadget) / 2 + PBMap\Drawing\RadiusX = GadgetWidth(PBMap\Gadget) / 2 + PBMap\Drawing\RadiusY = GadgetHeight(PBMap\Gadget) / 2 EndProcedure ; Creates a canvas and attach our map @@ -2455,9 +2430,9 @@ CompilerIf #PB_Compiler_IsMainFile CompilerEndIf -; IDE Options = PureBasic 5.50 (Windows - x64) -; CursorPosition = 1523 -; FirstLine = 1495 +; IDE Options = PureBasic 5.60 beta 7 (Windows - x64) +; CursorPosition = 2191 +; FirstLine = 2173 ; Folding = ----------------- ; EnableThread ; EnableXP From a2eac9192d14d78c04b01cfbacc43743da40a517 Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 1 Mar 2017 10:42:06 +0100 Subject: [PATCH 33/36] Merge remote-tracking branch 'refs/remotes/origin/thyphoon' into Revision # Conflicts: # PBMap.pb --- PBMap.pb | 68 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index 35b07bc..32612e1 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -16,15 +16,17 @@ CompilerIf #PB_Compiler_Thread = #False End CompilerEndIf +CompilerIf #PB_Compiler_OS = #PB_OS_Linux + #Red = 255 +compilerEndif + EnableExplicit InitNetwork() UsePNGImageDecoder() UsePNGImageEncoder() -DeclareModule PBMap - #Red = 255 - +DeclareModule PBMap ;-Show debug infos Global Verbose = 0 Global MyDebugLevel = 0 @@ -164,6 +166,7 @@ Module PBMap HDDCachePath.s ; Path where to load and save tiles downloaded from server DefaultOSMServer.s ; Base layer OSM server WheelMouseRelative.i + UseCurl.i ; Use native PB http functions or specific included curl library functions ScaleUnit.i ; Scale unit to use for measurements Proxy.i ; Proxy ON/OFF ProxyURL.s @@ -243,7 +246,7 @@ Module PBMap Moving.i Dirty.i ; To signal that drawing need a refresh - List TracksList.Tracks() + List TracksList.Tracks() ; To display a GPX track List Markers.Marker() ; To diplay marker EditMarker.l @@ -513,6 +516,14 @@ Module PBMap PBMap\Options\HDDCachePath = Value Case "maxmemcache" PBMap\Options\MaxMemCache = Val(Value) + Case "cleancache" + if DeleteDirectory(PBMap\Options\HDDCachePath, "", #PB_FileSystem_Recursive) + MyDebug("Cache : " + PBMap\Options\HDDCachePath + " cleaned") + else + MyDebug("Can't clean cache in " + PBMap\Options\HDDCachePath) + endif + Case "usecurl" + SelBool(UseCurl) Case "wheelmouserelative" SelBool(WheelMouseRelative) Case "showdegrees" @@ -564,6 +575,7 @@ Module PBMap PreferenceGroup("OPTIONS") WritePreferenceInteger("WheelMouseRelative", \WheelMouseRelative) WritePreferenceInteger("MaxMemCache", \MaxMemCache) + WritePreferenceInteger("UseCurl", \UseCurl) WritePreferenceInteger("ShowDegrees", \ShowDegrees) WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) WritePreferenceInteger("ShowScale", \ShowScale) @@ -619,6 +631,7 @@ Module PBMap PreferenceGroup("OPTIONS") \WheelMouseRelative = ReadPreferenceInteger("WheelMouseRelative", #True) \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory + \UseCurl = ReadPreferenceInteger("UseCurl", #True) \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) \ShowScale = ReadPreferenceInteger("ShowScale", #False) @@ -689,8 +702,10 @@ Module PBMap EndIf Next Delay(10) - Until MapSize(PBMap\MemCache\Images()) = 0 - curl_global_cleanup() + Until MapSize(PBMap\MemCache\Images()) = 0 + If PBMap\Options\Curl + curl_global_cleanup() + endif EndProcedure Macro Min(a,b) @@ -880,14 +895,25 @@ Module PBMap Procedure.i GetTileFromWeb(TileURL.s, CacheFile.s) Protected *Buffer Protected nImage.i = -1 - Protected FileSize.i, timg - FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - If FileSize > 0 - MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) - nImage = GetTileFromHDD(CacheFile) + Protected FileSize.i, timg + If PBMap\Options\Curl + FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + If FileSize > 0 + MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) + nImage = GetTileFromHDD(CacheFile) + Else + MyDebug("Problem loading from web " + TileURL, 3) + EndIf Else - MyDebug("Problem loading from web " + TileURL, 3) - EndIf + HTTPProxy(PBMap\Options\ProxyURL+":"+PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + FileSize = ReceiveHTTPFile(TileURL, CacheFile) + If FileSize > 0 + MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) + nImage = GetTileFromHDD(CacheFile) + Else + MyDebug("Problem loading from web " + TileURL, 3) + EndIf + Endif ; **** IMPORTANT NOTICE ; I'm (djes) now using Curl only, as this original catchimage/saveimage method is a double operation (uncompress/recompress PNG) ; and is modifying the original PNG image which could lead to PNG error (Idle has spent hours debunking the 1 bit PNG bug) @@ -922,7 +948,7 @@ Module PBMap *Tile\RetryNb = 0 Else MyDebug("Image key : " + *Tile\key + " web image not correctly loaded", 3) - Delay(5000) + Delay(2000) *Tile\RetryNb - 1 EndIf Until *Tile\RetryNb <= 0 @@ -1310,13 +1336,11 @@ Module PBMap LatLon2PixelRel(@PBMap\TracksList()\Track(), @Pixel, PBMap\Zoom) If Int(km) <> memKm memKm = Int(km) - RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If Int(km) = 0 DrawTrackPointerFirst(Pixel\x , Pixel\y, Int(km)) Else DrawTrackPointer(Pixel\x , Pixel\y, Int(km)) EndIf - RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndIf @@ -1498,13 +1522,11 @@ Module PBMap ForEach PBMap\Markers() If IsInDrawingPixelBoundaries(*Drawing, @PBMap\Markers()\GeographicCoordinates) LatLon2PixelRel(@PBMap\Markers()\GeographicCoordinates, @Pixel, PBMap\Zoom) - RotateCoordinates(Pixel\x, Pixel\y, -PBMap\Angle) If PBMap\Markers()\CallBackPointer > 0 CallFunctionFast(PBMap\Markers()\CallBackPointer, Pixel\x, Pixel\y, PBMap\Markers()\Focus, PBMap\Markers()\Selected) Else DrawMarker(Pixel\x, Pixel\y, ListIndex(PBMap\Markers()), @PBMap\Markers()) EndIf - RotateCoordinates(Pixel\x, Pixel\y, PBMap\Angle) EndIf Next EndProcedure @@ -1513,9 +1535,9 @@ Module PBMap ; Display how many images in cache VectorFont(FontID(PBMap\Font), 16) VectorSourceColor(RGBA(0, 0, 0, 80)) - MovePathCursor(50,50) + MovePathCursor(50, 50) DrawVectorText(Str(MapSize(PBMap\MemCache\Images()))) - MovePathCursor(50,70) + MovePathCursor(50, 70) Protected ThreadCounter = 0 ForEach PBMap\MemCache\Images() If PBMap\MemCache\Images()\Tile <> 0 @@ -1525,11 +1547,11 @@ Module PBMap EndIf Next DrawVectorText(Str(ThreadCounter)) - MovePathCursor(50,90) + MovePathCursor(50, 90) DrawVectorText(Str(PBMap\Zoom)) - MovePathCursor(50,110) + MovePathCursor(50, 110) DrawVectorText(StrD(*Drawing\Bounds\NorthWest\Latitude) + "," + StrD(*Drawing\Bounds\NorthWest\Longitude)) - MovePathCursor(50,130) + MovePathCursor(50, 130) DrawVectorText(StrD(*Drawing\Bounds\SouthEast\Latitude) + "," + StrD(*Drawing\Bounds\SouthEast\Longitude)) EndProcedure From 751ec96070872a509ef66640ef4af5c87a9baadd Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 1 Mar 2017 12:55:28 +0100 Subject: [PATCH 34/36] Curl option, cache clean function, and cache directory better handling + some cleaning --- PBMap.pb | 441 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 265 insertions(+), 176 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index a2f008a..e7d67a0 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -3,7 +3,7 @@ ; Description: Permits the use of tiled maps like ; OpenStreetMap in a handy PureBASIC module ; Author: Thyphoon, djes And Idle -; Date: Mai 17, 2016 +; Date: March, 2017 ; License: PBMap : Free, unrestricted, credit ; appreciated but not required. ; OSM : see http://www.openstreetmap.org/copyright @@ -16,10 +16,6 @@ CompilerIf #PB_Compiler_Thread = #False End CompilerEndIf -CompilerIf #PB_Compiler_OS = #PB_OS_Linux - #Red = 255 -compilerEndif - EnableExplicit InitNetwork() @@ -27,10 +23,22 @@ UsePNGImageDecoder() UsePNGImageEncoder() DeclareModule PBMap - ;-Show debug infos - Global Verbose = 0 + ;-Show debug infos Global MyDebugLevel = 0 + CompilerIf #PB_Compiler_OS = #PB_OS_Linux + #Red = 255 + CompilerEndIf + + Global slash.s + + CompilerSelect #PB_Compiler_OS + CompilerCase #PB_OS_Windows + slash = "\" + CompilerDefault + slash = "/" + CompilerEndSelect + #SCALE_NAUTICAL = 1 #SCALE_KM = 0 @@ -80,6 +88,7 @@ DeclareModule PBMap Declare.i GetMode() Declare SetMode(Mode.i = #MODE_DEFAULT) Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition= 0) ;Send back the position *ptr.GeographicCoordinates + Declare.i CleanCache() EndDeclareModule Module PBMap @@ -182,6 +191,8 @@ Module PBMap ShowPointer.i TimerInterval.i MaxMemCache.i ; in MiB + Verbose.i ; Maximum debug informations + Warning.i ; Warning requesters ShowMarkersNb.i ShowMarkersLegend.i ;Drawing stuff @@ -272,7 +283,7 @@ Module PBMap ;Send debug infos to stdout (allowing mixed debug infos with curl or other libs) Procedure MyDebug(msg.s, DbgLevel = 0) - If Verbose And DbgLevel >= MyDebugLevel + If PBMap\Options\Verbose And DbgLevel >= MyDebugLevel PrintN(msg) ;Debug msg EndIf @@ -287,7 +298,7 @@ Module PBMap IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i, ReceivedData.s - + ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream) Protected SizeProper.i = Size & 255 Protected NMemBProper.i = NMemB @@ -319,7 +330,7 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_HEADER, 0) curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - If Verbose + If PBMap\Options\Verbose curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) EndIf curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) @@ -387,7 +398,7 @@ Module PBMap curl_easy_setopt(curl, #CURLOPT_HEADER, 0) curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - If Verbose + If PBMap\Options\Verbose curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) EndIf curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) @@ -426,7 +437,7 @@ Module PBMap EndIf ProcedureReturn #False EndProcedure - + ;- *** Procedure TechnicalImagesCreation() @@ -516,12 +527,10 @@ Module PBMap PBMap\Options\HDDCachePath = Value Case "maxmemcache" PBMap\Options\MaxMemCache = Val(Value) - Case "cleancache" - if DeleteDirectory(PBMap\Options\HDDCachePath, "", #PB_FileSystem_Recursive) - MyDebug("Cache : " + PBMap\Options\HDDCachePath + " cleaned") - else - MyDebug("Can't clean cache in " + PBMap\Options\HDDCachePath) - endif + Case "verbose" + SelBool(Verbose) + Case "warning" + SelBool(Warning) Case "usecurl" SelBool(UseCurl) Case "wheelmouserelative" @@ -563,35 +572,37 @@ Module PBMap CreatePreferences(PreferencesFile) EndIf With PBMap\Options - PreferenceGroup("PROXY") - WritePreferenceInteger("Proxy", \Proxy) - WritePreferenceString("ProxyURL", \ProxyURL) - WritePreferenceString("ProxyPort", \ProxyPort) - WritePreferenceString("ProxyUser", \ProxyUser) - PreferenceGroup("URL") - WritePreferenceString("DefaultOSMServer", \DefaultOSMServer) - PreferenceGroup("PATHS") - WritePreferenceString("TilesCachePath", \HDDCachePath) - PreferenceGroup("OPTIONS") - WritePreferenceInteger("WheelMouseRelative", \WheelMouseRelative) - WritePreferenceInteger("MaxMemCache", \MaxMemCache) - WritePreferenceInteger("UseCurl", \UseCurl) - WritePreferenceInteger("ShowDegrees", \ShowDegrees) - WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) - WritePreferenceInteger("ShowScale", \ShowScale) - WritePreferenceInteger("ShowMarkers", \ShowMarkers) - WritePreferenceInteger("ShowPointer", \ShowPointer) - WritePreferenceInteger("ShowTrack", \ShowTrack) - WritePreferenceInteger("ShowTrackKms", \ShowTrackKms) - WritePreferenceInteger("ShowMarkersNb", \ShowMarkersNb) - WritePreferenceInteger("ShowMarkersLegend", \ShowMarkersLegend) - PreferenceGroup("DRAWING") - WritePreferenceInteger("StrokeWidthTrackDefault", \StrokeWidthTrackDefault) - ;Colours; - WritePreferenceInteger("ColourFocus", \ColourFocus) - WritePreferenceInteger("ColourSelected", \ColourSelected) - WritePreferenceInteger("ColourTrackDefault", \ColourTrackDefault) - ClosePreferences() + PreferenceGroup("PROXY") + WritePreferenceInteger("Proxy", \Proxy) + WritePreferenceString("ProxyURL", \ProxyURL) + WritePreferenceString("ProxyPort", \ProxyPort) + WritePreferenceString("ProxyUser", \ProxyUser) + PreferenceGroup("URL") + WritePreferenceString("DefaultOSMServer", \DefaultOSMServer) + PreferenceGroup("PATHS") + WritePreferenceString("TilesCachePath", \HDDCachePath) + PreferenceGroup("OPTIONS") + WritePreferenceInteger("WheelMouseRelative", \WheelMouseRelative) + WritePreferenceInteger("MaxMemCache", \MaxMemCache) + WritePreferenceInteger("Verbose", \Verbose) + WritePreferenceInteger("Warning", \Warning) + WritePreferenceInteger("UseCurl", \UseCurl) + WritePreferenceInteger("ShowDegrees", \ShowDegrees) + WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) + WritePreferenceInteger("ShowScale", \ShowScale) + WritePreferenceInteger("ShowMarkers", \ShowMarkers) + WritePreferenceInteger("ShowPointer", \ShowPointer) + WritePreferenceInteger("ShowTrack", \ShowTrack) + WritePreferenceInteger("ShowTrackKms", \ShowTrackKms) + WritePreferenceInteger("ShowMarkersNb", \ShowMarkersNb) + WritePreferenceInteger("ShowMarkersLegend", \ShowMarkersLegend) + PreferenceGroup("DRAWING") + WritePreferenceInteger("StrokeWidthTrackDefault", \StrokeWidthTrackDefault) + ;Colours; + WritePreferenceInteger("ColourFocus", \ColourFocus) + WritePreferenceInteger("ColourSelected", \ColourSelected) + WritePreferenceInteger("ColourTrackDefault", \ColourTrackDefault) + ClosePreferences() EndWith EndProcedure @@ -615,53 +626,47 @@ Module PBMap ; WritePreferenceString("ProxyPass", "myproxypass") ;TODO !Warning! !not encoded! ; ClosePreferences() With PBMap\Options - PreferenceGroup("PROXY") - \Proxy = ReadPreferenceInteger("Proxy", #False) - If \Proxy - \ProxyURL = ReadPreferenceString("ProxyURL", "") ;InputRequester("ProxyServer", "Do you use a Proxy Server? Then enter the full url:", "") - \ProxyPort = ReadPreferenceString("ProxyPort", "") ;InputRequester("ProxyPort" , "Do you use a specific port? Then enter it", "") - \ProxyUser = ReadPreferenceString("ProxyUser", "") ;InputRequester("ProxyUser" , "Do you use a user name? Then enter it", "") - \ProxyPassword = InputRequester("ProxyPass", "Do you use a password ? Then enter it", "") ;TODO - EndIf - PreferenceGroup("URL") - \DefaultOSMServer = ReadPreferenceString("DefaultOSMServer", "http://tile.openstreetmap.org/") - - PreferenceGroup("PATHS") - \HDDCachePath = ReadPreferenceString("TilesCachePath", GetTemporaryDirectory()) - PreferenceGroup("OPTIONS") - \WheelMouseRelative = ReadPreferenceInteger("WheelMouseRelative", #True) - \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory - \UseCurl = ReadPreferenceInteger("UseCurl", #True) - \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) - \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) - \ShowScale = ReadPreferenceInteger("ShowScale", #False) - \ShowMarkers = ReadPreferenceInteger("ShowMarkers", #True) - \ShowPointer = ReadPreferenceInteger("ShowPointer", #True) - \ShowTrack = ReadPreferenceInteger("ShowTrack", #True) - \ShowTrackKms = ReadPreferenceInteger("ShowTrackKms", #False) - \ShowMarkersNb = ReadPreferenceInteger("ShowMarkersNb", #True) - \ShowMarkersLegend = ReadPreferenceInteger("ShowMarkersLegend", #False) - PreferenceGroup("DRAWING") - \StrokeWidthTrackDefault = ReadPreferenceInteger("StrokeWidthTrackDefault", 10) - PreferenceGroup("COLOURS") - \ColourFocus = ReadPreferenceInteger("ColourFocus", RGBA(255, 255, 0, 255)) - \ColourSelected = ReadPreferenceInteger("ColourSelected", RGBA(225, 225, 0, 255)) - \ColourTrackDefault = ReadPreferenceInteger("ColourTrackDefault", RGBA(0, 255, 0, 150)) - \TimerInterval = 20 - ClosePreferences() + PreferenceGroup("PROXY") + \Proxy = ReadPreferenceInteger("Proxy", #False) + If \Proxy + \ProxyURL = ReadPreferenceString("ProxyURL", "") ;InputRequester("ProxyServer", "Do you use a Proxy Server? Then enter the full url:", "") + \ProxyPort = ReadPreferenceString("ProxyPort", "") ;InputRequester("ProxyPort" , "Do you use a specific port? Then enter it", "") + \ProxyUser = ReadPreferenceString("ProxyUser", "") ;InputRequester("ProxyUser" , "Do you use a user name? Then enter it", "") + \ProxyPassword = InputRequester("ProxyPass", "Do you use a password ? Then enter it", "") ;TODO + EndIf + PreferenceGroup("URL") + \DefaultOSMServer = ReadPreferenceString("DefaultOSMServer", "http://tile.openstreetmap.org/") + + PreferenceGroup("PATHS") + \HDDCachePath = ReadPreferenceString("TilesCachePath", GetTemporaryDirectory() + "PBMap" + slash) + PreferenceGroup("OPTIONS") + \WheelMouseRelative = ReadPreferenceInteger("WheelMouseRelative", #True) + \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory + \Verbose = ReadPreferenceInteger("Verbose", #True) + \Warning = ReadPreferenceInteger("Warning", #False) + \UseCurl = ReadPreferenceInteger("UseCurl", #True) + \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) + \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) + \ShowScale = ReadPreferenceInteger("ShowScale", #False) + \ShowMarkers = ReadPreferenceInteger("ShowMarkers", #True) + \ShowPointer = ReadPreferenceInteger("ShowPointer", #True) + \ShowTrack = ReadPreferenceInteger("ShowTrack", #True) + \ShowTrackKms = ReadPreferenceInteger("ShowTrackKms", #False) + \ShowMarkersNb = ReadPreferenceInteger("ShowMarkersNb", #True) + \ShowMarkersLegend = ReadPreferenceInteger("ShowMarkersLegend", #False) + PreferenceGroup("DRAWING") + \StrokeWidthTrackDefault = ReadPreferenceInteger("StrokeWidthTrackDefault", 10) + PreferenceGroup("COLOURS") + \ColourFocus = ReadPreferenceInteger("ColourFocus", RGBA(255, 255, 0, 255)) + \ColourSelected = ReadPreferenceInteger("ColourSelected", RGBA(225, 225, 0, 255)) + \ColourTrackDefault = ReadPreferenceInteger("ColourTrackDefault", RGBA(0, 255, 0, 150)) + \TimerInterval = 20 + ClosePreferences() EndWith EndProcedure Procedure.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18) Protected *Ptr = AddElement(PBMap\Layers()) - Protected DirName.s = PBMap\Options\HDDCachePath + LayerName + "\" - If FileSize(DirName) <> -2 - If CreateDirectory(DirName) = #False ; Creates a directory based on the layer name - Error("Can't create the following cache directory : " + DirName) - Else - MyDebug(DirName + " successfully created", 4) - EndIf - EndIf If *Ptr PBMap\Layers()\Name = LayerName PBMap\Layers()\Order = Order @@ -703,9 +708,9 @@ Module PBMap Next Delay(10) Until MapSize(PBMap\MemCache\Images()) = 0 - If PBMap\Options\Curl + If PBMap\Options\UseCurl curl_global_cleanup() - endif + EndIf EndProcedure Macro Min(a,b) @@ -765,7 +770,7 @@ Module PBMap Procedure.d ClipLongitude(Longitude.d) ProcedureReturn Mod(Mod(Longitude + 180, 360.0) + 360.0, 360.0) - 180 EndProcedure - + ;Lat Lon coordinates 2 pixel absolute [0 to 2^Zoom * TileSize [ Procedure LatLon2Pixel(*Location.GeographicCoordinates, *Pixel.PixelCoordinates, Zoom) Protected tilemax = Pow(2.0, Zoom) * PBMap\TileSize @@ -846,7 +851,7 @@ Module PBMap ProcedureReturn #False EndIf EndProcedure - + ;TODO : rotation fix Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude @@ -874,7 +879,7 @@ Module PBMap ProcedureReturn #False EndIf EndProcedure - + ;-*** These are threaded Procedure.i GetTileFromHDD(CacheFile.s) Protected nImage.i @@ -896,7 +901,7 @@ Module PBMap Protected *Buffer Protected nImage.i = -1 Protected FileSize.i, timg - If PBMap\Options\Curl + If PBMap\Options\UseCurl FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) If FileSize > 0 MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) @@ -905,7 +910,7 @@ Module PBMap MyDebug("Problem loading from web " + TileURL, 3) EndIf Else - HTTPProxy(PBMap\Options\ProxyURL+":"+PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) FileSize = ReceiveHTTPFile(TileURL, CacheFile) If FileSize > 0 MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) @@ -913,7 +918,7 @@ Module PBMap Else MyDebug("Problem loading from web " + TileURL, 3) EndIf - Endif + EndIf ; **** IMPORTANT NOTICE ; I'm (djes) now using Curl only, as this original catchimage/saveimage method is a double operation (uncompress/recompress PNG) ; and is modifying the original PNG image which could lead to PNG error (Idle has spent hours debunking the 1 bit PNG bug) @@ -1062,23 +1067,35 @@ Module PBMap kq = (PBMap\Zoom << 8) | (tilex << 16) | (tiley << 36) key = PBMap\Layers()\Name + Str(kq) ; Creates the cache tree based on the OSM tree+Layer : layer/zoom/x/y.png + Protected DirName.s = PBMap\Options\HDDCachePath + PBMap\Layers()\Name + If FileSize(DirName) <> -2 + If CreateDirectory(DirName) = #False ; Creates a directory based on the layer name + Error("Can't create the following layer directory : " + DirName) + Else + MyDebug(DirName + " successfully created", 4) + EndIf + EndIf ; Creates the sub-directory based on the zoom - Protected DirName.s = PBMap\Options\HDDCachePath + PBMap\Layers()\Name + "\" + Str(PBMap\Zoom) + DirName + slash + Str(PBMap\Zoom) If FileSize(DirName) <> -2 If CreateDirectory(DirName) = #False - Error("Can't create the following cache directory : " + DirName) + Error("Can't create the following zoom directory : " + DirName) + Else + MyDebug(DirName + " successfully created", 4) EndIf EndIf ; Creates the sub-directory based on x - DirName.s + "\" + Str(tilex) + DirName.s + slash + Str(tilex) If FileSize(DirName) <> -2 If CreateDirectory(DirName) = #False - Error("Can't create the following cache directory : " + DirName) + Error("Can't create the following x directory : " + DirName) + Else + MyDebug(DirName + " successfully created", 4) EndIf EndIf ; Tile cache name based on y URL = PBMap\Layers()\ServerURL + Str(PBMap\Zoom) + "/" + Str(tilex) + "/" + Str(tiley) + ".png" - CacheFile = DirName + "\" + Str(tiley) + ".png" + CacheFile = DirName + slash + Str(tiley) + ".png" *timg = GetTile(key, URL, CacheFile) If *timg\nImage <> -1 MovePathCursor(px, py) @@ -1390,7 +1407,7 @@ Module PBMap ProcedureReturn *NewTrack EndIf EndProcedure - + Procedure ClearMarkers() ClearList(PBMap\Markers()) @@ -1466,7 +1483,7 @@ Module PBMap EndIf EndProcedure ;-*** - + Procedure DrawMarker(x.i, y.i, Nb.i, *Marker.Marker) Protected Text.s VectorSourceColor(*Marker\Color) @@ -1521,7 +1538,7 @@ Module PBMap DrawVectorParagraph(*Marker\Legend, 100, Height, #PB_VectorParagraph_Center) EndIf EndProcedure - + ; Draw all markers Procedure DrawMarkers(*Drawing.DrawingParameters) Protected Pixel.PixelCoordinates @@ -1590,14 +1607,14 @@ Module PBMap *Drawing\DeltaX = Px * ts - (Int(Px) * ts) ;Don't forget the Int() ! *Drawing\DeltaY = Py * ts - (Int(Py) * ts) ;Drawing boundaries - nx = *Drawing\RadiusX / ts ;How many tiles around the point - ny = *Drawing\RadiusY / ts - NW\x = Px - nx - 1 - NW\y = Py - ny - 1 - SE\x = Px + nx + 2 - SE\y = Py + ny + 2 - TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) - TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) + nx = *Drawing\RadiusX / ts ;How many tiles around the point + ny = *Drawing\RadiusY / ts + NW\x = Px - nx - 1 + NW\y = Py - ny - 1 + SE\x = Px + nx + 2 + SE\y = Py + ny + 2 + TileXY2LatLon(@NW, *Drawing\Bounds\NorthWest, PBMap\Zoom) + TileXY2LatLon(@SE, *Drawing\Bounds\SouthEast, PBMap\Zoom) ;*Drawing\Width = (SE\x / Pow(2, PBMap\Zoom) * 360.0) - (NW\x / Pow(2, PBMap\Zoom) * 360.0) ;Calculus without clipping ;*Drawing\Height = *Drawing\Bounds\NorthWest\Latitude - *Drawing\Bounds\SouthEast\Latitude ;*** @@ -1705,8 +1722,8 @@ Module PBMap ;Source => http://gis.stackexchange.com/questions/19632/how-to-calculate-the-optimal-zoom-level-to-display-two-or-more-points-on-a-map ;bounding box in long/lat coords (x=long, y=lat) Protected DeltaX.d = MaxX - MinX ;assumption ! In original code DeltaX have no source - Protected centerX.d = MinX + DeltaX / 2 ; assumption ! In original code CenterX have no source - Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. + Protected centerX.d = MinX + DeltaX / 2 ; assumption ! In original code CenterX have no source + Protected paddingFactor.f= 1.2 ;paddingFactor: this can be used to get the "120%" effect ThomM refers to. Value of 1.2 would get you the 120%. Protected ry1.d = Log((Sin(Radian(MinY)) + 1) / Cos(Radian(MinY))) Protected ry2.d = Log((Sin(Radian(MaxY)) + 1) / Cos(Radian(MaxY))) Protected ryc.d = (ry1 + ry2) / 2 @@ -1714,7 +1731,7 @@ Module PBMap Protected resolutionHorizontal.d = DeltaX / (PBMap\Drawing\RadiusX * 2) Protected vy0.d = Log(Tan(#PI*(0.25 + centerY/360))); Protected vy1.d = Log(Tan(#PI*(0.25 + MaxY/360))) ; - Protected viewHeightHalf.d = PBMap\Drawing\RadiusY; + Protected viewHeightHalf.d = PBMap\Drawing\RadiusY ; Protected zoomFactorPowered.d = viewHeightHalf / (40.7436654315252*(vy1 - vy0)) Protected resolutionVertical.d = 360.0 / (zoomFactorPowered * PBMap\TileSize) If resolutionHorizontal<>0 And resolutionVertical<>0 @@ -1782,7 +1799,7 @@ Module PBMap EndIf PBMap\Redraw = #True EndProcedure - + Procedure SetCallBackLocation(CallBackLocation.i) PBMap\CallBackLocation = CallBackLocation EndProcedure @@ -1882,6 +1899,7 @@ Module PBMap EndProcedure Procedure NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) + Protected Size.i Protected Query.s = "http://nominatim.openstreetmap.org/search/" + URLEncoder(Address) + ;"Unter%20den%20Linden%201%20Berlin" + @@ -1891,7 +1909,12 @@ Module PBMap ; Debug *Buffer ; Debug MemorySize(*Buffer) ; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) - Protected Size.i = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + If PBMap\Options\UseCurl + Size = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + Else + HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + Size = CurlReceiveHTTPToFile(Query, JSONFileName) + EndIf If LoadJSON(0, JSONFileName) = 0 ;Demivec's code MyDebug( JSONErrorMessage() + " at position " + @@ -1917,7 +1940,68 @@ Module PBMap EndIf EndIf EndProcedure - + + ;(c) ts-soft http://www.purebasic.fr/english/viewtopic.php?f=12&t=58657&hilit=createdirectory&view=unread#unread + CompilerSelect #PB_Compiler_OS + CompilerCase #PB_OS_Windows + #FILE_ATTRIBUTE_DEVICE = 64 ;(0x40) + #FILE_ATTRIBUTE_INTEGRITY_STREAM = 32768 ;(0x8000) + #FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192;(0x2000) + #FILE_ATTRIBUTE_NO_SCRUB_DATA = 131072;(0x20000) + #FILE_ATTRIBUTE_VIRTUAL = 65536;(0x10000) + #FILE_ATTRIBUTE_DONTSETFLAGS = ~(#FILE_ATTRIBUTE_DIRECTORY| + #FILE_ATTRIBUTE_SPARSE_FILE| + #FILE_ATTRIBUTE_OFFLINE| + #FILE_ATTRIBUTE_NOT_CONTENT_INDEXED| + #FILE_ATTRIBUTE_VIRTUAL| + 0) + Macro SetFileAttributesEx(Name, Attribs) + SetFileAttributes(Name, Attribs & #FILE_ATTRIBUTE_DONTSETFLAGS) + EndMacro + CompilerDefault + Macro SetFileAttributesEx(Name, Attribs) + SetFileAttributes(Name, Attribs) + EndMacro + CompilerEndSelect + + Procedure CreateDirectoryEx(DirectoryName.s, FileAttribute = #PB_Default) + Protected i, c, tmp.s + If Right(DirectoryName, 1) = slash + DirectoryName = Left(DirectoryName, Len(DirectoryName) -1) + EndIf + c = CountString(DirectoryName, slash) + 1 + For i = 1 To c + tmp + StringField(DirectoryName, i, slash) + If FileSize(tmp) <> -2 + CreateDirectory(tmp) + EndIf + tmp + slash + Next + If FileAttribute <> #PB_Default + SetFileAttributesEx(DirectoryName, FileAttribute) + EndIf + If FileSize(DirectoryName) = -2 + ProcedureReturn #True + EndIf + EndProcedure + + Procedure.i CleanCache() + If PBMap\Options\Warning + Protected Result.i = MessageRequester("Warning", "You will clear all cache content in " + PBMap\Options\HDDCachePath + ". Are you sure ?",#PB_MessageRequester_YesNo) + If Result = #PB_MessageRequester_No ; Quit if "no" selected + ProcedureReturn #False + EndIf + EndIf + If DeleteDirectory(PBMap\Options\HDDCachePath, "", #PB_FileSystem_Recursive) + MyDebug("Cache in : " + PBMap\Options\HDDCachePath + " cleaned") + CreateDirectoryEx(PBMap\Options\HDDCachePath) + ProcedureReturn #True + Else + MyDebug("Can't clean cache in " + PBMap\Options\HDDCachePath) + ProcedureReturn #False + EndIf + EndProcedure + Procedure CanvasEvents() Protected CanvasMouseX.d, CanvasMouseY.d, MouseX.d, MouseY.d Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize @@ -1948,32 +2032,32 @@ Module PBMap EndIf Case #PB_EventType_KeyDown With PBMap\Markers() - Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) - Case #PB_Shortcut_Left - ForEach PBMap\Markers() - If \Selected - \GeographicCoordinates\Longitude = ClipLongitude( \GeographicCoordinates\Longitude - 10* 360 / Pow(2, PBMap\Zoom + 8)) - EndIf - Next - Case #PB_Shortcut_Up - ForEach PBMap\Markers() - If \Selected - \GeographicCoordinates\Latitude + 10* 360 / Pow(2, PBMap\Zoom + 8) - EndIf - Next - Case #PB_Shortcut_Right - ForEach PBMap\Markers() - If \Selected - \GeographicCoordinates\Longitude = ClipLongitude( \GeographicCoordinates\Longitude + 10* 360 / Pow(2, PBMap\Zoom + 8)) - EndIf - Next - Case #PB_Shortcut_Down - ForEach PBMap\Markers() - If \Selected - \GeographicCoordinates\Latitude - 10* 360 / Pow(2, PBMap\Zoom + 8) - EndIf - Next - EndSelect + Select GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Key) + Case #PB_Shortcut_Left + ForEach PBMap\Markers() + If \Selected + \GeographicCoordinates\Longitude = ClipLongitude( \GeographicCoordinates\Longitude - 10* 360 / Pow(2, PBMap\Zoom + 8)) + EndIf + Next + Case #PB_Shortcut_Up + ForEach PBMap\Markers() + If \Selected + \GeographicCoordinates\Latitude + 10* 360 / Pow(2, PBMap\Zoom + 8) + EndIf + Next + Case #PB_Shortcut_Right + ForEach PBMap\Markers() + If \Selected + \GeographicCoordinates\Longitude = ClipLongitude( \GeographicCoordinates\Longitude + 10* 360 / Pow(2, PBMap\Zoom + 8)) + EndIf + Next + Case #PB_Shortcut_Down + ForEach PBMap\Markers() + If \Selected + \GeographicCoordinates\Latitude - 10* 360 / Pow(2, PBMap\Zoom + 8) + EndIf + Next + EndSelect EndWith PBMap\Redraw = #True If GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_Modifiers)&#PB_Canvas_Control <> 0 @@ -2179,9 +2263,6 @@ Module PBMap Procedure InitPBMap(Window) Protected Result.i - If Verbose - OpenConsole() - EndIf PBMap\ZoomMin = 0 PBMap\ZoomMax = 18 PBMap\MoveStartingPoint\x = - 1 @@ -2193,10 +2274,16 @@ Module PBMap PBMap\Timer = 1 PBMap\Mode = #MODE_DEFAULT LoadOptions() + If PBMap\Options\Verbose + OpenConsole() + EndIf + CreateDirectoryEx(PBMap\Options\HDDCachePath) If PBMap\Options\DefaultOSMServer <> "" AddMapServerLayer("OSM", 1, PBMap\Options\DefaultOSMServer) EndIf - curl_global_init(#CURL_GLOBAL_WIN32) + If PBMap\Options\UseCurl + curl_global_init(#CURL_GLOBAL_WIN32) + EndIf TechnicalImagesCreation() SetLocation(0, 0) EndProcedure @@ -2353,8 +2440,10 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetOption("ShowDebugInfos", "0") PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") - PBMap::SetOption("ShowTrackKms", "1") + PBMap::SetOption("ShowTrackKms", "1") + PBMap::SetOption("UseCurl", "0") PBMap::SetOption("ColourFocus", "$FFFF00AA") + ;PBMap::CleanCache() PBMap::MapGadget(#Map, 10, 10, 512, 512) PBMap::SetCallBackMainPointer(@MainPointer()) ; To change the main pointer (center of the view) PBMap::SetCallBackLocation(@UpdateLocation()) ; To obtain realtime coordinates @@ -2424,30 +2513,30 @@ CompilerIf #PB_Compiler_IsMainFile EndIf Case #StringGeoLocationQuery Select EventType() - Case #PB_EventType_Focus - AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventGeoLocationStringEnter) - Case #PB_EventType_LostFocus - RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) - EndSelect - EndSelect - Case #PB_Event_SizeWindow - ResizeAll() - Case #PB_Event_Menu - ;Receive "enter" key events - Select EventMenu() - Case #MenuEventGeoLocationStringEnter - If GetGadgetText(#StringGeoLocationQuery) <> "" - PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery)) + Case #PB_EventType_Focus + AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventGeoLocationStringEnter) + Case #PB_EventType_LostFocus + RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) + EndSelect + EndSelect + Case #PB_Event_SizeWindow + ResizeAll() + Case #PB_Event_Menu + ;Receive "enter" key events + Select EventMenu() + Case #MenuEventGeoLocationStringEnter + If GetGadgetText(#StringGeoLocationQuery) <> "" + PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery)) + PBMap::Refresh() + EndIf + ;*** TODO : code to change when the SetActiveGadget(-1) will be fixed + SetActiveGadget(Dummy) + ;*** + Case #MenuEventLonLatStringEnter + PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates PBMap::Refresh() - EndIf - ;*** TODO : code to change when the SetActiveGadget(-1) will be fixed - SetActiveGadget(Dummy) - ;*** - Case #MenuEventLonLatStringEnter - PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates - PBMap::Refresh() - EndSelect - EndSelect + EndSelect + EndSelect Until Quit = #True PBMap::Quit() @@ -2457,9 +2546,9 @@ CompilerEndIf ; IDE Options = PureBasic 5.60 beta 7 (Windows - x64) -; CursorPosition = 2191 -; FirstLine = 2173 -; Folding = ----------------- +; CursorPosition = 908 +; FirstLine = 898 +; Folding = ------------------ ; EnableThread ; EnableXP ; EnableUnicode \ No newline at end of file From 2bfd523459992ce73646e421f970360e290a2a8d Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 1 Mar 2017 14:06:42 +0100 Subject: [PATCH 35/36] some bugfix + full curl lib usage in comments --- PBMap.pb | 394 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 198 insertions(+), 196 deletions(-) diff --git a/PBMap.pb b/PBMap.pb index e7d67a0..22bc308 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -175,7 +175,7 @@ Module PBMap HDDCachePath.s ; Path where to load and save tiles downloaded from server DefaultOSMServer.s ; Base layer OSM server WheelMouseRelative.i - UseCurl.i ; Use native PB http functions or specific included curl library functions +; UseCurl.i ; Use native PB http functions or specific included curl library functions ScaleUnit.i ; Scale unit to use for measurements Proxy.i ; Proxy ON/OFF ProxyURL.s @@ -292,153 +292,153 @@ Module PBMap ;- *** GetText - Translation purpose IncludeFile "gettext.pbi" - ;- *** CURL specific - ; (program has To be compiled in console format for curl debug infos) - - IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl - - Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i, ReceivedData.s - - ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream) - Protected SizeProper.i = Size & 255 - Protected NMemBProper.i = NMemB - If *ReceiveHTTPToMemoryBuffer = 0 - *ReceiveHTTPToMemoryBuffer = AllocateMemory(SizeProper * NMemBProper) - If *ReceiveHTTPToMemoryBuffer = 0 - Error("Curl : Problem allocating memory") - EndIf - Else - *ReceiveHTTPToMemoryBuffer = ReAllocateMemory(*ReceiveHTTPToMemoryBuffer, MemorySize(*ReceiveHTTPToMemoryBuffer) + SizeProper * NMemBProper) - If *ReceiveHTTPToMemoryBuffer = 0 - Error("Curl : Problem reallocating memory") - EndIf - EndIf - CopyMemory(*ptr, *ReceiveHTTPToMemoryBuffer + ReceiveHTTPToMemoryBufferPtr, SizeProper * NMemBProper) - ReceiveHTTPToMemoryBufferPtr + SizeProper * NMemBProper - ProcedureReturn SizeProper * NMemBProper - EndProcedure - - Procedure.i CurlReceiveHTTPToMemory(URL$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") - Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l - If Len(URL$) - curl = curl_easy_init() - If curl - Timeout = 3 - curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) - curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) - curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) - curl_easy_setopt(curl, #CURLOPT_HEADER, 0) - curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) - curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - If PBMap\Options\Verbose - curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) - EndIf - curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) - If Len(ProxyURL$) - ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) - If Len(ProxyPort$) - ProxyURL$ + ":" + ProxyPort$ - EndIf - ; Debug ProxyURL$ - curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) - If Len(ProxyUser$) - If Len(ProxyPassword$) - ProxyUser$ + ":" + ProxyPassword$ - EndIf - ;Debug ProxyUser$ - curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) - EndIf - EndIf - curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToMemoryFunction()) - res = curl_easy_perform(curl) - If res = #CURLE_OK - *Buffer = AllocateMemory(ReceiveHTTPToMemoryBufferPtr) - If *Buffer - CopyMemory(*ReceiveHTTPToMemoryBuffer, *Buffer, ReceiveHTTPToMemoryBufferPtr) - FreeMemory(*ReceiveHTTPToMemoryBuffer) - *ReceiveHTTPToMemoryBuffer = #Null - ReceiveHTTPToMemoryBufferPtr = 0 - Else - MyDebug("Problem allocating buffer", 4) - EndIf - ;curl_easy_cleanup(curl) ;Was its original place but moved below as it seems more logical to me. - Else - curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) - MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) - curl_easy_cleanup(curl) - ProcedureReturn #False - EndIf - curl_easy_cleanup(curl) - Else - MyDebug("Can't Init CURL", 4) - EndIf - EndIf - ; Debug "Curl Buffer : " + Str(*Buffer) - ProcedureReturn *Buffer - EndProcedure - - ;Curl write callback (needed for win32 dll) - ProcedureC ReceiveHTTPWriteToFileFunction(*ptr, Size.i, NMemB.i, FileHandle.i) - ProcedureReturn WriteData(FileHandle, *ptr, Size * NMemB) - EndProcedure - - Procedure.i CurlReceiveHTTPToFile(URL$, DestFileName$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") - Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l - Protected FileHandle.i - MyDebug("CurlReceiveHTTPToFile from " + URL$ + " " + ProxyURL$ + " " + ProxyPort$ + " " + ProxyUser$, 8) - MyDebug(" to file : " + DestFileName$, 8) - FileHandle = CreateFile(#PB_Any, DestFileName$) - If FileHandle And Len(URL$) - curl = curl_easy_init() - If curl - Timeout = 120 - curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) - curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) - curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) - curl_easy_setopt(curl, #CURLOPT_HEADER, 0) - curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) - curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) - If PBMap\Options\Verbose - curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) - EndIf - curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) - ;curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, 60) - If Len(ProxyURL$) - ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) - If Len(ProxyPort$) - ProxyURL$ + ":" + ProxyPort$ - EndIf - MyDebug(ProxyURL$, 8) - curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) - If Len(ProxyUser$) - If Len(ProxyPassword$) - ProxyUser$ + ":" + ProxyPassword$ - EndIf - MyDebug(ProxyUser$, 8) - curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) - EndIf - EndIf - curl_easy_setopt(curl, #CURLOPT_WRITEDATA, FileHandle) - curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToFileFunction()) - res = curl_easy_perform(curl) - If res <> #CURLE_OK - curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) - MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) - CloseFile(FileHandle) - curl_easy_cleanup(curl) - ProcedureReturn #False - EndIf - curl_easy_cleanup(curl) - Else - MyDebug("Can't init CURL", 8) - EndIf - CloseFile(FileHandle) - ProcedureReturn FileSize(DestFileName$) - EndIf - ProcedureReturn #False - EndProcedure - - ;- *** +; ;- *** CURL specific +; ; (program has To be compiled in console format for curl debug infos) +; +; IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl +; +; Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i, ReceivedData.s +; +; ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream) +; Protected SizeProper.i = Size & 255 +; Protected NMemBProper.i = NMemB +; If *ReceiveHTTPToMemoryBuffer = 0 +; *ReceiveHTTPToMemoryBuffer = AllocateMemory(SizeProper * NMemBProper) +; If *ReceiveHTTPToMemoryBuffer = 0 +; Error("Curl : Problem allocating memory") +; EndIf +; Else +; *ReceiveHTTPToMemoryBuffer = ReAllocateMemory(*ReceiveHTTPToMemoryBuffer, MemorySize(*ReceiveHTTPToMemoryBuffer) + SizeProper * NMemBProper) +; If *ReceiveHTTPToMemoryBuffer = 0 +; Error("Curl : Problem reallocating memory") +; EndIf +; EndIf +; CopyMemory(*ptr, *ReceiveHTTPToMemoryBuffer + ReceiveHTTPToMemoryBufferPtr, SizeProper * NMemBProper) +; ReceiveHTTPToMemoryBufferPtr + SizeProper * NMemBProper +; ProcedureReturn SizeProper * NMemBProper +; EndProcedure +; +; Procedure.i CurlReceiveHTTPToMemory(URL$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") +; Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l +; If Len(URL$) +; curl = curl_easy_init() +; If curl +; Timeout = 3 +; curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) +; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) +; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) +; curl_easy_setopt(curl, #CURLOPT_HEADER, 0) +; curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) +; curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) +; If PBMap\Options\Verbose +; curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) +; EndIf +; curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) +; If Len(ProxyURL$) +; ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) +; If Len(ProxyPort$) +; ProxyURL$ + ":" + ProxyPort$ +; EndIf +; ; Debug ProxyURL$ +; curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) +; If Len(ProxyUser$) +; If Len(ProxyPassword$) +; ProxyUser$ + ":" + ProxyPassword$ +; EndIf +; ;Debug ProxyUser$ +; curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) +; EndIf +; EndIf +; curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToMemoryFunction()) +; res = curl_easy_perform(curl) +; If res = #CURLE_OK +; *Buffer = AllocateMemory(ReceiveHTTPToMemoryBufferPtr) +; If *Buffer +; CopyMemory(*ReceiveHTTPToMemoryBuffer, *Buffer, ReceiveHTTPToMemoryBufferPtr) +; FreeMemory(*ReceiveHTTPToMemoryBuffer) +; *ReceiveHTTPToMemoryBuffer = #Null +; ReceiveHTTPToMemoryBufferPtr = 0 +; Else +; MyDebug("Problem allocating buffer", 4) +; EndIf +; ;curl_easy_cleanup(curl) ;Was its original place but moved below as it seems more logical to me. +; Else +; curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) +; MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) +; curl_easy_cleanup(curl) +; ProcedureReturn #False +; EndIf +; curl_easy_cleanup(curl) +; Else +; MyDebug("Can't Init CURL", 4) +; EndIf +; EndIf +; ; Debug "Curl Buffer : " + Str(*Buffer) +; ProcedureReturn *Buffer +; EndProcedure +; +; ;Curl write callback (needed for win32 dll) +; ProcedureC ReceiveHTTPWriteToFileFunction(*ptr, Size.i, NMemB.i, FileHandle.i) +; ProcedureReturn WriteData(FileHandle, *ptr, Size * NMemB) +; EndProcedure +; +; Procedure.i CurlReceiveHTTPToFile(URL$, DestFileName$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") +; Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l +; Protected FileHandle.i +; MyDebug("CurlReceiveHTTPToFile from " + URL$ + " " + ProxyURL$ + " " + ProxyPort$ + " " + ProxyUser$, 8) +; MyDebug(" to file : " + DestFileName$, 8) +; FileHandle = CreateFile(#PB_Any, DestFileName$) +; If FileHandle And Len(URL$) +; curl = curl_easy_init() +; If curl +; Timeout = 120 +; curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) +; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) +; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) +; curl_easy_setopt(curl, #CURLOPT_HEADER, 0) +; curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) +; curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) +; If PBMap\Options\Verbose +; curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) +; EndIf +; curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) +; ;curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, 60) +; If Len(ProxyURL$) +; ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) +; If Len(ProxyPort$) +; ProxyURL$ + ":" + ProxyPort$ +; EndIf +; MyDebug(ProxyURL$, 8) +; curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) +; If Len(ProxyUser$) +; If Len(ProxyPassword$) +; ProxyUser$ + ":" + ProxyPassword$ +; EndIf +; MyDebug(ProxyUser$, 8) +; curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) +; EndIf +; EndIf +; curl_easy_setopt(curl, #CURLOPT_WRITEDATA, FileHandle) +; curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToFileFunction()) +; res = curl_easy_perform(curl) +; If res <> #CURLE_OK +; curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) +; MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) +; CloseFile(FileHandle) +; curl_easy_cleanup(curl) +; ProcedureReturn #False +; EndIf +; curl_easy_cleanup(curl) +; Else +; MyDebug("Can't init CURL", 8) +; EndIf +; CloseFile(FileHandle) +; ProcedureReturn FileSize(DestFileName$) +; EndIf +; ProcedureReturn #False +; EndProcedure +; +; ;- *** Procedure TechnicalImagesCreation() ;"Loading" image @@ -531,8 +531,8 @@ Module PBMap SelBool(Verbose) Case "warning" SelBool(Warning) - Case "usecurl" - SelBool(UseCurl) +; Case "usecurl" +; SelBool(UseCurl) Case "wheelmouserelative" SelBool(WheelMouseRelative) Case "showdegrees" @@ -586,7 +586,7 @@ Module PBMap WritePreferenceInteger("MaxMemCache", \MaxMemCache) WritePreferenceInteger("Verbose", \Verbose) WritePreferenceInteger("Warning", \Warning) - WritePreferenceInteger("UseCurl", \UseCurl) +; WritePreferenceInteger("UseCurl", \UseCurl) WritePreferenceInteger("ShowDegrees", \ShowDegrees) WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) WritePreferenceInteger("ShowScale", \ShowScale) @@ -644,7 +644,7 @@ Module PBMap \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory \Verbose = ReadPreferenceInteger("Verbose", #True) \Warning = ReadPreferenceInteger("Warning", #False) - \UseCurl = ReadPreferenceInteger("UseCurl", #True) +; \UseCurl = ReadPreferenceInteger("UseCurl", #True) \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) \ShowScale = ReadPreferenceInteger("ShowScale", #False) @@ -708,9 +708,9 @@ Module PBMap Next Delay(10) Until MapSize(PBMap\MemCache\Images()) = 0 - If PBMap\Options\UseCurl - curl_global_cleanup() - EndIf +; If PBMap\Options\UseCurl +; curl_global_cleanup() +; EndIf EndProcedure Macro Min(a,b) @@ -852,7 +852,6 @@ Module PBMap EndIf EndProcedure - ;TODO : rotation fix Procedure IsInDrawingBoundaries(*Drawing.DrawingParameters, *Position.GeographicCoordinates) Protected Lat.d = *Position\Latitude, Lon.d = *Position\Longitude Protected LatNW.d = *Drawing\Bounds\NorthWest\Latitude, LonNW.d = *Drawing\Bounds\NorthWest\Longitude @@ -901,15 +900,15 @@ Module PBMap Protected *Buffer Protected nImage.i = -1 Protected FileSize.i, timg - If PBMap\Options\UseCurl - FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - If FileSize > 0 - MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) - nImage = GetTileFromHDD(CacheFile) - Else - MyDebug("Problem loading from web " + TileURL, 3) - EndIf - Else +; If PBMap\Options\UseCurl +; FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) +; If FileSize > 0 +; MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) +; nImage = GetTileFromHDD(CacheFile) +; Else +; MyDebug("Problem loading from web " + TileURL, 3) +; EndIf +; Else HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) FileSize = ReceiveHTTPFile(TileURL, CacheFile) If FileSize > 0 @@ -918,7 +917,7 @@ Module PBMap Else MyDebug("Problem loading from web " + TileURL, 3) EndIf - EndIf +; EndIf ; **** IMPORTANT NOTICE ; I'm (djes) now using Curl only, as this original catchimage/saveimage method is a double operation (uncompress/recompress PNG) ; and is modifying the original PNG image which could lead to PNG error (Idle has spent hours debunking the 1 bit PNG bug) @@ -1620,8 +1619,6 @@ Module PBMap ;*** ; Main drawing stuff StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) - ;Main rotation - ;--r RotateCoordinates(*Drawing\RadiusX, *Drawing\RadiusY, PBMap\Angle) ;Clearscreen VectorSourceColor(RGBA(150, 150, 150, 255)) FillVectorOutput() @@ -1639,7 +1636,6 @@ Module PBMap If PBMap\Options\ShowDegrees And PBMap\Zoom > 2 DrawDegrees(*Drawing, 192) EndIf - ;--r ResetCoordinates() If PBMap\Options\ShowPointer DrawPointer(*Drawing) EndIf @@ -1909,12 +1905,12 @@ Module PBMap ; Debug *Buffer ; Debug MemorySize(*Buffer) ; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) - If PBMap\Options\UseCurl - Size = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - Else +; If PBMap\Options\UseCurl +; Size = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) +; Else HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - Size = CurlReceiveHTTPToFile(Query, JSONFileName) - EndIf + Size = ReceiveHTTPFile(Query, JSONFileName) +; EndIf If LoadJSON(0, JSONFileName) = 0 ;Demivec's code MyDebug( JSONErrorMessage() + " at position " + @@ -2011,7 +2007,8 @@ Module PBMap PBMap\Moving = #False CanvasMouseX = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseX) - PBMap\Drawing\RadiusX CanvasMouseY = GetGadgetAttribute(PBMap\Gadget, #PB_Canvas_MouseY) - PBMap\Drawing\RadiusY - ;--r StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) + ; rotation wip + ; StartVectorDrawing(CanvasVectorOutput(PBMap\Gadget)) ; RotateCoordinates(0, 0, PBMap\Angle) ; CanvasMouseX = ConvertCoordinateX(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) ; CanvasMouseY = ConvertCoordinateY(MouseX, MouseY, #PB_Coordinate_Device, #PB_Coordinate_User) @@ -2233,8 +2230,8 @@ Module PBMap EndSelect EndProcedure + ; Redraws at regular intervals Procedure TimerEvents() - ;Redraw at regular intervals If EventTimer() = PBMap\Timer And (PBMap\Redraw Or PBMap\Dirty) Drawing() EndIf @@ -2281,16 +2278,21 @@ Module PBMap If PBMap\Options\DefaultOSMServer <> "" AddMapServerLayer("OSM", 1, PBMap\Options\DefaultOSMServer) EndIf - If PBMap\Options\UseCurl - curl_global_init(#CURL_GLOBAL_WIN32) - EndIf +; If PBMap\Options\UseCurl +; curl_global_init(#CURL_GLOBAL_WIN32) +; EndIf TechnicalImagesCreation() SetLocation(0, 0) EndProcedure EndModule -;-**** Example of application **** +;**************************************************************** +; +;- Example of application +; +;**************************************************************** + CompilerIf #PB_Compiler_IsMainFile InitNetwork() @@ -2301,8 +2303,8 @@ CompilerIf #PB_Compiler_IsMainFile #Gdt_Right #Gdt_Up #Gdt_Down - #Gdt_RotateLeft - #Gdt_RotateRight + ;#Gdt_RotateLeft + ;#Gdt_RotateRight #Button_4 #Button_5 #Combo_0 @@ -2370,8 +2372,8 @@ CompilerIf #PB_Compiler_IsMainFile ResizeGadget(#Text_1,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Left, WindowWidth(#Window_0) - 150 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Right,WindowWidth(#Window_0) - 90 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) - ResizeGadget(#Gdt_RotateLeft, WindowWidth(#Window_0) - 150 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) - ResizeGadget(#Gdt_RotateRight,WindowWidth(#Window_0) - 90 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ;ResizeGadget(#Gdt_RotateLeft, WindowWidth(#Window_0) - 150 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ;ResizeGadget(#Gdt_RotateRight,WindowWidth(#Window_0) - 90 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Up, WindowWidth(#Window_0) - 120 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Down, WindowWidth(#Window_0) - 120 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Text_2,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) @@ -2399,8 +2401,8 @@ CompilerIf #PB_Compiler_IsMainFile LoadFont(2, "Arial", 8) TextGadget(#Text_1, 530, 50, 60, 15, "Movements") - ButtonGadget(#Gdt_RotateLeft, 550, 070, 30, 30, "LRot") : SetGadgetFont(#Gdt_RotateLeft, FontID(2)) - ButtonGadget(#Gdt_RotateRight, 610, 070, 30, 30, "RRot") : SetGadgetFont(#Gdt_RotateRight, FontID(2)) + ;ButtonGadget(#Gdt_RotateLeft, 550, 070, 30, 30, "LRot") : SetGadgetFont(#Gdt_RotateLeft, FontID(2)) + ;ButtonGadget(#Gdt_RotateRight, 610, 070, 30, 30, "RRot") : SetGadgetFont(#Gdt_RotateRight, FontID(2)) ButtonGadget(#Gdt_Left, 550, 100, 30, 30, Chr($25C4)) : SetGadgetFont(#Gdt_Left, FontID(0)) ButtonGadget(#Gdt_Right, 610, 100, 30, 30, Chr($25BA)) : SetGadgetFont(#Gdt_Right, FontID(0)) ButtonGadget(#Gdt_Up, 580, 070, 30, 30, Chr($25B2)) : SetGadgetFont(#Gdt_Up, FontID(0)) @@ -2441,7 +2443,7 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetOption("ShowScale", "1") PBMap::SetOption("ShowMarkersLegend", "1") PBMap::SetOption("ShowTrackKms", "1") - PBMap::SetOption("UseCurl", "0") +; PBMap::SetOption("UseCurl", "0") PBMap::SetOption("ColourFocus", "$FFFF00AA") ;PBMap::CleanCache() PBMap::MapGadget(#Map, 10, 10, 512, 512) @@ -2466,12 +2468,12 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetLocation(0, 10* -360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) Case #Gdt_Right PBMap::SetLocation(0, 10* 360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) - Case #Gdt_RotateLeft - PBMAP::SetAngle(-5,#PB_Relative) - PBMap::Refresh() - Case #Gdt_RotateRight - PBMAP::SetAngle(5,#PB_Relative) - PBMap::Refresh() + ;Case #Gdt_RotateLeft + ; PBMAP::SetAngle(-5,#PB_Relative) + ; PBMap::Refresh() + ;Case #Gdt_RotateRight + ; PBMAP::SetAngle(5,#PB_Relative) + ; PBMap::Refresh() Case #Button_4 PBMap::SetZoom(1) Case #Button_5 @@ -2546,9 +2548,9 @@ CompilerEndIf ; IDE Options = PureBasic 5.60 beta 7 (Windows - x64) -; CursorPosition = 908 -; FirstLine = 898 -; Folding = ------------------ +; CursorPosition = 190 +; FirstLine = 117 +; Folding = ----------------- ; EnableThread ; EnableXP ; EnableUnicode \ No newline at end of file From 4deae1d60d22927521a57faa3b3b6dbe27b61575 Mon Sep 17 00:00:00 2001 From: djes Date: Wed, 1 Mar 2017 14:19:28 +0100 Subject: [PATCH 36/36] Curl dependencies removed + some bugfix --- PBMap.pb | 241 ++---------- libcurl.pbi | 1070 --------------------------------------------------- 2 files changed, 36 insertions(+), 1275 deletions(-) delete mode 100644 libcurl.pbi diff --git a/PBMap.pb b/PBMap.pb index 22bc308..91c0c67 100644 --- a/PBMap.pb +++ b/PBMap.pb @@ -88,7 +88,7 @@ DeclareModule PBMap Declare.i GetMode() Declare SetMode(Mode.i = #MODE_DEFAULT) Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition= 0) ;Send back the position *ptr.GeographicCoordinates - Declare.i CleanCache() + Declare.i ClearDiskCache() EndDeclareModule Module PBMap @@ -175,7 +175,6 @@ Module PBMap HDDCachePath.s ; Path where to load and save tiles downloaded from server DefaultOSMServer.s ; Base layer OSM server WheelMouseRelative.i -; UseCurl.i ; Use native PB http functions or specific included curl library functions ScaleUnit.i ; Scale unit to use for measurements Proxy.i ; Proxy ON/OFF ProxyURL.s @@ -290,156 +289,9 @@ Module PBMap EndProcedure ;- *** GetText - Translation purpose + ;TODO use this for all text IncludeFile "gettext.pbi" -; ;- *** CURL specific -; ; (program has To be compiled in console format for curl debug infos) -; -; IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl -; -; Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i, ReceivedData.s -; -; ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream) -; Protected SizeProper.i = Size & 255 -; Protected NMemBProper.i = NMemB -; If *ReceiveHTTPToMemoryBuffer = 0 -; *ReceiveHTTPToMemoryBuffer = AllocateMemory(SizeProper * NMemBProper) -; If *ReceiveHTTPToMemoryBuffer = 0 -; Error("Curl : Problem allocating memory") -; EndIf -; Else -; *ReceiveHTTPToMemoryBuffer = ReAllocateMemory(*ReceiveHTTPToMemoryBuffer, MemorySize(*ReceiveHTTPToMemoryBuffer) + SizeProper * NMemBProper) -; If *ReceiveHTTPToMemoryBuffer = 0 -; Error("Curl : Problem reallocating memory") -; EndIf -; EndIf -; CopyMemory(*ptr, *ReceiveHTTPToMemoryBuffer + ReceiveHTTPToMemoryBufferPtr, SizeProper * NMemBProper) -; ReceiveHTTPToMemoryBufferPtr + SizeProper * NMemBProper -; ProcedureReturn SizeProper * NMemBProper -; EndProcedure -; -; Procedure.i CurlReceiveHTTPToMemory(URL$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") -; Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l -; If Len(URL$) -; curl = curl_easy_init() -; If curl -; Timeout = 3 -; curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) -; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) -; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) -; curl_easy_setopt(curl, #CURLOPT_HEADER, 0) -; curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) -; curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) -; If PBMap\Options\Verbose -; curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) -; EndIf -; curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) -; If Len(ProxyURL$) -; ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) -; If Len(ProxyPort$) -; ProxyURL$ + ":" + ProxyPort$ -; EndIf -; ; Debug ProxyURL$ -; curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) -; If Len(ProxyUser$) -; If Len(ProxyPassword$) -; ProxyUser$ + ":" + ProxyPassword$ -; EndIf -; ;Debug ProxyUser$ -; curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) -; EndIf -; EndIf -; curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToMemoryFunction()) -; res = curl_easy_perform(curl) -; If res = #CURLE_OK -; *Buffer = AllocateMemory(ReceiveHTTPToMemoryBufferPtr) -; If *Buffer -; CopyMemory(*ReceiveHTTPToMemoryBuffer, *Buffer, ReceiveHTTPToMemoryBufferPtr) -; FreeMemory(*ReceiveHTTPToMemoryBuffer) -; *ReceiveHTTPToMemoryBuffer = #Null -; ReceiveHTTPToMemoryBufferPtr = 0 -; Else -; MyDebug("Problem allocating buffer", 4) -; EndIf -; ;curl_easy_cleanup(curl) ;Was its original place but moved below as it seems more logical to me. -; Else -; curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) -; MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) -; curl_easy_cleanup(curl) -; ProcedureReturn #False -; EndIf -; curl_easy_cleanup(curl) -; Else -; MyDebug("Can't Init CURL", 4) -; EndIf -; EndIf -; ; Debug "Curl Buffer : " + Str(*Buffer) -; ProcedureReturn *Buffer -; EndProcedure -; -; ;Curl write callback (needed for win32 dll) -; ProcedureC ReceiveHTTPWriteToFileFunction(*ptr, Size.i, NMemB.i, FileHandle.i) -; ProcedureReturn WriteData(FileHandle, *ptr, Size * NMemB) -; EndProcedure -; -; Procedure.i CurlReceiveHTTPToFile(URL$, DestFileName$, ProxyURL$="", ProxyPort$="", ProxyUser$="", ProxyPassword$="") -; Protected *Buffer, curl.i, Timeout.i, res.i, respcode.l -; Protected FileHandle.i -; MyDebug("CurlReceiveHTTPToFile from " + URL$ + " " + ProxyURL$ + " " + ProxyPort$ + " " + ProxyUser$, 8) -; MyDebug(" to file : " + DestFileName$, 8) -; FileHandle = CreateFile(#PB_Any, DestFileName$) -; If FileHandle And Len(URL$) -; curl = curl_easy_init() -; If curl -; Timeout = 120 -; curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$)) -; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0) -; curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0) -; curl_easy_setopt(curl, #CURLOPT_HEADER, 0) -; curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1) -; curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout) -; If PBMap\Options\Verbose -; curl_easy_setopt(curl, #CURLOPT_VERBOSE, 1) -; EndIf -; curl_easy_setopt(curl, #CURLOPT_FAILONERROR, 1) -; ;curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, 60) -; If Len(ProxyURL$) -; ;curl_easy_setopt(curl, #CURLOPT_HTTPPROXYTUNNEL, #True) -; If Len(ProxyPort$) -; ProxyURL$ + ":" + ProxyPort$ -; EndIf -; MyDebug(ProxyURL$, 8) -; curl_easy_setopt(curl, #CURLOPT_PROXY, str2curl(ProxyURL$)) -; If Len(ProxyUser$) -; If Len(ProxyPassword$) -; ProxyUser$ + ":" + ProxyPassword$ -; EndIf -; MyDebug(ProxyUser$, 8) -; curl_easy_setopt(curl, #CURLOPT_PROXYUSERPWD, str2curl(ProxyUser$)) -; EndIf -; EndIf -; curl_easy_setopt(curl, #CURLOPT_WRITEDATA, FileHandle) -; curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToFileFunction()) -; res = curl_easy_perform(curl) -; If res <> #CURLE_OK -; curl_easy_getinfo(curl, #CURLINFO_HTTP_CODE, @respcode) -; MyDebug("CURL : HTTP ERROR " + Str(respcode) , 8) -; CloseFile(FileHandle) -; curl_easy_cleanup(curl) -; ProcedureReturn #False -; EndIf -; curl_easy_cleanup(curl) -; Else -; MyDebug("Can't init CURL", 8) -; EndIf -; CloseFile(FileHandle) -; ProcedureReturn FileSize(DestFileName$) -; EndIf -; ProcedureReturn #False -; EndProcedure -; -; ;- *** - Procedure TechnicalImagesCreation() ;"Loading" image Protected LoadingText$ = "Loading" @@ -531,8 +383,6 @@ Module PBMap SelBool(Verbose) Case "warning" SelBool(Warning) -; Case "usecurl" -; SelBool(UseCurl) Case "wheelmouserelative" SelBool(WheelMouseRelative) Case "showdegrees" @@ -586,7 +436,6 @@ Module PBMap WritePreferenceInteger("MaxMemCache", \MaxMemCache) WritePreferenceInteger("Verbose", \Verbose) WritePreferenceInteger("Warning", \Warning) -; WritePreferenceInteger("UseCurl", \UseCurl) WritePreferenceInteger("ShowDegrees", \ShowDegrees) WritePreferenceInteger("ShowDebugInfos", \ShowDebugInfos) WritePreferenceInteger("ShowScale", \ShowScale) @@ -644,7 +493,6 @@ Module PBMap \MaxMemCache = ReadPreferenceInteger("MaxMemCache", 20480) ;20 MiB, about 80 tiles in memory \Verbose = ReadPreferenceInteger("Verbose", #True) \Warning = ReadPreferenceInteger("Warning", #False) -; \UseCurl = ReadPreferenceInteger("UseCurl", #True) \ShowDegrees = ReadPreferenceInteger("ShowDegrees", #False) \ShowDebugInfos = ReadPreferenceInteger("ShowDebugInfos", #False) \ShowScale = ReadPreferenceInteger("ShowScale", #False) @@ -708,9 +556,6 @@ Module PBMap Next Delay(10) Until MapSize(PBMap\MemCache\Images()) = 0 -; If PBMap\Options\UseCurl -; curl_global_cleanup() -; EndIf EndProcedure Macro Min(a,b) @@ -900,26 +745,16 @@ Module PBMap Protected *Buffer Protected nImage.i = -1 Protected FileSize.i, timg -; If PBMap\Options\UseCurl -; FileSize = CurlReceiveHTTPToFile(TileURL, CacheFile, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) -; If FileSize > 0 -; MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) -; nImage = GetTileFromHDD(CacheFile) -; Else -; MyDebug("Problem loading from web " + TileURL, 3) -; EndIf -; Else - HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - FileSize = ReceiveHTTPFile(TileURL, CacheFile) - If FileSize > 0 - MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) - nImage = GetTileFromHDD(CacheFile) - Else - MyDebug("Problem loading from web " + TileURL, 3) - EndIf -; EndIf - ; **** IMPORTANT NOTICE - ; I'm (djes) now using Curl only, as this original catchimage/saveimage method is a double operation (uncompress/recompress PNG) + HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + FileSize = ReceiveHTTPFile(TileURL, CacheFile) + If FileSize > 0 + MyDebug("Loaded from web " + TileURL + " as CacheFile " + CacheFile, 3) + nImage = GetTileFromHDD(CacheFile) + Else + MyDebug("Problem loading from web " + TileURL, 3) + EndIf + ; **** IMPORTANT NOTICE (please not remove) + ; I'm (djes) now using Curl (actually, just normal pb) only, as this original catchimage/saveimage method is a double operation (uncompress/recompress PNG) ; and is modifying the original PNG image which could lead to PNG error (Idle has spent hours debunking the 1 bit PNG bug) ; More than that, the original Purebasic Receive library is still not Proxy enabled. ; *Buffer = ReceiveHTTPMemory(TileURL) ;TODO to thread by using #PB_HTTP_Asynchronous @@ -1898,19 +1733,14 @@ Module PBMap Protected Size.i Protected Query.s = "http://nominatim.openstreetmap.org/search/" + URLEncoder(Address) + - ;"Unter%20den%20Linden%201%20Berlin" + - "?format=json&addressdetails=0&polygon=0&limit=1" + "?format=json&addressdetails=0&polygon=0&limit=1" Protected JSONFileName.s = PBMap\Options\HDDCachePath + "nominatimresponse.json" ; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) ; Debug *Buffer ; Debug MemorySize(*Buffer) ; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8) -; If PBMap\Options\UseCurl -; Size = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) -; Else - HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) - Size = ReceiveHTTPFile(Query, JSONFileName) -; EndIf + HTTPProxy(PBMap\Options\ProxyURL + ":" + PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword) + Size = ReceiveHTTPFile(Query, JSONFileName) If LoadJSON(0, JSONFileName) = 0 ;Demivec's code MyDebug( JSONErrorMessage() + " at position " + @@ -1981,7 +1811,7 @@ Module PBMap EndIf EndProcedure - Procedure.i CleanCache() + Procedure.i ClearDiskCache() If PBMap\Options\Warning Protected Result.i = MessageRequester("Warning", "You will clear all cache content in " + PBMap\Options\HDDCachePath + ". Are you sure ?",#PB_MessageRequester_YesNo) If Result = #PB_MessageRequester_No ; Quit if "no" selected @@ -1989,11 +1819,11 @@ Module PBMap EndIf EndIf If DeleteDirectory(PBMap\Options\HDDCachePath, "", #PB_FileSystem_Recursive) - MyDebug("Cache in : " + PBMap\Options\HDDCachePath + " cleaned") + MyDebug("Cache in : " + PBMap\Options\HDDCachePath + " cleared") CreateDirectoryEx(PBMap\Options\HDDCachePath) ProcedureReturn #True Else - MyDebug("Can't clean cache in " + PBMap\Options\HDDCachePath) + MyDebug("Can't clear cache in " + PBMap\Options\HDDCachePath) ProcedureReturn #False EndIf EndProcedure @@ -2278,9 +2108,6 @@ Module PBMap If PBMap\Options\DefaultOSMServer <> "" AddMapServerLayer("OSM", 1, PBMap\Options\DefaultOSMServer) EndIf -; If PBMap\Options\UseCurl -; curl_global_init(#CURL_GLOBAL_WIN32) -; EndIf TechnicalImagesCreation() SetLocation(0, 0) EndProcedure @@ -2319,7 +2146,8 @@ CompilerIf #PB_Compiler_IsMainFile #Gdt_AddMarker #Gdt_AddOpenseaMap #Gdt_Degrees - #Gdt_EditMode + #Gdt_EditMode + #Gdt_ClearDiskCache #TextGeoLocationQuery #StringGeoLocationQuery EndEnumeration @@ -2388,6 +2216,7 @@ CompilerIf #PB_Compiler_IsMainFile ResizeGadget(#Gdt_AddOpenseaMap,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_Degrees,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#Gdt_EditMode,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) + ResizeGadget(#Gdt_ClearDiskCache,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#TextGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) ResizeGadget(#StringGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore) PBMap::Refresh() @@ -2419,8 +2248,9 @@ CompilerIf #PB_Compiler_IsMainFile ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "Show/Hide OpenSeaMap", #PB_Button_Toggle) ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle) ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit mode ON/OFF", #PB_Button_Toggle) - TextGadget(#TextGeoLocationQuery, 530, 435, 150, 15, "Enter an address") - StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "") + ButtonGadget(#Gdt_ClearDiskCache, 530, 430, 150, 30, "Clear disk cache", #PB_Button_Toggle) + TextGadget(#TextGeoLocationQuery, 530, 465, 150, 15, "Enter an address") + StringGadget(#StringGeoLocationQuery, 530, 480, 150, 20, "") SetActiveGadget(#StringGeoLocationQuery) AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #MenuEventGeoLocationStringEnter) ;*** TODO : code to remove when the SetActiveGadget(-1) will be fixed @@ -2440,12 +2270,11 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::InitPBMap(#Window_0) PBMap::SetOption("ShowDegrees", "0") : Degrees = 0 PBMap::SetOption("ShowDebugInfos", "0") - PBMap::SetOption("ShowScale", "1") + PBMap::SetOption("ShowScale", "1") + PBMap::SetOption("Warning", "1") PBMap::SetOption("ShowMarkersLegend", "1") PBMap::SetOption("ShowTrackKms", "1") -; PBMap::SetOption("UseCurl", "0") PBMap::SetOption("ColourFocus", "$FFFF00AA") - ;PBMap::CleanCache() PBMap::MapGadget(#Map, 10, 10, 512, 512) PBMap::SetCallBackMainPointer(@MainPointer()) ; To change the main pointer (center of the view) PBMap::SetCallBackLocation(@UpdateLocation()) ; To obtain realtime coordinates @@ -2468,12 +2297,12 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetLocation(0, 10* -360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) Case #Gdt_Right PBMap::SetLocation(0, 10* 360 / Pow(2, PBMap::GetZoom() + 8), 0, #PB_Relative) - ;Case #Gdt_RotateLeft - ; PBMAP::SetAngle(-5,#PB_Relative) - ; PBMap::Refresh() - ;Case #Gdt_RotateRight - ; PBMAP::SetAngle(5,#PB_Relative) - ; PBMap::Refresh() + ;Case #Gdt_RotateLeft + ; PBMAP::SetAngle(-5,#PB_Relative) + ; PBMap::Refresh() + ;Case #Gdt_RotateRight + ; PBMAP::SetAngle(5,#PB_Relative) + ; PBMap::Refresh() Case #Button_4 PBMap::SetZoom(1) Case #Button_5 @@ -2513,6 +2342,8 @@ CompilerIf #PB_Compiler_IsMainFile PBMap::SetMode(PBMap::#MODE_DEFAULT) SetGadgetState(#Gdt_EditMode, 0) EndIf + Case #Gdt_ClearDiskCache + PBMap::ClearDiskCache() Case #StringGeoLocationQuery Select EventType() Case #PB_EventType_Focus @@ -2548,8 +2379,8 @@ CompilerEndIf ; IDE Options = PureBasic 5.60 beta 7 (Windows - x64) -; CursorPosition = 190 -; FirstLine = 117 +; CursorPosition = 2250 +; FirstLine = 2260 ; Folding = ----------------- ; EnableThread ; EnableXP diff --git a/libcurl.pbi b/libcurl.pbi deleted file mode 100644 index 0902a9d..0000000 --- a/libcurl.pbi +++ /dev/null @@ -1,1070 +0,0 @@ -Enumeration 0 - #CURLE_OK - #CURLE_UNSUPPORTED_PROTOCOL ; 1 - #CURLE_FAILED_INIT ; 2 - #CURLE_URL_MALFORMAT ; 3 - #CURLE_URL_MALFORMAT_USER ; 4 (Not USED) - #CURLE_COULDNT_RESOLVE_PROXY ; 5 - #CURLE_COULDNT_RESOLVE_HOST ; 6 - #CURLE_COULDNT_CONNECT ; 7 - #CURLE_FTP_WEIRD_SERVER_REPLY ; 8 - #CURLE_FTP_ACCESS_DENIED ; 9 a service was denied by the FTP server due To lack of access - when login fails this is Not returned. - #CURLE_FTP_USER_PASSWORD_INCORRECT ; 10 - #CURLE_FTP_WEIRD_PASS_REPLY ; 11 - #CURLE_FTP_WEIRD_USER_REPLY ; 12 - #CURLE_FTP_WEIRD_PASV_REPLY ; 13 - #CURLE_FTP_WEIRD_227_FORMAT ; 14 - #CURLE_FTP_CANT_GET_HOST ; 15 - #CURLE_FTP_CANT_RECONNECT ; 16 - #CURLE_FTP_COULDNT_SET_BINARY ; 17 - #CURLE_PARTIAL_FILE ; 18 - #CURLE_FTP_COULDNT_RETR_FILE ; 19 - #CURLE_FTP_WRITE_ERROR ; 20 - #CURLE_FTP_QUOTE_ERROR ; 21 - #CURLE_HTTP_RETURNED_ERROR ; 22 - #CURLE_WRITE_ERROR ; 23 - #CURLE_MALFORMAT_USER ; 24 - Not USED - #CURLE_FTP_COULDNT_STOR_FILE ; 25 - failed FTP upload - #CURLE_READ_ERROR ; 26 - could open/Read from file - #CURLE_OUT_OF_MEMORY ; 27 - #CURLE_OPERATION_TIMEOUTED ; 28 - the timeout time was reached - #CURLE_FTP_COULDNT_SET_ASCII ; 29 - TYPE A failed - #CURLE_FTP_PORT_FAILED ; 30 - FTP PORT operation failed - #CURLE_FTP_COULDNT_USE_REST ; 31 - the REST command failed - #CURLE_FTP_COULDNT_GET_SIZE ; 32 - the SIZE command failed - #CURLE_HTTP_RANGE_ERROR ; 33 - RANGE "command" didn't work - #CURLE_HTTP_POST_ERROR ; 34 - #CURLE_SSL_CONNECT_ERROR ; 35 - wrong when connecting With SSL - #CURLE_BAD_DOWNLOAD_RESUME ; 36 - couldn't resume download - #CURLE_FILE_COULDNT_READ_FILE ; 37 - #CURLE_LDAP_CANNOT_BIND ; 38 - #CURLE_LDAP_SEARCH_FAILED ; 39 - #CURLE_LIBRARY_NOT_FOUND ; 40 - #CURLE_FUNCTION_NOT_FOUND ; 41 - #CURLE_ABORTED_BY_CALLBACK ; 42 - #CURLE_BAD_FUNCTION_ARGUMENT ; 43 - #CURLE_BAD_CALLING_ORDER ; 44 - Not USED - #CURLE_INTERFACE_FAILED ; 45 - CURLOPT_INTERFACE failed - #CURLE_BAD_PASSWORD_ENTERED ; 46 - Not USED - #CURLE_TOO_MANY_REDIRECTS ; 47 - catch endless re-direct loops - #CURLE_UNKNOWN_TELNET_OPTION ; 48 - User specified an unknown option - #CURLE_TELNET_OPTION_SYNTAX ; 49 - Malformed telnet option - #CURLE_OBSOLETE ; 50 - Not USED - #CURLE_SSL_PEER_CERTIFICATE ; 51 - peer's certificate wasn't ok - #CURLE_GOT_NOTHING ; 52 - when this is a specific error - #CURLE_SSL_ENGINE_NOTFOUND ; 53 - SSL crypto engine Not found - #CURLE_SSL_ENGINE_SETFAILED ; 54 - can Not set SSL crypto engine As Default - #CURLE_SEND_ERROR ; 55 - failed sending network Data - #CURLE_RECV_ERROR ; 56 - failure in receiving network Data - #CURLE_SHARE_IN_USE ; 57 - share is in use - #CURLE_SSL_CERTPROBLEM ; 58 - problem With the local certificate - #CURLE_SSL_CIPHER ; 59 - couldn't use specified cipher - #CURLE_SSL_CACERT ; 60 - problem With the CA cert (path?) - #CURLE_BAD_CONTENT_ENCODING ; 61 - Unrecognized transfer encoding - #CURLE_LDAP_INVALID_URL ; 62 - Invalid LDAP URL - #CURLE_FILESIZE_EXCEEDED ; 63 - Maximum file size exceeded - #CURLE_FTP_SSL_FAILED ; 64 - Requested FTP SSL level failed - #CURLE_SEND_FAIL_REWIND ; 65 - Sending the Data requires a rewind that failed - #CURLE_SSL_ENGINE_INITFAILED ; 66 - failed To initialise ENGINE - #CURLE_LOGIN_DENIED ; 67 - user password Or similar was Not accepted And we failed To login - #CURLE_TFTP_NOTFOUND ; 68 - file Not found on server - #CURLE_TFTP_PERM ; 69 - permission problem on server - #CURLE_TFTP_DISKFULL ; 70 - out of disk space on server - #CURLE_TFTP_ILLEGAL ; 71 - Illegal TFTP operation - #CURLE_TFTP_UNKNOWNID ; 72 - Unknown transfer ID - #CURLE_TFTP_EXISTS ; 73 - File already exists - #CURLE_TFTP_NOSUCHUSER ; 74 - No such user - #CURL_LAST ; never use! -EndEnumeration -Enumeration 0 ; curlsocktype - #CURLSOCKTYPE_IPCXN ; socket created For a specific IP connection - #CURLSOCKTYPE_LAST ; never use -EndEnumeration -Enumeration ; curlioerr - #CURLIOE_OK ; I/O operation successful - #CURLIOE_UNKNOWNCMD ; command was unknown To callback - #CURLIOE_FAILRESTART ; failed To restart the Read - #CURLIOE_LAST ; never use -EndEnumeration -Enumeration ; curliocmd - #CURLIOCMD_NOP ; no operation - #CURLIOCMD_RESTARTREAD ; restart the Read stream from start - #CURLIOCMD_LAST ; never use -EndEnumeration -Enumeration 0 ; curl_infotype - ; the kind of Data that is passed To information_callback - #CURLINFO_TEXT - #CURLINFO_HEADER_IN ; 1 - #CURLINFO_HEADER_OUT ; 2 - #CURLINFO_DATA_IN ; 3 - #CURLINFO_DATA_OUT ; 4 - #CURLINFO_SSL_DATA_IN ; 5 - #CURLINFO_SSL_DATA_OUT ; 6 - #CURLINFO_END -EndEnumeration -Enumeration ; curl_proxytype - #CURLPROXY_HTTP = 0 - #CURLPROXY_SOCKS4 = 4 - #CURLPROXY_SOCKS5 = 5 -EndEnumeration -Enumeration ; curl_usessl - ; parameter For the CURLOPT_USE_SSL option - #CURLUSESSL_NONE ; do Not attempt To use SSL - #CURLUSESSL_TRY ; try using SSL proceed anyway otherwise - #CURLUSESSL_CONTROL ; SSL For the control connection Or fail - #CURLUSESSL_ALL ; SSL For all communication Or fail - #CURLUSESSL_LAST ; Not an option never use -EndEnumeration ; -Enumeration ; curl_ftpccc - ; parameter For the CURLOPT_FTP_SSL_CCC option - #CURLFTPSSL_CCC_NONE ; do Not send CCC - #CURLFTPSSL_CCC_PASSIVE ; Let the server initiate the shutdown - #CURLFTPSSL_CCC_ACTIVE ; Initiate the shutdown - #CURLFTPSSL_CCC_LAST ; Not an option never use -EndEnumeration -Enumeration ; curl_ftpauth - ; parameter For the CURLOPT_FTPSSLAUTH option - #CURLFTPAUTH_DEFAULT ; let libcurl decide - #CURLFTPAUTH_SSL ; use "AUTH SSL" - #CURLFTPAUTH_TLS ; use "AUTH TLS" - #CURLFTPAUTH_LAST ; Not an option never use -EndEnumeration -Enumeration ; curl_ftpmethod - ; parameter For the CURLOPT_FTP_FILEMETHOD option - #CURLFTPMETHOD_DEFAULT ; let libcurl pick - #CURLFTPMETHOD_MULTICWD ; single CWD operation For each path part - #CURLFTPMETHOD_NOCWD ; no CWD at all - #CURLFTPMETHOD_SINGLECWD ; one CWD To full dir then work on file - #CURLFTPMETHOD_LAST ; Not an option never use -EndEnumeration -Enumeration ; curl_http - ; These enums are For use With the CURLOPT_HTTP_VERSION option. - #CURL_HTTP_VERSION_NONE ; setting this means we don't care and that we'd - ; like the library To choose the best possible - ; For us! - #CURL_HTTP_VERSION_1_0 ; please use HTTP 1.0 in the request - #CURL_HTTP_VERSION_1_1 ; please use HTTP 1.1 in the request - #CURL_HTTP_VERSION_LAST ; *ILLEGAL* http version -EndEnumeration -Enumeration ; curl_NETRC_OPTION - ; These enums are For use With the CURLOPT_NETRC option. - #CURL_NETRC_IGNORED ; The .netrc will never be Read. - ; This is the Default. - #CURL_NETRC_OPTIONAL ; A user:password in the URL will be preferred - ; To one in the .netrc. - #CURL_NETRC_REQUIRED ; A user:password in the URL will be ignored. - ; Unless one is set programmatically the .netrc - ; will be queried. - #CURL_NETRC_LAST -EndEnumeration -Enumeration ; curl_sslversion - #CURL_SSLVERSION_DEFAULT - #CURL_SSLVERSION_TLSv1 - #CURL_SSLVERSION_SSLv2 - #CURL_SSLVERSION_SSLv3 - #CURL_SSLVERSION_LAST ; never use keep last -EndEnumeration -Enumeration ; curl_TimeCond - #CURL_TIMECOND_NONE - #CURL_TIMECOND_IFMODSINCE - #CURL_TIMECOND_IFUNMODSINCE - #CURL_TIMECOND_LASTMOD - #CURL_TIMECOND_LAST -EndEnumeration ; -Enumeration ; curlformoption - #CURLFORM_NOTHING ; the first one is unused - #CURLFORM_COPYNAME - #CURLFORM_PTRNAME - #CURLFORM_NAMELENGTH - #CURLFORM_COPYCONTENTS - #CURLFORM_PTRCONTENTS - #CURLFORM_CONTENTSLENGTH - #CURLFORM_FILECONTENT - #CURLFORM_ARRAY - #CURLFORM_OBSOLETE - #CURLFORM_FILE - #CURLFORM_BUFFER - #CURLFORM_BUFFERPTR - #CURLFORM_BUFFERLENGTH - #CURLFORM_CONTENTTYPE - #CURLFORM_CONTENTHEADER - #CURLFORM_FILENAME - #CURLFORM_End - #CURLFORM_OBSOLETE2 - #CURLFORM_LASTENTRY ; the last unusued -EndEnumeration -; use this For multipart formpost building -; Returns code For #CURL_formadd() -; Returns: -; #CURL_FORMADD_OK on success -; #CURL_FORMADD_MEMORY If the FormInfo allocation fails -; #CURL_FORMADD_OPTION_TWICE If one option is given twice For one Form -; #CURL_FORMADD_NULL If a null pointer was given For a char -; #CURL_FORMADD_MEMORY If the allocation of a FormInfo struct failed -; #CURL_FORMADD_UNKNOWN_OPTION If an unknown option was used -; #CURL_FORMADD_INCOMPLETE If the some FormInfo is Not complete (Or error) -; #CURL_FORMADD_MEMORY If a HttpPost struct cannot be allocated -; #CURL_FORMADD_MEMORY If some allocation For string copying failed. -; #CURL_FORMADD_ILLEGAL_ARRAY If an illegal option is used in an array -Enumeration ; CURLFORMcode - #CURL_FORMADD_OK ; first no error - #CURL_FORMADD_MEMORY - #CURL_FORMADD_OPTION_TWICE - #CURL_FORMADD_NULL - #CURL_FORMADD_UNKNOWN_OPTION - #CURL_FORMADD_INCOMPLETE - #CURL_FORMADD_ILLEGAL_ARRAY - #CURL_FORMADD_DISABLED ; libcurl was built With this disabled - #CURL_FORMADD_LAST ; last -EndEnumeration -Enumeration ; CURL_closepolicy - #CURLCLOSEPOLICY_NONE ; first never use this - #CURLCLOSEPOLICY_OLDEST - #CURLCLOSEPOLICY_LEAST_RECENTLY_USED - #CURLCLOSEPOLICY_LEAST_TRAFFIC - #CURLCLOSEPOLICY_SLOWEST - #CURLCLOSEPOLICY_CALLBACK - #CURLCLOSEPOLICY_LAST ; last never use this -EndEnumeration -; Different Data locks For a single share -Enumeration 0 ; CURL_lock_data - #CURL_LOCK_DATA_NONE - ; #CURL_LOCK_DATA_SHARE is used internaly To say that - ; the locking is just made To change the internal state of the share - ; itself. - #CURL_LOCK_DATA_SHARE - #CURL_LOCK_DATA_COOKIE - #CURL_LOCK_DATA_DNS - #CURL_LOCK_DATA_SSL_SESSION - #CURL_LOCK_DATA_CONNECT - #CURL_LOCK_DATA_LAST -EndEnumeration ; - ; Different lock access types -Enumeration ; CURL_lock_access - #CURL_LOCK_ACCESS_NONE = 0 ; unspecified action - #CURL_LOCK_ACCESS_SHARED = 1 ; For Read perhaps - #CURL_LOCK_ACCESS_SINGLE = 2 ; For write perhaps - #CURL_LOCK_ACCESS_LAST ; never use -EndEnumeration ; -Enumeration ; CURLSHcode - #CURLSHE_OK ; all is fine - #CURLSHE_BAD_OPTION ; 1 - #CURLSHE_IN_USE ; 2 - #CURLSHE_INVALID ; 3 - #CURLSHE_NOMEM ; out of memory - #CURLSHE_LAST ; never use -EndEnumeration -Enumeration ; CURLSHoption - #CURLSHOPT_NONE ; don't use - #CURLSHOPT_SHARE ; specify a Data type To share - #CURLSHOPT_UNSHARE ; specify shich Data type To stop sharing - #CURLSHOPT_LOCKFUNC ; pass in a '#CURL_lock_function' pointer - #CURLSHOPT_UNLOCKFUNC ; pass in a '#CURL_unlock_function' pointer - #CURLSHOPT_USERDATA ; pass in a user Data pointer used in the lock/unlock - ; callback functions - #CURLSHOPT_LAST ; never use -EndEnumeration -Enumeration ; CURLversion - #CURLVERSION_FIRST - #CURLVERSION_SECOND - #CURLVERSION_THIRD - #CURLVERSION_FOURTH - #CURLVERSION_LAST ; never actually use this -EndEnumeration -;} - -;{ Constantes -#CURL_IPRESOLVE_WHATEVER = 0 ; Default resolves addresses To all IP versions that your system allows -#CURL_IPRESOLVE_V4 = 1 ; resolve To ipv4 addresses -#CURL_IPRESOLVE_V6 = 2 ; resolve To ipv6 addresses - -#CURLOPT_HTTPREQUEST = -1 -; #CURLOPT_FTPASCII = #CURLOPT_TRANSFERTEXT -#CURLOPT_MUTE = -2 -#CURLOPT_PASSWDFUNCTION = -3 -#CURLOPT_PASSWDDATA = -4 -#CURLOPT_CLOSEFUNCTION = -5 -#CURLOPT_SOURCE_HOST = -6 -#CURLOPT_SOURCE_PATH = -7 -#CURLOPT_SOURCE_PORT = -8 -#CURLOPT_PASV_HOST = -9 - -#CURLOPT_INFILESIZE = 00014 -#CURLOPT_VERBOSE = 00041 -#CURLOPT_HEADER = 00042 -#CURLOPT_UPLOAD = 00046 -#CURLOPT_FOLLOWLOCATION = 00052 -#CURLOPT_SSL_VERIFYPEER = 00064 -#CURLOPT_SSL_VERIFYHOST = 00081 -#CURLOPT_IGNORE_CONTENT_LENGTH= 00136 -#CURLOPT_FILE = 10001 -#CURLOPT_URL = 10002 -#CURLOPT_USERPWD = 10005 -#CURLOPT_INFILE = 10009 -#CURLOPT_WRITEHEADER = 10029 -#CURLOPT_POSTQUOTE = 10039 - -#CURLOPT_INFILESIZE_LARGE = 30115 - -#CURLOPTTYPE_OBJECTPOINT = 10000 -#CURLOPT_POSTFIELDS = #CURLOPTTYPE_OBJECTPOINT + 15 - -#CURLOPTTYPE_FUNCTIONPOINT = 20000 -#CURLOPT_WRITEFUNCTION = #CURLOPTTYPE_FUNCTIONPOINT + 11 -#CURLOPT_HEADERFUNCTION = #CURLOPTTYPE_FUNCTIONPOINT + 79 - -; Three convenient "aliases" that follow the name scheme better -#CURLOPT_WRITEDATA = #CURLOPT_FILE -#CURLOPT_READDATA = #CURLOPT_INFILE -#CURLOPT_HEADERDATA = #CURLOPT_WRITEHEADER - -#CURL_GLOBAL_ALL = $00000003 -#CURL_GLOBAL_DEFAULT = $00000003 - -#CURL_MAX_WRITE_SIZE = 16384 -#CURL_READFUNC_ABORT = $10000000 -;{ #CURLINFO -#CURLINFO_STRING = $100000 -#CURLINFO_LONG = $200000 -#CURLINFO_DOUBLE = $300000 -#CURLINFO_SLIST = $400000 -#CURLINFO_MASK = $0fffff -#CURLINFO_TYPEMASK = $f00000 - -#CURLINFO_EFFECTIVE_URL = #CURLINFO_STRING + 1 -#CURLINFO_RESPONSE_CODE = #CURLINFO_LONG + 2 -#CURLINFO_TOTAL_TIME = #CURLINFO_DOUBLE + 3 -#CURLINFO_NAMELOOKUP_TIME = #CURLINFO_DOUBLE + 4 -#CURLINFO_CONNECT_TIME = #CURLINFO_DOUBLE + 5 -#CURLINFO_PRETRANSFER_TIME = #CURLINFO_DOUBLE + 6 -#CURLINFO_SIZE_UPLOAD = #CURLINFO_DOUBLE + 7 -#CURLINFO_SIZE_DOWNLOAD = #CURLINFO_DOUBLE + 8 -#CURLINFO_SPEED_DOWNLOAD = #CURLINFO_DOUBLE + 9 -#CURLINFO_SPEED_UPLOAD = #CURLINFO_DOUBLE + 10 -#CURLINFO_HEADER_SIZE = #CURLINFO_LONG + 11 -#CURLINFO_REQUEST_SIZE = #CURLINFO_LONG + 12 -#CURLINFO_SSL_VERIFYRESULT = #CURLINFO_LONG + 13 -#CURLINFO_FILETIME = #CURLINFO_LONG + 14 -#CURLINFO_CONTENT_LENGTH_DOWNLOAD = #CURLINFO_DOUBLE + 15 -#CURLINFO_CONTENT_LENGTH_UPLOAD = #CURLINFO_DOUBLE + 16 -#CURLINFO_STARTTRANSFER_TIME = #CURLINFO_DOUBLE + 17 -#CURLINFO_CONTENT_TYPE = #CURLINFO_STRING + 18 -#CURLINFO_REDIRECT_TIME = #CURLINFO_DOUBLE + 19 -#CURLINFO_REDIRECT_COUNT = #CURLINFO_LONG + 20 -#CURLINFO_PRIVATE = #CURLINFO_STRING + 21 -#CURLINFO_HTTP_CONNECTCODE = #CURLINFO_LONG + 22 -#CURLINFO_HTTPAUTH_AVAIL = #CURLINFO_LONG + 23 -#CURLINFO_PROXYAUTH_AVAIL = #CURLINFO_LONG + 24 -#CURLINFO_OS_ERRNO = #CURLINFO_LONG + 25 -#CURLINFO_NUM_CONNECTS = #CURLINFO_LONG + 26 -#CURLINFO_SSL_ENGINES = #CURLINFO_SLIST + 27 -#CURLINFO_COOKIELIST = #CURLINFO_SLIST + 28 -#CURLINFO_LASTSOCKET = #CURLINFO_LONG + 29 -#CURLINFO_FTP_ENTRY_PATH = #CURLINFO_STRING + 30 -#CURLINFO_LASTONE = 30 -#CURLINFO_HTTP_CODE = #CURLINFO_RESPONSE_CODE -;} -;{ #CURLOPT -#CURLOPTTYPE_LONG = 0 -#CURLOPTTYPE_OBJECTPOINT = 10000 -#CURLOPTTYPE_FUNCTIONPOINT = 20000 -#CURLOPTTYPE_OFF_T = 30000 - -;This Macro-mania below setups the CURLOPT_[what] enum + To be used With -;curl_easy_setopt(). The first argument in the CURLOPT_) Macro is the [what] word. - -; This is the FILE;Or void;the regular output should be written To. -#CURLOPT_FILE = #CURLOPTTYPE_OBJECTPOINT + 1 -; The full URL To get/put -#CURLOPT_URL= #CURLOPTTYPE_OBJECTPOINT + 2 -; Port number To connect To + If other than Default. -#CURLOPT_PORT= #CURLOPTTYPE_LONG + 3 -; Name of proxy To use. -#CURLOPT_PROXY= #CURLOPTTYPE_OBJECTPOINT + 4 -; "name:password" To use when fetching. -#CURLOPT_USERPWD= #CURLOPTTYPE_OBJECTPOINT + 5 -; "name:password" To use With proxy. -#CURLOPT_PROXYUSERPWD= #CURLOPTTYPE_OBJECTPOINT + 6 -; Range To get + specified As an ASCII string. -#CURLOPT_RANGE= #CURLOPTTYPE_OBJECTPOINT + 7 -; Specified file stream To upload from (use As input): -#CURLOPT_INFILE= #CURLOPTTYPE_OBJECTPOINT + 9 -; Buffer To receive error messages in + must be at least CURL_ERROR_SIZE -; bytes big. If this is Not used + error messages go To stderr instead: -#CURLOPT_ERRORBUFFER= #CURLOPTTYPE_OBJECTPOINT + 10 -; Function that will be called To store the output (instead of fwrite). The -; parameters will use fwrite() syntax + make sure To follow them. -#CURLOPT_WRITEFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 11 -; Function that will be called To Read the Input (instead of fread). The -; parameters will use fread() syntax + make sure To follow them. -#CURLOPT_READFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 12 -; Time-out the Read operation after this amount of seconds -#CURLOPT_TIMEOUT= #CURLOPTTYPE_LONG + 13 -; If the CURLOPT_INFILE is used + this can be used To inform libcurl about -; how large the file being sent really is. That allows better error -; checking And better verifies that the upload was succcessful. -1 means -; unknown size. -; For large file support + there is also a _LARGE version of the key -; which takes an off_t type + allowing platforms With larger off_t -; sizes To handle larger files. See below For INFILESIZE_LARGE. -#CURLOPT_INFILESIZE= #CURLOPTTYPE_LONG + 14 -; POST input fields. -#CURLOPT_POSTFIELDS= #CURLOPTTYPE_OBJECTPOINT + 15 -; Set the referer page (needed by some CGIs) -#CURLOPT_REFERER= #CURLOPTTYPE_OBJECTPOINT + 16 -; Set the FTP PORT string (Interface name + named Or numerical IP address) -; Use i.e '-' To use Default address. -#CURLOPT_FTPPORT= #CURLOPTTYPE_OBJECTPOINT + 17 -; Set the User-Agent string (examined by some CGIs) -#CURLOPT_USERAGENT= #CURLOPTTYPE_OBJECTPOINT + 18 -; If the download receives less than "low speed limit" bytes/second -; during "low speed time" seconds + the operations is aborted. -; You could i.e If you have a pretty high speed connection + abort If -; it is less than 2000 bytes/sec during 20 seconds. -; Set the "low speed limit" -#CURLOPT_LOW_SPEED_LIMIT= #CURLOPTTYPE_LONG + 19 -; Set the "low speed time" -#CURLOPT_LOW_SPEED_TIME= #CURLOPTTYPE_LONG + 20 -; Set the continuation offset. -; Note there is also a _LARGE version of this key which uses -; off_t types + allowing For large file offsets on platforms which -; use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. -#CURLOPT_RESUME_FROM= #CURLOPTTYPE_LONG + 21 -; Set cookie in request: -#CURLOPT_COOKIE= #CURLOPTTYPE_OBJECTPOINT + 22 -; This points To a linked list of headers + struct curl_slist kind -#CURLOPT_HTTPHEADER= #CURLOPTTYPE_OBJECTPOINT + 23 -; This points To a linked list of post entries + struct HttpPost -#CURLOPT_HTTPPOST= #CURLOPTTYPE_OBJECTPOINT + 24 -; name of the file keeping your private SSL-certificate -#CURLOPT_SSLCERT= #CURLOPTTYPE_OBJECTPOINT + 25 -; password For the SSL Or SSH private key -#CURLOPT_KEYPASSWD= #CURLOPTTYPE_OBJECTPOINT + 26 -; send TYPE parameter? -#CURLOPT_CRLF= #CURLOPTTYPE_LONG + 27 -; send linked-list of QUOTE commands -#CURLOPT_QUOTE= #CURLOPTTYPE_OBJECTPOINT + 28 -; send FILE;Or void;To store headers To + If you use a callback it -; is simply passed To the callback unmodified -#CURLOPT_WRITEHEADER= #CURLOPTTYPE_OBJECTPOINT + 29 -; point To a file To Read the initial cookies from + also enables -; "cookie awareness" -#CURLOPT_COOKIEFILE= #CURLOPTTYPE_OBJECTPOINT + 31 -; What version To specifly try To use. -; See CURL_SSLVERSION defines below. -#CURLOPT_SSLVERSION= #CURLOPTTYPE_LONG + 32 -; What kind of HTTP time condition To use + see defines -#CURLOPT_TIMECONDITION= #CURLOPTTYPE_LONG + 33 -; Time To use With the above condition. Specified in number of seconds -; since 1 Jan 1970 -#CURLOPT_TIMEVALUE= #CURLOPTTYPE_LONG + 34 -; Custom request= #CURLOPTTYPE_For customizing the get command like -; HTTP: DELETE + TRACE And others -; FTP: To use a different list command -#CURLOPT_CUSTOMREQUEST= #CURLOPTTYPE_OBJECTPOINT + 36 -; HTTP request= #CURLOPTTYPE_For odd commands like DELETE + TRACE And others -#CURLOPT_STDERR= #CURLOPTTYPE_OBJECTPOINT + 37 -; send linked-list of post-transfer QUOTE commands -#CURLOPT_POSTQUOTE= #CURLOPTTYPE_OBJECTPOINT + 39 -; Pass a pointer To string of the output using full variable-replacement -; As described elsewhere. -#CURLOPT_WRITEINFO= #CURLOPTTYPE_OBJECTPOINT + 40 -#CURLOPT_VERBOSE= #CURLOPTTYPE_LONG + 41 ; talk a lot -#CURLOPT_HEADER= #CURLOPTTYPE_LONG + 42 ; throw the header out too -#CURLOPT_NOPROGRESS= #CURLOPTTYPE_LONG + 43 ; shut off the progress meter -#CURLOPT_NOBODY= #CURLOPTTYPE_LONG + 44 ; use HEAD To get http document -#CURLOPT_FAILONERROR= #CURLOPTTYPE_LONG + 45 ; no output on http error codes >= 300 -#CURLOPT_UPLOAD= #CURLOPTTYPE_LONG + 46 ; this is an upload -#CURLOPT_POST= #CURLOPTTYPE_LONG + 47 ; HTTP POST method -#CURLOPT_DIRLISTONLY= #CURLOPTTYPE_LONG + 48 ; Return bare names when listing directories -#CURLOPT_APPEND= #CURLOPTTYPE_LONG + 50 ; Append instead of overwrite on upload! - ; Specify whether To Read the user+password from the .netrc Or the URL. - ; This must be one of the CURL_NETRC_* enums below. -#CURLOPT_NETRC= #CURLOPTTYPE_LONG + 51 -#CURLOPT_FOLLOWLOCATION= #CURLOPTTYPE_LONG + 52 ; use Location: Luke! -#CURLOPT_TRANSFERTEXT= #CURLOPTTYPE_LONG + 53 ; transfer Data in text/ASCII format -#CURLOPT_PUT= #CURLOPTTYPE_LONG + 54 ; HTTP PUT - ; Function that will be called instead of the internal progress display - ; function. This function should be defined As the curl_progress_callback - ; Prototype defines. -#CURLOPT_PROGRESSFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 56 -; Data passed To the progress callback -#CURLOPT_PROGRESSDATA= #CURLOPTTYPE_OBJECTPOINT + 57 -; We want the referer field set automatically when following locations -#CURLOPT_AUTOREFERER= #CURLOPTTYPE_LONG + 58 -; Port of the proxy + can be set in the proxy string As well With: -; "[host]:[port]" -#CURLOPT_PROXYPORT= #CURLOPTTYPE_LONG + 59 -; size of the POST input Data + If strlen() is Not good To use -#CURLOPT_POSTFIELDSIZE= #CURLOPTTYPE_LONG + 60 -; tunnel non-http operations through a HTTP proxy -#CURLOPT_HTTPPROXYTUNNEL= #CURLOPTTYPE_LONG + 61 -; Set the Interface string To use As outgoing network Interface -#CURLOPT_INTERFACE= #CURLOPTTYPE_OBJECTPOINT + 62 -; Set the krb4/5 security level + this also enables krb4/5 awareness. This -; is a string + 'clear' + 'safe' + 'confidential' Or 'private'. If the string -; is set but doesn't match one of these + 'private' will be used. -#CURLOPT_KRBLEVEL= #CURLOPTTYPE_OBJECTPOINT + 63 -; Set If we should verify the peer in ssl handshake + set 1 To verify. -#CURLOPT_SSL_VERIFYPEER= #CURLOPTTYPE_LONG + 64 -; The CApath Or CAfile used To validate the peer certificate -; this option is used only If SSL_VERIFYPEER is true -#CURLOPT_CAINFO= #CURLOPTTYPE_OBJECTPOINT + 65 -; Maximum number of http redirects To follow -#CURLOPT_MAXREDIRS= #CURLOPTTYPE_LONG + 68 -; Pass a long set To 1 To get the date of the requested document (If -; possible)! Pass a zero To shut it off. -#CURLOPT_FILETIME= #CURLOPTTYPE_LONG + 69 -; This points To a linked list of telnet options -#CURLOPT_TELNETOPTIONS= #CURLOPTTYPE_OBJECTPOINT + 70 -; Max amount of cached alive connections -#CURLOPT_MAXCONNECTS= #CURLOPTTYPE_LONG + 71 -; What policy To use when closing connections when the cache is filled up -#CURLOPT_CLOSEPOLICY= #CURLOPTTYPE_LONG + 72 -; Set To explicitly use a new connection For the upcoming transfer. -; Do Not use this unless you're absolutely sure of this + as it makes the -; operation slower And is less friendly For the network. -#CURLOPT_FRESH_CONNECT= #CURLOPTTYPE_LONG + 74 -; Set To explicitly forbid the upcoming transfer's connection to be re-used -; when done. Do Not use this unless you're absolutely sure of this + as it -; makes the operation slower And is less friendly For the network. -#CURLOPT_FORBID_REUSE= #CURLOPTTYPE_LONG + 75 -; Set To a file name that contains random Data For libcurl To use To -; seed the random engine when doing SSL connects. -#CURLOPT_RANDOM_FILE= #CURLOPTTYPE_OBJECTPOINT + 76 -; Set To the Entropy Gathering Daemon socket pathname -#CURLOPT_EGDSOCKET= #CURLOPTTYPE_OBJECTPOINT + 77 -; Time-out connect operations after this amount of seconds + If connects -; are OK within this time + then fine... This only aborts the connect -; phase. [Only works on unix-style/SIGALRM operating systems] -#CURLOPT_CONNECTTIMEOUT= #CURLOPTTYPE_LONG + 78 -; Function that will be called To store headers (instead of fwrite). The -; parameters will use fwrite() syntax + make sure To follow them. -#CURLOPT_HEADERFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 79 -; Set this To force the HTTP request To get back To GET. Only really usable -; If POST + PUT Or a custom request have been used first. -#CURLOPT_HTTPGET= #CURLOPTTYPE_LONG + 80 -; Set If we should verify the Common name from the peer certificate in ssl -; handshake + set 1 To check existence + 2 To ensure that it matches the -; provided hostname. -#CURLOPT_SSL_VERIFYHOST= #CURLOPTTYPE_LONG + 81 -; Specify which file name To write all known cookies in after completed -; operation. Set file name To "-" (dash) To make it go To stdout. -#CURLOPT_COOKIEJAR= #CURLOPTTYPE_OBJECTPOINT + 82 -; Specify which SSL ciphers To use -#CURLOPT_SSL_CIPHER_LIST= #CURLOPTTYPE_OBJECTPOINT + 83 -; Specify which HTTP version To use! This must be set To one of the -; CURL_HTTP_VERSION* enums set below. -#CURLOPT_HTTP_VERSION= #CURLOPTTYPE_LONG + 84 -; Specificly switch on Or off the FTP engine's use of the EPSV command. By -; Default + that one will always be attempted before the more traditional -; PASV command. -#CURLOPT_FTP_USE_EPSV= #CURLOPTTYPE_LONG + 85 -; type of the file keeping your SSL-certificate ("DER" + "PEM" + "ENG") -#CURLOPT_SSLCERTTYPE= #CURLOPTTYPE_OBJECTPOINT + 86 -; name of the file keeping your private SSL-key -#CURLOPT_SSLKEY= #CURLOPTTYPE_OBJECTPOINT + 87 -; type of the file keeping your private SSL-key ("DER" + "PEM" + "ENG") -#CURLOPT_SSLKEYTYPE= #CURLOPTTYPE_OBJECTPOINT + 88 -; crypto engine For the SSL-sub system -#CURLOPT_SSLENGINE= #CURLOPTTYPE_OBJECTPOINT + 89 -; set the crypto engine For the SSL-sub system As Default -; the param has no meaning... -#CURLOPT_SSLENGINE_DEFAULT= #CURLOPTTYPE_LONG + 90 -; Non-zero value means To use the Global dns cache -#CURLOPT_DNS_USE_GLOBAL_CACHE= #CURLOPTTYPE_LONG + 91 ; To become OBSOLETE soon - ; DNS cache timeout -#CURLOPT_DNS_CACHE_TIMEOUT= #CURLOPTTYPE_LONG + 92 -; send linked-list of pre-transfer QUOTE commands (Wesley Laxton) -#CURLOPT_PREQUOTE= #CURLOPTTYPE_OBJECTPOINT + 93 -; set the Debug function -#CURLOPT_DEBUGFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 94 -; set the Data For the Debug function -#CURLOPT_DEBUGDATA= #CURLOPTTYPE_OBJECTPOINT + 95 -; mark this As start of a cookie session -#CURLOPT_COOKIESESSION= #CURLOPTTYPE_LONG + 96 -; The CApath directory used To validate the peer certificate -; this option is used only If SSL_VERIFYPEER is true -#CURLOPT_CAPATH= #CURLOPTTYPE_OBJECTPOINT + 97 -; Instruct libcurl To use a smaller receive buffer -#CURLOPT_BUFFERSIZE= #CURLOPTTYPE_LONG + 98 -; Instruct libcurl To Not use any signal/alarm handlers + even when using -; timeouts. This option is useful For multi-threaded applications. -; See libcurl-the-guide For more background information. -#CURLOPT_NOSIGNAL= #CURLOPTTYPE_LONG + 99 -; Provide a CURLShare For mutexing non-ts Data -#CURLOPT_SHARE= #CURLOPTTYPE_OBJECTPOINT + 100 -; indicates type of proxy. accepted values are CURLPROXY_HTTP (Default -; CURLPROXY_SOCKS4 And CURLPROXY_SOCKS5. -#CURLOPT_PROXYTYPE= #CURLOPTTYPE_LONG + 101 -; Set the Accept-Encoding string. Use this To tell a server you would like -; the response To be compressed. -#CURLOPT_ENCODING= #CURLOPTTYPE_OBJECTPOINT + 102 -; Set pointer To private Data -#CURLOPT_PRIVATE= #CURLOPTTYPE_OBJECTPOINT + 103 -; Set aliases For HTTP 200 in the HTTP Response header -#CURLOPT_HTTP200ALIASES= #CURLOPTTYPE_OBJECTPOINT + 104 -; Continue To send authentication (user+password) when following locations, -; even when hostname changed. This can potentionally send off the name -; And password To whatever host the server decides. -#CURLOPT_UNRESTRICTED_AUTH= #CURLOPTTYPE_LONG + 105 -; Specificly switch on Or off the FTP engine's use of the EPRT command ( it -; also disables the LPRT attempt). By Default + those ones will always be -; attempted before the good old traditional PORT command. -#CURLOPT_FTP_USE_EPRT= #CURLOPTTYPE_LONG + 106 -; Set this To a bitmask value To enable the particular authentications -; methods you like. Use this in combination With CURLOPT_USERPWD. -; Note that setting multiple bits may cause extra network round-trips. -#CURLOPT_HTTPAUTH= #CURLOPTTYPE_LONG + 107 -; Set the ssl context callback function + currently only For OpenSSL ssl_ctx -; in second argument. The function must be matching the -; curl_ssl_ctx_callback proto. -#CURLOPT_SSL_CTX_FUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 108 -; Set the userdata For the ssl context callback function's third -; argument -#CURLOPT_SSL_CTX_DATA= #CURLOPTTYPE_OBJECTPOINT + 109 -; FTP Option that causes missing dirs To be created on the remote server -#CURLOPT_FTP_CREATE_MISSING_DIRS= #CURLOPTTYPE_LONG + 110 -; Set this To a bitmask value To enable the particular authentications -; methods you like. Use this in combination With CURLOPT_PROXYUSERPWD. -; Note that setting multiple bits may cause extra network round-trips. -#CURLOPT_PROXYAUTH= #CURLOPTTYPE_LONG + 111 -; FTP option that changes the timeout + in seconds + associated With -; getting a response. This is different from transfer timeout time And -; essentially places a demand on the FTP server To acknowledge commands -; in a timely manner. -#CURLOPT_FTP_RESPONSE_TIMEOUT= #CURLOPTTYPE_LONG + 112 -; Set this option To one of the CURL_IPRESOLVE_* defines (see below) To -; tell libcurl To resolve names To those IP versions only. This only has -; affect on systems With support For more than one + i.e IPv4 _and_ IPv6. -#CURLOPT_IPRESOLVE= #CURLOPTTYPE_LONG + 113 -; Set this option To limit the size of a file that will be downloaded from -; an HTTP Or FTP server. -; Note there is also _LARGE version which adds large file support For -; platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. -#CURLOPT_MAXFILESIZE= #CURLOPTTYPE_LONG + 114 -; See the comment For INFILESIZE above + but in short + specifies -; the size of the file being uploaded. -1 means unknown. -#CURLOPT_INFILESIZE_LARGE= #CURLOPTTYPE_OFF_T + 115 -; Sets the continuation offset. There is also a LONG version of this; -; look above For RESUME_FROM. -#CURLOPT_RESUME_FROM_LARGE= #CURLOPTTYPE_OFF_T + 116 -; Sets the maximum size of Data that will be downloaded from -; an HTTP Or FTP server. See MAXFILESIZE above For the LONG version. -#CURLOPT_MAXFILESIZE_LARGE= #CURLOPTTYPE_OFF_T + 117 -; Set this option To the file name of your .netrc file you want libcurl -; To parse (using the CURLOPT_NETRC option). If Not set= #CURLOPTTYPE_Libcurl will do -; a poor attempt To find the user's home directory and check for a .netrc -; file in there. -#CURLOPT_NETRC_FILE= #CURLOPTTYPE_OBJECTPOINT + 118 -; Enable SSL/TLS For FTP + pick one of: -; CURLFTPSSL_TRY - try using SSL + proceed anyway otherwise -; CURLFTPSSL_CONTROL - SSL For the control connection Or fail -; CURLFTPSSL_ALL - SSL For all communication Or fail -#CURLOPT_USE_SSL= #CURLOPTTYPE_LONG + 119 -; The _LARGE version of the standard POSTFIELDSIZE option -#CURLOPT_POSTFIELDSIZE_LARGE= #CURLOPTTYPE_OFF_T + 120 -; Enable/disable the TCP Nagle algorithm -#CURLOPT_TCP_NODELAY= #CURLOPTTYPE_LONG + 121 -; 122 OBSOLETE + used in 7.12.3. Gone in 7.13.0 -; 123 OBSOLETE. Gone in 7.16.0 -; 124 OBSOLETE + used in 7.12.3. Gone in 7.13.0 -; 125 OBSOLETE + used in 7.12.3. Gone in 7.13.0 -; 126 OBSOLETE + used in 7.12.3. Gone in 7.13.0 -; 127 OBSOLETE. Gone in 7.16.0 -; 128 OBSOLETE. Gone in 7.16.0 -; When FTP over SSL/TLS is selected (With CURLOPT_USE_SSL this option -; can be used To change libcurl's default action which is to first try -; "AUTH SSL" And then "AUTH TLS" in this order + And proceed when a OK -; response has been received. -; Available parameters are: -; CURLFTPAUTH_DEFAULT - let libcurl decide -; CURLFTPAUTH_SSL - try "AUTH SSL" first + then TLS -; CURLFTPAUTH_TLS - try "AUTH TLS" first + then SSL -#CURLOPT_FTPSSLAUTH= #CURLOPTTYPE_LONG + 129 -#CURLOPT_IOCTLFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 130 -#CURLOPT_IOCTLDATA= #CURLOPTTYPE_OBJECTPOINT + 131 -; 132 OBSOLETE. Gone in 7.16.0 -; 133 OBSOLETE. Gone in 7.16.0 -; zero terminated string For pass on To the FTP server when asked For -; "account" info -#CURLOPT_FTP_ACCOUNT= #CURLOPTTYPE_OBJECTPOINT + 134 -; feed cookies into cookie engine -#CURLOPT_COOKIELIST= #CURLOPTTYPE_OBJECTPOINT + 135 -; ignore Content-Length -#CURLOPT_IGNORE_CONTENT_LENGTH= #CURLOPTTYPE_LONG + 136 -; Set To non-zero To skip the IP address received in a 227 PASV FTP server -; response. Typically used For FTP-SSL purposes but is Not restricted To -; that. libcurl will then instead use the same IP address it used For the -; control connection. -#CURLOPT_FTP_SKIP_PASV_IP= #CURLOPTTYPE_LONG + 137 -; Select "file method" To use when doing FTP + see the curl_ftpmethod -; above. -#CURLOPT_FTP_FILEMETHOD= #CURLOPTTYPE_LONG + 138 -; Local port number To bind the socket To -#CURLOPT_LOCALPORT= #CURLOPTTYPE_LONG + 139 -; Number of ports To try + including the first one set With LOCALPORT. -; Thus + setting it To 1 will make no additional attempts but the first. -#CURLOPT_LOCALPORTRANGE= #CURLOPTTYPE_LONG + 140 -; no transfer + set up connection And let application use the socket by -; extracting it With CURLINFO_LASTSOCKET -#CURLOPT_CONNECT_ONLY= #CURLOPTTYPE_LONG + 141 -; Function that will be called To convert from the -; network encoding (instead of using the iconv calls in libcurl) -#CURLOPT_CONV_FROM_NETWORK_FUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 142 -; Function that will be called To convert To the -; network encoding (instead of using the iconv calls in libcurl) -#CURLOPT_CONV_TO_NETWORK_FUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 143 -; Function that will be called To convert from UTF8 -; (instead of using the iconv calls in libcurl) -; Note that this is used only For SSL certificate processing -#CURLOPT_CONV_FROM_UTF8_FUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 144 -; If the connection proceeds too quickly then need To slow it down -; limit-rate: maximum number of bytes per second To send Or receive -#CURLOPT_MAX_SEND_SPEED_LARGE= #CURLOPTTYPE_OFF_T + 145 -#CURLOPT_MAX_RECV_SPEED_LARGE= #CURLOPTTYPE_OFF_T + 146 -; Pointer To command string To send If USER/PASS fails. -#CURLOPT_FTP_ALTERNATIVE_TO_USER= #CURLOPTTYPE_OBJECTPOINT + 147 -; callback function For setting socket options -#CURLOPT_SOCKOPTFUNCTION= #CURLOPTTYPE_FUNCTIONPOINT + 148 -#CURLOPT_SOCKOPTDATA= #CURLOPTTYPE_OBJECTPOINT + 149 -; set To 0 To disable session ID re-use For this transfer + Default is -; enabled (== 1) -#CURLOPT_SSL_SESSIONID_CACHE= #CURLOPTTYPE_LONG + 150 -; allowed SSH authentication methods -#CURLOPT_SSH_AUTH_TYPES= #CURLOPTTYPE_LONG + 151 -; Used by scp/sftp To do public/private key authentication -#CURLOPT_SSH_PUBLIC_KEYFILE= #CURLOPTTYPE_OBJECTPOINT + 152 -#CURLOPT_SSH_PRIVATE_KEYFILE= #CURLOPTTYPE_OBJECTPOINT + 153 -; Send CCC (Clear Command Channel) after authentication -#CURLOPT_FTP_SSL_CCC= #CURLOPTTYPE_LONG + 154 -; Same As TIMEOUT And CONNECTTIMEOUT + but With ms resolution -#CURLOPT_TIMEOUT_MS= #CURLOPTTYPE_LONG + 155 -#CURLOPT_CONNECTTIMEOUT_MS= #CURLOPTTYPE_LONG + 156 -; set To zero To disable the libcurl's decoding and thus pass the raw body -; Data To the appliction even when it is encoded/compressed -#CURLOPT_HTTP_TRANSFER_DECODING= #CURLOPTTYPE_LONG + 157 -#CURLOPT_HTTP_CONTENT_DECODING= #CURLOPTTYPE_LONG + 158 -; Permission used when creating new files And directories on the remote -; server For protocols that support it + SFTP/SCP/FILE -#CURLOPT_NEW_FILE_PERMS= #CURLOPTTYPE_LONG + 159 -#CURLOPT_NEW_DIRECTORY_PERMS= #CURLOPTTYPE_LONG + 160 -; CURLOPT_LASTENTRY ; the last unused -#CURLOPT_FTPLISTONLY = #CURLOPT_DIRLISTONLY -;} -;{ #HTTPPOST -#HTTPPOST_FILENAME = 1<<0 ; specified content is a file name -#HTTPPOST_READFILE = 1<<1 ; specified content is a file name -#HTTPPOST_PTRNAME = 1<<2 ; name is only stored pointer - ; do Not free in formfree -#HTTPPOST_PTRCONTENTS = 1<<3 ; contents is only stored pointer - ; do Not free in formfree -#HTTPPOST_BUFFER = 1<<4 ; upload file from buffer -#HTTPPOST_PTRBUFFER = 1<<5 ; upload file from pointer contents - ;} - -; #CURLE_OBSOLETE = #CURLE_OBSOLETE50 ; noone should be using this! -; #CURLE_BAD_PASSWORD_ENTERED = #CURLE_OBSOLETE46 -; #CURLE_BAD_CALLING_ORDER = #CURLE_OBSOLETE44 -; #CURLE_FTP_USER_PASSWORD_INCORRECT = #CURLE_OBSOLETE10 -; #CURLE_FTP_CANT_RECONNECT = #CURLE_OBSOLETE16 -; #CURLE_FTP_COULDNT_GET_SIZE = #CURLE_OBSOLETE32 -; #CURLE_FTP_COULDNT_SET_ASCII = #CURLE_OBSOLETE29 -; #CURLE_FTP_WEIRD_USER_REPLY = #CURLE_OBSOLETE12 -; #CURLE_FTP_WRITE_ERROR = #CURLE_OBSOLETE20 -; #CURLE_LIBRARY_NOT_FOUND = #CURLE_OBSOLETE40 -; #CURLE_MALFORMAT_USER = #CURLE_OBSOLETE24 -; #CURLE_SHARE_IN_USE = #CURLE_OBSOLETE57 -; #CURLE_URL_MALFORMAT_USER = #CURLE_OBSOLETE4 - -; #CURLE_FTP_ACCESS_DENIED = #CURLE_REMOTE_ACCESS_DENIED -; #CURLE_FTP_COULDNT_SET_BINARY = #CURLE_FTP_COULDNT_SET_TYPE -; #CURLE_FTP_QUOTE_ERROR = #CURLE_QUOTE_ERROR -; #CURLE_TFTP_DISKFULL = #CURLE_REMOTE_DISK_FULL -; #CURLE_TFTP_EXISTS = #CURLE_REMOTE_FILE_EXISTS -; #CURLE_HTTP_RANGE_ERROR = #CURLE_RANGE_ERROR -; #CURLE_FTP_SSL_FAILED = #CURLE_USE_SSL_FAILED - -; #CURLE_OPERATION_TIMEOUTED = #CURLE_OPERATION_TIMEDOUT - -#CURLE_HTTP_NOT_FOUND = #CURLE_HTTP_RETURNED_ERROR -#CURLE_HTTP_PORT_FAILED = #CURLE_INTERFACE_FAILED -; #CURLE_FTP_COULDNT_STOR_FILE = #CURLE_UPLOAD_FAILED - -#CURLE_FTP_PARTIAL_FILE = #CURLE_PARTIAL_FILE -#CURLE_FTP_BAD_DOWNLOAD_RESUME = #CURLE_BAD_DOWNLOAD_RESUME - -#CURLE_ALREADY_COMPLETE = 99999 - -#CURLAUTH_NONE = 0 ; nothing -#CURLAUTH_BASIC = 1<<0 ; Basic (Default) -#CURLAUTH_DIGEST = 1<<1 ; Digest -#CURLAUTH_GSSNEGOTIATE = 1<<2 ; GSS-Negotiate -#CURLAUTH_NTLM = 1<<3 ; NTLM -#CURLAUTH_ANY = ~0 ; all types set -#CURLAUTH_ANYSAFE = ~#CURLAUTH_BASIC - -#CURLSSH_AUTH_ANY = ~0 ; all types supported by the server -#CURLSSH_AUTH_NONE = 0 ; none allowed, silly but complete -#CURLSSH_AUTH_PUBLICKEY = 1<<0 ; public/private key files -#CURLSSH_AUTH_PASSWORD = 1<<1 ; password -#CURLSSH_AUTH_HOST = 1<<2 ; host key files -#CURLSSH_AUTH_KEYBOARD = 1<<3 ; keyboard interactive -#CURLSSH_AUTH_DEFAULT = #CURLSSH_AUTH_ANY - -#CURL_ERROR_SIZE = 256 - - -#CURLFTPSSL_NONE = #CURLUSESSL_NONE -#CURLFTPSSL_TRY = #CURLUSESSL_TRY -#CURLFTPSSL_CONTROL = #CURLUSESSL_CONTROL -#CURLFTPSSL_ALL = #CURLUSESSL_ALL -#CURLFTPSSL_LAST = #CURLUSESSL_LAST - -#CURLOPT_SSLKEYPASSWD = #CURLOPT_KEYPASSWD -#CURLOPT_FTPAPPEND = #CURLOPT_APPEND -#CURLOPT_FTPLISTONLY = #CURLOPT_DIRLISTONLY -#CURLOPT_FTP_SSL = #CURLOPT_USE_SSL - -#CURLOPT_SSLCERTPASSWD = #CURLOPT_KEYPASSWD -#CURLOPT_KRB4LEVEL = #CURLOPT_KRBLEVEL -; Below here follows defines for the CURLOPT_IPRESOLVE option. If a host -; name resolves addresses using more than one IP protocol version, this -; option might be handy to force libcurl to use a specific IP version. -#CURL_IPRESOLVE_WHATEVER = 0 ; Default, resolves addresses To all IP versions that your system allows -#CURL_IPRESOLVE_V4 = 1 ; resolve To ipv4 addresses -#CURL_IPRESOLVE_V6 = 2 ; resolve To ipv6 addresses - -; three convenient "aliases" that follow the name scheme better -#CURLOPT_WRITEDATA = #CURLOPT_FILE -#CURLOPT_READDATA = #CURLOPT_INFILE -#CURLOPT_HEADERDATA = #CURLOPT_WRITEHEADER -; CURLINFO_RESPONSE_CODE is the new name For the option previously known As -; CURLINFO_HTTP_CODE -#CURLINFO_HTTP_CODE = #CURLINFO_RESPONSE_CODE - -#CURL_GLOBAL_SSL = 1<<0 -#CURL_GLOBAL_WIN32 = 1<<1 -#CURL_GLOBAL_ALL = #CURL_GLOBAL_SSL|#CURL_GLOBAL_WIN32 -#CURL_GLOBAL_NOTHING= 0 -#CURL_GLOBAL_DEFAULT= #CURL_GLOBAL_ALL -;The 'CURLVERSION_NOW' is the symbolic name meant To be used by -; basicly all programs ever, that want To get version information. It is -; meant To be a built-in version number For what kind of struct the caller -; expects. If the struct ever changes, we rethe NOW To another enum -; from above. -#CURLVERSION_NOW = #CURLVERSION_FOURTH - -#CURL_VERSION_IPV6 = 1<<0 ;IPv6-enabled -#CURL_VERSION_KERBEROS4 = 1<<1 ;kerberos auth is supported -#CURL_VERSION_SSL = 1<<2 ;SSL options are present -#CURL_VERSION_LIBZ = 1<<3 ;libz features are present -#CURL_VERSION_NTLM = 1<<4 ;NTLM auth is supported -#CURL_VERSION_GSSNEGOTIATE = 1<<5; Negotiate auth support -#CURL_VERSION_DEBUG = 1<<6 ;built With Debug capabilities -#CURL_VERSION_ASYNCHDNS = 1<<7 ;asynchronous dns resolves -#CURL_VERSION_SPNEGO = 1<<8 ;SPNEGO auth -#CURL_VERSION_LARGEFILE = 1<<9 ;supports files bigger than 2GB -#CURL_VERSION_IDN = 1<<10 ;International Domain Names support -#CURL_VERSION_SSPI = 1<<11 ;SSPI is supported -#CURL_VERSION_CONV = 1<<12 ;character conversions are supported - -Structure Curl_HTTPPost - *Next_.Curl_HTTPPost ; Next entry in the list - *name.String ; Ptr to allocated name - namelength.l ; Length of name length - *contents.String ; Ptr to allocated data contents - contentslength.l ; Length of contents field - *buffer.String ; Ptr to allocated buffer contents - bufferlength.l ; Length of buffer field - *contenttype.String ; Content-Type - *contentheader ; List of extra headers for this form - *more.Curl_HTTPPost ; If one field name has more than one - ; file, this link should link To following files - flags.l ; constante #HTTPPOST - *showfilename ; The file name to show. If not set, the - ; actual file name will be used (If this - ; is a file part) -EndStructure - -; Structure To be used As parameter For CURLFORM_ARRAY -Structure Curl_Forms - option.l - *value.String -EndStructure - -; linked-list Structure For the CURLOPT_QUOTE option (And other) -Structure Curl_Slist - *Data.String - *Next_.curl_slist -EndStructure - -Structure curl_version_info_data - age.l ; age of the returned struct - *version.String ; LIBCURL_VERSION - version_num.l ; LIBCURL_VERSION_NUM - *host.String ; OS/host/cpu/machine when configured - features.l ; bitmask, see defines below - *ssl_version.String ; human readable string - ssl_version_num.l ; not used anymore, always 0 - *libz_version.String; human readable string - ; protocols is terminated by an entry With a NULL protoname - *protocols.String - ; The fields below this were added in CURLVERSION_SECOND - *ares.String - ares_num.l - ; This field was added in CURLVERSION_THIRD - *libidn.String; - ; These field were added in CURLVERSION_FOURTH - ; Same As '_libiconv_version' If built With HAVE_ICONV - iconv_ver_num.l - *libssh_version.String ; human readable string -EndStructure - -CompilerIf #PB_Compiler_OS = #PB_OS_Windows - ImportC "libcurl.lib" - curl_easy_cleanup(handle.i) - curl_easy_duphandle(handle.i) - curl_easy_getinfo(curl.i, info_type.i, info.i) - curl_easy_init() - curl_easy_perform(handle.i) - curl_easy_reset(handle.i) - curl_easy_setopt(handle.i, option.i, parameter.i) - curl_easy_strerror(errornum.i) - curl_escape(url.i, length.i) - curl_formadd(firstitem.i, lastitem.i) - curl_formfree(form.i) - curl_free(ptr.i) - curl_getdate(datestring.i, now.i) - curl_getenv(name.i) - curl_global_cleanup() - curl_global_init(flags.i) - curl_global_init_mem(flags.i, m.i, f.i, r.i, s.i, c.i) - curl_mprintf(format.i) - curl_mfprintf(fd.i, format.i) - curl_msprintf(buffer.i, format.i) - curl_msnprintf(buffer.i, maxlength.i, format.i) - curl_mvprintf(format.i, args.i) - curl_mvfprintf(fd.i, format.i, args.i) - curl_mvsprintf(buffer.i, format.i, args.i) - curl_mvsnprintf(buffer.i, maxlength.i, format.i, args.i) - curl_maprintf(format.i) - curl_mvaprintf(format.i, args.i) - curl_multi_add_handle(multi_handle.i, easy_handle.i) - curl_multi_cleanup(multi_handle.i) - curl_multi_fdset(multi_handle.i, read_fd_set.i, write_fd_set.i, exc_fd_set.i, max_fd.i) - curl_multi_info_read(multi_handle.i, msgs_in_queue.i) - curl_multi_init() - curl_multi_perform(multi_handle.i, running_handles.i) - curl_multi_remove_handle(multi_handle.i, easy_handle.i) - curl_multi_strerror(errornum.i) - curl_share_cleanup(share_handle.i) - curl_share_init() - curl_share_setopt(share.i, option.i, parameter.i) - curl_share_strerror(errornum.i) - curl_slist_append(slist.i, string.p-utf8) - curl_slist_free_all(slist.i) - curl_strequal(str1.i, str2.i) - curl_strnequal(str1.i, str2.i, len.i) - curl_unescape(url.i, length.i) - curl_version() - curl_version_info(type.i) - EndImport -CompilerElse - ImportC "-lcurl" - curl_easy_cleanup(handle.i) - curl_easy_duphandle(handle.i) - curl_easy_getinfo(curl.i, info_type.i, info.i) - curl_easy_init() - curl_easy_perform(handle.i) - curl_easy_reset(handle.i) - curl_easy_setopt(handle.i, option.i, parameter.i) - curl_easy_strerror(errornum.i) - curl_escape(url.i, length.i) - curl_formadd(firstitem.i, lastitem.i) - curl_formfree(form.i) - curl_free(ptr.i) - curl_getdate(datestring.i, now.i) - curl_getenv(name.i) - curl_global_cleanup() - curl_global_init(flags.i) - curl_global_init_mem(flags.i, m.i, f.i, r.i, s.i, c.i) - curl_mprintf(format.i) - curl_mfprintf(fd.i, format.i) - curl_msprintf(buffer.i, format.i) - curl_msnprintf(buffer.i, maxlength.i, format.i) - curl_mvprintf(format.i, args.i) - curl_mvfprintf(fd.i, format.i, args.i) - curl_mvsprintf(buffer.i, format.i, args.i) - curl_mvsnprintf(buffer.i, maxlength.i, format.i, args.i) - curl_maprintf(format.i) - curl_mvaprintf(format.i, args.i) - curl_multi_add_handle(multi_handle.i, easy_handle.i) - curl_multi_cleanup(multi_handle.i) - curl_multi_fdset(multi_handle.i, read_fd_set.i, write_fd_set.i, exc_fd_set.i, max_fd.i) - curl_multi_info_read(multi_handle.i, msgs_in_queue.i) - curl_multi_init() - curl_multi_perform(multi_handle.i, running_handles.i) - curl_multi_remove_handle(multi_handle.i, easy_handle.i) - curl_multi_strerror(errornum.i) - curl_share_cleanup(share_handle.i) - curl_share_init() - curl_share_setopt(share.i, option.i, parameter.i) - curl_share_strerror(errornum.i) - curl_slist_append(slist.i, string.p-utf8) - curl_slist_free_all(slist.i) - curl_strequal(str1.i, str2.i) - curl_strnequal(str1.i, str2.i, len.i) - curl_unescape(url.i, length.i) - curl_version() - curl_version_info(type.i) - EndImport -CompilerEndIf - -CompilerIf #PB_Compiler_OS = #PB_OS_Windows - ImportC "ws2_32.lib" - EndImport -CompilerEndIf - -; ProcedureC curlWriteData(*ptr, Size, NMemB, *Stream) -; ;retreives utf-8/ascii encoded data -; Protected SizeProper.i = Size & 255 -; Protected NMemBProper.i = NMemB -; Protected MyDataS.s -; ;Shared ReceivedData.s -; -; MyDataS = PeekS(*ptr, SizeProper * NMemBProper, #PB_UTF8) -; ReceivedData + MyDataS -; ProcedureReturn SizeProper * NMemBProper -; EndProcedure - -; Procedure.s curlGetData() -; ;Shared ReceivedData.s -; Protected ReturnData.s -; -; ReturnData.s = ReceivedData.s -; ReceivedData.s = "" -; -; ProcedureReturn ReturnData.s -; EndProcedure - -Procedure.s str2curl(string.s) - Protected *curlstring, newstring.s - *curlstring = AllocateMemory(Len(string) + 1) - If *curlstring - PokeS(*curlstring,string,-1,#PB_Ascii) - newstring = PeekS(*curlstring,-1) - FreeMemory(*curlstring) - ProcedureReturn newstring - Else - ProcedureReturn "" - EndIf -EndProcedure - - -; IDE Options = PureBasic 5.42 LTS (Windows - x86) -; CursorPosition = 1063 -; FirstLine = 1006 -; Folding = -- -; EnableUnicode -; EnableXP \ No newline at end of file