[ios] add info section to bookmark list screen

This commit is contained in:
Alexey Belousov 2018-06-20 17:01:41 +03:00 committed by Vlad Mihaylenko
parent 98f8e50eba
commit b226126a4e
7 changed files with 272 additions and 51 deletions

View file

@ -5,6 +5,7 @@
#import "MWMLocationHelpers.h"
#import "MWMLocationObserver.h"
#import "MWMSearchManager.h"
#import "MWMCategoryInfoCell.h"
#import "SwiftBridge.h"
#include "Framework.h"
@ -18,8 +19,9 @@
#define EMPTY_SECTION -666
@interface BookmarksVC() <MWMLocationObserver>
@interface BookmarksVC() <MWMLocationObserver, MWMCategoryInfoCellDelegate>
{
int m_infoSection;
int m_trackSection;
int m_bookmarkSection;
int m_numberOfSections;
@ -68,7 +70,7 @@
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0)
if (section == m_infoSection)
return 1;
else if (section == m_trackSection)
return GetFramework().GetBookmarkManager().GetTrackIds(m_categoryId).size();
@ -78,16 +80,10 @@
return 0;
}
- (void)onVisibilitySwitched:(UISwitch *)sender
{
[Statistics logEvent:kStatEventName(kStatBookmarks, kStatToggleVisibility)
withParameters:@{kStatValue : sender.on ? kStatVisible : kStatHidden}];
auto & bmManager = GetFramework().GetBookmarkManager();
bmManager.GetEditSession().SetIsVisible(m_categoryId, sender.on);
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if (section == m_infoSection)
return L(@"placepage_place_description");
if (section == m_trackSection)
return L(@"tracks");
if (section == m_bookmarkSection)
@ -105,22 +101,19 @@
UITableViewCell * cell = nil;
// First section, contains info about current set
if (indexPath.section == 0)
if (indexPath.section == m_infoSection)
{
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksVCSetVisibilityCell"];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"BookmarksVCSetVisibilityCell"];
cell.textLabel.text = L(@"visible");
cell.accessoryView = [[UISwitch alloc] init];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
UISwitch * sw = (UISwitch *)cell.accessoryView;
sw.on = bmManager.IsVisible(m_categoryId);
sw.onTintColor = [UIColor linkBlue];
[sw addTarget:self action:@selector(onVisibilitySwitched:) forControlEvents:UIControlEventValueChanged];
cell = [tableView dequeueReusableCellWithCellClass:MWMCategoryInfoCell.class indexPath:indexPath];
MWMCategoryInfoCell * infoCell = (MWMCategoryInfoCell * )cell;
NSString * title = @(bmManager.GetCategoryName(m_categoryId).c_str());
auto categoryData = bmManager.GetCategoryData(m_categoryId);
NSString * author = [NSString stringWithCoreFormat:L(@"author_name_by_prefix")
arguments:@[@(categoryData.m_authorName.c_str())]];
NSString * info = @(kml::GetDefaultStr(categoryData.m_description).c_str());
NSString * shortInfo = @(kml::GetDefaultStr(categoryData.m_annotation).c_str());
[infoCell updateWithTitle:title author:author info:info shortInfo:shortInfo];
infoCell.delegate = self;
}
else if (indexPath.section == m_trackSection)
{
cell = [tableView dequeueReusableCellWithIdentifier:@"TrackCell"];
@ -187,15 +180,7 @@
auto & bmManager = f.GetBookmarkManager();
bool const categoryExists = bmManager.HasBmCategory(m_categoryId);
ASSERT(categoryExists, ("Nonexistent category"));
if (indexPath.section == 0)
{
if (indexPath.row == 0)
{
// Edit name
// @TODO
}
}
else if (indexPath.section == m_trackSection)
if (indexPath.section == m_trackSection)
{
if (categoryExists)
{
@ -230,7 +215,8 @@
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == m_trackSection || indexPath.section == m_bookmarkSection)
if (!GetFramework().GetBookmarkManager().IsCategoryFromCatalog(m_categoryId) &&
(indexPath.section == m_trackSection || indexPath.section == m_bookmarkSection))
return YES;
return NO;
}
@ -271,6 +257,28 @@
}
}
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
header.textLabel.textColor = [UIColor blackSecondaryText];
header.textLabel.font = [UIFont medium14];
}
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == m_infoSection)
return nil;
return indexPath;
}
#pragma mark - MWMCategoryInfoCellDelegate
- (void)categoryInfoCellDidPressMore:(MWMCategoryInfoCell *)cell {
[self.tableView beginUpdates];
cell.expanded = YES;
[self.tableView endUpdates];
}
#pragma mark - MWMLocationObserver
- (void)onLocationUpdate:(location::GpsInfo const &)info
@ -302,13 +310,19 @@
//*********** End of Location manager callbacks ********************
//******************************************************************
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerWithCellClass:MWMCategoryInfoCell.class];
}
- (void)viewWillAppear:(BOOL)animated
{
[MWMLocationManager addObserver:self];
// Display Edit button only if table is not empty
auto & bmManager = GetFramework().GetBookmarkManager();
if (bmManager.HasBmCategory(m_categoryId)
if (bmManager.HasBmCategory(m_categoryId) && !bmManager.IsCategoryFromCatalog(m_categoryId)
&& (bmManager.GetUserMarkIds(m_categoryId).size() + bmManager.GetTrackIds(m_categoryId).size()))
self.navigationItem.rightBarButtonItem = self.editButtonItem;
else
@ -350,16 +364,11 @@
- (void)calculateSections
{
int index = 1;
int index = 0;
auto & bmManager = GetFramework().GetBookmarkManager();
if (bmManager.GetTrackIds(m_categoryId).size())
m_trackSection = index++;
else
m_trackSection = EMPTY_SECTION;
if (bmManager.GetUserMarkIds(m_categoryId).size())
m_bookmarkSection = index++;
else
m_bookmarkSection = EMPTY_SECTION;
m_infoSection = bmManager.IsCategoryFromCatalog(m_categoryId) ? index++ : EMPTY_SECTION;
m_trackSection = bmManager.GetTrackIds(m_categoryId).size() ? index++ : EMPTY_SECTION;
m_bookmarkSection = bmManager.GetUserMarkIds(m_categoryId).size() ? index ++ : EMPTY_SECTION;
m_numberOfSections = index;
}

View file

@ -48,6 +48,15 @@ class DownloadedBookmarksViewController: UITableViewController {
return headerView
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let category = dataSource.category(at: indexPath.row)
if let bmViewController = BookmarksVC(category: category.categoryId) {
MapViewController.topViewController().navigationController?.pushViewController(bmViewController,
animated: true)
}
}
@IBAction func onDownloadBookmarks(_ sender: Any) {
if let url = MWMBookmarksManager.catalogFrontendUrl(),
let webViewController = CatalogWebViewController(url: url, andTitleOrNil: L("routes_and_bookmarks")) {

View file

@ -36,7 +36,7 @@
<rect key="frame" x="16" y="16" width="343" height="44"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="I5l-6h-e83"/>
<constraint firstAttribute="height" priority="750" constant="44" id="I5l-6h-e83"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<state key="normal" title="DOWNLOAD BOOKMARKS">
@ -70,11 +70,11 @@
<point key="canvasLocation" x="483" y="492"/>
</view>
<view contentMode="scaleToFill" id="EF0-Bq-c6F">
<rect key="frame" x="0.0" y="0.0" width="375" height="347"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="349"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="img_empty_bookmarks" translatesAutoresizingMaskIntoConstraints="NO" id="ahy-M3-meH">
<rect key="frame" x="87" y="40" width="200" height="200"/>
<rect key="frame" x="87.5" y="40" width="200" height="200"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Download new places" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="13b-uj-bGK">
<rect key="frame" x="16" y="256" width="343" height="24"/>
@ -85,8 +85,8 @@
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="cached_bookmarks_placeholder_title"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1gY-vv-QfN">
<rect key="frame" x="16" y="288" width="343" height="50.5"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="TopLeft" horizontalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1gY-vv-QfN">
<rect key="frame" x="16" y="288" width="343" height="53"/>
<string key="text">Press the button to download thousands of intresting places and routes created by MAPS.ME users. You will need the internet connection.</string>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" white="0.0" alpha="0.53735017123287676" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -110,7 +110,7 @@
</constraints>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<viewLayoutGuide key="safeArea" id="jiO-QA-gWD"/>
<point key="canvasLocation" x="450.5" y="157.5"/>
<point key="canvasLocation" x="450.5" y="158.5"/>
</view>
</objects>
<resources>

View file

@ -0,0 +1,17 @@
#import <UIKit/UIKit.h>
@class MWMCategoryInfoCell;
@protocol MWMCategoryInfoCellDelegate
- (void)categoryInfoCellDidPressMore:(MWMCategoryInfoCell *)cell;
@end
@interface MWMCategoryInfoCell : UITableViewCell
@property (nonatomic) BOOL expanded;
@property (weak, nonatomic) id<MWMCategoryInfoCellDelegate> delegate;
- (void)updateWithTitle:(NSString *)title
author:(NSString *)author
info:(NSString *)info
shortInfo:(NSString *)shortInfo;
@end

View file

@ -0,0 +1,80 @@
#import "MWMCategoryInfoCell.h"
@interface MWMCategoryInfoCell()
@property (weak, nonatomic) IBOutlet UILabel * titleLabel;
@property (weak, nonatomic) IBOutlet UILabel * authorLabel;
@property (weak, nonatomic) IBOutlet UILabel * infoLabel;
@property (weak, nonatomic) IBOutlet UIButton *moreButton;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *infoToBottomConstraint;
@property (copy, nonatomic) NSString * info;
@property (copy, nonatomic) NSString * shortInfo;
@end
@implementation MWMCategoryInfoCell
- (void)awakeFromNib {
[super awakeFromNib];
self.titleLabel.text = nil;
self.authorLabel.text = nil;
self.infoLabel.text = nil;
}
- (void)setExpanded:(BOOL)expanded
{
_expanded = expanded;
if (self.shortInfo.length > 0 && self.info.length > 0)
self.infoLabel.text = expanded ? self.info : self.shortInfo;
else
self.infoLabel.numberOfLines = expanded ? 0 : 2;
self.infoToBottomConstraint.active = expanded;
self.moreButton.hidden = expanded;
}
- (void)updateWithTitle:(NSString *)title
author:(NSString *)author
info:(NSString *)info
shortInfo:(NSString *)shortInfo
{
self.titleLabel.text = title;
self.authorLabel.text = author;
if (info.length > 0 && shortInfo.length > 0)
{
self.info = info;
self.shortInfo = shortInfo;
self.infoLabel.text = shortInfo;
self.infoLabel.numberOfLines = 0;
}
else if (info.length > 0 || shortInfo.length > 0)
{
self.infoLabel.text = info.length > 0 ? info : shortInfo;
}
else
{
self.expanded = YES;
}
}
- (void)prepareForReuse
{
[super prepareForReuse];
self.titleLabel.text = nil;
self.authorLabel.text = nil;
self.infoLabel.text = nil;
self.expanded = NO;
self.info = nil;
self.shortInfo = nil;
self.delegate = nil;
}
- (IBAction)onMoreButton:(UIButton *)sender
{
[self.delegate categoryInfoCellDidPressMore:self];
}
@end

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="TopLeft" selectionStyle="none" indentationWidth="10" rowHeight="120" id="KGk-i7-Jjw" customClass="MWMCategoryInfoCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="120"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="TopLeft" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="320" height="119.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="TopLeft" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="My 5-days route to the USA" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Sb-Xn-590">
<rect key="frame" x="16" y="11" width="288" height="17"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
<nil key="textColor"/>
<color key="highlightedColor" white="0.0" alpha="0.86847174657534243" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="TopLeft" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="by Eugene Lisovskiy" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mV8-w9-Csf">
<rect key="frame" x="16" y="32" width="288" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<color key="highlightedColor" white="0.0" alpha="0.38184931506849318" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="TopLeft" horizontalHuggingPriority="251" verticalCompressionResistancePriority="250" text="Completed in 1926, iconic Route 66 connected Chicago and Los Angeles across the heartland of" textAlignment="natural" lineBreakMode="clip" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="REU-RG-LGL">
<rect key="frame" x="16" y="55" width="288" height="33.5"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<color key="highlightedColor" white="0.0" alpha="0.8652878852739726" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
</userDefinedRuntimeAttributes>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hdk-zR-sUE">
<rect key="frame" x="16" y="88.5" width="45" height="20"/>
<constraints>
<constraint firstAttribute="height" priority="750" constant="20" id="HMg-Nx-kYJ"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<state key="normal" title="...more"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="linkBlue"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="onMoreButton:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="FBX-DJ-aPn"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="2Sb-Xn-590" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="11" id="06s-Nb-idM"/>
<constraint firstItem="hdk-zR-sUE" firstAttribute="top" secondItem="REU-RG-LGL" secondAttribute="bottom" id="EdF-Vq-TKn"/>
<constraint firstItem="REU-RG-LGL" firstAttribute="trailing" secondItem="mV8-w9-Csf" secondAttribute="trailing" id="FUx-8e-EA7"/>
<constraint firstAttribute="bottom" secondItem="REU-RG-LGL" secondAttribute="bottom" priority="751" constant="11" id="Kiq-Xb-qLQ"/>
<constraint firstAttribute="bottom" secondItem="hdk-zR-sUE" secondAttribute="bottom" priority="750" constant="11" id="L6s-9n-X4B"/>
<constraint firstItem="mV8-w9-Csf" firstAttribute="top" secondItem="2Sb-Xn-590" secondAttribute="bottom" constant="4" id="Nlu-YT-Drx"/>
<constraint firstItem="mV8-w9-Csf" firstAttribute="trailing" secondItem="2Sb-Xn-590" secondAttribute="trailing" id="R0w-5g-kbu"/>
<constraint firstAttribute="trailing" secondItem="2Sb-Xn-590" secondAttribute="trailing" constant="16" id="VHn-ij-MgE"/>
<constraint firstItem="REU-RG-LGL" firstAttribute="leading" secondItem="mV8-w9-Csf" secondAttribute="leading" id="m1J-7d-l0A"/>
<constraint firstItem="mV8-w9-Csf" firstAttribute="leading" secondItem="2Sb-Xn-590" secondAttribute="leading" id="myY-Va-fju"/>
<constraint firstItem="hdk-zR-sUE" firstAttribute="leading" secondItem="REU-RG-LGL" secondAttribute="leading" id="nou-Xi-LNB"/>
<constraint firstItem="REU-RG-LGL" firstAttribute="top" secondItem="mV8-w9-Csf" secondAttribute="bottom" constant="8" id="uMb-Nv-0Of"/>
<constraint firstItem="2Sb-Xn-590" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="yNi-iw-loo"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="Kiq-Xb-qLQ"/>
</mask>
</variation>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="authorLabel" destination="mV8-w9-Csf" id="a7D-rh-lb9"/>
<outlet property="infoLabel" destination="REU-RG-LGL" id="iYY-qf-S0N"/>
<outlet property="infoToBottomConstraint" destination="Kiq-Xb-qLQ" id="IGx-bb-Y5S"/>
<outlet property="moreButton" destination="hdk-zR-sUE" id="z6v-GK-SiE"/>
<outlet property="titleLabel" destination="2Sb-Xn-590" id="2uv-OT-ljT"/>
</connections>
<point key="canvasLocation" x="34" y="92"/>
</tableViewCell>
</objects>
</document>

View file

@ -468,6 +468,8 @@
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 */; };
B33D21AC20DA515800BAD749 /* MWMCategoryInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B33D21AA20DA515800BAD749 /* MWMCategoryInfoCell.m */; };
B33D21AD20DA515800BAD749 /* MWMCategoryInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B33D21AB20DA515800BAD749 /* MWMCategoryInfoCell.xib */; };
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 */; };
@ -1393,6 +1395,9 @@
B32FE73E20D2844600EF7446 /* DownloadedBookmarksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadedBookmarksViewController.swift; sourceTree = "<group>"; };
B32FE73F20D2844600EF7446 /* DownloadedBookmarksViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DownloadedBookmarksViewController.xib; sourceTree = "<group>"; };
B32FE74220D2B09600EF7446 /* CatalogWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogWebViewController.swift; sourceTree = "<group>"; };
B33D21A920DA515800BAD749 /* MWMCategoryInfoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCategoryInfoCell.h; sourceTree = "<group>"; };
B33D21AA20DA515800BAD749 /* MWMCategoryInfoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MWMCategoryInfoCell.m; sourceTree = "<group>"; };
B33D21AB20DA515800BAD749 /* MWMCategoryInfoCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MWMCategoryInfoCell.xib; sourceTree = "<group>"; };
B366130220D5D9BC00E7DC3E /* MWMCatalogCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCatalogCategory.h; sourceTree = "<group>"; };
B366130320D5D9BC00E7DC3E /* MWMCatalogCategory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MWMCatalogCategory.m; sourceTree = "<group>"; };
B366130520D5DD2300E7DC3E /* MWMCatalogCategory+Convenience.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MWMCatalogCategory+Convenience.h"; sourceTree = "<group>"; };
@ -4101,6 +4106,9 @@
B32FE73D20D283D600EF7446 /* Catalog */,
FA36B80515403A4F004560CC /* BookmarksVC.h */,
FA36B80615403A4F004560CC /* BookmarksVC.mm */,
B33D21A920DA515800BAD749 /* MWMCategoryInfoCell.h */,
B33D21AA20DA515800BAD749 /* MWMCategoryInfoCell.m */,
B33D21AB20DA515800BAD749 /* MWMCategoryInfoCell.xib */,
3404F4A02028A6C00090E401 /* Categories */,
FA054610155C465E001F4E37 /* SelectSetVC.h */,
FA054611155C465E001F4E37 /* SelectSetVC.mm */,
@ -4428,6 +4436,7 @@
340E1EF51E2F614400CE49BF /* SearchFilters.storyboard in Resources */,
B32FE74120D2844600EF7446 /* DownloadedBookmarksViewController.xib in Resources */,
F682249F1E5B105900BC1C18 /* PPHotelDescriptionCell.xib in Resources */,
B33D21AD20DA515800BAD749 /* MWMCategoryInfoCell.xib in Resources */,
340E1EF81E2F614400CE49BF /* Settings.storyboard in Resources */,
6741A9421BF340DE002C974C /* sound-strings in Resources */,
F69018BD1E9F7CB600B3C10B /* MWMAutoupdateController.xib in Resources */,
@ -4603,6 +4612,7 @@
F6E2FF631E097BA00083EBEC /* MWMTTSLanguageViewController.mm in Sources */,
342EE4121C43DAA7009F6A49 /* MWMAuthorizationWebViewLoginViewController.mm in Sources */,
34AB667D1FC5AA330078E451 /* MWMRoutePreview.mm in Sources */,
B33D21AC20DA515800BAD749 /* MWMCategoryInfoCell.m in Sources */,
34845DAF1E1649F6003D55B9 /* DownloaderNoResultsEmbedViewController.swift in Sources */,
F6791B141C43DF0B007A8A6E /* MWMStartButton.mm in Sources */,
F6E2FEDF1E097BA00083EBEC /* MWMSearchManager+Layout.mm in Sources */,