Fixed track drag raise behaviour

This commit is contained in:
Joel Holdsworth 2009-01-19 18:14:52 +00:00
parent 1be33426e4
commit 977cbf9e64
4 changed files with 26 additions and 38 deletions

View file

@ -183,7 +183,7 @@ bool TimelineHeaderContainer::on_button_release_event (
// Has the user been dragging?
if(layout.get_dragging_track())
end_drag();
layout.end_dragging_track();
return Container::on_button_release_event(event);
}
@ -404,38 +404,16 @@ void
TimelineHeaderContainer::begin_drag()
{
TimelineLayoutHelper &layout = timelineWidget.layoutHelper;
shared_ptr<timeline::Track> dragging_track =
layout.begin_dragging_track(mousePoint);
ENSURE(dragging_track); // Something strange has happened if we
// were somehow not hovering on a track
layout.begin_dragging_track(mousePoint);
const TimelineLayoutHelper::TrackTree::pre_order_iterator node =
layout.iterator_from_track(dragging_track->get_model_track());
set_keep_above_recursive(node, true);
// Raise all the header widgets so they float above the widgets not
// being dragged
raise_recursive(layout.get_dragging_track_iter());
}
void
TimelineHeaderContainer::end_drag()
{
TimelineLayoutHelper &layout = timelineWidget.layoutHelper;
shared_ptr<timeline::Track> dragging_track =
layout.get_dragging_track();
ENSURE(dragging_track); // Something strange has happened if we
// were somehow not dragging on a track
const TimelineLayoutHelper::TrackTree::pre_order_iterator node =
layout.iterator_from_track(dragging_track->get_model_track());
set_keep_above_recursive(node, false);
layout.end_dragging_track();
}
void
TimelineHeaderContainer::set_keep_above_recursive(
TimelineLayoutHelper::TrackTree::iterator_base node,
const bool keep_above)
TimelineHeaderContainer::raise_recursive(
TimelineLayoutHelper::TrackTree::iterator_base node)
{
TimelineLayoutHelper::TrackTree::pre_order_iterator iter;
@ -450,13 +428,13 @@ TimelineHeaderContainer::set_keep_above_recursive(
timeline_track->get_header_widget().get_window();
ENSURE(window); // Something strange has happened if there was no
// window
window->set_keep_above(keep_above);
window->raise();
for(iter = layout_tree.begin(node);
iter != layout_tree.end(node);
iter++)
{
set_keep_above_recursive(iter, keep_above);
raise_recursive(iter);
}
}

View file

@ -184,13 +184,15 @@ private:
boost::shared_ptr<model::Track> model_track);
void begin_drag();
void end_drag();
void set_keep_above_recursive(
TimelineLayoutHelper::TrackTree::iterator_base node,
const bool keep_above);
/**
* Recusively raises all the header widget windows in a branch to the
* top of the Z-order.
* @param node The window of node's track header will be raised, as
* well as all it's descendant nodes.
**/
void raise_recursive(
TimelineLayoutHelper::TrackTree::iterator_base node);
/**
* Begins, or continues a scroll slide at a given rate

View file

@ -163,6 +163,12 @@ TimelineLayoutHelper::get_dragging_track() const
return draggingTrack;
}
TimelineLayoutHelper::TrackTree::pre_order_iterator
TimelineLayoutHelper::get_dragging_track_iter() const
{
return draggingTrackIter;
}
void
TimelineLayoutHelper::drag_to_point(const Gdk::Point &point)
{

View file

@ -134,6 +134,8 @@ public:
boost::shared_ptr<timeline::Track> get_dragging_track() const;
TrackTree::pre_order_iterator get_dragging_track_iter() const;
void drag_to_point(const Gdk::Point &point);
/**