diff --git a/Controllers/IQDrilldownController.m b/Controllers/IQDrilldownController.m index 21096f5..0543be4 100644 --- a/Controllers/IQDrilldownController.m +++ b/Controllers/IQDrilldownController.m @@ -171,7 +171,7 @@ - (void) pushViewController:(UIViewController*)viewController animated:(BOOL)ani } else { [self.view addSubview:panel]; } - activeIndex = panels.count - 1; + activeIndex = (int)panels.count - 1; CGRect bounds = self.view.bounds; CGFloat width = panelWidth; diff --git a/Controllers/IQMenuViewController.m b/Controllers/IQMenuViewController.m index 0d5b5f9..6cf20df 100644 --- a/Controllers/IQMenuViewController.m +++ b/Controllers/IQMenuViewController.m @@ -59,7 +59,7 @@ @interface IQMenuSection () { - (void) _setParent:(IQMenuViewController*)menu; - (BOOL) _displaying; - (NSArray*) _items; -- (int) _displayIndexForItem:(IQMenuItem*)item; +- (NSInteger) _displayIndexForItem:(IQMenuItem*)item; @end typedef void (^_IQActionBlock)(); @@ -334,7 +334,7 @@ - (IQMenuViewController*) menuViewController return parent; } -- (int) _displayIndexForItem:(IQMenuItem*)item +- (NSInteger) _displayIndexForItem:(IQMenuItem*)item { NSInteger index = 0; for(IQMenuItem* i in items) { @@ -509,7 +509,7 @@ - (void) setHidden:(BOOL)newHiddenState animated:(BOOL)animated self->hidden = newHiddenState; BOOL isDisplaying = parent._displaying; if(wasDisplaying && isDisplaying) { - int index = [parent._items indexOfObject:self]; + NSUInteger index = [parent._items indexOfObject:self]; if(index == NSNotFound) [NSException raise:@"ItemNotFound" format:@"Item %@ not in parent section", self]; if(!newHiddenState) { [self.menuViewController _itemAdded:index inSection:parent shouldAnimate:animated]; @@ -565,7 +565,7 @@ - (IQMenuSection*) sectionAtIndex:(NSInteger)index count++; } } - [NSException raise:@"SectionIndexOutOfBounds" format:@"Section index %d out of bounds", index]; + [NSException raise:@"SectionIndexOutOfBounds" format:@"Section index %ld out of bounds", (long)index]; return nil; } @@ -590,7 +590,7 @@ - (IQMenuItem*) itemAtSection:(NSInteger)section index:(NSInteger)index if(count++ == index) return item; } } - [NSException raise:@"ItemIndexOutOfBounds" format:@"Item index %d out of bounds", index]; + [NSException raise:@"ItemIndexOutOfBounds" format:@"Item index %ld out of bounds", (long)index]; return nil; } diff --git a/Default-568h@2x.png b/Default-568h@2x.png new file mode 100644 index 0000000..0891b7a Binary files /dev/null and b/Default-568h@2x.png differ diff --git a/Example/Base.lproj/LaunchScreen.xib b/Example/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..6932f72 --- /dev/null +++ b/Example/Base.lproj/LaunchScreen.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example-Info.plist b/Example/Example-Info.plist index 3f325c5..3e95250 100644 --- a/Example/Example-Info.plist +++ b/Example/Example-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType APPL CFBundleSignature - ???? + IQex CFBundleVersion 1.0 UIFileSharingEnabled diff --git a/Example/ExampleApp.m b/Example/ExampleApp.m index ae6ec3e..4a57bb3 100644 --- a/Example/ExampleApp.m +++ b/Example/ExampleApp.m @@ -72,6 +72,60 @@ - (void)applicationDidFinishLaunching:(UIApplication *)application [self navigateTo:[[MonthCalendarExample alloc] init]]; }] animated:NO]; [menu addSection:dateTimeSection animated:NO]; + IQMenuSection* utilitySection = [IQMenuSection sectionWithTitle:@"Utilities"]; + [utilitySection addItem:[IQMenuItem itemWithTitle:@"Icon fonts" action:^{ + UITabBarController* vc = [UITabBarController new]; + UIViewController* tab1 = [UIViewController new]; + tab1.tabBarItem.title = @"Tab 1"; + tab1.tabBarItem.iconFontResource = @"LigatureSymbols"; + tab1.tabBarItem.iconSymbol = @"app"; + UIViewController* tab2 = [UIViewController new]; + tab2.tabBarItem.title = @"Tab 2"; + tab2.tabBarItem.iconFontResource = @"FontAwesome"; + tab2.tabBarItem.iconSymbol = @"0xf1ea"; + + tab1.view.backgroundColor = tab2.view.backgroundColor = [UIColor whiteColor]; + vc.viewControllers = @[tab1, tab2]; + + UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 200, 30)]; + lbl.text = @"Static icon (UIImageView):"; + lbl.font = [UIFont systemFontOfSize:10]; + lbl.tintColor = [UIColor darkGrayColor]; + [tab1.view addSubview:lbl]; + + UIImageView* l = [[UIImageView alloc] initWithFrame:CGRectMake(10, 90, 90, 40)]; + l.contentMode = UIViewContentModeScaleAspectFit; + l.iconFontResource = @"LigatureSymbols"; + l.iconSymbol = @"tag"; + [tab1.view addSubview:l]; + l = [[UIImageView alloc] initWithFrame:CGRectMake(100, 90, 90, 40)]; + l.contentMode = UIViewContentModeScaleAspectFit; + l.iconFontResource = @"FontAwesome"; + l.iconSymbol = @"0xf1e3"; + [tab1.view addSubview:l]; + + lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 130, 200, 30)]; + lbl.text = @"Push button (UIButton):"; + lbl.font = [UIFont systemFontOfSize:10]; + lbl.tintColor = [UIColor darkGrayColor]; + [tab1.view addSubview:lbl]; + UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(10, 160, 90, 90); + [btn setTitle:@"Hej" forState:UIControlStateNormal]; + [tab1.view addSubview:btn]; + + lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 230, 200, 30)]; + lbl.text = @"Segmented (UISegmentedControl):"; + lbl.font = [UIFont systemFontOfSize:10]; + lbl.tintColor = [UIColor darkGrayColor]; + [tab1.view addSubview:lbl]; + UISegmentedControl* sc = [[UISegmentedControl alloc] initWithItems:@[@"A", @"B", @"C"]]; + sc.frame = CGRectMake(10, 260, 90, 26); + [tab1.view addSubview:sc]; + + [self navigateTo:vc]; + }] animated:NO]; + [menu addSection:utilitySection animated:NO]; IQMenuSection* themeSection = [IQMenuSection sectionWithTitle:@"Themes"]; [themeSection addItem:[IQMenuItem itemWithTitle:@"Default" action:^{ diff --git a/Example/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..36d2c80 --- /dev/null +++ b/Example/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/FontAwesome.otf b/FontAwesome.otf new file mode 100644 index 0000000..f7936cc Binary files /dev/null and b/FontAwesome.otf differ diff --git a/IQCalendarDataSource.m b/IQCalendarDataSource.m index 92368e5..8328e01 100644 --- a/IQCalendarDataSource.m +++ b/IQCalendarDataSource.m @@ -102,7 +102,7 @@ - (void) enumerateEntriesUsing:(IQCalendarDataSourceEntryCallback)enumerator fro if(!value && (start || end)) { value = ^(id item) { - if([item respondsToSelector:@selector(text)]) { + if([item respondsToSelector:@selector(value)]) { return (NSObject*)[(id)item value]; } else { return (NSObject*)nil; diff --git a/IQWidgets.h b/IQWidgets.h index b9557e2..6ee935e 100644 --- a/IQWidgets.h +++ b/IQWidgets.h @@ -26,6 +26,7 @@ #import "IQGanttView.h" #import "IQCalendarDataSource.h" #import "IQDrawerView.h" +#import "IQIconFont.h" #import "IQTheme.h" #import "IQThemeCSS.h" diff --git a/IQWidgets.xcodeproj/project.pbxproj b/IQWidgets.xcodeproj/project.pbxproj index 5f0ad23..52f8be9 100644 --- a/IQWidgets.xcodeproj/project.pbxproj +++ b/IQWidgets.xcodeproj/project.pbxproj @@ -7,92 +7,82 @@ objects = { /* Begin PBXAggregateTarget section */ - FF2E31721881C5D200B34F1C /* IQWidgets - universal */ = { + FFDDA0C61B2CD9DD003D9CEA /* IQWidgets - Universal */ = { isa = PBXAggregateTarget; - buildConfigurationList = FF2E31751881C5D200B34F1C /* Build configuration list for PBXAggregateTarget "IQWidgets - universal" */; + buildConfigurationList = FFDDA0C71B2CD9DE003D9CEA /* Build configuration list for PBXAggregateTarget "IQWidgets - Universal" */; buildPhases = ( - FF2E31781881C6CE00B34F1C /* ShellScript */, + FFDDA0CC1B2CDA39003D9CEA /* ShellScript */, ); dependencies = ( + FFDDA0CB1B2CD9EC003D9CEA /* PBXTargetDependency */, ); - name = "IQWidgets - universal"; - productName = "IQWidgets - universal"; + name = "IQWidgets - Universal"; + productName = "IQWidgets - Universal"; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - FF24AF271327A0F300BE3723 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF24AF261327A0F300BE3723 /* CoreGraphics.framework */; }; - FF4553D112BAC48000B26A30 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF4553D012BAC48000B26A30 /* MapKit.framework */; }; - FF4553D812BAC48E00B26A30 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF4553D712BAC48E00B26A30 /* CoreLocation.framework */; }; - FF540ADB12A95ECA00C2C7A5 /* libIQWidgets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libIQWidgets.a */; }; - FF540AEF12A95EF400C2C7A5 /* ExampleApp.m in Sources */ = {isa = PBXBuildFile; fileRef = FF540AEE12A95EF400C2C7A5 /* ExampleApp.m */; }; - FF540AF512A95F1D00C2C7A5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF540AF412A95F1D00C2C7A5 /* UIKit.framework */; }; - FF540D6912A9913F00C2C7A5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF540D6812A9913F00C2C7A5 /* QuartzCore.framework */; }; - FF5716F71B2B035C008408D4 /* libIQWidgets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libIQWidgets.a */; }; + FF11C2A71B2C36F000556651 /* LigatureSymbols.otf in Resources */ = {isa = PBXBuildFile; fileRef = FF11C2A61B2C36F000556651 /* LigatureSymbols.otf */; }; FF5716FD1B2B0372008408D4 /* Tests-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = FF8C322C130B175700A10CF0 /* Tests-Info.plist */; }; FF5716FE1B2B0372008408D4 /* CalendarTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FF8C31F8130B111400A10CF0 /* CalendarTests.m */; }; FF5716FF1B2B0372008408D4 /* ScheduleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6CF35130C69D10040F26E /* ScheduleTests.m */; }; FF5717001B2B040F008408D4 /* test.plist in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD416275E3A002A9272 /* test.plist */; }; - FF67B0721621EFBA00F20BA3 /* IQTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = FF67B06E1621EFBA00F20BA3 /* IQTheme.m */; }; - FF67B0731621EFBA00F20BA3 /* IQThemeCSS.m in Sources */ = {isa = PBXBuildFile; fileRef = FF67B06F1621EFBA00F20BA3 /* IQThemeCSS.m */; }; - FF67B0741621EFBA00F20BA3 /* IQTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = FF67B0701621EFBA00F20BA3 /* IQTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF67B0751621EFBA00F20BA3 /* IQThemeCSS.h in Headers */ = {isa = PBXBuildFile; fileRef = FF67B0711621EFBA00F20BA3 /* IQThemeCSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF86DC56136CA25A0077805F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF86DC55136CA25A0077805F /* OpenGLES.framework */; }; - FF9D9DD716277A81002A9272 /* IQNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF9D9DD516277A81002A9272 /* IQNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF9D9DD816277A81002A9272 /* IQNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9D9DD616277A81002A9272 /* IQNavigationController.m */; }; - FF9D9DD916277DFC002A9272 /* about.html in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD31624B692002A9272 /* about.html */; }; - FF9D9DDC1627808C002A9272 /* NavBarIconLauncher.png in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DDA1627808C002A9272 /* NavBarIconLauncher.png */; }; - FF9D9DDD1627808C002A9272 /* NavBarIconLauncher@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DDB1627808C002A9272 /* NavBarIconLauncher@2x.png */; }; - FF9D9DDE16278536002A9272 /* social.css in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD21624B419002A9272 /* social.css */; }; - FF9D9DDF16278538002A9272 /* basic.css in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD11624B408002A9272 /* basic.css */; }; - FF9D9DE2162793C1002A9272 /* MonthCalendarExample.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9D9DE1162793C1002A9272 /* MonthCalendarExample.m */; }; - FFA26835132E8F29007B7FBD /* test.png in Resources */ = {isa = PBXBuildFile; fileRef = FFA26834132E8F23007B7FBD /* test.png */; }; - FFC9646A1327DB4200B2EBA6 /* IQCalendarDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = FFC964681327DB4200B2EBA6 /* IQCalendarDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFC9646B1327DB4200B2EBA6 /* IQCalendarDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC964691327DB4200B2EBA6 /* IQCalendarDataSource.m */; }; - FFD6CF3A130C828B0040F26E /* TestUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD6CF39130C828B0040F26E /* TestUtil.h */; settings = {ATTRIBUTES = (); }; }; - FFEEF05412BACC59003CA394 /* IQWidgets.h in Headers */ = {isa = PBXBuildFile; fileRef = FF540B3712A960B800C2C7A5 /* IQWidgets.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23727161ABF40009F64CF /* IQDrilldownController.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23725161ABF40009F64CF /* IQDrilldownController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23728161ABF40009F64CF /* IQDrilldownController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23726161ABF40009F64CF /* IQDrilldownController.m */; }; - FFF23735161ABF7D009F64CF /* IQCalendarHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23729161ABF7D009F64CF /* IQCalendarHeaderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23736161ABF7D009F64CF /* IQCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372A161ABF7D009F64CF /* IQCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23737161ABF7D009F64CF /* IQDrawerView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372B161ABF7D009F64CF /* IQDrawerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23738161ABF7D009F64CF /* IQScheduleView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372C161ABF7D009F64CF /* IQScheduleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23739161ABF7D009F64CF /* IQScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372D161ABF7D009F64CF /* IQScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF2373A161ABF7D009F64CF /* IQScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF2372E161ABF7D009F64CF /* IQScrollView.m */; }; - FFF2373B161ABF7D009F64CF /* IQCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF2372F161ABF7D009F64CF /* IQCalendarView.m */; }; - FFF2373C161ABF7D009F64CF /* IQScheduleView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23730161ABF7D009F64CF /* IQScheduleView.m */; }; - FFF2373D161ABF7D009F64CF /* IQCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23731161ABF7D009F64CF /* IQCalendarHeaderView.m */; }; - FFF2373E161ABF7D009F64CF /* IQDrawerView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23732161ABF7D009F64CF /* IQDrawerView.m */; }; - FFF2373F161ABF7D009F64CF /* IQGanttView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23733161ABF7D009F64CF /* IQGanttView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23740161ABF7D009F64CF /* IQGanttView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23734161ABF7D009F64CF /* IQGanttView.m */; }; - FFF23743161ABFEA009F64CF /* IQMenuViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23741161ABFEA009F64CF /* IQMenuViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF23744161ABFEA009F64CF /* IQMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23742161ABFEA009F64CF /* IQMenuViewController.m */; }; + FF84432A1B2B2D56004797E5 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = FF8443261B2B2D56004797E5 /* LaunchScreen.xib */; }; + FF84432D1B2B2D6A004797E5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FF84432C1B2B2D6A004797E5 /* Images.xcassets */; }; + FF84432F1B2B2DB2004797E5 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF84432E1B2B2DB2004797E5 /* Default-568h@2x.png */; }; + FFDDA04B1B2C4234003D9CEA /* test.png in Resources */ = {isa = PBXBuildFile; fileRef = FFA26834132E8F23007B7FBD /* test.png */; }; + FFDDA04C1B2C4234003D9CEA /* about.html in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD31624B692002A9272 /* about.html */; }; + FFDDA0CD1B2CDB77003D9CEA /* IQCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372A161ABF7D009F64CF /* IQCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0CE1B2CDB77003D9CEA /* IQCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF2372F161ABF7D009F64CF /* IQCalendarView.m */; }; + FFDDA0CF1B2CDB77003D9CEA /* IQCalendarHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23729161ABF7D009F64CF /* IQCalendarHeaderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0D01B2CDB77003D9CEA /* IQCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23731161ABF7D009F64CF /* IQCalendarHeaderView.m */; }; + FFDDA0D11B2CDB77003D9CEA /* IQIconFont.h in Headers */ = {isa = PBXBuildFile; fileRef = FF8442EF1B2B2B2A004797E5 /* IQIconFont.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0D31B2CDB77003D9CEA /* IQScheduleView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372C161ABF7D009F64CF /* IQScheduleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0D41B2CDB77003D9CEA /* IQScheduleView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23730161ABF7D009F64CF /* IQScheduleView.m */; }; + FFDDA0D51B2CDB77003D9CEA /* IQGanttView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23733161ABF7D009F64CF /* IQGanttView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0D61B2CDB77003D9CEA /* IQGanttView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23734161ABF7D009F64CF /* IQGanttView.m */; }; + FFDDA0D71B2CDB77003D9CEA /* IQScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372D161ABF7D009F64CF /* IQScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0D81B2CDB77003D9CEA /* IQScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF2372E161ABF7D009F64CF /* IQScrollView.m */; }; + FFDDA0D91B2CDB77003D9CEA /* IQDrawerView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF2372B161ABF7D009F64CF /* IQDrawerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0DA1B2CDB77003D9CEA /* IQDrawerView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23732161ABF7D009F64CF /* IQDrawerView.m */; }; + FFDDA0DB1B2CDD7F003D9CEA /* IQWidgets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFDDA0AB1B2CD766003D9CEA /* IQWidgets.framework */; }; + FFDDA0DE1B2CDDB5003D9CEA /* IQDrilldownController.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23725161ABF40009F64CF /* IQDrilldownController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0DF1B2CDDB5003D9CEA /* IQDrilldownController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23726161ABF40009F64CF /* IQDrilldownController.m */; }; + FFDDA0E01B2CDDB5003D9CEA /* IQMenuViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF23741161ABFEA009F64CF /* IQMenuViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0E11B2CDDB5003D9CEA /* IQMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF23742161ABFEA009F64CF /* IQMenuViewController.m */; }; + FFDDA0E21B2CDDB5003D9CEA /* IQNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF9D9DD516277A81002A9272 /* IQNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0E31B2CDDB5003D9CEA /* IQNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9D9DD616277A81002A9272 /* IQNavigationController.m */; }; + FFDDA0E41B2CDDC3003D9CEA /* IQTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = FF67B0701621EFBA00F20BA3 /* IQTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0E51B2CDDC3003D9CEA /* IQTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = FF67B06E1621EFBA00F20BA3 /* IQTheme.m */; }; + FFDDA0E61B2CDDC3003D9CEA /* IQThemeCSS.h in Headers */ = {isa = PBXBuildFile; fileRef = FF67B0711621EFBA00F20BA3 /* IQThemeCSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0E71B2CDDC3003D9CEA /* IQThemeCSS.m in Sources */ = {isa = PBXBuildFile; fileRef = FF67B06F1621EFBA00F20BA3 /* IQThemeCSS.m */; }; + FFDDA0E81B2CDDEB003D9CEA /* IQCalendarDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = FFC964681327DB4200B2EBA6 /* IQCalendarDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0E91B2CDDF2003D9CEA /* IQWidgets.h in Headers */ = {isa = PBXBuildFile; fileRef = FF540B3712A960B800C2C7A5 /* IQWidgets.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFDDA0EA1B2CDDF7003D9CEA /* IQCalendarDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC964691327DB4200B2EBA6 /* IQCalendarDataSource.m */; }; + FFDDA1241B2CE51E003D9CEA /* IQIconFont.m in Sources */ = {isa = PBXBuildFile; fileRef = FF8442F01B2B2B2A004797E5 /* IQIconFont.m */; }; + FFDDA1291B2CE7DE003D9CEA /* basic.css in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD11624B408002A9272 /* basic.css */; }; + FFDDA12A1B2CE7DE003D9CEA /* social.css in Resources */ = {isa = PBXBuildFile; fileRef = FF9D9DD21624B419002A9272 /* social.css */; }; + FFDDA12B1B2CF53F003D9CEA /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = FF8442F31B2B2BD7004797E5 /* FontAwesome.otf */; }; + FFEEA2DD1B2B300400768D2A /* ExampleApp.m in Sources */ = {isa = PBXBuildFile; fileRef = FF540AEE12A95EF400C2C7A5 /* ExampleApp.m */; }; + FFEEA2DE1B2B300800768D2A /* MonthCalendarExample.m in Sources */ = {isa = PBXBuildFile; fileRef = FF9D9DE1162793C1002A9272 /* MonthCalendarExample.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - FF540AD912A95EC700C2C7A5 /* PBXContainerItemProxy */ = { + FFDDA0CA1B2CD9EC003D9CEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = D2AAC07D0554694100DB518D; - remoteInfo = IQTiledScrollView; - }; - FF5716F81B2B035C008408D4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2AAC07D0554694100DB518D; + remoteGlobalIDString = FFDDA0AA1B2CD766003D9CEA; remoteInfo = IQWidgets; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D2AAC07E0554694100DB518D /* libIQWidgets.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIQWidgets.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FF11C2A61B2C36F000556651 /* LigatureSymbols.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = LigatureSymbols.otf; sourceTree = ""; }; FF24AF261327A0F300BE3723 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; FF4553D012BAC48000B26A30 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; FF4553D712BAC48E00B26A30 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - FF540AD312A95EC200C2C7A5 /* IQTSVExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IQTSVExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; FF540AED12A95EF400C2C7A5 /* ExampleApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExampleApp.h; path = Example/ExampleApp.h; sourceTree = ""; }; FF540AEE12A95EF400C2C7A5 /* ExampleApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExampleApp.m; path = Example/ExampleApp.m; sourceTree = ""; }; FF540AF412A95F1D00C2C7A5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; @@ -105,6 +95,13 @@ FF67B06F1621EFBA00F20BA3 /* IQThemeCSS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IQThemeCSS.m; path = Theming/IQThemeCSS.m; sourceTree = ""; }; FF67B0701621EFBA00F20BA3 /* IQTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQTheme.h; path = Theming/IQTheme.h; sourceTree = ""; }; FF67B0711621EFBA00F20BA3 /* IQThemeCSS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQThemeCSS.h; path = Theming/IQThemeCSS.h; sourceTree = ""; }; + FF8442EF1B2B2B2A004797E5 /* IQIconFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQIconFont.h; path = Views/IQIconFont.h; sourceTree = ""; }; + FF8442F01B2B2B2A004797E5 /* IQIconFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IQIconFont.m; path = Views/IQIconFont.m; sourceTree = ""; }; + FF8442F31B2B2BD7004797E5 /* FontAwesome.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.otf; sourceTree = ""; }; + FF8442FB1B2B2CC6004797E5 /* IQWidgetsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IQWidgetsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + FF8443271B2B2D56004797E5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Example/Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + FF84432C1B2B2D6A004797E5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Example/Images.xcassets; sourceTree = ""; }; + FF84432E1B2B2DB2004797E5 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; FF86DC55136CA25A0077805F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; FF8C31F8130B111400A10CF0 /* CalendarTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CalendarTests.m; path = Tests/CalendarTests.m; sourceTree = ""; }; FF8C3213130B136E00A10CF0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -115,8 +112,6 @@ FF9D9DD416275E3A002A9272 /* test.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = test.plist; sourceTree = ""; }; FF9D9DD516277A81002A9272 /* IQNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQNavigationController.h; path = Controllers/IQNavigationController.h; sourceTree = ""; }; FF9D9DD616277A81002A9272 /* IQNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IQNavigationController.m; path = Controllers/IQNavigationController.m; sourceTree = ""; }; - FF9D9DDA1627808C002A9272 /* NavBarIconLauncher.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = NavBarIconLauncher.png; sourceTree = ""; }; - FF9D9DDB1627808C002A9272 /* NavBarIconLauncher@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "NavBarIconLauncher@2x.png"; sourceTree = ""; }; FF9D9DE0162793C1002A9272 /* MonthCalendarExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MonthCalendarExample.h; path = Example/Examples/MonthCalendarExample.h; sourceTree = ""; }; FF9D9DE1162793C1002A9272 /* MonthCalendarExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MonthCalendarExample.m; path = Example/Examples/MonthCalendarExample.m; sourceTree = ""; }; FFA26834132E8F23007B7FBD /* test.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test.png; path = Example/test.png; sourceTree = ""; }; @@ -124,6 +119,8 @@ FFC964691327DB4200B2EBA6 /* IQCalendarDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQCalendarDataSource.m; sourceTree = ""; }; FFD6CF35130C69D10040F26E /* ScheduleTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ScheduleTests.m; path = Tests/ScheduleTests.m; sourceTree = ""; }; FFD6CF39130C828B0040F26E /* TestUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestUtil.h; path = Tests/TestUtil.h; sourceTree = ""; }; + FFDDA0AB1B2CD766003D9CEA /* IQWidgets.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQWidgets.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFDDA0C41B2CD7A9003D9CEA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; FFF23725161ABF40009F64CF /* IQDrilldownController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQDrilldownController.h; path = Controllers/IQDrilldownController.h; sourceTree = ""; }; FFF23726161ABF40009F64CF /* IQDrilldownController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IQDrilldownController.m; path = Controllers/IQDrilldownController.m; sourceTree = ""; }; FFF23729161ABF7D009F64CF /* IQCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQCalendarHeaderView.h; path = Views/IQCalendarHeaderView.h; sourceTree = ""; }; @@ -143,25 +140,25 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - FF540AD112A95EC200C2C7A5 /* Frameworks */ = { + FF5716EE1B2B035C008408D4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FF86DC56136CA25A0077805F /* OpenGLES.framework in Frameworks */, - FF24AF271327A0F300BE3723 /* CoreGraphics.framework in Frameworks */, - FF540ADB12A95ECA00C2C7A5 /* libIQWidgets.a in Frameworks */, - FF540AF512A95F1D00C2C7A5 /* UIKit.framework in Frameworks */, - FF540D6912A9913F00C2C7A5 /* QuartzCore.framework in Frameworks */, - FF4553D112BAC48000B26A30 /* MapKit.framework in Frameworks */, - FF4553D812BAC48E00B26A30 /* CoreLocation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FF5716EE1B2B035C008408D4 /* Frameworks */ = { + FF8442F81B2B2CC6004797E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FFDDA0DB1B2CDD7F003D9CEA /* IQWidgets.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFDDA0A71B2CD766003D9CEA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FF5716F71B2B035C008408D4 /* libIQWidgets.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -171,9 +168,9 @@ 034768DFFF38A50411DB9C8B /* Products */ = { isa = PBXGroup; children = ( - FF540AD312A95EC200C2C7A5 /* IQTSVExample.app */, - D2AAC07E0554694100DB518D /* libIQWidgets.a */, FF5716F11B2B035C008408D4 /* IQWidgets Tests.xctest */, + FF8442FB1B2B2CC6004797E5 /* IQWidgetsExample.app */, + FFDDA0AB1B2CD766003D9CEA /* IQWidgets.framework */, ); name = Products; sourceTree = ""; @@ -181,11 +178,13 @@ 0867D691FE84028FC02AAC07 /* IQTiledScrollView */ = { isa = PBXGroup; children = ( + FF84432E1B2B2DB2004797E5 /* Default-568h@2x.png */, FF9D9DD416275E3A002A9272 /* test.plist */, FF86DC55136CA25A0077805F /* OpenGLES.framework */, FF60485D133CD49500BB74F6 /* QuartzCore.framework */, FF24AF261327A0F300BE3723 /* CoreGraphics.framework */, FF540AEC12A95EDB00C2C7A5 /* Example */, + FFDDA0C41B2CD7A9003D9CEA /* Info.plist */, FF8C31F6130B10FB00A10CF0 /* Tests */, FF96D43A16173742003D50AF /* Prototypes / Base Classes */, FF67B06C1621EF8800F20BA3 /* Theming */, @@ -224,8 +223,8 @@ FF540AEC12A95EDB00C2C7A5 /* Example */ = { isa = PBXGroup; children = ( - FF9D9DDA1627808C002A9272 /* NavBarIconLauncher.png */, - FF9D9DDB1627808C002A9272 /* NavBarIconLauncher@2x.png */, + FF8442F31B2B2BD7004797E5 /* FontAwesome.otf */, + FF11C2A61B2C36F000556651 /* LigatureSymbols.otf */, FF9D9DD01624B3F4002A9272 /* Themes */, FFDA7DEB14377F0E00B5FB92 /* Examples */, FFDA7DE614376C7E00B5FB92 /* Supporting Code */, @@ -233,6 +232,8 @@ FF9D9DD31624B692002A9272 /* about.html */, FF540AED12A95EF400C2C7A5 /* ExampleApp.h */, FF540AEE12A95EF400C2C7A5 /* ExampleApp.m */, + FF84432C1B2B2D6A004797E5 /* Images.xcassets */, + FF8443261B2B2D56004797E5 /* LaunchScreen.xib */, FF540B0D12A95FB200C2C7A5 /* Example-Info.plist */, ); name = Example; @@ -287,6 +288,8 @@ FFF2372F161ABF7D009F64CF /* IQCalendarView.m */, FFF23729161ABF7D009F64CF /* IQCalendarHeaderView.h */, FFF23731161ABF7D009F64CF /* IQCalendarHeaderView.m */, + FF8442EF1B2B2B2A004797E5 /* IQIconFont.h */, + FF8442F01B2B2B2A004797E5 /* IQIconFont.m */, FFF2372C161ABF7D009F64CF /* IQScheduleView.h */, FFF23730161ABF7D009F64CF /* IQScheduleView.m */, FFF23733161ABF7D009F64CF /* IQGanttView.h */, @@ -327,81 +330,81 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - D2AAC07A0554694100DB518D /* Headers */ = { + FFDDA0A81B2CD766003D9CEA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FFEEF05412BACC59003CA394 /* IQWidgets.h in Headers */, - FFC9646A1327DB4200B2EBA6 /* IQCalendarDataSource.h in Headers */, - FFD6CF3A130C828B0040F26E /* TestUtil.h in Headers */, - FFF23727161ABF40009F64CF /* IQDrilldownController.h in Headers */, - FFF23735161ABF7D009F64CF /* IQCalendarHeaderView.h in Headers */, - FFF23736161ABF7D009F64CF /* IQCalendarView.h in Headers */, - FFF23737161ABF7D009F64CF /* IQDrawerView.h in Headers */, - FFF23738161ABF7D009F64CF /* IQScheduleView.h in Headers */, - FFF23739161ABF7D009F64CF /* IQScrollView.h in Headers */, - FFF2373F161ABF7D009F64CF /* IQGanttView.h in Headers */, - FFF23743161ABFEA009F64CF /* IQMenuViewController.h in Headers */, - FF67B0741621EFBA00F20BA3 /* IQTheme.h in Headers */, - FF67B0751621EFBA00F20BA3 /* IQThemeCSS.h in Headers */, - FF9D9DD716277A81002A9272 /* IQNavigationController.h in Headers */, + FFDDA0E21B2CDDB5003D9CEA /* IQNavigationController.h in Headers */, + FFDDA0D91B2CDB77003D9CEA /* IQDrawerView.h in Headers */, + FFDDA0D31B2CDB77003D9CEA /* IQScheduleView.h in Headers */, + FFDDA0DE1B2CDDB5003D9CEA /* IQDrilldownController.h in Headers */, + FFDDA0E81B2CDDEB003D9CEA /* IQCalendarDataSource.h in Headers */, + FFDDA0D51B2CDB77003D9CEA /* IQGanttView.h in Headers */, + FFDDA0E91B2CDDF2003D9CEA /* IQWidgets.h in Headers */, + FFDDA0E41B2CDDC3003D9CEA /* IQTheme.h in Headers */, + FFDDA0D11B2CDB77003D9CEA /* IQIconFont.h in Headers */, + FFDDA0CF1B2CDB77003D9CEA /* IQCalendarHeaderView.h in Headers */, + FFDDA0E61B2CDDC3003D9CEA /* IQThemeCSS.h in Headers */, + FFDDA0D71B2CDB77003D9CEA /* IQScrollView.h in Headers */, + FFDDA0CD1B2CDB77003D9CEA /* IQCalendarView.h in Headers */, + FFDDA0E01B2CDDB5003D9CEA /* IQMenuViewController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - D2AAC07D0554694100DB518D /* IQWidgets */ = { + FF5716F01B2B035C008408D4 /* IQWidgets Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "IQWidgets" */; + buildConfigurationList = FF5716FA1B2B035C008408D4 /* Build configuration list for PBXNativeTarget "IQWidgets Tests" */; buildPhases = ( - D2AAC07A0554694100DB518D /* Headers */, - D2AAC07B0554694100DB518D /* Sources */, + FF5716ED1B2B035C008408D4 /* Sources */, + FF5716EE1B2B035C008408D4 /* Frameworks */, + FF5716EF1B2B035C008408D4 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = IQWidgets; - productName = IQTiledScrollView; - productReference = D2AAC07E0554694100DB518D /* libIQWidgets.a */; - productType = "com.apple.product-type.library.static"; + name = "IQWidgets Tests"; + productName = "IQWidgets Tests"; + productReference = FF5716F11B2B035C008408D4 /* IQWidgets Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; - FF540AD212A95EC200C2C7A5 /* IQWidgetsExample */ = { + FF8442FA1B2B2CC6004797E5 /* IQWidgetsExample */ = { isa = PBXNativeTarget; - buildConfigurationList = FF540AD812A95EC300C2C7A5 /* Build configuration list for PBXNativeTarget "IQWidgetsExample" */; + buildConfigurationList = FF84431B1B2B2CC6004797E5 /* Build configuration list for PBXNativeTarget "IQWidgetsExample" */; buildPhases = ( - FF540ACF12A95EC200C2C7A5 /* Resources */, - FF540AD012A95EC200C2C7A5 /* Sources */, - FF540AD112A95EC200C2C7A5 /* Frameworks */, + FF8442F71B2B2CC6004797E5 /* Sources */, + FF8442F81B2B2CC6004797E5 /* Frameworks */, + FF8442F91B2B2CC6004797E5 /* Resources */, ); buildRules = ( ); dependencies = ( - FF540ADA12A95EC700C2C7A5 /* PBXTargetDependency */, ); name = IQWidgetsExample; - productName = IQTSVExample; - productReference = FF540AD312A95EC200C2C7A5 /* IQTSVExample.app */; + productName = IQWidgetsExample; + productReference = FF8442FB1B2B2CC6004797E5 /* IQWidgetsExample.app */; productType = "com.apple.product-type.application"; }; - FF5716F01B2B035C008408D4 /* IQWidgets Tests */ = { + FFDDA0AA1B2CD766003D9CEA /* IQWidgets */ = { isa = PBXNativeTarget; - buildConfigurationList = FF5716FA1B2B035C008408D4 /* Build configuration list for PBXNativeTarget "IQWidgets Tests" */; + buildConfigurationList = FFDDA0BE1B2CD766003D9CEA /* Build configuration list for PBXNativeTarget "IQWidgets" */; buildPhases = ( - FF5716ED1B2B035C008408D4 /* Sources */, - FF5716EE1B2B035C008408D4 /* Frameworks */, - FF5716EF1B2B035C008408D4 /* Resources */, + FFDDA0A61B2CD766003D9CEA /* Sources */, + FFDDA0A71B2CD766003D9CEA /* Frameworks */, + FFDDA0A81B2CD766003D9CEA /* Headers */, + FFDDA0A91B2CD766003D9CEA /* Resources */, ); buildRules = ( ); dependencies = ( - FF5716F91B2B035C008408D4 /* PBXTargetDependency */, ); - name = "IQWidgets Tests"; - productName = "IQWidgets Tests"; - productReference = FF5716F11B2B035C008408D4 /* IQWidgets Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; + name = IQWidgets; + productName = IQWidgets; + productReference = FFDDA0AB1B2CD766003D9CEA /* IQWidgets.framework */; + productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -414,6 +417,15 @@ FF5716F01B2B035C008408D4 = { CreatedOnToolsVersion = 6.3.2; }; + FF8442FA1B2B2CC6004797E5 = { + CreatedOnToolsVersion = 6.3.2; + }; + FFDDA0AA1B2CD766003D9CEA = { + CreatedOnToolsVersion = 6.3.2; + }; + FFDDA0C61B2CD9DD003D9CEA = { + CreatedOnToolsVersion = 6.3.2; + }; }; }; buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "IQWidgets" */; @@ -426,47 +438,58 @@ French, German, en, + Base, ); mainGroup = 0867D691FE84028FC02AAC07 /* IQTiledScrollView */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - D2AAC07D0554694100DB518D /* IQWidgets */, - FF540AD212A95EC200C2C7A5 /* IQWidgetsExample */, - FF2E31721881C5D200B34F1C /* IQWidgets - universal */, FF5716F01B2B035C008408D4 /* IQWidgets Tests */, + FF8442FA1B2B2CC6004797E5 /* IQWidgetsExample */, + FFDDA0AA1B2CD766003D9CEA /* IQWidgets */, + FFDDA0C61B2CD9DD003D9CEA /* IQWidgets - Universal */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - FF540ACF12A95EC200C2C7A5 /* Resources */ = { + FF5716EF1B2B035C008408D4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FFA26835132E8F29007B7FBD /* test.png in Resources */, - FF9D9DD916277DFC002A9272 /* about.html in Resources */, - FF9D9DDC1627808C002A9272 /* NavBarIconLauncher.png in Resources */, - FF9D9DDD1627808C002A9272 /* NavBarIconLauncher@2x.png in Resources */, - FF9D9DDE16278536002A9272 /* social.css in Resources */, - FF9D9DDF16278538002A9272 /* basic.css in Resources */, + FF5717001B2B040F008408D4 /* test.plist in Resources */, + FF5716FD1B2B0372008408D4 /* Tests-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FF5716EF1B2B035C008408D4 /* Resources */ = { + FF8442F91B2B2CC6004797E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FF84432A1B2B2D56004797E5 /* LaunchScreen.xib in Resources */, + FF11C2A71B2C36F000556651 /* LigatureSymbols.otf in Resources */, + FFDDA12A1B2CE7DE003D9CEA /* social.css in Resources */, + FFDDA1291B2CE7DE003D9CEA /* basic.css in Resources */, + FF84432D1B2B2D6A004797E5 /* Images.xcassets in Resources */, + FFDDA12B1B2CF53F003D9CEA /* FontAwesome.otf in Resources */, + FFDDA04C1B2C4234003D9CEA /* about.html in Resources */, + FF84432F1B2B2DB2004797E5 /* Default-568h@2x.png in Resources */, + FFDDA04B1B2C4234003D9CEA /* test.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFDDA0A91B2CD766003D9CEA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FF5717001B2B040F008408D4 /* test.plist in Resources */, - FF5716FD1B2B0372008408D4 /* Tests-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - FF2E31781881C6CE00B34F1C /* ShellScript */ = { + FFDDA0CC1B2CDA39003D9CEA /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -477,104 +500,82 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Sets the target folders and the final framework product.\nFMK_NAME=IQWidgets\nTARGET_NAME=\"IQWidgets\"\n\n# Install dir will be the final output to the framework.\n# The following line create it in the root folder of the current project.\n_TARGET_DIR=${BUILD_ROOT}/${CONFIGURATION}-universal\n_TARGET_DIR=${BUILT_PRODUCTS_DIR}\nINSTALL_DIR=${_TARGET_DIR}/${FMK_NAME}.framework\n\n# Working dir will be deleted after the framework creation.\nDEVICE_DIR=${CONFIGURATION_BUILD_DIR}/iphoneos\nSIMULATOR_DIR=${CONFIGURATION_BUILD_DIR}/iphonesimulator\nLIBRARY_NAME=lib${FMK_NAME}.a\n\n# Building both architectures.\nxcodebuild -configuration \"${CONFIGURATION}\" -target \"${TARGET_NAME}\" -sdk iphoneos CONFIGURATION_BUILD_DIR=${DEVICE_DIR}\nxcodebuild -configuration \"${CONFIGURATION}\" -target \"${TARGET_NAME}\" -sdk iphonesimulator CONFIGURATION_BUILD_DIR=${SIMULATOR_DIR}\n\n# Cleaning the oldest.\nif [ -d \"${INSTALL_DIR}\" ]; then\nrm -rf \"${INSTALL_DIR}\"\nfi\n\n# Creates and renews the final product folder.\nmkdir -p \"${INSTALL_DIR}\"\nmkdir -p \"${INSTALL_DIR}/Versions\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Resources\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Headers\"\n\n# Creates the internal links.\n# It MUST uses relative path, otherwise will not work when the folder is copied/moved.\nln -s \"${FRAMEWORK_VERSION}\" \"${INSTALL_DIR}/Versions/Current\"\nln -s \"Versions/Current/Headers\" \"${INSTALL_DIR}/Headers\"\nln -s \"Versions/Current/Resources\" \"${INSTALL_DIR}/Resources\"\nln -s \"Versions/Current/${FMK_NAME}\" \"${INSTALL_DIR}/${FMK_NAME}\"\n\n# Copies the headers and resources files to the final product folder.\ncp -R \"${DEVICE_DIR}/IQWidgets/\" \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Headers/\"\n#cp -R \"${DEVICE_DIR}/\" \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Resources/\"\n\n# Removes the binary and header from the resources folder.\n#rm -r \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Resources/Headers\" \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/Resources/${FMK_NAME}\"\n\n# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.\nlipo -create \"${DEVICE_DIR}/${LIBRARY_NAME}\" \"${SIMULATOR_DIR}/${LIBRARY_NAME}\" -output \"${INSTALL_DIR}/Versions/${FRAMEWORK_VERSION}/${FMK_NAME}\"\n"; + shellScript = "# Sets the target folders and the final framework product.\nFMK_NAME=IQWidgets\nTARGET_NAME=\"IQWidgets\"\n\n# Install dir will be the final output to the framework.\n# The following line create it in the root folder of the current project.\n_TARGET_DIR=${BUILD_ROOT}/${CONFIGURATION}-universal\nINSTALL_DIR=${_TARGET_DIR}/${FMK_NAME}.framework\n\n# Working dir will be deleted after the framework creation.\nDEVICE_DIR=${CONFIGURATION_BUILD_DIR}/../${CONFIGURATION}-iphoneos\nSIMULATOR_DIR=${CONFIGURATION_BUILD_DIR}/../${CONFIGURATION}-iphonesimulator\n\n# Building both architectures.\necho Building device\nxcodebuild -configuration \"${CONFIGURATION}\" -target \"${TARGET_NAME}\" -sdk iphoneos CONFIGURATION_BUILD_DIR=${DEVICE_DIR}\necho Building sim\nxcodebuild -configuration \"${CONFIGURATION}\" -target \"${TARGET_NAME}\" -sdk iphonesimulator CONFIGURATION_BUILD_DIR=${SIMULATOR_DIR}\n\n# Cleaning the oldest.\nif [ -d \"${INSTALL_DIR}\" ]; then\nrm -rf \"${INSTALL_DIR}\"\nfi\n\n# Creates and renews the final product folder.\nmkdir -p \"${INSTALL_DIR}\"\n\n# Copies the headers and resources files to the final product folder.\ncp -R \"${DEVICE_DIR}/${TARGET_NAME}.framework/Headers\" \"${INSTALL_DIR}/\"\n\n# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.\nlipo -create \"${DEVICE_DIR}/${TARGET_NAME}.framework/${TARGET_NAME}\" \"${SIMULATOR_DIR}/${TARGET_NAME}.framework/${TARGET_NAME}\" -output \"${INSTALL_DIR}/${FMK_NAME}\"\n\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - D2AAC07B0554694100DB518D /* Sources */ = { + FF5716ED1B2B035C008408D4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FFC9646B1327DB4200B2EBA6 /* IQCalendarDataSource.m in Sources */, - FFF23728161ABF40009F64CF /* IQDrilldownController.m in Sources */, - FFF2373A161ABF7D009F64CF /* IQScrollView.m in Sources */, - FFF2373B161ABF7D009F64CF /* IQCalendarView.m in Sources */, - FFF2373C161ABF7D009F64CF /* IQScheduleView.m in Sources */, - FFF2373D161ABF7D009F64CF /* IQCalendarHeaderView.m in Sources */, - FFF2373E161ABF7D009F64CF /* IQDrawerView.m in Sources */, - FFF23740161ABF7D009F64CF /* IQGanttView.m in Sources */, - FFF23744161ABFEA009F64CF /* IQMenuViewController.m in Sources */, - FF67B0721621EFBA00F20BA3 /* IQTheme.m in Sources */, - FF67B0731621EFBA00F20BA3 /* IQThemeCSS.m in Sources */, - FF9D9DD816277A81002A9272 /* IQNavigationController.m in Sources */, + FF5716FF1B2B0372008408D4 /* ScheduleTests.m in Sources */, + FF5716FE1B2B0372008408D4 /* CalendarTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FF540AD012A95EC200C2C7A5 /* Sources */ = { + FF8442F71B2B2CC6004797E5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FF540AEF12A95EF400C2C7A5 /* ExampleApp.m in Sources */, - FF9D9DE2162793C1002A9272 /* MonthCalendarExample.m in Sources */, + FFEEA2DD1B2B300400768D2A /* ExampleApp.m in Sources */, + FFEEA2DE1B2B300800768D2A /* MonthCalendarExample.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FF5716ED1B2B035C008408D4 /* Sources */ = { + FFDDA0A61B2CD766003D9CEA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FF5716FF1B2B0372008408D4 /* ScheduleTests.m in Sources */, - FF5716FE1B2B0372008408D4 /* CalendarTests.m in Sources */, + FFDDA1241B2CE51E003D9CEA /* IQIconFont.m in Sources */, + FFDDA0CE1B2CDB77003D9CEA /* IQCalendarView.m in Sources */, + FFDDA0D61B2CDB77003D9CEA /* IQGanttView.m in Sources */, + FFDDA0D41B2CDB77003D9CEA /* IQScheduleView.m in Sources */, + FFDDA0E11B2CDDB5003D9CEA /* IQMenuViewController.m in Sources */, + FFDDA0E31B2CDDB5003D9CEA /* IQNavigationController.m in Sources */, + FFDDA0DA1B2CDB77003D9CEA /* IQDrawerView.m in Sources */, + FFDDA0EA1B2CDDF7003D9CEA /* IQCalendarDataSource.m in Sources */, + FFDDA0E51B2CDDC3003D9CEA /* IQTheme.m in Sources */, + FFDDA0D01B2CDB77003D9CEA /* IQCalendarHeaderView.m in Sources */, + FFDDA0E71B2CDDC3003D9CEA /* IQThemeCSS.m in Sources */, + FFDDA0D81B2CDB77003D9CEA /* IQScrollView.m in Sources */, + FFDDA0DF1B2CDDB5003D9CEA /* IQDrilldownController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - FF540ADA12A95EC700C2C7A5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D2AAC07D0554694100DB518D /* IQWidgets */; - targetProxy = FF540AD912A95EC700C2C7A5 /* PBXContainerItemProxy */; - }; - FF5716F91B2B035C008408D4 /* PBXTargetDependency */ = { + FFDDA0CB1B2CD9EC003D9CEA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = D2AAC07D0554694100DB518D /* IQWidgets */; - targetProxy = FF5716F81B2B035C008408D4 /* PBXContainerItemProxy */; + target = FFDDA0AA1B2CD766003D9CEA /* IQWidgets */; + targetProxy = FFDDA0CA1B2CD9EC003D9CEA /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ -/* Begin XCBuildConfiguration section */ - 1DEB921F08733DC00010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - PRODUCT_NAME = IQWidgets; - PUBLIC_HEADERS_FOLDER_PATH = IQWidgets; - SKIP_INSTALL = YES; - TEST_AFTER_BUILD = YES; - }; - name = Debug; - }; - 1DEB922008733DC00010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - PRODUCT_NAME = IQWidgets; - PUBLIC_HEADERS_FOLDER_PATH = IQWidgets; - SKIP_INSTALL = YES; - TEST_AFTER_BUILD = YES; - }; - name = Release; +/* Begin PBXVariantGroup section */ + FF8443261B2B2D56004797E5 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + FF8443271B2B2D56004797E5 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ 1DEB922308733DC00010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_GENERATE_TEST_COVERAGE_FILES = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "Contrib/libvncserver/x11vnc-0.9.12"; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; OTHER_LDFLAGS = ( "-all_load", "-ObjC", @@ -587,15 +588,13 @@ 1DEB922408733DC00010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_GENERATE_TEST_COVERAGE_FILES = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "Contrib/libvncserver/x11vnc-0.9.12"; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; OTHER_LDFLAGS = ( "-all_load", "-ObjC", @@ -605,75 +604,173 @@ }; name = Release; }; - FF2E31731881C5D200B34F1C /* Debug */ = { + FF5716FB1B2B035C008408D4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - PRODUCT_NAME = IQWidgets; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - FF2E31741881C5D200B34F1C /* Release */ = { + FF5716FC1B2B035C008408D4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - PRODUCT_NAME = IQWidgets; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + VALIDATE_PRODUCT = YES; }; name = Release; }; - FF540AD612A95EC300C2C7A5 /* Debug */ = { + FF84431C1B2B2CC6004797E5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h"; - INFOPLIST_FILE = "Example/Example-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ( - "-framework", - Foundation, - "-framework", - UIKit, ); - PRODUCT_NAME = IQTSVExample; - SDKROOT = iphoneos; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "Example/Example-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - FF540AD712A95EC300C2C7A5 /* Release */ = { + FF84431D1B2B2CC6004797E5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; INFOPLIST_FILE = "Example/Example-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ( - "-framework", - Foundation, - "-framework", - UIKit, - ); - PRODUCT_NAME = IQTSVExample; - SDKROOT = iphoneos; - ZERO_LINK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + VALIDATE_PRODUCT = YES; }; name = Release; }; - FF5716FB1B2B035C008408D4 /* Debug */ = { + FFDDA0BF1B2CD766003D9CEA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -689,13 +786,15 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 2; + DYLIB_CURRENT_VERSION = 2; + DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -709,16 +808,19 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = "Tests/Tests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - FF5716FC1B2B035C008408D4 /* Release */ = { + FFDDA0C01B2CD766003D9CEA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -734,14 +836,16 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 2; + DYLIB_CURRENT_VERSION = 2; + DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -749,59 +853,75 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = "Tests/Tests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + FFDDA0C81B2CD9DE003D9CEA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + FFDDA0C91B2CD9DE003D9CEA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "IQWidgets" */ = { + 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "IQWidgets" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB921F08733DC00010E9CD /* Debug */, - 1DEB922008733DC00010E9CD /* Release */, + 1DEB922308733DC00010E9CD /* Debug */, + 1DEB922408733DC00010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "IQWidgets" */ = { + FF5716FA1B2B035C008408D4 /* Build configuration list for PBXNativeTarget "IQWidgets Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB922308733DC00010E9CD /* Debug */, - 1DEB922408733DC00010E9CD /* Release */, + FF5716FB1B2B035C008408D4 /* Debug */, + FF5716FC1B2B035C008408D4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FF2E31751881C5D200B34F1C /* Build configuration list for PBXAggregateTarget "IQWidgets - universal" */ = { + FF84431B1B2B2CC6004797E5 /* Build configuration list for PBXNativeTarget "IQWidgetsExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF2E31731881C5D200B34F1C /* Debug */, - FF2E31741881C5D200B34F1C /* Release */, + FF84431C1B2B2CC6004797E5 /* Debug */, + FF84431D1B2B2CC6004797E5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FF540AD812A95EC300C2C7A5 /* Build configuration list for PBXNativeTarget "IQWidgetsExample" */ = { + FFDDA0BE1B2CD766003D9CEA /* Build configuration list for PBXNativeTarget "IQWidgets" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF540AD612A95EC300C2C7A5 /* Debug */, - FF540AD712A95EC300C2C7A5 /* Release */, + FFDDA0BF1B2CD766003D9CEA /* Debug */, + FFDDA0C01B2CD766003D9CEA /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; }; - FF5716FA1B2B035C008408D4 /* Build configuration list for PBXNativeTarget "IQWidgets Tests" */ = { + FFDDA0C71B2CD9DE003D9CEA /* Build configuration list for PBXAggregateTarget "IQWidgets - Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF5716FB1B2B035C008408D4 /* Debug */, - FF5716FC1B2B035C008408D4 /* Release */, + FFDDA0C81B2CD9DE003D9CEA /* Debug */, + FFDDA0C91B2CD9DE003D9CEA /* Release */, ); defaultConfigurationIsVisible = 0; }; diff --git a/Info.plist b/Info.plist new file mode 100644 index 0000000..407d568 --- /dev/null +++ b/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + org.evolvIQ.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0 + CFBundleSignature + IQwi + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/LigatureSymbols.otf b/LigatureSymbols.otf new file mode 100644 index 0000000..1926697 Binary files /dev/null and b/LigatureSymbols.otf differ diff --git a/NavBarIconLauncher.png b/NavBarIconLauncher.png deleted file mode 100644 index 6ea4f2a..0000000 Binary files a/NavBarIconLauncher.png and /dev/null differ diff --git a/NavBarIconLauncher@2x.png b/NavBarIconLauncher@2x.png deleted file mode 100644 index 53ee9e3..0000000 Binary files a/NavBarIconLauncher@2x.png and /dev/null differ diff --git a/Theming/IQTheme.m b/Theming/IQTheme.m index 1f56860..eee5291 100644 --- a/Theming/IQTheme.m +++ b/Theming/IQTheme.m @@ -128,7 +128,7 @@ - (BOOL) applyToView:(UIView*)view for:(NSObject*)themeable flags:( if([view respondsToSelector:@selector(setTextAlignment:)]) { UITextAlignment align = [self textAlignmentFor:themeable]; if(align >= 0) { - [(id)view setTextAlignment:align]; + [(id)view setTextAlignment:(NSTextAlignment)align]; didSet = YES; } } @@ -409,7 +409,7 @@ - (void) setTextAlignment:(UITextAlignment)textAlignment for:(NSObject*)themeabl alignString = @"right"; break; default: - [NSException raise:@"InvalidEnum" format:@"Invalid UITextAlignment value %d", textAlignment]; + [NSException raise:@"InvalidEnum" format:@"Invalid UITextAlignment value %ld", (long)textAlignment]; return; } [self _setThemeValue:alignString property:@"text-align" for:themeableOrString]; @@ -426,7 +426,7 @@ - (void) setTableViewStyle:(UITableViewStyle)style for:(NSObject*)themeableOrStr styleString = @"plain"; break; default: - [NSException raise:@"InvalidEnum" format:@"Invalid UITableViewStyle value %d", style]; + [NSException raise:@"InvalidEnum" format:@"Invalid UITableViewStyle value %ld", (long)style]; return; } [self _setThemeValue:styleString property:@"table-style" for:themeableOrString]; diff --git a/Theming/IQThemeCSS.m b/Theming/IQThemeCSS.m index e6ceccf..1f09b1f 100644 --- a/Theming/IQThemeCSS.m +++ b/Theming/IQThemeCSS.m @@ -25,7 +25,7 @@ - (void) _setThemeValue:(NSObject*)value property:(NSString*)property forTokens: // http://www.w3.org/TR/CSS2/selector.html NSArray* _IQMutableTheme_TokenizeCSS(NSString* cssSelector, int* ioPos) { NSMutableArray* tokens = [NSMutableArray array]; - int len = cssSelector.length; + NSUInteger len = cssSelector.length; int i = 0; if(ioPos) i = (*ioPos); int lastPos = i; @@ -73,7 +73,7 @@ - (void) _setThemeValue:(NSObject*)value property:(NSString*)property forTokens: i = -1; stop = YES; } else { - i = rng.location + rng.length; + i = (int)(rng.location + rng.length); for(;i>16)&0xFF)/255.0f green:((result>>8)&0xFF)/255.0f blue:((result>>0)&0xFF)/255.0f alpha:1.0f]; @@ -319,7 +319,7 @@ + (IQMutableTheme*) themeFromCSSResource:(NSString*)cssResourcePath - (void) parseCSS:(NSString*)css { - int idx = 0, len = css.length; + int idx = 0, len = (int)css.length; NSMutableArray* selectors = nil; while(idx < len) { NSArray* sel = _IQMutableTheme_TokenizeCSS(css, &idx); diff --git a/Views/IQCalendarView.m b/Views/IQCalendarView.m index 2d5dfcd..36efb57 100644 --- a/Views/IQCalendarView.m +++ b/Views/IQCalendarView.m @@ -549,7 +549,7 @@ -(NSDate*)lastDayInDisplayMonth -(NSDate*)firstDisplayedDay { NSDateComponents* cmpnts = [calendar components:NSWeekdayCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:self.firstDayInDisplayMonth]; - int daysSinceWeekStart = cmpnts.weekday - [calendar firstWeekday]; + int daysSinceWeekStart = (int)cmpnts.weekday - (int)[calendar firstWeekday]; cmpnts.day -= daysSinceWeekStart; return [calendar dateFromComponents:cmpnts]; } diff --git a/Views/IQGanttView.m b/Views/IQGanttView.m index 85c1099..dceb0c3 100644 --- a/Views/IQGanttView.m +++ b/Views/IQGanttView.m @@ -353,13 +353,13 @@ - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { char str[12] = ""; if(displayCalendarUnits & NSWeekdayCalendarUnit) { if(displayCalendarUnits & NSDayCalendarUnit) { - snprintf(str, sizeof(str), "%c %d", weekdayLetters[wd-1], md); + snprintf(str, sizeof(str), "%c %ld", weekdayLetters[wd-1], (long)md); } else { snprintf(str, sizeof(str), "%c", weekdayLetters[wd-1]); } } else { if(displayCalendarUnits & NSDayCalendarUnit) { - snprintf(str, sizeof(str), "%d", md); + snprintf(str, sizeof(str), "%ld", (long)md); } } if(str[0] != 0) { @@ -569,7 +569,6 @@ - (void)ganttView:(IQGanttView *)view didChangeDataSource:(id scaleWindow.windowStart) { - int fwd = [calendar firstWeekday]; + int fwd = (int)[calendar firstWeekday]; NSDate* d = [NSDate dateWithTimeIntervalSinceReferenceDate:t0]; // Days NSDateComponents* cmpnts = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:d]; @@ -647,8 +646,8 @@ - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { //int text = 0; while (t <= t1) { NSDateComponents* c2 = [calendar components:NSWeekdayCalendarUnit|NSDayCalendarUnit fromDate:d]; - int wd = c2.weekday; - int md = c2.day; + int wd = (int)c2.weekday; + int md = (int)c2.day; CGFloat x = round(r0 + (t-t0) / scl)+.5; BOOL l1 = NO, l2 = NO, l3 = NO; diff --git a/Views/IQIconFont.h b/Views/IQIconFont.h new file mode 100644 index 0000000..f0df014 --- /dev/null +++ b/Views/IQIconFont.h @@ -0,0 +1,43 @@ +// +// IQIconFon.h +// +// +// Created by Rickard Lyrenius on 12/06/15. +// +// + +#import + +typedef enum IQIconScaleMode { + IQIconScaleModeAspectFit, + IQIconScaleModeAspectFill, + IQIconScaleModeFill +} IQIconScaleMode; + +@interface IQIconFont : NSObject + +- (instancetype) initWithFont:(NSString*)fontName; +- (instancetype) initWithFontFile:(NSURL*)fontFileURL; +- (instancetype) initWithFontResource:(NSString*)resource; +- (instancetype) initWithFontResource:(NSString*)resource withExtension:(NSString*)extension; +- (CGGlyph) glyphForSymbol:(NSString*)symbol; +- (CGPathRef) pathWithSymbol:(NSString*)symbol size:(CGSize)size scaleMode:(IQIconScaleMode)scaleMode CF_RETURNS_RETAINED; +- (CGPathRef) pathWithGlyph:(CGGlyph)glyph size:(CGSize)size scaleMode:(IQIconScaleMode)scaleMode CF_RETURNS_RETAINED; +- (UIImage*) imageWithSymbol:(NSString*)symbol size:(CGSize)size color:(UIColor*)color scaleMode:(IQIconScaleMode)scaleMode; +@end + +@protocol IQIconFontView +@required +@property (nonatomic, retain) NSString* iconSymbol; +@property (nonatomic, retain) NSString* iconFontResource; +@property (nonatomic, retain) NSString* iconFontName; +@end + +@interface UIImageView (IQIconFont) +@end + +@interface UIButton (IQIconFont) +@end + +@interface UITabBarItem (IQIconFont) +@end \ No newline at end of file diff --git a/Views/IQIconFont.m b/Views/IQIconFont.m new file mode 100644 index 0000000..1cd02a7 --- /dev/null +++ b/Views/IQIconFont.m @@ -0,0 +1,294 @@ +// +// IQIconFon.m +// +// +// Created by Rickard Lyrenius on 12/06/15. +// +// + +#import "IQIconFont.h" +#import +#import + +@interface _IQIconFontObserver : NSObject +@end + +@interface IQIconFont() { + CGFontRef font; + CTFontRef textFont; +} +@end + +@protocol IQIconFontPrivate +@optional +- (NSArray*) _propertiesAffectingIcon; +- (void) _updateIconFontIcon; +@end + +@interface NSObject (IconFontData) +@property (nonatomic, strong) NSString* iconFontResource; +@property (nonatomic, strong) NSString* iconFontName; +@property (nonatomic, strong) NSString* iconSymbol; +@end + +@implementation IQIconFont +- (instancetype) initWithFont:(NSString*)fontName { + if(fontName == nil) return nil; + CGFontRef f = CGFontCreateWithFontName((CFStringRef)fontName); + NSLog(@"%@", f); + if(!f) return nil; + + if(self = [super init]) { + font = f; + } + return self; +} + +- (instancetype) initWithFontFile:(NSURL*)fontFileURL { + if(fontFileURL == nil) return nil; + CGDataProviderRef data = CGDataProviderCreateWithURL((CFURLRef)fontFileURL); + CGFontRef f = CGFontCreateWithDataProvider(data); + CGDataProviderRelease(data); + if(!f) return nil; + if(self = [super init]) { + font = f; + } + return self; +} + +- (instancetype) initWithFontResource:(NSString*)resource { + NSString* fn = [resource stringByDeletingPathExtension]; + NSString* ext = [resource pathExtension]; + if(ext.length == 0) ext = nil; + return [self initWithFontResource:fn withExtension:ext]; +} + +- (instancetype) initWithFontResource:(NSString*)resource withExtension:(NSString*)extension { + if(extension == nil) extension = @"otf"; + return [self initWithFontFile:[[NSBundle mainBundle] URLForResource:resource withExtension:extension]]; +} + +- (void) dealloc { + if(font) CGFontRelease(font); + font = NULL; + if(textFont) CFRelease(textFont); + textFont = NULL; +} + +- (CGPathRef) pathWithSymbol:(NSString*)symbol size:(CGSize)size scaleMode:(IQIconScaleMode)scaleMode { + return [self pathWithGlyph:[self glyphForSymbol:symbol] size:size scaleMode:scaleMode]; +} + +- (CGPathRef) pathWithGlyph:(CGGlyph)glyph size:(CGSize)size scaleMode:(IQIconScaleMode)scaleMode { + if(!textFont) { + textFont = CTFontCreateWithGraphicsFont(font, 0, NULL, NULL); + } + if(!textFont) return 0; + + if(!glyph) return NULL; + CGRect rect; + CTFontGetBoundingRectsForGlyphs(textFont, kCTFontOrientationDefault, &glyph, &rect, 1); + CGFloat dw = size.width / rect.size.width, dh = size.height / rect.size.height; + switch(scaleMode) { + case IQIconScaleModeAspectFill: + dw = dh = dw < dh ? dh : dw; + break; + + case IQIconScaleModeFill: + break; + + case IQIconScaleModeAspectFit: + default: + dw = dh = dw > dh ? dh : dw; + break; + } + CGAffineTransform t = CGAffineTransformMakeTranslation(-rect.origin.x, -rect.origin.y); + t = CGAffineTransformScale(t, dw, dh); + return CTFontCreatePathForGlyph(textFont, glyph, &t); +} + +- (CGGlyph) glyphForSymbol:(NSString*)symbol { + if(!symbol) return 0; + if(!textFont) { + textFont = CTFontCreateWithGraphicsFont(font, 0, NULL, NULL); + } + if(!textFont) return 0; + + int uniHexOffset = 0; + if(symbol.length > 2 && [[symbol substringToIndex:2] isEqualToString:@"0x"]) { + uniHexOffset = 2; + + } else if(symbol.length > 3 && [[symbol substringToIndex:3] isEqualToString:@"&#x"]) { + uniHexOffset = 3; + } + if (uniHexOffset > 0) { + // Unicode sequence + NSScanner *scan = [NSScanner scannerWithString:symbol]; + scan.scanLocation = uniHexOffset; + unsigned int hex; + [scan scanHexInt:&hex]; + if(hex > 0xffff) { + NSLog(@"Unicode sequence %ul out of range", hex); + return 0; + } + UniChar c = (UniChar)hex; + CGGlyph glyph; + if(!CTFontGetGlyphsForCharacters(textFont, &c, &glyph, 1)) + return 0; + return glyph; + } else { + // Character literal or ligature + NSDictionary* attrs = @{(NSString*)kCTLigatureAttributeName: @2, (NSString*)kCTFontAttributeName: (__bridge id)textFont}; + + NSAttributedString* s = [[NSAttributedString alloc] initWithString:symbol attributes:attrs]; + CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)s); + if(!line || CTLineGetGlyphCount(line) < 1) { + NSLog(@"No glyph(s) created from symbol '%@'", symbol); + return 0; + } + CFArrayRef array = CTLineGetGlyphRuns(line); + CGGlyph glyph = 0; + + if(CFArrayGetCount(array) > 0) { + CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(array, 0); + if(CTRunGetGlyphCount(run) > 0) { + CTRunGetGlyphs(run, CFRangeMake(0, 1), &glyph); + } + } + CFRelease(line); + return glyph; + } +} + +- (UIImage*) imageWithSymbol:(NSString*)symbol size:(CGSize)size color:(UIColor*)color scaleMode:(IQIconScaleMode)scaleMode { + CGPathRef path = [self pathWithSymbol:symbol size:size scaleMode:scaleMode]; + if(!path) return NULL; + CGRect rect = CGPathGetBoundingBox(path); + UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); + CGContextRef ctx = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(ctx, color.CGColor); + //CGContextFillRect(ctx, CGRectMake(0, 0, 10000, 10000)); + + CGContextTranslateCTM(ctx, rect.origin.x, rect.size.height + rect.origin.y); + CGContextScaleCTM(ctx, 1, -1); + CGContextAddPath(ctx, path); + //CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor); + //CGContextSetBlendMode(ctx, kCGBlendModeCopy); + CGContextFillPath(ctx); + + UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + CGPathRelease(path); + return image; +} +@end + +@implementation NSObject (IconFontData) + +- (void) setIconFontResource:(NSString *)iconFontResource { + objc_setAssociatedObject(self, @selector(iconFontResource), iconFontResource, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + if(iconFontResource && [self respondsToSelector:@selector(_updateIconFontIcon)]) { + [(id)self _updateIconFontIcon]; + } +} + +- (NSString*) iconFontResource { + return (NSString*)objc_getAssociatedObject(self, @selector(iconFontResource)); +} + +- (void) setIconFontName:(NSString *)iconFontName { + if(iconFontName) self.iconFontResource = nil; + objc_setAssociatedObject(self, @selector(iconFontName), iconFontName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + if(iconFontName && [self respondsToSelector:@selector(_updateIconFontIcon)]) { + [(id)self _updateIconFontIcon]; + } +} + +- (NSString*) iconFontName { + return (NSString*)objc_getAssociatedObject(self, @selector(iconFontName)); +} + +- (void) _registerIconFontNotifications { + if(!objc_getAssociatedObject(self, @selector(_registerIconFontNotifications))) { + NSArray* props; + if([self respondsToSelector:@selector(_propertiesAffectingIcon)]) { + props = [(id)self _propertiesAffectingIcon]; + } else { + props = @[]; + } + objc_setAssociatedObject(self, @selector(_registerIconFontNotifications), props, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + _IQIconFontObserver* o = [_IQIconFontObserver new]; + for(NSString* prop in props) { + [self addObserver:o forKeyPath:prop options:NSKeyValueObservingOptionNew context:NULL]; + } + } +} + +- (void) setIconSymbol:(NSString *)symbol { + objc_setAssociatedObject(self, @selector(iconSymbol), symbol, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + if(symbol && [self respondsToSelector:@selector(_updateIconFontIcon)]) { + [(id)self _updateIconFontIcon]; + } +} + +- (NSString*) iconSymbol { + return (NSString*)objc_getAssociatedObject(self, @selector(iconSymbol)); +} +@end + +@implementation UIImageView (IQIconFont) + +- (void) _updateIconFontIcon { + if((self.iconFontResource || self.iconFontName) && self.iconSymbol) { + IQIconFont* font = self.iconFontResource ? + [[IQIconFont alloc] initWithFontResource:self.iconFontResource] + : [[IQIconFont alloc] initWithFont:self.iconFontName]; + if(font) { + IQIconScaleMode mode = IQIconScaleModeAspectFit; + if(self.contentMode == UIViewContentModeScaleAspectFill) mode = IQIconScaleModeAspectFill; + else if(self.contentMode == UIViewContentModeScaleToFill) mode = IQIconScaleModeFill; + + self.image = [font imageWithSymbol:self.iconSymbol size:self.bounds.size color:self.tintColor scaleMode:mode]; + } + } +} + +- (NSArray*) _propertiesAffectingIcon { + return @[@"tintColor"]; +} +@end + +@implementation UIButton (IQIconFont) +- (void) _updateIconFontIcon { + +} + +- (NSArray*) _propertiesAffectingIcon { + return @[@"tintColor"]; +} +@end + +@implementation UITabBarItem (IQIconFont) +- (void) _updateIconFontIcon { + if((self.iconFontResource || self.iconFontName) && self.iconSymbol) { + IQIconFont* font = self.iconFontResource ? + [[IQIconFont alloc] initWithFontResource:self.iconFontResource] + : [[IQIconFont alloc] initWithFont:self.iconFontName]; + if(font) { + self.image = [font imageWithSymbol:self.iconSymbol size:CGSizeMake(25, 25) color:[UIColor blackColor] scaleMode:IQIconScaleModeAspectFit]; + } + } +} +@end + +@implementation _IQIconFontObserver + +- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if([object respondsToSelector:@selector(_updateIconFontIcon)]) { + [object _updateIconFontIcon]; + } +} + +@end \ No newline at end of file diff --git a/Views/IQScheduleView.m b/Views/IQScheduleView.m index 5a21021..2f3407a 100644 --- a/Views/IQScheduleView.m +++ b/Views/IQScheduleView.m @@ -156,7 +156,7 @@ - (void) setStartDate:(NSDate*)s endDate:(NSDate*)e animated:(BOOL)animated if(dc.day <= 0) { [self setStartDate:s numberOfDays:1 animated:animated]; } else { - int d = dc.day; + int d = (int)dc.day; if(dc.hour > 0 || dc.minute > 0 || dc.second > 0) d++; [self setStartDate:s numberOfDays:d animated:animated]; } @@ -171,7 +171,7 @@ - (void) setWeekWithDate:(NSDate*)s workdays:(BOOL)workdays animated:(BOOL)anima diff = 2; num = 5; } else { - diff = calendar.firstWeekday; + diff = (int)calendar.firstWeekday; num = 7; } dc.day -= dc.weekday-diff;