Skip to content

Commit 6d24ede

Browse files
authored
Merge pull request #608 from Esri/bri12415/QFuturizePortal
QFuturize toolkit portal API usage
2 parents afcb849 + 4669dee commit 6d24ede

File tree

4 files changed

+33
-35
lines changed

4 files changed

+33
-35
lines changed

uitools/cpp/Esri/ArcGISRuntime/Toolkit/BasemapGalleryController.cpp

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <SpatialReference.h>
3535

3636
// Qt headers
37+
#include <QFuture>
3738
#include <QPersistentModelIndex>
3839
#include <QPointer>
3940

@@ -240,29 +241,29 @@ namespace Esri::ArcGISRuntime::Toolkit {
240241

241242
/*!
242243
\internal
243-
Calls Portal::fetchDeveloperBasemaps on the portal. Note that we do
244-
not call Portal::fetchBasemaps. The former call is for retrieving the modern API-key
244+
Calls Portal::fetchDeveloperBasemapsAsync on the portal. Note that we do
245+
not call Portal::fetchBasemapsAsync. The former call is for retrieving the modern API-key
245246
metered basemaps, while the latter returns older-style basemaps. The latter is required
246247
only when the user applies a custom portal, as it is also the call for retrieving an
247248
enterprises's custom basemaps if set.
248249
*/
249250
void setToDefaultBasemaps(BasemapGalleryController* self, Portal* portal)
250251
{
251-
// For every "discovered" basemap we add it to our gallery.
252-
QObject::connect(
253-
portal, &Portal::developerBasemapsChanged, self, [portal, self]()
254-
{
255-
BasemapListModel* basemaps = portal->developerBasemaps();
256-
257-
sortBasemapsAndAddToGallery(self, basemaps);
258-
});
259-
260252
// Load the portal and kick-off the group discovery.
261-
QObject::connect(portal, &Portal::doneLoading, self, [portal](Error e)
253+
QObject::connect(portal, &Portal::doneLoading, self, [portal, self](Error e)
262254
{
263255
if (!e.isEmpty())
264256
return;
265-
portal->fetchDeveloperBasemaps();
257+
258+
portal->fetchDeveloperBasemapsAsync().then(
259+
[portal, self]()
260+
{
261+
// Sort and append the basemaps to the gallery.
262+
BasemapListModel* basemaps = portal->developerBasemaps();
263+
sortBasemapsAndAddToGallery(self, basemaps);
264+
// Notify the demo that the basemaps have changed.
265+
emit self->basemapsChanged();
266+
});
266267
});
267268
portal->load();
268269
}
@@ -411,7 +412,7 @@ namespace Esri::ArcGISRuntime::Toolkit {
411412
\brief Sets the current portal. This resets the gallery.
412413
413414
When \a portal is set, the basemaps of the Portal
414-
are fetched via \c{Portal::fetchBasemaps}.
415+
are fetched via \c{Portal::fetchBasemapsAsync}.
415416
416417
This is useful for displaying an organization's basemaps or to display a gallery of the old-style basemaps
417418
(which do not require an API key or named user.)
@@ -457,13 +458,13 @@ namespace Esri::ArcGISRuntime::Toolkit {
457458
}
458459
else
459460
{
460-
connect(m_portal, &Portal::basemapsChanged, this, [this]
461-
{
462-
BasemapListModel* basemaps = m_portal->basemaps();
463-
464-
sortBasemapsAndAddToGallery(this, basemaps);
465-
});
466-
m_portal->fetchBasemaps();
461+
m_portal->fetchBasemapsAsync().then(
462+
[this]()
463+
{
464+
BasemapListModel* basemaps = m_portal->basemaps();
465+
sortBasemapsAndAddToGallery(this, basemaps);
466+
emit basemapsChanged();
467+
});
467468
}
468469
});
469470
}

uitools/cpp/Esri/ArcGISRuntime/Toolkit/BasemapGalleryController.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ namespace Esri::ArcGISRuntime::Toolkit {
7272
signals:
7373
void geoModelChanged();
7474
void portalChanged();
75+
void basemapsChanged();
7576
void currentBasemapChanged();
7677

7778
private:

uitools/examples/cpp_quick/src/demos/BasemapGalleryDemo.cpp

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,17 @@ BasemapGalleryDemo::BasemapGalleryDemo(QObject* parent) :
3333
auto portal = m_controller->portal();
3434
// Once the portal has loaded up basemaps. Choose the first available basemap from the model
3535
// and apply it to our active view.
36-
connect(portal, &Portal::developerBasemapsChanged, this,
36+
connect(m_controller, &Toolkit::BasemapGalleryController::basemapsChanged, this,
3737
[this, portal]
3838
{
39-
if (portal->developerBasemaps()->size() > 0)
40-
{
41-
auto basemap = portal->developerBasemaps()->at(0);
42-
if (geoView()->geoViewType() == GeoViewType::MapView)
43-
{
44-
setGeoModel(new Map(basemap, this));
45-
}
46-
else if (geoView()->geoViewType() == GeoViewType::SceneView)
47-
{
48-
setGeoModel(new Scene(basemap, this));
49-
}
50-
}
39+
if (!portal->developerBasemaps() || portal->developerBasemaps()->isEmpty())
40+
return;
41+
42+
auto basemap = portal->developerBasemaps()->at(0);
43+
if (geoView()->geoViewType() == GeoViewType::MapView)
44+
setGeoModel(new Map(basemap, this));
45+
else if (geoView()->geoViewType() == GeoViewType::SceneView)
46+
setGeoModel(new Scene(basemap, this));
5147
});
5248
}
5349

uitools/import/Esri/ArcGISRuntime/Toolkit/BasemapGallery.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Pane {
7777
/*!
7878
\qmlproperty Portal portal
7979
\brief The \c Portal contains basemaps which will be fetched and displayed in the gallery if applicable.
80-
When a valid Portal is set then `Portal.fetchBasemaps` is immediately called.
80+
When a valid Portal is set then `Portal.fetchBasemapsAsync` is immediately called.
8181
8282
Note: Changing the current active portal will reset the contents of the gallery.
8383
*/

0 commit comments

Comments
 (0)