From ed6ee4c3e6d1ed767a61067252efa0d1c3757f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F=20=D0=93=D1=80=D0=B5=D1=87=D1=83?= =?UTF-8?q?=D1=85=D0=B8=D0=BD?= Date: Thu, 31 Dec 2015 13:01:51 +0300 Subject: [PATCH] [ios] Changed place page edit button display logic. --- .../MWMPlacePageOpeningHoursCell.h | 2 +- .../MWMPlacePageOpeningHoursCell.mm | 13 +- .../MWMPlacePageOpeningHoursCell.xib | 1 + .../MWMPlacePageOpeningHoursDayView.mm | 1 - iphone/Maps/Classes/MWMBasePlacePageView.mm | 143 ++++++++++-------- iphone/Maps/Classes/MWMPlacePageEntity.h | 33 ++-- iphone/Maps/Classes/MWMPlacePageEntity.mm | 112 ++++++++------ iphone/Maps/Classes/MWMPlacePageInfoCell.h | 2 +- iphone/Maps/Classes/MWMPlacePageInfoCell.mm | 36 ++--- iphone/Maps/Classes/MapViewController.mm | 2 +- iphone/Maps/Classes/PlacePageInfoCell.xib | 10 +- iphone/Maps/Classes/PlacePageLinkCell.xib | 7 +- 12 files changed, 202 insertions(+), 160 deletions(-) diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.h b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.h index e4f702caee..938f7e328b 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.h @@ -9,7 +9,7 @@ @interface MWMPlacePageOpeningHoursCell : UITableViewCell -- (void)configWithInfo:(NSString *)info delegate:(id)delegate; +- (void)configWithInfo:(NSString *)info editable:(BOOL)editable delegate:(id)delegate; - (CGFloat)cellHeight; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.mm index b1607acce8..3c74e18664 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.mm @@ -19,6 +19,7 @@ using WeekDayView = MWMPlacePageOpeningHoursDayView *; @property (weak, nonatomic) IBOutlet UIView * weekDaysView; @property (weak, nonatomic) IBOutlet UIButton * editButton; @property (weak, nonatomic) IBOutlet UIImageView * expandImage; +@property (weak, nonatomic) IBOutlet UIButton * toggleButton; @property (weak, nonatomic) IBOutlet NSLayoutConstraint * weekDaysViewHeight; @property (nonatomic) CGFloat weekDaysViewEstimatedHeight; @@ -56,8 +57,9 @@ WeekDayView getWeekDayView() ui::TimeTableSet timeTableSet; } -- (void)configWithInfo:(NSString *)info delegate:(id)delegate +- (void)configWithInfo:(NSString *)info editable:(BOOL)editable delegate:(id)delegate { + self.toggleButton.hidden = !editable; self.delegate = delegate; WeekDayView cd = self.currentDay; cd.currentDay = YES; @@ -79,7 +81,8 @@ WeekDayView getWeekDayView() BOOL const isExpanded = delegate.openingHoursCellExpanded; self.middleSeparator.hidden = !isExpanded; self.weekDaysView.hidden = !isExpanded; - self.editButton.hidden = !isExpanded; + self.editButton.hidden = !editable || !isExpanded; + self.expandImage.hidden = !editable; self.expandImage.image = [UIImage imageNamed:isExpanded ? @"ic_arrow_gray_up" : @"ic_arrow_gray_down"]; } else @@ -88,6 +91,7 @@ WeekDayView getWeekDayView() self.middleSeparator.hidden = YES; self.weekDaysView.hidden = YES; self.editButton.hidden = YES; + self.expandImage.hidden = YES; } [cd invalidate]; } @@ -194,7 +198,7 @@ WeekDayView getWeekDayView() if (self.delegate.openingHoursCellExpanded) { MWMPlacePageOpeningHoursDayViewMode const mode = self.currentDay.mode; - if (mode != MWMPlacePageOpeningHoursDayViewModeEmpty) + if (mode != MWMPlacePageOpeningHoursDayViewModeEmpty && !self.toggleButton.hidden) height += self.editButton.height; if (mode == MWMPlacePageOpeningHoursDayViewModeRegular) height += self.weekDaysViewHeight.constant; @@ -206,7 +210,8 @@ WeekDayView getWeekDayView() - (IBAction)toggleButtonTap { - switch (self.currentDay.mode) { + switch (self.currentDay.mode) + { case MWMPlacePageOpeningHoursDayViewModeRegular: case MWMPlacePageOpeningHoursDayViewModeCompatibility: [self.delegate setOpeningHoursCellExpanded:!self.delegate.openingHoursCellExpanded forCell:self]; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.xib b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.xib index 42b7d53e4c..de5bfe668b 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.xib +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursCell.xib @@ -216,6 +216,7 @@ + diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursDayView.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursDayView.mm index c4b349c882..565e6b2dc2 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursDayView.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/PlacePage/Cells/OpeningHours/MWMPlacePageOpeningHoursDayView.mm @@ -148,7 +148,6 @@ self.breakLabel.hidden = !isRegular; self.breaksHolder.hidden = !isRegular; self.closedLabel.hidden = !isRegular; - self.expandImage.hidden = isEmpty; if (isEmpty) self.compatibilityLabel.text = L(@"add_opening_hours"); diff --git a/iphone/Maps/Classes/MWMBasePlacePageView.mm b/iphone/Maps/Classes/MWMBasePlacePageView.mm index b45b5fc3b6..08445d6ead 100644 --- a/iphone/Maps/Classes/MWMBasePlacePageView.mm +++ b/iphone/Maps/Classes/MWMBasePlacePageView.mm @@ -27,8 +27,8 @@ extern CGFloat const kBasePlacePageViewTitleBottomOffset = 2.; @property (weak, nonatomic) MWMPlacePageEntity * entity; @property (weak, nonatomic) IBOutlet MWMPlacePage * ownerPlacePage; -@property (nonatomic) MWMPlacePageBookmarkCell * bookmarkSizingCell; -@property (nonatomic) MWMPlacePageOpeningHoursCell * openingHoursSizingCell; + +@property (nonatomic) NSMutableDictionary * offscreenCells; @property (nonatomic, readwrite) BOOL openingHoursCellExpanded; @@ -242,100 +242,117 @@ extern CGFloat const kBasePlacePageViewTitleBottomOffset = 2.; [self.ownerPlacePage editPlaceTime]; } -#pragma mark - Properties - -- (MWMPlacePageBookmarkCell *)bookmarkSizingCell +- (UITableViewCell *)offscreenCellForIdentifier:(NSString *)reuseIdentifier { - if (!_bookmarkSizingCell) - _bookmarkSizingCell = [[[NSBundle mainBundle] loadNibNamed:kPlacePageBookmarkCellIdentifier - owner:nil - options:nil] firstObject]; - return _bookmarkSizingCell; -} - -- (MWMPlacePageOpeningHoursCell *)openingHoursSizingCell -{ - if (!_openingHoursSizingCell) - _openingHoursSizingCell = - [[[NSBundle mainBundle] loadNibNamed:kPlacePageOpeningHoursCellIdentifier - owner:nil - options:nil] firstObject]; - return _openingHoursSizingCell; + UITableViewCell * cell = self.offscreenCells[reuseIdentifier]; + if (!cell) + { + cell = [[[NSBundle mainBundle] loadNibNamed:reuseIdentifier owner:nil options:nil] firstObject]; + self.offscreenCells[reuseIdentifier] = cell; + } + return cell; } @end @implementation MWMBasePlacePageView (UITableView) +- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 44.0; +} + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { MWMPlacePageEntity * entity = self.entity; - MWMPlacePageMetadataType const currentType = [entity getFeatureType:indexPath.row]; - if (currentType == MWMPlacePageMetadataTypeBookmark) + MWMPlacePageMetadataField const field = [entity getFieldType:indexPath.row]; + UITableViewCell * cell = [self offscreenCellForIdentifier:[self cellIdentifierForField:field]]; + if (field == MWMPlacePageMetadataFieldBookmark) { - [self.bookmarkSizingCell config:self.ownerPlacePage forHeight:YES]; - return self.bookmarkSizingCell.cellHeight; + MWMPlacePageBookmarkCell * tCell = (MWMPlacePageBookmarkCell *)cell; + [tCell config:self.ownerPlacePage forHeight:YES]; + return tCell.cellHeight; } - else if (currentType == MWMPlacePageMetadataTypeOpenHours) + else if (field == MWMPlacePageMetadataFieldOpenHours) { - [self.openingHoursSizingCell configWithInfo:[entity getFeatureValue:currentType] delegate:self]; - return self.openingHoursSizingCell.cellHeight; + MWMPlacePageOpeningHoursCell * tCell = (MWMPlacePageOpeningHoursCell *)cell; + [tCell configWithInfo:[entity getFieldValue:field] + editable:[entity isFieldEditable:field] + delegate:self]; + return tCell.cellHeight; } - else if (currentType == MWMPlacePageMetadataTypeEditButton) + else if (field == MWMPlacePageMetadataFieldEditButton) { return [MWMPlacePageButtonCell height]; } - - CGFloat const defaultCellHeight = 44.; - CGFloat const defaultWidth = tableView.width; - CGFloat const leftOffset = 40.; - CGFloat const rightOffset = 22.; - UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0., 0., defaultWidth - leftOffset - rightOffset, 10.)]; - label.numberOfLines = 0; - label.text = [entity getFeatureValue:currentType]; - [label sizeToFit]; - CGFloat const defaultCellOffset = 24.; - return MAX(label.height + defaultCellOffset, defaultCellHeight); + else + { + MWMPlacePageInfoCell * tCell = (MWMPlacePageInfoCell *)cell; + tCell.currentEntity = self.entity; + [tCell configureWithType:field info:[entity getFieldValue:field]]; + [tCell setNeedsUpdateConstraints]; + [tCell updateConstraintsIfNeeded]; + tCell.bounds = {{}, {CGRectGetWidth(tableView.bounds), CGRectGetHeight(tCell.bounds)}}; + [tCell setNeedsLayout]; + [tCell layoutIfNeeded]; + CGSize const size = [tCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; + return size.height; + } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [self.entity getFeatureTypesCount]; + return [self.entity getFieldsCount]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MWMPlacePageEntity * entity = self.entity; - MWMPlacePageMetadataType const currentType = [entity getFeatureType:indexPath.row]; - if (currentType == MWMPlacePageMetadataTypeBookmark) + MWMPlacePageMetadataField const field = [entity getFieldType:indexPath.row]; + UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentifierForField:field]]; + if (field == MWMPlacePageMetadataFieldBookmark) { - MWMPlacePageBookmarkCell * cell = (MWMPlacePageBookmarkCell *)[tableView dequeueReusableCellWithIdentifier:kPlacePageBookmarkCellIdentifier]; - - [cell config:self.ownerPlacePage forHeight:NO]; - return cell; + [(MWMPlacePageBookmarkCell *)cell config:self.ownerPlacePage forHeight:NO]; } - else if (currentType == MWMPlacePageMetadataTypeOpenHours) + else if (field == MWMPlacePageMetadataFieldOpenHours) { - MWMPlacePageOpeningHoursCell * cell = (MWMPlacePageOpeningHoursCell *) - [tableView dequeueReusableCellWithIdentifier:kPlacePageOpeningHoursCellIdentifier]; - [cell configWithInfo:[entity getFeatureValue:currentType] delegate:self]; - return cell; + [(MWMPlacePageOpeningHoursCell *)cell configWithInfo:[entity getFieldValue:field] + editable:[entity isFieldEditable:field] + delegate:self]; } - else if (currentType == MWMPlacePageMetadataTypeEditButton) + else if (field == MWMPlacePageMetadataFieldEditButton) { - MWMPlacePageButtonCell * cell = (MWMPlacePageButtonCell *)[tableView dequeueReusableCellWithIdentifier:kPlacePageButtonCellIdentifier]; - [cell config:self.ownerPlacePage]; - return cell; + [(MWMPlacePageButtonCell *)cell config:self.ownerPlacePage]; + } + else + { + MWMPlacePageInfoCell * tCell = (MWMPlacePageInfoCell *)cell; + tCell.currentEntity = self.entity; + [tCell configureWithType:field info:[entity getFieldValue:field]]; } - - BOOL const isLinkTypeCell = (currentType == MWMPlacePageMetadataTypePhoneNumber || currentType == MWMPlacePageMetadataTypeEmail || currentType == MWMPlacePageMetadataTypeWebsite || currentType == MWMPlacePageMetadataTypeURL); - NSString * const cellIdentifier = isLinkTypeCell ? kPlacePageLinkCellIdentifier : kPlacePageInfoCellIdentifier; - - MWMPlacePageInfoCell * cell = (MWMPlacePageInfoCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - - cell.currentEntity = self.entity; - [cell configureWithType:currentType info:[entity getFeatureValue:currentType]]; return cell; } +- (NSString *)cellIdentifierForField:(MWMPlacePageMetadataField)field +{ + switch (field) + { + case MWMPlacePageMetadataFieldWiFi: + case MWMPlacePageMetadataFieldCoordinate: + case MWMPlacePageMetadataFieldPostcode: + return kPlacePageInfoCellIdentifier; + case MWMPlacePageMetadataFieldURL: + case MWMPlacePageMetadataFieldWebsite: + case MWMPlacePageMetadataFieldEmail: + case MWMPlacePageMetadataFieldPhoneNumber: + return kPlacePageLinkCellIdentifier; + case MWMPlacePageMetadataFieldOpenHours: + return kPlacePageOpeningHoursCellIdentifier; + case MWMPlacePageMetadataFieldBookmark: + return kPlacePageBookmarkCellIdentifier; + case MWMPlacePageMetadataFieldEditButton: + return kPlacePageButtonCellIdentifier; + } +} + @end diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.h b/iphone/Maps/Classes/MWMPlacePageEntity.h index 73859304de..cfe36dd0bc 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.h +++ b/iphone/Maps/Classes/MWMPlacePageEntity.h @@ -1,24 +1,22 @@ -#import - #include "Framework.h" #include "map/user_mark.hpp" -typedef NS_ENUM (NSUInteger, MWMPlacePageMetadataType) +typedef NS_ENUM(NSUInteger, MWMPlacePageMetadataField) { - MWMPlacePageMetadataTypePostcode, - MWMPlacePageMetadataTypePhoneNumber, - MWMPlacePageMetadataTypeWebsite, - MWMPlacePageMetadataTypeURL, - MWMPlacePageMetadataTypeEmail, - MWMPlacePageMetadataTypeOpenHours, - MWMPlacePageMetadataTypeCoordinate, - MWMPlacePageMetadataTypeWiFi, - MWMPlacePageMetadataTypeBookmark, - MWMPlacePageMetadataTypeEditButton + MWMPlacePageMetadataFieldPostcode, + MWMPlacePageMetadataFieldPhoneNumber, + MWMPlacePageMetadataFieldWebsite, + MWMPlacePageMetadataFieldURL, + MWMPlacePageMetadataFieldEmail, + MWMPlacePageMetadataFieldOpenHours, + MWMPlacePageMetadataFieldCoordinate, + MWMPlacePageMetadataFieldWiFi, + MWMPlacePageMetadataFieldBookmark, + MWMPlacePageMetadataFieldEditButton }; -typedef NS_ENUM (NSUInteger, MWMPlacePageEntityType) +typedef NS_ENUM(NSUInteger, MWMPlacePageEntityType) { MWMPlacePageEntityTypeRegular, MWMPlacePageEntityTypeBookmark, @@ -58,8 +56,9 @@ typedef NS_ENUM (NSUInteger, MWMPlacePageEntityType) - (void)toggleCoordinateSystem; -- (NSUInteger)getFeatureTypesCount; -- (MWMPlacePageMetadataType)getFeatureType:(NSUInteger)index; -- (NSString *)getFeatureValue:(MWMPlacePageMetadataType)type; +- (NSUInteger)getFieldsCount; +- (MWMPlacePageMetadataField)getFieldType:(NSUInteger)index; +- (NSString *)getFieldValue:(MWMPlacePageMetadataField)field; +- (BOOL)isFieldEditable:(MWMPlacePageMetadataField)field; @end diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.mm b/iphone/Maps/Classes/MWMPlacePageEntity.mm index 5e83c7323e..8f94d87a0c 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.mm +++ b/iphone/Maps/Classes/MWMPlacePageEntity.mm @@ -9,25 +9,26 @@ using feature::Metadata; extern NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; -static array const kPatternTypesArray{ - {MWMPlacePageMetadataTypePostcode, MWMPlacePageMetadataTypePhoneNumber, - MWMPlacePageMetadataTypeWebsite, MWMPlacePageMetadataTypeURL, MWMPlacePageMetadataTypeEmail, - MWMPlacePageMetadataTypeOpenHours, MWMPlacePageMetadataTypeWiFi, - MWMPlacePageMetadataTypeCoordinate}}; +static array const kPatternFieldsArray{ + {MWMPlacePageMetadataFieldPostcode, MWMPlacePageMetadataFieldPhoneNumber, + MWMPlacePageMetadataFieldWebsite, MWMPlacePageMetadataFieldURL, MWMPlacePageMetadataFieldEmail, + MWMPlacePageMetadataFieldOpenHours, MWMPlacePageMetadataFieldWiFi, + MWMPlacePageMetadataFieldCoordinate}}; -static map const kMetaTypesMap{ - {Metadata::FMD_URL, MWMPlacePageMetadataTypeURL}, - {Metadata::FMD_WEBSITE, MWMPlacePageMetadataTypeWebsite}, - {Metadata::FMD_PHONE_NUMBER, MWMPlacePageMetadataTypePhoneNumber}, - {Metadata::FMD_OPEN_HOURS, MWMPlacePageMetadataTypeOpenHours}, - {Metadata::FMD_EMAIL, MWMPlacePageMetadataTypeEmail}, - {Metadata::FMD_POSTCODE, MWMPlacePageMetadataTypePostcode}, - {Metadata::FMD_INTERNET, MWMPlacePageMetadataTypeWiFi}}; +static map const kMetaFieldsMap{ + {Metadata::FMD_URL, MWMPlacePageMetadataFieldURL}, + {Metadata::FMD_WEBSITE, MWMPlacePageMetadataFieldWebsite}, + {Metadata::FMD_PHONE_NUMBER, MWMPlacePageMetadataFieldPhoneNumber}, + {Metadata::FMD_OPEN_HOURS, MWMPlacePageMetadataFieldOpenHours}, + {Metadata::FMD_EMAIL, MWMPlacePageMetadataFieldEmail}, + {Metadata::FMD_POSTCODE, MWMPlacePageMetadataFieldPostcode}, + {Metadata::FMD_INTERNET, MWMPlacePageMetadataFieldWiFi}}; @implementation MWMPlacePageEntity { - vector m_types; - map m_values; + vector m_fields; + set m_editableFields; + map m_values; } - (instancetype)initWithUserMark:(UserMark const *)userMark @@ -63,37 +64,37 @@ static map const kMetaTypesMap{ [self configureForBookmark:mark]; break; } - [self addEditableTypes]; - [self sortMeta]; + [self setEditableFields]; + [self sortMetaFields]; } -- (void)sortMeta +- (void)sortMetaFields { - auto begin = kPatternTypesArray.begin(); - auto end = kPatternTypesArray.end(); - sort(m_types.begin(), m_types.end(), [&](MWMPlacePageMetadataType a, MWMPlacePageMetadataType b) + auto begin = kPatternFieldsArray.begin(); + auto end = kPatternFieldsArray.end(); + sort(m_fields.begin(), m_fields.end(), [&](MWMPlacePageMetadataField a, MWMPlacePageMetadataField b) { return find(begin, end, a) < find(begin, end, b); }); } -- (void)addMetaType:(MWMPlacePageMetadataType)type +- (void)addMetaField:(MWMPlacePageMetadataField)field { - if (find(m_types.begin(), m_types.end(), type) == m_types.end()) - m_types.emplace_back(type); + if (find(m_fields.begin(), m_fields.end(), field) == m_fields.end()) + m_fields.emplace_back(field); } -- (void)removeMetaType:(MWMPlacePageMetadataType)type +- (void)removeMetaField:(MWMPlacePageMetadataField)field { - auto it = find(m_types.begin(), m_types.end(), type); - if (it != m_types.end()) - m_types.erase(it); + auto it = find(m_fields.begin(), m_fields.end(), field); + if (it != m_fields.end()) + m_fields.erase(it); } -- (void)addMetaType:(MWMPlacePageMetadataType)type value:(string const &)value +- (void)addMetaField:(MWMPlacePageMetadataField)field value:(string const &)value { - [self addMetaType:type]; - m_values.emplace(type, value); + [self addMetaField:field]; + m_values.emplace(field, value); } - (void)configureForBookmark:(UserMark const *)bookmark @@ -138,7 +139,7 @@ static map const kMetaTypesMap{ { self.title = L(@"my_position"); self.type = MWMPlacePageEntityTypeMyPosition; - [self addMetaType:MWMPlacePageMetadataTypeCoordinate]; + [self addMetaField:MWMPlacePageMetadataFieldCoordinate]; } - (void)configureForApi:(ApiMarkPoint const *)apiMark @@ -146,7 +147,7 @@ static map const kMetaTypesMap{ self.type = MWMPlacePageEntityTypeAPI; self.title = @(apiMark->GetName().c_str()); self.category = @(GetFramework().GetApiDataHolder().GetAppTitle().c_str()); - [self addMetaType:MWMPlacePageMetadataTypeCoordinate]; + [self addMetaField:MWMPlacePageMetadataFieldCoordinate]; } - (void)configureEntityWithMetadata:(Metadata const &)metadata addressInfo:(search::AddressInfo const &)info @@ -210,32 +211,32 @@ static map const kMetaTypesMap{ case Metadata::FMD_OPEN_HOURS: case Metadata::FMD_EMAIL: case Metadata::FMD_POSTCODE: - [self addMetaType:kMetaTypesMap.at(type) value:metadata.Get(type)]; + [self addMetaField:kMetaFieldsMap.at(type) value:metadata.Get(type)]; break; case Metadata::FMD_INTERNET: - [self addMetaType:kMetaTypesMap.at(type) value:L(@"WiFi_available").UTF8String]; + [self addMetaField:kMetaFieldsMap.at(type) value:L(@"WiFi_available").UTF8String]; break; default: break; } } - [self addMetaType:MWMPlacePageMetadataTypeCoordinate]; + [self addMetaField:MWMPlacePageMetadataFieldCoordinate]; } - (void)enableEditing { - [self addMetaType:MWMPlacePageMetadataTypeEditButton]; + [self addMetaField:MWMPlacePageMetadataFieldEditButton]; } - (void)insertBookmarkInTypes { - [self addMetaType:MWMPlacePageMetadataTypeBookmark]; + [self addMetaField:MWMPlacePageMetadataFieldBookmark]; } - (void)removeBookmarkFromTypes { - [self removeMetaType:MWMPlacePageMetadataTypeBookmark]; + [self removeMetaField:MWMPlacePageMetadataFieldBookmark]; } - (void)toggleCoordinateSystem @@ -247,29 +248,42 @@ static map const kMetaTypesMap{ #pragma mark - Editing -- (void)addEditableTypes +- (void)setEditableFields { - // TODO: Add real logic + // TODO: Replace with real array + vector const editableTypes {Metadata::FMD_OPEN_HOURS}; + //osm::Editor::Instance().EditableMetadataForType(<#const FeatureType &feature#>); + for (auto const & type : editableTypes) + { + MWMPlacePageMetadataField uiType = kMetaFieldsMap.at(type); + [self addMetaField:uiType]; + m_editableFields.insert(uiType); + } +} + +- (BOOL)isFieldEditable:(MWMPlacePageMetadataField)field +{ + return m_editableFields.count(field) == 1; } #pragma mark - Getters -- (NSUInteger)getFeatureTypesCount +- (NSUInteger)getFieldsCount { - return m_types.size(); + return m_fields.size(); } -- (MWMPlacePageMetadataType)getFeatureType:(NSUInteger)index +- (MWMPlacePageMetadataField)getFieldType:(NSUInteger)index { - NSAssert(index < [self getFeatureTypesCount], @"Invalid meta index"); - return m_types[index]; + NSAssert(index < [self getFieldsCount], @"Invalid meta index"); + return m_fields[index]; } -- (NSString *)getFeatureValue:(MWMPlacePageMetadataType)type +- (NSString *)getFieldValue:(MWMPlacePageMetadataField)field { - if (type == MWMPlacePageMetadataTypeCoordinate) + if (field == MWMPlacePageMetadataFieldCoordinate) return [self coordinate]; - auto it = m_values.find(type); + auto it = m_values.find(field); return it != m_values.end() ? @(it->second.c_str()) : nil; } diff --git a/iphone/Maps/Classes/MWMPlacePageInfoCell.h b/iphone/Maps/Classes/MWMPlacePageInfoCell.h index f7f533089b..4be5c716cc 100644 --- a/iphone/Maps/Classes/MWMPlacePageInfoCell.h +++ b/iphone/Maps/Classes/MWMPlacePageInfoCell.h @@ -4,7 +4,7 @@ @interface MWMPlacePageInfoCell : MWMTableViewCell -- (void)configureWithType:(MWMPlacePageMetadataType)type info:(NSString *)info; +- (void)configureWithType:(MWMPlacePageMetadataField)type info:(NSString *)info; @property (weak, nonatomic, readonly) IBOutlet UIImageView * icon; @property (weak, nonatomic, readonly) IBOutlet id textContainer; diff --git a/iphone/Maps/Classes/MWMPlacePageInfoCell.mm b/iphone/Maps/Classes/MWMPlacePageInfoCell.mm index 3f5d9c22a8..b715d4365f 100644 --- a/iphone/Maps/Classes/MWMPlacePageInfoCell.mm +++ b/iphone/Maps/Classes/MWMPlacePageInfoCell.mm @@ -16,7 +16,7 @@ @property (weak, nonatomic) IBOutlet UIButton * upperButton; @property (weak, nonatomic) IBOutlet UIImageView * toggleImage; -@property (nonatomic) MWMPlacePageMetadataType type; +@property (nonatomic) MWMPlacePageMetadataField type; @end @@ -29,39 +29,39 @@ [(UITextView *)self.textContainer setTextContainerInset:{.top = 12, 0, 0, 0}]; } -- (void)configureWithType:(MWMPlacePageMetadataType)type info:(NSString *)info; +- (void)configureWithType:(MWMPlacePageMetadataField)type info:(NSString *)info; { NSString * typeName; switch (type) { - case MWMPlacePageMetadataTypeURL: - case MWMPlacePageMetadataTypeWebsite: + case MWMPlacePageMetadataFieldURL: + case MWMPlacePageMetadataFieldWebsite: self.toggleImage.hidden = YES; typeName = @"website"; break; - case MWMPlacePageMetadataTypeEmail: + case MWMPlacePageMetadataFieldEmail: self.toggleImage.hidden = YES; typeName = @"email"; break; - case MWMPlacePageMetadataTypePhoneNumber: + case MWMPlacePageMetadataFieldPhoneNumber: self.toggleImage.hidden = YES; typeName = @"phone_number"; break; - case MWMPlacePageMetadataTypeCoordinate: + case MWMPlacePageMetadataFieldCoordinate: self.toggleImage.hidden = NO; typeName = @"coordinate"; break; - case MWMPlacePageMetadataTypePostcode: + case MWMPlacePageMetadataFieldPostcode: self.toggleImage.hidden = YES; typeName = @"postcode"; break; - case MWMPlacePageMetadataTypeWiFi: + case MWMPlacePageMetadataFieldWiFi: self.toggleImage.hidden = YES; typeName = @"wifi"; break; - case MWMPlacePageMetadataTypeBookmark: - case MWMPlacePageMetadataTypeEditButton: - case MWMPlacePageMetadataTypeOpenHours: + case MWMPlacePageMetadataFieldBookmark: + case MWMPlacePageMetadataFieldEditButton: + case MWMPlacePageMetadataFieldOpenHours: NSAssert(false, @"Incorrect type!"); break; } @@ -106,20 +106,20 @@ { switch (self.type) { - case MWMPlacePageMetadataTypeURL: - case MWMPlacePageMetadataTypeWebsite: + case MWMPlacePageMetadataFieldURL: + case MWMPlacePageMetadataFieldWebsite: [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatOpenSite)]; break; - case MWMPlacePageMetadataTypeEmail: + case MWMPlacePageMetadataFieldEmail: [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatSendEmail)]; break; - case MWMPlacePageMetadataTypePhoneNumber: + case MWMPlacePageMetadataFieldPhoneNumber: [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatCallPhoneNumber)]; break; - case MWMPlacePageMetadataTypeCoordinate: + case MWMPlacePageMetadataFieldCoordinate: [[Statistics instance] logEvent:kStatEventName(kStatPlacePage, kStatToggleCoordinates)]; [self.currentEntity toggleCoordinateSystem]; - [self changeText:[self.currentEntity getFeatureValue:MWMPlacePageMetadataTypeCoordinate]]; + [self changeText:[self.currentEntity getFieldValue:MWMPlacePageMetadataFieldCoordinate]]; break; default: break; diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 43b1dfd26b..a8218a3711 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -802,7 +802,7 @@ typedef NS_ENUM(NSUInteger, UserTouchesAction) self.skipDismissOnViewDisappear = YES; MWMPlacePageEntity * entity = sender; MWMOpeningHoursEditorViewController * dvc = segue.destinationViewController; - dvc.openingHours = [entity getFeatureValue:MWMPlacePageMetadataTypeOpenHours]; + dvc.openingHours = [entity getFieldValue:MWMPlacePageMetadataFieldOpenHours]; } } diff --git a/iphone/Maps/Classes/PlacePageInfoCell.xib b/iphone/Maps/Classes/PlacePageInfoCell.xib index f27a884ab2..b9dc55b5d7 100644 --- a/iphone/Maps/Classes/PlacePageInfoCell.xib +++ b/iphone/Maps/Classes/PlacePageInfoCell.xib @@ -11,7 +11,7 @@ - + @@ -22,9 +22,12 @@