reimplemented pointer default functionality
This commit is contained in:
@@ -26,7 +26,6 @@ add_subdirectory(projectexplorer)
|
||||
add_subdirectory(projecttoolbar)
|
||||
add_subdirectory(slider)
|
||||
add_subdirectory(taskview)
|
||||
add_subdirectory(timelineview)
|
||||
add_subdirectory(timelinewidget)
|
||||
add_subdirectory(timeruler)
|
||||
add_subdirectory(toolbar)
|
||||
|
||||
@@ -14,9 +14,14 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
add_subdirectory(tool)
|
||||
add_subdirectory(undo)
|
||||
add_subdirectory(view)
|
||||
|
||||
set(OLIVE_SOURCES
|
||||
${OLIVE_SOURCES}
|
||||
widget/timelinewidget/timelinescaledobject.h
|
||||
widget/timelinewidget/timelinescaledobject.cpp
|
||||
widget/timelinewidget/timelinewidget.h
|
||||
widget/timelinewidget/timelinewidget.cpp
|
||||
PARENT_SCOPE
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
TimelineWidget::TimelineWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
rubberband_(QRubberBand::Rectangle, this),
|
||||
timeline_node_(nullptr),
|
||||
playhead_(0)
|
||||
{
|
||||
@@ -584,3 +585,52 @@ void TimelineWidget::AddGhost(TimelineViewGhostItem *ghost)
|
||||
ghost_items_.append(ghost);
|
||||
views_.at(ghost->Track().type())->scene()->addItem(ghost);
|
||||
}
|
||||
|
||||
void TimelineWidget::StartRubberBandSelect(bool clear_current_selection)
|
||||
{
|
||||
rubberband_origin_ = QCursor::pos();
|
||||
rubberband_.show();
|
||||
|
||||
if (!clear_current_selection) {
|
||||
foreach (TimelineView* view, views_) {
|
||||
rubberband_already_selected_.append(view->scene()->selectedItems());
|
||||
}
|
||||
}
|
||||
|
||||
MoveRubberBandSelect();
|
||||
}
|
||||
|
||||
void TimelineWidget::MoveRubberBandSelect()
|
||||
{
|
||||
QPoint rubberband_now = QCursor::pos();
|
||||
|
||||
rubberband_.setGeometry(QRect(mapFromGlobal(rubberband_origin_), mapFromGlobal(rubberband_now)).normalized());
|
||||
|
||||
foreach (TimelineView* view, views_) {
|
||||
view->DeselectAll();
|
||||
|
||||
// Map global mouse coordinates to viewport
|
||||
|
||||
QRect mapped_rect(view->viewport()->mapFromGlobal(rubberband_origin_),
|
||||
view->viewport()->mapFromGlobal(rubberband_now));
|
||||
|
||||
// Normalize and get items in rect
|
||||
QList<QGraphicsItem*> rubberband_items = view->items(mapped_rect.normalized());
|
||||
|
||||
// Select them all
|
||||
foreach (QGraphicsItem* item, rubberband_items) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (QGraphicsItem* item, rubberband_already_selected_) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::EndRubberBandSelect()
|
||||
{
|
||||
MoveRubberBandSelect();
|
||||
rubberband_.hide();
|
||||
rubberband_already_selected_.clear();
|
||||
}
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
#define TIMELINEWIDGET_H
|
||||
|
||||
#include <QScrollBar>
|
||||
#include <QRubberBand>
|
||||
#include <QWidget>
|
||||
|
||||
#include "widget/timelineview/timelinescaledobject.h"
|
||||
#include "widget/timelineview/timelineview.h"
|
||||
#include "widget/timelinewidget/timelinescaledobject.h"
|
||||
#include "widget/timelinewidget/view/timelineview.h"
|
||||
#include "widget/timeruler/timeruler.h"
|
||||
|
||||
/**
|
||||
@@ -81,13 +82,9 @@ private:
|
||||
|
||||
const QGraphicsView::DragMode& drag_mode();
|
||||
|
||||
bool enable_default_behavior();
|
||||
|
||||
protected:
|
||||
void set_drag_mode(const QGraphicsView::DragMode& mode);
|
||||
|
||||
void set_enable_default_behavior(bool enable);
|
||||
|
||||
/**
|
||||
* @brief Retrieve the QGraphicsItem at a particular scene position
|
||||
*
|
||||
@@ -133,8 +130,6 @@ private:
|
||||
|
||||
QGraphicsView::DragMode drag_mode_;
|
||||
|
||||
bool enable_default_behavior_;
|
||||
|
||||
};
|
||||
|
||||
class PointerTool : public Tool
|
||||
@@ -190,6 +185,7 @@ private:
|
||||
bool movement_allowed_;
|
||||
bool trimming_allowed_;
|
||||
bool track_movement_allowed_;
|
||||
bool rubberband_selecting_;
|
||||
};
|
||||
|
||||
class ImportTool : public Tool
|
||||
@@ -288,6 +284,13 @@ private:
|
||||
virtual void MouseRelease(TimelineViewMouseEvent *event);
|
||||
};
|
||||
|
||||
void StartRubberBandSelect(bool clear_current_selection);
|
||||
void MoveRubberBandSelect();
|
||||
void EndRubberBandSelect();
|
||||
QRubberBand rubberband_;
|
||||
QPoint rubberband_origin_;
|
||||
QList<QGraphicsItem*> rubberband_already_selected_;
|
||||
|
||||
Tool* GetActiveTool();
|
||||
|
||||
QVector< std::shared_ptr<Tool> > tools_;
|
||||
|
||||
+10
-10
@@ -16,15 +16,15 @@
|
||||
|
||||
set(OLIVE_SOURCES
|
||||
${OLIVE_SOURCES}
|
||||
widget/timelineview/tool/hand.cpp
|
||||
widget/timelineview/tool/import.cpp
|
||||
widget/timelineview/tool/pointer.cpp
|
||||
widget/timelineview/tool/razor.cpp
|
||||
widget/timelineview/tool/ripple.cpp
|
||||
widget/timelineview/tool/rolling.cpp
|
||||
widget/timelineview/tool/slide.cpp
|
||||
widget/timelineview/tool/slip.cpp
|
||||
widget/timelineview/tool/tool.cpp
|
||||
widget/timelineview/tool/zoom.cpp
|
||||
widget/timelinewidget/tool/hand.cpp
|
||||
widget/timelinewidget/tool/import.cpp
|
||||
widget/timelinewidget/tool/pointer.cpp
|
||||
widget/timelinewidget/tool/razor.cpp
|
||||
widget/timelinewidget/tool/ripple.cpp
|
||||
widget/timelinewidget/tool/rolling.cpp
|
||||
widget/timelinewidget/tool/slide.cpp
|
||||
widget/timelinewidget/tool/slip.cpp
|
||||
widget/timelinewidget/tool/tool.cpp
|
||||
widget/timelinewidget/tool/zoom.cpp
|
||||
PARENT_SCOPE
|
||||
)
|
||||
+48
-7
@@ -35,24 +35,58 @@ TimelineWidget::PointerTool::PointerTool(TimelineWidget *parent) :
|
||||
Tool(parent),
|
||||
movement_allowed_(true),
|
||||
trimming_allowed_(true),
|
||||
track_movement_allowed_(true)
|
||||
track_movement_allowed_(true),
|
||||
rubberband_selecting_(false)
|
||||
{
|
||||
set_drag_mode(QGraphicsView::RubberBandDrag);
|
||||
set_enable_default_behavior(true);
|
||||
}
|
||||
|
||||
void TimelineWidget::PointerTool::MousePress(TimelineViewMouseEvent *event)
|
||||
{
|
||||
// We don't initiate dragging here since clicking could easily be just for selecting
|
||||
Q_UNUSED(event)
|
||||
// Main selection code
|
||||
|
||||
TimelineViewBlockItem* item = GetItemAtScenePos(event->GetCoordinates());
|
||||
|
||||
bool selectable_item = (item != nullptr && item->flags() & QGraphicsItem::ItemIsSelectable);
|
||||
|
||||
// If this item is already selected
|
||||
if (selectable_item
|
||||
&& item->isSelected()) {
|
||||
|
||||
// If shift is held, deselect it
|
||||
if (event->GetModifiers() & Qt::ShiftModifier) {
|
||||
item->setSelected(false);
|
||||
}
|
||||
|
||||
// Otherwise do nothing
|
||||
return;
|
||||
}
|
||||
|
||||
// If not holding shift, deselect all clips
|
||||
if (!(event->GetModifiers() & Qt::ShiftModifier)) {
|
||||
parent()->DeselectAll();
|
||||
}
|
||||
|
||||
if (selectable_item) {
|
||||
// Select this item
|
||||
item->setSelected(true);
|
||||
} else {
|
||||
// Start rubberband drag
|
||||
parent()->StartRubberBandSelect(!(event->GetModifiers() & Qt::ShiftModifier));
|
||||
|
||||
rubberband_selecting_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
void TimelineWidget::PointerTool::MouseMove(TimelineViewMouseEvent *event)
|
||||
{
|
||||
qDebug() << dragging_ << parent()->ghost_items_.isEmpty();
|
||||
if (rubberband_selecting_) {
|
||||
|
||||
// Now that the cursor has moved, we will assume the intention is to drag
|
||||
if (!dragging_) {
|
||||
// Process rubberband select
|
||||
parent()->MoveRubberBandSelect();
|
||||
|
||||
} else if (!dragging_) {
|
||||
// Now that the cursor has moved, we will assume the intention is to drag
|
||||
|
||||
// If we haven't started dragging yet, we'll initiate a drag here
|
||||
InitiateDrag(event->GetCoordinates());
|
||||
@@ -70,6 +104,13 @@ void TimelineWidget::PointerTool::MouseMove(TimelineViewMouseEvent *event)
|
||||
|
||||
void TimelineWidget::PointerTool::MouseRelease(TimelineViewMouseEvent *event)
|
||||
{
|
||||
if (rubberband_selecting_) {
|
||||
parent()->EndRubberBandSelect();
|
||||
|
||||
rubberband_selecting_ = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!parent()->ghost_items_.isEmpty()) {
|
||||
MouseReleaseInternal(event);
|
||||
}
|
||||
@@ -27,8 +27,7 @@
|
||||
TimelineWidget::Tool::Tool(TimelineWidget *parent) :
|
||||
dragging_(false),
|
||||
parent_(parent),
|
||||
drag_mode_(QGraphicsView::NoDrag),
|
||||
enable_default_behavior_(false)
|
||||
drag_mode_(QGraphicsView::NoDrag)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -59,21 +58,11 @@ const QGraphicsView::DragMode &TimelineWidget::Tool::drag_mode()
|
||||
return drag_mode_;
|
||||
}
|
||||
|
||||
bool TimelineWidget::Tool::enable_default_behavior()
|
||||
{
|
||||
return enable_default_behavior_;
|
||||
}
|
||||
|
||||
void TimelineWidget::Tool::set_drag_mode(const QGraphicsView::DragMode &mode)
|
||||
{
|
||||
drag_mode_ = mode;
|
||||
}
|
||||
|
||||
void TimelineWidget::Tool::set_enable_default_behavior(bool enable)
|
||||
{
|
||||
enable_default_behavior_ = enable;
|
||||
}
|
||||
|
||||
TimelineViewBlockItem *TimelineWidget::Tool::GetItemAtScenePos(const TimelineCoordinate& coord)
|
||||
{
|
||||
QMapIterator<Block*, TimelineViewBlockItem*> iterator(parent()->block_items_);
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
|
||||
set(OLIVE_SOURCES
|
||||
${OLIVE_SOURCES}
|
||||
widget/timelineview/undo/undo.h
|
||||
widget/timelineview/undo/undo.cpp
|
||||
widget/timelinewidget/undo/undo.h
|
||||
widget/timelinewidget/undo/undo.cpp
|
||||
PARENT_SCOPE
|
||||
)
|
||||
+14
-19
@@ -14,26 +14,21 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
add_subdirectory(tool)
|
||||
add_subdirectory(undo)
|
||||
|
||||
set(OLIVE_SOURCES
|
||||
${OLIVE_SOURCES}
|
||||
widget/timelineview/timelineplayhead.h
|
||||
widget/timelineview/timelineplayhead.cpp
|
||||
widget/timelineview/timelinescaledobject.h
|
||||
widget/timelineview/timelinescaledobject.cpp
|
||||
widget/timelineview/timelineview.h
|
||||
widget/timelineview/timelineview.cpp
|
||||
widget/timelineview/timelineviewmouseevent.h
|
||||
widget/timelineview/timelineviewmouseevent.cpp
|
||||
widget/timelineview/timelineviewrect.h
|
||||
widget/timelineview/timelineviewrect.cpp
|
||||
widget/timelineview/timelineviewblockitem.h
|
||||
widget/timelineview/timelineviewblockitem.cpp
|
||||
widget/timelineview/timelineviewenditem.h
|
||||
widget/timelineview/timelineviewenditem.cpp
|
||||
widget/timelineview/timelineviewghostitem.h
|
||||
widget/timelineview/timelineviewghostitem.cpp
|
||||
widget/timelinewidget/view/timelineplayhead.h
|
||||
widget/timelinewidget/view/timelineplayhead.cpp
|
||||
widget/timelinewidget/view/timelineview.h
|
||||
widget/timelinewidget/view/timelineview.cpp
|
||||
widget/timelinewidget/view/timelineviewmouseevent.h
|
||||
widget/timelinewidget/view/timelineviewmouseevent.cpp
|
||||
widget/timelinewidget/view/timelineviewrect.h
|
||||
widget/timelinewidget/view/timelineviewrect.cpp
|
||||
widget/timelinewidget/view/timelineviewblockitem.h
|
||||
widget/timelinewidget/view/timelineviewblockitem.cpp
|
||||
widget/timelinewidget/view/timelineviewenditem.h
|
||||
widget/timelinewidget/view/timelineviewenditem.cpp
|
||||
widget/timelinewidget/view/timelineviewghostitem.h
|
||||
widget/timelinewidget/view/timelineviewghostitem.cpp
|
||||
PARENT_SCOPE
|
||||
)
|
||||
+1
-1
@@ -34,7 +34,7 @@
|
||||
#include "timelineviewmouseevent.h"
|
||||
#include "timelineviewenditem.h"
|
||||
#include "timelineviewghostitem.h"
|
||||
#include "widget/timelineview/undo/undo.h"
|
||||
#include "widget/timelinewidget/undo/undo.h"
|
||||
#include "undo/undostack.h"
|
||||
|
||||
/**
|
||||
+2
-1
@@ -31,7 +31,6 @@ TimelineViewBlockItem::TimelineViewBlockItem(QGraphicsItem* parent) :
|
||||
block_(nullptr)
|
||||
{
|
||||
setBrush(Qt::white);
|
||||
setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||
}
|
||||
|
||||
Block *TimelineViewBlockItem::block()
|
||||
@@ -43,6 +42,8 @@ void TimelineViewBlockItem::SetBlock(Block *block)
|
||||
{
|
||||
block_ = block;
|
||||
|
||||
setFlag(QGraphicsItem::ItemIsSelectable, block_->type() == Block::kClip);
|
||||
|
||||
UpdateRect();
|
||||
}
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@
|
||||
#include <QGraphicsRectItem>
|
||||
|
||||
#include "timeline/timelinecoordinate.h"
|
||||
#include "timelinescaledobject.h"
|
||||
#include "../timelinescaledobject.h"
|
||||
|
||||
/**
|
||||
* @brief A base class for graphical representations of Block nodes
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <QWidget>
|
||||
|
||||
#include "common/rational.h"
|
||||
#include "widget/timelineview/timelineplayhead.h"
|
||||
#include "widget/timelinewidget/view/timelineplayhead.h"
|
||||
|
||||
class TimeRuler : public QWidget
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user