mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
triggerbox: (slowly) evolving the launch settings dialog
This commit is contained in:
parent
e777acb7f9
commit
2e4502763c
3 changed files with 148 additions and 25 deletions
|
|
@ -28,8 +28,12 @@
|
||||||
#include "ardour/region.h"
|
#include "ardour/region.h"
|
||||||
#include "ardour/triggerbox.h"
|
#include "ardour/triggerbox.h"
|
||||||
|
|
||||||
|
#include "canvas/constrained_item.h"
|
||||||
#include "canvas/polygon.h"
|
#include "canvas/polygon.h"
|
||||||
#include "canvas/text.h"
|
#include "canvas/text.h"
|
||||||
|
#include "canvas/widget.h"
|
||||||
|
|
||||||
|
#include "widgets/ardour_button.h"
|
||||||
|
|
||||||
#include "gtkmm2ext/utils.h"
|
#include "gtkmm2ext/utils.h"
|
||||||
|
|
||||||
|
|
@ -42,29 +46,128 @@
|
||||||
|
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
using namespace ArdourCanvas;
|
using namespace ArdourCanvas;
|
||||||
|
using namespace ArdourWidgets;
|
||||||
using namespace Gtkmm2ext;
|
using namespace Gtkmm2ext;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
|
|
||||||
|
static std::vector<std::string> follow_strings;
|
||||||
|
static std::string longest_follow;
|
||||||
|
|
||||||
TriggerUI::TriggerUI (Item* parent, Trigger& t)
|
TriggerUI::TriggerUI (Item* parent, Trigger& t)
|
||||||
: Box (parent, Box::Vertical)
|
: ConstraintPacker (parent)
|
||||||
, trigger (t)
|
, trigger (t)
|
||||||
{
|
{
|
||||||
follow_label = new Box (canvas(), Horizontal);
|
if (follow_strings.empty()) {
|
||||||
follow_label->set_fill_color (UIConfiguration::instance().color (X_("theme:bg")));
|
follow_strings.push_back (follow_action_to_string (Trigger::Stop));
|
||||||
follow_label->set_outline_color (UIConfiguration::instance().color (X_("neutral:foreground")));
|
follow_strings.push_back (follow_action_to_string (Trigger::Again));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::QueuedTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::NextTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::PrevTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::FirstTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::LastTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::AnyTrigger));
|
||||||
|
follow_strings.push_back (follow_action_to_string (Trigger::OtherTrigger));
|
||||||
|
|
||||||
follow_text = new Text (canvas());
|
for (std::vector<std::string>::const_iterator i = follow_strings.begin(); i != follow_strings.end(); ++i) {
|
||||||
follow_text->set (X_("Follow Action"));
|
if (i->length() > longest_follow.length()) {
|
||||||
follow_text->set_color (Gtkmm2ext::contrasting_text_color (follow_label->fill_color()));
|
longest_follow = *i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
follow_label->add (follow_text);
|
name = "TriggerUI-CP";
|
||||||
add (follow_label);
|
|
||||||
|
_follow_action_button = new ArdourButton ();
|
||||||
|
_follow_action_button->set_text (_("Follow Action"));
|
||||||
|
|
||||||
|
follow_action_button = new ArdourCanvas::Widget (canvas(), *_follow_action_button);
|
||||||
|
follow_action_button->name = "FollowAction";
|
||||||
|
|
||||||
|
_follow_left = new ArdourDropdown;
|
||||||
|
_follow_left->append_text_item (_("None"));
|
||||||
|
_follow_left->append_text_item (_("Repeat"));
|
||||||
|
_follow_left->append_text_item (_("Next"));
|
||||||
|
_follow_left->append_text_item (_("Previous"));
|
||||||
|
_follow_left->set_sizing_text (longest_follow);
|
||||||
|
|
||||||
|
follow_left = new Widget (canvas(), *_follow_left);
|
||||||
|
follow_left->name = "FollowLeft";
|
||||||
|
|
||||||
|
_follow_right = new ArdourDropdown;
|
||||||
|
_follow_right->append_text_item (_("None"));
|
||||||
|
_follow_right->append_text_item (_("Repeat"));
|
||||||
|
_follow_right->append_text_item (_("Next"));
|
||||||
|
_follow_right->append_text_item (_("Previous"));
|
||||||
|
_follow_right->set_sizing_text (longest_follow);
|
||||||
|
|
||||||
|
follow_right = new Widget (canvas(), *_follow_right);
|
||||||
|
follow_right->name = "FollowRight";
|
||||||
|
|
||||||
|
ConstrainedItem* cfa = add_constrained (follow_action_button);
|
||||||
|
ConstrainedItem* cfl = add_constrained (follow_left);
|
||||||
|
ConstrainedItem* cfr = add_constrained (follow_right);
|
||||||
|
|
||||||
|
/* sizing */
|
||||||
|
|
||||||
|
const double scale = UIConfiguration::instance().get_ui_scale();
|
||||||
|
const Distance spacing = 12. * scale;
|
||||||
|
|
||||||
|
constrain (this->width == cfa->width() + (2. * spacing));
|
||||||
|
constrain (cfa->top() == spacing);
|
||||||
|
constrain (cfa->left() == spacing);
|
||||||
|
constrain (cfa->height() == 26); /* XXX fix me */
|
||||||
|
|
||||||
|
cfl->below (*cfa, spacing);
|
||||||
|
cfl->same_size_as (*cfr);
|
||||||
|
cfl->left_aligned_with (*cfa);
|
||||||
|
cfl->same_height_as (*cfa);
|
||||||
|
cfl->top_aligned_with (*cfr);
|
||||||
|
|
||||||
|
cfr->below (*cfa, spacing);
|
||||||
|
cfr->right_aligned_with (*cfa);
|
||||||
|
cfr->right_of (*cfl, spacing);
|
||||||
|
|
||||||
|
trigger_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
TriggerUI::~TriggerUI ()
|
TriggerUI::~TriggerUI ()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
TriggerUI::follow_action_to_string (Trigger::FollowAction fa)
|
||||||
|
{
|
||||||
|
switch (fa) {
|
||||||
|
case Trigger::Stop:
|
||||||
|
return _("Stop");
|
||||||
|
case Trigger::Again:
|
||||||
|
return _("Again");
|
||||||
|
case Trigger::QueuedTrigger:
|
||||||
|
return _("Queued");
|
||||||
|
case Trigger::NextTrigger:
|
||||||
|
return _("Next");
|
||||||
|
case Trigger::PrevTrigger:
|
||||||
|
return _("Prev");
|
||||||
|
case Trigger::FirstTrigger:
|
||||||
|
return _("First");
|
||||||
|
case Trigger::LastTrigger:
|
||||||
|
return _("Last");
|
||||||
|
case Trigger::AnyTrigger:
|
||||||
|
return _("Any");
|
||||||
|
case Trigger::OtherTrigger:
|
||||||
|
return _("Other");
|
||||||
|
}
|
||||||
|
/*NOTREACHED*/
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TriggerUI::trigger_changed ()
|
||||||
|
{
|
||||||
|
_follow_right->set_text (follow_action_to_string (trigger.follow_action (0)));
|
||||||
|
_follow_left->set_text (follow_action_to_string (trigger.follow_action (1)));
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------ */
|
/* ------------ */
|
||||||
|
|
||||||
TriggerWidget::TriggerWidget (Trigger& t)
|
TriggerWidget::TriggerWidget (Trigger& t)
|
||||||
|
|
@ -84,16 +187,15 @@ TriggerWidget::size_request (double& w, double& h) const
|
||||||
TriggerWindow::TriggerWindow (Trigger& t)
|
TriggerWindow::TriggerWindow (Trigger& t)
|
||||||
{
|
{
|
||||||
TriggerWidget* tw = manage (new TriggerWidget (t));
|
TriggerWidget* tw = manage (new TriggerWidget (t));
|
||||||
set_title (_("Trigger XXXX"));
|
set_title (string_compose (_("Trigger: %1"), t.name()));
|
||||||
|
|
||||||
double w;
|
double w;
|
||||||
double h;
|
double h;
|
||||||
|
|
||||||
|
tw->show ();
|
||||||
tw->size_request (w, h);
|
tw->size_request (w, h);
|
||||||
|
|
||||||
set_default_size (w, h);
|
set_default_size (w, h);
|
||||||
add (*tw);
|
add (*tw);
|
||||||
tw->show ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,20 @@
|
||||||
|
|
||||||
#include "canvas/box.h"
|
#include "canvas/box.h"
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
#include "canvas/rectangle.h"
|
#include "canvas/constraint_packer.h"
|
||||||
|
|
||||||
|
namespace ArdourWidgets {
|
||||||
|
class ArdourButton;
|
||||||
|
}
|
||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
class Text;
|
class Text;
|
||||||
class Polygon;
|
class Polygon;
|
||||||
|
class Widget;
|
||||||
|
class Rectangle;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TriggerUI : public ArdourCanvas::Box
|
class TriggerUI : public ArdourCanvas::ConstraintPacker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerUI (ArdourCanvas::Item* parent, ARDOUR::Trigger&);
|
TriggerUI (ArdourCanvas::Item* parent, ARDOUR::Trigger&);
|
||||||
|
|
@ -39,18 +45,21 @@ class TriggerUI : public ArdourCanvas::Box
|
||||||
private:
|
private:
|
||||||
ARDOUR::Trigger& trigger;
|
ARDOUR::Trigger& trigger;
|
||||||
|
|
||||||
ArdourCanvas::Box* follow_label;
|
ArdourWidgets::ArdourButton* _follow_action_button;
|
||||||
ArdourCanvas::Text* follow_text;
|
ArdourCanvas::Widget* follow_action_button;
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* follow_left;
|
|
||||||
ArdourCanvas::Text* follow_left_text;
|
|
||||||
ArdourCanvas::Rectangle* follow_left_percentage;
|
|
||||||
ArdourCanvas::Text* follow_left_percentage_text;
|
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* follow_right;
|
ArdourWidgets::ArdourDropdown* _follow_left;
|
||||||
ArdourCanvas::Text* follow_right_text;
|
ArdourCanvas::Widget* follow_left;
|
||||||
ArdourCanvas::Rectangle* follow_right_percentage;
|
ArdourWidgets::ArdourButton* _follow_left_percentage;
|
||||||
ArdourCanvas::Text* follow_right_percentage_text;
|
ArdourCanvas::Widget* follow_left_percentage;
|
||||||
|
|
||||||
|
ArdourWidgets::ArdourDropdown* _follow_right;
|
||||||
|
ArdourCanvas::Widget* follow_right;
|
||||||
|
ArdourWidgets::ArdourButton* _follow_right_percentage;
|
||||||
|
ArdourCanvas::Widget* follow_right_percentage;
|
||||||
|
|
||||||
|
ArdourCanvas::ConstraintPacker* follow_upper_box;
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* percentage_slider;
|
ArdourCanvas::Rectangle* percentage_slider;
|
||||||
|
|
||||||
|
|
@ -65,6 +74,11 @@ class TriggerUI : public ArdourCanvas::Box
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* velocity;
|
ArdourCanvas::Rectangle* velocity;
|
||||||
ArdourCanvas::Rectangle* velocity_text;
|
ArdourCanvas::Rectangle* velocity_text;
|
||||||
|
|
||||||
|
void trigger_changed ();
|
||||||
|
|
||||||
|
static std::string follow_action_to_string (ARDOUR::Trigger::FollowAction);
|
||||||
|
static ARDOUR::Trigger::FollowAction string_to_follow_action (std::string const &);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TriggerWidget : public ArdourCanvas::GtkCanvas
|
class TriggerWidget : public ArdourCanvas::GtkCanvas
|
||||||
|
|
|
||||||
|
|
@ -404,7 +404,14 @@ TriggerBoxUI::context_menu (size_t n)
|
||||||
void
|
void
|
||||||
TriggerBoxUI::edit_trigger (size_t n)
|
TriggerBoxUI::edit_trigger (size_t n)
|
||||||
{
|
{
|
||||||
TriggerWindow* tw = new TriggerWindow (*_triggerbox.trigger (n));
|
Trigger* trigger = _triggerbox.trigger (n);
|
||||||
|
TriggerWindow* tw = static_cast<TriggerWindow*> (trigger->ui());
|
||||||
|
|
||||||
|
if (!tw) {
|
||||||
|
tw = new TriggerWindow (*_triggerbox.trigger (n));
|
||||||
|
trigger->set_ui (tw);
|
||||||
|
}
|
||||||
|
|
||||||
tw->present ();
|
tw->present ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue