summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-11-10 18:29:32 +0000
committerCarl Hetherington <carl@carlh.net>2010-11-10 18:29:32 +0000
commitba8b84eed159b5c6282b176ccd488134a9ea5b72 (patch)
tree1e439936e007d6da7aa190b33a28b9fadff559e1 /gtk2_ardour
parent4d5f26902dd366cfde94ce6d3006cb8ea247a061 (diff)
Option to show lines below markers (#3529).
git-svn-id: svn://localhost/ardour2/branches/3.0@7993 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus.in1
-rw-r--r--gtk2_ardour/editor.cc50
-rw-r--r--gtk2_ardour/editor.h34
-rw-r--r--gtk2_ardour/editor_actions.cc2
-rw-r--r--gtk2_ardour/editor_canvas.cc4
-rw-r--r--gtk2_ardour/editor_markers.cc70
6 files changed, 116 insertions, 45 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index fb8ec25496..e7d8eff8f1 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -439,6 +439,7 @@
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='ToggleSummary'/>
<menuitem action='ToggleGroupTabs'/>
+ <menuitem action='show-marker-lines'/>
</menu>
<menu name='JACK' action='JACK'>
<menuitem action='JACKDisconnect'/>
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 950208b19e..7d4532cee8 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -739,6 +739,8 @@ Editor::Editor ()
_last_region_menu_was_main = false;
_popup_region_menu_item = 0;
+ _show_marker_lines = false;
+
constructed = true;
instant_save ();
@@ -2342,38 +2344,45 @@ Editor::set_state (const XMLNode& node, int /*version*/)
if ((prop = node.property ("show-editor-mixer"))) {
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer"));
- if (act) {
+ assert (act);
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- bool yn = string_is_affirmative (prop->value());
-
- /* do it twice to force the change */
-
- tact->set_active (!yn);
- tact->set_active (yn);
- }
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ bool yn = string_is_affirmative (prop->value());
+
+ /* do it twice to force the change */
+
+ tact->set_active (!yn);
+ tact->set_active (yn);
}
if ((prop = node.property ("show-editor-list"))) {
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-list"));
- assert(act);
- if (act) {
-
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- bool yn = string_is_affirmative (prop->value());
+ assert (act);
- /* do it twice to force the change */
-
- tact->set_active (!yn);
- tact->set_active (yn);
- }
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ bool yn = string_is_affirmative (prop->value());
+
+ /* do it twice to force the change */
+
+ tact->set_active (!yn);
+ tact->set_active (yn);
}
if ((prop = node.property (X_("editor-list-page")))) {
the_notebook.set_current_page (atoi (prop->value ()));
}
+ if ((prop = node.property (X_("show-marker-lines")))) {
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("show-marker-lines"));
+ assert (act);
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ bool yn = string_is_affirmative (prop->value ());
+
+ tact->set_active (!yn);
+ tact->set_active (yn);
+ }
+
XMLNodeList children = node.children ();
for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) {
selection->set_state (**i, Stateful::current_state_version);
@@ -2466,6 +2475,8 @@ Editor::get_state ()
snprintf (buf, sizeof (buf), "%d", the_notebook.get_current_page ());
node->add_property (X_("editor-list-page"), buf);
+ node->add_property (X_("show-marker-lines"), _show_marker_lines ? "yes" : "no");
+
node->add_child_nocopy (selection->get_state ());
node->add_child_nocopy (_regions->get_state ());
@@ -5496,3 +5507,4 @@ Editor::action_menu_item (std::string const & name)
{
return *manage (editor_actions->get_action(name)->create_menu_item ());
}
+
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index fb23a811e3..ae4161245c 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -576,6 +576,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
gint really_remove_marker (ARDOUR::Location* loc);
void goto_nth_marker (int nth);
+ void toggle_marker_lines ();
+ void set_marker_line_visibility (bool);
uint32_t location_marker_color;
uint32_t location_range_color;
@@ -584,24 +586,30 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
uint32_t location_cd_marker_color;
struct LocationMarkers {
- Marker* start;
- Marker* end;
- bool valid;
-
- LocationMarkers () : start(0), end(0), valid (true) {}
-
- ~LocationMarkers ();
-
- void hide();
- void show ();
- void set_name (const std::string&);
- void set_position (framepos_t start, framepos_t end = 0);
- void set_color_rgba (uint32_t);
+ Marker* start;
+ Marker* end;
+ bool valid;
+
+ LocationMarkers () : start(0), end(0), valid (true) {}
+
+ ~LocationMarkers ();
+
+ void hide ();
+ void show ();
+
+ void hide_lines ();
+ void show_lines (ArdourCanvas::Group *, double);
+ void set_lines_vpos (double, double);
+
+ void set_name (const std::string&);
+ void set_position (framepos_t start, framepos_t end = 0);
+ void set_color_rgba (uint32_t);
};
LocationMarkers *find_location_markers (ARDOUR::Location *) const;
ARDOUR::Location* find_location_from_marker (Marker *, bool& is_start) const;
Marker* entered_marker;
+ bool _show_marker_lines;
typedef std::map<ARDOUR::Location*,LocationMarkers *> LocationMarkerMap;
LocationMarkerMap location_markers;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 525d20e322..d40e4766ee 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -579,6 +579,8 @@ Editor::register_actions ()
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-sync"), _("Snap to Region Sync"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionSync)));
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to Region Boundary"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary)));
+ ActionManager::register_toggle_action (editor_actions, X_("show-marker-lines"), _("Show Marker Lines"), sigc::mem_fun (*this, &Editor::toggle_marker_lines));
+
/* RULERS */
Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers"));
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 15431a8eb8..c49885524b 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -341,8 +341,8 @@ Editor::track_canvas_size_allocated ()
playhead_cursor->set_length (_canvas_height);
}
- for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
- (*x)->set_line_vpos (0, _canvas_height);
+ for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ i->second->set_lines_vpos (0, _canvas_height);
}
vertical_adjustment.set_page_size (_canvas_height);
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 053080fb49..0eab51260f 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -145,6 +145,12 @@ Editor::add_new_location (Location *location)
selection->set (lam->start);
select_new_marker = false;
}
+
+ if (_show_marker_lines) {
+ lam->show_lines (cursor_group, _canvas_height);
+ } else {
+ lam->hide_lines ();
+ }
}
void
@@ -356,14 +362,48 @@ void
Editor::LocationMarkers::hide()
{
start->hide ();
- if (end) { end->hide(); }
+ if (end) {
+ end->hide ();
+ }
}
void
Editor::LocationMarkers::show()
{
start->show ();
- if (end) { end->show(); }
+ if (end) {
+ end->show ();
+ }
+}
+
+void
+Editor::LocationMarkers::show_lines (ArdourCanvas::Group* g, double h)
+{
+ /* add_line may be required, and it calls show_line even if it isn't */
+
+ start->add_line (g, 0, h);
+
+ if (end) {
+ end->add_line (g, 0, h);
+ }
+}
+
+void
+Editor::LocationMarkers::hide_lines ()
+{
+ start->hide_line ();
+ if (end) {
+ end->hide_line ();
+ }
+}
+
+void
+Editor::LocationMarkers::set_lines_vpos (double y, double h)
+{
+ start->set_line_vpos (y, h);
+ if (end) {
+ end->set_line_vpos (y, h);
+ }
}
void
@@ -1203,15 +1243,9 @@ Editor::marker_selection_changed ()
return;
}
- for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
- LocationMarkers* lam = i->second;
-
- if (lam->start) {
- lam->start->hide_line();
- }
-
- if (lam->end) {
- lam->end->hide_line();
+ if (!_show_marker_lines) {
+ for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ i->second->hide_lines ();
}
}
@@ -1277,3 +1311,17 @@ Editor::toggle_marker_menu_glue ()
}
}
+
+void
+Editor::toggle_marker_lines ()
+{
+ _show_marker_lines = !_show_marker_lines;
+
+ for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
+ if (_show_marker_lines) {
+ i->second->show_lines (cursor_group, _canvas_height);
+ } else {
+ i->second->hide_lines ();
+ }
+ }
+}