diff --git a/components/lazmapviewer/examples/fulldemo/configframe.lfm b/components/lazmapviewer/examples/fulldemo/configframe.lfm new file mode 100644 index 000000000..4b7a66bfc --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/configframe.lfm @@ -0,0 +1,547 @@ +object CfgFrame: TCfgFrame + Left = 0 + Height = 682 + Top = 0 + Width = 287 + ClientHeight = 682 + ClientWidth = 287 + TabOrder = 0 + DesignLeft = 1150 + DesignTop = 210 + object LblProviders: TLabel + AnchorSideLeft.Control = cmbProviders + AnchorSideTop.Control = Owner + Left = 4 + Height = 15 + Top = 8 + Width = 52 + BorderSpacing.Top = 8 + Caption = 'Providers:' + FocusControl = cmbProviders + ParentColor = False + end + object cmbProviders: TComboBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = LblProviders + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = btnLoadMapProviders + Left = 4 + Height = 23 + Top = 25 + Width = 213 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 4 + BorderSpacing.Top = 2 + BorderSpacing.Right = 2 + DropDownCount = 24 + ItemHeight = 15 + Style = csDropDownList + TabOrder = 0 + OnChange = cmbProvidersChange + end + object btnLoadMapProviders: TSpeedButton + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cmbProviders + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = btnSaveMapProviders + Left = 219 + Height = 28 + Top = 22 + Width = 30 + Anchors = [akTop, akRight] + BorderSpacing.Right = 2 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000003591 + DBFA439FDDFA439FDDFA429FDDFA429EDDFA419EDCFA419EDCFA419EDCFA419E + DCFA419EDCFA419EDCFA419EDCFA3792DAFB3080DF100000000000000000429C + DEF76EC7EBFF6DC7EAFF6BC6EAFF6AC5E9FF68C4E9FF67C3E8FF65C2E8FF64C1 + E7FF63C0E7FF61BFE6FF60BEE5FF51AFE3FE308CD6450000000000000000409A + DDF47CD0F1FF7BD0F0FF7ACFEFFF79CEEFFF77CDEEFF76CCEEFF74CBEDFF73CA + EDFF71C9ECFF70C8ECFF6EC7EBFF6AC3E9FF3993DB8E00000000000000003E99 + DCEC7ECEF1FF8AD9F6FF89D8F5FF87D7F4FF86D6F4FF84D5F3FF83D5F3FF81D4 + F2FF80D3F2FF7ED2F1FF7DD1F1FF7BD0F0FF439ADEB40000000000000000409B + DDE470C1EDFF99E2FBFF97E2FBFF96E1FAFF94E0F9FF93DFF9FF91DEF8FF90DD + F8FF8EDCF7FF8DDBF7FF8CDAF6FF8AD9F6FF4EA4E2CD00000000000000004AA5 + E0DF61B3E8FFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA2E8FEFFA0E7FEFF9FE6 + FDFF9DE5FDFF9CE4FCFF9AE3FCFF99E2FBFF5FB3E9E33080DF100000000051A8 + E2DF5EB2E8FFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9 + FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFF84CFF5FB348CDA450000000058AD + E5DF60B3E8FF61B3E9FF61B3E9FF60B2E9FF60B2E8FF60B2E8FF5FB1E8FF5FB1 + E8FF5EB1E8FF5EB1E8FF5EB1E7FF59ADE7FB55A9E5E33B94DC85000000005FB0 + E8DF9DE4FBFF9AE3FAFF97E1F9FF94DFF8FF91DDF7FF8EDBF5FF8BD9F4FF88D8 + F3FF85D6F2FF82D4F1FF7FD2F0FF4FA7E1DF00000000000000000000000061B1 + E8DFA6EAFFFFA6EAFFFFA6EAFFFFA3E8FEFF7AC6F1ED59ACE6DF58AAE5DF57AA + E5DF56AAE5DF53A9E4DF53A8E4DF3C94DCE20000000000000000000000004096 + DEE25DAEE7DF5DAEE7DF5DAEE7DF57A9E6DF4399DF6E00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000 + } + OnClick = btnLoadMapProvidersClick + end + object btnSaveMapProviders: TSpeedButton + AnchorSideLeft.Control = btnLoadMapProviders + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cmbProviders + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 251 + Height = 28 + Top = 22 + Width = 32 + Anchors = [akTop, akRight] + BorderSpacing.Right = 4 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000A4653455A465 + 34FFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD + BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 + 34FFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 + 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 + 34FFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE + EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FF5959 + F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959 + F3FF5959F3FF5959F3FF5959F3FF5959F3FFA46534FF00000000A46534FF5959 + F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959 + F3FF5959F3FF5959F3FF5959F3FF5959F3FFA46534FF00000000 + } + OnClick = btnSaveMapProvidersClick + end + object gbProxy: TGroupBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = cmbProviders + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 4 + Height = 185 + Top = 56 + Width = 279 + Anchors = [akTop, akLeft, akRight] + AutoSize = True + BorderSpacing.Top = 4 + BorderSpacing.Around = 4 + Caption = 'Proxy' + ClientHeight = 165 + ClientWidth = 275 + TabOrder = 1 + object lblProxyHost: TLabel + AnchorSideLeft.Control = rbNoProxy + AnchorSideTop.Control = edProxyHost + AnchorSideTop.Side = asrCenter + Left = 20 + Height = 15 + Top = 65 + Width = 28 + BorderSpacing.Left = 10 + Caption = 'Host:' + ParentColor = False + end + object edProxyHost: TEdit + AnchorSideLeft.Control = edProxyUserName + AnchorSideTop.Control = rbProxyData + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = gbProxy + AnchorSideRight.Side = asrBottom + Left = 85 + Height = 23 + Top = 61 + Width = 184 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Right = 6 + TabOrder = 3 + end + object lblProxyPort: TLabel + AnchorSideLeft.Control = lblProxyHost + AnchorSideTop.Control = seProxyPort + AnchorSideTop.Side = asrCenter + Left = 20 + Height = 15 + Top = 90 + Width = 22 + Caption = 'Port' + ParentColor = False + end + object seProxyPort: TSpinEdit + AnchorSideLeft.Control = lblProxyUserName + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = edProxyHost + AnchorSideTop.Side = asrBottom + Left = 85 + Height = 23 + Top = 86 + Width = 70 + BorderSpacing.Top = 2 + MaxValue = 65535 + TabOrder = 4 + end + object lblProxyUserName: TLabel + AnchorSideLeft.Control = lblProxyHost + AnchorSideTop.Control = edProxyUserName + AnchorSideTop.Side = asrCenter + Left = 20 + Height = 15 + Top = 115 + Width = 59 + BorderSpacing.Right = 6 + Caption = 'User name:' + ParentColor = False + end + object edProxyUserName: TEdit + AnchorSideLeft.Control = lblProxyUserName + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = seProxyPort + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = gbProxy + AnchorSideRight.Side = asrBottom + Left = 85 + Height = 23 + Top = 111 + Width = 184 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 2 + BorderSpacing.Right = 6 + TabOrder = 5 + end + object lblProxyPassword: TLabel + AnchorSideLeft.Control = lblProxyHost + AnchorSideTop.Control = edProxyPassword + AnchorSideTop.Side = asrCenter + Left = 20 + Height = 15 + Top = 140 + Width = 50 + Caption = 'Password' + ParentColor = False + end + object edProxyPassword: TEdit + AnchorSideLeft.Control = edProxyUserName + AnchorSideTop.Control = edProxyUserName + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = gbProxy + AnchorSideRight.Side = asrBottom + Left = 85 + Height = 23 + Top = 136 + Width = 184 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 2 + BorderSpacing.Right = 6 + BorderSpacing.Bottom = 6 + TabOrder = 6 + end + object rbProxyData: TRadioButton + AnchorSideLeft.Control = rbNoProxy + AnchorSideTop.Control = rbSystemProxy + AnchorSideTop.Side = asrBottom + Left = 10 + Height = 19 + Top = 42 + Width = 74 + BorderSpacing.Top = 2 + Caption = 'Proxy data' + TabOrder = 2 + OnChange = rbProxyDataChange + end + object rbNoProxy: TRadioButton + AnchorSideLeft.Control = gbProxy + AnchorSideTop.Control = gbProxy + Left = 10 + Height = 19 + Top = 0 + Width = 67 + BorderSpacing.Left = 10 + Caption = 'No proxy' + TabOrder = 0 + OnChange = rbNoProxyChange + end + object rbSystemProxy: TRadioButton + AnchorSideLeft.Control = rbNoProxy + AnchorSideTop.Control = rbNoProxy + AnchorSideTop.Side = asrBottom + Left = 10 + Height = 19 + Top = 21 + Width = 110 + BorderSpacing.Top = 2 + Caption = 'Use system proxy' + Checked = True + TabOrder = 1 + TabStop = True + OnChange = rbSystemProxyChange + end + end + object cbZoomToCursor: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = gbProxy + AnchorSideTop.Side = asrBottom + Left = 4 + Height = 19 + Top = 249 + Width = 100 + BorderSpacing.Left = 4 + BorderSpacing.Top = 8 + BorderSpacing.Right = 16 + Caption = 'Zoom to cursor' + Checked = True + State = cbChecked + TabOrder = 2 + OnChange = cbZoomToCursorChange + end + object cbUseThreads: TCheckBox + AnchorSideLeft.Control = cbZoomToCursor + AnchorSideTop.Control = cbZoomToCursor + AnchorSideTop.Side = asrBottom + Left = 4 + Height = 19 + Top = 272 + Width = 79 + BorderSpacing.Top = 4 + Caption = 'Use threads' + Checked = True + State = cbChecked + TabOrder = 3 + OnChange = cbUseThreadsChange + end + object cbDoubleBuffer: TCheckBox + AnchorSideLeft.Control = cbUseThreads + AnchorSideTop.Control = cbUseThreads + AnchorSideTop.Side = asrBottom + Left = 4 + Height = 19 + Top = 295 + Width = 85 + BorderSpacing.Top = 4 + BorderSpacing.Right = 6 + Caption = 'DblBuffering' + Checked = True + State = cbChecked + TabOrder = 4 + OnChange = cbDoubleBufferChange + end + object cbDebugTiles: TCheckBox + AnchorSideLeft.Control = cbDoubleBuffer + AnchorSideTop.Control = cbDoubleBuffer + AnchorSideTop.Side = asrBottom + Left = 4 + Height = 19 + Top = 318 + Width = 77 + BorderSpacing.Top = 4 + Caption = 'Debug tiles' + TabOrder = 5 + OnChange = cbDebugTilesChange + end + object cbCyclicView: TCheckBox + AnchorSideLeft.Control = cbZoomToCursor + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbZoomToCursor + Left = 120 + Height = 19 + Top = 249 + Width = 77 + Caption = 'Cyclic view' + Checked = True + State = cbChecked + TabOrder = 6 + OnChange = cbCyclicViewChange + end + object cbPreviewTiles: TCheckBox + AnchorSideLeft.Control = cbCyclicView + AnchorSideTop.Control = cbUseThreads + Left = 120 + Height = 19 + Top = 272 + Width = 83 + Caption = 'Preview tiles' + Checked = True + State = cbChecked + TabOrder = 7 + OnChange = cbPreviewTilesChange + end + object clbBackColor: TColorButton + AnchorSideLeft.Control = cbCyclicView + AnchorSideTop.Control = cbDoubleBuffer + AnchorSideTop.Side = asrCenter + Left = 120 + Height = 28 + Top = 290 + Width = 108 + BorderWidth = 2 + ButtonColorAutoSize = False + ButtonColorSize = 15 + ButtonColor = clWhite + Caption = 'Map backgr.' + Margin = 4 + OnColorChanged = clbBackColorColorChanged + end + object Bevel1: TBevel + AnchorSideLeft.Control = cbDebugTiles + AnchorSideTop.Control = cbDebugTiles + AnchorSideTop.Side = asrBottom + AnchorSideRight.Side = asrBottom + Left = 4 + Height = 2 + Top = 343 + Width = 257 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Top = 6 + Shape = bsTopLine + end + object rgPOIMode: TRadioGroup + AnchorSideLeft.Control = cmbProviders + AnchorSideTop.Control = Bevel1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 4 + Height = 128 + Top = 351 + Width = 279 + Anchors = [akTop, akLeft, akRight] + AutoFill = False + BorderSpacing.Top = 6 + BorderSpacing.Right = 4 + Caption = 'POI Mode' + ChildSizing.LeftRightSpacing = 12 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclTopToBottomThenLeftToRight + ChildSizing.ControlsPerLine = 4 + ClientHeight = 108 + ClientWidth = 275 + ItemIndex = 0 + Items.Strings = ( + 'default drawing' + 'default POI image' + 'image from imagelist' + 'custom drawing' + ) + TabOrder = 8 + OnClick = rgPOIModeClick + object Bevel3: TBevel + Left = 151 + Height = 25 + Top = 4 + Width = 66 + Constraints.MaxHeight = 25 + Shape = bsSpacer + end + object btnSelectPOIImage: TButton + Left = 151 + Height = 25 + Top = 29 + Width = 66 + AutoSize = True + BorderSpacing.Left = 8 + Caption = 'Select...' + Enabled = False + TabOrder = 4 + OnClick = btnSelectPOIImageClick + end + object Bevel4: TBevel + Left = 151 + Height = 25 + Top = 54 + Width = 66 + Constraints.MaxHeight = 25 + Shape = bsSpacer + end + object Bevel5: TBevel + Left = 151 + Height = 25 + Top = 79 + Width = 66 + Constraints.MaxHeight = 25 + Shape = bsSpacer + end + end + object btnPOITextFont: TButton + AnchorSideLeft.Control = rgPOIMode + AnchorSideTop.Control = rgPOIMode + AnchorSideTop.Side = asrBottom + Left = 4 + Height = 30 + Top = 487 + Width = 87 + BorderSpacing.Top = 8 + Caption = 'POI text font' + TabOrder = 9 + OnClick = btnPOITextFontClick + end + object LblPOITextBgColor: TLabel + AnchorSideLeft.Control = btnPOITextFont + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = btnPOITextFont + AnchorSideTop.Side = asrCenter + Left = 97 + Height = 15 + Top = 495 + Width = 39 + BorderSpacing.Left = 6 + Caption = 'Backgr.' + ParentColor = False + end + object cbPOITextBgColor: TColorBox + AnchorSideLeft.Control = LblPOITextBgColor + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = btnPOITextFont + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = rgPOIMode + AnchorSideRight.Side = asrBottom + Left = 142 + Height = 21 + Top = 492 + Width = 141 + NoneColorColor = clWhite + Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors] + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + ItemHeight = 15 + TabOrder = 10 + OnChange = cbPOITextBgColorChange + end + object OpenPictureDialog: TOpenPictureDialog + Left = 184 + Top = 344 + end + object FontDialog: TFontDialog + MinFontSize = 0 + MaxFontSize = 0 + Left = 40 + Top = 528 + end +end diff --git a/components/lazmapviewer/examples/fulldemo/configframe.pas b/components/lazmapviewer/examples/fulldemo/configframe.pas new file mode 100644 index 000000000..e459d68c0 --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/configframe.pas @@ -0,0 +1,359 @@ +unit ConfigFrame; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, IniFiles, + Graphics, + Forms, Controls, StdCtrls, Buttons, Dialogs, ExtCtrls, ColorBox, ExtDlgs, Spin, + mvMapViewer, mvEngine, + globals; + +type + { TCfgFrame } + + TCfgFrame = class(TFrame) + Bevel1: TBevel; + Bevel3: TBevel; + Bevel4: TBevel; + Bevel5: TBevel; + btnLoadMapProviders: TSpeedButton; + btnPOITextFont: TButton; + btnSaveMapProviders: TSpeedButton; + btnSelectPOIImage: TButton; + cbCyclicView: TCheckBox; + cbDebugTiles: TCheckBox; + cbDoubleBuffer: TCheckBox; + cbPOITextBgColor: TColorBox; + cbPreviewTiles: TCheckBox; + cmbProviders: TComboBox; + cbUseThreads: TCheckBox; + cbZoomToCursor: TCheckBox; + clbBackColor: TColorButton; + edProxyHost: TEdit; + edProxyPassword: TEdit; + edProxyUserName: TEdit; + FontDialog: TFontDialog; + gbProxy: TGroupBox; + LblPOITextBgColor: TLabel; + LblProviders: TLabel; + lblProxyHost: TLabel; + lblProxyPassword: TLabel; + lblProxyPort: TLabel; + lblProxyUserName: TLabel; + OpenPictureDialog: TOpenPictureDialog; + rbNoProxy: TRadioButton; + rbProxyData: TRadioButton; + rbSystemProxy: TRadioButton; + rgPOIMode: TRadioGroup; + seProxyPort: TSpinEdit; + procedure btnLoadMapProvidersClick(Sender: TObject); + procedure btnPOITextFontClick(Sender: TObject); + procedure btnSaveMapProvidersClick(Sender: TObject); + procedure btnSelectPOIImageClick(Sender: TObject); + procedure cbCyclicViewChange(Sender: TObject); + procedure cbDebugTilesChange(Sender: TObject); + procedure cbDoubleBufferChange(Sender: TObject); + procedure cbPOITextBgColorChange(Sender: TObject); + procedure cbPreviewTilesChange(Sender: TObject); + procedure cbUseThreadsChange(Sender: TObject); + procedure cbZoomToCursorChange(Sender: TObject); + procedure clbBackColorColorChanged(Sender: TObject); + procedure cmbProvidersChange(Sender: TObject); + procedure rbNoProxyChange(Sender: TObject); + procedure rgPOIModeClick(Sender: TObject); + procedure rbProxyDataChange(Sender: TObject); + procedure rbSystemProxyChange(Sender: TObject); + private + FMapView: TMapView; + FPOIImage: TCustomBitmap; + FDrawGPSPointEvent: TDrawGpsPointEvent; + FUpdateLayersEvent: TNotifyEvent; + function GetMapProviders: TStrings; + function GetPOIMode: TPOIMode; + function GetPOITextBkColor: TColor; + procedure SetMapView(AValue: TMapView); + protected + procedure DoUpdateLayers; virtual; + procedure UpdateDownloadEngineProxy; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + + procedure ReadFromIni(ini: TCustomIniFile); virtual; + procedure WriteToIni(ini: TCustomIniFile); virtual; + + property MapView: TMapView read FMapView write SetMapView; + property MapProviders: TStrings read GetMapProviders; + property POIMode: TPOIMode read GetPOIMode; + property POITextBkColor: TColor read GetPOITextBkColor; + property OnDrawGPSPoint: TDrawGpsPointEvent read FDrawGPSPointEvent write FDrawGPSPointEvent; + property OnUpdateLayers: TNotifyEvent read FUpdateLayersEvent write FUpdateLayersEvent; + end; + +implementation + +{$R *.lfm} + +{ TCfgFrame } + +constructor TCfgFrame.Create(AOwner: TComponent); +var + fn: String; +begin + inherited; + + fn := Application.Location + 'mapmarker.png'; + if not FileExists(fn) then + MessageDlg('Copy the file "mapmarker.png" from the source folder to the folder with the executable.', + mtError, [mbOK], 0) + else + begin + FPOIImage := TPortableNetworkGraphic.Create; + FPOIImage.PixelFormat := pf32bit; + FPOIImage.LoadFromFile(fn); + end; +end; + +destructor TCfgFrame.Destroy; +begin + FPOIImage.Free; + inherited; +end; + +procedure TCfgFrame.btnLoadMapProvidersClick(Sender: TObject); +var + fn: String; + msg: String; +begin + fn := Application.Location + MAP_PROVIDER_FILENAME; + if FileExists(fn) then begin + if MapView.Engine.ReadProvidersFromXML(fn, msg) then begin + MapView.GetMapProviders(cmbProviders.Items); + cmbProviders.ItemIndex := 0; + MapView.MapProvider := cmbProviders.Text; + // sgLayers.Columns[1].PickList.Assign(cmbProviders.Items); // <<--- FIXME + end else + ShowMessage(msg); + end; +end; + +procedure TCfgFrame.btnPOITextFontClick(Sender: TObject); +begin + FontDialog.Font.Assign(MapView.Font); + if FontDialog.Execute then + MapView.Font.Assign(FontDialog.Font); +end; + +procedure TCfgFrame.btnSaveMapProvidersClick(Sender: TObject); +begin + MapView.Engine.WriteProvidersToXML(Application.Location + MAP_PROVIDER_FILENAME); +end; + +procedure TCfgFrame.btnSelectPOIImageClick(Sender: TObject); +begin + OpenPictureDialog.Filter := 'PNG files|*.png|BMP files|*.bmp'; + OpenPictureDialog.DefaultExt := '.png'; + if OpenPictureDialog.Execute then + begin + FPOIImage.LoadFromFile(OpenPictureDialog.FileName); + MapView.POIImage.Assign(FPOIImage); + end; +end; + +procedure TCfgFrame.cbCyclicViewChange(Sender: TObject); +begin + MapView.Cyclic := cbCyclicView.Checked; + DoUpdateLayers; +end; + +procedure TCfgFrame.cbDebugTilesChange(Sender: TObject); +begin + MapView.DebugTiles := CbDebugTiles.Checked; + MapView.Invalidate; +end; + +procedure TCfgFrame.cbDoubleBufferChange(Sender: TObject); +begin + MapView.DoubleBuffered := cbDoubleBuffer.Checked; +end; + +procedure TCfgFrame.cbPOITextBgColorChange(Sender: TObject); +begin + MapView.POITextBgColor := cbPOITextBgColor.Selected; +end; + +procedure TCfgFrame.cbPreviewTilesChange(Sender: TObject); +begin + MapView.DrawPreviewTiles := cbPreviewTiles.Checked; +end; + +procedure TCfgFrame.cbUseThreadsChange(Sender: TObject); +begin + MapView.UseThreads := cbUseThreads.Checked; + DoUpdateLayers; +end; + +procedure TCfgFrame.clbBackColorColorChanged(Sender: TObject); +begin + MapView.InactiveColor := clbBackColor.ButtonColor; +end; + +procedure TCfgFrame.cbZoomToCursorChange(Sender: TObject); +begin + MapView.ZoomToCursor := CbZoomToCursor.Checked; +end; + +procedure TCfgFrame.cmbProvidersChange(Sender: TObject); +begin + MapView.MapProvider := cmbProviders.Text; +end; + +procedure TCfgFrame.DoUpdateLayers; +begin + if Assigned(FUpdateLayersEvent) then + FUpdateLayersEvent(Self); +end; + +function TCfgFrame.GetMapProviders: TStrings; +begin + Result := cmbProviders.Items; +end; + +function TCfgFrame.GetPOIMode: TPOIMode; +begin + Result := TPOIMode(rgPOIMode.ItemIndex); +end; + +function TCfgFrame.GetPOITextBkColor: TColor; +begin + Result := cbPOITextBgColor.Selected; +end; + +procedure TCfgFrame.ReadFromIni(ini: TCustomIniFile); +var + n: Integer; + s: String; +begin + n := ini.ReadInteger('Proxy', 'UseProxy', 0); + case n of + 0: rbNoProxy.Checked := true; + 1: rbSystemProxy.Checked := true; + 2: rbProxyData.Checked := true; + end; + edProxyHost.Text := ini.ReadString('Proxy', 'ProxyHost', edProxyHost.Text); + seProxyPort.Value := ini.ReadInteger('Proxy', 'ProxyPort', seProxyPort.Value); + edProxyUserName.Text := ini.ReadString('Proxy', 'ProxyName', edProxyUserName.Text); + edProxyPassword.Text := ini.ReadString('Proxy', 'ProxyPassword', edProxyPassword.Text); + + UpdateDownloadEngineProxy; + + // The following parameters already have been read by the main form, + // we still must update the frame controls. + MapView.GetMapProviders(cmbProviders.Items); + cmbProviders.ItemIndex := cmbProviders.Items.IndexOf(MapView.MapProvider); + clbBackColor.ButtonColor := MapView.InactiveColor; +end; + +procedure TCfgFrame.rbNoProxyChange(Sender: TObject); +begin + UpdateDownloadEngineProxy; +end; + +procedure TCfgFrame.rbProxyDataChange(Sender: TObject); +begin + UpdateDownloadEngineProxy; +end; + +procedure TCfgFrame.rbSystemProxyChange(Sender: TObject); +begin + UpdateDownloadEngineProxy; +end; + +procedure TCfgFrame.rgPOIModeClick(Sender: TObject); +begin + case rgPOIMode.ItemIndex of + 0: begin // default symbol + if MapView.POIImage <> nil then MapView.POIImage.Clear; + MapView.OnDrawGPSPoint := nil; + end; + 1: begin // default POI image + MapView.POIImage := FPOIImage; + MapView.OnDrawGPSPoint := nil; + end; + 2: begin // image from image list, to be applied to the next POI only + // + end; + 3: begin // custom-drawn symbol + if MapView.POIImage <> nil then MapView.POIImage.Clear; + MapView.OnDrawGPSPoint := FDrawGpsPointEvent; + end; + end; + MapView.Invalidate; + btnSelectPOIImage.Enabled := (rgPOIMode.ItemIndex = 1); +end; + +procedure TCfgFrame.SetMapView(AValue: TMapView); +begin + if FMapView = AValue then + exit; + FMapView := AValue; + if FMapView = nil then + raise Exception.Create('[TCfgFrame.SetMapView] New mapview is nil.'); + + FMapView.GetMapProviders(cmbProviders.Items); + cmbProviders.ItemIndex := cmbProviders.Items.IndexOf(FMapView.MapProvider); + //sgLayers.Columns[1].PickList.Assign(CbProviders.Items); // << --- FIX ME + FMapView.DoubleBuffered := true; + FMapView.Zoom := 1; + cbZoomToCursor.Checked := FMapView.ZoomToCursor; + cbUseThreads.Checked := FMapView.UseThreads; + cbDoubleBuffer.Checked := FMapView.DoubleBuffered; + cbPOITextBgColor.Selected := FMapView.POITextBgColor; + cbPOITextBgColor.ItemHeight := cmbProviders.ItemHeight + 2; + clbBackColor.ButtonColor := FMapView.InactiveColor; + + FDrawGPSpointEvent := FMapView.OnDrawGPSPoint; +end; + +procedure TCfgFrame.UpdateDownloadEngineProxy; +begin + if MapView.DownloadEngine.HasProxySupport then + begin + MapView.DownloadEngine.SetProxy( + rbSystemProxy.Checked, rbProxyData.Checked, + edProxyHost.Name, seProxyPort.Value, edProxyUserName.Text, edProxyPassword.Text + ); + rbSystemProxy.Enabled := MapView.DownloadEngine.SupportsSystemProxy; + lblProxyHost.Enabled := rbProxyData.Checked; + edProxyHost.Enabled := rbProxyData.Checked; + lblProxyPort.Enabled := rbProxyData.Checked; + seProxyPort.Enabled := rbProxyData.Checked; + lblProxyUserName.Enabled := rbProxyData.Checked; + edProxyUserName.Enabled := rbProxyData.Checked; + lblProxyPassword.Enabled := rbProxyData.Checked; + edProxyPassword.Enabled := rbProxyData.Checked; + end; +end; + +procedure TCfgFrame.WriteToIni(ini: TCustomIniFile); +var + n: Integer = 0; +begin + if rbSystemProxy.Checked then + n := 1 + else if rbProxyData.Checked then + n := 2; + ini.EraseSection('Proxy'); + ini.WriteInteger('Proxy', 'UseProxy', n); + ini.WriteString('Proxy', 'ProxyHost', edProxyHost.Text); + ini.WriteInteger('Proxy', 'ProxyPort', seProxyPort.Value); + ini.WriteString('Proxy', 'ProxyName', edProxyUserName.Text); + ini.WriteString('Proxy', 'ProxyPassword', edProxyPassword.Text); +end; + + +end. + diff --git a/components/lazmapviewer/examples/fulldemo/configframe_with_addons.lfm b/components/lazmapviewer/examples/fulldemo/configframe_with_addons.lfm new file mode 100644 index 000000000..8a68ceb3c --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/configframe_with_addons.lfm @@ -0,0 +1,139 @@ +inherited CfgFrame_with_addons: TCfgFrame_with_addons + inherited LblProviders: TLabel + AnchorSideTop.Control = Owner + end + inherited cmbProviders: TComboBox + AnchorSideLeft.Control = Owner + end + inherited btnSaveMapProviders: TSpeedButton + AnchorSideRight.Control = Owner + end + inherited gbProxy: TGroupBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = cbDownloadEngine + AnchorSideRight.Control = Owner + Top = 154 + BorderSpacing.Top = 6 + end + inherited cbZoomToCursor: TCheckBox + AnchorSideLeft.Control = Owner + Top = 347 + end + inherited cbUseThreads: TCheckBox + Top = 370 + end + inherited cbDoubleBuffer: TCheckBox + Top = 393 + end + inherited cbDebugTiles: TCheckBox + Top = 416 + end + inherited cbCyclicView: TCheckBox + Top = 347 + end + inherited cbPreviewTiles: TCheckBox + Top = 370 + end + inherited clbBackColor: TColorButton + Top = 388 + end + inherited Bevel1: TBevel + Top = 441 + end + inherited rgPOIMode: TRadioGroup + AnchorSideRight.Control = Owner + Top = 449 + end + inherited btnPOITextFont: TButton + Top = 585 + end + inherited LblPOITextBgColor: TLabel + Top = 593 + end + inherited cbPOITextBgColor: TColorBox + Top = 590 + end + object Label1: TLabel[17] + AnchorSideLeft.Control = cbDrawingEngine + AnchorSideTop.Control = cmbProviders + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 15 + Top = 56 + Width = 86 + BorderSpacing.Top = 8 + Caption = 'Drawing engine:' + ParentColor = False + end + object cbDrawingEngine: TComboBox[18] + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 6 + Height = 23 + Top = 73 + Width = 275 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 2 + BorderSpacing.Right = 6 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'default' + 'RGBGraphics' + 'BGRABitmap' + 'LCL' + ) + Style = csDropDownList + TabOrder = 11 + Text = 'default' + OnChange = cbDrawingEngineChange + end + object Label2: TLabel[19] + AnchorSideLeft.Control = cbDownloadEngine + AnchorSideTop.Control = cbDrawingEngine + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 15 + Top = 104 + Width = 96 + BorderSpacing.Top = 8 + Caption = 'Download engine:' + ParentColor = False + end + object cbDownloadEngine: TComboBox[20] + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 6 + Height = 23 + Top = 121 + Width = 275 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Left = 6 + BorderSpacing.Top = 2 + BorderSpacing.Right = 6 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'default' + 'Synapse' + 'FpHTTPClient' + 'WinInet' + ) + Style = csDropDownList + TabOrder = 12 + Text = 'default' + OnChange = cbDownloadEngineChange + end + inherited OpenPictureDialog: TOpenPictureDialog[21] + end + inherited FontDialog: TFontDialog[22] + Top = 616 + end +end diff --git a/components/lazmapviewer/examples/fulldemo/configframe_with_addons.pas b/components/lazmapviewer/examples/fulldemo/configframe_with_addons.pas new file mode 100644 index 000000000..ed4517cd3 --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/configframe_with_addons.pas @@ -0,0 +1,108 @@ +unit ConfigFrame_with_Addons; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, + mvDrawingEngine, mvDE_RGBGraphics, mvDE_BGRA, mvDE_LCL, + mvDLEFPC, mvDLEWin, mvDLESynapse, + ConfigFrame; + +type + + { TCfgFrame_with_addons } + + TCfgFrame_with_addons = class(TCfgFrame) + cbDownloadEngine: TComboBox; + cbDrawingEngine: TComboBox; + Label1: TLabel; + Label2: TLabel; + procedure cbDownloadEngineChange(Sender: TObject); + procedure cbDrawingEngineChange(Sender: TObject); + private + FRGBGraphicsDrawingEngine: TMvRGBGraphicsDrawingEngine; + FBGRADrawingEngine: TMvBGRADrawingEngine; + FLCLDrawingEngine: TMvLCLDrawingEngine; + FSynapseDownloadEngine: TMvDESynapse; + FFpHttpClientDownloadEngine: TMvDEFPC; + {$IFDEF MSWINDOWS} + FWinDownloadEngine: TMvDEWin; + {$ENDIF} + + public + destructor Destroy; override; + + end; + +implementation + +{$R *.lfm} + +{ TCfgFrame_with_addons } + +destructor TCfgFrame_with_addons.Destroy; +begin + FreeAndNil(FRGBGraphicsDrawingEngine); + FreeAndNil(FBGRADrawingEngine); + FreeAndNil(FSynapseDownloadEngine); + FreeAndNil(FFpHttpClientDownloadEngine); + {$IFDEF MSWINDOWS} + FreeAndNil(FWinDownloadEngine); + {$ENDIF} + inherited; +end; + +procedure TCfgFrame_with_addons.cbDrawingEngineChange(Sender: TObject); +begin + case cbDrawingEngine.ItemIndex of + 0: MapView.DrawingEngine := nil; + 1: begin + if FRGBGraphicsDrawingEngine = nil then + FRGBGraphicsDrawingEngine := TMvRGBGraphicsDrawingEngine.Create(self); + MapView.DrawingEngine := FRGBGraphicsDrawingEngine; + end; + 2: begin + if FBGRADrawingEngine = nil then + FBGRADrawingEngine := TMvBGRADrawingEngine.Create(self); + MapView.DrawingEngine := FBGRADrawingEngine; + end; + 3: begin + if FLCLDrawingEngine = nil then + FLCLDrawingEngine := TMvLCLDrawingEngine.Create(self); + MapView.DrawingEngine := FLCLDrawingEngine; + end; + end; + DoUpdateLayers; +end; + +procedure TCfgFrame_with_addons.cbDownloadEngineChange(Sender: TObject); +begin + case cbDownloadEngine.ItemIndex of + 0: MapView.DownloadEngine := nil; + 1: begin + if FSynapseDownloadEngine = nil then + FSynapseDownloadEngine := TMvDESynapse.Create(self); + MapView.DownloadEngine := FSynapseDownloadEngine; + end; + 2: begin + if FFpHttpClientDownloadEngine = nil then + FFpHttpClientDownloadEngine := TMvDEFPC.Create(self); + MapView.DownloadEngine := FFpHttpClientDownloadEngine; + end; + 3: begin + {$IFDEF MSWINDOWS} + if FWinDownloadEngine = nil then + FWinDownloadEngine := TMvDEWin.Create(Self); + MapView.DownloadEngine := FWinDownloadEngine; + {$ELSE} + ShowMessage('WinInet download engine can only be used in Windows.'); + {$ENDIF} + end; + end; + UpdateDownloadEngineProxy; +end; + +end. + diff --git a/components/lazmapviewer/examples/fulldemo/globals.pas b/components/lazmapviewer/examples/fulldemo/globals.pas index 2e11a8882..8b78a2f20 100644 --- a/components/lazmapviewer/examples/fulldemo/globals.pas +++ b/components/lazmapviewer/examples/fulldemo/globals.pas @@ -7,9 +7,14 @@ interface uses Classes, SysUtils, mvEngine; +type + TPOIMode = (pmDefaultDrawing, pmDefaultImage, pmImageList, pmCustomDrawing); + +const + MAP_PROVIDER_FILENAME = 'map-providers.xml'; + const DistanceUnit_Names: array[TDistanceUnits] of string = ('m', 'km', 'miles'); - var DistanceUnit: TDistanceUnits = duKilometers; diff --git a/components/lazmapviewer/examples/fulldemo/main.lfm b/components/lazmapviewer/examples/fulldemo/main.lfm index 2ee8f893c..c66d05512 100644 --- a/components/lazmapviewer/examples/fulldemo/main.lfm +++ b/components/lazmapviewer/examples/fulldemo/main.lfm @@ -1,7 +1,7 @@ object MainForm: TMainForm - Left = 381 + Left = 375 Height = 586 - Top = 187 + Top = 177 Width = 750 Caption = 'LazMapViewer' ClientHeight = 586 @@ -40,9 +40,9 @@ object MainForm: TMainForm Height = 586 Top = 0 Width = 275 - ActivePage = PgConfig + ActivePage = PgData Align = alRight - TabIndex = 2 + TabIndex = 0 TabOrder = 1 object PgData: TTabSheet Caption = 'Data' @@ -715,534 +715,6 @@ object MainForm: TMainForm end object PgConfig: TTabSheet Caption = 'Config' - ClientHeight = 558 - ClientWidth = 267 - object LblProviders: TLabel - AnchorSideLeft.Control = CbProviders - AnchorSideTop.Control = PgConfig - Left = 4 - Height = 15 - Top = 8 - Width = 52 - BorderSpacing.Top = 8 - Caption = 'Providers:' - FocusControl = CbProviders - ParentColor = False - end - object CbProviders: TComboBox - AnchorSideLeft.Control = PgConfig - AnchorSideTop.Control = LblProviders - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = BtnLoadMapProviders - Left = 4 - Height = 23 - Top = 25 - Width = 193 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Left = 4 - BorderSpacing.Top = 2 - BorderSpacing.Right = 2 - DropDownCount = 24 - ItemHeight = 15 - Style = csDropDownList - TabOrder = 0 - OnChange = CbProvidersChange - end - object BtnLoadMapProviders: TSpeedButton - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = CbProviders - AnchorSideTop.Side = asrCenter - AnchorSideRight.Control = BtnSaveMapProviders - Left = 199 - Height = 28 - Top = 22 - Width = 30 - Anchors = [akTop, akRight] - BorderSpacing.Right = 2 - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003591 - DBFA439FDDFA439FDDFA429FDDFA429EDDFA419EDCFA419EDCFA419EDCFA419E - DCFA419EDCFA419EDCFA419EDCFA3792DAFB3080DF100000000000000000429C - DEF76EC7EBFF6DC7EAFF6BC6EAFF6AC5E9FF68C4E9FF67C3E8FF65C2E8FF64C1 - E7FF63C0E7FF61BFE6FF60BEE5FF51AFE3FE308CD6450000000000000000409A - DDF47CD0F1FF7BD0F0FF7ACFEFFF79CEEFFF77CDEEFF76CCEEFF74CBEDFF73CA - EDFF71C9ECFF70C8ECFF6EC7EBFF6AC3E9FF3993DB8E00000000000000003E99 - DCEC7ECEF1FF8AD9F6FF89D8F5FF87D7F4FF86D6F4FF84D5F3FF83D5F3FF81D4 - F2FF80D3F2FF7ED2F1FF7DD1F1FF7BD0F0FF439ADEB40000000000000000409B - DDE470C1EDFF99E2FBFF97E2FBFF96E1FAFF94E0F9FF93DFF9FF91DEF8FF90DD - F8FF8EDCF7FF8DDBF7FF8CDAF6FF8AD9F6FF4EA4E2CD00000000000000004AA5 - E0DF61B3E8FFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA2E8FEFFA0E7FEFF9FE6 - FDFF9DE5FDFF9CE4FCFF9AE3FCFF99E2FBFF5FB3E9E33080DF100000000051A8 - E2DF5EB2E8FFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9 - FFFFA3E9FFFFA3E9FFFFA3E9FFFFA3E9FFFF84CFF5FB348CDA450000000058AD - E5DF60B3E8FF61B3E9FF61B3E9FF60B2E9FF60B2E8FF60B2E8FF5FB1E8FF5FB1 - E8FF5EB1E8FF5EB1E8FF5EB1E7FF59ADE7FB55A9E5E33B94DC85000000005FB0 - E8DF9DE4FBFF9AE3FAFF97E1F9FF94DFF8FF91DDF7FF8EDBF5FF8BD9F4FF88D8 - F3FF85D6F2FF82D4F1FF7FD2F0FF4FA7E1DF00000000000000000000000061B1 - E8DFA6EAFFFFA6EAFFFFA6EAFFFFA3E8FEFF7AC6F1ED59ACE6DF58AAE5DF57AA - E5DF56AAE5DF53A9E4DF53A8E4DF3C94DCE20000000000000000000000004096 - DEE25DAEE7DF5DAEE7DF5DAEE7DF57A9E6DF4399DF6E00000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000 - } - OnClick = BtnLoadMapProvidersClick - end - object BtnSaveMapProviders: TSpeedButton - AnchorSideLeft.Control = BtnLoadMapProviders - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = CbProviders - AnchorSideTop.Side = asrCenter - AnchorSideRight.Control = PgConfig - AnchorSideRight.Side = asrBottom - Left = 231 - Height = 28 - Top = 22 - Width = 32 - Anchors = [akTop, akRight] - BorderSpacing.Right = 4 - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000A4653455A465 - 34FFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFB6BDBAFFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD - BAFFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 - 34FFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFA465 - 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 - 34FFA46534FFA46534FFA46534FFA46534FFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFECEE - EEFFECEEEEFFECEEEEFFECEEEEFFECEEEEFFA46534FF00000000A46534FF5959 - F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959 - F3FF5959F3FF5959F3FF5959F3FF5959F3FFA46534FF00000000A46534FF5959 - F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959F3FF5959 - F3FF5959F3FF5959F3FF5959F3FF5959F3FFA46534FF00000000 - } - OnClick = BtnSaveMapProvidersClick - end - object CbUseThreads: TCheckBox - AnchorSideLeft.Control = PgConfig - AnchorSideTop.Control = CbZoomToCursor - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 19 - Top = 272 - Width = 79 - BorderSpacing.Left = 4 - BorderSpacing.Top = 4 - Caption = 'Use threads' - Checked = True - State = cbChecked - TabOrder = 4 - OnChange = CbUseThreadsChange - end - object CbDoubleBuffer: TCheckBox - AnchorSideLeft.Control = CbUseThreads - AnchorSideTop.Control = CbUseThreads - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 19 - Top = 295 - Width = 85 - BorderSpacing.Top = 4 - BorderSpacing.Right = 6 - Caption = 'DblBuffering' - Checked = True - State = cbChecked - TabOrder = 6 - OnChange = CbDoubleBufferChange - end - object CbDebugTiles: TCheckBox - AnchorSideLeft.Control = CbDoubleBuffer - AnchorSideTop.Control = CbDoubleBuffer - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 19 - Top = 318 - Width = 77 - BorderSpacing.Top = 4 - Caption = 'Debug tiles' - TabOrder = 7 - OnChange = CbDebugTilesChange - end - object BtnPOITextFont: TButton - AnchorSideLeft.Control = rgPOIMode - AnchorSideTop.Control = rgPOIMode - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 30 - Top = 487 - Width = 87 - BorderSpacing.Top = 8 - Caption = 'POI text font' - TabOrder = 9 - OnClick = BtnPOITextFontClick - end - object cbPOITextBgColor: TColorBox - AnchorSideLeft.Control = LblPOITextBgColor - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = BtnPOITextFont - AnchorSideTop.Side = asrCenter - AnchorSideRight.Side = asrBottom - Left = 142 - Height = 21 - Top = 492 - Width = 119 - NoneColorColor = clWhite - Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors] - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Left = 6 - ItemHeight = 15 - TabOrder = 10 - OnChange = cbPOITextBgColorChange - end - object LblPOITextBgColor: TLabel - AnchorSideLeft.Control = BtnPOITextFont - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = BtnPOITextFont - AnchorSideTop.Side = asrCenter - Left = 97 - Height = 15 - Top = 495 - Width = 39 - BorderSpacing.Left = 6 - Caption = 'Backgr.' - ParentColor = False - end - object Bevel1: TBevel - AnchorSideLeft.Control = CbDebugTiles - AnchorSideTop.Control = CbDebugTiles - AnchorSideTop.Side = asrBottom - AnchorSideRight.Side = asrBottom - Left = 4 - Height = 2 - Top = 343 - Width = 257 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Top = 6 - Shape = bsTopLine - end - object rgPOIMode: TRadioGroup - AnchorSideLeft.Control = CbProviders - AnchorSideTop.Control = Bevel1 - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 128 - Top = 351 - Width = 233 - AutoFill = False - BorderSpacing.Top = 6 - Caption = 'POI Mode' - ChildSizing.LeftRightSpacing = 12 - ChildSizing.TopBottomSpacing = 4 - ChildSizing.ShrinkHorizontal = crsScaleChilds - ChildSizing.ShrinkVertical = crsScaleChilds - ChildSizing.Layout = cclTopToBottomThenLeftToRight - ChildSizing.ControlsPerLine = 4 - ClientHeight = 108 - ClientWidth = 229 - ItemIndex = 0 - Items.Strings = ( - 'default drawing' - 'default POI image' - 'image from imagelist' - 'custom drawing' - ) - TabOrder = 8 - OnClick = rgPOIModeClick - object Bevel3: TBevel - Left = 151 - Height = 25 - Top = 4 - Width = 66 - Constraints.MaxHeight = 25 - Shape = bsSpacer - end - object BtnSelectPOIImage: TButton - Left = 151 - Height = 25 - Top = 29 - Width = 66 - AutoSize = True - BorderSpacing.Left = 8 - Caption = 'Select...' - Enabled = False - TabOrder = 4 - OnClick = BtnSelectPOIImageClick - end - object Bevel4: TBevel - Left = 151 - Height = 25 - Top = 54 - Width = 66 - Constraints.MaxHeight = 25 - Shape = bsSpacer - end - object Bevel5: TBevel - Left = 151 - Height = 25 - Top = 79 - Width = 66 - Constraints.MaxHeight = 25 - Shape = bsSpacer - end - end - object CbZoomToCursor: TCheckBox - AnchorSideLeft.Control = PgConfig - AnchorSideTop.Control = gbProxy - AnchorSideTop.Side = asrBottom - Left = 4 - Height = 19 - Top = 249 - Width = 100 - BorderSpacing.Left = 4 - BorderSpacing.Top = 8 - BorderSpacing.Right = 16 - Caption = 'Zoom to cursor' - Checked = True - State = cbChecked - TabOrder = 2 - OnChange = CbZoomToCursorChange - end - object cbCyclicView: TCheckBox - AnchorSideLeft.Control = CbZoomToCursor - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = CbZoomToCursor - Left = 120 - Height = 19 - Top = 249 - Width = 77 - Caption = 'Cyclic view' - Checked = True - State = cbChecked - TabOrder = 3 - OnChange = cbCyclicViewChange - end - object clbBackColor: TColorButton - AnchorSideLeft.Control = cbCyclicView - AnchorSideTop.Control = CbDoubleBuffer - AnchorSideTop.Side = asrCenter - Left = 120 - Height = 28 - Top = 290 - Width = 108 - BorderWidth = 2 - ButtonColorAutoSize = False - ButtonColorSize = 15 - ButtonColor = clWhite - Caption = 'Map backgr.' - Margin = 4 - OnColorChanged = clbBackColorColorChanged - end - object CbPreviewTiles: TCheckBox - AnchorSideLeft.Control = cbCyclicView - AnchorSideTop.Control = CbUseThreads - Left = 120 - Height = 19 - Top = 272 - Width = 83 - Caption = 'Preview tiles' - Checked = True - State = cbChecked - TabOrder = 5 - OnChange = CbPreviewTilesChange - end - object gbProxy: TGroupBox - AnchorSideLeft.Control = PgConfig - AnchorSideTop.Control = CbProviders - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = PgConfig - AnchorSideRight.Side = asrBottom - Left = 4 - Height = 185 - Top = 56 - Width = 259 - Anchors = [akTop, akLeft, akRight] - AutoSize = True - BorderSpacing.Top = 4 - BorderSpacing.Around = 4 - Caption = 'Proxy' - ClientHeight = 165 - ClientWidth = 255 - TabOrder = 1 - object lblProxyHost: TLabel - AnchorSideLeft.Control = rbNoProxy - AnchorSideTop.Control = edProxyHost - AnchorSideTop.Side = asrCenter - Left = 20 - Height = 15 - Top = 65 - Width = 28 - BorderSpacing.Left = 10 - Caption = 'Host:' - ParentColor = False - end - object edProxyHost: TEdit - AnchorSideLeft.Control = edProxyUserName - AnchorSideTop.Control = rbProxyData - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = gbProxy - AnchorSideRight.Side = asrBottom - Left = 85 - Height = 23 - Top = 61 - Width = 164 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Right = 6 - TabOrder = 3 - OnChange = rbProxyChange - end - object lblProxyPort: TLabel - AnchorSideLeft.Control = lblProxyHost - AnchorSideTop.Control = seProxyPort - AnchorSideTop.Side = asrCenter - Left = 20 - Height = 15 - Top = 90 - Width = 22 - Caption = 'Port' - ParentColor = False - end - object seProxyPort: TSpinEdit - AnchorSideLeft.Control = lblProxyUserName - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = edProxyHost - AnchorSideTop.Side = asrBottom - Left = 85 - Height = 23 - Top = 86 - Width = 70 - BorderSpacing.Top = 2 - MaxValue = 65535 - TabOrder = 4 - OnChange = rbProxyChange - end - object lblProxyUserName: TLabel - AnchorSideLeft.Control = lblProxyHost - AnchorSideTop.Control = edProxyUserName - AnchorSideTop.Side = asrCenter - Left = 20 - Height = 15 - Top = 115 - Width = 59 - BorderSpacing.Right = 6 - Caption = 'User name:' - ParentColor = False - end - object edProxyUserName: TEdit - AnchorSideLeft.Control = lblProxyUserName - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = seProxyPort - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = gbProxy - AnchorSideRight.Side = asrBottom - Left = 85 - Height = 23 - Top = 111 - Width = 164 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Top = 2 - BorderSpacing.Right = 6 - TabOrder = 5 - OnChange = rbProxyChange - end - object lblProxyPassword: TLabel - AnchorSideLeft.Control = lblProxyHost - AnchorSideTop.Control = edProxyPassword - AnchorSideTop.Side = asrCenter - Left = 20 - Height = 15 - Top = 140 - Width = 50 - Caption = 'Password' - ParentColor = False - end - object edProxyPassword: TEdit - AnchorSideLeft.Control = edProxyUserName - AnchorSideTop.Control = edProxyUserName - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = gbProxy - AnchorSideRight.Side = asrBottom - Left = 85 - Height = 23 - Top = 136 - Width = 164 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Top = 2 - BorderSpacing.Right = 6 - BorderSpacing.Bottom = 6 - TabOrder = 6 - OnChange = rbProxyChange - end - object rbProxyData: TRadioButton - AnchorSideLeft.Control = rbNoProxy - AnchorSideTop.Control = rbSystemProxy - AnchorSideTop.Side = asrBottom - Left = 10 - Height = 19 - Top = 42 - Width = 74 - BorderSpacing.Top = 2 - Caption = 'Proxy data' - TabOrder = 2 - OnChangeBounds = rbProxyChange - end - object rbNoProxy: TRadioButton - AnchorSideLeft.Control = gbProxy - AnchorSideTop.Control = gbProxy - Left = 10 - Height = 19 - Top = 0 - Width = 67 - BorderSpacing.Left = 10 - Caption = 'No proxy' - TabOrder = 0 - OnChange = rbProxyChange - end - object rbSystemProxy: TRadioButton - AnchorSideLeft.Control = rbNoProxy - AnchorSideTop.Control = rbNoProxy - AnchorSideTop.Side = asrBottom - Left = 10 - Height = 19 - Top = 21 - Width = 110 - BorderSpacing.Top = 2 - Caption = 'Use system proxy' - Checked = True - TabOrder = 1 - TabStop = True - OnChange = rbProxyChange - end - end end end object GeoNames: TMVGeoNames diff --git a/components/lazmapviewer/examples/fulldemo/main.pas b/components/lazmapviewer/examples/fulldemo/main.pas index 7ecb63175..6c66d9834 100644 --- a/components/lazmapviewer/examples/fulldemo/main.pas +++ b/components/lazmapviewer/examples/fulldemo/main.pas @@ -1,3 +1,10 @@ +{ This file is used by the "MapViewer_Demo" and the "MapViewer_Demo_with_Addons" + projects. + + Active define WITH_ADDONS in the project options for "MapViewer_Demo_with_Addons" + and make sure that the addon packages are listed as requirements. +} + unit Main; {$mode objfpc}{$H+} @@ -6,65 +13,39 @@ interface uses Classes, SysUtils, Types, Forms, Controls, Graphics, Dialogs, ExtCtrls, - StdCtrls, ComCtrls, Buttons, IntfGraphics, ColorBox, Spin, PrintersDlgs, - mvGeoNames, mvMapViewer, mvTypes, mvGpsObj, mvDrawingEngine, Grids, ExtDlgs; + StdCtrls, ComCtrls, Buttons, IntfGraphics, PrintersDlgs, + Grids, ExtDlgs, + mvGeoNames, mvMapViewer, mvTypes, mvGpsObj, mvDrawingEngine, + {$IFDEF WITH_ADDONS}ConfigFrame_with_Addons{$ELSE}ConfigFrame{$ENDIF}; type - { TMainForm } TMainForm = class(TForm) - Bevel1: TBevel; Bevel2: TBevel; - Bevel3: TBevel; - Bevel4: TBevel; - Bevel5: TBevel; BtnSearch: TButton; BtnGoTo: TButton; BtnGPSPoints: TButton; BtnSaveToFile: TButton; BtnLoadGPXFile: TButton; - BtnPOITextFont: TButton; BtnPrintMap: TButton; - BtnSelectPOIImage: TButton; - CbDoubleBuffer: TCheckBox; CbFoundLocations: TComboBox; CbLocations: TComboBox; - CbProviders: TComboBox; OpenPictureDialog: TOpenPictureDialog; PgLayers: TTabSheet; - rbSystemProxy: TRadioButton; - rbNoProxy: TRadioButton; - rbProxyData: TRadioButton; - CbUseThreads: TCheckBox; CbMouseCoords: TGroupBox; CbDistanceUnits: TComboBox; - CbDebugTiles: TCheckBox; - cbPOITextBgColor: TColorBox; - CbZoomToCursor: TCheckBox; - cbCyclicView: TCheckBox; - CbPreviewTiles: TCheckBox; - clbBackColor: TColorButton; - edProxyHost: TEdit; - edProxyUserName: TEdit; - edProxyPassword: TEdit; FontDialog: TFontDialog; GbCenterCoords: TGroupBox; GbScreenSize: TGroupBox; GbSearch: TGroupBox; GbGPS: TGroupBox; - gbProxy: TGroupBox; InfoCenterLatitude: TLabel; InfoViewportHeight: TLabel; InfoCenterLongitude: TLabel; InfoBtnGPSPoints: TLabel; GPSPointInfo: TLabel; InfoViewportWidth: TLabel; - lblProxyUserName: TLabel; - lblProxyPort: TLabel; - lblProxyHost: TLabel; - LblPOITextBgColor: TLabel; - lblProxyPassword: TLabel; LblSelectLocation: TLabel; LblCenterLatitude: TLabel; LblViewportHeight: TLabel; @@ -74,20 +55,15 @@ type InfoPositionLongitude: TLabel; InfoPositionLatitude: TLabel; LblCenterLongitude: TLabel; - LblProviders: TLabel; LblZoom: TLabel; MapView: TMapView; GeoNames: TMVGeoNames; - BtnLoadMapProviders: TSpeedButton; - BtnSaveMapProviders: TSpeedButton; OpenDialog: TOpenDialog; PageControl: TPageControl; PgData: TTabSheet; PgConfig: TTabSheet; POIImages: TImageList; PrintDialog: TPrintDialog; - rgPOIMode: TRadioGroup; - seProxyPort: TSpinEdit; sgLayers: TStringGrid; rgDrawMode: TRadioGroup; lblOpacity: TLabel; @@ -100,21 +76,9 @@ type procedure BtnGPSPointsClick(Sender: TObject); procedure BtnSaveToFileClick(Sender: TObject); procedure BtnPOITextFontClick(Sender: TObject); - procedure BtnSelectPOIImageClick(Sender: TObject); - procedure cbCyclicViewChange(Sender: TObject); - procedure CbDebugTilesChange(Sender: TObject); - procedure CbDoubleBufferChange(Sender: TObject); procedure CbFoundLocationsDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); - procedure cbPOITextBgColorChange(Sender: TObject); - procedure CbPreviewTilesChange(Sender: TObject); - procedure CbProvidersChange(Sender: TObject); - procedure rbProxyChange(Sender: TObject); - procedure CbShowPOIImageChange(Sender: TObject); - procedure CbUseThreadsChange(Sender: TObject); procedure CbDistanceUnitsChange(Sender: TObject); - procedure CbZoomToCursorChange(Sender: TObject); - procedure clbBackColorColorChanged(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); @@ -128,23 +92,18 @@ type procedure MapViewMouseUp(Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure MapViewZoomChange(Sender: TObject); - procedure BtnLoadMapProvidersClick(Sender: TObject); - procedure BtnSaveMapProvidersClick(Sender: TObject); procedure rgDrawModeSelectionChanged(Sender: TObject); - procedure rgPOIModeClick(Sender: TObject); - procedure sgLayersCheckboxToggled(sender: TObject; aCol, aRow: Integer; - aState: TCheckboxState); + procedure sgLayersCheckboxToggled({%H-}Sender: TObject; {%H-}aCol, {%H-}aRow: Integer; aState: TCheckboxState); procedure sgLayersEditingDone(Sender: TObject); - procedure sgLayersSelection(Sender: TObject; aCol, aRow: Integer); + procedure sgLayersSelection(Sender: TObject; {%H-}aCol, aRow: Integer); procedure tbOpacityChange(Sender: TObject); - procedure UpdateLayers; + procedure UpdateLayers(Sender: TObject); procedure ZoomTrackBarChange(Sender: TObject); private - POIImage: TCustomBitmap; + CfgFrame: {$IFDEF WITH_ADDONS}TCfgFrame_with_Addons{$ELSE}TCfgFrame{$ENDIF}; procedure ClearFoundLocations; procedure UpdateCoords(X, Y: Integer); - procedure UpdateDownloadEngineProxy; procedure UpdateDropdownWidth(ACombobox: TCombobox); procedure UpdateLocationHistory(ALocation: String); procedure UpdateViewportSize; @@ -177,7 +136,6 @@ type const MAX_LOCATIONS_HISTORY = 50; - MAP_PROVIDER_FILENAME = 'map-providers.xml'; USE_DMS = true; _TILELAYERS_ID_ = 42; @@ -193,28 +151,6 @@ end; { TMainForm } -procedure TMainForm.BtnLoadMapProvidersClick(Sender: TObject); -var - fn: String; - msg: String; -begin - fn := Application.Location + MAP_PROVIDER_FILENAME; - if FileExists(fn) then begin - if MapView.Engine.ReadProvidersFromXML(fn, msg) then begin - MapView.GetMapProviders(CbProviders.Items); - CbProviders.ItemIndex := 0; - MapView.MapProvider := CbProviders.Text; - sgLayers.Columns[1].PickList.Assign(CbProviders.Items); - end else - ShowMessage(msg); - end; -end; - -procedure TMainForm.BtnSaveMapProvidersClick(Sender: TObject); -begin - MapView.Engine.WriteProvidersToXML(Application.Location + MAP_PROVIDER_FILENAME); -end; - procedure TMainForm.rgDrawModeSelectionChanged(Sender: TObject); begin TileLayer[Pred(sgLayers.Row)].DrawMode := TItemDrawMode(rgDrawMode.ItemIndex); @@ -374,34 +310,6 @@ begin MapView.Font.Assign(FontDialog.Font); end; -procedure TMainForm.BtnSelectPOIImageClick(Sender: TObject); -begin - OpenPictureDialog.Filter := 'PNG files|*.png|BMP files|*.bmp'; - OpenPictureDialog.DefaultExt := '.png'; - if OpenPictureDialog.Execute then - begin - POIImage.LoadFromFile(OpenPictureDialog.FileName); - MapView.POIImage.Assign(POIImage); - end; -end; - -procedure TMainForm.cbCyclicViewChange(Sender: TObject); -begin - MapView.Cyclic := cbCyclicView.Checked; - UpdateLayers; -end; - -procedure TMainForm.CbDebugTilesChange(Sender: TObject); -begin - MapView.DebugTiles := CbDebugTiles.Checked; - MapView.Invalidate; -end; - -procedure TMainForm.CbDoubleBufferChange(Sender: TObject); -begin - MapView.DoubleBuffered := CbDoubleBuffer.Checked; -end; - procedure TMainForm.CbFoundLocationsDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); var @@ -431,58 +339,12 @@ begin combo.Canvas.TextOut(x, y, P.Descr); end; -procedure TMainForm.cbPOITextBgColorChange(Sender: TObject); -begin - MapView.POITextBgColor := cbPOITextBgColor.Selected; -end; - -procedure TMainForm.CbPreviewTilesChange(Sender: TObject); -begin - MapView.DrawPreviewTiles := CbPreviewTiles.Checked; -end; - -procedure TMainForm.CbProvidersChange(Sender: TObject); -begin - MapView.MapProvider := CbProviders.Text; -end; - -procedure TMainForm.rbProxyChange(Sender: TObject); -begin - UpdateDownloadEngineProxy; -end; - -procedure TMainForm.CbShowPOIImageChange(Sender: TObject); -begin - { - if CbShowPOIImage.Checked then - MapView.POIImage.Assign(POIImage) - else - MapView.POIImage.Clear; - } -end; - -procedure TMainForm.CbUseThreadsChange(Sender: TObject); -begin - MapView.UseThreads := CbUseThreads.Checked; - UpdateLayers; -end; - procedure TMainForm.CbDistanceUnitsChange(Sender: TObject); begin DistanceUnit := TDistanceUnits(CbDistanceUnits.ItemIndex); UpdateViewPortSize; end; -procedure TMainForm.CbZoomToCursorChange(Sender: TObject); -begin - MapView.ZoomToCursor := CbZoomToCursor.Checked; -end; - -procedure TMainForm.clbBackColorColorChanged(Sender: TObject); -begin - MapView.InactiveColor := clbBackColor.ButtonColor; -end; - procedure TMainForm.ClearFoundLocations; var i: Integer; @@ -497,35 +359,17 @@ end; procedure TMainForm.FormCreate(Sender: TObject); var - fn: String; I: Integer; begin + CfgFrame := {$IFDEF WITH_ADDONS}TCfgFrame_with_Addons{$ELSE}TCfgFrame{$ENDIF}.Create(self); + CfgFrame.Parent := pgConfig; + CfgFrame.Align := alClient; + CfgFrame.MapView := MapView; + CfgFrame.OnDrawGPSPoint := @MapViewDrawGpsPoint; + CfgFrame.OnUpdateLayers := @UpdateLayers; + cInputQueryEditSizePercents := 0; - fn := Application.Location + 'mapmarker.png'; - if not FileExists(fn) then - MessageDlg('Copy the file "mapmarker.png" from the source folder to the folder with the executable.', - mtError, [mbOK], 0) - else - begin - // FMapMarker := CreateMapMarker(32, clRed, clBlack); - POIImage := TPortableNetworkGraphic.Create; - POIImage.PixelFormat := pf32bit; - POIImage.LoadFromFile(fn); - end; - - MapView.GetMapProviders(CbProviders.Items); - CbProviders.ItemIndex := CbProviders.Items.IndexOf(MapView.MapProvider); - sgLayers.Columns[1].PickList.Assign(CbProviders.Items); - MapView.DoubleBuffered := true; - MapView.Zoom := 1; - CbZoomToCursor.Checked := MapView.ZoomToCursor; - CbUseThreads.Checked := MapView.UseThreads; - CbDoubleBuffer.Checked := MapView.DoubleBuffered; - CbPOITextBgColor.Selected := MapView.POITextBgColor; - CbPOITextBgColor.ItemHeight := CbProviders.ItemHeight + 2; - ClbBackColor.ButtonColor := MapView.InactiveColor; - InfoPositionLongitude.Caption := ''; InfoPositionLatitude.Caption := ''; InfoCenterLongitude.Caption := ''; @@ -567,7 +411,6 @@ begin for I := 0 to High(TileLayer) do MapView.GPSLayer[I].Delete(TileLayer[I]); ClearFoundLocations; - FreeAndNil(POIImage) end; procedure TMainForm.FormShow(Sender: TObject); @@ -599,22 +442,30 @@ var sym: TGPSSymbol; clr: TColor; extent: TSize; + lMapView: TMapView; begin + lMapView := TMapView(Sender); + // Screen coordinates of the GPS point - P := TMapView(Sender).LatLonToScreen(APoint.RealPoint); + P := lMapView.LatLonToScreen(APoint.RealPoint); // Draw the GPS point as specified by the data in the point's ExtraData - if not (APoint.ExtraData is TGPSExtraData) then - exit; - - // Get the POI attributes - with TGPSExtraData(APoint.ExtraData) do + if (APoint.ExtraData is TGPSExtraData) then + // Get the POI attributes + with TGPSExtraData(APoint.ExtraData) do + begin + clr := Color; + sym := Symbol; + d := Size div 2; + end + else begin - clr := Color; - sym := Symbol; - d := Size div 2; + sym := gpsPlus; + clr := clRed; + d := 5; end; + // Draw the POI symbol ADrawer.PenColor := clr; case sym of @@ -655,12 +506,12 @@ begin // Prepare text output: background color... inc(P.Y, d + 4); extent := ADrawer.TextExtent(APoint.Name); - if cbPOITextBgColor.selected = clNone then + if CfgFrame.POITextBkColor = clNone then ADrawer.BrushStyle := bsClear else begin ADrawer.BrushStyle := bsSolid; - ADrawer.BrushColor := cbPOITextBgColor.Selected; + ADrawer.BrushColor := CfgFrame.POITextBkColor; end; // ... and font @@ -673,11 +524,6 @@ begin ADrawer.TextOut(P.X - extent.CX div 2, P.Y, APoint.Name); end; -{ ADrawer.BrushColor := clRed; - ADrawer.BrushStyle := bsSolid; - ADrawer.Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R); -end; - } procedure TMainForm.MapViewMouseLeave(Sender: TObject); begin UpdateCoords(MaxInt, MaxInt); @@ -733,14 +579,14 @@ begin if (Button = mbRight) then begin rPt := MapView.ScreenToLatLon(Point(X, Y)); - case rgPOIMode.ItemIndex of - 0, 1: + case CfgFrame.POIMode of + pmDefaultDrawing, pmDefaultImage: begin if not InputQuery('Name of GPS location', 'Please enter name', gpsName) then exit; gpsPt := TGpsPoint.CreateFrom(rPt); end; - 2: + pmImageList: begin if GPSPointForm = nil then begin @@ -754,7 +600,7 @@ begin GPSPointForm.GetImageIndexData(gpsName, gpsImageIndex); TGPSPointOfInterest(gpsPt).ImageIndex := gpsImageIndex; end; - 3: + pmCustomDrawing: begin if GPSPointForm = nil then begin @@ -796,24 +642,10 @@ var s: String; pt: TRealPoint; du: TDistanceUnits; + provider: String; begin ini := TMemIniFile.Create(CalcIniName); try - HERE_AppID := ini.ReadString('HERE', 'APP_ID', ''); - HERE_AppCode := ini.ReadString('HERE', 'APP_CODE', ''); - OpenWeatherMap_ApiKey := ini.ReadString('OpenWeatherMap', 'API_Key', ''); - ThunderForest_ApiKey := ini.ReadString('ThunderForest', 'API_Key', ''); - - if ((HERE_AppID <> '') and (HERE_AppCode <> '')) or - (OpenWeatherMap_ApiKey <> '') or - (ThunderForest_ApiKey <> '') then - begin - MapView.Engine.ClearMapProviders; - MapView.Engine.RegisterProviders; - MapView.GetMapProviders(CbProviders.Items); - sgLayers.Columns[1].PickList.Assign(CbProviders.Items); - end; - R := Screen.DesktopRect; L := ini.ReadInteger('MainForm', 'Left', Left); T := ini.ReadInteger('MainForm', 'Top', Top); @@ -825,20 +657,34 @@ begin if T < R.Top then T := R.Top; SetBounds(L, T, W, H); - s := ini.ReadString('MapView', 'Provider', MapView.MapProvider); - if CbProviders.Items.IndexOf(s) = -1 then begin - MessageDlg('Map provider "' + s + '" not found.', mtError, [mbOK], 0); - s := CbProviders.Items[0]; - end; - MapView.MapProvider := s; - CbProviders.Text := MapView.MapProvider; + HERE_AppID := ini.ReadString('HERE', 'APP_ID', ''); + HERE_AppCode := ini.ReadString('HERE', 'APP_CODE', ''); + OpenWeatherMap_ApiKey := ini.ReadString('OpenWeatherMap', 'API_Key', ''); + ThunderForest_ApiKey := ini.ReadString('ThunderForest', 'API_Key', ''); + list := TStringList.Create; + try + MapView.Engine.ClearMapProviders; + MapView.Engine.RegisterProviders; + MapView.GetMapProviders(list); + sgLayers.Columns[1].PickList.Assign(list); + + provider := ini.ReadString('MapView', 'Provider', MapView.MapProvider); + if MapView.Engine.MapProviderByName(provider) = nil then + begin + MessageDlg('Map provider "' + provider + '" not found.', mtError, [mbOK], 0); + provider := list[0]; + end; + MapView.MapProvider := provider; + finally + list.Free; + end; + + MapView.InactiveColor := ini.ReadInteger('MapView', 'MapBkgrColor', MapView.InactiveColor); MapView.Zoom := ini.ReadInteger('MapView', 'Zoom', MapView.Zoom); pt.Lon := StrToFloatDef(ini.ReadString('MapView', 'Center.Longitude', ''), 0.0, PointFormatSettings); pt.Lat := StrToFloatDef(ini.ReadString('MapView', 'Center.Latitude', ''), 0.0, PointFormatSettings); MapView.Center := pt; - MapView.InactiveColor := ini.ReadInteger('MapView', 'MapBkgrColor', MapView.InactiveColor); - clbBackColor.ButtonColor := MapView.InactiveColor; s := ini.ReadString('MapView', 'DistanceUnits', ''); if s <> '' then begin @@ -862,47 +708,13 @@ begin List.Free; end; - i := ini.ReadInteger('Proxy', 'UseProxy', 0); - case i of - 0: rbNoProxy.Checked := true; - 1: rbSystemProxy.Checked := true; - 2: rbProxyData.Checked := true; - end; - edProxyHost.Text := ini.ReadString('Proxy', 'ProxyHost', edProxyHost.Text); - seProxyPort.Value := ini.ReadInteger('Proxy', 'ProxyPort', seProxyPort.Value); - edProxyUserName.Text := ini.ReadString('Proxy', 'ProxyName', edProxyUserName.Text); - edProxyPassword.Text := ini.ReadString('Proxy', 'ProxyPassword', edProxyPassword.Text); - - UpdateDownloadEngineProxy; + CfgFrame.ReadFromIni(ini); finally ini.Free; end; end; -procedure TMainForm.rgPOIModeClick(Sender: TObject); -begin - case rgPOIMode.ItemIndex of - 0: begin // default - if MapView.POIImage <> nil then MapView.POIImage.Clear; - MapView.OnDrawGPSPoint := nil; - MapView.Invalidate; - end; - 1: begin // default POI image - MapView.POIImage := POIImage; - MapView.OnDrawGPSPoint := nil; - MapView.Invalidate; - end; - 2: ; // image from image list - 3: begin // symbol - if MapView.POIImage <> nil then MapView.POIImage.Clear; - MapView.OnDrawGPSPoint := @MapViewDrawGpsPoint; - MapView.Invalidate; - end; - end; - BtnSelectPOIImage.Enabled := (rgPOIMode.ItemIndex = 1); -end; - procedure TMainForm.sgLayersCheckboxToggled(sender: TObject; aCol, aRow: Integer; aState: TCheckboxState); begin @@ -936,7 +748,7 @@ begin MapView.Redraw; end; -procedure TMainForm.UpdateLayers; +procedure TMainForm.UpdateLayers(Sender: TObject); var TL: TGPSTileLayer; begin @@ -964,26 +776,6 @@ begin end; end; -procedure TMainForm.UpdateDownloadEngineProxy; -begin - if MapView.DownloadEngine.HasProxySupport then - begin - MapView.DownloadEngine.SetProxy( - rbSystemProxy.Checked, rbProxyData.Checked, - edProxyHost.Name, seProxyPort.Value, edProxyUserName.Text, edProxyPassword.Text - ); - rbSystemProxy.Enabled := MapView.DownloadEngine.SupportsSystemProxy; - lblProxyHost.Enabled := rbProxyData.Checked; - edProxyHost.Enabled := rbProxyData.Checked; - lblProxyPort.Enabled := rbProxyData.Checked; - seProxyPort.Enabled := rbProxyData.Checked; - lblProxyUserName.Enabled := rbProxyData.Checked; - edProxyUserName.Enabled := rbProxyData.Checked; - lblProxyPassword.Enabled := rbProxyData.Checked; - edProxyPassword.Enabled := rbProxyData.Checked; - end; -end; - procedure TMainForm.UpdateDropdownWidth(ACombobox: TCombobox); var cnv: TControlCanvas; @@ -1082,18 +874,7 @@ begin for i := 0 to CbLocations.Items.Count-1 do ini.WriteString('Locations', 'Item'+IntToStr(i), CbLocations.Items[i]); - if rbSystemProxy.Checked then - i := 1 - else if rbProxyData.Checked then - i := 2 - else - i := 0; - ini.EraseSection('Proxy'); - ini.WriteInteger('Proxy', 'UseProxy', i); - ini.WriteString('Proxy', 'ProxyHost', edProxyHost.Text); - ini.WriteInteger('Proxy', 'ProxyPort', seProxyPort.Value); - ini.WriteString('Proxy', 'ProxyName', edProxyUserName.Text); - ini.WriteString('Proxy', 'ProxyPassword', edProxyPassword.Text); + CfgFrame.WriteToIni(ini); finally ini.Free; diff --git a/components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpi b/components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpi similarity index 86% rename from components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpi rename to components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpi index 750d20610..15761dcc9 100644 --- a/components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpi +++ b/components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpi @@ -36,10 +36,11 @@ - + - + + @@ -71,13 +72,21 @@ + + + + + + + + - + diff --git a/components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpr b/components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpr similarity index 91% rename from components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpr rename to components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpr index 8579b1dda..a6ea80525 100644 --- a/components/lazmapviewer/examples/fulldemo/MapViewer_Demo.lpr +++ b/components/lazmapviewer/examples/fulldemo/mapviewer_demo.lpr @@ -6,7 +6,7 @@ uses {$IFDEF UNIX}cthreads,{$ENDIF} Interfaces, // this includes the LCL widgetset Forms, - Main, gpslistform; + Main, gpslistform, ConfigFrame; {$R *.res} diff --git a/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpi b/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpi new file mode 100644 index 000000000..27cd00c29 --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpi @@ -0,0 +1,144 @@ + + + + + + + + + + + + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + </General> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages Count="6"> + <Item1> + <PackageName Value="lazmapviewer_bgra"/> + </Item1> + <Item2> + <PackageName Value="lazmapviewer_rgbgraphics"/> + </Item2> + <Item3> + <PackageName Value="lazMapViewer_Synapse"/> + </Item3> + <Item4> + <PackageName Value="Printer4Lazarus"/> + </Item4> + <Item5> + <PackageName Value="lazMapViewerPkg"/> + </Item5> + <Item6> + <PackageName Value="LCL"/> + </Item6> + </RequiredPackages> + <Units Count="8"> + <Unit0> + <Filename Value="mapviewer_demo_with_addons.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="main.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Main"/> + </Unit1> + <Unit2> + <Filename Value="gpslistform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="GPSListViewer"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit2> + <Unit3> + <Filename Value="globals.pas"/> + <IsPartOfProject Value="True"/> + </Unit3> + <Unit4> + <Filename Value="gpsptform.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="GPSPointForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit4> + <Unit5> + <Filename Value="..\..\source\mvengine_mapreg.inc"/> + <IsPartOfProject Value="True"/> + </Unit5> + <Unit6> + <Filename Value="configframe.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="CfgFrame"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <UnitName Value="ConfigFrame"/> + </Unit6> + <Unit7> + <Filename Value="configframe_with_addons.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="CfgFrame_with_addons"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Frame"/> + <UnitName Value="ConfigFrame_with_Addons"/> + </Unit7> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="bin\$(TargetCPU)-$(TargetOS)\MapViewer_Demo"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CustomOptions Value="-dWITH_ADDONS"/> + <OtherDefines Count="1"> + <Define0 Value="WITH_ADDONS"/> + </OtherDefines> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="4"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + <Item4> + <Name Value="EHTTPClient"/> + </Item4> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpr b/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpr new file mode 100644 index 000000000..f61b7fed5 --- /dev/null +++ b/components/lazmapviewer/examples/fulldemo/mapviewer_demo_with_addons.lpr @@ -0,0 +1,22 @@ +program MapViewer_Demo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}cthreads,{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, + Main, gpslistform, ConfigFrame, configframe_with_addons; + +{$R *.res} + +begin + RequireDerivedFormResource:=True; + Application.Title:='MapViewer_Demo_with_Addons'; + Application.Scaled:=True; + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.CreateForm(TGPSListViewer, GPSListViewer); + Application.Run; +end. +