From b7c2a7a2e8f87bcfa3863efa9eb1a00f48629c76 Mon Sep 17 00:00:00 2001 From: ExMix Date: Thu, 21 May 2015 13:03:18 +0300 Subject: [PATCH] [qt, ios, android] adaptation for new MyPosition controller --- android/jni/com/mapswithme/maps/Framework.cpp | 22 +++++- android/jni/com/mapswithme/maps/Framework.hpp | 9 ++- .../jni/com/mapswithme/maps/LocationState.cpp | 37 +++------- .../com/mapswithme/maps/MwmApplication.cpp | 4 - .../com/mapswithme/maps/LocationState.java | 20 +---- .../src/com/mapswithme/maps/MwmActivity.java | 74 +++++++++++++++---- .../maps/location/LocationPredictor.java | 35 +++------ iphone/Maps/Classes/LocationPredictor.h | 1 + iphone/Maps/Classes/LocationPredictor.mm | 20 ++--- iphone/Maps/Classes/MapViewController.mm | 29 ++++---- qt/draw_widget.cpp | 4 +- qt/draw_widget.hpp | 1 + qt/mainwindow.cpp | 37 +++++----- qt/mainwindow.hpp | 6 +- 14 files changed, 156 insertions(+), 143 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 1daf8687f0..dfed0e3848 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -61,8 +61,9 @@ enum MultiTouchAction }; Framework::Framework() - : m_doLoadState(true), - m_lastCompass(0.0) + : m_doLoadState(true) + , m_lastCompass(0.0) + , m_currentMode(location::MODE_UNKNOWN_POSITION) { ASSERT_EQUAL ( g_framework, 0, () ); g_framework = this; @@ -131,6 +132,12 @@ float Framework::GetBestDensity(int densityDpi) return dens[bestRangeIndex].second; } +void Framework::MyPositionModeChanged(location::EMyPositionMode mode) +{ + if (m_myPositionModeSignal != nullptr) + m_myPositionModeSignal(mode); +} + bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi) { m_contextFactory = make_unique_dp(new AndroidOGLContextFactory(env, jSurface)); @@ -143,6 +150,7 @@ bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi m_work.EnterForeground(); LoadState(); m_work.LoadBookmarks(); + m_work.SetMyPositionModeListener(bind(&Framework::MyPositionModeChanged, this, _1)); return true; } @@ -435,6 +443,16 @@ void Framework::RemoveActiveMapsListener(int slotID) m_javaActiveMapListeners.erase(slotID); } +void Framework::SetMyPositionModeListener(location::TMyPositionModeChanged const & fn) +{ + m_myPositionModeSignal = fn; +} + +location::EMyPositionMode Framework::GetMyPositionMode() +{ + return m_currentMode; +} + ////////////////////////////////////////////////////////////////////////////////////////// void Framework::ItemStatusChanged(int childPosition) { diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index 8cdcbf9b8a..5d2941f167 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -10,6 +10,7 @@ #include "drape/oglcontextfactory.hpp" #include "platform/country_defines.hpp" +#include "platform/location.hpp" #include "geometry/avg_vector.hpp" @@ -55,7 +56,10 @@ namespace android float GetBestDensity(int densityDpi); - bool InitRenderPolicyImpl(int densityDpi, int screenWidth, int screenHeight); + void MyPositionModeChanged(location::EMyPositionMode mode); + + location::TMyPositionModeChanged m_myPositionModeSignal; + location::EMyPositionMode m_currentMode; public: Framework(); @@ -138,6 +142,9 @@ namespace android int AddActiveMapsListener(shared_ptr obj); void RemoveActiveMapsListener(int slotID); + void SetMyPositionModeListener(location::TMyPositionModeChanged const & fn); + location::EMyPositionMode GetMyPositionMode(); + // Fills mapobject's metadata from UserMark void InjectMetadata(JNIEnv * env, jclass clazz, jobject const mapObject, UserMark const * userMark); diff --git a/android/jni/com/mapswithme/maps/LocationState.cpp b/android/jni/com/mapswithme/maps/LocationState.cpp index 50b198880e..0f2940a2c9 100644 --- a/android/jni/com/mapswithme/maps/LocationState.cpp +++ b/android/jni/com/mapswithme/maps/LocationState.cpp @@ -4,60 +4,41 @@ #include "../platform/Platform.hpp" - -///@TODO UVR -//location::State * GetLocationState() -//{ -// return g_framework->NativeFramework()->GetLocationState().get(); -//} - extern "C" { JNIEXPORT void JNICALL Java_com_mapswithme_maps_LocationState_switchToNextMode(JNIEnv * env, jobject thiz) { - ///@TODO UVR - //android::Platform::RunOnGuiThreadImpl(bind(&location::State::SwitchToNextMode, GetLocationState()), false); + g_framework->NativeFramework()->SwitchMyPositionNextMode(); } JNIEXPORT jint JNICALL Java_com_mapswithme_maps_LocationState_getLocationStateMode(JNIEnv * env, jobject thiz) { - ///@TODO UVR - return 0;//GetLocationState()->GetMode(); + return g_framework->GetMyPositionMode(); } - void LocationStateModeChanged(location::State::Mode mode, shared_ptr const & obj) + void LocationStateModeChanged(location::EMyPositionMode mode, shared_ptr const & obj) { JNIEnv * env = jni::GetEnv(); - env->CallVoidMethod(*obj.get(), jni::GetJavaMethodID(env, *obj.get(), "onLocationStateModeChangedCallback", "(I)V"), static_cast(mode)); - } - - JNIEXPORT jint JNICALL - Java_com_mapswithme_maps_LocationState_addLocationStateModeListener(JNIEnv * env, jobject thiz, jobject obj) - { - ///@TODO UVR - return 0;//GetLocationState()->AddStateModeListener(bind(&LocationStateModeChanged, _1, jni::make_global_ref(obj))); + env->CallVoidMethod(*obj.get(), jni::GetJavaMethodID(env, *obj.get(), "onMyPositionModeChangedCallback", "(I)V"), static_cast(mode)); } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_LocationState_removeLocationStateModeListener(JNIEnv * env, jobject thiz, jint slotID) + Java_com_mapswithme_maps_LocationState_setMyPositionModeListener(JNIEnv * env, jobject thiz, jobject obj) { - ///@TODO UVR - //GetLocationState()->RemoveStateModeListener(slotID); + g_framework->SetMyPositionModeListener(bind(&LocationStateModeChanged, _1, jni::make_global_ref(obj))); } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_LocationState_turnOff(JNIEnv * env, jobject thiz) + Java_com_mapswithme_maps_LocationState_removeMyPositionModeListener(JNIEnv * env, jobject thiz, jint slotID) { - ///@TODO UVR - //GetLocationState()->TurnOff(); + g_framework->SetMyPositionModeListener(location::TMyPositionModeChanged()); } JNIEXPORT void JNICALL Java_com_mapswithme_maps_LocationState_invalidatePosition(JNIEnv * env, jobject thiz) { - ///@TODO UVR - //android::Platform::RunOnGuiThreadImpl(bind(&location::State::InvalidatePosition, GetLocationState()), false); + g_framework->NativeFramework()->InvalidateMyPosition(); } } diff --git a/android/jni/com/mapswithme/maps/MwmApplication.cpp b/android/jni/com/mapswithme/maps/MwmApplication.cpp index 93921cb24c..9979c0c9c4 100644 --- a/android/jni/com/mapswithme/maps/MwmApplication.cpp +++ b/android/jni/com/mapswithme/maps/MwmApplication.cpp @@ -4,10 +4,6 @@ #include "../platform/Platform.hpp" -#include "map/information_display.hpp" -#include "map/location_state.hpp" - - extern "C" { JNIEXPORT void JNICALL diff --git a/android/src/com/mapswithme/maps/LocationState.java b/android/src/com/mapswithme/maps/LocationState.java index f2563baca8..6578d102d8 100644 --- a/android/src/com/mapswithme/maps/LocationState.java +++ b/android/src/com/mapswithme/maps/LocationState.java @@ -4,32 +4,20 @@ public enum LocationState { INSTANCE; - // These values should correspond to values of location::State::Mode defined in map/location_state.hpp + /// These values should correspond to values of + /// location::EMyPositionMode defined in platform/location.hpp public static final int UNKNOWN_POSITION = 0x0; public static final int PENDING_POSITION = 0x1; public static final int NOT_FOLLOW = 0x2; public static final int FOLLOW = 0x3; public static final int ROTATE_AND_FOLLOW = 0x4; - public static final int SLOT_UNDEFINED = -1; - public native void switchToNextMode(); public native int getLocationStateMode(); - /* - * Adds listener - * @param l - * @return slotId of added listener - */ - public native int addLocationStateModeListener(Object l); - - /** - * Removes listener with slotId - * - * @param slotId slotId of listener to remove - */ - public native void removeLocationStateModeListener(int slotId); + public native void setMyPositionModeListener(Object l); + public native void removeMyPositionModeListener(); public native void turnOff(); diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 7f374e206c..052f7bafb3 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -117,7 +117,14 @@ public class MwmActivity extends BaseMwmFragmentActivity private PanelAnimator mPanelAnimator; private MytargetHelper mMytargetHelper; - private int mLocationStateModeListenerId = LocationState.SLOT_UNDEFINED; + private boolean mNeedCheckUpdate = true; + + // These flags are initialized to the invalid combination to force update on the first check + // after launching. + // These flags are static because the MwmActivity is recreated while screen orientation changing + // but they shall not be reinitialized on screen orientation changing. + private static boolean sStorageAvailable = false; + private static boolean sStorageWritable = true; private FadeView mFadeView; @@ -166,6 +173,54 @@ public class MwmActivity extends BaseMwmFragmentActivity .putExtra(EXTRA_UPDATE_COUNTRIES, true); } + private void pauseLocation() + { + LocationHelper.INSTANCE.removeLocationListener(this); + // Enable automatic turning screen off while app is idle + Utils.keepScreenOn(false, getWindow()); + mLocationPredictor.pause(); + } + + private void listenLocationUpdates() + { + LocationHelper.INSTANCE.addLocationListener(this); + // Do not turn off the screen while displaying position + Utils.keepScreenOn(true, getWindow()); + mLocationPredictor.resume(); + } + + /** + * Invalidates location state in core. + * Updates location button accordingly. + */ + public void invalidateLocationState() + { + onMyPositionModeChangedCallback(LocationState.INSTANCE.getLocationStateMode()); + LocationState.INSTANCE.invalidatePosition(); + } + + private void checkUserMarkActivation() + { + final Intent intent = getIntent(); + if (intent != null && intent.hasExtra(EXTRA_SCREENSHOTS_TASK)) + { + final String value = intent.getStringExtra(EXTRA_SCREENSHOTS_TASK); + if (value.equals(SCREENSHOTS_TASK_PPP)) + { + final double lat = Double.parseDouble(intent.getStringExtra(EXTRA_LAT)); + final double lon = Double.parseDouble(intent.getStringExtra(EXTRA_LON)); + mFadeView.getHandler().postDelayed(new Runnable() + { + @Override + public void run() + { + Framework.nativeActivateUserMark(lat, lon); + } + }, 1000); + } + } + } + @Override public void onRenderingInitialized() { @@ -685,6 +740,7 @@ public class MwmActivity extends BaseMwmFragmentActivity Toast.makeText(this, R.string.gps_is_disabled_long_text, Toast.LENGTH_LONG).show(); } } + } @Override public void onLocationUpdated(final Location location) @@ -728,22 +784,10 @@ public class MwmActivity extends BaseMwmFragmentActivity // Callback from native location state mode element processing. @SuppressWarnings("unused") - public void onLocationStateModeChangedCallback(final int newMode) - { - runOnUiThread(new Runnable() - { - @Override - public void run() - { - refreshLocationState(newMode); - } - }); - } - - private void refreshLocationState(int newMode) + public void onMyPositionModeChangedCallback(final int newMode) { + mLocationPredictor.myPositionModeChanged(newMode); mMainMenu.getMyPositionButton().update(newMode); - switch (newMode) { case LocationState.UNKNOWN_POSITION: diff --git a/android/src/com/mapswithme/maps/location/LocationPredictor.java b/android/src/com/mapswithme/maps/location/LocationPredictor.java index f94623e4ee..5a548ede7c 100644 --- a/android/src/com/mapswithme/maps/location/LocationPredictor.java +++ b/android/src/com/mapswithme/maps/location/LocationPredictor.java @@ -18,7 +18,6 @@ public class LocationPredictor private Location mLastLocation; private boolean mGeneratePredictions; private int mPredictionCount; - private int mConnectionSlot = LocationState.SLOT_UNDEFINED; public LocationPredictor(Handler handler, LocationHelper.LocationListener listener) { @@ -38,18 +37,25 @@ public class LocationPredictor public void resume() { - mConnectionSlot = LocationState.INSTANCE.addLocationStateModeListener(this); - onLocationStateModeChangedCallback(LocationState.INSTANCE.getLocationStateMode()); + myPositionModeChanged(LocationState.INSTANCE.getLocationStateMode()); } public void pause() { - LocationState.INSTANCE.removeLocationStateModeListener(mConnectionSlot); mGeneratePredictions = false; mLastLocation = null; resetHandler(); } + public void myPositionModeChanged(final int mode) + { + if (mode < LocationState.NOT_FOLLOW) + mLastLocation = null; + + mGeneratePredictions = (mode == LocationState.ROTATE_AND_FOLLOW); + resetHandler(); + } + public void reset(Location location) { if (location.hasBearing() && location.hasSpeed()) @@ -64,27 +70,6 @@ public class LocationPredictor resetHandler(); } - private void onLocationStateModeChangedCallback(final int mode) - { - mHandler.post(new Runnable() - { - @Override - public void run() - { - onLocationStateModeChangedCallbackImpl(mode); - } - }); - } - - private void onLocationStateModeChangedCallbackImpl(int mode) - { - if (mode < LocationState.NOT_FOLLOW) - mLastLocation = null; - - mGeneratePredictions = (mode == LocationState.ROTATE_AND_FOLLOW); - resetHandler(); - } - private boolean isPredict() { return mLastLocation != null && mGeneratePredictions; diff --git a/iphone/Maps/Classes/LocationPredictor.h b/iphone/Maps/Classes/LocationPredictor.h index 53bce91870..4aef44861e 100644 --- a/iphone/Maps/Classes/LocationPredictor.h +++ b/iphone/Maps/Classes/LocationPredictor.h @@ -8,5 +8,6 @@ -(id)initWithObserver:(NSObject *) observer; -(void)reset:(location::GpsInfo const &) info; +-(void)setMode:(location::EMyPositionMode) mode; @end diff --git a/iphone/Maps/Classes/LocationPredictor.mm b/iphone/Maps/Classes/LocationPredictor.mm index 38a210fcb6..1a39793210 100644 --- a/iphone/Maps/Classes/LocationPredictor.mm +++ b/iphone/Maps/Classes/LocationPredictor.mm @@ -4,8 +4,6 @@ #include "base/timer.hpp" -#include "map/location_state.hpp" - namespace { NSTimeInterval const PREDICTION_INTERVAL = 0.2; // in seconds @@ -33,24 +31,18 @@ namespace m_timer = nil; m_gpsInfoIsValid = false; m_generatePredictions = false; - - //@TODO UVR - //m_connectionSlot = GetFramework().GetLocationState()->AddStateModeListener([self](location::State::Mode mode) - //{ - // m_generatePredictions = (mode == location::State::RotateAndFollow); - // if (mode < location::State::NotFollow) - // m_gpsInfoIsValid = false; - - // [self resetTimer]; - //}); } return self; } --(void)dealloc +-(void)setMode:(location::EMyPositionMode) mode { - //GetFramework().GetLocationState()->RemoveStateModeListener(m_connectionSlot); + m_generatePredictions = (mode == location::MODE_ROTATE_AND_FOLLOW); + if (mode < location::MODE_NOT_FOLLOW) + m_gpsInfoIsValid = false; + + [self resetTimer]; } -(void)reset:(location::GpsInfo const &)info diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index dc679db81c..3eb8efedb9 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -169,25 +169,27 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) GetFramework().OnCompassUpdate(info); } -- (void)onLocationStateModeChanged:(location::State::Mode)newMode +- (void)onLocationStateModeChanged:(location::EMyPositionMode)newMode { + [m_predictor setMode:newMode]; + switch (newMode) { - case location::State::UnknownPosition: + case location::MODE_UNKNOWN_POSITION: { self.disableStandbyOnLocationStateMode = NO; [[MapsAppDelegate theApp].m_locationManager stop:self]; break; } - case location::State::PendingPosition: + case location::MODE_PENDING_POSITION: self.disableStandbyOnLocationStateMode = NO; [[MapsAppDelegate theApp].m_locationManager start:self]; break; - case location::State::NotFollow: + case location::MODE_NOT_FOLLOW: self.disableStandbyOnLocationStateMode = NO; break; - case location::State::Follow: - case location::State::RotateAndFollow: + case location::MODE_FOLLOW: + case location::MODE_ROTATE_AND_FOLLOW: self.disableStandbyOnLocationStateMode = YES; break; } @@ -236,8 +238,7 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) - (void)onMyPositionClicked:(id)sender { - ///@TODO UVR - //GetFramework().GetLocationState()->SwitchToNextMode(); + GetFramework().SwitchMyPositionNextMode(); } - (IBAction)zoomInPressed:(id)sender @@ -492,13 +493,6 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) SEL dismissSelector = @selector(dismissPlacePage); PlacePageDismissedFnT dismissFn = (PlacePageDismissedFnT)[self methodForSelector:dismissSelector]; manager.ConnectDismissListener(bind(dismissFn, self, dismissSelector)); - - typedef void (*LocationStateModeFnT)(id, SEL, location::State::Mode); - SEL locationStateModeSelector = @selector(onLocationStateModeChanged:); - LocationStateModeFnT locationStateModeFn = (LocationStateModeFnT)[self methodForSelector:locationStateModeSelector]; - - ///@TODO UVR -// f.GetLocationState()->AddStateModeListener(bind(locationStateModeFn, self, locationStateModeSelector, _1)); m_predictor = [[LocationPredictor alloc] initWithObserver:self]; m_StickyThreshold = 10; @@ -514,6 +508,11 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) f.LoadState(); f.LoadBookmarks(); + using TLocationStateModeFn = void (*)(id, SEL, location::EMyPositionMode); + SEL locationStateModeSelector = @selector(onLocationStateModeChanged:); + TLocationStateModeFn locationStateModeFn = (TLocationStateModeFn)[self methodForSelector:locationStateModeSelector]; + f.SetMyPositionModeListener(bind(locationStateModeFn, self, locationStateModeSelector, _1)); + ///@TODO UVR //f.GetCountryStatusDisplay()->SetDownloadCountryListener([self, &f](storage::TIndex const & idx, int opt) { diff --git a/qt/draw_widget.cpp b/qt/draw_widget.cpp index c1e37346b2..6bda769ba8 100644 --- a/qt/draw_widget.cpp +++ b/qt/draw_widget.cpp @@ -181,6 +181,8 @@ bool IsLocationEmulation(QMouseEvent * e) m_contextFactory = make_unique_dp(new QtOGLContextFactory(this)); CreateEngine(); LoadState(); + + emit EngineCreated(); } } } @@ -318,7 +320,7 @@ bool IsLocationEmulation(QMouseEvent * e) location::GpsInfo info; info.m_latitude = MercatorBounds::YToLat(point.y); info.m_longitude = MercatorBounds::XToLon(point.x); - info.m_horizontalAccuracy = 10.0; + info.m_horizontalAccuracy = 10; info.m_timestamp = QDateTime::currentMSecsSinceEpoch() / 1000.0; m_framework->OnLocationUpdate(info); diff --git a/qt/draw_widget.hpp b/qt/draw_widget.hpp index f00ce69652..b2e1c2db7d 100644 --- a/qt/draw_widget.hpp +++ b/qt/draw_widget.hpp @@ -58,6 +58,7 @@ namespace qt void SetMapStyle(MapStyle mapStyle); void SetRouter(routing::RouterType routerType); + Q_SIGNAL void EngineCreated(); protected: void OnActivateMark(unique_ptr pCopy); diff --git a/qt/mainwindow.cpp b/qt/mainwindow.cpp index a0c7889885..c1d892a1b9 100644 --- a/qt/mainwindow.cpp +++ b/qt/mainwindow.cpp @@ -78,12 +78,7 @@ MainWindow::MainWindow() : m_locationService(CreateDesktopLocationService(*this) w->setMouseTracking(true); setCentralWidget(w); - ///@TODO UVR -// shared_ptr locState = m_pDrawWidget->GetFramework().GetLocationState(); -// locState->AddStateModeListener([this] (location::State::Mode mode) -// { -// LocationStateModeChanged(mode); -// }); + QObject::connect(m_pDrawWidget, SIGNAL(EngineCreated()), this, SLOT(OnEngineCreated())); CreateNavigationBar(); CreateSearchBarAndPanel(); @@ -154,8 +149,6 @@ MainWindow::MainWindow() : m_locationService(CreateDesktopLocationService(*this) #endif // NO_DOWNLOADER m_pDrawWidget->UpdateAfterSettingsChanged(); - ///@TODO UVR - //locState->InvalidatePosition(); } #if defined(Q_WS_WIN) @@ -200,9 +193,9 @@ void MainWindow::LoadState() showMaximized(); } -void MainWindow::LocationStateModeChanged(location::State::Mode mode) +void MainWindow::LocationStateModeChanged(location::EMyPositionMode mode) { - if (mode == location::State::PendingPosition) + if (mode == location::MODE_PENDING_POSITION) { m_locationService->Start(); m_pMyPositionAction->setIcon(QIcon(":/navig64/location-search.png")); @@ -210,7 +203,7 @@ void MainWindow::LocationStateModeChanged(location::State::Mode mode) return; } - if (mode == location::State::UnknownPosition) + if (mode == location::MODE_UNKNOWN_POSITION) m_locationService->Stop(); m_pMyPositionAction->setIcon(QIcon(":/navig64/location.png")); @@ -253,16 +246,11 @@ void MainWindow::CreateNavigationBar() { // add navigation hot keys hotkey_t arr[] = { - { Qt::Key_Left, SLOT(MoveLeft()) }, - { Qt::Key_Right, SLOT(MoveRight()) }, - { Qt::Key_Up, SLOT(MoveUp()) }, - { Qt::Key_Down, SLOT(MoveDown()) }, { Qt::Key_Equal, SLOT(ScalePlus()) }, { Qt::Key_Minus, SLOT(ScaleMinus()) }, { Qt::ALT + Qt::Key_Equal, SLOT(ScalePlusLight()) }, { Qt::ALT + Qt::Key_Minus, SLOT(ScaleMinusLight()) }, - { Qt::Key_A, SLOT(ShowAll()) }, - { Qt::Key_S, SLOT(QueryMaxScaleMode()) } + { Qt::Key_A, SLOT(ShowAll()) } }; for (size_t i = 0; i < ARRAY_SIZE(arr); ++i) @@ -365,9 +353,8 @@ void MainWindow::OnLocationUpdated(location::GpsInfo const & info) void MainWindow::OnMyPosition() { - ///@TODO UVR - //if (m_pMyPositionAction->isEnabled()) - // m_pDrawWidget->GetFramework().GetLocationState()->SwitchToNextMode(); + if (m_pMyPositionAction->isEnabled()) + m_pDrawWidget->GetFramework().SwitchMyPositionNextMode(); } void MainWindow::OnSearchButtonClicked() @@ -384,6 +371,16 @@ void MainWindow::OnSearchButtonClicked() } } +void MainWindow::OnEngineCreated() +{ + m_pDrawWidget->GetFramework().SetMyPositionModeListener([this](location::EMyPositionMode mode) + { + LocationStateModeChanged(mode); + }); + + m_pDrawWidget->GetFramework().InvalidateMyPosition(); +} + void MainWindow::OnPreferences() { PreferencesDialog dlg(this); diff --git a/qt/mainwindow.hpp b/qt/mainwindow.hpp index 2ee9cbcadf..4cc664bdab 100644 --- a/qt/mainwindow.hpp +++ b/qt/mainwindow.hpp @@ -1,6 +1,6 @@ #pragma once -#include "map/location_state.hpp" +#include "platform/location.hpp" #include "platform/location_service.hpp" #include "std/unique_ptr.hpp" @@ -44,7 +44,7 @@ namespace qt void SaveState(); void LoadState(); - void LocationStateModeChanged(location::State::Mode mode); + void LocationStateModeChanged(location::EMyPositionMode mode); protected: void CreatePanelImpl(size_t i, Qt::DockWidgetArea area, QString const & name, @@ -68,5 +68,7 @@ namespace qt void OnAbout(); void OnMyPosition(); void OnSearchButtonClicked(); + + void OnEngineCreated(); }; }