1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-03 09:57:46 +01:00
Telegram/Telegraph/TGModernConversationSearchInputPanel.m
2015-10-01 19:19:52 +03:00

233 lines
6.9 KiB
Objective-C

#import "TGModernConversationSearchInputPanel.h"
#import "TGModernButton.h"
#import "TGFont.h"
#import "TGImageUtils.h"
@interface TGModernConversationSearchInputPanel ()
{
CALayer *_stripeLayer;
TGModernButton *_nextButton;
TGModernButton *_previousButton;
UIActivityIndicatorView *_activityIndicator;
TGModernButton *_doneButton;
NSUInteger _offset;
NSUInteger _count;
UILabel *_countLabel;
}
@end
@implementation TGModernConversationSearchInputPanel
- (CGFloat)baseHeight
{
static CGFloat value = 0.0f;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
value = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ? 45.0f : 56.0f;
});
return value;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, [self baseHeight])];
if (self)
{
self.backgroundColor = UIColorRGBA(0xfafafa, 0.98f);
_stripeLayer = [[CALayer alloc] init];
_stripeLayer.backgroundColor = UIColorRGBA(0xb3aab2, 0.4f).CGColor;
[self.layer addSublayer:_stripeLayer];
_nextButton = [[TGModernButton alloc] init];
[_nextButton setImage:[UIImage imageNamed:@"InlineSearchUp.png"] forState:UIControlStateNormal];
[_nextButton setImage:[UIImage imageNamed:@"InlineSearchUpDisabled.png"] forState:UIControlStateDisabled];
[_nextButton addTarget:self action:@selector(nextPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_nextButton];
_previousButton = [[TGModernButton alloc] init];
[_previousButton setImage:[UIImage imageNamed:@"InlineSearchDown.png"] forState:UIControlStateNormal];
[_previousButton setImage:[UIImage imageNamed:@"InlineSearchDownDisabled.png"] forState:UIControlStateDisabled];
[_previousButton addTarget:self action:@selector(previousPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_previousButton];
_activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self addSubview:_activityIndicator];
_activityIndicator.hidden = true;
_doneButton = [[TGModernButton alloc] init];
[_doneButton setTitleColor:TGAccentColor()];
[_doneButton setTitle:TGLocalized(@"Common.Done") forState:UIControlStateNormal];
_doneButton.titleLabel.font = TGMediumSystemFontOfSize(15.0f);
[_doneButton addTarget:self action:@selector(donePressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_doneButton];
_countLabel = [[UILabel alloc] init];
_countLabel.backgroundColor = [UIColor clearColor];
_countLabel.textColor = [UIColor blackColor];
_countLabel.font = TGSystemFontOfSize(15.0f);
[self addSubview:_countLabel];
[self updateInterface];
}
return self;
}
- (void)setNext:(void (^)())next
{
_next = [next copy];
[self updateInterface];
}
- (void)setPrevious:(void (^)())previous
{
_previous = [previous copy];
[self updateInterface];
}
- (void)setOffset:(NSUInteger)offset count:(NSUInteger)count
{
if (_count != count || _offset != offset)
{
_offset = offset;
_count = count;
[self updateInterface];
}
}
- (void)setInProgress:(bool)inProgress
{
if (_inProgress != inProgress)
{
_inProgress = inProgress;
[self updateInterface];
}
}
- (void)setIsSearching:(bool)isSearching
{
if (_isSearching != isSearching)
{
_isSearching = isSearching;
[self updateInterface];
}
}
- (void)updateInterface
{
if (_count != 0 && _offset + 1 < _count && !_inProgress)
{
_nextButton.enabled = true;
}
else
{
_nextButton.enabled = false;
}
if (_count != 0 && _offset > 0 && !_inProgress)
{
_previousButton.enabled = true;
}
else
{
_previousButton.enabled = false;
}
_doneButton.hidden = true;//_inProgress;
_countLabel.hidden = _inProgress || !_isSearching;
if (_inProgress != !_activityIndicator.hidden)
{
_activityIndicator.hidden = !_inProgress;
if (_inProgress)
[_activityIndicator startAnimating];
else
[_activityIndicator stopAnimating];
}
if (_count == 0)
_countLabel.text = TGLocalized(@"Conversation.SearchNoResults");
else
{
_countLabel.text = [[NSString alloc] initWithFormat:@"%d %@ %d", (int)_offset + 1, TGLocalized(@"Common.of"), (int)_count];
}
[_countLabel sizeToFit];
[self setNeedsLayout];
}
- (void)adjustForSize:(CGSize)size keyboardHeight:(CGFloat)keyboardHeight duration:(NSTimeInterval)duration animationCurve:(int)animationCurve
{
[self _adjustForSize:size keyboardHeight:keyboardHeight duration:duration animationCurve:animationCurve];
}
- (void)_adjustForSize:(CGSize)size keyboardHeight:(CGFloat)keyboardHeight duration:(NSTimeInterval)duration animationCurve:(int)animationCurve
{
dispatch_block_t block = ^
{
CGSize messageAreaSize = size;
self.frame = CGRectMake(0, messageAreaSize.height - keyboardHeight - [self baseHeight], messageAreaSize.width, [self baseHeight]);
[self layoutSubviews];
};
if (duration > DBL_EPSILON)
[UIView animateWithDuration:duration delay:0 options:animationCurve << 16 animations:block completion:nil];
else
block();
}
- (void)changeToSize:(CGSize)size keyboardHeight:(CGFloat)keyboardHeight duration:(NSTimeInterval)duration
{
[self _adjustForSize:size keyboardHeight:keyboardHeight duration:duration animationCurve:0];
}
- (void)layoutSubviews
{
[super layoutSubviews];
_stripeLayer.frame = CGRectMake(0.0f, -TGRetinaPixel, self.frame.size.width, TGRetinaPixel);
[_doneButton sizeToFit];
_doneButton.frame = CGRectMake(self.frame.size.width - _doneButton.frame.size.width - 12.0f, 0.0f, _doneButton.frame.size.width + 6.0f, self.frame.size.height);
_previousButton.frame = CGRectMake(12.0f, 0.0f, 40.0f, self.frame.size.height);
_nextButton.frame = CGRectMake(12.0f + 43.0f, 0.0f, 40.0f, self.frame.size.height);
_countLabel.frame = CGRectMake(105.0f, CGFloor((self.frame.size.height - _countLabel.frame.size.height) / 2.0f), _countLabel.frame.size.width, _countLabel.frame.size.height);
_activityIndicator.frame = CGRectMake(self.frame.size.width - _activityIndicator.frame.size.width - 8.0f, CGFloor((self.frame.size.height - _activityIndicator.frame.size.height) / 2.0f), _activityIndicator.frame.size.width, _activityIndicator.frame.size.height);
}
- (void)nextPressed
{
if (_next)
_next();
}
- (void)previousPressed
{
if (_previous)
_previous();
}
- (void)donePressed
{
if (_done)
_done();
}
@end