From 975ccf7b1333ad22e610d58ee62b82dc9fe0ea39 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Sat, 1 Sep 2012 16:43:51 +0300 Subject: [PATCH] [ios] Already added bookmark can be edited/deleted after click on a map --- iphone/Maps/Bookmarks/BalloonView.h | 11 ++++++- iphone/Maps/Bookmarks/BalloonView.mm | 39 +++++++++++++++++++++++- iphone/Maps/Bookmarks/PlacePageVC.mm | 15 ++++----- iphone/Maps/Classes/MapViewController.mm | 14 +++++---- 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/iphone/Maps/Bookmarks/BalloonView.h b/iphone/Maps/Bookmarks/BalloonView.h index 1fcc87a9a2..aaaa3d7cdb 100644 --- a/iphone/Maps/Bookmarks/BalloonView.h +++ b/iphone/Maps/Bookmarks/BalloonView.h @@ -9,6 +9,8 @@ SEL m_selector; Framework::AddressInfo m_addressInfo; + // If we clicked already existing bookmark, it will be here + BookmarkAndCategory m_rawBookmark; } @property(nonatomic, retain) NSString * title; @@ -25,10 +27,17 @@ @property(nonatomic, assign) CGPoint globalPosition; - (id) initWithTarget:(id)target andSelector:(SEL)selector; -- (void) showInView:(UIView *)view atPoint:(CGPoint)pt; +- (void) showInView:(UIView *)view atPoint:(CGPoint)pt withBookmark:(BookmarkAndCategory)bm; - (void) updatePosition:(UIView *)view atPoint:(CGPoint)pt; - (void) hide; // Update baloon image with new title - (void) updateTitle:(NSString *)newTitle; +// Kosher method to add bookmark into the Framework. +// It automatically "edits" bookmark if it's already exists +- (void) addOrEditBookmark; +// Deletes bookmark if we were editing it (clicked on already added bm) +// and does nothing if called for "new", not added bookmark +- (void) deleteBookmark; + @end diff --git a/iphone/Maps/Bookmarks/BalloonView.mm b/iphone/Maps/Bookmarks/BalloonView.mm index ec7d19062b..43e2a0401c 100644 --- a/iphone/Maps/Bookmarks/BalloonView.mm +++ b/iphone/Maps/Bookmarks/BalloonView.mm @@ -122,13 +122,15 @@ } -- (void) showInView:(UIView *)view atPoint:(CGPoint)pt +- (void) showInView:(UIView *)view atPoint:(CGPoint)pt withBookmark:(BookmarkAndCategory)bm { if (isDisplayed) [self hide]; isDisplayed = YES; + m_rawBookmark = bm; + CGFloat const w = self.pinImage.bounds.size.width; CGFloat const h = self.pinImage.bounds.size.height; self.pinImage.frame = CGRectMake(pt.x - w/2, pt.y - h, w, h); @@ -196,4 +198,39 @@ m_titleView.image = [self createPopupImageWithName:newTitle andAddress:description]; } +- (void) deleteBMHelper +{ + BookmarkCategory * cat = m_rawBookmark.first; + Bookmark const * bm = m_rawBookmark.second; + if (cat && bm) + { + for (size_t i = 0; i < cat->GetBookmarksCount(); ++i) + { + if (cat->GetBookmark(i) == bm) + { + cat->DeleteBookmark(i); + break; + } + } + } +} + +- (void) addOrEditBookmark +{ + // for an "edit" operation, delete old bookmark before adding "edited" one + [self deleteBMHelper]; + GetFramework().AddBookmark([self.setName UTF8String], + Bookmark(m2::PointD(self.globalPosition.x, self.globalPosition.y), + [self.title UTF8String], [self.color UTF8String])); + // Clear! + m_rawBookmark = BookmarkAndCategory(0, 0); +} + +- (void) deleteBookmark +{ + [self deleteBMHelper]; + // Clear! + m_rawBookmark = BookmarkAndCategory(0, 0); +} + @end diff --git a/iphone/Maps/Bookmarks/PlacePageVC.mm b/iphone/Maps/Bookmarks/PlacePageVC.mm index 32b60e0aa6..92956b7828 100644 --- a/iphone/Maps/Bookmarks/PlacePageVC.mm +++ b/iphone/Maps/Bookmarks/PlacePageVC.mm @@ -152,13 +152,14 @@ - (void)onAddClicked { - GetFramework().AddBookmark([m_balloon.setName UTF8String], - Bookmark(m2::PointD(m_balloon.globalPosition.x, m_balloon.globalPosition.y), - [m_balloon.title UTF8String], [m_balloon.color UTF8String])); + [m_balloon addOrEditBookmark]; + [m_balloon hide]; +} + +- (void)onRemoveClicked +{ + [m_balloon deleteBookmark]; [m_balloon hide]; -// // Don't forget to hide navbar -// [self.navigationController setNavigationBarHidden:YES animated:YES]; -// [self.navigationController popToRootViewControllerAnimated:YES]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath @@ -198,7 +199,7 @@ else { // Remove pin - [m_balloon hide]; + [self onRemoveClicked]; } // Close place page [self.navigationController popViewControllerAnimated:YES]; diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 4818a5627e..cad86acf60 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -141,8 +141,8 @@ CGPoint const pixelPos = [point CGPointValue]; CGFloat const scaleFactor = self.view.contentScaleFactor; - Bookmark const * bm = GetFramework().GetBookmark(m2::PointD(pixelPos.x * scaleFactor, pixelPos.y * scaleFactor)); - if (!bm) + BookmarkAndCategory res = GetFramework().GetBookmark(m2::PointD(pixelPos.x * scaleFactor, pixelPos.y * scaleFactor)); + if (!res.first || !res.second) { if (m_bookmark.isDisplayed) [m_bookmark hide]; @@ -150,17 +150,19 @@ { CGPoint const globalPos = [self viewPoint2GlobalPoint:pixelPos]; m_bookmark.globalPosition = globalPos; - [m_bookmark showInView:self.view atPoint:pixelPos]; + [m_bookmark showInView:self.view atPoint:pixelPos withBookmark:res]; } } else { // Already added bookmark was clicked - m2::PointD const globalPos = bm->GetOrg(); + m2::PointD const globalPos = res.second->GetOrg(); m_bookmark.globalPosition = CGPointMake(globalPos.x, globalPos.y); // Override bookmark name which was set automatically according to the point address in previous line - m_bookmark.title = [NSString stringWithUTF8String:bm->GetName().c_str()]; - [m_bookmark showInView:self.view atPoint:[self globalPoint2ViewPoint:m_bookmark.globalPosition]]; + m_bookmark.title = [NSString stringWithUTF8String:res.second->GetName().c_str()]; + m_bookmark.color = [NSString stringWithUTF8String:res.second->GetType().c_str()]; + m_bookmark.setName = [NSString stringWithUTF8String:res.first->GetName().c_str()]; + [m_bookmark showInView:self.view atPoint:[self globalPoint2ViewPoint:m_bookmark.globalPosition] withBookmark:res]; } }