diff --git a/gtk2_ardour/trigger_ui.cc b/gtk2_ardour/trigger_ui.cc new file mode 100644 index 0000000000..c272f1a2dd --- /dev/null +++ b/gtk2_ardour/trigger_ui.cc @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2021 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include + +#include "pbd/i18n.h" +#include "pbd/compose.h" +#include "pbd/convert.h" + +#include "ardour/region.h" +#include "ardour/triggerbox.h" + +#include "canvas/polygon.h" +#include "canvas/text.h" + +#include "gtkmm2ext/utils.h" + +#include "ardour_ui.h" +#include "gui_thread.h" +#include "trigger_ui.h" +#include "public_editor.h" +#include "ui_config.h" +#include "utils.h" + +using namespace ARDOUR; +using namespace ArdourCanvas; +using namespace Gtkmm2ext; +using namespace PBD; + + +TriggerUI::TriggerUI (Item* parent, Trigger& t) + : Box (parent, Box::Vertical) + , trigger (t) +{ +} + +TriggerUI::~TriggerUI () +{ +} + +/* ------------ */ + +TriggerWidget::TriggerWidget (Trigger& t) +{ + ui = new TriggerUI (root(), t); + set_background_color (UIConfiguration::instance().color (X_("theme:bg"))); +} + +void +TriggerWidget::size_request (double& w, double& h) const +{ + ui->size_request (w, h); +} + +/* ------------ */ + +TriggerWindow::TriggerWindow (Trigger& t) +{ + TriggerWidget* tw = manage (new TriggerWidget (t)); + set_title (_("Trigger XXXX")); + + double w; + double h; + + tw->size_request (w, h); + + set_default_size (w, h); + add (*tw); + tw->show (); +} + +bool +TriggerWindow::on_key_press_event (GdkEventKey* ev) +{ + Gtk::Window& main_window (ARDOUR_UI::instance()->main_window()); + return ARDOUR_UI_UTILS::relay_key_press (ev, &main_window); +} + +bool +TriggerWindow::on_key_release_event (GdkEventKey* ev) +{ + Gtk::Window& main_window (ARDOUR_UI::instance()->main_window()); + return ARDOUR_UI_UTILS::relay_key_press (ev, &main_window); +} diff --git a/gtk2_ardour/trigger_ui.h b/gtk2_ardour/trigger_ui.h new file mode 100644 index 0000000000..a6b8c0111b --- /dev/null +++ b/gtk2_ardour/trigger_ui.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef __ardour_gtk_trigger_ui_h__ +#define __ardour_gtk_trigger_ui_h__ + +#include "ardour/triggerbox.h" + +#include "canvas/box.h" +#include "canvas/canvas.h" +#include "canvas/rectangle.h" + +namespace ArdourCanvas { + class Text; + class Polygon; +}; + +class TriggerUI : public ArdourCanvas::Box +{ + public: + TriggerUI (ArdourCanvas::Item* parent, ARDOUR::Trigger&); + ~TriggerUI (); + + private: + ARDOUR::Trigger& trigger; + + ArdourCanvas::Rectangle* follow_label; + ArdourCanvas::Text* follow_text; + + ArdourCanvas::Rectangle* follow_left; + ArdourCanvas::Text* follow_left_text; + ArdourCanvas::Rectangle* follow_left_percentage; + ArdourCanvas::Text* follow_left_percentage_text; + + ArdourCanvas::Rectangle* follow_right; + ArdourCanvas::Text* follow_right_text; + ArdourCanvas::Rectangle* follow_right_percentage; + ArdourCanvas::Text* follow_right_percentage_text; + + ArdourCanvas::Rectangle* percentage_slider; + + ArdourCanvas::Rectangle* follow_count; + ArdourCanvas::Text* follow_count_text; + + ArdourCanvas::Rectangle* legato; + ArdourCanvas::Rectangle* legato_text; + + ArdourCanvas::Rectangle* quantize; + ArdourCanvas::Rectangle* quantize_text; + + ArdourCanvas::Rectangle* velocity; + ArdourCanvas::Rectangle* velocity_text; +}; + +class TriggerWidget : public ArdourCanvas::GtkCanvas +{ + public: + TriggerWidget (ARDOUR::Trigger& tb); + void size_request (double& w, double& h) const; + + private: + TriggerUI* ui; +}; + +/* XXX probably for testing only */ + +class TriggerWindow : public Gtk::Window +{ + public: + TriggerWindow (ARDOUR::Trigger&); + + bool on_key_press_event (GdkEventKey*); + bool on_key_release_event (GdkEventKey*); +}; + +#endif /* __ardour_gtk_trigger_ui_h__ */