POST
|
Can we add and display Google Map layer in QT/QML apps ? Thanks
... View more
05-20-2015
11:55 PM
|
0
|
1
|
3814
|
POST
|
Lucas, So QT/QML side don't supported to display one of layer (Counties) or don't know what to display from http://giswebservices.massgis.state.ma.us/geoserver/wms? service.Can we display in QT/C++ side same layer(Counties) in http://giswebservices.massgis.state.ma.us/geoserver/wms? service? Thanks
... View more
05-10-2015
04:04 AM
|
0
|
1
|
1149
|
POST
|
I using geoserver wms service in my qt/qml app like http://giswebservices.massgis.state.ma.us/geoserver/wms? but I can't see any layer in map and spatial refrerence is invalid ,but there are not any exception .How can I see this service layer in map? I can use this service from ArcMap when I add as WMS Server from GIS Server.And then I drag and drop one layer(Counties) in map .Here is below pictures: Here is below picture using with WmsDynamicMapServiceLayer in qt/qml app. Here is below console output: Thanks
... View more
05-08-2015
01:05 AM
|
0
|
3
|
5814
|
POST
|
Lucas, I have wms service like http://......./...../wms? Can I use this service in Qt/QML ? İf I can use wms service how can I get layers (Can I get subleyers with using GroupLayerBase and add to the map). Can I change visibility wms service layer's sublayers ? Thanks
... View more
05-04-2015
11:33 PM
|
0
|
3
|
1250
|
POST
|
I solved authenticating problem. I give in credential's username, password. And give url in WmsDynamicMapServiceLayer . I solved authenticating problem but any layer doesn't apear in map. Here is output console below : Starting C:\Users\tkoka\Documents\build-IslemTKGM-Desktop_Qt_5_4_0_MSVC2013_OpenGL_64bit-Debug\debug\IslemTKGM.exe... Cannot retrieve debugging output. QML debugging is enabled. Only use this in a safe environment. Initializing application ArcGIS.Runtime.Plugin: void __cdecl ArcGISRuntimePlugin::registerTypes(const char *) ArcGIS.Runtime ArcGIS.Runtime.Plugin: void __cdecl ArcGISRuntimePlugin::initializeEngine(class QQmlEngine *,const char *) ArcGIS.Runtime ArcGIS.Runtime.Plugin: void __cdecl ArcGISRuntimePlugin::initializeLicense(void) Invalid clientId QVariant(QString, "") status 1 ArcGIS.Runtime.Plugin: void __cdecl ArcGISRuntimePlugin::initializeEngine(class QQmlEngine *,const char *) Setting global image provider QVariant(void*, 0x3bffe70) ArcGIS.Extras.Plugin: void __cdecl ArcGISExtrasPlugin::registerTypes(const char *) ArcGIS.Extras ArcGIS.Extras.Plugin: void __cdecl ArcGISExtrasPlugin::registerTypes(const char *) Registering Singleton Types ArcGIS.Extras.Core: void __cdecl TkTypes::registerTypes(const char *) ArcGIS.Extras ArcGIS.Extras.Plugin: void __cdecl ArcGISExtrasPlugin::initializeEngine(class QQmlEngine *,const char *) ArcGIS.Extras Rendering engine : OpenGL ArcGIS.Runtime.Map: void __cdecl QmlMap::classBegin(void) ArcGIS.Extras.Plugin: class QObject *__cdecl ArcGISExtrasPlugin::systemProvider(class QQmlEngine *,class QJSEngine *) QObject(0x0) ArcGIS.Extras.Core: __cdecl TkSystem::TkSystem(class QObject *) devicePixelRatio 1 ArcGIS.Extras.Core: __cdecl TkSystem::TkSystem(class QObject *) primaryScreen.physicalDotsPerInch 72.0177 ArcGIS.Extras.Core: __cdecl TkSystem::TkSystem(class QObject *) primaryScreen.logicalDotsPerInch 96 ArcGIS.Extras.Core: __cdecl TkSystem::TkSystem(class QObject *) referenceDotsPerInch 96 ArcGIS.Runtime.Plugin: class QObject *__cdecl ArcGISRuntimePlugin::arcGISRuntimeProvider(class QQmlEngine *,class QJSEngine *) QObject(0x0) ArcGIS.Runtime.Core: __cdecl QmlIdentityManager::QmlIdentityManager(class QObject *) QSslSocket: cannot resolve TLSv1_1_client_method QSslSocket: cannot resolve TLSv1_2_client_method QSslSocket: cannot resolve TLSv1_1_server_method QSslSocket: cannot resolve TLSv1_2_server_method QSslSocket: cannot resolve SSL_select_next_proto QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb QSslSocket: cannot resolve SSL_get0_next_proto_negotiated ArcGIS.Runtime.Map: void __cdecl QmlMap::componentComplete(void) ArcGIS.Runtime.Map: void __cdecl QmlMap::componentComplete(void) Adding 2 declared layer(s) int __cdecl main(int,char *[]) ApplicationWindow_QMLTYPE_51_QML_108(0x40b7b00)
... View more
05-04-2015
08:30 AM
|
0
|
5
|
1250
|
POST
|
Here is my code below: // Copyright 2015 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the Sample code usage restrictions document for further information. // import QtQuick 2.0 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.1 import QtQuick.Window 2.0 import ArcGIS.Extras 1.0 import ArcGIS.Runtime 10.25 import ArcGIS.Runtime.Toolkit.Dialogs 1.0 ApplicationWindow { id: appWindow width: 800 height: 600 title: "IslemMWC" property double scaleFactor: System.displayScaleFactor property var serviceLayer Map { id: mainMap anchors.fill: parent focus: true ArcGISTiledMapServiceLayer { url: "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" } } Rectangle { anchors { fill: controlsColumn margins: -10 * scaleFactor } color: "lightgrey" radius: 5 border.color: "black" opacity: 0.77 } Column { id: controlsColumn anchors { left: parent.left top: parent.top margins: 20 * scaleFactor } spacing: 10 Button { id: loadButton text: "Load Layer Service" style: ButtonStyle { label: Text { text: control.text color: "black" horizontalAlignment: Text.AlignHCenter } } onClicked: { loadLayerColumn.visible = true } } Grid { columns: 2 spacing: 10 ExclusiveGroup { id: layersExclusiveGroup } RadioButton { id: dynamicRadioButton text: qsTr("Dynamic Layer") exclusiveGroup: layersExclusiveGroup checked: true style: RadioButtonStyle { label: Text { renderType: Text.NativeRendering verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter font.pixelSize: 14 * scaleFactor color: "black" text: control.text } } } RadioButton { id: featureRadioButton text: qsTr("Feature Layer") exclusiveGroup: layersExclusiveGroup checked: false style: dynamicRadioButton.style } } } Rectangle { color: "lightgrey" radius: 5 border.color: "black" opacity: 0.77 visible: loadLayerColumn.visible anchors { fill: loadLayerColumn margins: -10 * scaleFactor } } ColumnLayout { id: loadLayerColumn anchors { left: parent.left bottom: parent.bottom right: parent.right margins: 20 * scaleFactor } spacing: 10 visible: false Text { text: "Enter the URL for the layer service:" } TextField { id: serviceTextField Layout.fillWidth: true visible: dynamicRadioButton.checked text: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/SaveTheBay/MapServer" style: TextFieldStyle { textColor:"black" } } TextField { id: featureTextField Layout.fillWidth: true visible: !dynamicRadioButton.checked text: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/SaveTheBay/FeatureServer/0" style: serviceTextField.style } Row { spacing: 10 Button { id: okButton text: "Ok" style: loadButton.style onClicked: { messageDialog.text = ""; loadLayerColumn.visible = false; if (dynamicRadioButton.checked == true) { serviceLayer = ArcGISRuntime.createObject("WmsDynamicMapServiceLayer"); serviceLayer.url = serviceTextField.text; } else { var featureServiceTable = ArcGISRuntime.createObject("GeodatabaseFeatureServiceTable"); featureServiceTable.url = featureTextField.text; serviceLayer = ArcGISRuntime.createObject("FeatureLayer"); serviceLayer.featureTable = featureServiceTable; } mainMap.addLayer(serviceLayer); } MessageDialog { id: messageDialog title: "Error" icon: StandardIcon.Warning modality: Qt.WindowModal standardButtons: StandardButton.Ok } Connections { target: serviceLayer onStatusChanged: { if (serviceLayer.status === Enums.LayerStatusErrored) { messageDialog.text += serviceLayer.error; messageDialog.text += " \n"; mainMap.removeLayer(serviceLayer); messageDialog.visible = signInDialog.signIn; loadButton.enabled = true; dynamicRadioButton.enabled = true } } } } Button { text: "Cancel" style: loadButton.style onClicked: loadLayerColumn.visible = false } } } UserCredentialsDialog { id: signInDialog property bool signIn: false title: qsTr("Sign In") username: "user1" password: "user1" onAccepted: { signIn = true; busy = false; signInDialog.close() //taner loadButton.enabled = false; dynamicRadioButton.enabled = false } Component.onCompleted: { signInDialog.visible = false; } } Connections { target: ArcGISRuntime.identityManager onUserCredentialsRequired: { loadButton.enabled = true; dynamicRadioButton.enabled = true; signInDialog.signIn = false; credentials = UserCredentials signInDialog.visible = true; signInDialog.contentItem.height = Math.min(signInDialog.contentItem.screenHeight, signInDialog.contentItem.scaledHeight) signInDialog.contentItem.width = Math.min(signInDialog.contentItem.screenWidth, signInDialog.contentItem.scaledWidth) if(Qt.platform.os !== "ios" && Qt.platform.os != "android") { signInDialog.height = Math.min(signInDialog.contentItem.screenHeight, signInDialog.contentItem.scaledHeight) signInDialog.width = Math.min(signInDialog.contentItem.screenWidth, signInDialog.contentItem.scaledWidth) } // need to wait here for signInDialog to be accepted while (signInDialog.visible) System.wait(200) if (signInDialog.signIn){ credentials.userName = signInDialog.username; credentials.password = signInDialog.password; loadButton.enabled = false; dynamicRadioButton.enabled = false; } } Component.onCompleted: { ArcGISRuntime.identityManager.ignoreSslErrors = true; } } Rectangle { anchors.fill: parent color: "transparent" border { width: 0.5 * scaleFactor color: "black" } } }
... View more
05-03-2015
11:37 PM
|
0
|
6
|
1250
|
POST
|
I want to add wms service layer in map but caused error in layer create.I have give also correct user and password. How can I solve this problem? error is below : ArcGIS.Runtime.Layer: void __cdecl QmlLayer::onLayerCreateError(const class QString &) QmlWmsDynamicMapServiceLayer "" "Authentication required." Thanks
... View more
04-22-2015
07:05 AM
|
0
|
8
|
5592
|
POST
|
How to use and query Web Feature Service (WFS) in QT/QML.Are there any exapmles with using wfs and query features? Thanks
... View more
04-20-2015
04:36 AM
|
0
|
6
|
4274
|
POST
|
I'm using SearchBox in my project from "Geocode online" example .When I creating SearchBox, text imput starting value seems like picture below.How can I change this starting text value or can I add own starting text imput (because my application contains different area not "357 Geary Blvd, San Francisco" ) when create SearchBox in the app ? Thanks.
... View more
04-14-2015
03:57 AM
|
0
|
2
|
3715
|
POST
|
How can we find or download QmlSamplesApp source code for creating moving menus like left side (Category Menu) of QmlSamplesApp's ? Thanks
... View more
04-13-2015
04:55 AM
|
0
|
3
|
3993
|
POST
|
Problem solved when I set symbolid value,line appeared on map.Because symbolid value was null. var feature = ArcGISRuntime.createObject("Feature"); feature.geometry = userPolyline; feature.setAttributeValue("symbolid",'19'); offLineLayer.featureTable.addFeature(feature); Thanks Lucas .
... View more
04-09-2015
03:44 AM
|
0
|
0
|
832
|
POST
|
I updated the GeodatabaseFeatureTable and the GeodatabaseFeatureServiceTable both to 1, but can't create polyline. Thanks.
... View more
04-03-2015
02:25 AM
|
0
|
1
|
832
|
POST
|
Hi, Here is the project below: // Copyright 2015 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the Sample code usage restrictions document for further information. // import QtQuick 2.0 import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.1 import QtQuick.Window 2.0 import ArcGIS.Runtime.Toolkit.Dialogs 1.0 import ArcGIS.Runtime.Toolkit.Controls 1.0 import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 import ArcGIS.Extras 1.0 import ArcGIS.Runtime 10.25 ApplicationWindow { id: appWindow width: 800 height: 600 title: "OfflinePolygonEditing" property double scaleFactor: System.displayScaleFactor property bool firstPoint: true property bool firstLinePoint: true property bool createPoint: false property bool isDone: false property int polyGraphicId property int lineGraphicId property int fontSize: 15 * scaleFactor property bool isOnline: true property string featuresUrl: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Sync/WildfireSync/FeatureServer" property string gdbPath: "~/ArcGIS/Runtime/Data/Test/offlineSample.geodatabase" property var selectedFeatureId: null property var xProp: null property var yProp: null Envelope { id: sfExtent xMin: 1930934.6938406308 //turkey yMin: 3850498.260784086 xMax: 5912392.6567565575 yMax: 5564737.105928443 spatialReference: mainMap.spatialReference } Map { id: mainMap anchors.fill: parent extent: sfExtent focus: true ArcGISTiledMapServiceLayer { url: "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer" } FeatureLayer { id: offLineLayer featureTable: appWindow.isOnline ? featureServiceTable : local selectionColor: "cyan" } GraphicsLayer { id: graphicsLayer } onStatusChanged: { if (status === Enums.MapStatusReady) { } } onMouseClicked: { if (isDone) { return; } if(createPoint) { addLinePoint(mouse.mapPoint); } else { addPoint(mouse.mapPoint); } } } //END MAP GeodatabaseFeatureTable { id: local geodatabase: gdb.valid ? gdb : null featureServiceLayerId: 0 } GeodatabaseFeatureServiceTable { id: featureServiceTable url: featuresUrl + "/1" } ServiceInfoTask { id: serviceInfoTask url: featuresUrl onFeatureServiceInfoStatusChanged:{ if (featureServiceInfoStatus === Enums.FeatureServiceInfoStatusCompleted) { statusText.text = "Servis bilgisi alındı.Çalışma Alanı çizimini yapın"; } else if (featureServiceInfoStatus === Enums.FeatureServiceInfoStatusErrored) { statusText.text = "Error:"; generateButton.enabled = false; cancelButton.text = "Start Over"; } } } Feature { id: featureToEdit } Rectangle { anchors { fill: controlsColumn margins: -10 * scaleFactor } color: "lightgrey" radius: 5 * scaleFactor border.color: "black" opacity: 0.77 MouseArea { anchors.fill: parent onClicked: (mouse.accepted = true) } } Column { id: controlsColumn anchors { left: parent.left top: parent.top margins: 20 * scaleFactor } spacing: 7 Row { id: row spacing: 10 * scaleFactor } Button { id:silButton text: "Çalışma Alanı Sil" enabled: false width: generateButton.width style: ButtonStyle { label: Text { text: control.text color: control.enabled ? "black" : "grey" horizontalAlignment: Text.AlignHCenter } } onClicked: { if (userPolygon.pathCount > 0) userPolygon.removePath(0); isDone = false; firstPoint = true; graphicsLayer.removeAllGraphics(); generateButton.enabled=false; } } Button { id: generateButton text: "Geodatabase Oluştur" enabled: false style: ButtonStyle { label: Text { text: control.text color: control.enabled ? "black" : "grey" horizontalAlignment: Text.AlignHCenter } } onClicked: { generateGeodatabaseParameters.initialize(serviceInfoTask.featureServiceInfo); generateGeodatabaseParameters.extent = userPolygon; generateGeodatabaseParameters.returnAttachments = false; statusText.text = "Starting generate geodatabase task"; geodatabaseSyncTask.generateGeodatabase(generateGeodatabaseParameters, gdbPath); } } Button { id: syncButton text: "Sync" width: generateButton.width enabled: false style: generateButton.style onClicked: { enabled = false; geodatabaseSyncTask.syncGeodatabase(gdb.syncGeodatabaseParameters, gdb); statusText.text = "Starting sync task"; } } Button { id: cancelButton text: "İptal" width: generateButton.width enabled: false style: generateButton.style onClicked: { geodatabaseSyncTask.cancelJob(syncStatusInfo); enabled = false; text = "İptal"; } } Row { id: toggleOnlineOffline spacing: 10 Text { id: onlineStatus text: appWindow.isOnline ? " Online " : " Offline " color: "black" } Switch { id: switchToggle checked: appWindow.isOnline enabled: false onCheckedChanged: { appWindow.isOnline = checked; if (checked === true && Enums.GenerateStatusCompleted) statusText.text = "Switch to Offline Mode to continue editing."; else if (checked === false && Enums.GenerateStatusCompleted) statusText.text = "Select a feature."; } } } } Geodatabase { id: gdb path: geodatabaseSyncTask.geodatabasePath onValidChanged: { if (valid) { var gdbtables = gdb.geodatabaseFeatureTables; for(var i in gdbtables) { console.log (gdbtables.featureServiceLayerName); } } } } GeodatabaseSyncStatusInfo { id: syncStatusInfo } GeodatabaseSyncTask { id: geodatabaseSyncTask url: featuresUrl onGenerateStatusChanged: { if (generateStatus === Enums.GenerateStatusCompleted) { statusText.text = geodatabasePath; cancelButton.enabled = false; generateButton.enabled = false; appWindow.isOnline = false; statusText.text = "Feature Oluştur"; createPoint= true; } else if (generateStatus === GeodatabaseSyncTask.GenerateError) { statusText.text = "Error: " + generateGeodatabaseError.message + " Code= " + generateGeodatabaseError.code.toString() + " " + generateGeodatabaseError.details; generateButton.enabled = false; cancelButton.text = "Start Over"; } } onGeodatabaseSyncStatusInfoChanged: { if (geodatabaseSyncStatusInfo.status === Enums.GeodatabaseStatusUploadingDelta) { var deltaProgress = geodatabaseSyncStatusInfo.deltaUploadProgress/1000; var deltaSize = geodatabaseSyncStatusInfo.deltaSize/1000; statusText.text = geodatabaseSyncStatusInfo.statusString + " " + String(deltaProgress) + " of " + String(deltaSize) + " KBs..."; } else statusText.text = geodatabaseSyncStatusInfo.statusString + "..."; if (geodatabaseSyncStatusInfo.status !== GeodatabaseSyncStatusInfo.Cancelled) cancelButton.enabled = true; syncStatusInfo.json = geodatabaseSyncStatusInfo.json; } onSyncStatusChanged: { featureServiceTable.refreshFeatures(); if (syncStatus === Enums.SyncStatusCompleted) { cancelButton.enabled = false; syncButton.enabled = false; statusText.text = "Sync tamamlandı.Feature editlemeye devam edebilirsin."; switchToggle.enabled = true; } if (syncStatus === Enums.SyncStatusErrored) statusText.text = "Error: " + syncGeodatabaseError.message + " Code= " + syncGeodatabaseError.code.toString() + " " + syncGeodatabaseError.details; } } GenerateGeodatabaseParameters { id: generateGeodatabaseParameters } Rectangle { id: textStatusRectangle anchors { fill: statusText margins: -10 * scaleFactor } visible: statusText.text.length > 0 color: "lightgrey" radius: 5 border.color: "black" opacity: 0.77 } Text { id: statusText anchors { left: parent.left right: parent.right bottom: parent.bottom margins: 20 * scaleFactor } wrapMode: Text.WordWrap color: "black" } Component.onCompleted: { statusText.text = "Getting service info"; serviceInfoTask.fetchFeatureServiceInfo(); } Polygon { id: userPolygon spatialReference: mainMap.spatialReference } Polyline { id: userPolyline spatialReference: mainMap.spatialReference } Graphic { id: redPointGraphic symbol: SimpleMarkerSymbol { color: "red" style: Enums.SimpleMarkerSymbolStyleCircle size: 5 } } Graphic { id: polygonGraphic symbol: SimpleFillSymbol { color: Qt.rgba(0.5, 0, 0.0, 0.25) outline: SimpleLineSymbol { color: "red" style: Enums.SimpleLineSymbolStyleSolid width: 2 } } } Graphic { id: blueLineGraphic symbol: SimpleLineSymbol { color: "blue" style: Enums.SimpleLineSymbolStyleSolid width: 5 } } Graphic { id: bluePointGraphic symbol: SimpleMarkerSymbol { color: "blue" style: Enums.SimpleMarkerSymbolStyleCircle size: 5 } } function addPoint(mapPoint) { var newPoint = redPointGraphic.clone(); newPoint.geometry = mapPoint; graphicsLayer.addGraphic(newPoint); var graphicClone = polygonGraphic.clone(); if (firstPoint) { firstPoint = false; userPolygon.startPath(mapPoint.x, mapPoint.y); graphicClone.geometry = userPolygon; polyGraphicId = graphicsLayer.addGraphic(graphicClone); } else { userPolygon.lineTo(mapPoint.x, mapPoint.y); graphicClone.geometry = userPolygon; graphicsLayer.updateGraphic(polyGraphicId, graphicClone); if (userPolygon.pointCount > 2) { silButton.enabled = true generateButton.enabled = true;//tener ekledi statusText.text = "Geodatabase Oluştur Buttonuna basın";//eski } } } function addLinePoint(mapPoint) { var newPoint = bluePointGraphic.clone(); newPoint.geometry = mapPoint; var graphicClone; graphicsLayer.addGraphic(newPoint); graphicClone = blueLineGraphic.clone(); if (firstLinePoint) { firstLinePoint = false; userPolyline.startPath(mapPoint.x, mapPoint.y); graphicClone.geometry = userPolyline; lineGraphicId = graphicsLayer.addGraphic(graphicClone); } else { userPolyline.lineTo(mapPoint.x, mapPoint.y); graphicClone.geometry = userPolyline; graphicsLayer.updateGraphic(lineGraphicId, graphicClone); loadLayerColumn.visible = true; } } Rectangle { anchors.fill: parent color: "transparent" border { width: 0.5 * scaleFactor color: "black" } } Rectangle { color: "lightgrey" radius: 5 border.color: "black" opacity: 0.77 visible: loadLayerColumn.visible anchors { fill: loadLayerColumn margins: -10 * scaleFactor } } ColumnLayout { id: loadLayerColumn anchors { left: parent.left bottom: parent.bottom right: parent.right margins: 20 * scaleFactor } spacing: 10 visible: false Text { text: "Descrption özellik değerini gir" } TextField { id: featureTextField Layout.fillWidth: true visible:true text: "Özellik Değeri" } Row { spacing: 10 Button { id: okButton text: "Ok" onClicked: { messageDialog.text = ""; loadLayerColumn.visible = false; var feature = ArcGISRuntime.createObject("Feature"); feature.geometry = userPolyline; offLineLayer.featureTable.addFeature(feature); syncButton.enabled = true; statusText.text = "Feature Servise düzenlemeleri kaydetme için Sync butonuna bas"; } MessageDialog { id: messageDialog title: "Error" icon: StandardIcon.Warning modality: Qt.WindowModal standardButtons: StandardButton.Ok } } Button { text: "İptal" onClicked: loadLayerColumn.visible = false } } } }
... View more
04-02-2015
07:45 AM
|
0
|
3
|
832
|
POST
|
I changed my code like your code but polyline cannot created.Below is console output : Thanks.
... View more
04-01-2015
01:01 AM
|
0
|
5
|
832
|
Title | Kudos | Posted |
---|---|---|
1 | 03-02-2015 11:22 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|