NO-OP: Clarify function name
[ardour.git] / gtk2_ardour / toolbar_test.cc
index aa89ec48c6a27624fdc2a6f169593b5d01c04553..338e8f8f2c56b6c49772e424dfab7a856ebce1b5 100644 (file)
@@ -1,9 +1,12 @@
+#include <fstream>
+
 #include <glibmm.h>
 #include <gtkmm/main.h>
 #include <gtkmm/box.h>
 #include <gtkmm/window.h>
 
 #include "pbd/debug.h"
+#include "pbd/enumwriter.h"
 #include "pbd/error.h"
 #include "pbd/failed_constructor.h"
 #include "pbd/pthread_utils.h"
@@ -23,7 +26,7 @@
 #include "canvas/types.h"
 #include "canvas/canvas.h"
 #include "canvas/container.h"
-#include "canvas/colors.h"
+#include "gtkmm2ext/colors.h"
 #include "canvas/debug.h"
 #include "canvas/grid.h"
 #include "canvas/scroll_group.h"
@@ -31,6 +34,7 @@
 #include "canvas/widget.h"
 
 #include "ardour_button.h"
+#include "enums.h"
 #include "ui_config.h"
 
 #include "pbd/i18n.h"
@@ -95,15 +99,21 @@ LogReceiver::receive (Transmitter::Channel chn, const char * str)
 /* ***************************************************************************/
 /* ***************************************************************************/
 
-ArdourButton*
-make_transport_button (std::string const & action, Gtkmm2ext::ArdourIcon::Icon icon)
+void
+setup_action_button (ArdourButton& button, std::string const & action, ArdourWidgets::ArdourIcon::Icon icon, std::string const & button_theme_name)
 {
-       ArdourButton* button = new ArdourButton;
-       button->set_name ("transport button");
+       button.set_name (button_theme_name + string (" button"));
        Glib::RefPtr<Gtk::Action> act;
        act = ActionManager::get_action (action.c_str());
-       button->set_related_action (act);
-       button->set_icon (icon);
+       button.set_related_action (act);
+       button.set_icon (icon);
+}
+
+ArdourButton*
+make_action_button (std::string const & action, ArdourWidgets::ArdourIcon::Icon icon, std::string const & button_theme_name)
+{
+       ArdourButton* button = new ArdourButton;
+       setup_action_button (*button, action, icon, button_theme_name);
        return button;
 }
 
@@ -118,14 +128,14 @@ private:
        void finish () { quit (); }
        Gtk::Window _main_window;
 
-       void initialize_canvas (ArdourCanvas::Canvas& canvas);
+       void initialize_canvas (ArdourCanvas::Canvas& canvas, std::string const & toolbar_path);
+       void build_toolbar (ArdourCanvas::Item* parent, std::string const& toolbar_path);
 
        void canvas_size_request (Gtk::Requisition* req);
        void canvas_size_allocated (Gtk::Allocation& alloc);
 
        ArdourCanvas::GtkCanvas* canvas;
        ArdourCanvas::Container* group;
-       ArdourCanvas::Grid* grid;
 
        ArdourButton test_button;
 };
@@ -145,7 +155,7 @@ CANVAS_UI::CANVAS_UI (int *argcp, char **argvp[], const char* localedir)
 
        canvas = new ArdourCanvas::GtkCanvas ();
 
-       initialize_canvas (*canvas);
+       initialize_canvas (*canvas, (*argvp)[1]);
 
        canvas->signal_size_request().connect (sigc::mem_fun (*this, &CANVAS_UI::canvas_size_request));
        canvas->signal_size_allocate().connect (sigc::mem_fun (*this, &CANVAS_UI::canvas_size_allocated));
@@ -167,7 +177,7 @@ CANVAS_UI::starting ()
 }
 
 void
-CANVAS_UI::initialize_canvas (ArdourCanvas::Canvas& canvas)
+CANVAS_UI::initialize_canvas (ArdourCanvas::Canvas& canvas, std::string const & spec_path)
 {
        using namespace ArdourCanvas;
        canvas.set_background_color (rgba_to_color (0.0, 0.0, 0.4, 1.0));
@@ -175,26 +185,56 @@ CANVAS_UI::initialize_canvas (ArdourCanvas::Canvas& canvas)
        ScrollGroup* scroll_group = new ScrollGroup (canvas.root(),
                        ScrollGroup::ScrollSensitivity (ScrollGroup::ScrollsVertically|ScrollGroup::ScrollsHorizontally));
 
-       grid = new ArdourCanvas::Grid (scroll_group);
+       build_toolbar (scroll_group, spec_path);
+}
 
-       grid->set_padding (3.0);
+void
+CANVAS_UI::build_toolbar (ArdourCanvas::Item* parent, std::string const & spec_path)
+{
+       ArdourCanvas::Grid* grid = new ArdourCanvas::Grid (parent);
 
+       grid->set_padding (3.0);
        grid->set_row_spacing (3.0);
        grid->set_col_spacing (3.0);
        grid->set_homogenous (true);
 
-       ArdourCanvas::Widget* w1 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Roll", ArdourIcon::TransportPlay));
-       CANVAS_DEBUG_NAME (w1, "w1");
-       grid->place (w1, 0, 0);
-       ArdourCanvas::Widget* w2 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Stop", ArdourIcon::TransportStop));
-       CANVAS_DEBUG_NAME (w2, "w2");
-       grid->place (w2, 1, 0);
-       ArdourCanvas::Widget* w3 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Record", ArdourIcon::RecButton));
-       CANVAS_DEBUG_NAME (w3, "w3");
-       grid->place (w3, 2, 0);
-       ArdourCanvas::Widget* w4 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Loop", ArdourIcon::TransportLoop));
-       CANVAS_DEBUG_NAME (w4, "w4");
-       grid->place (w4, 3, 0);
+       std::ifstream toolbar_spec;
+       double col = 0;
+       double row = 0;
+
+       toolbar_spec.open (spec_path.c_str(), ios::in);
+
+       if (!toolbar_spec) {
+               return;
+       }
+
+       while (toolbar_spec) {
+               string action;
+               string icon;
+               string theme_name;
+
+               toolbar_spec >> action;
+               if (action.empty()) {
+                       break;
+               }
+               toolbar_spec >> icon;
+               if (icon.empty()) {
+                       break;
+               }
+
+               toolbar_spec >> theme_name;
+               if (theme_name.empty()) {
+                       break;
+               }
+
+               ArdourWidgets::ArdourIcon::Icon i = (ArdourWidgets::ArdourIcon::Icon) string_2_enum (string ("ArdourIcon::") + icon, i);
+
+               ArdourCanvas::Widget* w = new ArdourCanvas::Widget (canvas, *make_action_button (action, i, theme_name));
+               grid->place (w, col, row);
+               col++;
+       }
+
+       toolbar_spec.close ();
 }
 
 void
@@ -240,6 +280,8 @@ int main (int argc, char **argv)
        log_receiver.listen_to (fatal);
        log_receiver.listen_to (warning);
 
+       setup_gtk_ardour_enums ();
+
        if (UIConfiguration::instance().pre_gui_init ()) {
                error << _("Could not complete pre-GUI initialization") << endmsg;
                exit (1);