From 1cb4cdc4734d2181913900e7bb77a1ab6bdbe013 Mon Sep 17 00:00:00 2001 From: Gnanendra18 Date: Mon, 16 May 2022 22:50:27 +0530 Subject: [PATCH 1/3] Proportional area chart --- .../xcdebugger/Breakpoints_v2.xcbkptlist | 40 ++++ Child Labor/ProportionalChartController.swift | 9 + charts/CirclesLayout.h | 18 ++ charts/CirclesLayout.m | 205 ++++++++++++++++++ ...DataVisualizationTableViewController.swift | 129 +++++++++++ charts/GoodsChartCollectionCell.swift | 66 ++++++ charts/ProportionalChartViewController.swift | 124 +++++++++++ charts/ProportionalChartViewController.xib | 44 ++++ 8 files changed, 635 insertions(+) create mode 100644 Child Labor.xcodeproj/xcuserdata/zolontech.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Child Labor/ProportionalChartController.swift create mode 100644 charts/CirclesLayout.h create mode 100644 charts/CirclesLayout.m create mode 100644 charts/DataVisualizationTableViewController.swift create mode 100644 charts/GoodsChartCollectionCell.swift create mode 100644 charts/ProportionalChartViewController.swift create mode 100644 charts/ProportionalChartViewController.xib diff --git a/Child Labor.xcodeproj/xcuserdata/zolontech.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Child Labor.xcodeproj/xcuserdata/zolontech.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..8d8541d --- /dev/null +++ b/Child Labor.xcodeproj/xcuserdata/zolontech.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,40 @@ + + + + + + + + + + + + + diff --git a/Child Labor/ProportionalChartController.swift b/Child Labor/ProportionalChartController.swift new file mode 100644 index 0000000..7dfb60c --- /dev/null +++ b/Child Labor/ProportionalChartController.swift @@ -0,0 +1,9 @@ +// +// ProportionalChartController.swift +// Child Labor +// +// Created by Zolon Tech on 09/05/22. +// Copyright © 2022 U.S. Department of Labor. All rights reserved. +// + +import Foundation diff --git a/charts/CirclesLayout.h b/charts/CirclesLayout.h new file mode 100644 index 0000000..3df63aa --- /dev/null +++ b/charts/CirclesLayout.h @@ -0,0 +1,18 @@ + +#import + +@interface CirclesLayout : UICollectionViewLayout + +// "Cached" layout information +@property (nonatomic, strong) NSDictionary *layoutInfo; +@property (nonatomic) float contentHeight; +@property (nonatomic) float contentWidth; + +@property (nonatomic) bool vertical; + +// Helpers +@property (nonatomic) UIEdgeInsets viewInsets; +@property (nonatomic) float initialX; +@property (nonatomic) float initialY; + +@end diff --git a/charts/CirclesLayout.m b/charts/CirclesLayout.m new file mode 100644 index 0000000..243bcf9 --- /dev/null +++ b/charts/CirclesLayout.m @@ -0,0 +1,205 @@ + +#import "CirclesLayout.h" + +#define kMinSpaceBetweenCircles 10 +#define kMaxPredecessorNum 10 // USED FOR OPTIMIZATION. TO AVOID ITERATING OVER ALL PREDECESSORS EVERY TIME. ADAPT THIS NUMBER BASED ON THE CIRCLE SIZE AND SCREEN DIMENSIONS +#define kPositionIncrement 5 + +@implementation CirclesLayout + +- (id)init { + self = [super init]; + if (self) { + [self setup]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self setup]; + } + return self; +} + +// Initial settings. +- (void)setup { + self.vertical = NO; // CHANGE THIS TO MAKE HORIZONTAL LAYOUT + self.viewInsets = UIEdgeInsetsMake(20, 20, 20, 20); // top, left, bottom, right +} + +#pragma mark - Required functions for custom layouts + +- (CGSize)collectionViewContentSize { + return CGSizeMake(self.contentWidth, self.contentHeight); +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { + return self.layoutInfo[indexPath]; +} + +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { + NSMutableArray *allAttributes = [NSMutableArray arrayWithCapacity:self.layoutInfo.count]; + + // We are iterating through self.layoutInfo. + // We are getting attributes for each indexPath and returning them if they are within the rect. + [self.layoutInfo enumerateKeysAndObjectsUsingBlock:^(NSIndexPath *indexPath, + UICollectionViewLayoutAttributes *attributes, + BOOL *innerStop) { + if (CGRectIntersectsRect(rect, attributes.frame)) { + [allAttributes addObject:attributes]; + } + }]; + + return allAttributes; +} + +// Caching layout attributes. +- (void)prepareLayout { + self.initialX = self.viewInsets.left; + self.initialY = self.viewInsets.top; + + if (self.vertical) { + [self prepareVertical]; + } + else { + [self prepareHorizontal]; + } +} + +- (void)prepareVertical { + NSMutableDictionary *newLayoutInfo = [NSMutableDictionary dictionary]; + + self.contentHeight = self.viewInsets.top; + self.contentWidth = self.collectionView.bounds.size.width; // FIXED WITH + + NSIndexPath *indexPath; + NSInteger itemCount = [self.collectionView numberOfItemsInSection:0]; + + for (NSInteger item = 0; item < itemCount; item++) { + indexPath = [NSIndexPath indexPathForItem:item inSection:0]; + + UICollectionViewLayoutAttributes *itemAttributes = + [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; + itemAttributes.frame = [self frameForCircleAtIndexPath:indexPath layoutInfo:newLayoutInfo]; + + newLayoutInfo[indexPath] = itemAttributes; + + self.contentHeight = MAX(self.contentHeight, (itemAttributes.frame.origin.y + itemAttributes.frame.size.height)); // ADAPT HEIGHT + } + + self.contentHeight += self.viewInsets.bottom; + self.layoutInfo = newLayoutInfo; +} + +- (void)prepareHorizontal { + NSMutableDictionary *newLayoutInfo = [NSMutableDictionary dictionary]; + + self.contentWidth = self.viewInsets.left; + self.contentHeight = self.collectionView.bounds.size.height; // FIXED HEIGHT + + NSIndexPath *indexPath; + NSInteger itemCount = [self.collectionView numberOfItemsInSection:0]; + + for (NSInteger item = 0; item < itemCount; item++) { + indexPath = [NSIndexPath indexPathForItem:item inSection:0]; + + UICollectionViewLayoutAttributes *itemAttributes = + [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; + itemAttributes.frame = [self frameForCircleAtIndexPath:indexPath layoutInfo:newLayoutInfo]; + + newLayoutInfo[indexPath] = itemAttributes; + + self.contentWidth = MAX(self.contentWidth, (itemAttributes.frame.origin.x + itemAttributes.frame.size.width)); // ADAPT WIDTH + } + + self.contentWidth += self.viewInsets.right; + self.layoutInfo = newLayoutInfo; +} + +#pragma mark - CALCULATIONS + +// The size and position of a single circle. +- (CGRect)frameForCircleAtIndexPath:(NSIndexPath *)indexPath layoutInfo:(NSMutableDictionary *)newLayoutInfo { + + float originX = self.initialX, originY = self.initialY; + float radius = [self sizeForItemAtIndexPath:indexPath].width; + CGRect circle = CGRectMake(originX, originY, radius, radius); + + if (self.vertical) { + while (![self distanceConditionForItem:circle AtIndexPath:indexPath InLayout:newLayoutInfo]) { + originX += kPositionIncrement; + + if (originX + radius + self.viewInsets.right > self.collectionView.bounds.size.width) { + originX = self.viewInsets.left; + originY += kPositionIncrement; + } + circle = CGRectMake(originX, originY, radius, radius); + } + + // Set initial X i Y. + self.initialX = originX + (radius / 2); + self.initialY = originY; + + return CGRectMake(originX, originY, radius, radius); + } + else { + while (![self distanceConditionForItem:circle AtIndexPath:indexPath InLayout:newLayoutInfo]) { + originY += kPositionIncrement; + + if (originY + radius + self.viewInsets.bottom > self.collectionView.bounds.size.height) { + originY = self.viewInsets.top; + originX += kPositionIncrement; + } + circle = CGRectMake(originX, originY, radius, radius); + } + + // Set initial X i Y. + self.initialX = originX; + self.initialY = originY + (radius / 2); + + return CGRectMake(originX, originY, radius, radius); + } +} + +- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath { + if ([[self.collectionView.delegate class] conformsToProtocol:@protocol(UICollectionViewDelegateFlowLayout)]) { + return [(id)self.collectionView.delegate collectionView:self.collectionView layout:self sizeForItemAtIndexPath:indexPath]; + } + return CGSizeMake(0, 0); +} + +- (BOOL)distanceConditionForItem:(CGRect)circle AtIndexPath:(NSIndexPath *)indexPath InLayout:(NSMutableDictionary *)newLayoutInfo { + BOOL condition = YES; + + long numPredecessors = indexPath.row; + if (indexPath.row >= kMaxPredecessorNum) { + numPredecessors = kMaxPredecessorNum; + } + + for (int i = 1; i <= numPredecessors; i++) { + NSIndexPath *ip = [NSIndexPath indexPathForItem:(MAX(indexPath.row - i, 0)) inSection:0]; + UICollectionViewLayoutAttributes *attr = newLayoutInfo[ip]; + condition = condition && [self distanceBetween:circle and:attr.frame isLargerThan:kMinSpaceBetweenCircles]; + } + + return condition; +} + +- (BOOL)distanceBetween:(CGRect)circle1 and:(CGRect)circle2 isLargerThan:(float)delta { + float r1 = circle1.size.width / 2; + float cx1 = circle1.origin.x + r1; + float cy1 = circle1.origin.y + r1; + + float r2 = circle2.size.width / 2; + float cx2 = circle2.origin.x + r2; + float cy2 = circle2.origin.y + r2; + + float d = sqrt((pow(cx1 - cx2, 2) + pow(cy1 - cy2, 2))); + + return (d >= r1 + r2 + delta); +} + +@end + diff --git a/charts/DataVisualizationTableViewController.swift b/charts/DataVisualizationTableViewController.swift new file mode 100644 index 0000000..9eb6612 --- /dev/null +++ b/charts/DataVisualizationTableViewController.swift @@ -0,0 +1,129 @@ +// +// DataVisualizationTableViewController.swift +// Child Labor +// +// Created by Gostu Bhargavi on 12/05/22. +// Copyright © 2022 U.S. Department of Labor. All rights reserved. +// + +import UIKit + +enum ChartTypes: String, CaseIterable { + + case proportionalChart = "ProportionalArea Chart" + // case pieChart = "Pie Charts" +} +class DataVisualizationTableViewController: UITableViewController { + + override func viewDidLoad() { + + super.viewDidLoad() + + self.sendGAIEvent() + self.setupNavigationBar() + self.setupTableView() + + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.title = "DataVisualization Types" + } + + func sendGAIEvent() { + // Record GA view + let tracker = GAI.sharedInstance().defaultTracker + tracker?.set(kGAIScreenName, value: "DataVisualization List Screen") + tracker?.send(GAIDictionaryBuilder.createAppView().build() as? [AnyHashable: Any]) + } + + func setupNavigationBar() { + + // Navigation bar color + self.navigationController?.navigationBar.barStyle = UIBarStyle.black + self.navigationController?.navigationBar.barTintColor = UIColor(red: 0.0, green: 0.2, blue: 0.33, alpha: 1.0) + self.navigationController?.navigationBar.tintColor = UIColor.white + if #available(iOS 13.0, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = UIColor(red: 0.0, green: 0.2, blue: 0.33, alpha: 1.0) + appearance.titleTextAttributes = [ + NSAttributedString.Key.foregroundColor: UIColor.white] + + self.navigationController?.navigationBar.standardAppearance = appearance; + self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance + navigationController?.navigationBar.overrideUserInterfaceStyle = .dark + } + } + + func setupTableView() { + tableView.dataSource = self + tableView.delegate = self + + } +} + +extension DataVisualizationTableViewController { + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return ChartTypes.allCases.count + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = UITableViewCell() + + let chartType = ChartTypes.allCases[indexPath.row] + cell.textLabel?.text = chartType.rawValue + + let chevron = UIImage(named: "arrow.png") + cell.accessoryType = .disclosureIndicator + cell.accessoryView = UIImageView(image: chevron) + if #available(iOS 13.0, *) { + cell.textLabel?.textColor = .label + } else { + // Fallback on earlier versions + } + return cell + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + +// let OrdersVC = self.storyboard?.instantiateViewController(withIdentifier: "ProportionalChartViewController") as! ProportionalChartViewController +// _ = OrdersVC.view +// self.navigationController?.pushViewController(OrdersVC, animated: true) + + let vc: UIViewController? +/* + switch ChartTypes(rawValue: indexPath.row) { + case .proportionalChart: + vc = ProportionalChartViewController() + break + case .pieChart: + vc = PieChartViewController() + break + default: + vc = ProportionalChartViewController() + break + } + */ + vc = ProportionalChartViewController.loadFromNib() + guard let viewController = vc else { return } + navigationController?.pushViewController(viewController, animated: true) + + } +} + + + +@IBDesignable extension UIView { + @IBInspectable var cornerRadius: CGFloat { + get { return layer.cornerRadius } + set { + layer.cornerRadius = newValue + layer.masksToBounds = (newValue > 0) + } + } +} diff --git a/charts/GoodsChartCollectionCell.swift b/charts/GoodsChartCollectionCell.swift new file mode 100644 index 0000000..4339f53 --- /dev/null +++ b/charts/GoodsChartCollectionCell.swift @@ -0,0 +1,66 @@ +// +// GoodsChartCollectionCell.swift +// Child Labor +// +// Created by Gostu Bhargavi on 13/05/22. +// Copyright © 2022 U.S. Department of Labor. All rights reserved. +// + +import UIKit + +class GoodsChartCollectionCell: UICollectionViewCell { + + private let titleLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.font = UIFont.systemFont(ofSize:14) + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + self.titleLabel.configure(on: self.contentView) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + } + + func configureCell(cellData: DataItem) { + self.titleLabel.text = cellData.title + self.backgroundColor = cellData.color + self.layer.cornerRadius = self.frame.size.width / 2; + + } +} + +extension UIView { + + func configure(on parent: UIView, insets: UIEdgeInsets = .zero, safe:Bool = false) { + + self.translatesAutoresizingMaskIntoConstraints = false + parent.addSubview(self) + NSLayoutConstraint.activate(self.constraints(on: parent, insets: insets, safe: safe)) + } + + private func constraints(on parent:UIView, insets: UIEdgeInsets, safe:Bool = false) -> [NSLayoutConstraint] { + + guard #available(iOS 11.0, *), safe == true else { + + return [self.leadingAnchor.constraint(equalTo: parent.leadingAnchor, constant: insets.left), + self.trailingAnchor.constraint(equalTo: parent.trailingAnchor, constant: insets.right), + self.topAnchor.constraint(equalTo: parent.topAnchor, constant: insets.top), + self.bottomAnchor.constraint(equalTo: parent.bottomAnchor, constant: insets.bottom)] + } + + return [self.safeAreaLayoutGuide.leadingAnchor.constraint(equalTo: parent.safeAreaLayoutGuide.leadingAnchor, constant: insets.left), + self.safeAreaLayoutGuide.bottomAnchor.constraint(equalTo: parent.safeAreaLayoutGuide.bottomAnchor, constant: insets.bottom), + self.safeAreaLayoutGuide.topAnchor.constraint(equalTo: parent.safeAreaLayoutGuide.topAnchor, constant: insets.top), + self.safeAreaLayoutGuide.trailingAnchor.constraint(equalTo: parent.safeAreaLayoutGuide.trailingAnchor, constant: insets.right)] + } +} diff --git a/charts/ProportionalChartViewController.swift b/charts/ProportionalChartViewController.swift new file mode 100644 index 0000000..cae3fc7 --- /dev/null +++ b/charts/ProportionalChartViewController.swift @@ -0,0 +1,124 @@ +// +// ProportionalChartViewController.swift +// Child Labor +// +// Created by Gostu Bhargavi on 12/05/22. +// Copyright © 2022 U.S. Department of Labor. All rights reserved. +// + +import UIKit +import CoreGraphics + + +struct DataItem: Identifiable { + var id = UUID() + var title: String + var size: CGFloat + var color: UIColor + var offset = CGSize.zero +} + +class ProportionalChartViewController: UIViewController { + + private var data: [DataItem] = [ + DataItem(title: "GOLD", size: 2.4, color: .yellow), + DataItem(title: "BRICKS", size: 2.0, color: UIColor(red: 255.0/255.0, green: 0, blue: 255.0/255.0, alpha: 1)), + DataItem(title: "SUGARCANE", size: 1.9, color: UIColor(red: 192.0/255.0, green: 192.0/255.0, blue: 192.0/255.0, alpha: 1)), + DataItem(title: "COTTON", size: 1.7, color: .purple), + DataItem(title: "COFFEE", size: 1.7, color: UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 247.0/255.0, alpha: 1)), + DataItem(title: "TOBACCO", size: 1.7, color: UIColor(red: 0, green: 128.0/255.0, blue: 128.0/255.0, alpha: 1)), + DataItem(title: "CATTLE", size: 1.4, color: .green), + DataItem(title: "FISH", size: 1.4, color: UIColor(red: 0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1)), + DataItem(title: "GARMENTS", size: 1.1, color: .red), + DataItem(title: "RICE", size: 0.9, color: .green), + DataItem(title: "COAL", size: 0.7, color: UIColor(red: 255.0/255.0, green: 51.0/255.0, blue: 255.0/255.0, alpha: 1)) + ] + + let minItemWidth : CGFloat = 65.0 + @IBOutlet weak var collectionView: UICollectionView! + + override func viewDidLoad() { + super.viewDidLoad() + self.collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "DefaultCollectionCell") + self.collectionView.register(GoodsChartCollectionCell.self, forCellWithReuseIdentifier: "GoodsChartCollectionCell") + } + + override func viewDidAppear(_ animated:Bool) { + super.viewDidAppear(false) + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if self.collectionView.collectionViewLayout == nil { + self.collectionView.collectionViewLayout = CirclesLayout() + } + self.setupNavigationBar() + } + + func setupNavigationBar() { + self.title = "Proportional Chart" + self.navigationController?.navigationBar.topItem?.title = " " + + // Navigation bar color + self.navigationController?.navigationBar.barStyle = UIBarStyle.black + self.navigationController?.navigationBar.barTintColor = UIColor(red: 0.0, green: 0.2, blue: 0.33, alpha: 1.0) + self.navigationController?.navigationBar.tintColor = UIColor.white + if #available(iOS 13.0, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = UIColor(red: 0.0, green: 0.2, blue: 0.33, alpha: 1.0) + appearance.titleTextAttributes = [ + NSAttributedString.Key.foregroundColor: UIColor.white] + + self.navigationController?.navigationBar.standardAppearance = appearance; + self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance + navigationController?.navigationBar.overrideUserInterfaceStyle = .dark + } + } + +} + +extension ProportionalChartViewController: UICollectionViewDelegate, UICollectionViewDataSource { + + func numberOfSections(in collectionView: UICollectionView) -> Int { + return 1 + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return data.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "GoodsChartCollectionCell", for: indexPath) as? GoodsChartCollectionCell + cell?.configureCell(cellData: data[indexPath.item]) + + return cell ?? UICollectionViewCell() + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + + } + +} + +extension ProportionalChartViewController: UICollectionViewDelegateFlowLayout { + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + let width = self.data[indexPath.row].size * minItemWidth + return CGSize(width: width, height: width) + } +} + +public extension UIViewController { + + class func loadFromNib(_ bundle:Bundle? = nil) -> Self { + + func instantiateFromNib(bundle:Bundle?) -> T { + + let _bundle = bundle ?? Bundle(for: T.self) + + return T.init(nibName: String(describing: T.self), bundle: _bundle) + } + + return instantiateFromNib(bundle: bundle) + } +} diff --git a/charts/ProportionalChartViewController.xib b/charts/ProportionalChartViewController.xib new file mode 100644 index 0000000..1970051 --- /dev/null +++ b/charts/ProportionalChartViewController.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 4de36a83ecf2d5bc0571a2739d70925005c18291 Mon Sep 17 00:00:00 2001 From: Gnanendra18 Date: Mon, 16 May 2022 23:16:05 +0530 Subject: [PATCH 2/3] Data Visualizations index controller changes --- Child Labor-Bridging-Header.h | 3 +- Child Labor.xcodeproj/project.pbxproj | 34 + .../UserInterfaceState.xcuserstate | Bin 0 -> 76533 bytes Child Labor/AppDelegate.swift | 2 + Child Labor/Base.lproj/Main.storyboard | 709 +++++++++--------- Child Labor/IndexViewController.swift | 6 +- ...DataVisualizationTableViewController.swift | 2 +- charts/GoodsChartCollectionCell.swift | 2 +- charts/ProportionalChartViewController.swift | 1 - 9 files changed, 418 insertions(+), 341 deletions(-) create mode 100644 Child Labor.xcodeproj/project.xcworkspace/xcuserdata/zolontech.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/Child Labor-Bridging-Header.h b/Child Labor-Bridging-Header.h index d7de201..b1f083b 100755 --- a/Child Labor-Bridging-Header.h +++ b/Child Labor-Bridging-Header.h @@ -10,4 +10,5 @@ #import "GAIFields.h" #import "GAILogger.h" #import "GAITrackedViewController.h" -#import "GAITracker.h" \ No newline at end of file +#import "GAITracker.h" +#import "CirclesLayout.h" diff --git a/Child Labor.xcodeproj/project.pbxproj b/Child Labor.xcodeproj/project.pbxproj index 18f063c..0854253 100755 --- a/Child Labor.xcodeproj/project.pbxproj +++ b/Child Labor.xcodeproj/project.pbxproj @@ -18,6 +18,12 @@ 06FDBA0926C17E6E0059FDA3 /* Gambia, The.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 06FDBA0826C17E6E0059FDA3 /* Gambia, The.pdf */; }; 1022CD62252C9AC40098C1A8 /* TDA-foreword-2019.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1022CD61252C9AC40098C1A8 /* TDA-foreword-2019.pdf */; }; 1022CD64252C9E770098C1A8 /* 2019_Sweat_And_Toil_Magazine.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1022CD63252C9E770098C1A8 /* 2019_Sweat_And_Toil_Magazine.pdf */; }; + 1334AC7B2832B76B000F647E /* ProportionalChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1334AC752832B76B000F647E /* ProportionalChartViewController.xib */; }; + 1334AC7C2832B76B000F647E /* CirclesLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1334AC762832B76B000F647E /* CirclesLayout.m */; }; + 1334AC7D2832B76B000F647E /* GoodsChartCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1334AC772832B76B000F647E /* GoodsChartCollectionCell.swift */; }; + 1334AC7E2832B76B000F647E /* DataVisualizationTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1334AC782832B76B000F647E /* DataVisualizationTableViewController.swift */; }; + 1334AC7F2832B76B000F647E /* ProportionalChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1334AC7A2832B76B000F647E /* ProportionalChartViewController.swift */; }; + 13840007282965170072C737 /* ProportionalChartController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13840006282965160072C737 /* ProportionalChartController.swift */; }; 139AC81D2332509A002420FF /* North_Macedonia-map.png in Resources */ = {isa = PBXBuildFile; fileRef = 139AC8122332509A002420FF /* North_Macedonia-map.png */; }; 139AC81E2332509A002420FF /* Moldova.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 139AC8132332509A002420FF /* Moldova.pdf */; }; 139AC81F2332509A002420FF /* Moldova-map.png in Resources */ = {isa = PBXBuildFile; fileRef = 139AC8142332509A002420FF /* Moldova-map.png */; }; @@ -1117,6 +1123,13 @@ 06FDBA0826C17E6E0059FDA3 /* Gambia, The.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "Gambia, The.pdf"; sourceTree = ""; }; 1022CD61252C9AC40098C1A8 /* TDA-foreword-2019.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "TDA-foreword-2019.pdf"; sourceTree = ""; }; 1022CD63252C9E770098C1A8 /* 2019_Sweat_And_Toil_Magazine.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 2019_Sweat_And_Toil_Magazine.pdf; sourceTree = ""; }; + 1334AC752832B76B000F647E /* ProportionalChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProportionalChartViewController.xib; sourceTree = ""; }; + 1334AC762832B76B000F647E /* CirclesLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CirclesLayout.m; sourceTree = ""; }; + 1334AC772832B76B000F647E /* GoodsChartCollectionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoodsChartCollectionCell.swift; sourceTree = ""; }; + 1334AC782832B76B000F647E /* DataVisualizationTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataVisualizationTableViewController.swift; sourceTree = ""; }; + 1334AC792832B76B000F647E /* CirclesLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CirclesLayout.h; sourceTree = ""; }; + 1334AC7A2832B76B000F647E /* ProportionalChartViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProportionalChartViewController.swift; sourceTree = ""; }; + 13840006282965160072C737 /* ProportionalChartController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProportionalChartController.swift; sourceTree = ""; }; 139AC8122332509A002420FF /* North_Macedonia-map.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "North_Macedonia-map.png"; sourceTree = ""; }; 139AC8132332509A002420FF /* Moldova.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = Moldova.pdf; sourceTree = ""; }; 139AC8142332509A002420FF /* Moldova-map.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Moldova-map.png"; sourceTree = ""; }; @@ -2236,6 +2249,19 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1334AC742832B76B000F647E /* charts */ = { + isa = PBXGroup; + children = ( + 1334AC752832B76B000F647E /* ProportionalChartViewController.xib */, + 1334AC762832B76B000F647E /* CirclesLayout.m */, + 1334AC772832B76B000F647E /* GoodsChartCollectionCell.swift */, + 1334AC782832B76B000F647E /* DataVisualizationTableViewController.swift */, + 1334AC792832B76B000F647E /* CirclesLayout.h */, + 1334AC7A2832B76B000F647E /* ProportionalChartViewController.swift */, + ); + path = charts; + sourceTree = SOURCE_ROOT; + }; 8303DEE31B41F20300E4FD42 /* Maps */ = { isa = PBXGroup; children = ( @@ -3303,6 +3329,7 @@ 83800C791AA4D40300DD47EB /* Child Labor */ = { isa = PBXGroup; children = ( + 1334AC742832B76B000F647E /* charts */, 83800C7C1AA4D40300DD47EB /* AppDelegate.swift */, EDFB0DCE2136ED6E00A76D52 /* PakistanTableViewController.swift */, 38FD161D1D18BEC400AE65F6 /* AutoTableViewController.swift */, @@ -3341,6 +3368,7 @@ 067DBC98268A417100D6EE20 /* ProjectTableViewCell.xib */, 06384D2B26AB102C004232E2 /* String+Link.swift */, 06607B2726B04EB500A9152F /* String+height.swift */, + 13840006282965160072C737 /* ProportionalChartController.swift */, ); path = "Child Labor"; sourceTree = ""; @@ -3790,6 +3818,7 @@ 835618481BD7DE79007BCF75 /* El Salvador.pdf in Resources */, 83B3E98C1B3B519300742BC7 /* forced-child-labor@2x.png in Resources */, 83AD13ED1B669137004B92D3 /* icons_Zinc-33@2x.png in Resources */, + 1334AC7B2832B76B000F647E /* ProportionalChartViewController.xib in Resources */, 38CA954D1D4FF4F200319316 /* icons_Potatoes.png in Resources */, 83AD128B1B668E71004B92D3 /* icons_Grapes-33@3x.png in Resources */, 8310FF061ABB11310025F7AE /* Panama.png in Resources */, @@ -4578,6 +4607,7 @@ files = ( 83EF03A01B4D944E00C2AECE /* GoodsTableViewController.swift in Sources */, 834D8DA71B4C5EFA001CD795 /* StatisticsTableViewController.swift in Sources */, + 1334AC7F2832B76B000F647E /* ProportionalChartViewController.swift in Sources */, 38E3E7DB1D5A899500E0724A /* LegalStandardsMultiTableViewController.swift in Sources */, 38BC75361CEECBBD00C53216 /* CoordTableViewController.swift in Sources */, 38FD161E1D18BEC400AE65F6 /* AutoTableViewController.swift in Sources */, @@ -4598,11 +4628,15 @@ 067DBC99268A417100D6EE20 /* ProjectTableViewCell.swift in Sources */, 06CB3B4E2684C20900D489F9 /* ILABProjectsController.swift in Sources */, 83A3B1181B6BCACB002380E6 /* InfoViewController.swift in Sources */, + 1334AC7D2832B76B000F647E /* GoodsChartCollectionCell.swift in Sources */, 834D8DA51B4C5EE8001CD795 /* ConventionsTableViewController.swift in Sources */, + 13840007282965170072C737 /* ProportionalChartController.swift in Sources */, 83C497D41AF2511A00817383 /* ExploitationTableViewController.swift in Sources */, + 1334AC7E2832B76B000F647E /* DataVisualizationTableViewController.swift in Sources */, 38BC75381CEED79100C53216 /* EnforceTableViewController.swift in Sources */, 831E4AE71B0E53B000DCD332 /* FullReportViewController.swift in Sources */, 06607B2826B04EB500A9152F /* String+height.swift in Sources */, + 1334AC7C2832B76B000F647E /* CirclesLayout.m in Sources */, EDE89E8A213836BD00A70A00 /* TanzaniaTableViewController.swift in Sources */, ED8FC8121F50AA350030B75A /* SimilarAppTableViewController.swift in Sources */, 06384D2C26AB102C004232E2 /* String+Link.swift in Sources */, diff --git a/Child Labor.xcodeproj/project.xcworkspace/xcuserdata/zolontech.xcuserdatad/UserInterfaceState.xcuserstate b/Child Labor.xcodeproj/project.xcworkspace/xcuserdata/zolontech.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..93948ae16eb37c6d803905bc5e6caada51f79d68 GIT binary patch literal 76533 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 literal 0 HcmV?d00001 diff --git a/Child Labor/AppDelegate.swift b/Child Labor/AppDelegate.swift index a4a1e33..db387c0 100755 --- a/Child Labor/AppDelegate.swift +++ b/Child Labor/AppDelegate.swift @@ -65,6 +65,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { mainViewController.performSegue(withIdentifier: "goodsSelectedFromIndex", sender: self) } else if shortcutItem.type == "OpenExploitationTypes" { mainViewController.performSegue(withIdentifier: "exploitationSelectedFromIndex", sender: self) + }else if shortcutItem.type == "OpenDataVisualizations" { + mainViewController.performSegue(withIdentifier: "dataVisualizationsFromIndex", sender: self) } } diff --git a/Child Labor/Base.lproj/Main.storyboard b/Child Labor/Base.lproj/Main.storyboard index a611c74..a814c4a 100755 --- a/Child Labor/Base.lproj/Main.storyboard +++ b/Child Labor/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -39,11 +39,11 @@ - +