//
// Created by Christian Brunschen on 29/05/2008.
/*
- * Copyright 2008 Google Inc.
+ * Copyright 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#import "Scan.h"
#import "ParsedResult.h"
#import "DecoderViewController.h"
+#import "ScanViewController.h"
+
+#define IMAGE_VIEW_TAG 0x17
+#define DATE_VIEW_TAG 0x18
+#define TEXT_VIEW_TAG 0x19
+
+#define VIEW_PADDING 2
+#define IMAGE_VIEW_SIDE 50
+#define CONTENT_HEIGHT IMAGE_VIEW_SIDE
+#define DATE_VIEW_WIDTH 70
@implementation ArchiveController
@synthesize scans;
@synthesize decoderViewController;
+@synthesize dateFormatter;
- initWithDecoderViewController:(DecoderViewController *)dc {
if (self = [super initWithStyle:UITableViewStylePlain]) {
- self.decoderViewController = dc;
- self.scans = [NSMutableArray array];
+ decoderViewController = [dc retain];
+ scans = [[NSMutableArray alloc] init];
+ dateFormatter = [[NSDateFormatter alloc] init];
}
return self;
}
return [scans count];
}
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+ return IMAGE_VIEW_SIDE + 2 * VIEW_PADDING;
+}
+
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ScanIdentifier = @"ScanIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ScanIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ScanIdentifier] autorelease];
- cell.font = [cell.font fontWithSize:10.0];
- cell.lineBreakMode = UILineBreakModeCharacterWrap;
+
+ // clean out all existing subviews
+ NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
+ for (UIView *subview in subviews) {
+ [subview removeFromSuperview];
+ }
+ [subviews release];
+
+ float cellWidth = cell.contentView.bounds.size.width;
+
+ // add the views
+ UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(VIEW_PADDING, VIEW_PADDING, IMAGE_VIEW_SIDE, CONTENT_HEIGHT)];
+ [imageView setTag:IMAGE_VIEW_TAG];
+ [imageView setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
+ [cell.contentView addSubview:imageView];
+ [imageView release];
+
+ UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(2*VIEW_PADDING + IMAGE_VIEW_SIDE, VIEW_PADDING, cellWidth - 4*VIEW_PADDING - IMAGE_VIEW_SIDE - DATE_VIEW_WIDTH, CONTENT_HEIGHT)];
+ [textView setTag:TEXT_VIEW_TAG];
+ [textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
+ [cell.contentView addSubview:textView];
+ [textView release];
+
+ UITextView *dateView = [[UITextView alloc] initWithFrame:CGRectMake(cellWidth - VIEW_PADDING - DATE_VIEW_WIDTH, VIEW_PADDING, DATE_VIEW_WIDTH, CONTENT_HEIGHT)];
+ [dateView setTag:DATE_VIEW_TAG];
+ [dateView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
+ dateView.font = [UIFont systemFontOfSize:9.0];
+ dateView.textColor = [UIColor grayColor];
+ dateView.textAlignment = UITextAlignmentRight;
+ dateView.editable = NO;
+ [cell.contentView addSubview:dateView];
+ [dateView release];
}
+
+ UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:IMAGE_VIEW_TAG];
+ UILabel *textView = (UILabel *)[cell.contentView viewWithTag:TEXT_VIEW_TAG];
+ UITextView *dateView = (UITextView *)[cell.contentView viewWithTag:DATE_VIEW_TAG];
// Configure the cell
Scan *scan = [scans objectAtIndex:[self scanIndexForRow:indexPath.row]];
ParsedResult *result = [ParsedResult parsedResultForString:scan.text];
- cell.text = [result stringForDisplay];
+ imageView.image = nil;
+ NSDate *stamp = [scan stamp];
+ NSTimeInterval interval = -[stamp timeIntervalSinceNow];
+ if (interval < 24 * 3600) { // last 24 hours
+ [dateFormatter setDateStyle:NSDateFormatterNoStyle];
+ [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
+ } else if (interval < 30 * 24 * 3600) { // last 30 days
+ [dateFormatter setDateStyle:NSDateFormatterShortStyle];
+ [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
+ } else {
+ [dateFormatter setDateStyle:NSDateFormatterShortStyle];
+ [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
+ }
+ dateView.text = [dateFormatter stringFromDate:[scan stamp]];
+ [dateView sizeToFit];
+ textView.text = [result stringForDisplay];
+ imageView.image = [result icon];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- [decoderViewController showScan:[scans objectAtIndex:[self scanIndexForRow:indexPath.row]]];
+ //[decoderViewController showScan:[scans objectAtIndex:[self scanIndexForRow:indexPath.row]]];
+ Scan *scan = [scans objectAtIndex:[self scanIndexForRow:indexPath.row]];
+ ParsedResult *result = [ParsedResult parsedResultForString:scan.text];
+ ScanViewController *scanViewController = [[ScanViewController alloc] initWithResult:result forScan:scan];
+ [self.navigationController pushViewController:scanViewController animated:YES];
+ [scanViewController release];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
int index = [self scanIndexForRow:indexPath.row];
Scan *scan = [self.scans objectAtIndex:index];
+ // delete the scan from the database ...
[[Database sharedDatabase] deleteScan:scan];
+ // ... delete the scan from our in-memory cache of the database ...
[self.scans removeObjectAtIndex:index];
+ // ... and remove the row from the table view.
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
- [tableView reloadData];
+ // [tableView reloadData];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// no insertions!
}
}
-/*
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
-*/
-/*
+
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
-*/
-/*
+
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
- return YES;
+ return NO;
}
-*/
- (void)dealloc {
[scans release];
[decoderViewController release];
+ [dateFormatter release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
- self.title = @"Scan Archive";
+ self.title = NSLocalizedString(@"Scan Archive", "scan archive title");
self.navigationItem.rightBarButtonItem = [self editButtonItem];
}