mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-25 02:04:23 +00:00
137 lines
4.1 KiB
Text
137 lines
4.1 KiB
Text
/*
|
|
==============================================================================
|
|
|
|
This file is part of the JUCE library.
|
|
Copyright (c) 2015 - ROLI Ltd.
|
|
|
|
Permission is granted to use this software under the terms of either:
|
|
a) the GPL v2 (or any later version)
|
|
b) the Affero GPL v3
|
|
|
|
Details of these licenses can be found at: www.gnu.org/licenses
|
|
|
|
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
To release a closed-source product which uses JUCE, commercial licenses are
|
|
available: visit www.juce.com for more information.
|
|
|
|
==============================================================================
|
|
*/
|
|
|
|
// Note: for the Bluetooth Midi selector overlay, we need the class
|
|
// UIViewComponent from the juce_gui_extra module. If this module is not
|
|
// included in your app, BluetoothMidiDevicePairingDialogue::open() will fail
|
|
// and return false.
|
|
// It is also not available in the iPhone/iPad simulator.
|
|
#if JUCE_MODULE_AVAILABLE_juce_gui_extra && ! TARGET_IPHONE_SIMULATOR
|
|
|
|
} // (juce namespace)
|
|
|
|
#include <CoreAudioKit/CoreAudioKit.h>
|
|
|
|
//==============================================================================
|
|
@interface BluetoothSelectorView : NSObject
|
|
|
|
@property (nonatomic, retain) CABTMIDICentralViewController *central;
|
|
- (UIView*) getView;
|
|
|
|
@end
|
|
|
|
//==============================================================================
|
|
@implementation BluetoothSelectorView
|
|
|
|
- (instancetype) init
|
|
{
|
|
self = [super init];
|
|
self.central = [[CABTMIDICentralViewController alloc] init];
|
|
return self;
|
|
}
|
|
|
|
- (UIView*) getView
|
|
{
|
|
return self.central.view;
|
|
}
|
|
|
|
@end
|
|
|
|
namespace juce
|
|
{
|
|
|
|
//==============================================================================
|
|
class BluetoothMidiSelectorOverlay : public Component
|
|
{
|
|
public:
|
|
BluetoothMidiSelectorOverlay()
|
|
{
|
|
setAlwaysOnTop (true);
|
|
setVisible (true);
|
|
addToDesktop (ComponentPeer::windowHasDropShadow);
|
|
setBounds (0, 0, getParentWidth(), getParentHeight());
|
|
toFront (true);
|
|
|
|
nativeSelectorComponent.setView ([[[BluetoothSelectorView alloc] init] getView]);
|
|
addAndMakeVisible (nativeSelectorComponent);
|
|
|
|
enterModalState (true, nullptr, true);
|
|
}
|
|
|
|
void paint (Graphics& g) override
|
|
{
|
|
g.fillAll (Colours::black.withAlpha (0.5f));
|
|
}
|
|
|
|
void inputAttemptWhenModal() override { close(); }
|
|
void mouseDrag (const MouseEvent&) override {}
|
|
void mouseDown (const MouseEvent&) override { close(); }
|
|
void resized() override { update(); }
|
|
void parentSizeChanged() override { update(); }
|
|
|
|
private:
|
|
void update()
|
|
{
|
|
const int pw = getParentWidth();
|
|
const int ph = getParentHeight();
|
|
|
|
nativeSelectorComponent.setBounds (Rectangle<int> (pw, ph)
|
|
.withSizeKeepingCentre (jmin (400, pw - 14),
|
|
jmin (500, ph - 40)));
|
|
}
|
|
|
|
void close()
|
|
{
|
|
exitModalState (0);
|
|
setVisible (false);
|
|
}
|
|
|
|
UIViewComponent nativeSelectorComponent;
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BluetoothMidiSelectorOverlay)
|
|
};
|
|
|
|
bool BluetoothMidiDevicePairingDialogue::open()
|
|
{
|
|
if (isAvailable())
|
|
{
|
|
new BluetoothMidiSelectorOverlay();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool BluetoothMidiDevicePairingDialogue::isAvailable()
|
|
{
|
|
return NSClassFromString ([NSString stringWithUTF8String: "CABTMIDICentralViewController"]) != nil;
|
|
}
|
|
|
|
//==============================================================================
|
|
#else
|
|
|
|
bool BluetoothMidiDevicePairingDialogue::open() { return false; }
|
|
bool BluetoothMidiDevicePairingDialogue::isAvailable() { return false; }
|
|
|
|
#endif
|