initial working version of "printing" keybindings (via a browser)
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 15 Jun 2016 23:45:59 +0000 (19:45 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 15 Jun 2016 23:46:12 +0000 (19:46 -0400)
gtk2_ardour/keyeditor.cc

index 3352a253761424d70f0daf25a70cc9f36719f79a..73f17f114d5d210127f6ace9341c0147680b64bc 100644 (file)
 
 #include <map>
 #include <fstream>
+#include <sstream>
 
 #include <boost/algorithm/string.hpp>
 
+#include <glib.h>
+#include <glib/gstdio.h>
+
 #include <gtkmm/stock.h>
 #include <gtkmm/label.h>
 #include <gtkmm/accelkey.h>
@@ -35,6 +39,8 @@
 #include "gtkmm2ext/bindings.h"
 #include "gtkmm2ext/utils.h"
 
+#include "pbd/error.h"
+#include "pbd/openuri.h"
 #include "pbd/strsplit.h"
 
 #include "ardour/filesystem_paths.h"
@@ -520,6 +526,39 @@ KeyEditor::search_string_updated (const std::string& filter)
 void
 KeyEditor::print () const
 {
-       // use Glib::file_open_tmp() if needed
-       Bindings::save_all_bindings_as_html (cerr);
+       stringstream sstr;
+       Bindings::save_all_bindings_as_html (sstr);
+
+       if (sstr.str().empty()) {
+               return;
+       }
+
+
+       gchar* file_name;
+       GError *err = NULL;
+       gint fd;
+
+       if ((fd = g_file_open_tmp ("akprintXXXXXX.html", &file_name, &err)) < 0) {
+               if (err) {
+                       error << string_compose (_("Could not open temporary file to print bindings (%1)"), err->message) << endmsg;
+                       g_error_free (err);
+               }
+               return;
+       }
+
+       err = NULL;
+
+       if (!g_file_set_contents (file_name, sstr.str().c_str(), sstr.str().size(), &err)) {
+               ::close (fd);
+               g_unlink (file_name);
+               if (err) {
+                       error << string_compose (_("Could not save bindings to file (%1)"), err->message) << endmsg;
+                       g_error_free (err);
+               }
+               return;
+       }
+
+       ::close (fd);
+
+       PBD::open_uri (string_compose ("file:///%1", file_name));
 }