[ios][bookmarks] Added kml export by email

This commit is contained in:
Alex Zolotarev 2012-12-27 14:41:08 +03:00 committed by Alex Zolotarev
parent 2edee62df6
commit 2cbd81e6d8
3 changed files with 169 additions and 114 deletions

View file

@ -1,9 +1,10 @@
#import <UIKit/UIKit.h>
#import <MessageUI/MFMailComposeViewController.h>
#import "LocationManager.h"
@class BalloonView;
@interface BookmarksVC : UITableViewController <LocationObserver, UITextFieldDelegate>
@interface BookmarksVC : UITableViewController <LocationObserver, UITextFieldDelegate, MFMailComposeViewControllerDelegate>
{
LocationManager * m_locationManager;
size_t m_categoryIndex;

View file

@ -35,6 +35,8 @@
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if ([MFMailComposeViewController canSendMail])
return 3;
return 2;
}
@ -44,6 +46,8 @@
{
case 0: return 2;
case 1: return GetFramework().GetBmCategory(m_categoryIndex)->GetBookmarksCount();
// Export bookmarks
case 2: return 1;
default: return 0;
}
}
@ -63,152 +67,198 @@
return nil;
UITableViewCell * cell = nil;
if (indexPath.section == 0)
switch (indexPath.section)
{
// First section, contains info about current set
if (indexPath.row == 0)
case 0:
{
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksVCSetNameCell"];
if (!cell)
if (indexPath.row == 0)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"BookmarksVCSetNameCell"] autorelease];
cell.textLabel.text = NSLocalizedString(@"name", @"Bookmarks dialog - Bookmark set cell");
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// Temporary, to init font and color
cell.detailTextLabel.text = @"temp string";
// Called to initialize frames and fonts
[cell layoutSubviews];
CGRect const leftR = cell.textLabel.frame;
CGFloat const padding = leftR.origin.x;
CGRect r = CGRectMake(padding + leftR.size.width + padding, leftR.origin.y,
cell.contentView.frame.size.width - 3 * padding - leftR.size.width, leftR.size.height);
UITextField * f = [[[UITextField alloc] initWithFrame:r] autorelease];
f.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
f.enablesReturnKeyAutomatically = YES;
f.returnKeyType = UIReturnKeyDone;
f.clearButtonMode = UITextFieldViewModeWhileEditing;
f.autocorrectionType = UITextAutocorrectionTypeNo;
f.textAlignment = UITextAlignmentRight;
f.textColor = cell.detailTextLabel.textColor;
f.font = [cell.detailTextLabel.font fontWithSize:[cell.detailTextLabel.font pointSize]];
f.tag = TEXTFIELD_TAG;
f.delegate = self;
// Reset temporary font
cell.detailTextLabel.text = nil;
[cell.contentView addSubview:f];
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksVCSetNameCell"];
if (!cell)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"BookmarksVCSetNameCell"] autorelease];
cell.textLabel.text = NSLocalizedString(@"name", nil);
cell.selectionStyle = UITableViewCellSelectionStyleNone;
// Temporary, to init font and color
cell.detailTextLabel.text = @"temp string";
// Called to initialize frames and fonts
[cell layoutSubviews];
CGRect const leftR = cell.textLabel.frame;
CGFloat const padding = leftR.origin.x;
CGRect r = CGRectMake(padding + leftR.size.width + padding, leftR.origin.y,
cell.contentView.frame.size.width - 3 * padding - leftR.size.width, leftR.size.height);
UITextField * f = [[[UITextField alloc] initWithFrame:r] autorelease];
f.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
f.enablesReturnKeyAutomatically = YES;
f.returnKeyType = UIReturnKeyDone;
f.clearButtonMode = UITextFieldViewModeWhileEditing;
f.autocorrectionType = UITextAutocorrectionTypeNo;
f.textAlignment = UITextAlignmentRight;
f.textColor = cell.detailTextLabel.textColor;
f.font = [cell.detailTextLabel.font fontWithSize:[cell.detailTextLabel.font pointSize]];
f.tag = TEXTFIELD_TAG;
f.delegate = self;
// Reset temporary font
cell.detailTextLabel.text = nil;
[cell.contentView addSubview:f];
}
((UITextField *)[cell.contentView viewWithTag:TEXTFIELD_TAG]).text = [NSString stringWithUTF8String:cat->GetName().c_str()];
}
((UITextField *)[cell.contentView viewWithTag:TEXTFIELD_TAG]).text = [NSString stringWithUTF8String:cat->GetName().c_str()];
}
else
{
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksVCSetVisibilityCell"];
if (!cell)
else
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"BookmarksVCSetVisibilityCell"] autorelease];
cell.textLabel.text = NSLocalizedString(@"visible", @"Bookmarks dialog - Bookmark set cell");
cell.accessoryView = [[[UISwitch alloc] init] autorelease];
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksVCSetVisibilityCell"];
if (!cell)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"BookmarksVCSetVisibilityCell"] autorelease];
cell.textLabel.text = NSLocalizedString(@"visible", nil);
cell.accessoryView = [[[UISwitch alloc] init] autorelease];
}
UISwitch * sw = (UISwitch *)cell.accessoryView;
sw.on = cat->IsVisible();
[sw addTarget:self action:@selector(onVisibilitySwitched:) forControlEvents:UIControlEventValueChanged];
}
UISwitch * sw = (UISwitch *)cell.accessoryView;
sw.on = cat->IsVisible();
[sw addTarget:self action:@selector(onVisibilitySwitched:) forControlEvents:UIControlEventValueChanged];
}
}
else
{
break;
// Second section, contains bookmarks list
BookmarkCell * bmCell = (BookmarkCell *)[tableView dequeueReusableCellWithIdentifier:@"BookmarksVCBookmarkItemCell"];
if (!bmCell)
case 1:
{
bmCell = [[[BookmarkCell alloc] initWithReuseIdentifier:@"BookmarksVCBookmarkItemCell"] autorelease];
}
BookmarkCell * bmCell = (BookmarkCell *)[tableView dequeueReusableCellWithIdentifier:@"BookmarksVCBookmarkItemCell"];
if (!bmCell)
bmCell = [[[BookmarkCell alloc] initWithReuseIdentifier:@"BookmarksVCBookmarkItemCell"] autorelease];
Bookmark const * bm = cat->GetBookmark(indexPath.row);
if (bm)
Bookmark const * bm = cat->GetBookmark(indexPath.row);
if (bm)
{
bmCell.bmName.text = [NSString stringWithUTF8String:bm->GetName().c_str()];
bmCell.imageView.image = [UIImage imageNamed:[NSString stringWithUTF8String:bm->GetType().c_str()]];
CompassView * compass;
// Try to reuse existing compass view
if ([bmCell.accessoryView isKindOfClass:[CompassView class]])
compass = (CompassView *)bmCell.accessoryView;
else
{
// Create compass view
float const h = (int)(tableView.rowHeight * 0.6);
compass = [[[CompassView alloc] initWithFrame:CGRectMake(0, 0, h, h)] autorelease];
bmCell.accessoryView = compass;
}
// Get current position and compass "north" direction
double azimut = -1.0;
double lat, lon;
if ([m_locationManager getLat:lat Lon:lon])
{
double north = -1.0;
[m_locationManager getNorthRad:north];
string distance;
fr.GetDistanceAndAzimut(bm->GetOrg(), lat, lon, north, distance, azimut);
bmCell.bmDistance.text = [NSString stringWithUTF8String:distance.c_str()];
}
else
bmCell.bmDistance.text = nil;
if (azimut >= 0.0)
{
compass.angle = azimut;
compass.showArrow = YES;
}
else
compass.showArrow = NO;
}
cell = bmCell;
}
break;
// Export bookmarks
case 2:
{
bmCell.bmName.text = [NSString stringWithUTF8String:bm->GetName().c_str()];
bmCell.imageView.image = [UIImage imageNamed:[NSString stringWithUTF8String:bm->GetType().c_str()]];
CompassView * compass;
// Try to reuse existing compass view
if ([bmCell.accessoryView isKindOfClass:[CompassView class]])
compass = (CompassView *)bmCell.accessoryView;
else
cell = [tableView dequeueReusableCellWithIdentifier:@"BookmarksExportCell"];
if (!cell)
{
// Create compass view
float const h = (int)(tableView.rowHeight * 0.6);
compass = [[[CompassView alloc] initWithFrame:CGRectMake(0, 0, h, h)] autorelease];
bmCell.accessoryView = compass;
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"BookmarksExportCell"] autorelease];
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.textLabel.text = NSLocalizedString(@"share_by_email", nil);
}
// Get current position and compass "north" direction
double azimut = -1.0;
double lat, lon;
if ([m_locationManager getLat:lat Lon:lon])
{
double north = -1.0;
[m_locationManager getNorthRad:north];
string distance;
fr.GetDistanceAndAzimut(bm->GetOrg(), lat, lon, north, distance, azimut);
bmCell.bmDistance.text = [NSString stringWithUTF8String:distance.c_str()];
}
else
bmCell.bmDistance.text = nil;
if (azimut >= 0.0)
{
compass.angle = azimut;
compass.showArrow = YES;
}
else
compass.showArrow = NO;
}
cell = bmCell;
break;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove cell selection
[[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES];
[[tableView cellForRowAtIndexPath:indexPath] setSelected:NO animated:NO];
if (indexPath.section == 0)
Framework & f = GetFramework();
switch (indexPath.section)
{
if (indexPath.row == 0)
case 0:
{
// Edit name
// @TODO
}
}
else
{
Framework & f = GetFramework();
BookmarkCategory const * cat = f.GetBmCategory(m_categoryIndex);
if (cat)
{
Bookmark const * bm = cat->GetBookmark(indexPath.row);
if (bm)
if (indexPath.row == 0)
{
// Same as "Close".
f.ShowBookmark(*bm);
[self dismissModalViewControllerAnimated:YES];
[self.navigationController.visibleViewController dismissModalViewControllerAnimated:YES];
// Edit name
// @TODO
}
}
break;
case 1:
{
BookmarkCategory const * cat = f.GetBmCategory(m_categoryIndex);
if (cat)
{
Bookmark const * bm = cat->GetBookmark(indexPath.row);
if (bm)
{
// Same as "Close".
f.ShowBookmark(*bm);
[self dismissModalViewControllerAnimated:YES];
[self.navigationController.visibleViewController dismissModalViewControllerAnimated:YES];
}
}
}
break;
case 2:
{
BookmarkCategory const * cat = GetFramework().GetBmCategory(m_categoryIndex);
if (cat)
{
MFMailComposeViewController * mailVC = [[[MFMailComposeViewController alloc] init] autorelease];
mailVC.mailComposeDelegate = self;
[mailVC setSubject:NSLocalizedString(@"share_bookmarks_email_subject", nil)];
NSString * filePath = [NSString stringWithUTF8String:cat->GetFileName().c_str()];
NSData * myData = [[[NSData alloc] initWithContentsOfFile:filePath] autorelease];
NSString * catName = [NSString stringWithUTF8String:cat->GetName().c_str()];
[mailVC addAttachmentData:myData mimeType:@"application/vnd.google-earth.kml+xml" fileName:[NSString stringWithFormat:@"%@.kml", catName]];
[mailVC setMessageBody:[NSString stringWithFormat:NSLocalizedString(@"share_bookmarks_email_body", nil), catName] isHTML:NO];
[self presentModalViewController:mailVC animated:YES];
}
}
break;
}
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
if (indexPath.section == 0)
return NO;
return YES;
// Only Bookmarks section is editable
if (indexPath.section == 1)
return YES;
return NO;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
@ -358,4 +408,4 @@
return NO;
}
@end
@end

View file

@ -23,6 +23,7 @@
49DE1CA413437D7A00A93417 /* libbzip2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 49DE1CA213437D7A00A93417 /* libbzip2.a */; };
573D1AF4165252760093A55D /* location-follow.png in Resources */ = {isa = PBXBuildFile; fileRef = 573D1AF2165252760093A55D /* location-follow.png */; };
573D1AF5165252760093A55D /* location-follow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 573D1AF3165252760093A55D /* location-follow@2x.png */; };
ED8B1A2116772AB4003CAD0A /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED8B1A2016772AB4003CAD0A /* MessageUI.framework */; };
EE026F0611D6AC0D00645242 /* classificator.txt in Resources */ = {isa = PBXBuildFile; fileRef = EE026F0511D6AC0D00645242 /* classificator.txt */; };
EE026F0D11D6AC2800645242 /* basic_mdpi.skn in Resources */ = {isa = PBXBuildFile; fileRef = EE026F0811D6AC2800645242 /* basic_mdpi.skn */; };
EE12020911CD464100ABDD5D /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE1201FF11CD464100ABDD5D /* libbase.a */; };
@ -1368,6 +1369,7 @@
573D1AF2165252760093A55D /* location-follow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-follow.png"; sourceTree = "<group>"; };
573D1AF3165252760093A55D /* location-follow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-follow@2x.png"; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* MapsWithMe-Pro.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MapsWithMe-Pro.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
ED8B1A2016772AB4003CAD0A /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
EE026F0511D6AC0D00645242 /* classificator.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = classificator.txt; path = ../../data/classificator.txt; sourceTree = SOURCE_ROOT; };
EE026F0811D6AC2800645242 /* basic_mdpi.skn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = basic_mdpi.skn; path = ../../data/basic_mdpi.skn; sourceTree = SOURCE_ROOT; };
EE1201FF11CD464100ABDD5D /* libbase.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libbase.a; sourceTree = SOURCE_ROOT; };
@ -2083,6 +2085,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ED8B1A2116772AB4003CAD0A /* MessageUI.framework in Frameworks */,
EEFC0BBF12B5656A002914FF /* libfreetype.a in Frameworks */,
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
@ -2187,6 +2190,7 @@
29B97314FDCFA39411CA2CEA /* Maps */ = {
isa = PBXGroup;
children = (
ED8B1A2016772AB4003CAD0A /* MessageUI.framework */,
FA36B8011540388B004560CC /* Bookmarks */,
FA34BEC71338D6DB00FFB2A7 /* Common */,
FA6E1F1B124E6B2800F59149 /* Platform */,