some (unfinished) work on incorporating Ben's rev 6919 changes regarding track selection; make newly selected tracks show the current range selection; fix crashes related to meter display; remove "all" group from main group tab display and just put it down in its own button (totally incomplete); minor cleanups
git-svn-id: svn://localhost/ardour2/branches/3.0@7696 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
bdb8434238
commit
1526735d79
|
@ -645,7 +645,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
|||
|
||||
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||
void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
|
||||
void set_selected_track_as_side_effect (bool force = false);
|
||||
void set_selected_track_as_side_effect (Selection::Operation op, bool force = false);
|
||||
bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set, bool no_track_remove=false);
|
||||
|
||||
bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::weak_ptr<ARDOUR::Region>);
|
||||
|
|
|
@ -3401,14 +3401,16 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
|
|||
|
||||
if (_copy) {
|
||||
/* adding to the selection */
|
||||
_editor->selection->add (_editor->clicked_axisview);
|
||||
_editor->set_selected_track_as_side_effect (Selection::Add);
|
||||
//_editor->selection->add (_editor->clicked_axisview);
|
||||
_editor->clicked_selection = _editor->selection->add (start, end);
|
||||
_copy = false;
|
||||
} else {
|
||||
/* new selection */
|
||||
|
||||
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
|
||||
_editor->selection->set (_editor->clicked_axisview);
|
||||
//_editor->selection->set (_editor->clicked_axisview);
|
||||
_editor->set_selected_track_as_side_effect (Selection::Set);
|
||||
}
|
||||
|
||||
_editor->clicked_selection = _editor->selection->set (start, end);
|
||||
|
@ -3417,6 +3419,7 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
|
|||
|
||||
/* select the track that we're in */
|
||||
if (find (_added_time_axes.begin(), _added_time_axes.end(), pending_time_axis.first) == _added_time_axes.end()) {
|
||||
// _editor->set_selected_track_as_side_effect (Selection::Add);
|
||||
_editor->selection->add (pending_time_axis.first);
|
||||
_added_time_axes.push_back (pending_time_axis.first);
|
||||
}
|
||||
|
|
|
@ -478,7 +478,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||
set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
selection->clear_tracks ();
|
||||
set_selected_track_as_side_effect (true);
|
||||
set_selected_track_as_side_effect (op, true);
|
||||
}
|
||||
if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
|
||||
clicked_selection = select_range_around_region (selection->regions.front());
|
||||
|
@ -492,7 +492,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||
set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
set_selected_track_as_side_effect ();
|
||||
set_selected_track_as_side_effect (op);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -504,12 +504,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||
set_selected_regionview_from_click (press, op, true);
|
||||
} else if (event->type == GDK_BUTTON_PRESS) {
|
||||
set_selected_track_as_side_effect ();
|
||||
set_selected_track_as_side_effect (op);
|
||||
}
|
||||
break;
|
||||
|
||||
case ControlPointItem:
|
||||
set_selected_track_as_side_effect (true);
|
||||
set_selected_track_as_side_effect (op, true);
|
||||
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
|
||||
set_selected_control_point_from_click (op, false);
|
||||
}
|
||||
|
@ -519,12 +519,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
|
|||
/* for context click, select track */
|
||||
if (event->button.button == 3) {
|
||||
selection->clear_tracks ();
|
||||
set_selected_track_as_side_effect (true);
|
||||
set_selected_track_as_side_effect (op, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case AutomationTrackItem:
|
||||
set_selected_track_as_side_effect (true);
|
||||
set_selected_track_as_side_effect (op, true);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -47,8 +47,9 @@ using namespace Gtk;
|
|||
using Gtkmm2ext::Keyboard;
|
||||
|
||||
EditorRouteGroups::EditorRouteGroups (Editor* e)
|
||||
: EditorComponent (e),
|
||||
_in_row_change (false)
|
||||
: EditorComponent (e)
|
||||
, _all_group_active_button (_("\"all\" group"))
|
||||
, _in_row_change (false)
|
||||
|
||||
{
|
||||
_model = ListStore::create (_columns);
|
||||
|
@ -135,7 +136,6 @@ EditorRouteGroups::EditorRouteGroups (Editor* e)
|
|||
|
||||
_display.signal_button_press_event().connect (sigc::mem_fun(*this, &EditorRouteGroups::button_press_event), false);
|
||||
|
||||
_display_packer = new VBox;
|
||||
HBox* button_box = manage (new HBox());
|
||||
button_box->set_homogeneous (true);
|
||||
|
||||
|
@ -158,8 +158,11 @@ EditorRouteGroups::EditorRouteGroups (Editor* e)
|
|||
button_box->pack_start (*add_button);
|
||||
button_box->pack_start (*remove_button);
|
||||
|
||||
_display_packer->pack_start (_scroller, true, true);
|
||||
_display_packer->pack_start (*button_box, false, false);
|
||||
_all_group_active_button.show ();
|
||||
|
||||
_display_packer.pack_start (_scroller, true, true);
|
||||
_display_packer.pack_start (_all_group_active_button, false, false);
|
||||
_display_packer.pack_start (*button_box, false, false);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -418,14 +421,6 @@ EditorRouteGroups::groups_changed ()
|
|||
|
||||
_model->clear ();
|
||||
|
||||
{
|
||||
TreeModel::Row row;
|
||||
row = *(_model->append());
|
||||
row[_columns.is_visible] = true;
|
||||
row[_columns.text] = (_("-all-"));
|
||||
row[_columns.routegroup] = 0;
|
||||
}
|
||||
|
||||
if (_session) {
|
||||
_session->foreach_route_group (sigc::mem_fun (*this, &EditorRouteGroups::add));
|
||||
}
|
||||
|
|
|
@ -27,10 +27,11 @@ public:
|
|||
void set_session (ARDOUR::Session *);
|
||||
|
||||
Gtk::Widget& widget () {
|
||||
return *_display_packer;
|
||||
return _display_packer;
|
||||
}
|
||||
|
||||
void clear ();
|
||||
Gtk::ToggleButton& all_group_active_button() { return _all_group_active_button; }
|
||||
|
||||
private:
|
||||
|
||||
|
@ -75,7 +76,8 @@ private:
|
|||
Glib::RefPtr<Gtk::TreeSelection> _selection;
|
||||
Gtk::TreeView _display;
|
||||
Gtk::ScrolledWindow _scroller;
|
||||
Gtk::VBox* _display_packer;
|
||||
Gtk::VBox _display_packer;
|
||||
Gtk::ToggleButton _all_group_active_button;
|
||||
bool _in_row_change;
|
||||
PBD::ScopedConnection property_changed_connection;
|
||||
};
|
||||
|
|
|
@ -174,12 +174,83 @@ Editor::select_all_tracks ()
|
|||
* tracks, in which case nothing will happen unless `force' is true.
|
||||
*/
|
||||
void
|
||||
Editor::set_selected_track_as_side_effect (bool force)
|
||||
Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force)
|
||||
{
|
||||
cerr << "E::sstase ca = " << clicked_axisview << " cr = " << clicked_routeview
|
||||
<< " op = " << op << " force = " << force
|
||||
<< endl;
|
||||
|
||||
if (!clicked_axisview) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if 1
|
||||
if (!clicked_routeview) {
|
||||
return;
|
||||
}
|
||||
|
||||
RouteGroup* group = clicked_routeview->route()->route_group();
|
||||
|
||||
switch (op) {
|
||||
case Selection::Toggle:
|
||||
if (selection->selected (clicked_axisview)) {
|
||||
if (_session->all_route_group().is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
selection->remove(*i);
|
||||
}
|
||||
} else if (group && group->is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
if ((*i)->route_group() == group)
|
||||
selection->remove(*i);
|
||||
}
|
||||
} else {
|
||||
selection->remove (clicked_axisview);
|
||||
}
|
||||
} else {
|
||||
if (_session->all_route_group().is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
selection->add(*i);
|
||||
}
|
||||
} else if (group && group->is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
if ( (*i)->route_group() == group)
|
||||
selection->add(*i);
|
||||
}
|
||||
} else {
|
||||
selection->add (clicked_axisview);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case Selection::Add:
|
||||
selection->clear();
|
||||
cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
|
||||
break;
|
||||
|
||||
case Selection::Set:
|
||||
selection->clear();
|
||||
if (_session->all_route_group().is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
selection->add(*i);
|
||||
}
|
||||
} else if (group && group->is_active()) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
|
||||
if ((*i)->route_group() == group)
|
||||
selection->add(*i);
|
||||
}
|
||||
} else {
|
||||
selection->set (clicked_axisview);
|
||||
}
|
||||
break;
|
||||
|
||||
case Selection::Extend:
|
||||
selection->clear();
|
||||
cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
|
||||
break;
|
||||
}
|
||||
|
||||
#else // the older version
|
||||
|
||||
if (!selection->tracks.empty()) {
|
||||
if (!selection->selected (clicked_axisview)) {
|
||||
selection->add (clicked_axisview);
|
||||
|
@ -188,6 +259,7 @@ Editor::set_selected_track_as_side_effect (bool force)
|
|||
} else if (force) {
|
||||
selection->set (clicked_axisview);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -797,12 +869,21 @@ Editor::track_selection_changed ()
|
|||
}
|
||||
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
(*i)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
|
||||
|
||||
bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
|
||||
|
||||
(*i)->set_selected (yn);
|
||||
|
||||
TimeAxisView::Children c = (*i)->get_child_list ();
|
||||
for (TimeAxisView::Children::iterator j = c.begin(); j != c.end(); ++j) {
|
||||
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
|
||||
}
|
||||
|
||||
if (yn) {
|
||||
(*i)->reshow_selection (selection->time);
|
||||
} else {
|
||||
(*i)->hide_selection ();
|
||||
}
|
||||
}
|
||||
|
||||
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
|
||||
|
|
|
@ -92,7 +92,6 @@ GainMeterBase::GainMeterBase (Session* s,
|
|||
ignore_toggle = false;
|
||||
meter_menu = 0;
|
||||
next_release_selects = false;
|
||||
style_changed = true;
|
||||
_width = Wide;
|
||||
|
||||
if (horizontal) {
|
||||
|
@ -915,12 +914,8 @@ GainMeter::render_metrics (Gtk::Widget& w)
|
|||
gint
|
||||
GainMeter::meter_metrics_expose (GdkEventExpose *ev)
|
||||
{
|
||||
static Glib::RefPtr<Gtk::Style> meter_style;
|
||||
if (style_changed) {
|
||||
meter_style = meter_metric_area.get_style();
|
||||
}
|
||||
Glib::RefPtr<Gdk::Window> win (meter_metric_area.get_window());
|
||||
Glib::RefPtr<Gdk::GC> bg_gc (meter_style->get_bg_gc (Gtk::STATE_INSENSITIVE));
|
||||
Glib::RefPtr<Gdk::GC> bg_gc (meter_metric_area.get_style()->get_bg_gc (Gtk::STATE_INSENSITIVE));
|
||||
GdkRectangle base_rect;
|
||||
GdkRectangle draw_rect;
|
||||
gint width, height;
|
||||
|
|
|
@ -134,7 +134,7 @@ UIConfiguration::load_state ()
|
|||
|
||||
string rcfile = user_ui_rc_file.to_string();
|
||||
|
||||
info << string_compose (_("Loading user ui configuration file %1"), rcfile) << endl;
|
||||
info << string_compose (_("Loading user ui configuration file %1"), rcfile) << endmsg;
|
||||
|
||||
if (!tree.read (rcfile)) {
|
||||
error << string_compose(_("cannot read ui configuration file \"%1\""), rcfile) << endmsg;
|
||||
|
|
|
@ -394,6 +394,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
|||
void remove_route_group (RouteGroup&);
|
||||
|
||||
RouteGroup* route_group_by_name (std::string);
|
||||
RouteGroup& all_route_group() const;
|
||||
|
||||
PBD::Signal1<void,RouteGroup*> route_group_added;
|
||||
PBD::Signal0<void> route_group_removed;
|
||||
|
@ -1171,6 +1172,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
|||
int load_route_groups (const XMLNode&, int);
|
||||
|
||||
std::list<RouteGroup *> _route_groups;
|
||||
RouteGroup* _all_route_group;
|
||||
|
||||
/* routes stuff */
|
||||
|
||||
|
|
|
@ -243,7 +243,6 @@ AudioEngine::start ()
|
|||
error << _("Cannot create temporary MIDI port to determine MIDI buffer size") << endmsg;
|
||||
} else {
|
||||
_raw_buffer_sizes[DataType::MIDI] = jack_midi_max_event_size (jack_port_get_buffer(midi_port, blocksize));
|
||||
cerr << "MIDI port buffers = " << _raw_buffer_sizes[DataType::MIDI] << endl;
|
||||
jack_port_unregister (_priv_jack, midi_port);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -158,8 +158,6 @@ MidiControlUI::thread_init ()
|
|||
strcpy (c, X_("midiUI"));
|
||||
pthread_set_name (c);
|
||||
|
||||
cerr << "MIDI UI running\n";
|
||||
|
||||
PBD::notify_gui_about_thread_creation (X_("gui"), pthread_self(), X_("MIDI"), 2048);
|
||||
SessionEvent::create_per_thread_pool (X_("MIDI I/O"), 128);
|
||||
|
||||
|
|
|
@ -136,31 +136,35 @@ Session::Session (AudioEngine &eng,
|
|||
BusProfile* bus_profile,
|
||||
string mix_template)
|
||||
|
||||
: _engine (eng),
|
||||
_target_transport_speed (0.0),
|
||||
_requested_return_frame (-1),
|
||||
_session_dir (new SessionDirectory(fullpath)),
|
||||
state_tree (0),
|
||||
_butler (new Butler (*this)),
|
||||
_post_transport_work (0),
|
||||
_send_timecode_update (false),
|
||||
route_graph (new Graph(*this)),
|
||||
routes (new RouteList),
|
||||
_total_free_4k_blocks (0),
|
||||
_bundles (new BundleList),
|
||||
_bundle_xml_node (0),
|
||||
_click_io ((IO*) 0),
|
||||
click_data (0),
|
||||
click_emphasis_data (0),
|
||||
main_outs (0),
|
||||
_metadata (new SessionMetadata()),
|
||||
_have_rec_enabled_track (false),
|
||||
_suspend_timecode_transmission (0)
|
||||
: _engine (eng)
|
||||
, _target_transport_speed (0.0)
|
||||
, _requested_return_frame (-1)
|
||||
, _session_dir (new SessionDirectory(fullpath))
|
||||
, state_tree (0)
|
||||
, _butler (new Butler (*this))
|
||||
, _post_transport_work (0)
|
||||
, _send_timecode_update (false)
|
||||
, _all_route_group (new RouteGroup (*this, "all"))
|
||||
, route_graph (new Graph(*this))
|
||||
, routes (new RouteList)
|
||||
, _total_free_4k_blocks (0)
|
||||
, _bundles (new BundleList)
|
||||
, _bundle_xml_node (0)
|
||||
, _click_io ((IO*) 0)
|
||||
, click_data (0)
|
||||
, click_emphasis_data (0)
|
||||
, main_outs (0)
|
||||
, _metadata (new SessionMetadata())
|
||||
, _have_rec_enabled_track (false)
|
||||
, _suspend_timecode_transmission (0)
|
||||
{
|
||||
_locations = new Locations (*this);
|
||||
|
||||
playlists.reset (new SessionPlaylists);
|
||||
|
||||
_all_route_group->set_edit (true);
|
||||
_all_route_group->set_active (true, this);
|
||||
|
||||
interpolation.add_channel_to (0, 0);
|
||||
|
||||
if (!eng.connected()) {
|
||||
|
@ -241,6 +245,7 @@ Session::destroy ()
|
|||
_butler->drop_references ();
|
||||
delete _butler;
|
||||
delete midi_control_ui;
|
||||
delete _all_route_group;
|
||||
|
||||
if (click_data != default_click) {
|
||||
delete [] click_data;
|
||||
|
|
|
@ -2295,6 +2295,12 @@ Session::route_group_by_name (string name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
RouteGroup&
|
||||
Session::all_route_group() const
|
||||
{
|
||||
return *_all_route_group;
|
||||
}
|
||||
|
||||
UndoTransaction*
|
||||
Session::start_reversible_command (const string& name)
|
||||
{
|
||||
|
|
|
@ -390,7 +390,9 @@ ControlList::fast_simple_add (double when, double value)
|
|||
void
|
||||
ControlList::add (double when, double value)
|
||||
{
|
||||
/* this is for graphical editing */
|
||||
/* this is for making changes from some kind of user interface or
|
||||
control surface (GUI, MIDI, OSC etc)
|
||||
*/
|
||||
|
||||
{
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
|
Loading…
Reference in New Issue
Block a user