Merge pull request #2917 from VladiMihaylenko/master

[ios] Editor big update.
This commit is contained in:
igrechuhin 2016-04-19 16:32:49 +04:00
commit b896b4ee26
49 changed files with 1001 additions and 445 deletions

View file

@ -1,8 +1,8 @@
// Default drop down which dismiss automaticaly after 3 seconds.
@interface MWMDropDown : NSObject
- (instancetype)initWithSuperview:(UIView *)view;
- (void)showWithMessage:(NSString *)message;
- (void)dismiss;
- (instancetype)init __attribute__((unavailable("call -initWithSuperview: instead!")));
+ (instancetype)new __attribute__((unavailable("call -initWithSuperview: instead!")));

View file

@ -89,6 +89,11 @@ CGFloat const kTopOffset = 25.;
self.dropDown.alpha = 1.;
self.dropDown.origin = {};
}];
[self performAfterDelay:3 block:^
{
[self dismiss];
}];
}
@end

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MWMDropDown">
@ -19,20 +19,16 @@
<rect key="frame" x="16" y="25" width="288" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" white="1" alpha="0.69999999999999996" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="whitePrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="blackStatusBarBackground"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="message" destination="vvR-dC-0Hv" id="YVS-gC-WLP"/>
</connections>

View file

@ -36,6 +36,9 @@
- (void)presentDownloaderNotEnoughSpaceAlert;
- (void)presentDownloaderInternalErrorAlertWithOkBlock:(nonnull TMWMVoidBlock)okBlock cancelBlock:(nonnull TMWMVoidBlock)cancelBlock;
- (void)presentDownloaderNeedUpdateAlertWithOkBlock:(nonnull TMWMVoidBlock)okBlock;
- (void)presentPlaceDoesntExistAlertWithBlock:(nonnull MWMStringBlock)block;
- (void)presentResetChangesAlertWithBlock:(nonnull TMWMVoidBlock)block;
- (void)presentDeleteFeatureAlertWithBlock:(nonnull TMWMVoidBlock)block;
- (void)presentEditorViralAlert;
- (void)presentOsmAuthAlert;
- (void)closeAlert;

View file

@ -178,6 +178,21 @@ static NSString * const kAlertControllerNibIdentifier = @"MWMAlertViewController
[self displayAlert:[MWMAlert downloaderNeedUpdateAlertWithOkBlock:okBlock]];
}
- (void)presentPlaceDoesntExistAlertWithBlock:(MWMStringBlock)block
{
[self displayAlert:[MWMAlert placeDoesntExistAlertWithBlock:block]];
}
- (void)presentResetChangesAlertWithBlock:(TMWMVoidBlock)block
{
[self displayAlert:[MWMAlert resetChangesAlertWithBlock:block]];
}
- (void)presentDeleteFeatureAlertWithBlock:(TMWMVoidBlock)block
{
[self displayAlert:[MWMAlert deleteFeatureAlertWithBlock:block]];
}
- (void)presentEditorViralAlert
{
[self displayAlert:[MWMAlert editorViralAlert]];

View file

@ -36,6 +36,9 @@ using TMWMDownloadBlock = void (^)(storage::TCountriesVec const &, TMWMVoidBlock
+ (MWMAlert *)downloaderNotEnoughSpaceAlert;
+ (MWMAlert *)downloaderInternalErrorAlertWithOkBlock:(TMWMVoidBlock)okBlock cancelBlock:(TMWMVoidBlock)cancelBlock;
+ (MWMAlert *)downloaderNeedUpdateAlertWithOkBlock:(TMWMVoidBlock)okBlock;
+ (MWMAlert *)placeDoesntExistAlertWithBlock:(MWMStringBlock)block;
+ (MWMAlert *)resetChangesAlertWithBlock:(TMWMVoidBlock)block;
+ (MWMAlert *)deleteFeatureAlertWithBlock:(TMWMVoidBlock)block;
+ (MWMAlert *)editorViralAlert;
+ (MWMAlert *)osmAuthAlert;
- (void)close;

View file

@ -8,6 +8,7 @@
#import "MWMLocationAlert.h"
#import "MWMOsmAuthAlert.h"
#import "MWMPedestrianShareAlert.h"
#import "MWMPlaceDoesntExistAlert.h"
#import "MWMRateAlert.h"
#import "MWMRoutingDisclaimerAlert.h"
@ -163,6 +164,21 @@
return [MWMDefaultAlert downloaderNeedUpdateAlertWithOkBlock:okBlock];
}
+ (MWMAlert *)placeDoesntExistAlertWithBlock:(MWMStringBlock)block
{
return [MWMPlaceDoesntExistAlert alertWithBlock:block];
}
+ (MWMAlert *)resetChangesAlertWithBlock:(TMWMVoidBlock)block
{
return [MWMDefaultAlert resetChangesAlertWithBlock:block];
}
+ (MWMAlert *)deleteFeatureAlertWithBlock:(TMWMVoidBlock)block
{
return [MWMDefaultAlert resetChangesAlertWithBlock:block];
}
+ (MWMAlert *)editorViralAlert
{
return [MWMEditorViralAlert alert];

View file

@ -26,5 +26,7 @@
+ (instancetype)downloaderInternalErrorAlertWithOkBlock:(TMWMVoidBlock)okBlock cancelBlock:(TMWMVoidBlock)cancelBlock;
+ (instancetype)downloaderNeedUpdateAlertWithOkBlock:(TMWMVoidBlock)okBlock;
+ (instancetype)routingMigrationAlertWithOkBlock:(TMWMVoidBlock)okBlock;
+ (instancetype)resetChangesAlertWithBlock:(TMWMVoidBlock)block;
+ (instancetype)deleteFeatureAlertWithBlock:(TMWMVoidBlock)block;
@end

View file

@ -319,6 +319,28 @@ static NSString * const kDefaultAlertNibName = @"MWMDefaultAlert";
return alert;
}
+ (instancetype)resetChangesAlertWithBlock:(TMWMVoidBlock)block
{
kStatisticsEvent = @"Reset changes alert";
MWMDefaultAlert * alert = [self defaultAlertWithTitle:@"editor_reset_edits_message"
message:nil
rightButtonTitle:@"editor_reset_edits_button"
leftButtonTitle:@"cancel"
rightButtonAction:block];
return alert;
}
+ (instancetype)deleteFeatureAlertWithBlock:(TMWMVoidBlock)block
{
kStatisticsEvent = @"Delete feature alert";
MWMDefaultAlert * alert = [self defaultAlertWithTitle:@"editor_remove_place_message"
message:nil
rightButtonTitle:@"editor_remove_place_button"
leftButtonTitle:@"cancel"
rightButtonAction:block];
return alert;
}
+ (instancetype)defaultAlertWithTitle:(nonnull NSString *)title
message:(nullable NSString *)message
rightButtonTitle:(nonnull NSString *)rightButtonTitle

View file

@ -0,0 +1,7 @@
#import "MWMAlert.h"
@interface MWMPlaceDoesntExistAlert : MWMAlert
+ (instancetype)alertWithBlock:(MWMStringBlock)block;
@end

View file

@ -0,0 +1,93 @@
#import "MWMPlaceDoesntExistAlert.h"
// This private class needs for change default text field's content inset.
@interface _MWMTextField : UITextField
@end
@implementation _MWMTextField
// placeholder position
- (CGRect)textRectForBounds:(CGRect)bounds
{
return CGRectInset(bounds, 4, 4);
}
// text position
- (CGRect)editingRectForBounds:(CGRect)bounds
{
return CGRectInset(bounds, 4, 4);
}
@end
@interface MWMPlaceDoesntExistAlert ()
@property (weak, nonatomic) IBOutlet UITextField * textField;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint * centerHorizontaly;
@property (copy, nonatomic) MWMStringBlock block;
@end
@implementation MWMPlaceDoesntExistAlert
+ (instancetype)alertWithBlock:(MWMStringBlock)block
{
MWMPlaceDoesntExistAlert * alert = [[[NSBundle mainBundle] loadNibNamed:[MWMPlaceDoesntExistAlert className] owner:nil
options:nil] firstObject];
alert.block = block;
[[NSNotificationCenter defaultCenter] addObserver:alert
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:alert
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
return alert;
}
- (IBAction)rightButtonTap
{
[self.textField resignFirstResponder];
[self close];
self.block(self.textField.text);
}
- (IBAction)leftButtonTap
{
[self.textField resignFirstResponder];
[self close];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
CGFloat const keyboardHeight = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.height;
NSNumber * rate = notification.userInfo[UIKeyboardAnimationDurationUserInfoKey];
[self setNeedsLayout];
self.centerHorizontaly.constant = - keyboardHeight / 2;
[UIView animateWithDuration:rate.floatValue animations:^
{
[self layoutIfNeeded];
}];
}
- (void)keyboardWillHide:(NSNotification *)notification
{
NSNumber * rate = notification.userInfo[UIKeyboardAnimationDurationUserInfoKey];
[self setNeedsLayout];
self.centerHorizontaly.constant = 0;
[UIView animateWithDuration:rate.floatValue animations:^
{
[self layoutIfNeeded];
}];
}
@end

View file

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<customFonts key="customFonts">
<mutableArray key="HelveticaNeue.ttc">
<string>HelveticaNeue-Medium</string>
<string>HelveticaNeue-Medium</string>
</mutableArray>
</customFonts>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="bh1-8l-voy" customClass="MWMPlaceDoesntExistAlert">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XjH-qf-m6h" userLabel="ContainerView">
<rect key="frame" x="20" y="201" width="280" height="166"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NwN-e5-YQR" userLabel="Title">
<rect key="frame" x="20" y="20" width="240" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="Bz8-HZ-yfK"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="JWn-Ze-jrX"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="18"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium18"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_place_doesnt_exist"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Message" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VvH-Bb-fV9" userLabel="Message">
<rect key="frame" x="20" y="54" width="240" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="Gau-b5-VxP"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="VWx-20-JCg"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_notes_write_additional_info"/>
</userDefinedRuntimeAttributes>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="0f8-vD-nJT" customClass="_MWMTextField">
<rect key="frame" x="16" y="86" width="249" height="24"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="C7T-xQ-Aui"/>
<constraint firstAttribute="width" constant="249" id="pFJ-Ry-C0u"/>
</constraints>
<edgeInsets key="layoutMargins" top="4" left="4" bottom="4" right="4"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedPlaceholder" value="editor_notes_comment"/>
<userDefinedRuntimeAttribute type="string" keyPath="_placeholderLabel.colorName" value="blackHintText"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
<userDefinedRuntimeAttribute type="color" keyPath="layer.borderUIColor">
<color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<real key="value" value="0.5"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kEx-DM-ynC" userLabel="hDivider">
<rect key="frame" x="0.0" y="122" width="280" height="1"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="JKX-3f-YE4"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="blackDividers"/>
</userDefinedRuntimeAttributes>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zaM-0A-71d" userLabel="left">
<rect key="frame" x="0.0" y="122" width="140" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="JRt-9h-Ljb"/>
<constraint firstAttribute="width" constant="140" id="y86-N4-bGg"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<state key="normal" title="left">
<color key="titleColor" red="0.090196078430000007" green="0.61960784310000006" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="cancel"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="linkBlue"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="leftButtonTap" destination="bh1-8l-voy" eventType="touchUpInside" id="Ge7-Dx-Pf3"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MkK-sG-n6m" userLabel="right">
<rect key="frame" x="140" y="122" width="140" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="2ra-bP-J3a"/>
<constraint firstAttribute="width" constant="140" id="pNb-5U-J8Z"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="17"/>
<state key="normal" title="right">
<color key="titleColor" red="0.090196078430000007" green="0.61960784310000006" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_report_problem_send_button"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="linkBlue"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="rightButtonTap" destination="bh1-8l-voy" eventType="touchUpInside" id="4FZ-zi-TAB"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Tyn-yU-dk3" userLabel="vDivider">
<rect key="frame" x="139" y="122" width="1" height="44"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" constant="1" id="Bva-2f-zNE"/>
<constraint firstAttribute="height" constant="44" id="jEO-cN-3PZ"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="blackDividers"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="MkK-sG-n6m" secondAttribute="trailing" id="21Y-zv-8JR"/>
<constraint firstItem="NwN-e5-YQR" firstAttribute="top" secondItem="XjH-qf-m6h" secondAttribute="top" constant="20" id="6pQ-wv-c4Z"/>
<constraint firstItem="VvH-Bb-fV9" firstAttribute="top" secondItem="NwN-e5-YQR" secondAttribute="bottom" constant="12" id="EAW-Ft-SfJ"/>
<constraint firstAttribute="bottom" secondItem="MkK-sG-n6m" secondAttribute="bottom" id="K0E-y1-z0P"/>
<constraint firstAttribute="bottom" secondItem="zaM-0A-71d" secondAttribute="bottom" id="KzG-74-cDe"/>
<constraint firstItem="kEx-DM-ynC" firstAttribute="width" secondItem="XjH-qf-m6h" secondAttribute="width" id="Ldw-GJ-Ulm"/>
<constraint firstItem="0f8-vD-nJT" firstAttribute="top" secondItem="VvH-Bb-fV9" secondAttribute="bottom" constant="12" id="LhK-01-SkA"/>
<constraint firstAttribute="bottom" secondItem="Tyn-yU-dk3" secondAttribute="bottom" id="Mb3-VE-bBR"/>
<constraint firstItem="Tyn-yU-dk3" firstAttribute="centerX" secondItem="XjH-qf-m6h" secondAttribute="centerX" id="PkD-5c-ltY"/>
<constraint firstItem="zaM-0A-71d" firstAttribute="leading" secondItem="XjH-qf-m6h" secondAttribute="leading" id="RCZ-fs-HwM"/>
<constraint firstItem="NwN-e5-YQR" firstAttribute="centerX" secondItem="XjH-qf-m6h" secondAttribute="centerX" id="ZbO-Kn-lsV"/>
<constraint firstItem="zaM-0A-71d" firstAttribute="top" secondItem="kEx-DM-ynC" secondAttribute="bottom" constant="-1" id="cPx-SM-J1B"/>
<constraint firstItem="kEx-DM-ynC" firstAttribute="top" secondItem="0f8-vD-nJT" secondAttribute="bottom" constant="12" id="kX8-Lm-Oyt"/>
<constraint firstItem="VvH-Bb-fV9" firstAttribute="centerX" secondItem="XjH-qf-m6h" secondAttribute="centerX" id="mPb-7n-Ns1"/>
<constraint firstAttribute="width" constant="280" id="uve-xM-xfj"/>
<constraint firstItem="kEx-DM-ynC" firstAttribute="centerX" secondItem="XjH-qf-m6h" secondAttribute="centerX" id="vop-cl-2u7"/>
<constraint firstItem="0f8-vD-nJT" firstAttribute="centerX" secondItem="XjH-qf-m6h" secondAttribute="centerX" id="xds-vV-Goi"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
<size key="value" width="0.0" height="3"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="layer.shadowUIColor">
<color key="value" red="0.89625308390000002" green="0.0" blue="0.0" alpha="0.22" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowRadius">
<integer key="value" value="6"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="alertBackground"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="XjH-qf-m6h" firstAttribute="centerX" secondItem="bh1-8l-voy" secondAttribute="centerX" id="Ez4-IC-X2C"/>
<constraint firstItem="XjH-qf-m6h" firstAttribute="centerY" secondItem="bh1-8l-voy" secondAttribute="centerY" id="ihl-fu-ac9"/>
</constraints>
<connections>
<outlet property="centerHorizontaly" destination="ihl-fu-ac9" id="f11-9c-PMh"/>
<outlet property="textField" destination="0f8-vD-nJT" id="tm8-Pb-b1x"/>
</connections>
<point key="canvasLocation" x="305" y="172"/>
</view>
</objects>
<resources>
<image name="dialog_btn_press" width="280" height="44"/>
</resources>
</document>

View file

@ -61,9 +61,9 @@ vector<string> SliceKeys(vector<pair<string, string>> const & v)
- (void)keyboardWillShow:(NSNotification *)notification
{
CGSize const keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGSize const keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGFloat const bottomInset = UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) ?
keyboardSize.height : keyboardSize.width;
keyboardSize.height : keyboardSize.width;
UIEdgeInsets const contentInsets = {.bottom = bottomInset};

View file

@ -3,6 +3,11 @@
#import "UIColor+MapsMeColor.h"
#import "UIImageView+Coloring.h"
namespace
{
CGFloat const kDetailShortRightSpace = 16;
} // namespace
@interface MWMEditorCategoryCell ()
@property (weak, nonatomic) IBOutlet UIImageView * accessoryIcon;
@ -27,7 +32,7 @@
else
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.detailRightSpace.constant -= self.accessoryIcon.width / 2;
self.detailRightSpace.constant = kDetailShortRightSpace;
}
}

View file

@ -1,9 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
@ -26,7 +25,7 @@
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jfx-Kc-WOc">
<rect key="frame" x="16" y="12" width="218" height="20"/>
<rect key="frame" x="16" y="12" width="226" height="20"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="BaE-rI-CN2"/>
<constraint firstAttribute="height" constant="20" id="oLW-um-5dA"/>
@ -41,12 +40,12 @@
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="501" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qrd-hP-nIJ">
<rect key="frame" x="242" y="12" width="42" height="21"/>
<rect key="frame" x="250" y="12" width="42" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="hsO-dV-WsY"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
@ -64,7 +63,7 @@
<constraint firstItem="Jfx-Kc-WOc" firstAttribute="leading" secondItem="mWc-I7-4kZ" secondAttribute="leading" constant="16" id="5lg-6C-NQt"/>
<constraint firstItem="qrd-hP-nIJ" firstAttribute="leading" secondItem="Jfx-Kc-WOc" secondAttribute="trailing" constant="8" id="ETn-mX-ysj"/>
<constraint firstItem="Jfx-Kc-WOc" firstAttribute="centerY" secondItem="mWc-I7-4kZ" secondAttribute="centerY" id="P6u-UL-5f7"/>
<constraint firstAttribute="trailingMargin" secondItem="qrd-hP-nIJ" secondAttribute="trailing" constant="28" id="Rwj-G9-EoG"/>
<constraint firstAttribute="trailing" secondItem="qrd-hP-nIJ" secondAttribute="trailing" constant="28" id="Rwj-G9-EoG"/>
<constraint firstAttribute="trailing" secondItem="uA3-ru-Ja1" secondAttribute="trailing" constant="6" id="byM-mn-aQu"/>
<constraint firstItem="uA3-ru-Ja1" firstAttribute="centerY" secondItem="mWc-I7-4kZ" secondAttribute="centerY" id="sVc-Kt-8ZX"/>
<constraint firstItem="qrd-hP-nIJ" firstAttribute="centerY" secondItem="mWc-I7-4kZ" secondAttribute="centerY" id="wSH-Lz-TEL"/>

View file

@ -8,7 +8,4 @@
- (void)cellSelect:(UITableViewCell *)cell;
- (void)tryToChangeInvalidStateForCell:(MWMEditorTextTableViewCell *)cell;
@optional
- (void)fieldIsCorrect:(BOOL)isCorrect;
@end

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<objects>
@ -28,8 +28,13 @@
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="name"/>
</userDefinedRuntimeAttributes>
<variation key="default">
<mask key="constraints">
<exclude reference="Vyq-1r-IrP"/>
</mask>
</variation>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="XnK-GX-uDn">
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalCompressionResistancePriority="499" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="XnK-GX-uDn">
<rect key="frame" x="74" y="11" width="230" height="21"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<textInputTraits key="textInputTraits"/>

View file

@ -0,0 +1,5 @@
@interface MWMEditorNotesFooter : UIView
+ (instancetype)footer;
@end

View file

@ -0,0 +1,24 @@
#import "MWMEditorNotesFooter.h"
@implementation MWMEditorNotesFooter
+ (instancetype)footer
{
MWMEditorNotesFooter * f = [[[NSBundle mainBundle] loadNibNamed:[MWMEditorNotesFooter className] owner:nil options:nil]
firstObject];
[f setNeedsLayout];
[f layoutIfNeeded];
NSAssert(f.subviews.firstObject, @"Subviews can't be empty!");
f.height = f.subviews.firstObject.height;
return f;
}
- (IBAction)osmTap
{
NSURL * url = [NSURL URLWithString:@"https://www.openstreetmap.org/about"];
UIApplication * app = [UIApplication sharedApplication];
if ([app canOpenURL:url])
[app openURL:url];
}
@end

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="IBb-39-rly" customClass="MWMEditorNotesFooter">
<rect key="frame" x="0.0" y="0.0" width="320" height="144"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xcv-fG-OmU">
<rect key="frame" x="0.0" y="-15" width="320" height="173"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="288" translatesAutoresizingMaskIntoConstraints="NO" id="vxr-iR-qGP">
<rect key="frame" x="16" y="0.0" width="288" height="143"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="21" id="q02-z4-K9S"/>
</constraints>
<string key="text">Предложенные вами изменения на карте будут отправлены в OpenStreetMap. Если у вас есть дополнительные сведения об объекте, которые MAPS.ME не может позволить отредактировать, напишите о них.</string>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_will_be_sent_message"/>
</userDefinedRuntimeAttributes>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="60F-c7-enR">
<rect key="frame" x="16" y="151" width="288" height="16"/>
<constraints>
<constraint firstAttribute="height" constant="16" id="lB5-ya-sBr"/>
</constraints>
<state key="normal" title="Button"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_more_about_osm"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="linkBlue"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorHighlightedName" value="linkBlueHighlighted"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="osmTap" destination="IBb-39-rly" eventType="touchUpInside" id="EjN-0s-Ycy"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="60F-c7-enR" secondAttribute="trailing" constant="16" id="dTB-mL-e3M"/>
<constraint firstItem="vxr-iR-qGP" firstAttribute="leading" secondItem="xcv-fG-OmU" secondAttribute="leading" constant="16" id="g35-I7-Ct4"/>
<constraint firstItem="60F-c7-enR" firstAttribute="leading" secondItem="xcv-fG-OmU" secondAttribute="leading" constant="16" id="iiZ-Je-sn7"/>
<constraint firstItem="60F-c7-enR" firstAttribute="top" secondItem="vxr-iR-qGP" secondAttribute="bottom" constant="8" id="r8W-qV-Dd0"/>
<constraint firstItem="vxr-iR-qGP" firstAttribute="top" secondItem="xcv-fG-OmU" secondAttribute="top" id="tP9-HJ-DDm"/>
<constraint firstAttribute="trailing" secondItem="vxr-iR-qGP" secondAttribute="trailing" constant="16" id="wPA-fe-5a9"/>
<constraint firstAttribute="bottom" secondItem="60F-c7-enR" secondAttribute="bottom" constant="6" id="ylg-M3-Ejt"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="xcv-fG-OmU" firstAttribute="centerY" secondItem="IBb-39-rly" secondAttribute="centerY" id="FeQ-eT-FSb"/>
<constraint firstItem="xcv-fG-OmU" firstAttribute="centerX" secondItem="IBb-39-rly" secondAttribute="centerX" id="HR2-4M-jr2"/>
<constraint firstItem="xcv-fG-OmU" firstAttribute="width" secondItem="IBb-39-rly" secondAttribute="width" id="das-TJ-zih"/>
</constraints>
<nil key="simulatedTopBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="452" y="465"/>
</view>
</objects>
</document>

View file

@ -29,7 +29,7 @@
<rect key="frame" x="60" y="0.0" width="252" height="28"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="P3n-mD-g5V"/>
<constraint firstAttribute="height" priority="750" constant="28" id="P3n-mD-g5V"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>

View file

@ -1,14 +1,19 @@
#import "MapsAppDelegate.h"
#import "MWMAlertViewController.h"
#import "MWMAuthorizationCommon.h"
#import "MWMCuisineEditorViewController.h"
#import "MWMDropDown.h"
#import "MWMEditorCategoryCell.h"
#import "MWMEditorCommon.h"
#import "MWMEditorNotesFooter.h"
#import "MWMEditorSelectTableViewCell.h"
#import "MWMEditorSwitchTableViewCell.h"
#import "MWMEditorTextTableViewCell.h"
#import "MWMEditorViewController.h"
#import "MWMNoteCell.h"
#import "MWMObjectsCategorySelectorController.h"
#import "MWMOpeningHoursEditorViewController.h"
#import "MWMNoteButtonCell.h"
#import "MWMPlacePageEntity.h"
#import "MWMPlacePageOpeningHoursCell.h"
#import "MWMStreetEditorViewController.h"
@ -25,22 +30,27 @@ NSString * const kOpeningHoursEditorSegue = @"Editor2OpeningHoursEditorSegue";
NSString * const kCuisineEditorSegue = @"Editor2CuisineEditorSegue";
NSString * const kStreetEditorSegue = @"Editor2StreetEditorSegue";
NSString * const kCategoryEditorSegue = @"Editor2CategoryEditorSegue";
CGFloat const kDefaultFooterHeight = 32.;
typedef NS_ENUM(NSUInteger, MWMEditorSection)
{
MWMEditorSectionCategory,
MWMEditorSectionName,
MWMEditorSectionAddress,
MWMEditorSectionDetails
MWMEditorSectionDetails,
MWMEditorSectionNote,
MWMEditorSectionButton
};
vector<MWMPlacePageCellType> const kSectionCategoryCellTypes{MWMPlacePageCellTypeCategory};
vector<MWMPlacePageCellType> const kSectionNameCellTypes{MWMPlacePageCellTypeName};
vector<MWMPlacePageCellType> const kSectionAddressCellTypes{
MWMPlacePageCellTypeStreet, MWMPlacePageCellTypeBuilding, MWMPlacePageCellTypeZipCode};
vector<MWMPlacePageCellType> const kSectionNoteCellTypes{MWMPlacePageCellTypeNote};
vector<MWMPlacePageCellType> const kSectionButtonCellTypes{MWMPlacePageCellTypeReportButton};
MWMPlacePageCellTypeValueMap const kCellType2ReuseIdentifier{
{MWMPlacePageCellTypeCategory, "MWMEditorCategoryCell"},
{MWMPlacePageCellTypeName, "MWMEditorNameTableViewCell"},
@ -54,7 +64,9 @@ MWMPlacePageCellTypeValueMap const kCellType2ReuseIdentifier{
{MWMPlacePageCellTypeEmail, "MWMEditorTextTableViewCell"},
{MWMPlacePageCellTypeOperator, "MWMEditorTextTableViewCell"},
{MWMPlacePageCellTypeCuisine, "MWMEditorSelectTableViewCell"},
{MWMPlacePageCellTypeWiFi, "MWMEditorSwitchTableViewCell"}};
{MWMPlacePageCellTypeWiFi, "MWMEditorSwitchTableViewCell"},
{MWMPlacePageCellTypeNote, "MWMNoteCell"},
{MWMPlacePageCellTypeReportButton, "MWMNoteButtonCell"}};
NSString * reuseIdentifier(MWMPlacePageCellType cellType)
{
@ -122,10 +134,14 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
UITextFieldDelegate, MWMOpeningHoursEditorProtocol,
MWMPlacePageOpeningHoursCellProtocol,
MWMEditorCellProtocol, MWMCuisineEditorProtocol,
MWMStreetEditorProtocol, MWMObjectsCategorySelectorDelegate>
MWMStreetEditorProtocol, MWMObjectsCategorySelectorDelegate,
MWMNoteCelLDelegate>
@property (nonatomic) NSMutableDictionary<NSString *, UITableViewCell *> * offscreenCells;
@property (nonatomic) NSMutableArray<NSIndexPath *> * invalidCells;
@property (nonatomic) MWMEditorNotesFooter * footer;
@property (copy, nonatomic) NSString * note;
@property (nonatomic) osm::Editor::FeatureStatus featureStatus;
@end
@ -142,6 +158,8 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
[super viewDidLoad];
[self configTable];
[self configNavBar];
auto const & featureID = m_mapObject.GetID();
self.featureStatus = osm::Editor::Instance().GetFeatureStatus(featureID.m_mwmId, featureID.m_index);
}
- (void)setFeatureToEdit:(FeatureID const &)fid
@ -215,13 +233,27 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
auto & f = GetFramework();
auto const & featureID = m_mapObject.GetID();
NSDictionary * info = @{kStatEditorMWMName : @(featureID.GetMwmName().c_str()),
NSDictionary<NSString *, NSString *> * info = @{kStatEditorMWMName : @(featureID.GetMwmName().c_str()),
kStatEditorMWMVersion : @(featureID.GetMwmVersion())};
BOOL const haveNote = self.note.length;
if (haveNote)
{
auto const latLon = m_mapObject.GetLatLon();
NSMutableDictionary * noteInfo = [info mutableCopy];
noteInfo[kStatProblem] = self.note;
noteInfo[kStatLat] = @(latLon.lat);
noteInfo[kStatLon] = @(latLon.lon);
[Statistics logEvent:kStatEditorProblemReport withParameters:noteInfo];
osm::Editor::Instance().CreateNote(latLon, featureID, self.note.UTF8String);
}
switch (f.SaveEditedMapObject(m_mapObject))
{
case osm::Editor::NothingWasChanged:
case osm::Editor::NothingWasChanged:
[self.navigationController popToRootViewControllerAnimated:YES];
if (haveNote)
[self showDropDown];
break;
case osm::Editor::SavedSuccessfully:
[Statistics logEvent:(self.isCreating ? kStatEditorAddSuccess : kStatEditorEditSuccess) withParameters:info];
@ -236,6 +268,20 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
}
}
- (void)showDropDown
{
UIViewController * parent = static_cast<UIViewController *>([MapsAppDelegate theApp].mapViewController);
MWMDropDown * dd = [[MWMDropDown alloc] initWithSuperview:parent.view];
[dd showWithMessage:L(@"editor_edits_sent_message")];
}
- (MWMEditorNotesFooter *)footer
{
if (!_footer)
_footer = [MWMEditorNotesFooter footer];
return _footer;
}
#pragma mark - Offscreen cells
- (UITableViewCell *)offscreenCellForIdentifier:(NSString *)reuseIdentifier
@ -283,6 +329,15 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
registerCellsForTableView(cells, self.tableView);
}
}
m_sections.push_back(MWMEditorSectionNote);
m_cells[MWMEditorSectionNote] = kSectionNoteCellTypes;
registerCellsForTableView(kSectionNoteCellTypes, self.tableView);
if (self.isCreating)
return;
m_sections.push_back(MWMEditorSectionButton);
m_cells[MWMEditorSectionButton] = kSectionButtonCellTypes;
registerCellsForTableView(kSectionButtonCellTypes, self.tableView);
}
- (MWMPlacePageCellType)cellTypeForIndexPath:(NSIndexPath *)indexPath
@ -441,6 +496,35 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
placeholder:L(@"select_cuisine")];
break;
}
case MWMPlacePageCellTypeNote:
{
MWMNoteCell * tCell = static_cast<MWMNoteCell *>(cell);
[tCell configWithDelegate:self noteText:self.note];
break;
}
case MWMPlacePageCellTypeReportButton:
{
MWMNoteButtonCell * tCell = static_cast<MWMNoteButtonCell *>(cell);
auto title = ^ NSString * (osm::Editor::FeatureStatus s)
{
switch (s)
{
case osm::Editor::FeatureStatus::Untouched:
return L(@"editor_place_doesnt_exist");
case osm::Editor::FeatureStatus::Deleted:
NSAssert(false, @"Incorrect feature status!");
return L(@"editor_place_doesnt_exist");
case osm::Editor::FeatureStatus::Modified:
return L(@"editor_reset_edits_button");
case osm::Editor::FeatureStatus::Created:
return L(@"editor_remove_place_message");
}
};
[tCell configureWithDelegate:self title:title(self.featureStatus)];
break;
}
default:
NSAssert(false, @"Invalid field for editor");
break;
@ -483,7 +567,10 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
case MWMPlacePageCellTypeOpenHours:
return ((MWMPlacePageOpeningHoursCell *)cell).cellHeight;
case MWMPlacePageCellTypeCategory:
case MWMPlacePageCellTypeReportButton:
return self.tableView.rowHeight;
case MWMPlacePageCellTypeNote:
return static_cast<MWMNoteCell *>(cell).cellHeight;
default:
{
[cell setNeedsUpdateConstraints];
@ -503,7 +590,10 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
{
case MWMEditorSectionName:
case MWMEditorSectionCategory:
case MWMEditorSectionButton:
return nil;
case MWMEditorSectionNote:
return L(@"editor_notes_header");
case MWMEditorSectionAddress:
return L(@"address");
case MWMEditorSectionDetails:
@ -520,10 +610,43 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
case MWMEditorSectionAddress:
case MWMEditorSectionDetails:
case MWMEditorSectionCategory:
case MWMEditorSectionNote:
case MWMEditorSectionButton:
return nil;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
switch (m_sections[section])
{
case MWMEditorSectionAddress:
case MWMEditorSectionDetails:
case MWMEditorSectionCategory:
case MWMEditorSectionName:
case MWMEditorSectionButton:
return nil;
case MWMEditorSectionNote:
return self.footer;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
switch (m_sections[section])
{
case MWMEditorSectionAddress:
case MWMEditorSectionDetails:
case MWMEditorSectionCategory:
return 0.;
case MWMEditorSectionNote:
return self.footer.height;
case MWMEditorSectionName:
case MWMEditorSectionButton:
return kDefaultFooterHeight;
}
}
#pragma mark - MWMPlacePageOpeningHoursCellProtocol
- (BOOL)forcedButton
@ -559,6 +682,24 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
#pragma mark - MWMNoteCellDelegate
- (void)cellShouldChangeSize:(MWMNoteCell *)cell text:(NSString *)text
{
self.offscreenCells[reuseIdentifier(MWMPlacePageCellTypeNote)] = cell;
self.note = text;
[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell]
atScrollPosition:UITableViewScrollPositionBottom
animated:YES];
}
- (void)cell:(MWMNoteCell *)cell didFinishEditingWithText:(NSString *)text
{
self.note = text;
}
#pragma mark - MWMEditorCellProtocol
- (void)tryToChangeInvalidStateForCell:(MWMEditorTextTableViewCell *)cell
@ -624,18 +765,66 @@ void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITab
MWMPlacePageCellType const cellType = [self cellTypeForIndexPath:indexPath];
switch (cellType)
{
case MWMPlacePageCellTypeStreet:
[self performSegueWithIdentifier:kStreetEditorSegue sender:nil];
case MWMPlacePageCellTypeStreet:
[self performSegueWithIdentifier:kStreetEditorSegue sender:nil];
break;
case MWMPlacePageCellTypeCuisine:
[self performSegueWithIdentifier:kCuisineEditorSegue sender:nil];
break;
case MWMPlacePageCellTypeCategory:
[self performSegueWithIdentifier:kCategoryEditorSegue sender:nil];
break;
case MWMPlacePageCellTypeReportButton:
switch (self.featureStatus)
{
case osm::Editor::FeatureStatus::Untouched:
{
[self.alertController presentPlaceDoesntExistAlertWithBlock:^(NSString * additionalMessage)
{
auto const & fid = self->m_mapObject.GetID();
auto const latLon = self->m_mapObject.GetLatLon();
if (additionalMessage.length)
{
//TODO(Vlad): Pass additional message as second parameter into CreateNote.
}
[Statistics logEvent:kStatEditorProblemReport withParameters:@{
kStatEditorMWMName : @(fid.GetMwmName().c_str()),
kStatEditorMWMVersion : @(fid.GetMwmVersion()),
kStatProblem : @(osm::Editor::kPlaceDoesNotExistMessage),
kStatLat : @(latLon.lat), kStatLon : @(latLon.lon)}];
osm::Editor::Instance().CreateNote(latLon, fid, osm::Editor::kPlaceDoesNotExistMessage);
[self backTap];
[self showDropDown];
}];
break;
case MWMPlacePageCellTypeCuisine:
[self performSegueWithIdentifier:kCuisineEditorSegue sender:nil];
}
case osm::Editor::FeatureStatus::Modified:
{
[self.alertController presentResetChangesAlertWithBlock:^
{
// TODO(Vlad): reset all changes
[self backTap];
}];
break;
case MWMPlacePageCellTypeCategory:
[self performSegueWithIdentifier:kCategoryEditorSegue sender:nil];
}
case osm::Editor::FeatureStatus::Created:
{
[self.alertController presentDeleteFeatureAlertWithBlock:^
{
//TODO(Vlad): delete feature
[self backTap];
}];
break;
default:
NSAssert(false, @"Invalid field for cellSelect");
}
case osm::Editor::FeatureStatus::Deleted:
break;
}
break;
default:
NSAssert(false, @"Invalid field for cellSelect");
break;
}
}

View file

@ -0,0 +1,8 @@
#import "MWMEditorCommon.h"
#import "MWMTableViewCell.h"
@interface MWMNoteButtonCell : MWMTableViewCell
- (void)configureWithDelegate:(id<MWMEditorCellProtocol>)delegate title:(NSString *)title;
@end

View file

@ -0,0 +1,23 @@
#import "MWMNoteButtonCell.h"
@interface MWMNoteButtonCell ()
@property (weak, nonatomic) IBOutlet UIButton * button;
@property (weak, nonatomic) id<MWMEditorCellProtocol> delegate;
@end
@implementation MWMNoteButtonCell
- (void)configureWithDelegate:(id<MWMEditorCellProtocol>)delegate title:(NSString *)title
{
[self.button setTitle:title forState:UIControlStateNormal];
self.delegate = delegate;
}
- (IBAction)buttonTap
{
[self.delegate cellSelect:self];
}
@end

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="KGk-i7-Jjw" customClass="MWMNoteButtonCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c7Y-Nr-P4C">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<state key="normal" title="Button">
<color key="titleColor" red="0.95686274510000002" green="0.26274509800000001" blue="0.21176470589999999" alpha="1" colorSpace="calibratedRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="red"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="buttonTap" destination="KGk-i7-Jjw" eventType="touchUpInside" id="kS2-aj-wfq"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="c7Y-Nr-P4C" secondAttribute="trailing" id="AVP-GR-W7u"/>
<constraint firstAttribute="bottom" secondItem="c7Y-Nr-P4C" secondAttribute="bottom" constant="0.5" id="F3N-Zb-tnQ"/>
<constraint firstItem="c7Y-Nr-P4C" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="JQx-63-Ane"/>
<constraint firstItem="c7Y-Nr-P4C" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="fTj-1o-vWJ"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="button" destination="c7Y-Nr-P4C" id="UDx-n5-6fr"/>
</connections>
</tableViewCell>
</objects>
</document>

View file

@ -0,0 +1,17 @@
#import "MWMTableViewCell.h"
@class MWMNoteCell;
@protocol MWMNoteCelLDelegate <NSObject>
- (void)cellShouldChangeSize:(MWMNoteCell *)cell text:(NSString *)text;
- (void)cell:(MWMNoteCell *)cell didFinishEditingWithText:(NSString *)text;
@end
@interface MWMNoteCell : MWMTableViewCell
- (void)configWithDelegate:(id<MWMNoteCelLDelegate>)delegate noteText:(NSString *)text;
- (CGFloat)cellHeight;
@end

View file

@ -0,0 +1,88 @@
#import "MWMNoteCell.h"
namespace
{
CGFloat const kMinimalTextViewHeight = 104.;
CGFloat const kTopTextViewOffset = 12.;
NSString * const kTextViewContentSizeKeyPath = @"contentSize";
} // namespace
@interface MWMNoteCell () <UITextViewDelegate>
@property (weak, nonatomic) IBOutlet UITextView * textView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint * textViewHeight;
@property (weak, nonatomic) id<MWMNoteCelLDelegate> delegate;
@end
static void * kContext = &kContext;
@implementation MWMNoteCell
- (void)configWithDelegate:(id<MWMNoteCelLDelegate>)delegate noteText:(NSString *)text
{
self.delegate = delegate;
self.textView.text = text;
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if (context == kContext)
{
NSValue * s = change[@"new"];
CGFloat const height = s.CGSizeValue.height;
if (height > kMinimalTextViewHeight)
{
self.textViewHeight.constant = height;
[self.delegate cellShouldChangeSize:self text:self.textView.text];
}
else
{
CGFloat const currentHeight = self.textViewHeight.constant;
if (currentHeight > kMinimalTextViewHeight)
{
self.textViewHeight.constant = kMinimalTextViewHeight;
[self.delegate cellShouldChangeSize:self text:self.textView.text];
}
}
[self setNeedsLayout];
[self layoutIfNeeded];
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
- (CGFloat)cellHeight
{
return self.textViewHeight.constant + 2 * kTopTextViewOffset;
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
[self.delegate cell:self didFinishEditingWithText:textView.text];
[self unregisterObserver];
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
[self registerObserver];
}
- (void)unregisterObserver
{
[self.textView removeObserver:self forKeyPath:kTextViewContentSizeKeyPath context:kContext];
}
- (void)registerObserver
{
[self.textView addObserver:self forKeyPath:kTextViewContentSizeKeyPath options:NSKeyValueObservingOptionNew context:kContext];
}
@end

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="129" id="KGk-i7-Jjw" customClass="MWMNoteCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="129"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="320" height="128"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="d32-xF-MvW" customClass="MWMTextView">
<rect key="frame" x="16" y="12" width="288" height="104"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" priority="750" constant="104" id="J3M-HG-f2p"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedPlaceholder" value="editor_detailed_description_hint"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="KGk-i7-Jjw" id="b3Z-HX-D7g"/>
</connections>
</textView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="d32-xF-MvW" secondAttribute="trailing" constant="16" id="Ost-1C-1e0"/>
<constraint firstItem="d32-xF-MvW" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="VYR-fH-Xju"/>
<constraint firstAttribute="bottom" secondItem="d32-xF-MvW" secondAttribute="bottom" constant="12" id="X92-RT-6WG"/>
<constraint firstItem="d32-xF-MvW" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="YRt-nX-DIa"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="textView" destination="d32-xF-MvW" id="dwC-Cl-3Pl"/>
<outlet property="textViewHeight" destination="J3M-HG-f2p" id="rK2-Hv-d1g"/>
</connections>
<point key="canvasLocation" x="334" y="383"/>
</tableViewCell>
</objects>
</document>

View file

@ -65,7 +65,7 @@ namespace
- (void)keyboardWillShow:(NSNotification *)notification
{
CGSize const keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGSize const keyboardSize = [notification.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGFloat const bottomInset = UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) ?
keyboardSize.height : keyboardSize.width;

View file

@ -47,7 +47,6 @@ vector<MWMPlacePageCellType> const kSectionMetadataCellTypes {
vector<MWMPlacePageCellType> const kSectionEditingCellTypes {
MWMPlacePageCellTypeEditButton,
MWMPlacePageCellTypeAddBusinessButton,
MWMPlacePageCellTypeReportButton
};
using TCellTypesSectionMap = pair<vector<MWMPlacePageCellType>, PlacePageSection>;
@ -69,8 +68,7 @@ MWMPlacePageCellTypeValueMap const kCellType2ReuseIdentifier{
{MWMPlacePageCellTypeOpenHours, "MWMPlacePageOpeningHoursCell"},
{MWMPlacePageCellTypeBookmark, "PlacePageBookmarkCell"},
{MWMPlacePageCellTypeEditButton, "MWMPlacePageButtonCell"},
{MWMPlacePageCellTypeAddBusinessButton, "MWMPlacePageButtonCell"},
{MWMPlacePageCellTypeReportButton, "MWMPlacePageButtonCell"}};
{MWMPlacePageCellTypeAddBusinessButton, "MWMPlacePageButtonCell"}};
NSString * reuseIdentifier(MWMPlacePageCellType cellType)
{
@ -443,7 +441,6 @@ enum class AttributePosition
break;
case MWMPlacePageCellTypeEditButton:
case MWMPlacePageCellTypeAddBusinessButton:
case MWMPlacePageCellTypeReportButton:
[static_cast<MWMPlacePageButtonCell *>(cell) config:self.ownerPlacePage forType:cellType];
break;
default:

View file

@ -29,7 +29,6 @@
- (void)changeBookmarkDescription;
- (void)editPlace;
- (void)addBusiness;
- (void)reportProblem;
- (void)share;
- (void)route;
- (void)reloadBookmark;

View file

@ -143,11 +143,6 @@ static NSString * const kPlacePageViewCenterKeyPath = @"center";
[self.manager addBusiness];
}
- (void)reportProblem
{
[self.manager reportProblem];
}
- (void)share
{
[self.manager share];

View file

@ -20,15 +20,9 @@
switch (type)
{
case MWMPlacePageCellTypeAddBusinessButton:
[self.titleButton setTitleColor:[UIColor linkBlue] forState:UIControlStateNormal];
[self.titleButton setTitle:L(@"placepage_add_business_button") forState:UIControlStateNormal];
break;
case MWMPlacePageCellTypeReportButton:
[self.titleButton setTitleColor:[UIColor red] forState:UIControlStateNormal];
[self.titleButton setTitle:L(@"placepage_report_problem_button") forState:UIControlStateNormal];
break;
case MWMPlacePageCellTypeEditButton:
[self.titleButton setTitleColor:[UIColor linkBlue] forState:UIControlStateNormal];
[self.titleButton setTitle:L(@"edit_place") forState:UIControlStateNormal];
break;
default:
@ -50,10 +44,6 @@
[Statistics logEvent:kStatEditorAddClick withParameters:@{kStatValue : kStatPlacePage}];
[self.placePage addBusiness];
break;
case MWMPlacePageCellTypeReportButton:
[Statistics logEvent:kStatEventName(kStatPlacePage, kStatReport)];
[self.placePage reportProblem];
break;
default:
NSAssert(false, @"Incorrect cell type!");
break;

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
@ -14,17 +14,13 @@
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jmU-dJ-aRH">
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jmU-dJ-aRH">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<constraints>
<constraint firstAttribute="height" priority="999" constant="44" id="gfO-mi-8yS"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="9" maxY="0.0"/>
<state key="normal" title="Edit">
<color key="titleColor" red="0.1176470588" green="0.58823529409999997" blue="0.94117647059999998" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" red="0.49803921568627452" green="0.49803921568627452" blue="0.49803921568627452" alpha="1" colorSpace="calibratedRGB"/>
</state>
<state key="normal" title="Edit"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="linkBlue"/>

View file

@ -24,6 +24,7 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageCellType)
MWMPlacePageCellTypeZipCode,
MWMPlacePageCellTypeBuildingLevels,
MWMPlacePageCellTypeCuisine,
MWMPlacePageCellTypeNote,
MWMPlacePageCellTypeCount
};

View file

@ -151,9 +151,7 @@ void initFieldsMap()
return m_info.IsBookmark() ? @"" : nil;
case MWMPlacePageCellTypeEditButton:
// TODO(Vlad): It's a really strange way to "display" cell if returned text is not nil.
return m_info.IsEditable() && isNewMWM ? @"" : nil;
case MWMPlacePageCellTypeReportButton:
return /* m_info.IsFeature() && isNewMWM ? @"" : */nil;
return isNewMWM ? @"": nil;
case MWMPlacePageCellTypeAddBusinessButton:
return m_info.IsBuilding() ? @"" : nil;
default:

View file

@ -26,7 +26,6 @@
- (void)share;
- (void)editPlace;
- (void)addBusiness;
- (void)reportProblem;
- (void)addBookmark;
- (void)removeBookmark;
- (void)apiBack;

View file

@ -263,11 +263,6 @@ extern NSString * const kBookmarksChangedNotification;
[self.delegate addBusinessToPoint:self.entity.mercator];
}
- (void)reportProblem
{
[static_cast<MapViewController *>(self.ownerViewController) showReportController];
}
- (void)addBookmark
{
[Statistics logEvent:kStatEventName(kStatPlacePage, kStatBookmarks)

View file

@ -1,13 +0,0 @@
#import "MWMTableViewController.h"
#include "geometry/point2d.hpp"
@interface MWMReportBaseController : MWMTableViewController
- (void)configNavBar NS_REQUIRES_SUPER;
- (void)sendNote:(string const &)note NS_REQUIRES_SUPER;
- (void)setPoint:(m2::PointD const &)point NS_REQUIRES_SUPER;
- (m2::PointD const &)point;
@end

View file

@ -1,52 +0,0 @@
#import "LocationManager.h"
#import "MapsAppDelegate.h"
#import "MapViewController.h"
#import "MWMAuthorizationCommon.h"
#import "MWMMapViewControlsManager.h"
#import "MWMPlacePageEntity.h"
#import "MWMReportBaseController.h"
#import "Statistics.h"
#include "indexer/osm_editor.hpp"
@implementation MWMReportBaseController
{
m2::PointD m_point;
}
- (void)configNavBar
{
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:L(@"editor_report_problem_send_button")
style:UIBarButtonItemStylePlain target:self action:@selector(send)];
}
- (void)send
{
[self doesNotRecognizeSelector:_cmd];
}
- (void)sendNote:(string const &)note
{
NSAssert(!note.empty(), @"String can't be empty!");
auto const & featureID = MapsAppDelegate.theApp.mapViewController.controlsManager.placePageEntity.info.GetID();
auto const latLon = ToLatLon(m_point);
osm::Editor::Instance().CreateNote(latLon, featureID, note);
[Statistics logEvent:kStatEditorProblemReport withParameters:@{kStatEditorMWMName : @(featureID.GetMwmName().c_str()),
kStatEditorMWMVersion : @(featureID.GetMwmVersion()),
kStatProblem : @(note.c_str()),
kStatLat : @(latLon.lat),
kStatLon : @(latLon.lon)}];
[self.navigationController popToRootViewControllerAnimated:YES];
}
- (void)setPoint:(m2::PointD const &)point
{
m_point = point;
}
- (m2::PointD const &)point
{
return m_point;
}
@end

View file

@ -1,5 +0,0 @@
#import "MWMReportBaseController.h"
@interface MWMReportProblemController : MWMReportBaseController
@end

View file

@ -1,57 +0,0 @@
#import "MWMReportProblemController.h"
#import "SelectableCell.h"
#include "indexer/osm_editor.hpp"
@interface MWMReportProblemController ()
@property (weak, nonatomic) IBOutlet SelectableCell * placeDoesntExistCell;
@property (nonatomic) BOOL isCellSelected;
@end
@implementation MWMReportProblemController
- (void)viewDidLoad
{
[super viewDidLoad];
self.placeDoesntExistCell.accessoryType = UITableViewCellAccessoryNone;
[self configNavBar];
}
- (void)configNavBar
{
[super configNavBar];
self.title = L(@"editor_report_problem_title");
}
- (void)send
{
if (!self.isCellSelected)
return;
[self sendNote:osm::Editor::kPlaceDoesNotExistMessage];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
MWMReportBaseController * dvc = segue.destinationViewController;
NSAssert([dvc isKindOfClass:[MWMReportBaseController class]], @"Incorrect destination controller!");
dvc.point = self.point;
}
#pragma mark - UITableView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:YES];
if (indexPath.row > 0)
return;
self.isCellSelected = !self.isCellSelected;
self.placeDoesntExistCell.accessoryType = self.isCellSelected ? UITableViewCellAccessoryCheckmark :
UITableViewCellAccessoryNone;
}
@end

View file

@ -1,5 +0,0 @@
#import "MWMReportBaseController.h"
@interface MWMReportProblemExtendedController : MWMReportBaseController
@end

View file

@ -1,39 +0,0 @@
#import "MWMReportProblemExtendedController.h"
@interface MWMReportProblemExtendedController ()
@property (weak, nonatomic) IBOutlet UITextView * textView;
@end
@implementation MWMReportProblemExtendedController
- (void)viewDidLoad
{
[super viewDidLoad];
[self configNavBar];
}
- (void)configNavBar
{
[super configNavBar];
self.title = L(@"editor_report_problem_title");
}
- (void)send
{
if (!self.textView.text.length)
return;
[self sendNote:self.textView.text.UTF8String];
}
#pragma mark - UITableView
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
NSAssert(section == 0, @"Invalid section!");
return [NSString stringWithFormat:@"%@\n\n%@", L(@"editor_report_problem_desription_1"),
L(@"editor_report_problem_desription_2")];
}
@end

View file

@ -1 +1,2 @@
typedef void (^TMWMVoidBlock)();
typedef void (^MWMStringBlock)(NSString *);

View file

@ -35,7 +35,6 @@ namespace search { struct AddressInfo; }
- (void)openBookmarks;
- (void)openMapsDownloader;
- (void)openEditor;
- (void)showReportController;
- (void)refreshAd;

View file

@ -18,7 +18,6 @@
#import "MWMMapViewControlsManager.h"
#import "MWMPageController.h"
#import "MWMPlacePageEntity.h"
#import "MWMReportBaseController.h"
#import "MWMStorage.h"
#import "MWMTableViewController.h"
#import "MWMTextToSpeech.h"
@ -77,7 +76,6 @@ NSString * const kDownloaderSegue = @"Map2MapDownloaderSegue";
NSString * const kMigrationSegue = @"Map2MigrationSegue";
NSString * const kEditorSegue = @"Map2EditorSegue";
NSString * const kUDViralAlertWasShown = @"ViralAlertWasShown";
NSString * const kReportSegue = @"Map2ReportSegue";
} // namespace
@interface NSValueWrapper : NSObject
@ -568,11 +566,6 @@ NSString * const kReportSegue = @"Map2ReportSegue";
[self performSegueWithIdentifier:kEditorSegue sender:self.controlsManager.placePageEntity];
}
- (void)showReportController
{
[self performSegueWithIdentifier:kReportSegue sender:self.controlsManager.placePageEntity];
}
- (void)processMyPositionStateModeEvent:(location::EMyPositionMode)mode
{
[m_predictor setMode:mode];
@ -853,11 +846,6 @@ NSString * const kReportSegue = @"Map2ReportSegue";
MWMMapDownloaderViewController * dvc = segue.destinationViewController;
dvc.parentCountryId = @(GetFramework().Storage().GetRootId().c_str());
}
else if ([segue.identifier isEqualToString:kReportSegue])
{
MWMReportBaseController * dvc = segue.destinationViewController;
dvc.point = static_cast<MWMPlacePageEntity *>(sender).mercator;
}
else if ([segue.identifier isEqualToString:kMap2FBLoginSegue])
{
MWMAuthorizationWebViewLoginViewController * dvc = segue.destinationViewController;

View file

@ -658,12 +658,6 @@
F607C1891C032A8800B53A87 /* resources-hdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = F607C1841C032A8800B53A87 /* resources-hdpi_dark */; };
F607C18A1C032A8800B53A87 /* resources-hdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = F607C1841C032A8800B53A87 /* resources-hdpi_dark */; };
F607C18E1C047FDC00B53A87 /* MWMSegue.mm in Sources */ = {isa = PBXBuildFile; fileRef = F607C18D1C047FDC00B53A87 /* MWMSegue.mm */; };
F60F02E11C904E08003A0AF6 /* MWMReportProblemController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */; };
F60F02E41C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */; };
F60F02E51C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */; };
F60F02E61C904E86003A0AF6 /* MWMReportProblemController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */; };
F60F02E91C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */; };
F60F02EA1C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */; };
F61579341AC2CE9A0032D8E9 /* MWMRateAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F61579331AC2CE9A0032D8E9 /* MWMRateAlert.mm */; };
F61579361AC2CEB60032D8E9 /* MWMRateAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F61579351AC2CEB60032D8E9 /* MWMRateAlert.xib */; };
F6172FA51BBD5A3E0081D325 /* MWMiPadRoutePreview.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6172FA41BBD5A3E0081D325 /* MWMiPadRoutePreview.xib */; };
@ -765,6 +759,18 @@
F6CB21681AEFC6AA00FB8963 /* MWMPlacePageActionBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6CB21671AEFC6AA00FB8963 /* MWMPlacePageActionBar.mm */; };
F6CB216D1AF13EBD00FB8963 /* MWMPlacePageBookmarkCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6CB216C1AF13EBD00FB8963 /* MWMPlacePageBookmarkCell.mm */; };
F6D409FA1B319BD70041730F /* ContextViews.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D409F91B319BD70041730F /* ContextViews.mm */; };
F6D4A72F1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A72E1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm */; };
F6D4A7301CC1030E00BD4E5B /* MWMEditorNotesFooter.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A72E1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm */; };
F6D4A7351CC103FB00BD4E5B /* MWMEditorNotesFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7341CC103FB00BD4E5B /* MWMEditorNotesFooter.xib */; };
F6D4A7361CC103FB00BD4E5B /* MWMEditorNotesFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7341CC103FB00BD4E5B /* MWMEditorNotesFooter.xib */; };
F6D4A73A1CC1267E00BD4E5B /* MWMNoteCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A7381CC1267E00BD4E5B /* MWMNoteCell.mm */; };
F6D4A73B1CC1267E00BD4E5B /* MWMNoteCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A7381CC1267E00BD4E5B /* MWMNoteCell.mm */; };
F6D4A73C1CC1267E00BD4E5B /* MWMNoteCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7391CC1267E00BD4E5B /* MWMNoteCell.xib */; };
F6D4A73D1CC1267E00BD4E5B /* MWMNoteCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7391CC1267E00BD4E5B /* MWMNoteCell.xib */; };
F6D4A7411CC1643100BD4E5B /* MWMNoteButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A73F1CC1643100BD4E5B /* MWMNoteButtonCell.m */; };
F6D4A7421CC1643100BD4E5B /* MWMNoteButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D4A73F1CC1643100BD4E5B /* MWMNoteButtonCell.m */; };
F6D4A7431CC1643100BD4E5B /* MWMNoteButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7401CC1643100BD4E5B /* MWMNoteButtonCell.xib */; };
F6D4A7441CC1643100BD4E5B /* MWMNoteButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6D4A7401CC1643100BD4E5B /* MWMNoteButtonCell.xib */; };
F6DBF9B61AA8779300F2EC2C /* CALayer+RuntimeAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6DBF9B51AA8779300F2EC2C /* CALayer+RuntimeAttributes.mm */; };
F6E0047B1B908CF5003BF5D8 /* MWMNiPadNavigationDashboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6E0047A1B908CF5003BF5D8 /* MWMNiPadNavigationDashboard.xib */; };
F6ED13541B1643900095C6DE /* MWMDirectionView.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6ED13531B1643900095C6DE /* MWMDirectionView.mm */; };
@ -778,6 +784,10 @@
F6FE2C0F1B03A006009814AA /* MWMPlacePageNavigationBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FE2C0E1B03A006009814AA /* MWMPlacePageNavigationBar.mm */; };
F6FE2C111B03A016009814AA /* PlacePageNavigationBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6FE2C101B03A015009814AA /* PlacePageNavigationBar.xib */; };
F6FE2C151B04A44E009814AA /* MWMPlacePageEntity.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FE2C141B04A44E009814AA /* MWMPlacePageEntity.mm */; };
F6FE3C381CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm */; };
F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm */; };
F6FE3C3B1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */; };
F6FE3C3C1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */; };
F6FEA82D1C58E89B007223CC /* MWMButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FEA82C1C58E89B007223CC /* MWMButton.mm */; };
F6FEA82E1C58F108007223CC /* MWMButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6FEA82C1C58E89B007223CC /* MWMButton.mm */; };
F6FF2E2B1B8C5C020063FD1F /* MWMNextTurnPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6FF2E2A1B8C5C020063FD1F /* MWMNextTurnPanel.xib */; };
@ -1309,12 +1319,6 @@
F607C1841C032A8800B53A87 /* resources-hdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-hdpi_dark"; path = "../../data/resources-hdpi_dark"; sourceTree = "<group>"; };
F607C18C1C047FDC00B53A87 /* MWMSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSegue.h; sourceTree = "<group>"; };
F607C18D1C047FDC00B53A87 /* MWMSegue.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSegue.mm; sourceTree = "<group>"; };
F60F02DF1C904E08003A0AF6 /* MWMReportProblemController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportProblemController.h; sourceTree = "<group>"; };
F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportProblemController.mm; sourceTree = "<group>"; };
F60F02E21C904E3E003A0AF6 /* MWMReportProblemExtendedController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportProblemExtendedController.h; sourceTree = "<group>"; };
F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportProblemExtendedController.mm; sourceTree = "<group>"; };
F60F02E71C904F40003A0AF6 /* MWMReportBaseController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMReportBaseController.h; sourceTree = "<group>"; };
F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMReportBaseController.mm; sourceTree = "<group>"; };
F61579321AC2CE9A0032D8E9 /* MWMRateAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMRateAlert.h; sourceTree = "<group>"; };
F61579331AC2CE9A0032D8E9 /* MWMRateAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMRateAlert.mm; sourceTree = "<group>"; };
F61579351AC2CEB60032D8E9 /* MWMRateAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMRateAlert.xib; sourceTree = "<group>"; };
@ -1452,6 +1456,15 @@
F6CB216C1AF13EBD00FB8963 /* MWMPlacePageBookmarkCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPlacePageBookmarkCell.mm; sourceTree = "<group>"; };
F6D409F81B319BD70041730F /* ContextViews.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContextViews.h; sourceTree = "<group>"; };
F6D409F91B319BD70041730F /* ContextViews.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextViews.mm; sourceTree = "<group>"; };
F6D4A72D1CC1030E00BD4E5B /* MWMEditorNotesFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMEditorNotesFooter.h; sourceTree = "<group>"; };
F6D4A72E1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMEditorNotesFooter.mm; sourceTree = "<group>"; };
F6D4A7341CC103FB00BD4E5B /* MWMEditorNotesFooter.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMEditorNotesFooter.xib; sourceTree = "<group>"; };
F6D4A7371CC1267E00BD4E5B /* MWMNoteCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMNoteCell.h; sourceTree = "<group>"; };
F6D4A7381CC1267E00BD4E5B /* MWMNoteCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMNoteCell.mm; sourceTree = "<group>"; };
F6D4A7391CC1267E00BD4E5B /* MWMNoteCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMNoteCell.xib; sourceTree = "<group>"; };
F6D4A73E1CC1643100BD4E5B /* MWMNoteButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMNoteButtonCell.h; sourceTree = "<group>"; };
F6D4A73F1CC1643100BD4E5B /* MWMNoteButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWMNoteButtonCell.m; sourceTree = "<group>"; };
F6D4A7401CC1643100BD4E5B /* MWMNoteButtonCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMNoteButtonCell.xib; sourceTree = "<group>"; };
F6DBF9B41AA8779300F2EC2C /* CALayer+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CALayer+RuntimeAttributes.h"; sourceTree = "<group>"; };
F6DBF9B51AA8779300F2EC2C /* CALayer+RuntimeAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "CALayer+RuntimeAttributes.mm"; sourceTree = "<group>"; };
F6E0047A1B908CF5003BF5D8 /* MWMNiPadNavigationDashboard.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMNiPadNavigationDashboard.xib; sourceTree = "<group>"; };
@ -1474,6 +1487,9 @@
F6FE2C101B03A015009814AA /* PlacePageNavigationBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlacePageNavigationBar.xib; sourceTree = "<group>"; };
F6FE2C131B04A44E009814AA /* MWMPlacePageEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMPlacePageEntity.h; sourceTree = "<group>"; };
F6FE2C141B04A44E009814AA /* MWMPlacePageEntity.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPlacePageEntity.mm; sourceTree = "<group>"; };
F6FE3C361CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMPlaceDoesntExistAlert.h; sourceTree = "<group>"; };
F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPlaceDoesntExistAlert.mm; sourceTree = "<group>"; };
F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMPlaceDoesntExistAlert.xib; sourceTree = "<group>"; };
F6FEA82B1C58E89B007223CC /* MWMButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMButton.h; sourceTree = "<group>"; };
F6FEA82C1C58E89B007223CC /* MWMButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMButton.mm; sourceTree = "<group>"; };
F6FF2E2A1B8C5C020063FD1F /* MWMNextTurnPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMNextTurnPanel.xib; sourceTree = "<group>"; };
@ -1655,7 +1671,6 @@
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
F60F02DE1C904DE8003A0AF6 /* ReportProblem */,
34479C741C60C6130065D261 /* Framework */,
34CE8A641C7740CF00F4351A /* Storage */,
34ABA61D1C2D514A00FE1BEC /* Input Validators */,
@ -2330,6 +2345,7 @@
34EB84501C0738D30004689F /* Editor */ = {
isa = PBXGroup;
children = (
F6D4A72C1CC102EA00BD4E5B /* Notes */,
F653CE1D1C7361DF00A453F1 /* FeatureType */,
34F9FB811C4389EE00F71201 /* Street */,
340C20E01C3E563500111D22 /* Cuisine */,
@ -2511,19 +2527,6 @@
name = Segue;
sourceTree = "<group>";
};
F60F02DE1C904DE8003A0AF6 /* ReportProblem */ = {
isa = PBXGroup;
children = (
F60F02E71C904F40003A0AF6 /* MWMReportBaseController.h */,
F60F02E81C904F40003A0AF6 /* MWMReportBaseController.mm */,
F60F02DF1C904E08003A0AF6 /* MWMReportProblemController.h */,
F60F02E01C904E08003A0AF6 /* MWMReportProblemController.mm */,
F60F02E21C904E3E003A0AF6 /* MWMReportProblemExtendedController.h */,
F60F02E31C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm */,
);
name = ReportProblem;
sourceTree = "<group>";
};
F613FA741AB330AF002394D4 /* MapViewController */ = {
isa = PBXGroup;
children = (
@ -2586,6 +2589,7 @@
F64F195F1AB8125C006EAF7E /* CustomAlert */ = {
isa = PBXGroup;
children = (
F6FE3C351CC50FDF00A73196 /* PlaceDoesntExist */,
F6BD1D1D1CA412700047B8E8 /* AuthAlert */,
F64D9C9C1C899BEA0063FA30 /* EditorAlert */,
F63774E51B59374F00BCF54D /* RoutingDisclaimerAlert */,
@ -2885,6 +2889,22 @@
name = ActionBar;
sourceTree = "<group>";
};
F6D4A72C1CC102EA00BD4E5B /* Notes */ = {
isa = PBXGroup;
children = (
F6D4A72D1CC1030E00BD4E5B /* MWMEditorNotesFooter.h */,
F6D4A72E1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm */,
F6D4A7341CC103FB00BD4E5B /* MWMEditorNotesFooter.xib */,
F6D4A7371CC1267E00BD4E5B /* MWMNoteCell.h */,
F6D4A7381CC1267E00BD4E5B /* MWMNoteCell.mm */,
F6D4A7391CC1267E00BD4E5B /* MWMNoteCell.xib */,
F6D4A73E1CC1643100BD4E5B /* MWMNoteButtonCell.h */,
F6D4A73F1CC1643100BD4E5B /* MWMNoteButtonCell.m */,
F6D4A7401CC1643100BD4E5B /* MWMNoteButtonCell.xib */,
);
name = Notes;
sourceTree = "<group>";
};
F6F722F51AE156A000DA3DA1 /* PlacePage */ = {
isa = PBXGroup;
children = (
@ -2924,6 +2944,16 @@
name = iPhonePortrait;
sourceTree = "<group>";
};
F6FE3C351CC50FDF00A73196 /* PlaceDoesntExist */ = {
isa = PBXGroup;
children = (
F6FE3C361CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.h */,
F6FE3C371CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm */,
F6FE3C3A1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib */,
);
name = PlaceDoesntExist;
sourceTree = "<group>";
};
FA065FC61286143F00FEA989 /* External Resources */ = {
isa = PBXGroup;
children = (
@ -3172,6 +3202,7 @@
buildActionMask = 2147483647;
files = (
4519503A1B7A3E070085DA05 /* patterns.txt in Resources */,
F6FE3C3B1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib in Resources */,
5605022F1B6211E100169CAD /* sound-strings in Resources */,
34CCFDE21C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.xib in Resources */,
452FCA3B1B6A3DF7007019AB /* colors.txt in Resources */,
@ -3188,6 +3219,7 @@
341F99DB1C6B1165001C67B8 /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */,
EE583CBB12F773F00042CBE3 /* unicode_blocks.txt in Resources */,
EEFE7C1412F8C9E1006AF8C3 /* fonts_blacklist.txt in Resources */,
F6D4A7431CC1643100BD4E5B /* MWMNoteButtonCell.xib in Resources */,
4A23D15F1B8B4DD700D4EB6F /* resources-xxhdpi_clear in Resources */,
F6BD33781B62400E00F2CE18 /* MWMLandscapeNavigationDashboard.xib in Resources */,
F64F199E1AB81A00006EAF7E /* MWMDefaultAlert.xib in Resources */,
@ -3204,6 +3236,7 @@
EEA61603134C496A003A9827 /* 03_jomolhari-id-a3d.ttf in Resources */,
347FD8711C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.xib in Resources */,
EEA61604134C496A003A9827 /* 04_padauk.ttf in Resources */,
F6D4A73C1CC1267E00BD4E5B /* MWMNoteCell.xib in Resources */,
3406FA181C6E0D8F00E9FAD2 /* MWMMapDownloadDialog.xib in Resources */,
341F99E31C6B1165001C67B8 /* MWMMapDownloaderTableViewCell.xib in Resources */,
341F99D71C6B1165001C67B8 /* MWMMapDownloaderLargeCountryTableViewCell.xib in Resources */,
@ -3258,6 +3291,7 @@
F6588E381B15D87A00EE1E58 /* MWMBookmarkColorCell.xib in Resources */,
3401CD691C3C03A80028C6F8 /* MWMEditorTextTableViewCell.xib in Resources */,
FAAEA7D1161BD26600CCD661 /* synonyms.txt in Resources */,
F6D4A7351CC103FB00BD4E5B /* MWMEditorNotesFooter.xib in Resources */,
4A00DBDF1AB704C400113624 /* drules_proto_dark.bin in Resources */,
4A23D15D1B8B4DD700D4EB6F /* resources-mdpi_clear in Resources */,
F6FE2C111B03A016009814AA /* PlacePageNavigationBar.xib in Resources */,
@ -3312,6 +3346,7 @@
buildActionMask = 2147483647;
files = (
676507611C10559B00830BB3 /* colors.txt in Resources */,
F6FE3C3C1CC5106500A73196 /* MWMPlaceDoesntExistAlert.xib in Resources */,
671182E51C7F0DDB00CB8177 /* packed_polygons_obsolete.bin in Resources */,
676507601C10559800830BB3 /* patterns.txt in Resources */,
6741A9421BF340DE002C974C /* sound-strings in Resources */,
@ -3328,6 +3363,7 @@
6741A94B1BF340DE002C974C /* unicode_blocks.txt in Resources */,
6741A94C1BF340DE002C974C /* fonts_blacklist.txt in Resources */,
3401CD721C3C0C420028C6F8 /* MWMEditorNameTableViewCell.xib in Resources */,
F6D4A7441CC1643100BD4E5B /* MWMNoteButtonCell.xib in Resources */,
34CCFDE31C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.xib in Resources */,
6741A94D1BF340DE002C974C /* resources-xxhdpi_clear in Resources */,
6741A94E1BF340DE002C974C /* MWMLandscapeNavigationDashboard.xib in Resources */,
@ -3343,6 +3379,7 @@
341F99DC1C6B1165001C67B8 /* MWMMapDownloaderPlaceTableViewCell.xib in Resources */,
6741A9551BF340DE002C974C /* resources-xxhdpi_dark in Resources */,
671182E61C7F0DDD00CB8177 /* countries_obsolete.txt in Resources */,
F6D4A73D1CC1267E00BD4E5B /* MWMNoteCell.xib in Resources */,
347FD86E1C60B2CE002FB65E /* MWMOpeningHoursAddScheduleTableViewCell.xib in Resources */,
9DA46A0D1C47E92100EF52BA /* resources-xhdpi_legacy in Resources */,
9DA46A0F1C47E92100EF52BA /* resources-xxhdpi_legacy in Resources */,
@ -3398,6 +3435,7 @@
6741A9781BF340DE002C974C /* AddSetTableViewCell.xib in Resources */,
6741A9791BF340DE002C974C /* Localizable.strings in Resources */,
9DA46A091C47E92100EF52BA /* resources-hdpi_legacy in Resources */,
F6D4A7361CC103FB00BD4E5B /* MWMEditorNotesFooter.xib in Resources */,
34CCFDD81C22915600F28959 /* MWMPlacePageOpeningHoursWeekDayView.xib in Resources */,
6741A97A1BF340DE002C974C /* MWMSearchView.xib in Resources */,
6741A97C1BF340DE002C974C /* MWMBookmarkColorCell.xib in Resources */,
@ -3513,12 +3551,12 @@
34F9FB8B1C438ADB00F71201 /* MWMStreetEditorViewController.mm in Sources */,
EED10A4511F78D120095FAD4 /* MapViewController.mm in Sources */,
34CCFDD11C21945500F28959 /* MWMPlacePageOpeningHoursDayView.mm in Sources */,
F60F02E41C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */,
F61579341AC2CE9A0032D8E9 /* MWMRateAlert.mm in Sources */,
F6BB6CC61BB18C0900DF1DF2 /* MWMRoutePointCell.m in Sources */,
A3CC2CD41A1C723900B832E1 /* LocationPredictor.mm in Sources */,
347D7C691C2C0703006B2D0A /* UITextView+RuntimeAttributes.mm in Sources */,
34181EB91C0ED1C30081B586 /* MWMOpeningHoursSection.mm in Sources */,
F6D4A72F1CC1030E00BD4E5B /* MWMEditorNotesFooter.mm in Sources */,
F62404FB1AAF3DB200B58DB6 /* UILabel+RuntimeAttributes.mm in Sources */,
34CC4C0E1B82069C00E44C1F /* MWMSearchTabbedCollectionViewCell.mm in Sources */,
F6588E2C1B15C26700EE1E58 /* MWMTextView.mm in Sources */,
@ -3549,6 +3587,7 @@
F6BBF2C61B4FFB72000CF8E2 /* MWMLocationAlert.mm in Sources */,
F66A8FB01B09F268001B9C97 /* MWMPlacePage.mm in Sources */,
F6ED13911B1EF96B0095C6DE /* MWMBookmarkDescriptionViewController.mm in Sources */,
F6FE3C381CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm in Sources */,
F64F19991AB81A00006EAF7E /* MWMAlertViewController.mm in Sources */,
341223BB1BEB58FA007227E9 /* MWMBaseMapDownloaderViewController.mm in Sources */,
FAFCB63613366E78001A5C59 /* WebViewController.mm in Sources */,
@ -3609,6 +3648,7 @@
34B82AD61B84746E00180497 /* MWMSearchSuggestionCell.mm in Sources */,
F6C641B01C15BBE6008FCAF3 /* MWMRecentTrackSettingsController.mm in Sources */,
341F99F11C6B4288001C67B8 /* MWMMapDownloaderSearchDataSource.mm in Sources */,
F6D4A73A1CC1267E00BD4E5B /* MWMNoteCell.mm in Sources */,
F6588E2F1B15D2BC00EE1E58 /* MWMBookmarkColorViewController.mm in Sources */,
34BC1E561C2ADBD3009BBF51 /* MWMOpeningHoursCommon.mm in Sources */,
F653CE161C71F60200A453F1 /* MWMAddPlaceNavigationBar.mm in Sources */,
@ -3634,7 +3674,6 @@
34BC72241B0DECAE0012A34B /* MWMMapViewControlsManager.mm in Sources */,
F6B2E61F1C3D5F31005562DF /* MWMNightModeController.mm in Sources */,
F6BD33791B62400E00F2CE18 /* MWMNavigationDashboard.mm in Sources */,
F60F02E91C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */,
F6BD1D201CA412920047B8E8 /* MWMOsmAuthAlert.mm in Sources */,
347FD8891C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */,
34CD81C31C91C281007D2A60 /* MWMWhatsNewNightModeController.mm in Sources */,
@ -3662,7 +3701,6 @@
F64F4B6D1B46A51F0081A24A /* MWMDownloaderDialogCell.mm in Sources */,
3491E7CB1C06F1F10042FE24 /* MWMPlacePageButtonCell.mm in Sources */,
97508423199522D300A7457D /* SettingsAndMoreVC.mm in Sources */,
F60F02E11C904E08003A0AF6 /* MWMReportProblemController.mm in Sources */,
341F99D91C6B1165001C67B8 /* MWMMapDownloaderPlaceTableViewCell.mm in Sources */,
341F99D51C6B1165001C67B8 /* MWMMapDownloaderLargeCountryTableViewCell.mm in Sources */,
347FD86F1C60B2CE002FB65E /* MWMOpeningHoursAllDayTableViewCell.mm in Sources */,
@ -3677,6 +3715,7 @@
F6BD33841B6240F200F2CE18 /* MWMNavigationView.mm in Sources */,
3472EC051B4D44BE0085CB79 /* UIFont+MapsMeFonts.mm in Sources */,
342AD76F1B53D30C00E0B997 /* UIButton+RuntimeAttributes.mm in Sources */,
F6D4A7411CC1643100BD4E5B /* MWMNoteButtonCell.m in Sources */,
349C26B91BB04ED30005DF2F /* MWMBottomMenuView.mm in Sources */,
F63732961AE9431E00A03764 /* MWMBasePlacePageView.mm in Sources */,
F64F199B1AB81A00006EAF7E /* MWMAlert.mm in Sources */,
@ -3733,6 +3772,7 @@
6741A9BF1BF340DE002C974C /* MWMSearchTabbedCollectionViewCell.mm in Sources */,
6741A9C01BF340DE002C974C /* MWMTextView.mm in Sources */,
6741A9C11BF340DE002C974C /* MWMNextTurnPanel.mm in Sources */,
F6D4A7301CC1030E00BD4E5B /* MWMEditorNotesFooter.mm in Sources */,
6741A9C21BF340DE002C974C /* MWMiPhonePortraitPlacePage.mm in Sources */,
347FD8841C60B2CE002FB65E /* MWMOpeningHoursTableViewCell.mm in Sources */,
6741A9C31BF340DE002C974C /* MWMPlacePageActionBar.mm in Sources */,
@ -3760,9 +3800,9 @@
6741A9D01BF340DE002C974C /* MWMPlacePage.mm in Sources */,
3492CC131C6DF00F0057D8E8 /* (null) in Sources */,
6741A9D21BF340DE002C974C /* MWMBookmarkDescriptionViewController.mm in Sources */,
F60F02E61C904E86003A0AF6 /* MWMReportProblemController.mm in Sources */,
3476B8CC1BFDCB6700874594 /* MWMTTSSettingsViewController.mm in Sources */,
6741A9D41BF340DE002C974C /* MWMAlertViewController.mm in Sources */,
F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.mm in Sources */,
34C9BD0A1C6DBCDA000DC38D /* MWMNavigationController.mm in Sources */,
3406FA161C6E0C3300E9FAD2 /* MWMMapDownloadDialog.mm in Sources */,
6741A9D51BF340DE002C974C /* WebViewController.mm in Sources */,
@ -3823,6 +3863,7 @@
6741A9FC1BF340DE002C974C /* iosOGLContextFactory.mm in Sources */,
6741A9FE1BF340DE002C974C /* SelectSetVC.mm in Sources */,
34BC1E571C2ADBD3009BBF51 /* MWMOpeningHoursCommon.mm in Sources */,
F6D4A73B1CC1267E00BD4E5B /* MWMNoteCell.mm in Sources */,
347FD8681C60B2CE002FB65E /* MWMOpeningHoursAddClosedTableViewCell.mm in Sources */,
6741A9FF1BF340DE002C974C /* AddSetVC.mm in Sources */,
6741AA011BF340DE002C974C /* MWMSearchTabbedViewLayout.mm in Sources */,
@ -3846,8 +3887,6 @@
34CCFDE11C22A2EF00F28959 /* MWMPlacePageOpeningHoursCell.mm in Sources */,
6741AA0D1BF340DE002C974C /* LocalNotificationManager.mm in Sources */,
347FD88A1C60B2CE002FB65E /* MWMOpeningHoursTimeSpanTableViewCell.mm in Sources */,
F60F02E51C904E3E003A0AF6 /* MWMReportProblemExtendedController.mm in Sources */,
F60F02EA1C904F40003A0AF6 /* MWMReportBaseController.mm in Sources */,
6741AA0E1BF340DE002C974C /* AppInfo.mm in Sources */,
F6BD1D211CA412920047B8E8 /* MWMOsmAuthAlert.mm in Sources */,
6741AA0F1BF340DE002C974C /* MWMSearchHistoryMyPositionCell.mm in Sources */,
@ -3891,6 +3930,7 @@
6741AA241BF340DE002C974C /* UIButton+RuntimeAttributes.mm in Sources */,
6741AA251BF340DE002C974C /* MWMBottomMenuView.mm in Sources */,
F6FEA82E1C58F108007223CC /* MWMButton.mm in Sources */,
F6D4A7421CC1643100BD4E5B /* MWMNoteButtonCell.m in Sources */,
6741AA271BF340DE002C974C /* MWMBasePlacePageView.mm in Sources */,
F64D9C9B1C8861BA0063FA30 /* MWMObjectsCategorySelectorController.mm in Sources */,
6741AA281BF340DE002C974C /* MWMAlert.mm in Sources */,

View file

@ -30,7 +30,6 @@
<navigationItem key="navigationItem" id="8E8-0f-UV9"/>
<connections>
<segue destination="Lfa-Zp-orR" kind="custom" identifier="Map2EditorSegue" customClass="MWMSegue" id="OEF-kR-jKi"/>
<segue destination="Lgr-ZK-lGB" kind="custom" identifier="Map2ReportSegue" customClass="MWMSegue" id="gCh-Ix-flI"/>
<segue destination="QlF-CJ-cEG" kind="custom" identifier="MapToCategorySelectorSegue" customClass="MWMSegue" id="4Cc-99-mlN"/>
<segue destination="4R7-Vk-fQr" kind="custom" identifier="Map2OsmLogin" customClass="MWMSegue" id="7YC-t5-0WN"/>
<segue destination="anB-7S-ebY" kind="custom" identifier="Map2FBLogin" customClass="MWMSegue" id="nCr-QR-kY7"/>
@ -1008,156 +1007,6 @@
</objects>
<point key="canvasLocation" x="1134" y="2753"/>
</scene>
<!--Report Problem Controller-->
<scene sceneID="RAz-lh-lom">
<objects>
<tableViewController id="Lgr-ZK-lGB" customClass="MWMReportProblemController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="li8-xE-fzL">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection id="gnw-eJ-Ieg">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" accessoryType="checkmark" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="SelectableCell" id="g66-LD-sto" customClass="SelectableCell">
<rect key="frame" x="0.0" y="35" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="g66-LD-sto" id="5kM-d9-YTL">
<rect key="frame" x="0.0" y="0.0" width="561" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Place doesn't exist" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="477" translatesAutoresizingMaskIntoConstraints="NO" id="9h0-27-Qdf">
<rect key="frame" x="16" y="11" width="527" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_report_problem_no_place_title"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<constraints>
<constraint firstAttribute="bottomMargin" secondItem="9h0-27-Qdf" secondAttribute="bottom" constant="3.5" id="E6x-dZ-hhU"/>
<constraint firstAttribute="trailingMargin" secondItem="9h0-27-Qdf" secondAttribute="trailing" constant="10" id="aZV-kX-gEm"/>
<constraint firstItem="9h0-27-Qdf" firstAttribute="leading" secondItem="5kM-d9-YTL" secondAttribute="leadingMargin" constant="8" id="e6j-E8-7Sr"/>
<constraint firstItem="9h0-27-Qdf" firstAttribute="top" secondItem="5kM-d9-YTL" secondAttribute="topMargin" constant="3" id="fdM-4J-HXY"/>
</constraints>
</tableViewCellContentView>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="titleLabel" destination="9h0-27-Qdf" id="H0n-Kf-h4a"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="LinkCell" id="EX5-r9-xqT" customClass="LinkCell">
<rect key="frame" x="0.0" y="79" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="EX5-r9-xqT" id="nQT-aY-P4o">
<rect key="frame" x="0.0" y="0.0" width="567" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Other" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="483" translatesAutoresizingMaskIntoConstraints="NO" id="Tyx-T5-jhZ">
<rect key="frame" x="16" y="11" width="533" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="editor_report_problem_other_title"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<constraints>
<constraint firstItem="Tyx-T5-jhZ" firstAttribute="leading" secondItem="nQT-aY-P4o" secondAttribute="leadingMargin" constant="8" id="NBC-ht-mZv"/>
<constraint firstItem="Tyx-T5-jhZ" firstAttribute="top" secondItem="nQT-aY-P4o" secondAttribute="topMargin" constant="3" id="Zup-2W-vrv"/>
<constraint firstAttribute="trailingMargin" secondItem="Tyx-T5-jhZ" secondAttribute="trailing" constant="10" id="lbh-4g-faW"/>
<constraint firstAttribute="bottomMargin" secondItem="Tyx-T5-jhZ" secondAttribute="bottom" constant="3.5" id="ynn-p5-DoB"/>
</constraints>
</tableViewCellContentView>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="titleLabel" destination="Tyx-T5-jhZ" id="ybn-sU-9Cm"/>
<segue destination="Ajb-eT-8P5" kind="custom" identifier="2ExtendedReportSegue" customClass="MWMSegue" id="Gb3-ux-wqf"/>
</connections>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="Lgr-ZK-lGB" id="thy-3c-4iP"/>
<outlet property="delegate" destination="Lgr-ZK-lGB" id="kA1-Uj-n5M"/>
</connections>
</tableView>
<connections>
<outlet property="placeDoesntExistCell" destination="g66-LD-sto" id="8A7-uC-72C"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="HsP-Mh-TdZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1866" y="1978"/>
</scene>
<!--Report Problem Extended Controller-->
<scene sceneID="MQs-9R-SZd">
<objects>
<tableViewController id="Ajb-eT-8P5" customClass="MWMReportProblemExtendedController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="static" style="grouped" separatorStyle="default" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="Urf-xt-sj3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection id="M33-4h-2SR">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" rowHeight="128" id="Wg5-bm-vvK">
<rect key="frame" x="0.0" y="35" width="600" height="128"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Wg5-bm-vvK" id="2nm-b7-p6S">
<rect key="frame" x="0.0" y="0.0" width="600" height="127"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="6cE-dD-8Es" customClass="MWMTextView">
<rect key="frame" x="0.0" y="0.0" width="600" height="127"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<inset key="scrollIndicatorInsets" minX="16" minY="12" maxX="16" maxY="12"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedPlaceholder" value="detailed_problem_description"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
</userDefinedRuntimeAttributes>
</textView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="6cE-dD-8Es" secondAttribute="trailing" id="46N-cT-757"/>
<constraint firstItem="6cE-dD-8Es" firstAttribute="leading" secondItem="2nm-b7-p6S" secondAttribute="leading" id="EcU-2x-yiV"/>
<constraint firstAttribute="bottom" secondItem="6cE-dD-8Es" secondAttribute="bottom" id="ijn-qI-Zcj"/>
<constraint firstItem="6cE-dD-8Es" firstAttribute="top" secondItem="2nm-b7-p6S" secondAttribute="top" id="mS6-LW-Exq"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="Ajb-eT-8P5" id="tKq-fG-sly"/>
<outlet property="delegate" destination="Ajb-eT-8P5" id="x6s-Q1-1pZ"/>
</connections>
</tableView>
<connections>
<outlet property="textView" destination="6cE-dD-8Es" id="j33-dl-6So"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="vnV-2b-u0g" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2584" y="1978"/>
</scene>
<!--AuthorizationOSM Login View Controller-->
<scene sceneID="14Y-XP-wqe">
<objects>