fix #4663, partly by more efficiently generating the relevant string, and secondly...
[ardour.git] / gtk2_ardour / au_pluginui.mm
index 2b3053d20f5a586e2b54eb43f36eeaf04fd63a7e..d1ba3d4d7f53b369f514dce392856025c8aff219 100644 (file)
@@ -5,7 +5,9 @@
 
 #include "pbd/convert.h"
 #include "pbd/error.h"
+
 #include "ardour/audio_unit.h"
+#include "ardour/debug.h"
 #include "ardour/plugin_insert.h"
 
 #undef check // stupid gtk, stupid apple
@@ -131,7 +133,7 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
 
        smaller_hbox->set_spacing (6);
        smaller_hbox->pack_start (preset_label, false, false, 4);
-       smaller_hbox->pack_start (_preset_box, false, false);
+       smaller_hbox->pack_start (_preset_combo, false, false);
        smaller_hbox->pack_start (save_button, false, false);
 #if 0
        /* one day these might be useful with an AU plugin, but not yet */
@@ -169,6 +171,7 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
        cocoa_parent = 0;
        _notify = 0;
        cocoa_window = 0;
+       carbon_window = 0;
        au_view = 0;
        editView = 0;
 
@@ -176,8 +179,10 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
 
        if (test_cocoa_view_support()) {
                create_cocoa_view ();
+#ifdef WITH_CARBON
        } else if (test_carbon_view_support()) {
                create_carbon_view ();
+#endif
        } else {
                create_cocoa_view ();
        }
@@ -194,10 +199,12 @@ AUPluginUI::~AUPluginUI ()
 
        } 
 
+#ifdef WITH_CARBON
        if (carbon_window) {
                /* not parented, just overlaid on top of our window */
                DisposeWindow (carbon_window);
        }
+#endif
 
        if (editView) {
                CloseComponent (editView);
@@ -286,10 +293,14 @@ AUPluginUI::create_cocoa_view ()
                                                    &isWritable );
 
        numberOfClasses = (dataSize - sizeof(CFURLRef)) / sizeof(CFStringRef);
-       
+
        // Does view have custom Cocoa UI?
        
        if ((result == noErr) && (numberOfClasses > 0) ) {
+
+               DEBUG_TRACE(DEBUG::AudioUnits,
+                           string_compose ( "based on %1, there are %2 cocoa UI classes\n", dataSize, numberOfClasses));
+
                cocoaViewInfo = (AudioUnitCocoaViewInfo *)malloc(dataSize);
                if(AudioUnitGetProperty(*au->get_au(),
                                        kAudioUnitProperty_CocoaUI,
@@ -299,12 +310,17 @@ AUPluginUI::create_cocoa_view ()
                                        &dataSize) == noErr) {
 
                        CocoaViewBundlePath     = (NSURL *)cocoaViewInfo->mCocoaAUViewBundleLocation;
-                       
+                               
                        // we only take the first view in this example.
                        factoryClassName        = (NSString *)cocoaViewInfo->mCocoaAUViewClass[0];
+                       
+                       DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("the factory name is %1 bundle is %2\n",
+                                                                       factoryClassName, CocoaViewBundlePath));
 
                } else {
 
+                       DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("No cocoaUI property cocoaViewInfo = %1\n", cocoaViewInfo));
+
                        if (cocoaViewInfo != NULL) {
                                free (cocoaViewInfo);
                                cocoaViewInfo = NULL;
@@ -318,11 +334,15 @@ AUPluginUI::create_cocoa_view ()
 
        if (CocoaViewBundlePath && factoryClassName) {
                NSBundle *viewBundle    = [NSBundle bundleWithPath:[CocoaViewBundlePath path]];
+
+               DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("tried to create bundle, result = %1\n", viewBundle));
+
                if (viewBundle == nil) {
                        error << _("AUPluginUI: error loading AU view's bundle") << endmsg;
                        return -1;
                } else {
                        Class factoryClass = [viewBundle classNamed:factoryClassName];
+                       DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("tried to create factory class, result = %1\n", factoryClass));
                        if (!factoryClass) {
                                error << _("AUPluginUI: error getting AU view's factory class from bundle") << endmsg;
                                return -1;
@@ -340,8 +360,12 @@ AUPluginUI::create_cocoa_view ()
                                return -1;
                        }
 
+                       DEBUG_TRACE (DEBUG::AudioUnits, "got a factory instance\n");
+
                        // make a view
                        au_view = [factoryInstance uiViewForAudioUnit:*au->get_au() withSize:crect.size];
+
+                       DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("view created @ %1\n", au_view));
                        
                        // cleanup
                        [CocoaViewBundlePath release];
@@ -358,7 +382,10 @@ AUPluginUI::create_cocoa_view ()
 
        if (!wasAbleToLoadCustomView) {
                // load generic Cocoa view
+               DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("Loading generic view using %1 -> %2\n", au,
+                                                               au->get_au()));
                au_view = [[AUGenericView alloc] initWithAudioUnit:*au->get_au()];
+               DEBUG_TRACE (DEBUG::AudioUnits, string_compose ("view created @ %1\n", au_view));
                [(AUGenericView *)au_view setShowsExpertParameters:YES];
        }
 
@@ -388,6 +415,7 @@ AUPluginUI::cocoa_view_resized ()
 int
 AUPluginUI::create_carbon_view ()
 {
+#ifdef WITH_CARBON
        OSStatus err;
        ControlRef root_control;
 
@@ -443,6 +471,10 @@ AUPluginUI::create_carbon_view ()
        low_box.set_size_request (prefwidth, prefheight);
 
        return 0;
+#else
+       error << _("AU Carbon GUI is not supported.") << endmsg;
+       return -1;
+#endif
 }
 
 NSWindow*
@@ -468,19 +500,24 @@ AUPluginUI::get_nswindow ()
 void
 AUPluginUI::activate ()
 {
+#ifdef WITH_CARBON
        ActivateWindow (carbon_window, TRUE);
+#endif
        // [cocoa_parent makeKeyAndOrderFront:nil];
 }
 
 void
 AUPluginUI::deactivate ()
 {
+#ifdef WITH_CARBON
        ActivateWindow (carbon_window, FALSE);
+#endif
 }
 
 int
 AUPluginUI::parent_carbon_window ()
 {
+#ifdef WITH_CARBON
        NSWindow* win = get_nswindow ();
        int x, y;
 
@@ -521,6 +558,9 @@ AUPluginUI::parent_carbon_window ()
        [win addChildWindow:cocoa_parent ordered:NSWindowAbove];
 
        return 0;
+#else
+       return -1;
+#endif
 }      
 
 int
@@ -625,10 +665,12 @@ AUPluginUI::on_map_event (GdkEventAny*)
 void
 AUPluginUI::on_window_hide ()
 {
+#ifdef WITH_CARBON
        if (carbon_window) {
                HideWindow (carbon_window);
                ActivateWindow (carbon_window, FALSE);
        }
+#endif
 
        hide_all ();
 }
@@ -642,10 +684,12 @@ AUPluginUI::on_window_show (const string& /*title*/)
 
        show_all ();
 
+#ifdef WITH_CARBON
        if (carbon_window) {
                ShowWindow (carbon_window);
                ActivateWindow (carbon_window, TRUE);
        }
+#endif
 
        return true;
 }