#include "ardour/location.h"
#include "ardour_ui.h"
+#include "global_signals.h"
#include "gui_thread.h"
#include "public_editor.h"
#include "time_axis_view.h"
#include "rgb_macros.h"
#include "utils.h"
#include "streamview.h"
+#include "editor_drag.h"
#include "i18n.h"
_canvas_display->hide(); // reveal as needed
selection_group = new Group (*_canvas_display);
+ selection_group->set_data (X_("timeselection"), (void *) 1);
selection_group->hide();
_ghost_group = new Group (*_canvas_display);
delete (*i)->end_trim;
}
- for (list<SimpleLine*>::iterator i = feature_lines.begin(); i != feature_lines.end(); ++i) {
- delete (*i);
- }
-
delete selection_group;
selection_group = 0;
void
TimeAxisView::step_height (bool bigger)
{
- static const uint32_t step = 20;
+ static const uint32_t step = 25;
if (bigger) {
- set_height (height + step);
+ if (height == preset_height(HeightSmall)) {
+ set_height (preset_height(HeightSmaller));
+ }
+ else if (height == preset_height(HeightSmaller)) {
+ set_height (preset_height(HeightNormal));
+ }
+ else {
+ set_height (height + step);
+ }
+
} else {
- if (height > step) {
- set_height (std::max (height - step, preset_height (HeightSmall)));
- } else if (height != preset_height (HeightSmall)) {
- set_height (HeightSmall);
+ if ( height == preset_height(HeightSmall)){
+ return;
}
+
+ if (height <= preset_height (HeightSmaller) && height > preset_height (HeightSmall)) {
+ set_height (preset_height(HeightSmall));
+ }
+ else if ( height <= preset_height (HeightNormal) && height > preset_height (HeightSmaller)){
+ set_height (preset_height(HeightSmaller));
+ }
+ else {
+ set_height (height - step);
+ }
}
}
}
void
-TimeAxisView::set_height(uint32_t h)
+TimeAxisView::set_height (uint32_t h)
{
+ if (h < preset_height (HeightSmall)) {
+ h = preset_height (HeightSmall);
+ }
+
time_axis_vbox.property_height_request () = h;
height = h;
/* resize the selection rect */
show_selection (_editor.get_selection().time);
}
-
- reshow_feature_lines ();
}
bool
AnalysisFeatureList::const_iterator i;
list<ArdourCanvas::SimpleLine*>::iterator l;
-
- for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) {
- (*l)->property_x1() = _editor.frame_to_pixel (*i);
- (*l)->property_x2() = _editor.frame_to_pixel (*i);
- }
}
void
rect->start_trim->property_x1() = x1;
rect->start_trim->property_y1() = 1.0;
rect->start_trim->property_x2() = x1 + trim_handle_size;
- rect->start_trim->property_y2() = 1.0 + trim_handle_size;
+ rect->start_trim->property_y2() = y2;
rect->end_trim->property_x1() = x2 - trim_handle_size;
rect->end_trim->property_y1() = 1.0;
rect->end_trim->property_x2() = x2;
- rect->end_trim->property_y2() = 1.0 + trim_handle_size;
+ rect->end_trim->property_y2() = y2;
rect->start_trim->show();
rect->end_trim->show();
rect = new SelectionRect;
rect->rect = new SimpleRect (*selection_group);
+ rect->rect->property_outline_what() = 0x0;
rect->rect->property_x1() = 0.0;
rect->rect->property_y1() = 0.0;
rect->rect->property_x2() = 0.0;
rect->rect->property_y2() = 0.0;
rect->rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_SelectionRect.get();
- rect->rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
rect->start_trim = new SimpleRect (*selection_group);
+ rect->start_trim->property_outline_what() = 0x0;
rect->start_trim->property_x1() = 0.0;
rect->start_trim->property_x2() = 0.0;
- rect->start_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
- rect->start_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
-
+
rect->end_trim = new SimpleRect (*selection_group);
+ rect->end_trim->property_outline_what() = 0x0;
rect->end_trim->property_x1() = 0.0;
rect->end_trim->property_x2() = 0.0;
- rect->end_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
- rect->end_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
free_selection_rects.push_front (rect);
}
}
+/** Get selectable things within a given range.
+ * @param start Start time in session frames.
+ * @param end End time in session frames.
+ * @param top Top y range, in trackview coordinates (ie 0 is the top of the track view)
+ * @param bot Bottom y range, in trackview coordinates (ie 0 is the top of the track view)
+ * @param result Filled in with selectable things.
+ */
void
-TimeAxisView::get_selectables (nframes_t /*start*/, nframes_t /*end*/, double /*top*/, double /*bot*/, list<Selectable*>& /*result*/)
+TimeAxisView::get_selectables (framepos_t /*start*/, framepos_t /*end*/, double /*top*/, double /*bot*/, list<Selectable*>& /*result*/)
{
return;
}
XMLNode&
TimeAxisView::get_state ()
{
+ /* XXX: is this method used? */
+
XMLNode* node = new XMLNode ("TAV-" + name());
char buf[32];
{
const XMLProperty *prop;
+ /* XXX: I think this might be vestigial */
if ((prop = node.property ("marked-for-display")) != 0) {
_marked_for_display = (prop->value() == "1");
}
+ if ((prop = node.property ("shown-editor")) != 0) {
+ _marked_for_display = string_is_affirmative (prop->value ());
+ }
+
if ((prop = node.property ("track-height")) != 0) {
if (prop->value() == "largest") {
const int border_width = 2;
extra_height = (2 * border_width)
//+ 2 // 2 pixels for the hseparator between TimeAxisView control areas
- + 10; // resizer button (3 x 2 pixel elements + 2 x 2 pixel gaps)
+ + 6; // resizer button (3 x 2 pixel elements + 2 x 2 pixel gaps)
window.add (one_row_table);
return std::make_pair ( (TimeAxisView *) 0, 0);
}
-void
-TimeAxisView::show_feature_lines (const AnalysisFeatureList& pos)
-{
- analysis_features = pos;
- reshow_feature_lines ();
-}
-
-
-void
-TimeAxisView::hide_feature_lines ()
-{
- list<ArdourCanvas::SimpleLine*>::iterator l;
-
- for (l = feature_lines.begin(); l != feature_lines.end(); ++l) {
- (*l)->hide();
- }
-}
-
-void
-TimeAxisView::reshow_feature_lines ()
-{
- while (feature_lines.size()< analysis_features.size()) {
- ArdourCanvas::SimpleLine* l = new ArdourCanvas::SimpleLine (*_canvas_display);
- l->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();
- feature_lines.push_back (l);
- }
-
- while (feature_lines.size() > analysis_features.size()) {
- ArdourCanvas::SimpleLine *line = feature_lines.back();
- feature_lines.pop_back ();
- delete line;
- }
-
- AnalysisFeatureList::const_iterator i;
- list<ArdourCanvas::SimpleLine*>::iterator l;
-
- for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) {
- (*l)->property_x1() = _editor.frame_to_pixel (*i);
- (*l)->property_x2() = _editor.frame_to_pixel (*i);
- (*l)->property_y1() = 0;
- (*l)->property_y2() = current_height();
- (*l)->show ();
- }
-}
-
bool
TimeAxisView::resizer_button_press (GdkEventButton* event)
{
bool
TimeAxisView::resizer_button_release (GdkEventButton*)
{
+ _editor.stop_canvas_autoscroll ();
_resize_drag_start = -1;
return true;
}
TimeAxisView::resizer_motion (GdkEventMotion* ev)
{
if (_resize_drag_start >= 0) {
+ /* (ab)use the DragManager to do autoscrolling; adjust the event coordinates
+ into the world coordinate space that DragManager::motion_handler is expecting,
+ and then fake a DragManager motion event so that when maybe_autoscroll
+ asks DragManager for the current pointer position it will get the correct
+ answers.
+ */
+ int tx, ty;
+ resizer.translate_coordinates (*control_parent, ev->x, ev->y, tx, ty);
+ ev->y = ty - _editor.get_trackview_group_vertical_offset();
+ _editor.drags()->motion_handler ((GdkEvent *) ev, false);
+ _editor.maybe_autoscroll (false, true);
+
+ /* now do the actual TAV resize */
int32_t const delta = (int32_t) floor (ev->y_root - _resize_drag_start);
_editor.add_to_idle_resize (this, delta);
_resize_drag_start = ev->y_root;
/* NOTREACHED */
return 0;
}
+
+/** @return Child time axis views that are not hidden */
+TimeAxisView::Children
+TimeAxisView::get_child_list ()
+{
+ Children c;
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ if (!(*i)->hidden()) {
+ c.push_back(*i);
+ }
+ }
+
+ return c;
+}
+
+