/usr/include/qgis/qgscomposerarrow.h is in libqgis-dev 2.8.6+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | /***************************************************************************
qgscomposerarrow.h
----------------------
begin : November 2009
copyright : (C) 2009 by Marco Hugentobler
email : marco@hugis.net
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCOMPOSERARROW_H
#define QGSCOMPOSERARROW_H
#include "qgscomposeritem.h"
#include <QBrush>
#include <QPen>
class QgsLineSymbolV2;
/**An item that draws an arrow between to points*/
class CORE_EXPORT QgsComposerArrow: public QgsComposerItem
{
public:
enum MarkerMode
{
DefaultMarker,
NoMarker,
SVGMarker
};
/**Constructor
* @param c parent composition
*/
QgsComposerArrow( QgsComposition* c );
/**Constructor
* @param startPoint start point for line
* @param stopPoint end point for line
* @param c parent composition
*/
QgsComposerArrow( const QPointF& startPoint, const QPointF& stopPoint, QgsComposition* c );
~QgsComposerArrow();
/** Return composer item type. */
virtual int type() const override { return ComposerArrow; }
/** \brief Reimplementation of QCanvasItem::paint - draw on canvas */
void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget ) override;
/**Modifies position of start and endpoint and calls QgsComposerItem::setSceneRect
*/
void setSceneRect( const QRectF& rectangle ) override;
/**Sets the width of the arrow head in mm
* @param width width of arrow head
* @see arrowHeadWidth
*/
void setArrowHeadWidth( double width );
/**Returns the width of the arrow head in mm
* @returns width of arrow head
* @see setArrowHeadWidth
*/
double arrowHeadWidth() const { return mArrowHeadWidth; }
/**Sets the pen width for drawing the line and arrow head
* @deprecated use setArrowHeadOutlineWidth or setLineSymbol instead
*/
Q_DECL_DEPRECATED void setOutlineWidth( double width );
/**Returns the pen width for drawing the line and arrow head
* @deprecated use arrowHeadOutlineWidth or lineSymbol instead
*/
Q_DECL_DEPRECATED double outlineWidth() const;
/**Sets the marker to draw at the start of the line
* @param svgPath file path for svg marker graphic to draw
* @see startMarker
* @see setEndMarker
*/
void setStartMarker( const QString& svgPath );
/**Returns the marker drawn at the start of the line
* @returns file path for svg marker graphic
* @see setStartMarker
* @see endMarker
*/
QString startMarker() const { return mStartMarkerFile; }
/**Sets the marker to draw at the end of the line
* @param svgPath file path for svg marker graphic to draw
* @see endMarker
* @see setStartMarker
*/
void setEndMarker( const QString& svgPath );
/**Returns the marker drawn at the end of the line
* @returns file path for svg marker graphic
* @see setEndMarker
* @see startMarker
*/
QString endMarker() const { return mEndMarkerFile; }
/**Returns the color for the line and arrow head
* @deprecated use arrowHeadOutlineColor, arrowHeadFillColor or lineStyle instead
*/
Q_DECL_DEPRECATED QColor arrowColor() const;
/**Sets the color for the line and arrow head
* @deprecated use setArrowHeadOutlineColor, setArrowHeadFillColor or setLineStyle instead
*/
Q_DECL_DEPRECATED void setArrowColor( const QColor& c );
/**Returns the color used to draw outline around the the arrow head.
* @returns arrow head outline color
* @see arrowHeadFillColor
* @see setArrowHeadOutlineColor
* @note added in 2.5
*/
QColor arrowHeadOutlineColor() const { return mArrowHeadOutlineColor; }
/**Sets the color used to draw the outline around the arrow head.
* @param color arrow head outline color
* @see setArrowHeadFillColor
* @see arrowHeadOutlineColor
* @note added in 2.5
*/
void setArrowHeadOutlineColor( const QColor& color );
/**Returns the color used to fill the arrow head.
* @returns arrow head fill color
* @see arrowHeadOutlineColor
* @see setArrowHeadFillColor
* @note added in 2.5
*/
QColor arrowHeadFillColor() const { return mArrowHeadFillColor; }
/**Sets the color used to fill the arrow head.
* @param color arrow head fill color
* @see arrowHeadFillColor
* @see setArrowHeadOutlineColor
* @note added in 2.5
*/
void setArrowHeadFillColor( const QColor& color );
/**Sets the pen width for the outline of the arrow head
* @param width pen width for arrow head outline
* @see arrowHeadOutlineWidth
* @see setArrowHeadOutlineColor
* @note added in 2.5
*/
void setArrowHeadOutlineWidth( const double width );
/**Returns the pen width for the outline of the arrow head
* @returns pen width for arrow head outline
* @see setArrowHeadOutlineWidth
* @see arrowHeadOutlineColor
* @note added in 2.5
*/
double arrowHeadOutlineWidth() const { return mArrowHeadOutlineWidth; }
/**Sets the line symbol used for drawing the line portion of the arrow
* @param symbol line symbol
* @see lineSymbol
* @note added in 2.5
*/
void setLineSymbol( QgsLineSymbolV2* symbol );
/**Returns the line symbol used for drawing the line portion of the arrow
* @returns line symbol
* @see setLineSymbol
* @note added in 2.5
*/
QgsLineSymbolV2* lineSymbol() { return mLineSymbol; }
/**Returns marker mode, which controls how the arrow endpoints are drawn
* @returns marker mode
* @see setMarkerMode
*/
MarkerMode markerMode() const { return mMarkerMode; }
/**Sets the marker mode, which controls how the arrow endpoints are drawn
* @param mode marker mode
* @see setMarkerMode
*/
void setMarkerMode( MarkerMode mode );
/**Stores state in DOM element
* @param elem is DOM element corresponding to 'Composer' tag
* @param doc document
*/
bool writeXML( QDomElement& elem, QDomDocument & doc ) const override;
/**Sets state from DOM document
* @param itemElem is DOM node corresponding to item tag
* @param doc is the document to read
*/
bool readXML( const QDomElement& itemElem, const QDomDocument& doc ) override;
private:
enum MarkerType
{
StartMarker,
EndMarker
};
QPointF mStartPoint;
QPointF mStopPoint;
/**Considering the rectangle as spanning [x[0], x[1]] x [y[0], y[1]], these
* indices specify which index {0, 1} corresponds to the start point
* coordinate of the respective dimension*/
int mStartXIdx;
int mStartYIdx;
QPen mPen;
QBrush mBrush;
/**Width of the arrow marker in mm. May be specified by the user. The height is automatically adapted*/
double mArrowHeadWidth;
/**Height of the arrow marker in mm. Is calculated from arrow marker width and apsect ratio of svg*/
double mStartArrowHeadHeight;
double mStopArrowHeadHeight;
/**Path to the start marker file*/
QString mStartMarkerFile;
/**Path to the end marker file*/
QString mEndMarkerFile;
/**Default marker, no marker or svg marker*/
MarkerMode mMarkerMode;
double mArrowHeadOutlineWidth;
QColor mArrowHeadOutlineColor;
QColor mArrowHeadFillColor;
/**Indicates QGIS version to mimic bounding box behaviour for. The line placement changed in version 2.4, so a value
* of 22 is used to indicate that the line should be drawn using the older placement routine.
*/
int mBoundsBehaviour;
QgsLineSymbolV2* mLineSymbol;
/**Adapts the item scene rect to contain the start point, the stop point including the arrow marker and the outline.
Needs to be called whenever the arrow width/height, the outline with or the endpoints are changed*/
void adaptItemSceneRect();
/**Computes the margin around the line necessary to include the markers */
double computeMarkerMargin() const;
/**Draws the default marker at the line end*/
void drawHardcodedMarker( QPainter* p, MarkerType type );
/**Draws a user-defined marker (must be an svg file)*/
void drawSVGMarker( QPainter* p, MarkerType type, const QString& markerPath );
/**Apply default graphics settings*/
void init();
/**Creates the default line symbol
* @note added in QGIS 2.5
*/
void createDefaultLineSymbol();
/**Draws the arrow line
* @note added in QGIS 2.5
*/
void drawLine( QPainter *painter );
};
#endif // QGSCOMPOSERARROW_H
|