Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Search #96

Merged
merged 11 commits into from
Jul 7, 2019
422 changes: 224 additions & 198 deletions AudioKitSynthOne/Header/Base.lproj/Header.storyboard

Large diffs are not rendered by default.

18 changes: 16 additions & 2 deletions AudioKitSynthOne/Header/HeaderViewContoller.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ protocol HeaderDelegate: AnyObject {
func nextPresetPressed()
func savePresetPressed()
func randomPresetPressed()
func searchPresetPressed()
func panicPressed()
func devPressed()
func aboutPressed()
Expand All @@ -34,6 +35,7 @@ public class HeaderViewController: UpdatableViewController {
@IBOutlet weak var displayLabel: UILabel!
@IBOutlet weak var panicButton: PresetUIButton!
@IBOutlet weak var diceButton: UIButton!
@IBOutlet weak var searchtoolButton: UIButton!
@IBOutlet weak var saveButton: PresetUIButton!
@IBOutlet weak var devButton: PresetUIButton!
@IBOutlet weak var aboutButton: PresetUIButton!
Expand Down Expand Up @@ -388,10 +390,22 @@ public class HeaderViewController: UpdatableViewController {
self.diceButton.transform = self.diceButton.transform.rotated(by: CGFloat(Double.pi))
}
})

headerDelegate?.randomPresetPressed()
}


@IBAction func searchPressed(_ sender: UIButton) {
// Animate Search
UIView.animate(withDuration: 0.4, animations: {
for _ in 0 ... 1 {
self.searchtoolButton.transform = self.searchtoolButton.transform.scaledBy(x: 0.5, y: 0.5)
self.searchtoolButton.transform = self.searchtoolButton.transform.scaledBy(x: 2, y: 2)
}
})

headerDelegate?.searchPresetPressed()
}

// MARK: -

func setupCallbacks() {
Expand Down
9 changes: 9 additions & 0 deletions AudioKitSynthOne/Header/Manager+HeaderDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,15 @@ extension Manager: HeaderDelegate {
presetsViewController.randomPreset()
}

func searchPresetPressed() {

if !isPresetsDisplayed {
displayLabelTapped()
}

presetsViewController.showSearch()
}

func previousPresetPressed() {
presetsViewController.previousPreset()
}
Expand Down
34 changes: 17 additions & 17 deletions AudioKitSynthOne/Presets/Base.lproj/Presets.storyboard
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ves-0y-a4J">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ves-0y-a4J">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
Expand Down Expand Up @@ -278,7 +278,7 @@
</state>
</button>
</objects>
<point key="canvasLocation" x="-366" y="43"/>
<point key="canvasLocation" x="888" y="-400"/>
</scene>
<!--Presets Categories View Controller-->
<scene sceneID="3MB-ly-1jK">
Expand All @@ -289,18 +289,18 @@
<viewControllerLayoutGuide type="bottom" id="vN8-lW-feU"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="E5Y-aw-7ZJ">
<rect key="frame" x="0.0" y="0.0" width="170" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="228" height="200"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="lPl-pl-iid">
<rect key="frame" x="0.0" y="0.0" width="170" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="228" height="200"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="CategoryCell" id="00o-XX-d7Y" customClass="CategoryCell" customModule="AudioKitSynthOne" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="170" height="44"/>
<rect key="frame" x="0.0" y="28" width="228" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="00o-XX-d7Y" id="abR-oz-Wbh">
<rect key="frame" x="0.0" y="0.0" width="170" height="43.5"/>
<rect key="frame" x="0.0" y="0.0" width="228" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Category" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jut-wm-dt0">
Expand Down Expand Up @@ -382,7 +382,7 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="3q8-2h-7uy" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-1430" y="489"/>
<point key="canvasLocation" x="-864" y="427"/>
</scene>
<!--Preset Editor View Controller-->
<scene sceneID="xGi-4K-Uka">
Expand Down Expand Up @@ -541,7 +541,7 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7Mp-Ia-A8c" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-680" y="560"/>
<point key="canvasLocation" x="-136" y="527"/>
</scene>
<!--Bank Editor View Controller-->
<scene sceneID="o0G-WK-SBk">
Expand Down Expand Up @@ -647,12 +647,12 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="G33-IP-SNV" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="245" y="533"/>
<point key="canvasLocation" x="1077" y="511"/>
</scene>
<!--Presets-->
<!--iPhonePresets-->
<scene sceneID="M4n-W1-fVX">
<objects>
<viewController storyboardIdentifier="iPhonePresets" useStoryboardIdentifierAsRestorationIdentifier="YES" id="UCc-Xd-xwz" userLabel="Presets" customClass="PresetsViewController" customModule="AudioKitSynthOne" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="iPhonePresets" useStoryboardIdentifierAsRestorationIdentifier="YES" id="UCc-Xd-xwz" userLabel="iPhonePresets" customClass="PresetsViewController" customModule="AudioKitSynthOne" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="lHm-b7-kr4"/>
<viewControllerLayoutGuide type="bottom" id="Xg3-qN-H3q"/>
Expand Down Expand Up @@ -923,7 +923,7 @@
</state>
</button>
</objects>
<point key="canvasLocation" x="-559.20000000000005" y="-291.00449775112446"/>
<point key="canvasLocation" x="-863" y="-399"/>
</scene>
</scenes>
<resources>
Expand All @@ -932,11 +932,11 @@
<image name="ak_fav" width="22" height="22"/>
<image name="ak_share" width="22" height="22"/>
<image name="au_presets" width="1024" height="299"/>
<image name="iPhone_Preset" width="1334" height="470"/>
<image name="iPhone_Preset" width="667" height="235"/>
</resources>
<inferredMetricsTieBreakers>
<segue reference="Bbd-Kw-ElO"/>
<segue reference="qdK-ZI-YdM"/>
<segue reference="yQc-ZV-PL2"/>
<segue reference="ntI-QD-kob"/>
<segue reference="Qqo-qV-zOf"/>
<segue reference="VhL-9T-ILb"/>
</inferredMetricsTieBreakers>
</document>
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,21 @@ extension PresetsViewController {

func selectCurrentPreset() {
// Find the preset in the current view
if let index = sortedPresets.firstIndex(where: { $0 === currentPreset }) {
tableView.selectRow(at: IndexPath(row: index, section: 0), animated: true, scrollPosition: .middle)
} else {
tableView.setContentOffset(CGPoint.zero, animated: false)
if resultSearchController.isActive {
if let index = filteredTableData.firstIndex(where: { $0 === currentPreset }) {
tableView.selectRow(at: IndexPath(row: index, section: 0), animated: true, scrollPosition: .middle)
} else {
tableView.setContentOffset(CGPoint.zero, animated: false)
}
dismissSearch()
}
else
{
if let index = sortedPresets.firstIndex(where: { $0 === currentPreset }) {
tableView.selectRow(at: IndexPath(row: index, section: 0), animated: true, scrollPosition: .middle)
} else {
tableView.setContentOffset(CGPoint.zero, animated: false)
}
}

// Update all UI
Expand Down Expand Up @@ -354,6 +365,7 @@ extension PresetsViewController {

currentPreset = presetsInBank[currentPresetIndex]
selectCurrentPreset()
self.resultSearchController.dismiss(animated: true, completion: nil)
}

// Used for Selecting Bank from MIDI msb (cc0)
Expand All @@ -371,7 +383,7 @@ extension PresetsViewController {
selectCategory(PresetCategory.bankStartingIndex + newBankIndex)
categoryIndex = PresetCategory.bankStartingIndex + newBankIndex
}

func randomPreset() {
deselectCurrentRow()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,39 @@ extension PresetsViewController: UITableViewDataSource {
if sortedPresets.isEmpty {
return 0
} else {
return sortedPresets.count
if (resultSearchController.isActive) {
return filteredTableData.count
} else {
return sortedPresets.count
}
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

// Get current preset
let preset = sortedPresets[(indexPath as NSIndexPath).row]

if let cell = tableView.dequeueReusableCell(withIdentifier: "PresetCell") as? PresetCell {

cell.delegate = self

var alphabetical = false
if categoryIndex == PresetCategory.categoryCount + 1 { alphabetical = true }

// Cell updated in PresetCell.swift
cell.configureCell(preset: preset, alpha: alphabetical)

return cell

if (resultSearchController.isActive) {
let preset = filteredTableData[(indexPath as NSIndexPath).row]
cell.delegate = self
// Cell updated in PresetCell.swift
cell.configureCell(preset: preset, alpha: alphabetical)

return cell
}
else {
let preset = sortedPresets[(indexPath as NSIndexPath).row]
cell.delegate = self
// Cell updated in PresetCell.swift
cell.configureCell(preset: preset, alpha: alphabetical)

return cell
}
} else {
return PresetCell()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,18 @@ protocol PresetsDelegate: AnyObject {
func saveEditedPreset(name: String, category: Int, bank: String)
func banksDidUpdate()
}

class PresetsViewController: UIViewController {
extension UISearchBar {

func change(textFont : UIFont!) {

for view : UIView in (self.subviews[0]).subviews {

if let textField = view as? UITextField {
textField.font = textFont
}
}
} }
class PresetsViewController: UIViewController, UISearchBarDelegate, UISearchResultsUpdating {

@IBOutlet weak var newButton: SynthButton!
@IBOutlet weak var importButton: SynthButton!
Expand All @@ -30,6 +40,11 @@ class PresetsViewController: UIViewController {
@IBOutlet weak var presetDescriptionField: UITextView!
@IBOutlet weak var categoryLabel: UILabel!
@IBOutlet weak var doneEditingButton: UIButton!
@IBOutlet weak var searchBar: UISearchBar! {
didSet {
searchBar.change(textFont: UIFont(name: "AvenirNext-Regular", size: UIFont.systemFontSize)!)
}
}

var presets = [Preset]() {
didSet {
Expand All @@ -48,6 +63,50 @@ class PresetsViewController: UIViewController {
createActivePreset()
presetDescriptionField.text = currentPreset.userText
categoryLabel.text = PresetCategory(rawValue: currentPreset.category)?.description()
if resultSearchController.isActive {
self.dismissSearch()
}
}
}

var filteredTableData = [Preset]()
var resultSearchController = UISearchController(searchResultsController: nil)

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
// called when cancel button pressed
self.dismissSearch()
}

func showSearch() {
if !resultSearchController.isActive {
resultSearchController.isActive = true
}
}

func dismissSearch(){
resultSearchController.isActive = false
selectCurrentPreset()
}

func updateSearchResults(for searchController: UISearchController) {
if let searchText = searchController.searchBar.text {
if !searchText.isEmpty {
filteredTableData.removeAll()
let compareText = searchText.lowercased();
for index in 0..<sortedPresets.count {
if sortedPresets[index].name.lowercased().contains(
compareText) ||
sortedPresets[index].userText.lowercased().contains(
compareText) {
filteredTableData.append(sortedPresets[index])
}
}
}
else {
filteredTableData = sortedPresets
}
tableView.reloadData()
self.tableView.reloadData()
}
}

Expand All @@ -73,11 +132,32 @@ class PresetsViewController: UIViewController {

weak var presetsDelegate: PresetsDelegate?


// MARK: - Lifecycle

override func viewDidLoad() {
super.viewDidLoad()

resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.searchBar.delegate = self
controller.dimsBackgroundDuringPresentation = false
controller.hidesNavigationBarDuringPresentation = false
controller.searchBar.barStyle = UIBarStyle.black
controller.searchBar.showsCancelButton = true
controller.searchBar.keyboardAppearance = UIKeyboardAppearance.dark
controller.searchBar.sizeToFit()
searchBar = controller.searchBar
tableView.backgroundView = UIView() // removes white background when pulling down search at top of list
tableView.tableHeaderView = searchBar
return controller
})()

definesPresentationContext = true
// Reload the table
tableView.reloadData()

// Preset Description TextField
presetDescriptionField.delegate = self
presetDescriptionField.layer.cornerRadius = 4
Expand Down