blob: 526c08af73a3ebeae906475b24f6800c15b62985 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#pragma once
#include "indexer/feature_data.hpp"
#include "indexer/feature_decl.hpp"
#include "indexer/feature_meta.hpp"
#include "indexer/map_object.hpp"
#include "geometry/latlon.hpp"
#include "geometry/mercator.hpp"
#include "coding/multilang_utf8_string.hpp"
#include "std/vector.hpp"
namespace osm
{
/// Holds information to construct editor's UI.
struct EditableProperties
{
EditableProperties() = default;
EditableProperties(vector<feature::Metadata::EType> const & metadata,
bool name, bool address)
: m_name(name),
m_address(address),
m_metadata(metadata)
{
}
bool m_name = false;
/// If true, enables editing of house number, street address and post code.
bool m_address = false;
vector<feature::Metadata::EType> m_metadata;
bool IsEditable() const { return m_name || m_address || !m_metadata.empty(); }
};
struct LocalizedName
{
// m_code, m_lang and m_langName are defined in StringUtf8Multilang.
int8_t const m_code;
// Non-owning pointers to internal static char const * array.
char const * const m_lang;
char const * const m_langName;
string const m_name;
};
class EditableMapObject : public MapObject
{
public:
bool IsNameEditable() const;
bool IsAddressEditable() const;
vector<Props> GetEditableProperties() const;
// TODO(AlexZ): Remove this method and use GetEditableProperties() in UI.
vector<feature::Metadata::EType> const & GetEditableFields() const;
StringUtf8Multilang const & GetName() const;
vector<LocalizedName> GetLocalizedNames() const;
string const & GetStreet() const;
vector<string> const & GetNearbyStreets() const;
string const & GetHouseNumber() const;
string GetPostcode() const;
string GetWikipedia() const;
void SetEditableProperties(osm::EditableProperties const & props);
// void SetFeatureID(FeatureID const & fid);
void SetName(StringUtf8Multilang const & name);
void SetName(string const & name, int8_t langCode = StringUtf8Multilang::kDefaultCode);
void SetMercator(m2::PointD const & center);
void SetType(uint32_t featureType);
void SetID(FeatureID const & fid);
// void SetTypes(feature::TypesHolder const & types);
void SetStreet(string const & street);
void SetNearbyStreets(vector<string> const & streets);
void SetHouseNumber(string const & houseNumber);
void SetPostcode(string const & postcode);
void SetPhone(string const & phone);
void SetFax(string const & fax);
void SetEmail(string const & email);
void SetWebsite(string const & website);
void SetInternet(Internet internet);
void SetStars(int stars);
void SetOperator(string const & op);
void SetElevation(double ele);
void SetWikipedia(string const & wikipedia);
void SetFlats(string const & flats);
void SetBuildingLevels(string const & buildingLevels);
/// @param[in] cuisine is a vector of osm cuisine ids.
void SetCuisines(vector<string> const & cuisine);
// TODO(yunikkk): Refactor out this method in jni, because it lacks possible validation.
void SetRawOSMCuisines(string const & cuisine);
void SetOpeningHours(string const & openingHours);
private:
string m_houseNumber;
string m_street;
vector<string> m_nearbyStreets;
EditableProperties m_editableProperties;
};
} // namespace osm
|