Remember Virtual-Keyboard window size and position
[ardour.git] / session_utils / copy-mixer.cc
index d317af654839edbbf017abf243844752579fadf4..e1e8526b3153b8634d4da2bfd7e0471c8e3df282 100644 (file)
@@ -1,3 +1,21 @@
+/*
+ * Copyright (C) 2016-2019 Robin Gareus <robin@gareus.org>
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
 #include <iostream>
 #include <cstdlib>
 #include <getopt.h>
@@ -39,37 +57,35 @@ trim_state_for_mixer_copy (Session*s, XMLNode& node)
                                 */
                                XMLProperty const * target = (*i)->property (X_("name"));
                                if (!target) {
-                                       (*i)->add_property ("type", "dangling-aux-send");
+                                       (*i)->set_property ("type", "dangling-aux-send");
                                        continue;
                                }
                                boost::shared_ptr<Route> r = s->route_by_name (target->value ());
                                if (!r || boost::dynamic_pointer_cast<Track> (r)) {
-                                       (*i)->add_property ("type", "dangling-aux-send");
+                                       (*i)->set_property ("type", "dangling-aux-send");
                                        continue;
                                }
-                               (*i)->add_property ("target", r->id ().to_s ());
+                               (*i)->set_property ("target", r->id ().to_s ());
                        }
                        if (role && role->value () == X_("Listen")) {
                                (*i)->remove_property (X_("bitslot"));
                        }
                        else if (role && (role->value () == X_("Send") || role->value () == X_("Aux"))) {
-                               char buf[32];
                                Delivery::Role xrole;
                                uint32_t bitslot = 0;
                                xrole = Delivery::Role (string_2_enum (role->value (), xrole));
                                std::string name = Send::name_and_id_new_send (*s, xrole, bitslot, false);
-                               snprintf (buf, sizeof (buf), "%" PRIu32, bitslot);
                                (*i)->remove_property (X_("bitslot"));
                                (*i)->remove_property (X_("name"));
-                               (*i)->add_property ("bitslot", buf);
-                               (*i)->add_property ("name", name);
+                               (*i)->set_property ("bitslot", bitslot);
+                               (*i)->set_property ("name", name);
                        }
                        else if (type && type->value () == X_("intreturn")) {
                                // ignore, in case bus existed in old session,
                                // tracks in old session may be connected to it.
                                // if the bus is new, new_route_from_template()
                                // will have re-created an ID.
-                               (*i)->add_property ("type", "ignore-aux-return");
+                               (*i)->set_property ("type", "ignore-aux-return");
                        }
                        else if (type && type->value () == X_("return")) {
                                // Return::set_state() generates a new one
@@ -78,7 +94,7 @@ trim_state_for_mixer_copy (Session*s, XMLNode& node)
                        else if (type && type->value () == X_("port")) {
                                // PortInsert::set_state() handles the bitslot
                                (*i)->remove_property (X_("bitslot"));
-                               (*i)->add_property ("ignore-name", "1");
+                               (*i)->set_property ("ignore-name", "1");
                        }
                }
        }
@@ -230,7 +246,7 @@ copy_session_routes (
 }
 
 
-static void usage (int status) {
+static void usage () {
        // help2man compatible format (standard GNU help-text)
        printf (UTILNAME " - copy mixer settings from one session to another.\n\n");
        printf ("Usage: " UTILNAME " [ OPTIONS ] <src> <dst>\n\n");
@@ -241,7 +257,7 @@ static void usage (int status) {
   -d, --debug                print pre-processed XML for each route\n\
   -l, --log-messages         display libardour log messages\n\
   -s, --snapshot <name>      create a new snapshot in dst\n\
-  -v, --verbose              show perfomed copy opeations\n\
+  -v, --verbose              show performed copy operations\n\
   -V, --version              print version information and exit\n\
 \n");
 
@@ -254,7 +270,7 @@ When --snapshot is set, a new snaphot in the <dst> session is created.\n\
 
        printf ("Report bugs to <http://tracker.ardour.org/>\n"
                "Website: <http://ardour.org/>\n");
-       ::exit (status);
+       ::exit (EXIT_SUCCESS);
 }
 
 static bool ends_with (std::string const& value, std::string const& ending)
@@ -292,7 +308,7 @@ int main (int argc, char* argv[])
                                break;
 
                        case 'h':
-                               usage (0);
+                               usage ();
                                break;
 
                        case 'l':
@@ -306,7 +322,7 @@ int main (int argc, char* argv[])
                        case 'V':
                                printf ("ardour-utils version %s\n\n", VERSIONSTRING);
                                printf ("Copyright (C) GPL 2016 Robin Gareus <robin@gareus.org>\n");
-                               exit (0);
+                               exit (EXIT_SUCCESS);
                                break;
 
                        case 'v':
@@ -314,15 +330,17 @@ int main (int argc, char* argv[])
                                break;
 
                        default:
-                                       usage (EXIT_FAILURE);
-                                       break;
+                               cerr << "Error: unrecognized option. See --help for usage information.\n";
+                               ::exit (EXIT_FAILURE);
+                               break;
                }
        }
 
        // TODO parse path/name  from a single argument.
 
        if (optind + 2 > argc) {
-               usage (EXIT_FAILURE);
+               cerr << "Error: Missing parameter. See --help for usage information.\n";
+               ::exit (EXIT_FAILURE);
        }
 
        std::string src = argv[optind];
@@ -332,19 +350,19 @@ int main (int argc, char* argv[])
 
        if (!ends_with (src, statefile_suffix)) {
                fprintf (stderr, "source is not a .ardour session file.\n");
-               exit (1);
+               exit (EXIT_FAILURE);
        }
        if (!ends_with (dst, statefile_suffix)) {
                fprintf (stderr, "target is not a .ardour session file.\n");
-               exit (1);
+               exit (EXIT_FAILURE);
        }
        if (!Glib::file_test (src, Glib::FILE_TEST_IS_REGULAR)) {
                fprintf (stderr, "source is not a regular file.\n");
-               exit (1);
+               exit (EXIT_FAILURE);
        }
        if (!Glib::file_test (dst, Glib::FILE_TEST_IS_REGULAR)) {
                fprintf (stderr, "target is not a regular file.\n");
-               exit (1);
+               exit (EXIT_FAILURE);
        }
 
        std::string src_path = Glib::path_get_dirname (src);