+#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"
#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"
#include "canvas/widget.h"
#include "ardour_button.h"
+#include "enums.h"
#include "ui_config.h"
#include "pbd/i18n.h"
/* ***************************************************************************/
/* ***************************************************************************/
-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;
}
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;
};
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));
}
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));
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
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);