ViewWidget: Moved in unified accept_drag
[pulseview.git] / pv / view / viewwidget.cpp
index 357b6fea5648d3f3dba4908b9d04c22624a6d266..9408a2de6b6793968317207aff32452e593054be 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+#include <algorithm>
+
+#include "rowitem.hpp"
+#include "timeitem.hpp"
 #include "view.hpp"
 #include "viewwidget.hpp"
 
+using std::any_of;
+using std::shared_ptr;
+using std::vector;
+
 namespace pv {
 namespace view {
 
@@ -30,5 +38,37 @@ ViewWidget::ViewWidget(View &parent) :
 {
 }
 
+bool ViewWidget::accept_drag() const
+{
+       const vector< shared_ptr<TimeItem> > items(view_.time_items());
+
+       const bool any_row_items_selected = any_of(view_.begin(), view_.end(),
+               [](const shared_ptr<RowItem> &r) { return r->selected(); });
+
+       const bool any_time_items_selected = any_of(items.begin(), items.end(),
+               [](const shared_ptr<TimeItem> &i) { return i->selected(); });
+
+       if (any_row_items_selected && !any_time_items_selected)
+       {
+               // Check all the drag items share a common owner
+               RowItemOwner *item_owner = nullptr;
+               for (shared_ptr<RowItem> r : view_)
+                       if (r->dragging()) {
+                               if (!item_owner)
+                                       item_owner = r->owner();
+                               else if(item_owner != r->owner())
+                                       return false;
+                       }
+
+               return true;
+       }
+       else if (any_time_items_selected && !any_row_items_selected)
+       {
+               return true;
+       }
+
+       return false;
+}
+
 } // namespace view
 } // namespace pv