commit dfaa34db1db1b75b9fad0a6124c3f9bc9c8db375
parent 0cf4502dd475efa0f09319f307af75416f797f82
Author: Kyle Milz <kyle@Kyles-MacBook-Pro.local>
Date: Sun, 23 Aug 2015 22:39:10 -0600
ios-ng: add custom rows, start adding list item updating
Diffstat:
7 files changed, 156 insertions(+), 22 deletions(-)
diff --git a/ios-ng/shlist.xcodeproj/project.pbxproj b/ios-ng/shlist.xcodeproj/project.pbxproj
@@ -23,6 +23,11 @@
27C70F301B33F4FA00DADEB3 /* SharedListsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C70F2F1B33F4FA00DADEB3 /* SharedListsTableViewController.m */; };
27C70F321B3650CB00DADEB3 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 27C70F311B3650CB00DADEB3 /* libsqlite3.dylib */; };
27C70F351B36513200DADEB3 /* DBManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C70F341B36513200DADEB3 /* DBManager.m */; };
+ 27DCC9DC1B8A96A900207340 /* dollar103.png in Resources */ = {isa = PBXBuildFile; fileRef = 27DCC9DB1B8A96A900207340 /* dollar103.png */; };
+ 27DCC9DE1B8A98D400207340 /* dollar103-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 27DCC9DD1B8A98D400207340 /* dollar103-2.png */; };
+ 27DCC9E01B8A993300207340 /* dollar103-3.png in Resources */ = {isa = PBXBuildFile; fileRef = 27DCC9DF1B8A993300207340 /* dollar103-3.png */; };
+ 27DCC9E21B8A9A6900207340 /* dollar103-4.png in Resources */ = {isa = PBXBuildFile; fileRef = 27DCC9E11B8A9A6900207340 /* dollar103-4.png */; };
+ 27DCC9E41B8A9EBB00207340 /* information15-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 27DCC9E31B8A9EBB00207340 /* information15-2.png */; };
BF7776B91B38928D00526CB0 /* ListDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BF7776B81B38928D00526CB0 /* ListDetailTableViewController.m */; };
BF7776BC1B38D0DB00526CB0 /* ListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = BF7776BB1B38D0DB00526CB0 /* ListItem.m */; };
/* End PBXBuildFile section */
@@ -66,6 +71,11 @@
27C70F311B3650CB00DADEB3 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
27C70F331B36513200DADEB3 /* DBManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBManager.h; sourceTree = "<group>"; };
27C70F341B36513200DADEB3 /* DBManager.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = DBManager.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 1; };
+ 27DCC9DB1B8A96A900207340 /* dollar103.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dollar103.png; path = ../../../Downloads/dollar103.png; sourceTree = "<group>"; };
+ 27DCC9DD1B8A98D400207340 /* dollar103-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dollar103-2.png"; path = "../../../Downloads/dollar103-2.png"; sourceTree = "<group>"; };
+ 27DCC9DF1B8A993300207340 /* dollar103-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dollar103-3.png"; path = "../../../Downloads/dollar103-3.png"; sourceTree = "<group>"; };
+ 27DCC9E11B8A9A6900207340 /* dollar103-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dollar103-4.png"; path = "../../../Downloads/dollar103-4.png"; sourceTree = "<group>"; };
+ 27DCC9E31B8A9EBB00207340 /* information15-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "information15-2.png"; path = "../../../Downloads/information15-2.png"; sourceTree = "<group>"; };
BF7776B71B38928D00526CB0 /* ListDetailTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListDetailTableViewController.h; sourceTree = "<group>"; };
BF7776B81B38928D00526CB0 /* ListDetailTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListDetailTableViewController.m; sourceTree = "<group>"; };
BF7776BA1B38D0DB00526CB0 /* ListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListItem.h; sourceTree = "<group>"; };
@@ -128,8 +138,13 @@
27B039FD1B43B6830054B6D2 /* ContactsViewController.h */,
27B039FE1B43B6830054B6D2 /* ContactsViewController.m */,
27C70F0C1B32AF8000DADEB3 /* Main.storyboard */,
+ 27DCC9DB1B8A96A900207340 /* dollar103.png */,
BF7776B71B38928D00526CB0 /* ListDetailTableViewController.h */,
BF7776B81B38928D00526CB0 /* ListDetailTableViewController.m */,
+ 27DCC9E31B8A9EBB00207340 /* information15-2.png */,
+ 27DCC9E11B8A9A6900207340 /* dollar103-4.png */,
+ 27DCC9DF1B8A993300207340 /* dollar103-3.png */,
+ 27DCC9DD1B8A98D400207340 /* dollar103-2.png */,
BF7776BA1B38D0DB00526CB0 /* ListItem.h */,
BF7776BB1B38D0DB00526CB0 /* ListItem.m */,
27C70F2E1B33F4FA00DADEB3 /* SharedListsTableViewController.h */,
@@ -253,8 +268,13 @@
buildActionMask = 2147483647;
files = (
27C70F0E1B32AF8000DADEB3 /* Main.storyboard in Resources */,
+ 27DCC9E41B8A9EBB00207340 /* information15-2.png in Resources */,
27C70F131B32AF8000DADEB3 /* LaunchScreen.xib in Resources */,
+ 27DCC9E21B8A9A6900207340 /* dollar103-4.png in Resources */,
+ 27DCC9E01B8A993300207340 /* dollar103-3.png in Resources */,
+ 27DCC9DC1B8A96A900207340 /* dollar103.png in Resources */,
27C70F101B32AF8000DADEB3 /* Images.xcassets in Resources */,
+ 27DCC9DE1B8A98D400207340 /* dollar103-2.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/ios-ng/shlist/Base.lproj/Main.storyboard b/ios-ng/shlist/Base.lproj/Main.storyboard
@@ -15,24 +15,53 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
- <tableViewCell contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="ListDetailPrototypeCell" textLabel="rxW-Ue-XrL" detailTextLabel="Q7z-lr-GKp" style="IBUITableViewCellStyleValue2" id="s1K-8G-gXq">
+ <tableViewCell contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="ListDetailPrototypeCell" id="s1K-8G-gXq">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="s1K-8G-gXq" id="H4s-wq-8Lq">
<autoresizingMask key="autoresizingMask"/>
<subviews>
- <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rxW-Ue-XrL">
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
- <fontDescription key="fontDescription" type="system" pointSize="12"/>
- <color key="textColor" red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+ <imageView userInteractionEnabled="NO" tag="1" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="zsB-mz-ffa">
+ <rect key="frame" x="8" y="14" width="16" height="16"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="16" id="F2X-d2-ZlF"/>
+ <constraint firstAttribute="width" constant="16" id="yLY-Mg-1wi"/>
+ </constraints>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" tag="2" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="btC-Lf-VTy">
+ <rect key="frame" x="32" y="11" width="46" height="21"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
- <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Detail" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q7z-lr-GKp">
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
- <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <switch opaque="NO" tag="5" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="n1B-AB-bme">
+ <rect key="frame" x="510" y="6" width="51" height="31"/>
+ </switch>
+ <label opaque="NO" userInteractionEnabled="NO" tag="4" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Owner" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0TP-dF-f2P">
+ <rect key="frame" x="451" y="11" width="51" height="21"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
+ <label opaque="NO" userInteractionEnabled="NO" tag="3" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Quantity" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="upb-uA-yH2">
+ <rect key="frame" x="86" y="11" width="64" height="21"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+ <nil key="highlightedColor"/>
+ </label>
</subviews>
+ <constraints>
+ <constraint firstItem="upb-uA-yH2" firstAttribute="leading" secondItem="btC-Lf-VTy" secondAttribute="trailing" constant="8" id="7TQ-hg-IXK"/>
+ <constraint firstItem="upb-uA-yH2" firstAttribute="leading" secondItem="btC-Lf-VTy" secondAttribute="trailing" constant="8" id="7aj-Mf-7or"/>
+ <constraint firstAttribute="centerY" secondItem="zsB-mz-ffa" secondAttribute="centerY" id="Kke-yQ-lIU"/>
+ <constraint firstItem="btC-Lf-VTy" firstAttribute="leading" secondItem="zsB-mz-ffa" secondAttribute="trailing" constant="8" id="M46-uZ-0Zj"/>
+ <constraint firstAttribute="centerY" secondItem="upb-uA-yH2" secondAttribute="centerY" id="MWW-iY-71k"/>
+ <constraint firstItem="n1B-AB-bme" firstAttribute="trailing" secondItem="H4s-wq-8Lq" secondAttribute="trailingMargin" id="VG7-8h-1wm"/>
+ <constraint firstAttribute="centerY" secondItem="btC-Lf-VTy" secondAttribute="centerY" id="Yg4-lg-cMN"/>
+ <constraint firstAttribute="centerY" secondItem="0TP-dF-f2P" secondAttribute="centerY" id="chu-HH-HQT"/>
+ <constraint firstAttribute="centerY" secondItem="n1B-AB-bme" secondAttribute="centerY" id="cyz-Nv-ZRW"/>
+ <constraint firstItem="zsB-mz-ffa" firstAttribute="leading" secondItem="H4s-wq-8Lq" secondAttribute="leadingMargin" id="pRr-Zl-ahy"/>
+ <constraint firstItem="n1B-AB-bme" firstAttribute="leading" secondItem="0TP-dF-f2P" secondAttribute="trailing" constant="8" id="rYF-Sw-Bsg"/>
+ </constraints>
</tableViewCellContentView>
<connections>
<segue destination="2Mz-oY-P1s" kind="show" id="3ew-8g-3Od"/>
@@ -146,6 +175,12 @@
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
+ <label opaque="NO" userInteractionEnabled="NO" tag="1" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" text="3/9" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1XQ-ac-kMc">
+ <rect key="frame" x="262" y="11" width="29" height="21"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
</subviews>
</tableViewCellContentView>
<connections>
diff --git a/ios-ng/shlist/ListDetailTableViewController.m b/ios-ng/shlist/ListDetailTableViewController.m
@@ -1,9 +1,11 @@
#import "ListDetailTableViewController.h"
#import "ListItem.h"
+#import "ShlistServer.h"
@interface ListDetailTableViewController ()
- (void)load_initial_data;
+@property (strong, nonatomic) ShlistServer *server;
@end
@@ -14,18 +16,27 @@
// NSLog(@"ListDetailTableViewController::load_initial_data()");
ListItem *item1 = [[ListItem alloc] init];
- item1.name = @"Axe";
+ item1.modifier = 1;
+ item1.name = @"cheese";
+ item1.quantity = 3;
item1.owner = @"Kyle";
+ item1.completed = 0;
[self.list_items addObject:item1];
ListItem *item2 = [[ListItem alloc] init];
- item2.name = @"Camp Stove";
- item2.owner = @"<none>";
+ item2.modifier = 0;
+ item2.name = @"camp stove";
+ item2.quantity = 1;
+ item2.owner = @"";
+ item2.completed = 1;
[self.list_items addObject:item2];
ListItem *item3 = [[ListItem alloc] init];
- item3.name = @"Tent";
- item3.owner = @"David";
+ item3.modifier = 2;
+ item3.name = @"ear plugs";
+ item3.quantity = 1;
+ item3.owner = @"";
+ item3.completed = 0;
[self.list_items addObject:item3];
}
@@ -90,10 +101,42 @@
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ListDetailPrototypeCell" forIndexPath:indexPath];
// NSLog(@"ListDetailTableViewController::cellForRowAtIndexPath()");
-
+ // Tags:
+ // 1) modifier -- ie $, info, etc
+ // 2) item name
+ // 3) quantity of item, in parenthesis
+ // 4) owners name
+ // 5) completion/packing of item
+
+ UILabel *label;
ListItem *item = [self.list_items objectAtIndex:indexPath.row];
- cell.textLabel.text = item.name;
- cell.detailTextLabel.text = item.owner;
+
+ if (item.modifier == 1) {
+ UIImageView *image_view;
+ image_view = (UIImageView *)[cell viewWithTag:1];
+ image_view.image = [UIImage imageNamed: @"dollar103-4.png"];
+ }
+ else if (item.modifier == 2) {
+ UIImageView *image_view;
+ image_view = (UIImageView *)[cell viewWithTag:1];
+ image_view.image = [UIImage imageNamed: @"information15-2.png"];
+ }
+
+ label = (UILabel *)[cell viewWithTag:2];
+ label.text = item.name;
+
+ label = (UILabel *)[cell viewWithTag:3];
+ if (item.quantity > 1) {
+ label.text = [NSString stringWithFormat:@"(x%d)", item.quantity];
+ } else {
+ label.text = @"";
+ }
+
+ label = (UILabel *)[cell viewWithTag:4];
+ // XXX: this should go to N/A when item doesn't have an owner
+ label.text = item.owner;
+
+ // label = (UILabel *)[cell viewWithTag:5];
return cell;
}
diff --git a/ios-ng/shlist/ListItem.h b/ios-ng/shlist/ListItem.h
@@ -2,7 +2,10 @@
@interface ListItem : NSObject
+@property int modifier;
@property NSString *name;
+@property int quantity;
@property NSString *owner;
+@property int completed;
@end
diff --git a/ios-ng/shlist/SharedListsTableViewController.m b/ios-ng/shlist/SharedListsTableViewController.m
@@ -308,10 +308,33 @@
if ([[segue identifier] isEqualToString:@"show list segue"]) {
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
- SharedList *selected_list = [self.shared_lists objectAtIndex:[path row]];
+ SharedList *list = [self.shared_lists objectAtIndex:[path row]];
// only list detail table view controller has this method
- [segue.destinationViewController setMetadata:selected_list];
+ [segue.destinationViewController setMetadata:list];
+
+ // has to be done before issuing network request
+ _server->shlist_ldvc = segue.destinationViewController;
+
+ // update list items message type
+ NSMutableData *msg = [NSMutableData data];
+ [msg appendBytes:"\x00\x06" length:2];
+
+ // length = device id + list name + null separator
+ uint16_t length_network_endian = htons([_device_id length] + [list.list_id length] + 1);
+ [msg appendBytes:&length_network_endian length:2];
+
+ // append device id
+ [msg appendData:_device_id];
+
+ // append null separator
+ [msg appendBytes:"\0" length:1];
+
+ // append new list name
+ [msg appendData:[list.list_id dataUsingEncoding:NSUTF8StringEncoding]];
+
+ // send message
+ [_server writeToServer:msg];
}
// DetailObject *detail = [self detailForIndexPath:path];
diff --git a/ios-ng/shlist/ShlistServer.h b/ios-ng/shlist/ShlistServer.h
@@ -1,5 +1,6 @@
#import <UIKit/UIKit.h>
#import "SharedListsTableViewController.h"
+#import "ListDetailTableViewController.h"
@interface ShlistServer : NSObject <NSStreamDelegate> {
NSInputStream *inputShlistStream;
@@ -8,6 +9,8 @@
@public
SharedListsTableViewController *shlist_tvc;
+ ListDetailTableViewController *shlist_ldvc;
+
}
diff --git a/ios-ng/shlist/ShlistServer.m b/ios-ng/shlist/ShlistServer.m
@@ -188,20 +188,27 @@
if (msg_type == 4) {
NSLog(@"info: got response from join list request, '%@'", output);
- /*
- for (id list in shlist_tvc.indirect_lists) {
+ for (SharedList *list in shlist_tvc.indirect_lists) {
if (list.list_name == output) {
+ [shlist_tvc.shared_lists addObject:list];
[shlist_tvc.indirect_lists removeObject:list];
break;
}
}
- shlist_tvc.shared_lists
[shlist_tvc.tableView reloadData];
- */
}
if (msg_type == 5) {
NSLog(@"info: got response from leave list request");
+
+ for (SharedList *list in shlist_tvc.shared_lists) {
+ if (list.list_name == output) {
+ [shlist_tvc.indirect_lists addObject:list];
+ [shlist_tvc.shared_lists removeObject:list];
+ break;
+ }
+ }
+ [shlist_tvc.tableView reloadData];
}
}
break;