mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-26 00:02:08 -05:00
208 lines
8.3 KiB
Plaintext
208 lines
8.3 KiB
Plaintext
/** \ingroup MapComposer
|
|
* A item that forms part of a map composition.
|
|
*/
|
|
class QgsComposerItem: QObject, QGraphicsRectItem
|
|
{
|
|
%TypeHeaderCode
|
|
#include <qgscomposeritem.h>
|
|
%End
|
|
|
|
public:
|
|
|
|
/**Describes the action (move or resize in different directon) to be done during mouse move*/
|
|
enum MouseMoveAction
|
|
{
|
|
MoveItem,
|
|
ResizeUp,
|
|
ResizeDown,
|
|
ResizeLeft,
|
|
ResizeRight,
|
|
ResizeLeftUp,
|
|
ResizeRightUp,
|
|
ResizeLeftDown,
|
|
ResizeRightDown
|
|
};
|
|
|
|
enum ItemPositionMode
|
|
{
|
|
UpperLeft,
|
|
UpperMiddle,
|
|
UpperRight,
|
|
MiddleLeft,
|
|
Middle,
|
|
MiddleRight,
|
|
LowerLeft,
|
|
LowerMiddle,
|
|
LowerRight
|
|
};
|
|
|
|
/**Constructor
|
|
@param manageZValue true if the z-Value of this object should be managed by mComposition*/
|
|
QgsComposerItem( QgsComposition* composition, bool manageZValue = true );
|
|
/**Constructor with box position and composer object
|
|
@param manageZValue true if the z-Value of this object should be managed by mComposition*/
|
|
QgsComposerItem( qreal x, qreal y, qreal width, qreal height, QgsComposition* composition, bool manageZValue = true );
|
|
virtual ~QgsComposerItem();
|
|
|
|
/** \brief Set selected, selected item should be highlighted */
|
|
virtual void setSelected( bool s );
|
|
|
|
/** \brief Is selected */
|
|
virtual bool selected();
|
|
|
|
/** stores state in project */
|
|
virtual bool writeSettings();
|
|
|
|
/** read state from project */
|
|
virtual bool readSettings();
|
|
|
|
/** delete settings from project file */
|
|
virtual bool removeSettings();
|
|
|
|
/**Moves item in canvas coordinates*/
|
|
void move( double dx, double dy );
|
|
|
|
/**Move Content of item. Does nothing per default (but implemented in composer map)
|
|
@param dx move in x-direction (canvas coordinates)
|
|
@param dy move in y-direction(canvas coordinates)*/
|
|
virtual void moveContent( double dx, double dy );
|
|
|
|
/**Zoom content of item. Does nothing per default (but implemented in composer map)
|
|
@param delta value from wheel event that describes magnitude and direction (positive /negative number)
|
|
@param x x-position of mouse cursor (in item coordinates)
|
|
@param y y-position of mouse cursor (in item coordinates)*/
|
|
virtual void zoomContent( int delta, double x, double y );
|
|
|
|
/**Moves the item to a new position (in canvas coordinates)*/
|
|
void setItemPosition( double x, double y, ItemPositionMode itemPoint = UpperLeft );
|
|
|
|
/**Sets this items bound in scene coordinates such that 1 item size units
|
|
corresponds to 1 scene size unit*/
|
|
virtual void setSceneRect( const QRectF& rectangle );
|
|
|
|
/** stores state in Dom node
|
|
* @param node is Dom node corresponding to 'Composer' tag
|
|
* @param temp write template file
|
|
*/
|
|
virtual bool writeXML( QDomElement& elem, QDomDocument & doc ) const = 0;
|
|
|
|
/**Writes parameter that are not subclass specific in document. Usually called from writeXML methods of subclasses*/
|
|
bool _writeXML( QDomElement& itemElem, QDomDocument& doc ) const;
|
|
|
|
/** sets state from Dom document
|
|
* @param itemElem is Dom node corresponding to item tag
|
|
*/
|
|
virtual bool readXML( const QDomElement& itemElem, const QDomDocument& doc ) = 0;
|
|
|
|
/**Reads parameter that are not subclass specific in document. Usually called from readXML methods of subclasses*/
|
|
bool _readXML( const QDomElement& itemElem, const QDomDocument& doc );
|
|
|
|
|
|
|
|
bool frame() const;
|
|
void setFrame( bool drawFrame );
|
|
|
|
/**Composite operations for item groups do nothing per default*/
|
|
virtual void addItem( QgsComposerItem* item );
|
|
virtual void removeItems();
|
|
|
|
const QgsComposition* composition() const;
|
|
|
|
//functions that encapsulate the workaround for the Qt font bug (that is to scale the font size up and then scale the
|
|
//painter down by the same factor for drawing
|
|
|
|
/**Draws Text. Takes care about all the composer specific issues (calculation to pixel, scaling of font and painter
|
|
to work arount the Qt font bug)*/
|
|
void drawText( QPainter* p, int x, int y, const QString& text, const QFont& font ) const;
|
|
|
|
/**Like the above, but with a rectangle for multiline text*/
|
|
void drawText( QPainter* p, const QRectF& rect, const QString& text, const QFont& font ) const;
|
|
|
|
/**Returns the font width in Millimeters (considers upscaling and downscaling with FONT_WORKAROUND_SCALE*/
|
|
double textWidthMillimeters( const QFont& font, const QString& text ) const;
|
|
|
|
/**Returns the font ascent in Millimeters (considers upscaling and downscaling with FONT_WORKAROUND_SCALE*/
|
|
double fontAscentMillimeters( const QFont& font ) const;
|
|
|
|
/**Calculates font to from point size to pixel size*/
|
|
double pixelFontSize( double pointSize ) const;
|
|
|
|
/**Returns a font where size is in pixel and font size is upscaled with FONT_WORKAROUND_SCALE*/
|
|
QFont scaledFontPixelSize( const QFont& font ) const;
|
|
|
|
/**Locks / unlocks the item position for mouse drags
|
|
@note this method was added in version 1.2*/
|
|
void setPositionLock( bool lock );
|
|
|
|
/**Returns position lock for mouse drags (true means locked)
|
|
@note this method was added in version 1.2*/
|
|
bool positionLock() const;
|
|
|
|
/**Update mouse cursor at (item) position
|
|
@note this method was added in version 1.2*/
|
|
void updateCursor( const QPointF& itemPos );
|
|
|
|
double rotation() const;
|
|
|
|
public slots:
|
|
void setRotation( double r);
|
|
|
|
protected:
|
|
|
|
//event handlers
|
|
virtual void mouseMoveEvent( QGraphicsSceneMouseEvent * event );
|
|
virtual void mousePressEvent( QGraphicsSceneMouseEvent * event );
|
|
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event );
|
|
|
|
virtual void hoverMoveEvent( QGraphicsSceneHoverEvent * event );
|
|
|
|
/**Finds out the appropriate cursor for the current mouse position in the widget (e.g. move in the middle, resize at border)*/
|
|
Qt::CursorShape cursorForPosition( const QPointF& itemCoordPos );
|
|
|
|
/**Finds out which mouse move action to choose depending on the cursor position inside the widget*/
|
|
QgsComposerItem::MouseMoveAction mouseMoveActionForPosition( const QPointF& itemCoordPos );
|
|
|
|
/**Changes the rectangle of an item depending on current mouse action (resize or move)
|
|
@param currentPosition current position of mouse cursor
|
|
@param mouseMoveStartPos cursor position at the start of the current mouse action
|
|
@param originalItem Item position at the start of the mouse action
|
|
@param dx x-Change of mouse cursor
|
|
@param dy y-Change of mouse cursor
|
|
@param changeItem Item to change size (can be the same as originalItem or a differen one)
|
|
*/
|
|
void changeItemRectangle( const QPointF& currentPosition, const QPointF& mouseMoveStartPos, const QGraphicsRectItem* originalItem, double dx, double dy, QGraphicsRectItem* changeItem );
|
|
|
|
/**Draw selection boxes around item*/
|
|
virtual void drawSelectionBoxes( QPainter* p );
|
|
|
|
/**Draw black frame around item*/
|
|
virtual void drawFrame( QPainter* p );
|
|
|
|
/**Draw background*/
|
|
virtual void drawBackground( QPainter* p );
|
|
|
|
/**Returns the current (zoom level dependent) tolerance to decide if mouse position is close enough to the \
|
|
item border for resizing*/
|
|
double rectHandlerBorderTolerance() const;
|
|
|
|
/**Returns the size of the lock symbol depending on the composer zoom level and the item size
|
|
@note: this function was introduced in version 1.2*/
|
|
double lockSymbolSize() const;
|
|
|
|
/**Returns the zoom factor of the graphics view.
|
|
@return the factor or -1 in case of error (e.g. graphic view does not exist)
|
|
@note: this function was introduced in version 1.2*/
|
|
double horizontalViewScaleFactor() const;
|
|
|
|
/**Calculates width and hight of the picture (in mm) such that it fits into the item frame with the given rotation*/
|
|
bool imageSizeConsideringRotation( double& width, double& height ) const;
|
|
/**Calculates corner point after rotation and scaling*/
|
|
bool cornerPointOnRotatedAndScaledRect( double& x, double& y, double width, double height ) const;
|
|
/**Returns a point on the line from startPoint to directionPoint that is a certain distance away from the starting point*/
|
|
QPointF pointOnLineWithDistance( const QPointF& startPoint, const QPointF& directionPoint, double distance ) const;
|
|
|
|
signals:
|
|
/**Is emitted on rotation change to notify north arrow pictures*/
|
|
void rotationChanged( double newRotation );
|
|
};
|