|
@@ -11,20 +11,25 @@
|
|
|
*****************************************************************************/
|
|
|
|
|
|
#import "VLCEqualizerView.h"
|
|
|
+#import "VLCTrackSelectorTableViewCell.h"
|
|
|
+#import "VLCTrackSelectorHeaderView.h"
|
|
|
+
|
|
|
+#define PROFILE_SELECTOR_TABLEVIEW_SECTIONHEADER @"profile selector table section header"
|
|
|
+#define PROFILE_SELECTOR_TABLEVIEW_CELL @"profile selector table view cell"
|
|
|
|
|
|
@interface VLCEqualizerView ()
|
|
|
{
|
|
|
- UISlider *_preAmp_slider;
|
|
|
- UISlider *_60_slider;
|
|
|
- UISlider *_170_slider;
|
|
|
- UISlider *_310_slider;
|
|
|
- UISlider *_600_slider;
|
|
|
- UISlider *_1K_slider;
|
|
|
- UISlider *_3K_slider;
|
|
|
- UISlider *_6K_slider;
|
|
|
- UISlider *_12K_slider;
|
|
|
- UISlider *_14K_slider;
|
|
|
- UISlider *_16K_slider;
|
|
|
+ VLCSlider *_preAmp_slider;
|
|
|
+ VLCSlider *_60_slider;
|
|
|
+ VLCSlider *_170_slider;
|
|
|
+ VLCSlider *_310_slider;
|
|
|
+ VLCSlider *_600_slider;
|
|
|
+ VLCSlider *_1K_slider;
|
|
|
+ VLCSlider *_3K_slider;
|
|
|
+ VLCSlider *_6K_slider;
|
|
|
+ VLCSlider *_12K_slider;
|
|
|
+ VLCSlider *_14K_slider;
|
|
|
+ VLCSlider *_16K_slider;
|
|
|
}
|
|
|
|
|
|
@end
|
|
@@ -39,21 +44,57 @@
|
|
|
return self;
|
|
|
|
|
|
#define horizontal_padding 6.
|
|
|
-#define vertical_padding 8.
|
|
|
+#define vertical_padding_up 8.
|
|
|
+#define vertical_padding_down 135.
|
|
|
#define spacer 8.
|
|
|
|
|
|
- CGFloat sliderHeight = frame.size.height - (vertical_padding * 2.);
|
|
|
- CGFloat sliderWidth = (frame.size.width - (spacer * 10.)) / 11.;
|
|
|
+ UITextView *textView = nil;
|
|
|
+
|
|
|
+ CGFloat sliderHeight = frame.size.height - (vertical_padding_up + vertical_padding_down);
|
|
|
+ CGFloat sliderWidth = (frame.size.width - (spacer * 11.)) / 12.;
|
|
|
CGFloat sliderY = (sliderHeight / 2.) - horizontal_padding;
|
|
|
|
|
|
- _preAmp_slider = [[UISlider alloc] initWithFrame:CGRectMake(-sliderWidth + horizontal_padding, sliderY, sliderHeight, sliderWidth)];
|
|
|
+ _preAmp_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(-sliderWidth + horizontal_padding, sliderY, sliderHeight, sliderWidth)];
|
|
|
_preAmp_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_preAmp_slider.minimumValue = -20.;
|
|
|
_preAmp_slider.maximumValue = 20.;
|
|
|
[_preAmp_slider addTarget:self action:@selector(preampSliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_preAmp_slider];
|
|
|
|
|
|
- _60_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 2., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(0, frame.size.height - vertical_padding_down, 55, 25)];
|
|
|
+ textView.text = NSLocalizedString(@"PREAMP", nil);
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ // Info
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(sliderWidth, vertical_padding_up - 10, 55, 20)];
|
|
|
+ textView.text = NSLocalizedString(@"20DB", nil);
|
|
|
+ textView.textAlignment = NSTextAlignmentRight;
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(sliderWidth, vertical_padding_up + sliderHeight / 2 - 15, 55, 20)];
|
|
|
+ textView.text = NSLocalizedString(@"0DB", nil);
|
|
|
+ textView.textAlignment = NSTextAlignmentRight;
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(sliderWidth, frame.size.height - vertical_padding_down - 20, 55, 20)];
|
|
|
+ textView.text = NSLocalizedString(@"-20DB", nil);
|
|
|
+ textView.textAlignment = NSTextAlignmentRight;
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+
|
|
|
+ _60_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 3. + sliderWidth, sliderY, sliderHeight, sliderWidth)];
|
|
|
_60_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_60_slider.tag = 0;
|
|
|
_60_slider.minimumValue = -20.;
|
|
@@ -61,7 +102,14 @@
|
|
|
[_60_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_60_slider];
|
|
|
|
|
|
- _170_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 3. + sliderWidth, sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 2. + sliderWidth * 2.5, frame.size.height - vertical_padding_down, 25, 25)];
|
|
|
+ textView.text = @"60";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _170_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 4. + sliderWidth * 2, sliderY, sliderHeight, sliderWidth)];
|
|
|
_170_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_170_slider.tag = 1;
|
|
|
_170_slider.minimumValue = -20.;
|
|
@@ -69,7 +117,14 @@
|
|
|
[_170_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_170_slider];
|
|
|
|
|
|
- _310_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 4. + sliderWidth * 2., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 3. + sliderWidth * 3.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"170";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _310_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 5. + sliderWidth * 3., sliderY, sliderHeight, sliderWidth)];
|
|
|
_310_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_310_slider.tag = 2;
|
|
|
_310_slider.minimumValue = -20.;
|
|
@@ -77,7 +132,14 @@
|
|
|
[_310_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_310_slider];
|
|
|
|
|
|
- _600_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 5. + sliderWidth * 3., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 4. + sliderWidth * 4.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"310";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _600_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 6. + sliderWidth * 4., sliderY, sliderHeight, sliderWidth)];
|
|
|
_600_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_600_slider.tag = 3;
|
|
|
_600_slider.minimumValue = -20.;
|
|
@@ -85,7 +147,14 @@
|
|
|
[_600_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_600_slider];
|
|
|
|
|
|
- _1K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 6. + sliderWidth * 4., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 5. + sliderWidth * 5.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"600";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _1K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 7. + sliderWidth * 5., sliderY, sliderHeight, sliderWidth)];
|
|
|
_1K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_1K_slider.tag = 4;
|
|
|
_1K_slider.minimumValue = -20.;
|
|
@@ -93,7 +162,14 @@
|
|
|
[_1K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_1K_slider];
|
|
|
|
|
|
- _3K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 7. + sliderWidth * 5., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 6. + sliderWidth * 6.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"1K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _3K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 8. + sliderWidth * 6., sliderY, sliderHeight, sliderWidth)];
|
|
|
_3K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_3K_slider.tag = 5;
|
|
|
_3K_slider.minimumValue = -20.;
|
|
@@ -101,7 +177,14 @@
|
|
|
[_3K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_3K_slider];
|
|
|
|
|
|
- _6K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 8. + sliderWidth * 6., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 7. + sliderWidth * 7.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"3K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _6K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 9. + sliderWidth * 7., sliderY, sliderHeight, sliderWidth)];
|
|
|
_6K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_6K_slider.tag = 6;
|
|
|
_6K_slider.minimumValue = -20.;
|
|
@@ -109,7 +192,14 @@
|
|
|
[_6K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_6K_slider];
|
|
|
|
|
|
- _12K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 9. + sliderWidth * 7., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 8. + sliderWidth * 8.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"6K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _12K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 10. + sliderWidth * 8., sliderY, sliderHeight, sliderWidth)];
|
|
|
_12K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_12K_slider.tag = 7;
|
|
|
_12K_slider.minimumValue = -20.;
|
|
@@ -117,7 +207,14 @@
|
|
|
[_12K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_12K_slider],
|
|
|
|
|
|
- _14K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 10. + sliderWidth * 8., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 9. + sliderWidth * 9.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"12K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _14K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 11. + sliderWidth * 9., sliderY, sliderHeight, sliderWidth)];
|
|
|
_14K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_14K_slider.tag = 8;
|
|
|
_14K_slider.minimumValue = -20.;
|
|
@@ -125,7 +222,14 @@
|
|
|
[_14K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_14K_slider];
|
|
|
|
|
|
- _16K_slider = [[UISlider alloc] initWithFrame:CGRectMake(horizontal_padding * 11. + sliderWidth * 9., sliderY, sliderHeight, sliderWidth)];
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 10. + sliderWidth * 10.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"14K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ _16K_slider = [[VLCSlider alloc] initWithFrame:CGRectMake(horizontal_padding * 12. + sliderWidth * 10., sliderY, sliderHeight, sliderWidth)];
|
|
|
_16K_slider.transform = CGAffineTransformMakeRotation(-M_PI_2);
|
|
|
_16K_slider.tag = 9;
|
|
|
_16K_slider.minimumValue = -20.;
|
|
@@ -133,16 +237,29 @@
|
|
|
[_16K_slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged];
|
|
|
[self addSubview:_16K_slider];
|
|
|
|
|
|
+ textView = [[UITextView alloc] initWithFrame:CGRectMake(horizontal_padding * 11. + sliderWidth * 11.5, frame.size.height - vertical_padding_down, 35, 25)];
|
|
|
+ textView.text = @"16K";
|
|
|
+ textView.backgroundColor = [UIColor clearColor];
|
|
|
+ textView.textColor = [UIColor whiteColor];
|
|
|
+ textView.userInteractionEnabled = NO;
|
|
|
+ [self addSubview:textView];
|
|
|
+
|
|
|
+ // TableView
|
|
|
+ self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,frame.size.height - vertical_padding_down + 25,frame.size.width,145)
|
|
|
+ style:UITableViewStyleGrouped];
|
|
|
+ self.tableView.delegate = self;
|
|
|
+ self.tableView.dataSource = self;
|
|
|
+ [self addSubview:self.tableView];
|
|
|
return self;
|
|
|
}
|
|
|
|
|
|
-- (IBAction)sliderChangedValue:(UISlider *)sender
|
|
|
+- (IBAction)sliderChangedValue:(VLCSlider *)sender
|
|
|
{
|
|
|
if (self.delegate)
|
|
|
- [self.delegate setAmplification:[sender value] forBand:[sender tag]];
|
|
|
+ [self.delegate setAmplification:[sender value] forBand:(unsigned)[sender tag]];
|
|
|
}
|
|
|
|
|
|
-- (IBAction)preampSliderChangedValue:(UISlider *)sender
|
|
|
+- (IBAction)preampSliderChangedValue:(VLCSlider *)sender
|
|
|
{
|
|
|
if (self.delegate)
|
|
|
[self.delegate setPreAmplification:sender.value];
|
|
@@ -165,4 +282,63 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#pragma mark - track selector table view
|
|
|
+
|
|
|
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
|
|
+{
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
|
|
|
+{
|
|
|
+ UITableViewHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:PROFILE_SELECTOR_TABLEVIEW_SECTIONHEADER];
|
|
|
+ if (!view)
|
|
|
+ view = [[VLCTrackSelectorHeaderView alloc] initWithReuseIdentifier:PROFILE_SELECTOR_TABLEVIEW_SECTIONHEADER];
|
|
|
+
|
|
|
+ return view;
|
|
|
+}
|
|
|
+
|
|
|
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
|
|
+{
|
|
|
+ return NSLocalizedString(@"CHOOSE_EQUALIZER_PROFILES", nil);
|
|
|
+}
|
|
|
+
|
|
|
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
+{
|
|
|
+ VLCTrackSelectorTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PROFILE_SELECTOR_TABLEVIEW_CELL];
|
|
|
+
|
|
|
+ if (!cell)
|
|
|
+ cell = [[VLCTrackSelectorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PROFILE_SELECTOR_TABLEVIEW_CELL];
|
|
|
+
|
|
|
+ NSInteger row = indexPath.row;
|
|
|
+
|
|
|
+ cell.textLabel.text = [[self.delegate equalizerProfiles] objectAtIndex:row];
|
|
|
+ unsigned int profile = (unsigned int)[[[NSUserDefaults standardUserDefaults] objectForKey:kVLCSettingEqualizerProfile] integerValue];
|
|
|
+
|
|
|
+ if (profile == row)
|
|
|
+ {
|
|
|
+ [cell setShowsCurrentTrack:YES];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ [cell setShowsCurrentTrack:NO];
|
|
|
+ }
|
|
|
+ return cell;
|
|
|
+}
|
|
|
+
|
|
|
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
|
+{
|
|
|
+ return [self.delegate equalizerProfiles].count;
|
|
|
+}
|
|
|
+
|
|
|
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
+{
|
|
|
+ [tableView deselectRowAtIndexPath:indexPath animated:NO];
|
|
|
+ NSInteger index = indexPath.row;
|
|
|
+
|
|
|
+ [self.delegate resetEqualizerFromProfile:(unsigned)index];
|
|
|
+ [self reloadData];
|
|
|
+ [self.tableView reloadData];
|
|
|
+}
|
|
|
+
|
|
|
@end
|