QGIS API Documentation 3.41.0-Master (3440c17df1d)
Loading...
Searching...
No Matches
qgslayoutview.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutview.h
3 ---------------
4 Date : July 2017
5 Copyright : (C) 2017 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17#ifndef QGSLAYOUTVIEW_H
18#define QGSLAYOUTVIEW_H
19
20#include "qgis_sip.h"
21#include "qgsprevieweffect.h" // for QgsPreviewEffect::PreviewMode
22#include "qgis_gui.h"
23#include "qgslayoutitempage.h"
24#include "qgslayoutaligner.h"
25#include "qgslayoutviewtool.h"
26#include <QPointer>
27#include <QGraphicsView>
28#include <QGraphicsRectItem>
29#include <memory>
30
31class QMenu;
32class QgsLayout;
36class QgsLayoutRuler;
38class QgsLayoutViewSnapMarker;
39class QgsLayoutReportSectionLabel;
40class QgsScreenHelper;
41
49class GUI_EXPORT QgsLayoutView: public QGraphicsView
50{
51
52#ifdef SIP_RUN
54 if ( qobject_cast<QgsLayoutView *>( sipCpp ) )
55 sipType = sipType_QgsLayoutView;
56 else
57 sipType = NULL;
59#endif
60
61 Q_OBJECT
62
63 Q_PROPERTY( QgsLayout *currentLayout READ currentLayout WRITE setCurrentLayout NOTIFY layoutSet )
64 Q_PROPERTY( QgsLayoutViewTool *tool READ tool WRITE setTool NOTIFY toolSet )
65
66 public:
67
74
82
86 QgsLayoutView( QWidget *parent SIP_TRANSFERTHIS = nullptr );
87
88 ~QgsLayoutView() override;
89
96
102 SIP_SKIP const QgsLayout *currentLayout() const;
103
109 void setCurrentLayout( QgsLayout *layout SIP_KEEPREFERENCE );
110
116
122 void setTool( QgsLayoutViewTool *tool );
123
131 void unsetTool( QgsLayoutViewTool *tool );
132
138 void setPreviewModeEnabled( bool enabled );
139
144 bool previewModeEnabled() const;
145
152 void setPreviewMode( QgsPreviewEffect::PreviewMode mode );
153
160 QgsPreviewEffect::PreviewMode previewMode() const;
161
166 void scaleSafe( double scale );
167
171 void setZoomLevel( double level );
172
177 void setHorizontalRuler( QgsLayoutRuler *ruler );
178
183 void setVerticalRuler( QgsLayoutRuler *ruler );
184
189 void setMenuProvider( QgsLayoutViewMenuProvider *provider SIP_TRANSFER );
190
195 QgsLayoutViewMenuProvider *menuProvider() const;
196
203 int currentPage() const { return mCurrentPage; }
204
209 QList< QgsLayoutItemPage * > visiblePages() const;
210
215 QList< int > visiblePageNumbers() const;
216
222 void alignSelectedItems( QgsLayoutAligner::Alignment alignment );
223
229 void distributeSelectedItems( QgsLayoutAligner::Distribution distribution );
230
236 void resizeSelectedItems( QgsLayoutAligner::Resize resize );
237
243 void copySelectedItems( ClipboardOperation operation );
244
250 void copyItems( const QList< QgsLayoutItem * > &items, ClipboardOperation operation );
251
260 QList< QgsLayoutItem * > pasteItems( PasteMode mode );
261
271 QList< QgsLayoutItem * > pasteItems( QPointF layoutPoint );
272
277 bool hasItemsInClipboard() const;
278
283 QPointF deltaForKeyEvent( QKeyEvent *event );
284
290 void setPaintingEnabled( bool enabled ); SIP_SKIP
291
296 void setSectionLabel( const QString &label );
297
298 public slots:
299
306 void zoomFull();
307
314 void zoomWidth();
315
322 void zoomIn();
323
330 void zoomOut();
331
338 void zoomActual();
339
345 // NOTE - I realize these emitXXX methods are gross, but there's no clean
346 // alternative here. We can't override the non-virtual Qt QGraphicsView
347 // methods, and adding our own renamed methods which call the base class
348 // methods also adds noise to the API.
349 void emitZoomLevelChanged();
350
351 // Why are these select methods in the view and not in the scene (QgsLayout)?
352 // Well, in my opinion selections are purely a GUI concept. Ideally
353 // NONE of the selection handling would be done in core, but we're restrained
354 // by the QGraphicsScene API here.
355
363 void selectAll();
364
370 void deselectAll();
371
378 void invertSelection();
379
386 void selectNextItemAbove();
387
394 void selectNextItemBelow();
395
402 void raiseSelectedItems();
403
410 void lowerSelectedItems();
411
418 void moveSelectedItemsToTop();
419
426 void moveSelectedItemsToBottom();
427
433 void lockSelectedItems();
434
439 void unlockAllItems();
440
445 void deleteSelectedItems();
446
451 void deleteItems( const QList< QgsLayoutItem * > &items );
452
457 void groupSelectedItems();
458
463 void ungroupSelectedItems();
464
471 void viewChanged();
472
479 void pushStatusMessage( const QString &message );
480
481 signals:
482
488 void layoutSet( QgsLayout *layout );
489
495
500
506 void cursorPosChanged( QPointF layoutPoint );
507
514 void pageChanged( int page );
515
521 void statusMessage( const QString &message );
522
528
534
535 protected:
536 void mousePressEvent( QMouseEvent *event ) override;
537 void mouseReleaseEvent( QMouseEvent *event ) override;
538 void mouseMoveEvent( QMouseEvent *event ) override;
539 void mouseDoubleClickEvent( QMouseEvent *event ) override;
540 void wheelEvent( QWheelEvent *event ) override;
541 void keyPressEvent( QKeyEvent *event ) override;
542 void keyReleaseEvent( QKeyEvent *event ) override;
543 void resizeEvent( QResizeEvent *event ) override;
544 void scrollContentsBy( int dx, int dy ) override;
545 void dragEnterEvent( QDragEnterEvent *e ) override;
546 void paintEvent( QPaintEvent *event ) override;
547
548 private slots:
549
550 void invalidateCachedRenders();
551
552 private:
553
555 void wheelZoom( QWheelEvent *event );
556
557 QgsScreenHelper *mScreenHelper = nullptr;
558
559 QPointer< QgsLayoutViewTool > mTool;
560
561 QgsLayoutViewToolTemporaryKeyPan *mSpacePanTool = nullptr;
562 QgsLayoutViewToolTemporaryMousePan *mMidMouseButtonPanTool = nullptr;
563 QgsLayoutViewToolTemporaryKeyZoom *mSpaceZoomTool = nullptr;
564
565 QPoint mMouseCurrentXY;
566
567 QgsLayoutRuler *mHorizontalRuler = nullptr;
568 QgsLayoutRuler *mVerticalRuler = nullptr;
569 std::unique_ptr< QgsLayoutViewMenuProvider > mMenuProvider;
570
571 QgsLayoutViewSnapMarker *mSnapMarker = nullptr;
572 QgsLayoutReportSectionLabel *mSectionLabel = nullptr;
573
574 QGraphicsLineItem *mHorizontalSnapLine = nullptr;
575 QGraphicsLineItem *mVerticalSnapLine = nullptr;
576
577 int mCurrentPage = 0;
578
579 QgsPreviewEffect *mPreviewEffect = nullptr;
580
581 bool mPaintingEnabled = true;
582
583 friend class TestQgsLayoutView;
584 friend class QgsLayoutMouseHandles;
585
586 QGraphicsLineItem *createSnapLine() const;
587};
588
589
601{
602 public:
603 virtual ~QgsLayoutViewMenuProvider() = default;
604
606 virtual QMenu *createContextMenu( QWidget *parent SIP_TRANSFER, QgsLayout *layout, QPointF layoutPoint ) const = 0 SIP_FACTORY;
607};
608
609
610#ifndef SIP_RUN
612
613
618class GUI_EXPORT QgsLayoutViewSnapMarker : public QGraphicsRectItem
619{
620 public:
621
622 QgsLayoutViewSnapMarker();
623
624 void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr ) override;
625
626 private:
627
628 int mSize = 0;
629
630};
631
633#endif
634
635#endif // QGSLAYOUTVIEW_H
Alignment
Alignment options.
Resize
Resize options.
Distribution
Distribution options.
Base class for graphical items within a QgsLayout.
A custom ruler widget for use with QgsLayoutView, displaying the current zoom and position of the vis...
Interface for a QgsLayoutView context menu.
virtual QMenu * createContextMenu(QWidget *parent, QgsLayout *layout, QPointF layoutPoint) const =0
Returns a newly created menu instance (or nullptr on error)
virtual ~QgsLayoutViewMenuProvider()=default
Layout view tool for temporarily panning a layout while a key is depressed.
Layout view tool for temporarily zooming a layout while a key is depressed.
Layout view tool for temporarily panning a layout while a mouse button is depressed.
Abstract base class for all layout view tools.
A graphical widget to display and interact with QgsLayouts.
void cursorPosChanged(QPointF layoutPoint)
Emitted when the mouse cursor coordinates change within the view.
PasteMode
Paste modes.
@ PasteModeCenter
Paste items in center of view.
@ PasteModeInPlace
Paste items in place.
@ PasteModeCursor
Paste items at cursor position.
void zoomLevelChanged()
Emitted whenever the zoom level of the view is changed.
void willBeDeleted()
Emitted in the destructor when the view is about to be deleted, but is still in a perfectly valid sta...
QgsLayout * currentLayout()
Returns the current layout associated with the view.
void statusMessage(const QString &message)
Emitted when the view has a message for display in a parent window's status bar.
void itemFocused(QgsLayoutItem *item)
Emitted when an item is "focused" in the view, i.e.
void layoutSet(QgsLayout *layout)
Emitted when a layout is set for the view.
int currentPage() const
Returns the page visible in the view.
ClipboardOperation
Clipboard operations.
@ ClipboardCut
Cut items.
@ ClipboardCopy
Copy items.
QgsLayoutViewTool * tool()
Returns the currently active tool for the view.
void toolSet(QgsLayoutViewTool *tool)
Emitted when the current tool is changed.
void pageChanged(int page)
Emitted when the page visible in the view is changed.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition qgslayout.h:49
A graphics effect which can be applied to a widget to simulate various printing and color blindness m...
A utility class for dynamic handling of changes to screen properties.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_KEEPREFERENCE
Definition qgis_sip.h:86
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_END
Definition qgis_sip.h:208