diff --git a/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.swift b/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.swift new file mode 100644 index 0000000000..23b5e8357b --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.swift @@ -0,0 +1,33 @@ +class CatalogCategoryCell: UITableViewCell { + + @IBOutlet weak var visibleCheckmark: Checkmark! { + didSet { + visibleCheckmark.offTintColor = .blackHintText() + visibleCheckmark.onTintColor = .linkBlue() + } + } + @IBOutlet weak var titleLabel: UILabel! { + didSet { + titleLabel.font = .regular16() + titleLabel.textColor = .blackPrimaryText() + } + } + @IBOutlet weak var subtitleLabel: UILabel! { + didSet { + subtitleLabel.font = .regular14() + subtitleLabel.textColor = .blackSecondaryText() + } + } + @IBOutlet weak var moreButton: UIButton! + + @IBAction func onVisibleChanged(_ sender: Checkmark) { + } + @IBAction func onMoreButton(_ sender: UIButton) { + } + + func update(with category: MWMCatalogCategory) { + titleLabel.text = category.title + subtitleLabel.text = "\(category.bookmarksCount) places • by \(category.author ?? "")" + visibleCheckmark.isChecked = category.isVisible + } +} diff --git a/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.xib b/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.xib new file mode 100644 index 0000000000..f321e1160f --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/CatalogCategoryCell.xib @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksDataSource.swift b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksDataSource.swift new file mode 100644 index 0000000000..a51813cdf6 --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksDataSource.swift @@ -0,0 +1,17 @@ +class DownloadedBookmarksDataSource { + + private var categories: [MWMCatalogCategory] = [] + var categoriesCount: NSInteger { + get { + return categories.count + } + } + + init() { + categories = MWMBookmarksManager.categoriesFromCatalog() + } + + func category(at index: Int) -> MWMCatalogCategory { + return categories[index] + } +} diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift index 235a2b4b6a..30a0533ed0 100644 --- a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift +++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift @@ -3,27 +3,43 @@ class DownloadedBookmarksViewController: UITableViewController { @IBOutlet weak var topView: UIView! @IBOutlet weak var bottomView: UIView! + let dataSource = DownloadedBookmarksDataSource() + override func viewDidLoad() { super.viewDidLoad() - tableView.tableHeaderView = topView + if dataSource.categoriesCount == 0 { + tableView.tableHeaderView = topView + } tableView.tableFooterView = bottomView + tableView.registerNib(cell: CatalogCategoryCell.self) + tableView.registerNibForHeaderFooterView(BMCCategoriesHeader.self) } override func numberOfSections(in tableView: UITableView) -> Int { - return 0 + return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 0 + return dataSource.categoriesCount } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) - + let cell = tableView.dequeueReusableCell(cell: CatalogCategoryCell.self, indexPath: indexPath) + cell.update(with: dataSource.category(at: indexPath.row)) return cell } + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 48 + } + + override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let headerView = tableView.dequeueReusableHeaderFooterView(BMCCategoriesHeader.self) + headerView.isShowAll = true + headerView.delegate = self + return headerView + } @IBAction func onDownloadBookmarks(_ sender: Any) { if let url = MWMBookmarksManager.catalogFrontendUrl(), @@ -33,3 +49,19 @@ class DownloadedBookmarksViewController: UITableViewController { } } } + +extension DownloadedBookmarksViewController: BMCCategoryCellDelegate { + func visibilityAction(category: BMCCategory) { + + } + + func moreAction(category: BMCCategory, anchor: UIView) { + + } +} + +extension DownloadedBookmarksViewController: BMCCategoriesHeaderDelegate { + func visibilityAction(isShowAll: Bool) { + + } +} diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib index ca3956e6a0..6987c4021a 100644 --- a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib +++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.xib @@ -18,10 +18,10 @@ - + - + @@ -58,7 +58,7 @@ - + @@ -96,7 +96,7 @@ - + diff --git a/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.h b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.h new file mode 100644 index 0000000000..694847b465 --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.h @@ -0,0 +1,8 @@ +#import "MWMCatalogCategory.h" +#include "Framework.h" + +@interface MWMCatalogCategory (Convenience) + +- (instancetype)initWithCategoryData:(kml::CategoryData &)categoryData bookmarksCount:(UInt64)count; + +@end diff --git a/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.mm b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.mm new file mode 100644 index 0000000000..356ecd314b --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory+Convenience.mm @@ -0,0 +1,21 @@ +#import "MWMCatalogCategory+Convenience.h" + +@implementation MWMCatalogCategory (Convenience) + +- (instancetype)initWithCategoryData:(kml::CategoryData &)categoryData bookmarksCount:(UInt64)count { + self = [self init]; + + if (self) + { + self.categoryId = categoryData.m_id; + self.title = @(kml::GetDefaultStr(categoryData.m_name).c_str()); + self.bookmarksCount = count; + self.visible = categoryData.m_visible; + self.author = @(categoryData.m_authorName.c_str()); + self.annotation = @(kml::GetDefaultStr(categoryData.m_annotation).c_str()); + self.detailedAnnotation = @(kml::GetDefaultStr(categoryData.m_description).c_str()); + } + return self; +} + +@end diff --git a/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.h b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.h new file mode 100644 index 0000000000..e27d9d9d71 --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.h @@ -0,0 +1,14 @@ +#import + +@interface MWMCatalogCategory : NSObject + +@property (nonatomic) MWMMarkGroupID categoryId; +@property (copy, nonatomic) NSString * title; +@property (copy, nonatomic) NSString * author; +@property (copy, nonatomic) NSString * annotation; +@property (copy, nonatomic) NSString * detailedAnnotation; +@property (nonatomic) NSInteger bookmarksCount; +@property (nonatomic, getter=isVisible) BOOL visible; + + +@end diff --git a/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.m b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.m new file mode 100644 index 0000000000..6b3ad8a2b0 --- /dev/null +++ b/iphone/Maps/Bookmarks/Catalog/MWMCatalogCategory.m @@ -0,0 +1,5 @@ +#import "MWMCatalogCategory.h" + +@implementation MWMCatalogCategory + +@end diff --git a/iphone/Maps/Bookmarks/Categories/Actions/BMCActionsCreateCell.xib b/iphone/Maps/Bookmarks/Categories/Actions/BMCActionsCreateCell.xib index b409252c6d..9b6d7cb0e8 100644 --- a/iphone/Maps/Bookmarks/Categories/Actions/BMCActionsCreateCell.xib +++ b/iphone/Maps/Bookmarks/Categories/Actions/BMCActionsCreateCell.xib @@ -1,18 +1,18 @@ - + - + - + @@ -43,7 +43,6 @@ - diff --git a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift index 2dba04790c..ca5d92bf51 100644 --- a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift @@ -15,6 +15,7 @@ final class BMCViewController: MWMViewController { BMCActionsCreateCell.self, BMCNotificationsCell.self, ]) + tableView.registerNibForHeaderFooterView(BMCCategoriesHeader.self) } } @@ -24,12 +25,6 @@ final class BMCViewController: MWMViewController { } } - @IBOutlet private var categoriesHeader: BMCCategoriesHeader! { - didSet { - categoriesHeader.delegate = self - } - } - @IBOutlet private var actionsHeader: UIView! @IBOutlet private var notificationsHeader: BMCNotificationsHeader! @@ -249,7 +244,9 @@ extension BMCViewController: UITableViewDelegate { switch viewModel.sectionType(section: section) { case .permissions: return permissionsHeader case .categories: + let categoriesHeader = tableView.dequeueReusableHeaderFooterView(BMCCategoriesHeader.self) categoriesHeader.isShowAll = viewModel.areAllCategoriesInvisible() + categoriesHeader.delegate = self return categoriesHeader case .actions: return actionsHeader case .notifications: return notificationsHeader @@ -292,6 +289,7 @@ extension BMCViewController: BMCPermissionsCellDelegate { extension BMCViewController: BMCCategoryCellDelegate { func visibilityAction(category: BMCCategory) { viewModel.updateCategoryVisibility(category: category) + let categoriesHeader = tableView.headerView(forSection: viewModel.sectionIndex(section: .categories)) as! BMCCategoriesHeader categoriesHeader.isShowAll = viewModel.areAllCategoriesInvisible() } @@ -320,6 +318,7 @@ extension BMCViewController: BMCPermissionsHeaderDelegate { extension BMCViewController: BMCCategoriesHeaderDelegate { func visibilityAction(isShowAll: Bool) { viewModel.updateAllCategoriesVisibility(isShowAll: isShowAll) + let categoriesHeader = tableView.headerView(forSection: viewModel.sectionIndex(section: .categories)) as! BMCCategoriesHeader categoriesHeader.isShowAll = viewModel.areAllCategoriesInvisible() } } diff --git a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.xib b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.xib index 6c07c003ba..a6cf7ef4ab 100644 --- a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.xib +++ b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.xib @@ -13,7 +13,6 @@ - @@ -108,53 +107,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.swift b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.swift index 0ecacfd301..db2ef4c57c 100644 --- a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.swift +++ b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.swift @@ -2,7 +2,7 @@ protocol BMCCategoriesHeaderDelegate { func visibilityAction(isShowAll: Bool) } -final class BMCCategoriesHeader: UIView { +final class BMCCategoriesHeader: UITableViewHeaderFooterView { @IBOutlet private weak var label: UILabel! { didSet { label.font = .bold14() @@ -27,9 +27,9 @@ final class BMCCategoriesHeader: UIView { } } - var delegate: BMCCategoriesHeaderDelegate! + var delegate: BMCCategoriesHeaderDelegate? @IBAction private func buttonAction() { - delegate.visibilityAction(isShowAll: isShowAll) + delegate?.visibilityAction(isShowAll: isShowAll) } } diff --git a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.xib b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.xib new file mode 100644 index 0000000000..64d0fc0b5d --- /dev/null +++ b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoriesHeader.xib @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.swift b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.swift index befc64e4fe..6f78100d42 100644 --- a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.swift +++ b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.swift @@ -36,20 +36,20 @@ final class BMCCategoryCell: MWMTableViewCell { } } - private var delegate: BMCCategoryCellDelegate! + private var delegate: BMCCategoryCellDelegate? - func config(category: BMCCategory, delegate: BMCCategoryCellDelegate) -> UITableViewCell { + func config(category: BMCCategory, delegate: BMCCategoryCellDelegate?) -> UITableViewCell { self.category = category self.delegate = delegate return self } @IBAction private func visibilityAction() { - delegate.visibilityAction(category: category) + delegate?.visibilityAction(category: category) } @IBAction private func moreAction() { - delegate.moreAction(category: category, anchor: more) + delegate?.moreAction(category: category, anchor: more) } } diff --git a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.xib b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.xib index 592f8e25c1..0c70761ebc 100644 --- a/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.xib +++ b/iphone/Maps/Bookmarks/Categories/Categories/BMCCategoryCell.xib @@ -1,11 +1,11 @@ - + - + diff --git a/iphone/Maps/Bookmarks/Categories/Permissions/BMCPermissionsCell.swift b/iphone/Maps/Bookmarks/Categories/Permissions/BMCPermissionsCell.swift index c286d1d36f..53272f54d1 100644 --- a/iphone/Maps/Bookmarks/Categories/Permissions/BMCPermissionsCell.swift +++ b/iphone/Maps/Bookmarks/Categories/Permissions/BMCPermissionsCell.swift @@ -15,7 +15,7 @@ final class BMCPermissionsCell: MWMTableViewCell { button.setTitleColor(UIColor.whitePrimaryText(), for: .normal) button.setTitleColor(UIColor.whitePrimaryTextHighlighted(), for: .highlighted) button.setBackgroundColor(.linkBlue(), for: .normal) - button.titleLabel?.font = .regular14() + button.titleLabel?.font = .medium14() button.layer.cornerRadius = 6 button.clipsToBounds = true } diff --git a/iphone/Maps/Bridging-Header.h b/iphone/Maps/Bridging-Header.h index ef107aaa40..6a6995b116 100644 --- a/iphone/Maps/Bridging-Header.h +++ b/iphone/Maps/Bridging-Header.h @@ -74,3 +74,4 @@ #import "UIFont+MapsMeFonts.h" #import "UIViewController+Navigation.h" #import "WebViewController.h" +#import "MWMCatalogCategory.h" diff --git a/iphone/Maps/Categories/UIButton+RuntimeAttributes.h b/iphone/Maps/Categories/UIButton+RuntimeAttributes.h index 877ee46ca0..a468ff38f8 100644 --- a/iphone/Maps/Categories/UIButton+RuntimeAttributes.h +++ b/iphone/Maps/Categories/UIButton+RuntimeAttributes.h @@ -10,6 +10,8 @@ - (NSString *)backgroundHighlightedColorName; - (void)setBackgroundSelectedColorName:(NSString *)colorName; - (NSString *)backgroundSelectedColorName; +- (void)setTintColorName:(NSString *)colorName; +- (NSString *)tintColorName; - (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state; diff --git a/iphone/Maps/Categories/UIButton+RuntimeAttributes.mm b/iphone/Maps/Categories/UIButton+RuntimeAttributes.mm index 5f13b1d7d2..ccdd9d0446 100644 --- a/iphone/Maps/Categories/UIButton+RuntimeAttributes.mm +++ b/iphone/Maps/Categories/UIButton+RuntimeAttributes.mm @@ -72,6 +72,18 @@ return objc_getAssociatedObject(self, @selector(backgroundSelectedColorName)); } +- (void)setTintColorName:(NSString *)colorName +{ + objc_setAssociatedObject(self, @selector(tintColorName), colorName, + OBJC_ASSOCIATION_COPY_NONATOMIC); + [self setTintColor:[UIColor colorWithName:colorName]]; +} + +- (NSString *)tintColorName +{ + return objc_getAssociatedObject(self, @selector(tintColorName)); +} + - (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state { [self setBackgroundColor:UIColor.clearColor]; diff --git a/iphone/Maps/Categories/UITableView+Cells.swift b/iphone/Maps/Categories/UITableView+Cells.swift index d0e1e55342..29e157dbd4 100644 --- a/iphone/Maps/Categories/UITableView+Cells.swift +++ b/iphone/Maps/Categories/UITableView+Cells.swift @@ -30,4 +30,12 @@ extension UITableView { func dequeueReusableCell(cell: Cell.Type, indexPath: IndexPath) -> Cell where Cell: UITableViewCell { return dequeueReusableCell(withIdentifier: toString(cell), for: indexPath) as! Cell } + + func registerNibForHeaderFooterView(_ view: View.Type) where View: UIView { + register(UINib(view), forHeaderFooterViewReuseIdentifier: toString(view)) + } + + func dequeueReusableHeaderFooterView(_ view: View.Type) -> View where View: UIView { + return dequeueReusableHeaderFooterView(withIdentifier: toString(view)) as! View + } } diff --git a/iphone/Maps/Classes/Components/Checkmark.swift b/iphone/Maps/Classes/Components/Checkmark.swift index cd78df80ce..e9814f211b 100644 --- a/iphone/Maps/Classes/Components/Checkmark.swift +++ b/iphone/Maps/Classes/Components/Checkmark.swift @@ -73,9 +73,9 @@ class Checkmark: UIControl { switch contentHorizontalAlignment { case .right: fallthrough case .trailing: - left = bounds.width - imageView.width + left = floor(bounds.width - imageView.width) case .center: - left = floor(bounds.width - width) / 2 + left = floor((bounds.width - width) / 2) case .fill: width = bounds.width default: @@ -86,9 +86,9 @@ class Checkmark: UIControl { case .top: top = 0 case .bottom: - top = bounds.height - height + top = floor(bounds.height - height) case .center: - top = floor(bounds.height - height) / 2 + top = floor((bounds.height - height) / 2) case .fill: height = bounds.height } diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h index b8f2b85845..2ae6c3f281 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h @@ -1,6 +1,8 @@ #import "MWMBookmarksObserver.h" #import "MWMTypes.h" +@class MWMCatalogCategory; + @interface MWMBookmarksManager : NSObject + (void)addObserver:(id)observer; @@ -48,6 +50,8 @@ + (void)downloadItemWithId:(NSString * _Nonnull)itemId name:(NSString * _Nonnull)name completion:(void (^_Nullable)(NSError * _Nullable error))completion; ++ (BOOL)isCategoryFromCatalog:(MWMMarkGroupID)groupId; ++ (NSArray * _Nonnull)categoriesFromCatalog; - (instancetype)init __attribute__((unavailable("call +manager instead"))); - (instancetype)copy __attribute__((unavailable("call +manager instead"))); diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm index 657103e44a..48054edb0d 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm @@ -1,4 +1,5 @@ #import "MWMBookmarksManager.h" +#import "MWMCatalogCategory+Convenience.h" #import "Statistics.h" #import "SwiftBridge.h" @@ -543,4 +544,25 @@ NSString * const CloudErrorToString(Cloud::SynchronizationResult result) GetFramework().GetBookmarkManager().DownloadFromCatalogAndImport(itemId.UTF8String, name.UTF8String); } ++ (BOOL)isCategoryFromCatalog:(MWMMarkGroupID)groupId { + return GetFramework().GetBookmarkManager().IsCategoryFromCatalog(groupId); +} + ++ (NSArray *)categoriesFromCatalog { + NSMutableArray * result = [NSMutableArray array]; + MWMGroupIDCollection categoryIds = [self groupsIdList]; + [categoryIds enumerateObjectsUsingBlock:^(NSNumber * categoryId, NSUInteger idx, BOOL * stop) { + MWMMarkGroupID catId = categoryId.unsignedIntValue; + if ([self isCategoryFromCatalog:catId]) + { + kml::CategoryData categoryData = GetFramework().GetBookmarkManager().GetCategoryData(categoryId.unsignedIntValue); + UInt64 bookmarksCount = [self getCategoryMarksCount:catId] + [self getCategoryTracksCount:catId]; + MWMCatalogCategory *category = [[MWMCatalogCategory alloc] initWithCategoryData:categoryData + bookmarksCount:bookmarksCount]; + [result addObject:category]; + } + }]; + return [result copy]; +} + @end diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 52623dc6f8..1ecc6ae536 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -468,6 +468,12 @@ B32FE74020D2844600EF7446 /* DownloadedBookmarksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32FE73E20D2844600EF7446 /* DownloadedBookmarksViewController.swift */; }; B32FE74120D2844600EF7446 /* DownloadedBookmarksViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B32FE73F20D2844600EF7446 /* DownloadedBookmarksViewController.xib */; }; B32FE74320D2B09600EF7446 /* CatalogWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32FE74220D2B09600EF7446 /* CatalogWebViewController.swift */; }; + B366130420D5D9BC00E7DC3E /* MWMCatalogCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */; }; + B366130720D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm in Sources */ = {isa = PBXBuildFile; fileRef = B366130620D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm */; }; + B366130A20D5E2E000E7DC3E /* CatalogCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B366130820D5E2E000E7DC3E /* CatalogCategoryCell.swift */; }; + B366130B20D5E2E000E7DC3E /* CatalogCategoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B366130920D5E2E000E7DC3E /* CatalogCategoryCell.xib */; }; + B3E3B4FD20D463B700DA8C13 /* BMCCategoriesHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = B3E3B4FC20D463B700DA8C13 /* BMCCategoriesHeader.xib */; }; + B3E3B50220D485FA00DA8C13 /* DownloadedBookmarksDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3E3B50120D485FA00DA8C13 /* DownloadedBookmarksDataSource.swift */; }; BB25B1A71FB32767007276FA /* transit_colors.txt in Resources */ = {isa = PBXBuildFile; fileRef = BB25B1A51FB32767007276FA /* transit_colors.txt */; }; BB7626B61E85599C0031D71C /* icudt57l.dat in Resources */ = {isa = PBXBuildFile; fileRef = BB7626B41E8559980031D71C /* icudt57l.dat */; }; EBDA7B7820B370B40054165B /* GoogleMobileAds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBDA7B7320B3576D0054165B /* GoogleMobileAds.framework */; }; @@ -1387,6 +1393,14 @@ B32FE73E20D2844600EF7446 /* DownloadedBookmarksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadedBookmarksViewController.swift; sourceTree = ""; }; B32FE73F20D2844600EF7446 /* DownloadedBookmarksViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DownloadedBookmarksViewController.xib; sourceTree = ""; }; B32FE74220D2B09600EF7446 /* CatalogWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogWebViewController.swift; sourceTree = ""; }; + B366130220D5D9BC00E7DC3E /* MWMCatalogCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCatalogCategory.h; sourceTree = ""; }; + B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MWMCatalogCategory.m; sourceTree = ""; }; + B366130520D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MWMCatalogCategory+Convenience.h"; sourceTree = ""; }; + B366130620D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "MWMCatalogCategory+Convenience.mm"; sourceTree = ""; }; + B366130820D5E2E000E7DC3E /* CatalogCategoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogCategoryCell.swift; sourceTree = ""; }; + B366130920D5E2E000E7DC3E /* CatalogCategoryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CatalogCategoryCell.xib; sourceTree = ""; }; + B3E3B4FC20D463B700DA8C13 /* BMCCategoriesHeader.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BMCCategoriesHeader.xib; sourceTree = ""; }; + B3E3B50120D485FA00DA8C13 /* DownloadedBookmarksDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadedBookmarksDataSource.swift; sourceTree = ""; }; BB25B1A51FB32767007276FA /* transit_colors.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = transit_colors.txt; path = ../../data/transit_colors.txt; sourceTree = ""; }; BB7626B41E8559980031D71C /* icudt57l.dat */ = {isa = PBXFileReference; lastKnownFileType = file; name = icudt57l.dat; path = ../../data/icudt57l.dat; sourceTree = ""; }; EBDA7B7320B3576D0054165B /* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = MoPubSDK/AdNetworkSupport/AdMob/SDK/GoogleMobileAds.framework; sourceTree = ""; }; @@ -2343,6 +2357,7 @@ isa = PBXGroup; children = ( 34B846A02029DCC10081ECCD /* BMCCategoriesHeader.swift */, + B3E3B4FC20D463B700DA8C13 /* BMCCategoriesHeader.xib */, 3404F4972028A20D0090E401 /* BMCCategoryCell.swift */, 3404F4982028A20D0090E401 /* BMCCategoryCell.xib */, ); @@ -3136,6 +3151,13 @@ B32FE73E20D2844600EF7446 /* DownloadedBookmarksViewController.swift */, B32FE73F20D2844600EF7446 /* DownloadedBookmarksViewController.xib */, B32FE74220D2B09600EF7446 /* CatalogWebViewController.swift */, + B3E3B50120D485FA00DA8C13 /* DownloadedBookmarksDataSource.swift */, + B366130220D5D9BC00E7DC3E /* MWMCatalogCategory.h */, + B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */, + B366130520D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.h */, + B366130620D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm */, + B366130820D5E2E000E7DC3E /* CatalogCategoryCell.swift */, + B366130920D5E2E000E7DC3E /* CatalogCategoryCell.xib */, ); path = Catalog; sourceTree = ""; @@ -4261,6 +4283,7 @@ 6741A9991BF340DE002C974C /* MWMAlertViewController.xib in Resources */, 6741A9881BF340DE002C974C /* MWMAPIBarView.xib in Resources */, F6E2FE641E097BA00083EBEC /* MWMBookmarkCell.xib in Resources */, + B366130B20D5E2E000E7DC3E /* CatalogCategoryCell.xib in Resources */, 34EE25A61EFA6AD400F870AB /* ViatorElement.xib in Resources */, F6E2FD951E097BA00083EBEC /* MWMBookmarkColorViewController.xib in Resources */, F6E2FD9B1E097BA00083EBEC /* MWMBookmarkTitleCell.xib in Resources */, @@ -4349,6 +4372,7 @@ F6E2FEA61E097BA00083EBEC /* MWMPPView.xib in Resources */, 6741A9811BF340DE002C974C /* MWMRateAlert.xib in Resources */, 6741A9601BF340DE002C974C /* MWMRoutingDisclaimerAlert.xib in Resources */, + B3E3B4FD20D463B700DA8C13 /* BMCCategoriesHeader.xib in Resources */, F6E2FF001E097BA00083EBEC /* MWMSearchCategoryCell.xib in Resources */, F6E2FF331E097BA00083EBEC /* MWMSearchCommonCell.xib in Resources */, F6E2FF061E097BA00083EBEC /* MWMSearchHistoryClearCell.xib in Resources */, @@ -4518,6 +4542,7 @@ 3467CEB2202C6EEE00D3C670 /* BMCNotificationsHeader.swift in Sources */, 34F4072F1E9E1AFF00E57AC0 /* BannersCache.swift in Sources */, 34D3B0211E389D05004100F9 /* MWMEditorAddAdditionalNameTableViewCell.mm in Sources */, + B366130420D5D9BC00E7DC3E /* MWMCatalogCategory.m in Sources */, 3486B51E1E27AD590069C126 /* MWMFrameworkHelper.mm in Sources */, F6E2FE491E097BA00083EBEC /* MWMPlacePageData.mm in Sources */, 348F8A531F863B6100060C2A /* UGCReview.swift in Sources */, @@ -4573,6 +4598,7 @@ 34D3B0301E389D05004100F9 /* MWMEditorCategoryCell.mm in Sources */, F653CE191C71F62700A453F1 /* MWMAddPlaceNavigationBar.mm in Sources */, 340475621E081A4600C92850 /* MWMNetworkPolicy.mm in Sources */, + B366130720D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.mm in Sources */, F6E2FEE51E097BA00083EBEC /* MWMSearchNoResults.mm in Sources */, F6E2FF631E097BA00083EBEC /* MWMTTSLanguageViewController.mm in Sources */, 342EE4121C43DAA7009F6A49 /* MWMAuthorizationWebViewLoginViewController.mm in Sources */, @@ -4610,6 +4636,7 @@ 34BBD6581F826F810070CA50 /* AuthorizationTransitioningManager.swift in Sources */, F6558DA21E642CC0002203AE /* MWMFacilitiesController.mm in Sources */, 34AB664A1FC5AA330078E451 /* RouteManageriPadPresentationController.swift in Sources */, + B366130A20D5E2E000E7DC3E /* CatalogCategoryCell.swift in Sources */, 349D1ACF1E2E325B004A2006 /* MWMBottomMenuCollectionViewCell.mm in Sources */, F6E2FF451E097BA00083EBEC /* SettingsTableViewLinkCell.swift in Sources */, 34C9BD0A1C6DBCDA000DC38D /* MWMNavigationController.mm in Sources */, @@ -4642,6 +4669,7 @@ 3454D7E01E07F045004AF2AD /* UITextField+RuntimeAttributes.mm in Sources */, 347BFA901F27909200E5531F /* MenuArea.swift in Sources */, 343E75981E5B1EE20041226A /* MWMCollectionViewController.mm in Sources */, + B3E3B50220D485FA00DA8C13 /* DownloadedBookmarksDataSource.swift in Sources */, F6E2FEFA1E097BA00083EBEC /* MWMSearchCategoriesManager.mm in Sources */, 34E776141F14B17F003040B3 /* AvailableArea.swift in Sources */, 34AB66081FC5AA320078E451 /* MWMNavigationDashboardManager.mm in Sources */,