The EOSManager and EOSCamera classes both have accompanying protocols; EOSManagerProtocol and EOSCameraProtocol. Delegate objects that conform to these protocols can be notified of camera related events. See the API reference for a full list of these events. The delegate objects can be set using the setDelegate methods.
Note that with EOSCamera, a session must be opened before the delegate can be set.
The following example shows how to automatically update a popup button with a list of the currently connected cameras. First, an NSPopupButton should be added to a window and connected to an IBOutlet in a header file (this example uses AppDelegate). The header file should look something like this:
#import <Cocoa/Cocoa.h> #import <EOSFramework/EOSFramework.h> @interface AppDelegate : NSObject <NSApplicationDelegate, EOSManagerProtocol, EOSCameraProtocol> @property (assign) IBOutlet NSWindow *window; @property (weak) IBOutlet NSPopUpButton *cameraListPopup; @end
The implementation file, shown below, initializes the framework and sets the EOSManager delegate. Whenever a camera is connected, a session is opened and the EOSCamera delegate is set. The popup button is updated each time a camera is connected or disconnected.
#import "AppDelegate.h" @implementation AppDelegate @synthesize cameraListPopup; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { EOSManager* manager = [EOSManager sharedManager]; if ([manager load:nil]){ //set the EOSManager delegate to self [manager setDelegate:self]; }else{ NSLog(@"Could not load SDK"); } } - (void)applicationWillTerminate:(NSNotification *)notification{ EOSManager* manager = [EOSManager sharedManager]; if ([manager isLoaded]){ [manager terminate:nil]; } } //method that will be called whenever a camera is connected or disconnected - (void)updateCameraList{ //empty the popup button [cameraListPopup removeAllItems]; //get new camera list NSArray* cameraList = [[EOSManager sharedManager] getCameras]; //loop though the cameras for (EOSCamera* camera in cameraList){ //we can determine which camera is new by checking whether it has been opened if (![camera isOpen]){ //open session if ([camera openSession:nil]){ //set the EOSCamera delegate to self [camera setDelegate:self]; }else{ NSLog(@"Could not open camera session"); } } //add camera description to the popup button [cameraListPopup addItemWithTitle: [camera description]]; } } //EOSManagerProtocol method: called each time a camera is connected - (void)cameraDidConnect{ [self updateCameraList]; } //EOSCameraProtocol method: called when a camera is disconnected - (void)cameraDidDisconnect:(EOSCamera*)camera{ [self updateCameraList]; }