X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/facbc56de5a9dd53b0ce257f414cf9b9beee2229..1b1b3f4af0bd30c5c6c7378187766155b1963b9d:/UICaboodle/RVBook.mm diff --git a/UICaboodle/RVBook.mm b/UICaboodle/RVBook.mm index cef1acee..b639958b 100644 --- a/UICaboodle/RVBook.mm +++ b/UICaboodle/RVBook.mm @@ -18,14 +18,58 @@ #import "RVPage.h" +@interface NSObject (UICaboodleRVBook) +- (float) widthForButtonContents:(float)width; +@end + +@implementation NSObject (UICaboodleRVBook) + +- (float) widthForButtonContents:(float)width { + return width; +} + +@end + +@interface UIImage (UICaboodleRVBook) +- (float) widthForButtonContents:(float)width; +@end + +@implementation UIImage (UICaboodleRVBook) + +- (float) widthForButtonContents:(float)width { + return [self size].width + 8; +} + +@end + +@interface RVNavigationBar : UINavigationBar { +} + +- (id) createButtonWithContents:(id)contents width:(float)width barStyle:(int)barStyle buttonStyle:(int)style isRight:(BOOL)right; +@end + +@implementation RVNavigationBar + +- (id) createButtonWithContents:(id)contents width:(float)width barStyle:(int)barStyle buttonStyle:(int)style isRight:(BOOL)right { + float adjust = [contents widthForButtonContents:width]; + width = adjust; + return [super createButtonWithContents:contents width:width barStyle:barStyle buttonStyle:style isRight:right]; +} + +@end + @implementation RVBook - (void) dealloc { [navbar_ setDelegate:nil]; + if (toolbar_ != nil) + [toolbar_ setDelegate:nil]; [pages_ release]; [navbar_ release]; [transition_ release]; + if (toolbar_ != nil) + [toolbar_ release]; [super dealloc]; } @@ -59,7 +103,7 @@ CGSize navsize = [UINavigationBar defaultSize]; CGRect navrect = {{0, 0}, navsize}; - navbar_ = [[UINavigationBar alloc] initWithFrame:navrect]; + navbar_ = [[RVNavigationBar alloc] initWithFrame:navrect]; [self addSubview:navbar_]; [navbar_ setBarStyle:0]; @@ -116,6 +160,10 @@ [navbar_ setAccessoryView:[page accessoryView] animate:animated removeOnPop:NO]; } +- (void) pushBook:(RVBook *)book { + [delegate_ popUpBook:book]; +} + - (void) popPages:(unsigned)pages { if (pages == 0) return; @@ -157,25 +205,34 @@ [navbar_ setAccessoryView:[page accessoryView] animate:animated removeOnPop:NO]; } -- (void) setTitle:(NSString *)title forPage:(RVPage *)page { +- (void) setBackButtonTitle:(NSString *)title forPage:(RVPage *)page { if ([pages_ count] == 0 || page != [pages_ lastObject]) return; UINavigationItem *navitem = [navbar_ topItem]; - [navitem setTitle:title]; + [navitem setBackButtonTitle:title]; } -- (void) setBackButtonTitle:(NSString *)title forPage:(RVPage *)page { +- (void) reloadTitleForPage:(RVPage *)page { if ([pages_ count] == 0 || page != [pages_ lastObject]) return; UINavigationItem *navitem = [navbar_ topItem]; - [navitem setBackButtonTitle:title]; + NSString *title = [self getTitleForPage:page]; + [navitem setTitle:title]; +} + +- (void) _leftButtonTitle:(NSString *&)leftButtonTitle style:(UINavigationButtonStyle &)leftButtonStyle forPage:(RVPage *)page { + leftButtonTitle = [page leftButtonTitle]; + leftButtonStyle = [page leftButtonStyle]; } - (void) reloadButtonsForPage:(RVPage *)page { if ([pages_ count] == 0 || page != [pages_ lastObject]) return; - NSString *leftButtonTitle([page leftButtonTitle]); - UINavigationButtonStyle leftButtonStyle = [page leftButtonStyle]; + + NSString *leftButtonTitle; + UINavigationButtonStyle leftButtonStyle; + [self _leftButtonTitle:leftButtonTitle style:leftButtonStyle forPage:page]; + UINavigationButtonStyle rightButtonStyle = [page rightButtonStyle]; //[navbar_ showButtonsWithLeftTitle:leftButtonTitle rightTitle:[page rightButtonTitle] leftBack:(leftButtonTitle == nil)]; @@ -202,4 +259,30 @@ return [transition_ bounds]; } +- (void) close { +} + +@end + +@implementation RVPopUpBook + +- (void) _leftButtonTitle:(NSString *&)leftButtonTitle style:(UINavigationButtonStyle &)leftButtonStyle forPage:(RVPage *)page { + [super _leftButtonTitle:leftButtonTitle style:leftButtonStyle forPage:page]; + if ((cancel_ = leftButtonTitle == nil && [pages_ count] == 1)) { + leftButtonTitle = @"Cancel"; + leftButtonStyle = UINavigationButtonStyleNormal; + } +} + +- (void) navigationBar:(UINavigationBar *)navbar buttonClicked:(int)button { + if (button == 1 && cancel_) + [self close]; + else + [super navigationBar:navbar buttonClicked:button]; +} + +- (void) close { + [self popFromSuperviewAnimated:YES]; +} + @end