forked from organicmaps/organicmaps
[Tizen] Add compass to bookmark page.
This commit is contained in:
parent
d082fd471e
commit
01149efe04
4 changed files with 66 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <FUi.h>
|
||||
#include <FUixSensor.h>
|
||||
|
||||
class UserMark;
|
||||
class MapsWithMeForm;
|
||||
|
@ -11,6 +12,7 @@ class BookMarkSplitPanel: public Tizen::Ui::Controls::SplitPanel
|
|||
, public Tizen::Ui::Controls::IListViewItemProviderF
|
||||
, public Tizen::Ui::Controls::IListViewItemEventListener
|
||||
, public Tizen::Ui::ITextEventListener
|
||||
, public Tizen::Uix::Sensor::ISensorEventListener
|
||||
{
|
||||
public:
|
||||
BookMarkSplitPanel();
|
||||
|
@ -62,6 +64,9 @@ public:
|
|||
virtual void OnTextValueChangeCanceled (Tizen::Ui::Control const & source);
|
||||
virtual void OnTextValueChanged (Tizen::Ui::Control const & source);
|
||||
|
||||
// ISensorEventListener
|
||||
virtual void OnDataReceived (Tizen::Uix::Sensor::SensorType sensorType, Tizen::Uix::Sensor::SensorData & sensorData, result r);
|
||||
|
||||
Tizen::Base::String GetHeaderText() const;
|
||||
Tizen::Base::String GetDistanceText() const;
|
||||
Tizen::Base::String GetCountryText() const;
|
||||
|
@ -72,6 +77,8 @@ public:
|
|||
void UpdateState();
|
||||
UserMark const * GetCurMark() const;
|
||||
bool IsBookMark() const;
|
||||
|
||||
void UpdateCompass();
|
||||
private:
|
||||
|
||||
enum EButtons
|
||||
|
@ -105,4 +112,6 @@ private:
|
|||
|
||||
Tizen::Ui::Controls::ListView * m_pList;
|
||||
MapsWithMeForm * m_pMainForm;
|
||||
Tizen::Uix::Sensor::SensorManager m_sensorManager;
|
||||
double m_NorthAzimut;
|
||||
};
|
||||
|
|
|
@ -27,6 +27,7 @@ Tizen::Base::String GetMarkName(UserMark const * pUserMark);
|
|||
Tizen::Base::String GetMarkType(UserMark const * pUserMark);
|
||||
Tizen::Base::String GetMarkCountry(UserMark const * pUserMark);
|
||||
Tizen::Base::String GetDistance(UserMark const * pUserMark);
|
||||
double GetAzimut(UserMark const * pUserMark, double north);
|
||||
|
||||
const wchar_t * GetColorBM(EColor color);
|
||||
const wchar_t * GetColorPPBM(EColor color);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "../../../platform/tizen_utils.hpp"
|
||||
#include "../../../base/logging.hpp"
|
||||
#include "../../../std/sstream.hpp"
|
||||
#include <FUixSensor.h>
|
||||
|
||||
using namespace Tizen::Base;
|
||||
using namespace Tizen::Ui::Controls;
|
||||
|
@ -19,6 +20,7 @@ using namespace Tizen::Ui::Scenes;
|
|||
using namespace Tizen::Graphics;
|
||||
using namespace consts;
|
||||
using namespace bookmark;
|
||||
using namespace Tizen::Uix::Sensor;
|
||||
using Tizen::Base::Collection::ArrayList;
|
||||
|
||||
BookMarkSplitPanel::BookMarkSplitPanel()
|
||||
|
@ -95,6 +97,11 @@ bool BookMarkSplitPanel::Construct(const Tizen::Graphics::FloatRectangle& rect)
|
|||
SetPane(m_pFirstPanel, SPLIT_PANEL_PANE_ORDER_FIRST);
|
||||
SetPane(m_pSecondPanel, SPLIT_PANEL_PANE_ORDER_SECOND);
|
||||
|
||||
m_sensorManager.Construct();
|
||||
if (m_sensorManager.IsAvailable(SENSOR_TYPE_MAGNETIC))
|
||||
m_sensorManager.AddSensorListener(*this, SENSOR_TYPE_MAGNETIC, 50, true);
|
||||
m_NorthAzimut = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -176,8 +183,6 @@ Tizen::Ui::Controls::ListItemBase * BookMarkSplitPanel::CreateSettingsItem (floa
|
|||
pItem->Construct(FloatDimension(itemWidth, settingsItemHeight), LIST_ANNEX_STYLE_NORMAL);
|
||||
|
||||
FloatRectangle imgRect(btwWdth, topHght, imgWdth, imgHght);
|
||||
pItem->AddElement(imgRect, COMPAS_BACKGROUND_IMG, *GetBitmap(IDB_PLACE_PAGE_COMPASS), null, null);
|
||||
pItem->AddElement(imgRect, COMPAS_IMG, *GetBitmap(IDB_PLACE_PAGE_COMPASS_BACKGROUND), null, null);
|
||||
if (IsBookMark())
|
||||
{
|
||||
FloatRectangle colorImgRect(imgRect);
|
||||
|
@ -240,6 +245,7 @@ void BookMarkSplitPanel::UpdateState()
|
|||
int const listSz = IsBookMark() ? allItemsHeight : headerSettingsHeight;
|
||||
m_pList->SetSize(m_pList->GetWidth(), listSz);
|
||||
m_pList->UpdateList();
|
||||
UpdateCompass();
|
||||
m_pButton->SetPosition(btwWdth, listSz + btwWdth);
|
||||
m_pDummyMessageEdit->SetFocus();
|
||||
m_pMessageEdit->SetShowState(IsBookMark());
|
||||
|
@ -354,3 +360,38 @@ void BookMarkSplitPanel::OnTextValueChanged (Tizen::Ui::Control const & source)
|
|||
GetBMMnger().SetBookMarkMessage(m_pMessageEdit->GetText());
|
||||
UpdateState();
|
||||
}
|
||||
|
||||
|
||||
void BookMarkSplitPanel::UpdateCompass()
|
||||
{
|
||||
Tizen::Graphics::Canvas * pCanvas = m_pList->GetCanvasN();
|
||||
if (pCanvas)
|
||||
{
|
||||
pCanvas->FillRectangle(consts::green, Rectangle(2,headerItemHeight + 2, 100,100));
|
||||
Bitmap const * pBTM_Back = GetBitmap(IDB_PLACE_PAGE_COMPASS_BACKGROUND);
|
||||
int imgBackHeighDiv2 = pBTM_Back->GetHeight()/2;
|
||||
Bitmap const * pBTM = GetBitmap(IDB_PLACE_PAGE_COMPASS);
|
||||
int imgHeighDiv2 = pBTM->GetHeight()/2;
|
||||
int centerX = btwWdth + imgHeighDiv2;
|
||||
int centerY = headerItemHeight + btwWdth + imgHeighDiv2;
|
||||
|
||||
|
||||
|
||||
pCanvas->DrawBitmap(Point(centerX - imgBackHeighDiv2, centerY - imgBackHeighDiv2), *pBTM_Back);
|
||||
double dAzimut = GetAzimut(GetCurMark(), m_NorthAzimut);
|
||||
pCanvas->DrawBitmap(Point(centerX, centerY), *pBTM, Point(imgHeighDiv2, imgHeighDiv2), (dAzimut/(2*M_PI))*360);
|
||||
delete pCanvas;
|
||||
}
|
||||
}
|
||||
void BookMarkSplitPanel::OnDataReceived(SensorType sensorType, SensorData & sensorData, result r)
|
||||
{
|
||||
MagneticSensorData & data = static_cast< MagneticSensorData& >(sensorData);
|
||||
m_NorthAzimut = atan2(data.y, data.x) - math::pi;
|
||||
double const pi2 = 2.0*math::pi;
|
||||
if (m_NorthAzimut < 0.0)
|
||||
m_NorthAzimut += pi2;
|
||||
else if (m_NorthAzimut > pi2)
|
||||
m_NorthAzimut -= pi2;
|
||||
|
||||
UpdateCompass();
|
||||
}
|
||||
|
|
|
@ -83,6 +83,19 @@ Tizen::Base::String GetDistance(UserMark const * pUserMark)
|
|||
return dist.c_str();
|
||||
}
|
||||
|
||||
double GetAzimut(UserMark const * pUserMark, double north)
|
||||
{
|
||||
if (!pUserMark)
|
||||
return 0;
|
||||
double lat, lon;
|
||||
GetFramework()->GetCurrentPosition(lat, lon);
|
||||
string dist;
|
||||
double azimut;
|
||||
m2::PointD pt = pUserMark->GetOrg();
|
||||
GetFramework()->GetDistanceAndAzimut(pt, lat, lon, north, dist, azimut);
|
||||
return azimut;
|
||||
}
|
||||
|
||||
bool IsBookMark(UserMark const * pUserMark)
|
||||
{
|
||||
if (!pUserMark)
|
||||
|
|
Loading…
Add table
Reference in a new issue