Skip to content

Commit 6214f2c

Browse files
authored
Merge branch 'paceholder:master' into plugin_extension
2 parents 76b58ca + b56ad77 commit 6214f2c

7 files changed

Lines changed: 307 additions & 157 deletions

File tree

examples/resizable_images/ImageLoaderModel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ ImageLoaderModel()
1717

1818
_label->setFont(f);
1919

20-
_label->setFixedSize(200, 200);
20+
_label->setMinimumSize(200, 200);
21+
_label->setMaximumSize(500, 300);
2122

2223
_label->installEventFilter(this);
2324
}

examples/resizable_images/ImageShowModel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ ImageShowModel()
2121

2222
_label->setFont(f);
2323

24-
_label->setFixedSize(200, 200);
24+
_label->setMinimumSize(200, 200);
2525

2626
_label->installEventFilter(this);
2727
}

include/QtNodes/internal/GraphicsView.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ public Q_SLOTS:
7070
void
7171
onDuplicateSelectedObjects();
7272

73+
void
74+
onCopySelectedObjects();
75+
76+
void
77+
onPasteObjects();
78+
7379
Q_SIGNALS:
7480
void
7581
scaleChanged(double scale);
@@ -103,10 +109,16 @@ public Q_SLOTS:
103109
BasicGraphicsScene*
104110
nodeScene();
105111

112+
/// Computes scene position for pasting the copied/duplicated node groups.
113+
QPointF
114+
scenePastePosition();
115+
106116
private:
107117
QAction* _clearSelectionAction = nullptr;
108118
QAction* _deleteSelectionAction = nullptr;
109119
QAction* _duplicateSelectionAction = nullptr;
120+
QAction* _copySelectionAction = nullptr;
121+
QAction* _pasteAction = nullptr;
110122

111123
QPointF _clickPos;
112124
ScaleRange _scaleRange;

src/GraphicsView.cpp

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ GraphicsView(QWidget* parent)
3232
, _clearSelectionAction(Q_NULLPTR)
3333
, _deleteSelectionAction(Q_NULLPTR)
3434
, _duplicateSelectionAction(Q_NULLPTR)
35+
, _copySelectionAction(Q_NULLPTR)
36+
, _pasteAction(Q_NULLPTR)
3537
{
3638
setDragMode(QGraphicsView::ScrollHandDrag);
3739
setRenderHint(QPainter::Antialiasing);
@@ -128,6 +130,34 @@ setScene(BasicGraphicsScene* scene)
128130
addAction(_duplicateSelectionAction);
129131
}
130132

133+
{
134+
delete _copySelectionAction;
135+
_copySelectionAction = new QAction(QStringLiteral("Copy Selection"), this);
136+
_copySelectionAction->setShortcutContext(Qt::ShortcutContext::WidgetShortcut);
137+
_copySelectionAction->setShortcut(QKeySequence(QKeySequence::Copy));
138+
connect(_copySelectionAction,
139+
&QAction::triggered,
140+
this,
141+
&GraphicsView::onCopySelectedObjects);
142+
143+
addAction(_copySelectionAction);
144+
145+
}
146+
147+
{
148+
delete _pasteAction;
149+
_pasteAction = new QAction(QStringLiteral("Copy Selection"), this);
150+
_pasteAction->setShortcutContext(Qt::ShortcutContext::WidgetShortcut);
151+
_pasteAction->setShortcut(QKeySequence(QKeySequence::Paste));
152+
connect(_pasteAction,
153+
&QAction::triggered,
154+
this,
155+
&GraphicsView::onPasteObjects);
156+
157+
addAction(_pasteAction);
158+
159+
}
160+
131161

132162
auto undoAction = scene->undoStack().createUndoAction(this, tr("&Undo"));
133163
undoAction->setShortcuts(QKeySequence::Undo);
@@ -310,15 +340,27 @@ void
310340
GraphicsView::
311341
onDuplicateSelectedObjects()
312342
{
313-
QPoint origin = mapFromGlobal(QCursor::pos());
343+
QPointF const pastePosition = scenePastePosition();
314344

315-
QRect const viewRect = rect();
316-
if (!viewRect.contains(origin))
317-
origin = viewRect.center();
345+
nodeScene()->undoStack().push(new CopyCommand(nodeScene()));
346+
nodeScene()->undoStack().push(new PasteCommand(nodeScene(), pastePosition));
347+
}
318348

319-
QPointF relativeOrigin = mapToScene(origin);
320349

321-
nodeScene()->undoStack().push(new DuplicateCommand(nodeScene(), relativeOrigin));
350+
void
351+
GraphicsView::
352+
onCopySelectedObjects()
353+
{
354+
nodeScene()->undoStack().push(new CopyCommand(nodeScene()));
355+
}
356+
357+
358+
void
359+
GraphicsView::
360+
onPasteObjects()
361+
{
362+
QPointF const pastePosition = scenePastePosition();
363+
nodeScene()->undoStack().push(new PasteCommand(nodeScene(), pastePosition));
322364
}
323365

324366

@@ -453,3 +495,16 @@ nodeScene()
453495
return dynamic_cast<BasicGraphicsScene*>(scene());
454496
}
455497

498+
499+
QPointF
500+
GraphicsView::
501+
scenePastePosition()
502+
{
503+
QPoint origin = mapFromGlobal(QCursor::pos());
504+
505+
QRect const viewRect = rect();
506+
if (!viewRect.contains(origin))
507+
origin = viewRect.center();
508+
509+
return mapToScene(origin);
510+
}

src/NodeGraphicsObject.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,10 @@ mouseMoveEvent(QGraphicsSceneMouseEvent* event)
318318

319319
oldSize += QSize(diff.x(), diff.y());
320320

321-
w->setFixedSize(oldSize);
321+
w->resize(oldSize);
322322

323323
AbstractNodeGeometry & geometry = nodeScene()->nodeGeometry();
324324

325-
_proxyWidget->setMinimumSize(oldSize);
326-
_proxyWidget->setMaximumSize(oldSize);
327-
_proxyWidget->setPos(geometry.widgetPosition(_nodeId));
328-
329325
// Passes the new size to the model.
330326
geometry.recomputeSize(_nodeId);
331327

0 commit comments

Comments
 (0)