[SCM] ardour3/master: Drop obsolete patch 90_ardour-x-change.patch

adiknoth-guest at users.alioth.debian.org adiknoth-guest at users.alioth.debian.org
Sat Sep 7 09:10:29 UTC 2013


The following commit has been merged in the master branch:
commit d5b4422ff1c129adecae30612399c7d956f2bb22
Author: Adrian Knoth <adi at drcomp.erfurt.thur.de>
Date:   Sat Sep 7 11:08:22 2013 +0200

    Drop obsolete patch 90_ardour-x-change.patch

diff --git a/debian/patches/90_ardour-x-change.patch b/debian/patches/90_ardour-x-change.patch
deleted file mode 100644
index cd18833..0000000
--- a/debian/patches/90_ardour-x-change.patch
+++ /dev/null
@@ -1,1875 +0,0 @@
---- a/gtk2_ardour/SConscript
-+++ b/gtk2_ardour/SConscript
-@@ -178,6 +178,7 @@
- imageframe_time_axis_group.cc
- imageframe_time_axis_view.cc
- imageframe_view.cc
-+import_helper_aaf.cc
- io_selector.cc
- keyboard.cc
- keyeditor.cc
---- /dev/null
-+++ b/gtk2_ardour/import_helper_aaf.cc
-@@ -0,0 +1,1389 @@
-+/*
-+    Copyright (C) 2005 Paul Davis
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program 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.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#include "i18n.h"
-+#include "ardour_ui.h"
-+#include "import_helper_aaf.h"
-+#include <errno.h>
-+#include <unistd.h>
-+#include <sys/wait.h>
-+#include <sys/stat.h>
-+
-+#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN)
-+#include <direct.h>
-+#else
-+#include <glib/gstdio.h>
-+#endif
-+
-+#include <ardour/ardour.h>
-+#include <pbd/error.h>
-+#include <pbd/failed_constructor.h>
-+
-+using namespace ARDOUR;
-+
-+bool AafImportHelper::already_instantiated = 0;
-+
-+AafImportHelper::AafImportHelper (bool use_native_importer /*= false */)
-+{
-+    // We don't want multiple instances all trying
-+    // to import an AAF file simultaneously.
-+    if (already_instantiated)
-+        throw failed_constructor();
-+    else
-+        already_instantiated = true;
-+
-+    if (use_native_importer)
-+    {
-+        // If the importer is native,
-+        // we can't be using Wine.
-+        importer_uses_wine = false;
-+        importer_is_native = true;
-+    }
-+    else
-+    {
-+        // Set both variables to 'true'. Since 'is_native'
-+        // and 'uses_wine' are mutually exclusive, setting
-+        // them both to 'true' is used to indicate that we
-+        // haven't yet initialized the AAF import helper.
-+        // 'initialize_for_aaf_import()' will set them
-+        // appropriately when it gets called, later.
-+        importer_uses_wine = true;
-+        importer_is_native = true;
-+    }
-+
-+    string spath;
-+    string shome = Glib::get_home_dir();
-+
-+    /* * * * * * * * * * * * * * * * * * * * * * * * * * * */
-+    /*                                                     */
-+    /* If you write an (external) plugin for importing AAF */
-+    /* files add its path to the list of possible importer */
-+    /* locations. New apps should be nearer to the top of  */
-+    /* the list. Each application can have more than one   */
-+    /* possible location path. The least likely locations  */
-+    /* should be nearer to the top of the list and moos    */
-+    /* likely locations should be nearer the bottom. The   */
-+    /* list should be terminated by an empty string.       */
-+    /*                                                     */
-+    /* * * * * * * * * * * * * * * * * * * * * * * * * * * */
-+    // Push any paths that are likely to contain an importer
-+    spath = shome + "/.cxoffice/default/drive_c/Program Files/ArdourXchange/ArdourXchange.exe";
-+    _aryPossibleImporterLocations.push_back(new string(spath));
-+    spath = shome + "/.wine/drive_c/Program Files/ArdourXchange/ArdourXchange.exe";
-+    _aryPossibleImporterLocations.push_back(new string(spath));
-+    spath = "/usr/lib/ardour-x-change/ArdourXchange.exe";
-+    _aryPossibleImporterLocations.push_back(new string(spath));
-+    spath = ""; // Terminate with an empty string
-+    _aryPossibleImporterLocations.push_back(new string(spath));
-+
-+    // Push any paths that are likely to contain the Wine executable
-+    spath = "/opt/cxoffice/bin/wine";
-+    _aryPossibleWineLocations.push_back(new string(spath));
-+    spath = "/usr/local/bin/wine";
-+    _aryPossibleWineLocations.push_back(new string(spath));
-+    spath = "/usr/bin/wine";
-+    _aryPossibleWineLocations.push_back(new string(spath));
-+    spath = ""; // Terminate with an empty string
-+    _aryPossibleWineLocations.push_back(new string(spath));
-+}
-+
-+AafImportHelper::~AafImportHelper ()
-+{
-+vector<string*>::iterator iter;
-+
-+    if (_aryPossibleImporterLocations.size())
-+        for (iter=_aryPossibleImporterLocations.begin(); iter < _aryPossibleImporterLocations.end(); iter++)
-+            if (*iter)
-+                delete *iter;
-+
-+    if (_aryPossibleWineLocations.size())
-+        for (iter=_aryPossibleWineLocations.begin(); iter < _aryPossibleWineLocations.end(); iter++)
-+            if (*iter)
-+                delete *iter;
-+
-+    already_instantiated = false;
-+}
-+
-+
-+//***************************************************************
-+//
-+//	is_native()
-+//
-+// Finds out whether a native (i.e. internal) AAF importer is in
-+// use or whether we're using an external plugin. Will initialize
-+// this helper if initialization isn't already completed.
-+//
-+//	Returns:
-+//
-+//    If the importer is internal: TRUE
-+//    If the importer is external: FALSE
-+//
-+bool
-+AafImportHelper::is_native (bool bSilent /*= false */)
-+{
-+    if (!is_initialized())
-+        get_user_path("AAF Importer", bSilent); // Carries out initialization
-+
-+    return (importer_is_native);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	needs_wine()
-+//
-+// Finds out whether the AAF importer is an external application
-+// that needs Wine (or cxMac) to be present. Will initialize
-+// this helper if initialization isn't already completed.
-+//
-+//	Returns:
-+//
-+//    If the importer needs Wine: TRUE
-+//    Otherwise:                  FALSE
-+//
-+bool
-+AafImportHelper::needs_wine (bool bSilent /*= false */)
-+{
-+    if (!is_initialized())
-+        get_user_path("AAF Importer", bSilent); // Carries out initialization
-+
-+    return (importer_uses_wine);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	create_symlink()
-+//
-+// ArdourXchange needs 3 x symbolic links to be in place at run
-+// time. This master function calls the appropriate helper func
-+// to create a link if it didn't exist when ArdourXchange gets
-+// run for the first time. The helper functions can be called
-+// explicitly if necessary (e.g. to change a given link and
-+// replace its target). Call this function if you prefer the
-+// helper functions to choose automatically from an appropriate
-+// set of default options. Currently supported entries are:-
-+//
-+// 'Wine'         - creates a link to wine (or cxMac etc).
-+// 'Session Base' - creates the 'base' folder for storing Ardour
-+//                  sessions.
-+// 'AAF Importer' - finds the AAF importer app and vreates a
-+//                  links to it.
-+//
-+// See the c'tor for AafImportHelper for a list of appropriate
-+// default path settings.
-+//
-+//	Returns:
-+//
-+//    The value returned from the called helper function or
-+//    AXERR_NOT_IMPLEMENTED if there's no matching helper func.
-+//
-+ax_error
-+AafImportHelper::create_symlink (const string& srequested_link, bool bReplaceExisting /*= false */, bool bSilent /*= false */)
-+{
-+ax_error axRet = AXERR_NONE;
-+
-+    if ("Wine" == srequested_link)
-+        axRet = create_link_to_wine(bReplaceExisting, bSilent);
-+    else if ("Session Base" == srequested_link)
-+        axRet = create_link_to_sessions(bReplaceExisting, bSilent);
-+    else if ("AAF Importer" == srequested_link)
-+        axRet = create_link_to_importer(bReplaceExisting, bSilent);
-+    else
-+    {
-+        axRet = AXERR_NOT_IMPLEMENTED;
-+
-+        if (!bSilent)
-+            error << _("AafImportHelper::create_symlink(): unsupported option") << endmsg;
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	create_link_to_importer()
-+//
-+// The AAF importer needs 3 x symbolic links to be in place at
-+// run time, one of which is a link to the AAF Import application
-+// itself. This function can be used to create a link to that
-+// application if the application exists but the link doesn't.
-+// When creating a link you can choose whether to overwrite (i.e.
-+// update) a previously existing link. You can also supply an
-+// explicit path for the import application in 'spath_to_importer'.
-+// If 'spath_to_importer' is empty, this function will try to
-+// find an import application based on an array of likely paths
-+// that were set up in this object's c'tor.
-+//
-+//
-+//	Returns:
-+//
-+//    If the link was successfully created
-+//    (or if a suitable link already existed): AXERR_NONE
-+//    On Failure: An appropriate ax_error
-+//
-+ax_error
-+AafImportHelper::create_link_to_importer (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_importer /*= "" */)
-+{
-+string spath_to_use = spath_to_importer;
-+ax_error axRet      = AXERR_NONE;
-+
-+    if ((0 == spath_to_use.length()) && (_aryPossibleImporterLocations.size()))
-+    {
-+        vector<string*>::iterator iter;
-+
-+        // If we weren't given a specific
-+        // path, try to find an importer
-+        for (iter=_aryPossibleImporterLocations.begin(); iter < _aryPossibleImporterLocations.end(); iter++)
-+        {
-+            if (*iter)
-+            {
-+                spath_to_use = ((string*)*iter)->c_str();
-+
-+                if (spath_to_use.length())
-+                    if (Glib::file_test(spath_to_use, Glib::FILE_TEST_EXISTS))
-+                        break;
-+            }
-+        }
-+    }
-+
-+    if (0 == spath_to_use.length())
-+    {
-+        axRet = AXERR_PROCESS_NOT_FOUND;
-+
-+        if (!bSilent)
-+            warning << _("AAF Importer could not be found") << endmsg;
-+    }
-+    else
-+    {
-+        string spath_to_symbolic_link = get_user_ardour_path();
-+        spath_to_symbolic_link += "AAF Importer";
-+
-+        // Test to see if the symbolic link already exists
-+        bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS);
-+
-+        if ((!bFound) || (bReplaceExisting))
-+        {
-+            // If the symbolic link already exists but we've
-+            // been told to replace it, delete the existing link.
-+            if (bFound)
-+                if (0 != remove(spath_to_symbolic_link.c_str()))
-+                {
-+                    axRet = AXERR_INVALID_ACCESS;
-+
-+                    if (!bSilent)
-+                        error << _("Deletion error while making a symbolic link") << endmsg;
-+                }
-+
-+            if (AXERR_NONE == axRet)
-+            {
-+                // symlink() will fail if the symbolic link's path doesn't already exist.
-+                if ((axRet = create_path_folders(get_user_ardour_path().c_str())) == AXERR_NONE)
-+                {
-+                    if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str()))
-+                    {
-+                        axRet = AXERR_INVALID_ACCESS;
-+
-+                        if (!bSilent)
-+                            error << _("Creation error while making a symbolic link") << endmsg;
-+                    }
-+                }
-+                else if (!bSilent)
-+                    error << _("Access error while making a symbolic link") << endmsg;
-+            }
-+        }
-+        else if ((bFound) && (!bReplaceExisting))
-+        {
-+            int len;
-+
-+            // See if the link already points to the reqested destination
-+            if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0)
-+            {
-+                // Add a NUL terminator
-+                temp_path[len] = 0;
-+
-+                if (spath_to_use == temp_path);
-+                    // Do nothing here. Assume that it's okay to have a
-+                    // pre-existing link if we were told not to replace.
-+                else
-+                {
-+                    axRet = AXERR_DESTINATION_ERROR;
-+
-+                    if (!bSilent)
-+                        error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg;
-+
-+                }
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	create_link_to_sessions()
-+//
-+// The AAF importer needs 3 x symbolic links to be in place at
-+// run time, one of which is a link to the 'base' folder that
-+// will be used for storing the user's Ardour sessions. This
-+// function can be used to create that folder (and create a
-+// suitable link to it) if the folder or link don't already
-+// exist. When creating the link you can choose whether to
-+// update (i.e. overwrite) a previously existing link. You can
-+// supply an explicit path for the folder in 'spath_to_sessions'.
-+// If 'spath_to_sessions' is empty, this function will try to
-+// create a default folder called "Ardour Sessions" inside the
-+// user's home folder.
-+//
-+//
-+//	Returns:
-+//
-+//    If the link was successfully created
-+//    (or if a suitable link already existed): AXERR_NONE
-+//    On Failure: An appropriate ax_error
-+//
-+ax_error
-+AafImportHelper::create_link_to_sessions (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_sessions /*= "" */)
-+{
-+string spath_to_use = spath_to_sessions;
-+string shome        = Glib::get_home_dir();
-+ax_error axRet      = AXERR_NONE;
-+
-+    if (0 == spath_to_use.length())
-+        spath_to_use = shome + "/Ardour Sessions";
-+    else
-+    {
-+        // Symbolic links don't like terminating forward slashes
-+        size_t ilen = spath_to_use.length();
-+
-+        while ((ilen) && ('/' == spath_to_use[ilen-1]))
-+        {
-+            spath_to_use[--ilen] = 0;
-+        }
-+    }
-+
-+    if (0 == spath_to_use.length())
-+    {
-+        axRet = AXERR_DESTINATION_ERROR;
-+
-+#if !defined(DEBUG) && !defined(_DEBUG)
-+        if (!bSilent)
-+#endif
-+            error << _("(AafImportHelper) Invalid target supplied for Session Base folder") << endmsg;
-+    }
-+    else
-+    {
-+        string spath_to_symbolic_link = get_user_ardour_path();
-+        spath_to_symbolic_link += "Ardour Sessions";
-+
-+        // Test to see if the symbolic link already exists
-+        bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS);
-+
-+        if ((!bFound) || (bReplaceExisting))
-+        {
-+            // Firstly, check to see if the destination target
-+            // already exists. If it does, it MUST be a folder.
-+            if (Glib::file_test(spath_to_use.c_str(), Glib::FILE_TEST_EXISTS))
-+            {
-+                if (!Glib::file_test(spath_to_use.c_str(), Glib::FILE_TEST_IS_DIR))
-+                {
-+                    axRet = AXERR_DESTINATION_ERROR;
-+
-+#if !defined(DEBUG) && !defined(_DEBUG)
-+                    if (!bSilent)
-+#endif
-+                        error << _("(AafImportHelper) Invalid target supplied for Session Base folder") << endmsg;
-+                }
-+            }
-+            else
-+            {
-+               if ((axRet = create_path_folders(spath_to_use.c_str())) != AXERR_NONE)
-+#if !defined(DEBUG) && !defined(_DEBUG)
-+                    if (!bSilent)
-+#endif
-+                        error << _("Access error while creating the Session Base folder") << endmsg;
-+            }
-+
-+            // The target now exists and is guaranteed to be a folder. Now, if the symbolic
-+            // link already exists but we've been told to replace it, delete the existing link.
-+            if ((bFound) && (AXERR_NONE == axRet))
-+                if (0 != remove(spath_to_symbolic_link.c_str()))
-+                {
-+                    axRet = AXERR_INVALID_ACCESS;
-+
-+                    if (!bSilent)
-+                        error << _("Deletion error while making a symbolic link") << endmsg;
-+                }
-+
-+            if (AXERR_NONE == axRet)
-+            {
-+                // symlink() will fail if the symbolic link's path doesn't already exist.
-+                if ((axRet = create_path_folders(get_user_ardour_path().c_str())) == AXERR_NONE)
-+                {
-+                    if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str()))
-+                    {
-+                        axRet = AXERR_INVALID_ACCESS;
-+
-+                        if (!bSilent)
-+                            error << _("Creation error while making a symbolic link") << endmsg;
-+                    }
-+                }
-+                else if (!bSilent)
-+                    error << _("Access error while making a symbolic link") << endmsg;
-+            }
-+        }
-+        else if ((bFound) && (!bReplaceExisting))
-+        {
-+            int len;
-+
-+            // See if the link already points to the reqested destination
-+            if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0)
-+            {
-+                // Add a NUL terminator
-+                temp_path[len] = 0;
-+
-+                if (spath_to_use == temp_path);
-+                    // Do nothing here. Assume that it's okay to have a
-+                    // pre-existing link if we were told not to replace.
-+                else
-+                {
-+                    axRet = AXERR_DESTINATION_ERROR;
-+
-+                    if (!bSilent)
-+                        error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg;
-+
-+                }
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	create_link_to_wine()
-+//
-+// The AAF importer needs 3 x symbolic links to be in place at
-+// run time, one of which is a link to the Wine utility (or cxMac
-+// or cxLinux utility). This function can be used to create a link
-+// to that utility if the utility exists but the link doesn't.
-+// When creating a link you can choose whether to overwrite (i.e.
-+// update) a previously existing link. You can also supply an
-+// explicit path for the utility you wish to use in 'spath_to_wine'.
-+// If 'spath_to_wine' is empty, this function will try to find a
-+// suitable utility based on an array of likely paths that were set
-+// up in this object's c'tor.
-+//
-+//
-+//	Returns:
-+//
-+//    If the link was successfully created
-+//    (or if a suitable link already existed): AXERR_NONE
-+//    On Failure: An appropriate ax_error
-+//
-+ax_error
-+AafImportHelper::create_link_to_wine (bool bReplaceExisting /*= false */, bool bSilent /*= false */, const string& spath_to_wine /*= "" */)
-+{
-+string spath_to_use = spath_to_wine;
-+ax_error axRet      = AXERR_NONE;
-+
-+    if ((0 == spath_to_use.length()) && (_aryPossibleWineLocations.size()))
-+    {
-+        vector<string*>::iterator iter;
-+
-+        // If we weren't given a specific
-+        // path for Wine, try to find it.
-+        for (iter=_aryPossibleWineLocations.begin(); iter < _aryPossibleWineLocations.end(); iter++)
-+        {
-+            if (*iter)
-+            {
-+                spath_to_use = ((string*)*iter)->c_str();
-+
-+                if (spath_to_use.length())
-+                    if (Glib::file_test(spath_to_use, Glib::FILE_TEST_EXISTS))
-+                        break;
-+            }
-+        }
-+    }
-+
-+    if (0 == spath_to_use.length())
-+    {
-+        axRet = AXERR_PROCESS_NOT_FOUND;
-+
-+        if (!bSilent)
-+            warning << _("Wine (or equivalent) could not be found") << endmsg;
-+    }
-+    else
-+    {
-+        string shome = Glib::get_home_dir();
-+        string spath_to_symbolic_link = shome + "/.Wine";
-+
-+        // Test to see if the symbolic link already exists
-+        bool bFound = Glib::file_test(spath_to_symbolic_link.c_str(), Glib::FILE_TEST_EXISTS);
-+
-+        if ((!bFound) || (bReplaceExisting))
-+        {
-+            // If the symbolic link already exists but we've
-+            // been told to replace it, delete the existing link.
-+            if (bFound)
-+                if (0 != remove(spath_to_symbolic_link.c_str()))
-+                {
-+                    axRet = AXERR_INVALID_ACCESS;
-+
-+                    if (!bSilent)
-+                        error << _("Deletion error while making a symbolic link") << endmsg;
-+                }
-+
-+            if (AXERR_NONE == axRet)
-+            {
-+                // It's very unlikely that the user's home folder wouldn't exist but we need to be
-+                // certain. symlink() will fail if the symbolic link's path doesn't already exist.
-+                if ((axRet = create_path_folders(shome.c_str())) == AXERR_NONE)
-+                {
-+                    if (0 != symlink(spath_to_use.c_str(), spath_to_symbolic_link.c_str()))
-+                    {
-+                        axRet = AXERR_INVALID_ACCESS;
-+
-+                        if (!bSilent)
-+                            error << _("Creation error while making a symbolic link") << endmsg;
-+                    }
-+                }
-+                else if (!bSilent)
-+                    error << _("Access error while making a symbolic link") << endmsg;
-+            }
-+        }
-+        else if ((bFound) && (!bReplaceExisting))
-+        {
-+            int len;
-+
-+            // See if the link already points to the reqested destination
-+            if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) > 0)
-+            {
-+                // Add a NUL terminator
-+                temp_path[len] = 0;
-+
-+                if (spath_to_use == temp_path);
-+                    // Do nothing here. Assume that it's okay to have a
-+                    // pre-existing link if we were told not to replace.
-+                else
-+                {
-+                    axRet = AXERR_DESTINATION_ERROR;
-+
-+                    if (!bSilent)
-+                        error << _("Cannot create symbolic link (an incompatible link already exists)") << endmsg;
-+
-+                }
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	get_user_path()
-+//
-+// Obtains (where appropriate) a path to certain components that
-+// might be needed before we can carry out an AAF import. Will
-+// initialize this helper if initialization isn't already
-+// completed. Pass in a string which identifies the file or path
-+// that you want to identify. Currently supported entries are:-
-+//
-+// 'AAF Importer' - returns a path to the importer app
-+// 'Wine'         - returns the path to Wine, cxLinux or cxMac.
-+// 'Session Base' - returns the 'base' path for storing Ardour
-+//                  sessions.
-+//
-+// Note that if the file or path is successfully identified, this
-+// doesn't necessarily mean that it actually exists !
-+//
-+//	Returns:
-+//
-+//    If there was no relevant path
-+//    (e.g. the importer is native):        An empty string.
-+//    If the path couldn't be identified:   An empty string.
-+//    If the requested path was identified: A string containing
-+//                                          the path.
-+//
-+string
-+AafImportHelper::get_user_path (const string& srequested_path, bool bSilent /*= false */)
-+{
-+string   junk, sRet;
-+ax_error axRet = AXERR_NONE;
-+
-+    if (!is_initialized())
-+        axRet = initialize_for_aaf_import(importer_is_native, importer_uses_wine, &junk, NULL, NULL, NULL, bSilent);
-+
-+    if (AXERR_NONE == axRet)
-+    {
-+        if ("AAF Importer" == srequested_path)
-+            axRet = get_path_to_importer(sRet, bSilent);
-+        else if ("Wine" == srequested_path)
-+            axRet = get_path_to_wine(sRet, bSilent);
-+        else if ("Session Base" == srequested_path)
-+            axRet = get_path_to_sessions(sRet, bSilent);
-+        else
-+        {
-+            axRet = AXERR_NOT_IMPLEMENTED;
-+
-+            if (!bSilent)
-+                error << _("AafImportHelper::get_user_path(): unsupported option") << endmsg;
-+        }
-+    }
-+
-+    if (AXERR_NONE != axRet)
-+        sRet = "";
-+
-+    return (sRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	get_path_to_importer()
-+//
-+// Opens the 'Paths' config file (if available) and reads in the
-+// path for the AAF importer. If no 'Paths' file was found, it
-+// attempts to locate a symbolic link to the importer and then
-+// translates the symbolic link. The found path is returned in
-+// 'sfound_path'. An empty string is returned if the path could
-+// not be identified (or if an internal importer is specified).
-+// If 'bSilent' is false, displays an error message to the user
-+// if any error gets detected.
-+//
-+// This function will attempt to create a suitable symbolic link
-+// if a pre-existing one couldn't be found.
-+//
-+//	Returns:
-+//
-+//    On Success: AXERR_NONE
-+//    On Failure: AXERR_DESTINATION_ERROR
-+//
-+ax_error
-+AafImportHelper::get_path_to_importer (string& sfound_path, bool bSilent /*= false */)
-+{
-+ax_error axRet = AXERR_NONE;
-+
-+    if ((importer_is_native) && (!importer_uses_wine))
-+        sfound_path = "";
-+    else
-+    {
-+        sfound_path = "";
-+
-+        int  len;
-+        bool bPathFound = false; // TODO: Read this path from the 'Paths' file
-+
-+        if (!bPathFound)
-+        {
-+            string spath_to_symbolic_link = get_user_ardour_path();
-+            spath_to_symbolic_link += "AAF Importer";
-+
-+            if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0)
-+            {
-+                // Add a NUL terminator
-+                temp_path[len] = 0;
-+                sfound_path = temp_path;
-+            }
-+            else
-+            {
-+                // We couldn't find a symbolic link for the
-+                // AAF Import application. Try to create one.
-+                if (AXERR_NONE == create_symlink("AAF Importer", false, bSilent))
-+                    axRet = get_path_to_importer(sfound_path, bSilent);
-+                else
-+                    axRet = AXERR_DESTINATION_ERROR;
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	get_path_to_sessions()
-+//
-+// Opens the 'Paths' config file (if available) and reads in the
-+// user's preferred base path for saving Ardour sessions. If no
-+// 'Paths' file was found, it attempts to locate a symbolic link
-+// called "Ardour Sessions" and translates the symbolic link. The
-+// found path is returned in 'sfound_path'. An empty string is
-+// returned if the path could not be identified. If 'bSilent' is
-+// false, displays an error message to the user if any error
-+// gets detected.
-+//
-+// This function will attempt to create a suitable symbolic link
-+// if a pre-existing one couldn't be found. However, it will only
-+// attempt to create the link if an AAF import application is
-+// already installed on the user's system.
-+//
-+//	Returns:
-+//
-+//    On Success: AXERR_NONE
-+//    On Failure: AXERR_DESTINATION_ERROR
-+//
-+ax_error
-+AafImportHelper::get_path_to_sessions (string& sfound_path, bool bSilent /*= false */)
-+{
-+int len;
-+ax_error axRet = AXERR_NONE;
-+
-+    bool bPathFound = false; // TODO: Read this path from the 'Paths' file
-+
-+    sfound_path = "";
-+
-+    if (!bPathFound)
-+    {
-+        string spath_to_symbolic_link = get_user_ardour_path();
-+        spath_to_symbolic_link += "Ardour Sessions";
-+
-+        if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0)
-+        {
-+            // Add a NUL terminator
-+            temp_path[len] = 0;
-+            sfound_path = temp_path;
-+        }
-+        else
-+        {
-+           string junk;
-+
-+            // We couldn't find a symbolic link for the user's session path.
-+            // Assuming that an AAF Import app is present, try to create one.
-+            if (AXERR_NONE == get_path_to_importer(junk, true))
-+            {
-+                if (AXERR_NONE == create_symlink("Session Base", false, bSilent))
-+                    axRet = get_path_to_sessions(sfound_path, bSilent);
-+                else
-+                    axRet = AXERR_DESTINATION_ERROR;
-+            }
-+            else
-+            {
-+                axRet = AXERR_DESTINATION_ERROR;
-+
-+                if (!bSilent)
-+                    warning << _("Symbolic link failure (could not detect an AAF importer app)") << endmsg;
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	get_path_to_wine()
-+//
-+// Opens the 'Paths' config file (if available) and reads in the
-+// location of Wine (or cxLinux or cxMac) on the user's system.
-+// If no 'Paths' file was found, it attempts to locate a symbolic
-+// link called "Wine" and translates the symbolic link. The found
-+// path is returned in 'sfound_path' (regardless of whether or not
-+// Wine is actually needed). An empty string is returned if the
-+// path could not be identified. If 'bSilent' is false, displays
-+// an error message to the user if any error occurred.
-+//
-+// This function will attempt to create a suitable symbolic link
-+// if a pre-existing one couldn't be found. However, it will only
-+// attempt to create the link if an AAF import application is
-+// already installed on the user's system.
-+//
-+//	Returns:
-+//
-+//    On Success: AXERR_NONE
-+//    On Failure: AXERR_DESTINATION_ERROR
-+//
-+ax_error
-+AafImportHelper::get_path_to_wine (string& sfound_path, bool bSilent /*= false */)
-+{
-+int len;
-+ax_error axRet = AXERR_NONE;
-+
-+    bool bPathFound = false; // TODO: Read this path from the 'Paths' file
-+
-+    sfound_path = "";
-+
-+    if (!bPathFound)
-+    {
-+        string shome = Glib::get_home_dir();
-+        string spath_to_symbolic_link = shome + "/.Wine";
-+
-+        if ((len = readlink(spath_to_symbolic_link.c_str(), temp_path, PATH_MAX)) >= 0)
-+        {
-+            // Add a NUL terminator
-+            temp_path[len] = 0;
-+            sfound_path = temp_path;
-+        }
-+        else
-+        {
-+            string junk;
-+
-+            // We couldn't find a symbolic link for Wine. Assuming that
-+            // an AAF Import app is present, try to create a link to Wine.
-+            if (AXERR_NONE == get_path_to_importer(junk, true))
-+            {
-+                if (AXERR_NONE == create_symlink("Wine", false, bSilent))
-+                    axRet = get_path_to_wine(sfound_path, bSilent);
-+                else
-+                    axRet = AXERR_DESTINATION_ERROR;
-+            }
-+            else
-+            {
-+                axRet = AXERR_DESTINATION_ERROR;
-+
-+                if (!bSilent)
-+                    warning << _("Symbolic link failure (could not detect an AAF importer app)") << endmsg;
-+            }
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	initialize_for_aaf_import()
-+//
-+// Calls the various 'get_path_to' functions to obtain any paths
-+// that will be needed for importing an AAF file (e.g. the path
-+// to the import plugin and the base path for converted sessions).
-+// The base path is MANDATORY since no import process can take
-+// place if the importer doesn't know where to dump the imported
-+// sessions. AXERR_NOT_INITIALIZED will be issued if you pass a
-+// NUL pointer to 'ppath_to_ardour_sessions'. The other paths
-+// are optional. 'ppath_to_importer' returns an empty string if
-+// the importer is internal. 'initialize_for_aaf_import()' will
-+// optionally return (a) the user's preferred color scheme;
-+// (b) whether or not he importer needs Wine, and (c) whether
-+// the importer is native or external. If 'bSilent' is false, we
-+// display an error message to the user if any error got detected.
-+//
-+//	Returns:
-+//
-+//    On Success: AXERR_NONE
-+//    On Failure: An appropriate ax_error
-+//
-+ax_error
-+AafImportHelper::initialize_for_aaf_import (bool& is_native, bool& use_wine, string* ppath_to_ardour_sessions,
-+                    string* ppath_to_importer /*= NULL */, string* ppath_to_wine /*= NULL */,
-+                    string* ppreferred_color_scheme /*= NULL*/, bool bSilent /*= false */)
-+{
-+ax_error axRet = AXERR_NOT_INITIALIZED;
-+
-+    if (ppath_to_importer || ppath_to_wine || ppath_to_ardour_sessions)
-+    {
-+        string spath_to_importer;
-+        axRet = AXERR_NONE;
-+
-+        // Determine the current color scheme
-+        if (ppreferred_color_scheme)
-+        {
-+            string sardour_theme = ARDOUR_UI::config()->ui_rc_file.get();
-+
-+            if (string::npos != sardour_theme.find("ui_dark"))
-+                *ppreferred_color_scheme = "dark";
-+            else // assume a light theme
-+                *ppreferred_color_scheme = "light";
-+        }
-+
-+        // Always find a path to the importer since we
-+        // can't set 'is_native' or 'use_wine' without it
-+        if ((axRet = get_path_to_importer(spath_to_importer, bSilent)) != AXERR_NONE)
-+        {
-+            is_native = importer_is_native = false;
-+            axRet = AXERR_NOT_INITIALIZED;
-+        }
-+        else
-+        {
-+            if (0 == spath_to_importer.length())
-+            {
-+                // No external importer was found. If we're still
-+                // uninitialized, assume we want an internal importer.
-+                if ((importer_is_native) && (importer_uses_wine))
-+                {
-+                    is_native = importer_is_native = true;
-+                    use_wine  = importer_uses_wine = false;
-+                }
-+            }
-+            else
-+            {
-+                // The importer seems to be an external plugin. If
-+                // we haven't been told explicitly to use a native
-+                // importer, find out whether or not it needs Wine
-+                if ((importer_is_native) && (!importer_uses_wine))
-+                {
-+                    // We've got a problem. An internal (native) AAF importer was
-+                    // requested - but the only one we could find was external.
-+                    axRet = AXERR_INTERNAL_ERROR;
-+
-+                    if (!bSilent)
-+                        error << _("An internal error occurred while locating the AAF importer") << endmsg;
-+                }
-+                else
-+                {
-+                    is_native = importer_is_native = false;
-+
-+                    size_t ilen = spath_to_importer.length();
-+                    size_t ipos = spath_to_importer.rfind(".exe");
-+
-+                    if (ipos == string::npos)
-+                        ipos = spath_to_importer.rfind(".EXE");
-+
-+                    // Assume that Wine is needed if the importer ends in ".exe"
-+                    if ((ilen > 4) && (ipos == (ilen-4)))
-+                        use_wine = importer_uses_wine = true;
-+                    else
-+                        use_wine = importer_uses_wine = false;
-+                }
-+            }
-+
-+            if ((ppath_to_importer) && (!is_native))
-+            {
-+                *ppath_to_importer = spath_to_importer;
-+
-+                if (!axRet)
-+                {
-+                    if (ppath_to_importer->length())
-+                    {
-+                        // Find out if the import processor exists
-+                        axRet = Glib::file_test(*ppath_to_importer, Glib::FILE_TEST_EXISTS) ? AXERR_NONE : AXERR_PROCESS_NOT_FOUND;
-+                        if ((AXERR_PROCESS_NOT_FOUND == axRet) && (!bSilent))
-+                           error << _("AAF import processor could not be found") << endmsg;
-+                    }
-+                    else
-+                        axRet = AXERR_NOT_INITIALIZED;
-+                }
-+            }
-+            else if (is_native)
-+            {
-+                if (ppath_to_importer)
-+                    *ppath_to_importer = "";
-+            }
-+
-+            if ((ppath_to_wine) && (!axRet))
-+            {
-+                axRet = get_path_to_wine(*ppath_to_wine, bSilent);
-+
-+                if (!axRet)
-+                {
-+                    if (ppath_to_wine->length())
-+                    {
-+                        // Find out if 'wine' exists
-+                        axRet = Glib::file_test(*ppath_to_wine, Glib::FILE_TEST_EXISTS) ? AXERR_NONE : AXERR_WINE_NOT_FOUND;
-+                        if ((AXERR_WINE_NOT_FOUND == axRet) && (!bSilent))
-+                           error << _("Wine could not be found on this system") << endmsg;
-+                    }
-+                    else
-+                        axRet = AXERR_NOT_INITIALIZED;
-+                }
-+                else
-+                    axRet = AXERR_NOT_INITIALIZED;
-+            }
-+
-+            if ((ppath_to_ardour_sessions) && (!axRet))
-+            {
-+                get_path_to_sessions(*ppath_to_ardour_sessions, bSilent);
-+
-+                int len = ppath_to_ardour_sessions->length();
-+
-+                if (len)
-+                {
-+                    // Now make sure that the path is
-+                    // terminated by a forward slash.
-+                    if ('/' != (*ppath_to_ardour_sessions)[len-1])
-+                        *ppath_to_ardour_sessions += "/";
-+
-+                    // Simply check that the path starts with a forward slash
-+                    if ('/' != (*ppath_to_ardour_sessions)[0])
-+                        axRet = AXERR_DESTINATION_ERROR;
-+
-+                    if ((AXERR_DESTINATION_ERROR == axRet) && (!bSilent))
-+                    {
-+                        error << _("The target path for your imported sessions is not a valid path") << endmsg;
-+                        error << _("Unable to initialize the AAF importer") << endmsg;
-+                    }
-+                }
-+                else
-+                {
-+                    axRet = AXERR_DESTINATION_ERROR;
-+
-+                    if (!bSilent)
-+                    {
-+                        error << _("Could not locate the target path for your imported sessions") << endmsg;
-+                        error << _("Unable to initialize the AAF importer") << endmsg;
-+                    }
-+                }
-+            }
-+            else if (!axRet)
-+                axRet = AXERR_NOT_INITIALIZED;
-+        }
-+    }
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	import_from_aaf()
-+//
-+// This function identifies the AAF import process (if an import
-+// process exists) and instructs it to import the file specified
-+// by 'sfile_to_import'. If the import operation was successful,
-+// 'spath_to_new_project' should contain the path to the imported
-+// ".ardour" session.
-+//
-+//	Returns:
-+//
-+//    On Success: The (converted) exit code returned by the
-+//                AAF importer
-+//    On Failure: An (internally generated) ax_error
-+//
-+ax_error
-+AafImportHelper::import_from_aaf (const string& sfile_to_import, string& spath_to_new_project)
-+{
-+ax_error axRet = AXERR_SOURCE_ERROR;
-+
-+    // Make sure that the file to
-+    // be imported ends in ".aaf"
-+    size_t ilen = sfile_to_import.length();
-+    size_t ipos = sfile_to_import.rfind(".aaf");
-+
-+    if (ipos == string::npos)
-+        ipos = sfile_to_import.rfind(".AAF");
-+
-+    if ((ilen > 4) && (ipos == (ilen-4)))
-+    {
-+        string  spreferred_color_scheme,
-+                spath_to_importer,
-+                spath_to_wine,
-+                spath_for_ardour_sessions;
-+        bool    importer_is_native,
-+                use_wine;
-+
-+        axRet = initialize_for_aaf_import(importer_is_native, use_wine, &spath_for_ardour_sessions,
-+                        &spath_to_importer, &spath_to_wine, &spreferred_color_scheme);
-+
-+        if (AXERR_NONE == axRet)
-+        {
-+            if (importer_is_native)
-+            {
-+                axRet = AXERR_NOT_IMPLEMENTED;
-+            }
-+            else if (use_wine)
-+            {
-+                char tmpBuf[1024], tmpBuf2[1024];
-+
-+                // Find the last forward slash in our source file
-+                if (string::npos == (ipos = sfile_to_import.rfind("/")))
-+                    strcpy(tmpBuf, sfile_to_import.c_str());
-+                else
-+                    strcpy(tmpBuf, &sfile_to_import[ipos+1]);
-+
-+                // By this point, 'tmpBuf' should contain at least 5 characters
-+                tmpBuf[strlen(tmpBuf)-4] = 0;
-+
-+                // 'tmpBuf' now contains the name of the AAF file
-+                std::string aaf_name = tmpBuf;
-+
-+                // Use 'tmpBuf2' to build a path for the ardour session
-+                sprintf(tmpBuf2, "z:%s%s/%s.ardour", spath_for_ardour_sessions.c_str(), aaf_name.c_str(), aaf_name.c_str());
-+
-+                // and use 'tmpBuf' to build a path for the input file
-+                sprintf(tmpBuf, "z:%s", sfile_to_import.c_str());
-+
-+                // Obtain a flag for the color scheme
-+                spreferred_color_scheme = attribute_to_flag(spath_to_importer, spreferred_color_scheme);
-+
-+                // We now have enough information to spawn the child prpcess
-+                int nRet; char cRet;
-+                pid_t pidChild = fork();
-+
-+                if (0 == pidChild)
-+                {
-+                    // We're running in the child process. Use exec()
-+                    // to replace the child process's excutable
-+                    execl (spath_to_wine.c_str(), "wine", spath_to_importer.c_str(), tmpBuf, tmpBuf2, spreferred_color_scheme.c_str(), NULL);
-+                }
-+                else if (pidChild != (-1))
-+                {
-+                    // We're running in parent process. Just
-+                    // wait for the child process to terminate
-+                    waitpid(pidChild, &nRet, 0); // waitpid() returns (qualified) status information in 'nRet'
-+                    cRet = (char)WEXITSTATUS(nRet);
-+                    nRet = cRet; // 'nRet' now equals the ACTUAL status value returned by the AAF importer
-+
-+                    spath_to_new_project = &tmpBuf2[2];
-+
-+                    return (assign_exit_status(spath_to_importer, nRet));
-+                }
-+                else
-+                {
-+                    // fork()/exec() failed. Consider
-+                    // this to be a terminal failure.
-+                    axRet = AXERR_PROCESS_FAILURE;
-+                }
-+            }
-+            else
-+            {
-+                axRet = AXERR_NOT_IMPLEMENTED;
-+            }
-+        }
-+    }
-+
-+    if (AXERR_PROCESS_FAILURE == axRet) // fork()/exec() failed. This is terminal
-+        fatal << _("A fatal error occurred while launching the AAF importer") << endmsg;
-+
-+    if (AXERR_SOURCE_ERROR == axRet)
-+        error << _("The selected source file is not a valid AAF file") << endmsg;
-+
-+    if (AXERR_NOT_INITIALIZED == axRet)
-+        error << _("Unable to initialize the AAF importer") << endmsg;
-+
-+    return (axRet);
-+}
-+
-+
-+//***************************************************************
-+//
-+//	create_path_folders()
-+//
-+// If a symbolic link needs to be created, this function ensures
-+// that all folders leading to the symlink are present.
-+//
-+//	Returns:
-+//
-+//    On success: AXERR_NONE
-+//    On Failure: An appropriate ax_error
-+//
-+ax_error
-+AafImportHelper::create_path_folders(const char *pRequestedPath)
-+{
-+char ch, *tmpPath  = NULL;
-+bool rootfound = false;
-+
-+#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN)
-+char separator = '\\';
-+#else
-+char separator = '/';
-+#endif
-+
-+   /* Note that this function shouldn't be used to create
-+	* a root drive or folder. Also, don't be tempted to
-+	* use 'g_mkdir_with_parents()' either because it
-+	* didn't become available until Glib v2.8, which is
-+	* higher than the base requirement for Ardour.
-+	*/
-+	if (int length = strlen(pRequestedPath))
-+    {
-+		tmpPath = new char[length+2];
-+		strcpy(tmpPath, pRequestedPath);
-+
-+		// Add a trailing separator, if there isn't one
-+		if (pRequestedPath[length-1] != separator)
-+		{
-+			strncpy(&tmpPath[length], &separator, 1);
-+			strncpy(&tmpPath[length+1], "\0", 1);
-+
-+			// Increment 'length'
-+			length += 1;
-+		}
-+
-+		// Locate the SECOND separator
-+		char* iter = tmpPath;
-+		while (strlen(iter))
-+		{
-+			ch = *iter;
-+			if ((ch == separator) && (rootfound))
-+			{
-+				// Replace it with a zero
-+				*iter = '\0';
-+
-+				// and make the first directory
-+				if (strlen(tmpPath))
-+#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN)
-+					if (0 != _mkdir(tmpPath))
-+#else
-+					if (0 != g_mkdir(tmpPath, (S_IRWXU | S_IRWXG | S_IRWXO)))
-+#endif
-+					{
-+                        if (EEXIST != errno)
-+                        {
-+                            delete[] tmpPath;
-+                            return (AXERR_PROCESS_FAILURE);
-+                        }
-+					}
-+
-+				// Now put the separator back
-+				*iter = separator;
-+
-+				// and move to the next character
-+				++iter;
-+
-+				break;
-+			}
-+			else if (ch == separator)
-+				rootfound = true;
-+
-+			iter++;
-+		}
-+
-+		// Now create the remaining directories
-+		while (strlen(iter))
-+		{
-+			ch = *iter;
-+			if (ch == separator)
-+			{
-+				// Replace it with a zero
-+				*iter = '\0';
-+
-+				// make the directory
-+				if (strlen(tmpPath))
-+#if defined (PORT_SYS_WINDOWS) && !defined(PORT_SYS_CYGWIN)
-+					if (0 != _mkdir(tmpPath))
-+#else
-+					if (0 != g_mkdir(tmpPath, (S_IRWXU | S_IRWXG | S_IRWXO)))
-+#endif
-+					{
-+                        if (EEXIST != errno)
-+                        {
-+                            delete[] tmpPath;
-+                            return (AXERR_PROCESS_FAILURE);
-+                        }
-+					}
-+
-+				// Now put the separator back
-+				*iter = separator;
-+			}
-+
-+			// move to the next character
-+			++iter;
-+		}
-+	}
-+
-+	delete[] tmpPath;
-+
-+	return (AXERR_NONE);
-+}
-+
-+
-+/***************************************************************
-+*                                                              *
-+* These functions are useful when we need to interface with an *
-+* external helper app (e.g. when we need to import audio from  *
-+* an unsupported session format such as OMF or AAF).           *
-+*                                                              *
-+****************************************************************/
-+//
-+//	attribute_to_flag()
-+//
-+// Internally, common flags may be used for specific program
-+// conditions (such as "light" or "dark" to indicate the user's
-+// preferred color scheme). This function converts any such
-+// internal flags to a format that might be applicable to an
-+// external process. For example, the string "overwrite" could
-+// be used internally as an indication that an external app
-+// should overwrite older versions of a file. App X might need
-+// this to be sent as "/O" whereas App Y might require "-o".
-+// Use this function to convert internal flags to external ones.
-+//
-+//	Returns:
-+//
-+//    On Success: A string representing the appropriate flag
-+//    On Failure: An empty string
-+//
-+string
-+AafImportHelper::attribute_to_flag (string s_application, string s_attribute)
-+{
-+string sFlag;
-+
-+    // Are we dealing with ArdourXchange ?
-+    if (string::npos != s_application.find("ArdourXchange.exe"))
-+    {
-+        // Attributes supported by ArdourXchange
-+        if (s_attribute == "dark")
-+            sFlag = "-D";
-+        else if (s_attribute == "light")
-+            sFlag = "-L";
-+    }
-+    else if (string::npos != s_application.find("put your application name here"))
-+    {
-+       // Attributes supported by the next app
-+    }
-+
-+    return (sFlag);
-+}
-+
-+//***************************************************************
-+//
-+//	assign_exit_status()
-+//
-+// If an external helper app is capable of returning a status
-+// code, the returned status code can be converted to the nearest
-+// equivalent ax_error. Pass in the relevant code and a string
-+// identifying the application.
-+//
-+//	Returns:
-+//
-+//    On Success: An appropriate ax_error
-+//    On Failure: AXERR_UNKNOWN
-+//
-+ax_error
-+AafImportHelper::assign_exit_status (string s_application, int exit_code)
-+{
-+ax_error exit_status = AXERR_UNKNOWN;
-+
-+    // Are we dealing with ArdourXchange ?
-+    if (string::npos != s_application.find("ArdourXchange.exe"))
-+    {
-+        // Exit codes supported by ArdourXchange
-+        switch (exit_code) {
-+            case -2: exit_status = AXERR_NOT_INITIALIZED;
-+                break;
-+            case -1: exit_status = AXERR_FATAL_EXCEPTION;
-+                break;
-+            case 0:  exit_status = AXERR_NONE;
-+                break;
-+            case 1:  exit_status = AXERR_USER_ABORTED;
-+                break;
-+            case 2:  exit_status = AXERR_MEDIA_NOT_FOUND;
-+                break;
-+        }
-+    }
-+    else if (string::npos != s_application.find("put your application name here"))
-+    {
-+       // Exit codes supported by the next app
-+    }
-+
-+    return (exit_status);
-+}
-+
-+
-+/***************************************************************
-+*                                                              *
-+****************************************************************/
---- /dev/null
-+++ b/gtk2_ardour/import_helper_aaf.h
-@@ -0,0 +1,81 @@
-+/*
-+    Copyright (C) 2005 Paul Davis
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program 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.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+// -*- c++ -*-
-+
-+#ifndef IMPORT_HELPER_AAF_H
-+#define IMPORT_HELPER_AAF_H
-+
-+#include <string>
-+#include <ardour/ax_errors.h>
-+
-+using namespace std;
-+
-+class AafImportHelper
-+{
-+public:
-+    AafImportHelper (bool use_native_importer = false);
-+    ~AafImportHelper ();
-+
-+    string   get_user_path (const string& /* in */srequested_path, bool /* in */bSilent = false);
-+    ax_error import_from_aaf (const string& /* in */sfile_to_import, string& /* out */spath_to_new_project);
-+    ax_error create_symlink (const string& /* in */srequested_link, bool /* in */bReplaceExisting = false, bool /* in */bSilent = false);
-+    ax_error create_link_to_importer (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_importer = "");
-+    ax_error create_link_to_sessions (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_sessions = "");
-+    ax_error create_link_to_wine  (bool /* in */bReplaceExisting = false, bool /* in */bSilent = false, const string& /* in */spath_to_wine = "");
-+    bool     is_native (bool /* in */bSilent = false);
-+    bool     needs_wine (bool /* in */bSilent = false);
-+    bool     is_initialized() { return (importer_is_native && importer_uses_wine) ? false : true; }
-+
-+protected:
-+    ax_error create_path_folders(const char *pRequestedPath);
-+    ax_error get_path_to_importer (string& /* out */sfound_path, bool /* in */bSilent = false);
-+    ax_error get_path_to_sessions (string& /* out */sfound_path, bool /* in */bSilent = false);
-+    ax_error get_path_to_wine     (string& /* out */sfound_path, bool /* in */bSilent = false);
-+    ax_error initialize_for_aaf_import (bool& /* out */is_native, bool& /* out */uses_wine, string* /* out */ppath_to_ardour_sessions,
-+                        string* /* out */ppath_to_importer = NULL, string* /* out */ppath_to_wine = NULL,
-+                        string* /* out */ppreferred_color_scheme = NULL, bool /* in */bSilent = false);
-+    ax_error assign_exit_status (string s_application, int exit_code);
-+    string   attribute_to_flag  (string s_application, string s_attribute);
-+    char     temp_path[PATH_MAX+1];
-+    vector<string*> _aryPossibleImporterLocations;
-+    vector<string*> _aryPossibleWineLocations;
-+
-+private:
-+    bool     importer_is_native;
-+    bool     importer_uses_wine;
-+    static bool already_instantiated;
-+
-+private:
-+    // AafImportHelper is not meant to get copied. These things
-+    // are private because they are never meant to be used.
-+    AafImportHelper& operator= (AafImportHelper&); // N/A
-+    AafImportHelper(AafImportHelper&); // N/A
-+};
-+
-+inline AafImportHelper& AafImportHelper::operator= (AafImportHelper&)
-+{
-+    return *this;
-+}
-+
-+inline AafImportHelper::AafImportHelper(AafImportHelper&)
-+{
-+}
-+
-+#endif // IMPORT_HELPER_AAF_H
---- a/gtk2_ardour/new_session_dialog.cc
-+++ b/gtk2_ardour/new_session_dialog.cc
-@@ -1,5 +1,5 @@
- /*
--    Copyright (C) 2005 Paul Davis 
-+    Copyright (C) 2005 Paul Davis
- 
-     This program is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published by
-@@ -43,6 +43,12 @@
- #include "i18n.h"
- #include "new_session_dialog.h"
- 
-+// Needed to launch an AAF importer
-+#include "import_helper_aaf.h"
-+#include "ardour_ui.h"
-+#include <wait.h>
-+#include <unistd.h>
-+
- NewSessionDialog::NewSessionDialog()
- 	: ArdourDialog ("session control")
- {
-@@ -82,17 +88,15 @@
- 	session_template_label = new Gtk::Label(_("Template :"));
- 	m_template = new Gtk::FileChooserButton();
- 	m_create_control_bus = new Gtk::CheckButton(_("Create Monitor Bus"));
--	
- 	Gtk::Adjustment *m_control_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10));
- 	m_control_bus_channel_count = new Gtk::SpinButton(*m_control_bus_channel_count_adj, 1, 0);
--	
-+
- 	Gtk::Adjustment *m_master_bus_channel_count_adj = Gtk::manage(new Gtk::Adjustment(2, 0, 100, 1, 10));
- 	m_master_bus_channel_count = new Gtk::SpinButton(*m_master_bus_channel_count_adj, 1, 0);
- 	m_create_master_bus = new Gtk::CheckButton(_("Create Master Bus"));
- 	advanced_table = new Gtk::Table(2, 2, true);
- 	m_connect_inputs = new Gtk::CheckButton(_("Automatically Connect to Physical Inputs"));
- 	m_limit_input_ports = new Gtk::CheckButton(_("Use only"));
--	
- 	Gtk::Adjustment *m_input_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10));
- 	m_input_limit_count = new Gtk::SpinButton(*m_input_limit_count_adj, 1, 0);
- 	input_port_limit_hbox = new Gtk::HBox(false, 0);
-@@ -101,16 +105,15 @@
- 
- 	bus_frame = new Gtk::Frame();
- 	bus_table = new Gtk::Table (2, 3, false);
--	
-+
- 	input_frame = new Gtk::Frame();
- 	m_connect_outputs = new Gtk::CheckButton(_("Automatically Connect Outputs"));
- 	m_limit_output_ports = new Gtk::CheckButton(_("Use only"));
--	
- 	Gtk::Adjustment *m_output_limit_count_adj = Gtk::manage(new Gtk::Adjustment(1, 0, 100, 1, 10));
- 	m_output_limit_count = new Gtk::SpinButton(*m_output_limit_count_adj, 1, 0);
- 	output_port_limit_hbox = new Gtk::HBox(false, 0);
- 	output_port_vbox = new Gtk::VBox(false, 0);
--	
-+
- 	Gtk::RadioButton::Group _RadioBGroup_m_connect_outputs_to_master;
- 	m_connect_outputs_to_master = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Master Bus"));
- 	m_connect_outputs_to_physical = new Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Physical Outputs"));
-@@ -173,7 +176,7 @@
- 	m_create_master_bus->set_border_width(0);
- 	advanced_table->set_row_spacings(0);
- 	advanced_table->set_col_spacings(0);
--	
-+
- 	m_connect_inputs->set_flags(Gtk::CAN_FOCUS);
- 	m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL);
- 	m_connect_inputs->set_mode(true);
-@@ -204,7 +207,7 @@
- 	bus_frame->set_label_align(0,0.5);
- 	bus_frame->add(*bus_hbox);
- 	bus_frame->set_label_widget(*bus_label);
--	
-+
- 	bus_table->set_row_spacings (0);
- 	bus_table->set_col_spacings (0);
- 	bus_table->attach (*m_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-@@ -346,12 +349,12 @@
- 
- 	m_notebook->set_flags(Gtk::CAN_FOCUS);
- 	m_notebook->set_scrollable(true);
--	
-+
- 	get_vbox()->set_homogeneous(false);
- 	get_vbox()->set_spacing(0);
- 	get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0);
- 
--	/* 
-+	/*
- 	   icon setting is done again in the editor (for the whole app),
- 	   but its all chickens and eggs at this point.
- 	*/
-@@ -391,7 +394,7 @@
- 	m_treeview->get_selection()->set_mode (Gtk::SELECTION_SINGLE);
- 
- 	std::string path = ARDOUR::get_user_ardour_path();
--	
-+
- 	if (path.empty()) {
- 	        path = ARDOUR::get_system_data_path();
- 	}
-@@ -424,6 +427,21 @@
- 
- 	m_template->set_title(_("select template"));
- 	Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter));
-+
-+	// Find out if we have an AAF importer present
-+	FILE *xchange = NULL;
-+    AafImportHelper importer;
-+    string spath_to_importer = importer.get_user_path("AAF Importer", true);
-+    if (spath_to_importer.length())
-+         xchange = fopen(spath_to_importer.c_str(), "r");
-+    if ((xchange != NULL) || ((importer.is_native()) && (importer.is_initialized()))) {
-+        printf("AAF Converter found; adding support for import of AAF files.\n");
-+        session_filter->add_pattern(X_("*.aaf"));
-+
-+        if (xchange)
-+            fclose(xchange);
-+	}
-+
- 	session_filter->add_pattern(X_("*.ardour"));
- 	session_filter->add_pattern(X_("*.ardour.bak"));
- 	m_open_filechooser->set_filter (*session_filter);
-@@ -475,7 +493,7 @@
- 	m_treeview->signal_row_activated().connect (mem_fun (*this, &NewSessionDialog::recent_row_activated));
- 	m_open_filechooser->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::file_chosen));
- 	m_template->signal_selection_changed ().connect (mem_fun (*this, &NewSessionDialog::template_chosen));
--	
-+
- 	page_set = Pages (0);
- }
- 
-@@ -582,7 +600,7 @@
- 	    4) canonicalize_file_name() & realpath() have entirely
-                    different semantics on OS X and Linux when given
- 		   a non-existent path.
--		   
-+
- 	   as result of all this, we take two distinct pathways through the code.
- 	*/
- 
-@@ -599,7 +617,6 @@
- 		engine_page_session_folder = realdir;
- 	}
- 
--	
- #else 
- 	char* res;
- 	if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
-@@ -611,7 +628,7 @@
- 		engine_page_session_folder = res;
- 		free (res);
- 	}
--	
-+
- #endif
- 
- }
-@@ -619,7 +636,7 @@
- std::string
- NewSessionDialog::session_name() const
- {
--        std::string str = Glib::filename_from_utf8 (m_open_filechooser->get_filename());
-+    std::string str = m_filename;
- 	std::string::size_type position = str.find_last_of (G_DIR_SEPARATOR);
- 	str = str.substr (position+1);
- 	position = str.find_last_of ('.');
-@@ -631,7 +648,7 @@
- 
- 	if ((position = str.rfind(".bak")) != string::npos) {
- 	        str = str.substr (0, position);
--	}	  
-+	}
- 	*/
- 
- 	switch (which_page()) {
-@@ -650,7 +667,7 @@
- 
- 	default:
- 		break;
--	} 
-+	}
- 
- 	if (m_treeview->get_selection()->count_selected_rows() == 0) {
- 		return Glib::filename_from_utf8(str);
-@@ -666,7 +683,6 @@
- 	switch (which_page()) {
- 	case NewPage:
- 	        return Glib::filename_from_utf8(m_folder->get_filename());
--		
- 	case EnginePage:
- 		if (!(page_set & (OpenPage|NewPage))) {
- 			return Glib::filename_from_utf8(engine_page_session_folder);
-@@ -681,9 +697,9 @@
- 	default:
- 		break;
- 	}
--	       
-+
- 	if (m_treeview->get_selection()->count_selected_rows() == 0) {
--		const string filename(Glib::filename_from_utf8(m_open_filechooser->get_filename()));
-+		const string filename( m_filename );
- 		return Glib::path_get_dirname(filename);
- 	}
- 
-@@ -874,7 +890,7 @@
- {
- 	m_name->set_text("");
- 	set_response_sensitive (Gtk::RESPONSE_OK, false);
--	
-+
- }
- 
- void
-@@ -970,11 +986,57 @@
- 	}
- 
- 	if (!m_open_filechooser->get_filename().empty()) {
--	        set_response_sensitive (Gtk::RESPONSE_OK, true);
--		response (Gtk::RESPONSE_OK);
-+        std::string selection = m_open_filechooser->get_filename();
-+        if (( selection.find(".aaf") != string::npos ) ||
-+            ( selection.find(".AAF") != string::npos )) {
-+
-+            // Let's establish that ".aaf" is actually at the end of the string
-+            size_t slen = selection.length();
-+            size_t spos = selection.rfind(".aaf");
-+
-+            if (spos == string::npos)
-+                spos = selection.rfind(".AAF");
-+
-+            if (spos == (slen-4)) {
-+                std::string spath_to_imported_session;
-+
-+                AafImportHelper importer;
-+
-+                ax_error axResult = importer.import_from_aaf (selection, spath_to_imported_session);
-+
-+                // Determine the error (if any) but assume that all errors
-+                // (apart from NOT_IMPLEMENTED) have already been reported.
-+                switch (axResult) {
-+                    case AXERR_NONE:            // These are the only two cases where
-+                    case AXERR_MEDIA_NOT_FOUND: // it's possible to load the session.
-+                             m_open_filechooser->set_filename( Glib::filename_to_utf8(spath_to_imported_session) );
-+                             m_filename = spath_to_imported_session;
-+                        break;
-+                    case AXERR_NOT_IMPLEMENTED:
-+                             error << _("The requested feature is not yet available") << endmsg;
-+                    default:
-+                             m_open_filechooser->set_filename("");
-+                             set_response_sensitive (Gtk::RESPONSE_OK, false);
-+                             if (win) {                                              // Can't return to the previous cursor
-+                                 win->set_cursor(/*Gdk::Cursor(Gdk::LAST_CURSOR)*/); // under 'X' so just select the desktop
-+                             }                                                       // cursor (will usually be the same thing)
-+
-+                        return;
-+                    }
-+                 } else
-+                     m_filename = selection;
-+        } else
-+            m_filename = selection;
-+
-+        set_response_sensitive (Gtk::RESPONSE_OK, true);
-+        response (Gtk::RESPONSE_OK);
- 	} else {
- 	        set_response_sensitive (Gtk::RESPONSE_OK, false);
- 	}
-+
-+    if (win) {                                              // Can't return to the previous cursor
-+        win->set_cursor(/*Gdk::Cursor(Gdk::LAST_CURSOR)*/); // under 'X' so just select the desktop
-+    }                                                       // cursor (will usually be the same thing)
- }
- 
- void
---- a/gtk2_ardour/new_session_dialog.h
-+++ b/gtk2_ardour/new_session_dialog.h
-@@ -1,5 +1,5 @@
- /*
--    Copyright (C) 2005 Paul Davis 
-+    Copyright (C) 2005 Paul Davis
- 
-     This program is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published by
-@@ -53,7 +53,7 @@
- class NewSessionDialog : public ArdourDialog
- {
- public:
--		
-+
- 	enum Pages {
- 		NewPage = 0x1,
- 		OpenPage = 0x2,
-@@ -70,7 +70,7 @@
- 
- 	std::string session_name() const;
- 	std::string session_folder() const;
--	
-+
- 	bool use_session_template() const;
- 	std::string session_template_name() const;
- 
-@@ -109,7 +109,7 @@
- 
- 	void reset_name();
- 	void reset_template();
--	
-+
- 	Gtk::Label * session_name_label;
- 	Gtk::Label * session_location_label;
- 	Gtk::Label * session_template_label;
-@@ -155,7 +155,7 @@
- 
- 	Gtk::CheckButton* m_create_master_bus;
- 	Gtk::SpinButton* m_master_bus_channel_count;
--       	
-+
- 	Gtk::CheckButton* m_create_control_bus;
- 	Gtk::SpinButton* m_control_bus_channel_count;
- 
-@@ -163,7 +163,7 @@
- 	Gtk::CheckButton* m_limit_input_ports;
- 	Gtk::SpinButton* m_input_limit_count;
- 
--	Gtk::CheckButton* m_connect_outputs;	
-+	Gtk::CheckButton* m_connect_outputs;
- 	Gtk::CheckButton* m_limit_output_ports;
- 	Gtk::SpinButton* m_output_limit_count;
- 
-@@ -180,7 +180,7 @@
- 	Pages page_set;
- 
- 	struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
--	    RecentSessionModelColumns() { 
-+	    RecentSessionModelColumns() {
- 		    add (visible_name);
- 		    add (fullpath);
- 	    }
-@@ -217,6 +217,7 @@
- 	bool have_engine;
- 	Glib::ustring engine_page_session_folder;
- 	Glib::ustring engine_page_session_name;
-+    string m_filename;
- 
- 	sigc::connection ic_connection;
- 	void engine_interface_chosen();
---- /dev/null
-+++ b/libs/ardour/ardour/ax_errors.h
-@@ -0,0 +1,40 @@
-+/* ax_errors.h
-+
-+   A 'humanised' list of possible errors that Ardour might encounter
-+   if it launches an external application. These error codes are
-+   limited to the range that can be returned by the Linux API 'waitpid()'
-+   Technically, it can return an int - but only the 8 least significant
-+   bits are used to represent the exit status of the spawned application.
-+   Therefore, although any number of error codes may be defined, their
-+   values must lie in the range -128 to +127. Feel free to add to the
-+   error codes already listed but please do not modify (e.g. renumber)
-+   any errors that someone has already defined before you.
-+*/
-+
-+#ifndef AXERRORS_INCLUDED
-+#define AXERRORS_INCLUDED
-+
-+enum ax_error { AXERR_LOWER_LIMIT       = (-128),
-+                AXERR_UNKNOWN           = (-127),
-+                AXERR_NOT_IMPLEMENTED   = (-126),
-+                AXERR_INTERNAL_ERROR    = (-125),
-+                AXERR_INVALID_ACCESS    = (-11),
-+                AXERR_INVALID_SWITCH    = (-10),
-+                AXERR_INVALID_PARAM     = (-9),
-+                AXERR_SOURCE_ERROR      = (-8),
-+                AXERR_DESTINATION_ERROR = (-7),
-+                AXERR_PROCESS_FAILURE   = (-6),
-+                AXERR_PROCESS_NOT_FOUND = (-5),
-+                AXERR_WINE_FAILURE      = (-4),
-+                AXERR_WINE_NOT_FOUND    = (-3),
-+                AXERR_NOT_INITIALIZED   = (-2),
-+                AXERR_FATAL_EXCEPTION   = (-1),
-+                AXERR_NONE              = 0,
-+                AXERR_USER_ABORTED      = 1,
-+                AXERR_MEDIA_NOT_FOUND   = 2,
-+                AXERR_UPPER_LIMIT       = 127
-+              };
-+
-+#endif /* AXERRORS_INCLUDED */
-+
-+/* EOF */

-- 
ardour3 packaging



More information about the pkg-multimedia-commits mailing list