Add selectionPropertiesBox disposition for routes|regions|clips

This commit is contained in:
Robin Gareus 2025-07-16 22:07:24 +02:00
parent ae56743b7d
commit f4c70d2903
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
4 changed files with 50 additions and 31 deletions

View file

@ -1740,10 +1740,8 @@ Editor::region_selection_changed ()
_pianoroll->contents().show_all ();
_properties_box->show ();
} else {
if (!selection->regions.empty()) {
_bottom_hbox.pack_start(*_properties_box, true, true);
_properties_box->show ();
}
_bottom_hbox.pack_start(*_properties_box, true, true);
_properties_box->show ();
}
}

View file

@ -189,7 +189,7 @@ RoutePropertiesBox::refill_processors ()
float ui_scale = std::max<float> (1.f, UIConfiguration::instance().get_ui_scale());
int h = 100 * ui_scale;
for (auto const& ui : _proc_uis) {
h = std::max<int> (h, ui->get_preferred_height () + /* frame label */ 30 * ui_scale);
h = std::max<int> (h, ui->get_preferred_height () + /* frame label */ 34 * ui_scale);
}
h = std::min<int> (h, 300 * ui_scale);
_box.set_size_request (-1, h);

View file

@ -23,6 +23,7 @@
#include "gtkmm2ext/gui_thread.h"
#include "gtkmm2ext/utils.h"
#include "ardour/profile.h"
#include "ardour/session.h"
#include "audio_region_editor.h"
@ -45,9 +46,10 @@ using namespace ARDOUR;
using std::min;
using std::max;
SelectionPropertiesBox::SelectionPropertiesBox ()
SelectionPropertiesBox::SelectionPropertiesBox (DispositionMask mask)
: _region_editor (nullptr)
, _region_fx_box (nullptr)
, _disposition (mask)
{
init ();
@ -62,6 +64,7 @@ SelectionPropertiesBox::SelectionPropertiesBox ()
_time_info_box->set_no_show_all ();
_route_prop_box->set_no_show_all ();
_slot_prop_box->set_no_show_all ();
_region_editor_box.set_no_show_all ();
_region_editor_box.set_spacing (4);
@ -142,20 +145,15 @@ SelectionPropertiesBox::selection_changed ()
if (!_session || _session->inital_connect_or_deletion_in_progress ()) {
_time_info_box->hide ();
_route_prop_box->hide ();
_slot_prop_box->hide ();
delete_region_editor ();
return;
}
Selection& selection (Editor::instance().get_selection());
if (!selection.time.empty ()) {
_time_info_box->show ();
} else {
_time_info_box->hide ();
}
bool show_slot_properties = false;
if (!selection.triggers.empty ()) {
if (!selection.triggers.empty () && 0 != (_disposition & ShowTriggers)) {
TriggerSelection ts = selection.triggers;
TriggerEntry* entry = *ts.begin ();
TriggerReference ref = entry->trigger_reference ();
@ -163,14 +161,9 @@ SelectionPropertiesBox::selection_changed ()
_slot_prop_box->set_slot(ref);
show_slot_properties = true;
}
if (show_slot_properties) {
_slot_prop_box->show();
} else {
_slot_prop_box->hide();
}
bool show_route_properties = false;
if (!selection.tracks.empty ()) {
bool show_route_properties = ARDOUR::Profile->get_mixbus(); // XXX
if (!selection.tracks.empty () && 0 != (_disposition & ShowRoutes)) {
TimeAxisView *tav = selection.tracks.back (); //the LAST selected stripable is the clicked one. see selection.cc line ~92
RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView *>(tav);
if (rtav) {
@ -178,13 +171,8 @@ SelectionPropertiesBox::selection_changed ()
show_route_properties = true;
}
}
if (show_route_properties) {
_route_prop_box->show();
} else {
_route_prop_box->hide();
}
if (selection.regions.size () == 1) {
if (selection.regions.size () == 1 && 0 != (_disposition & ShowRegions)) {
RegionView* rv = (selection.regions.front ());
if (!_region_editor || _region_editor->region () != rv->region ()) {
delete_region_editor ();
@ -203,14 +191,38 @@ SelectionPropertiesBox::selection_changed ()
_region_fx_box = new RegionFxPropertiesBox (rv->region ());
_region_editor_box.pack_start (*_region_fx_box);
_region_editor_box.show ();
rv->RegionViewGoingAway.connect_same_thread (_region_connection, std::bind (&SelectionPropertiesBox::delete_region_editor, this));
}
_region_editor_box.show ();
} else {
/* only hide region props when selecting a track or trigger ..*/
if (_route_prop_box->get_visible () || !selection.markers.empty () || !selection.playlists.empty () || !selection.triggers.empty ()) {
/* only hide region props when selecting a track or trigger,
* but retain existing RegionEditor, when selecting another additional region.
*/
if (selection.regions.empty () || !selection.markers.empty () || !selection.playlists.empty () || !selection.triggers.empty ()) {
delete_region_editor ();
}
}
if (show_slot_properties) {
_slot_prop_box->show ();
_route_prop_box->hide ();
delete_region_editor ();
} else if (_region_editor) {
_slot_prop_box->hide ();
_route_prop_box->hide ();
_region_editor_box.show ();
} else if (show_route_properties) {
_slot_prop_box->hide ();
_route_prop_box->show ();
delete_region_editor ();
} else {
_slot_prop_box->hide ();
_route_prop_box->hide ();
delete_region_editor ();
}
if (!selection.time.empty () && 0 != (_disposition & ShowTimeInfo)) {
_time_info_box->show ();
} else {
_time_info_box->hide ();
}
}

View file

@ -40,7 +40,14 @@ class SlotPropertiesBox;
class SelectionPropertiesBox : public Gtk::HBox, public ARDOUR::SessionHandlePtr
{
public:
SelectionPropertiesBox ();
enum DispositionMask {
ShowRoutes = 0x01,
ShowRegions = 0x02,
ShowTriggers = 0x04,
ShowTimeInfo = 0x08,
};
SelectionPropertiesBox (DispositionMask dm = DispositionMask(0x07));
~SelectionPropertiesBox ();
void set_session (ARDOUR::Session*);
@ -58,6 +65,8 @@ private:
RegionEditor* _region_editor;
RegionFxPropertiesBox* _region_fx_box;
DispositionMask _disposition;
PBD::ScopedConnection _region_connection;
PBD::ScopedConnection _editor_connection;
};