diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-08 22:27:59 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2008-12-08 22:27:59 +0100 |
commit | 83ec1b4f1722ce891f3d5871e27ae66a7228abe4 (patch) | |
tree | eb643f502880a79be88f81f0f5a8c1636f41b1a1 /src/diagramdocument.cpp | |
parent | ec5ba128e5a4dcb2c231a65f1d224012ecebd341 (diff) | |
download | dbmodel-83ec1b4f1722ce891f3d5871e27ae66a7228abe4.tar.gz dbmodel-83ec1b4f1722ce891f3d5871e27ae66a7228abe4.tar.bz2 |
Show grid
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r-- | src/diagramdocument.cpp | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/src/diagramdocument.cpp b/src/diagramdocument.cpp index 71b38db..7ed2418 100644 --- a/src/diagramdocument.cpp +++ b/src/diagramdocument.cpp @@ -14,6 +14,7 @@ // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +#include <cmath> #include "diagramdocument.h" #include "diagramobject.h" #include "diagramconnection.h" @@ -25,13 +26,88 @@ #include <QDebug> #include <QFile> #include <QTextStream> +#include <QStyle> + +using namespace std; + +class DiagramDocument::DiagramDocumentPrivate +{ +public: + DiagramDocumentPrivate() : + gridSize(10), + gridVisible(true), + gridPen(QColor(185, 185, 185), 0) + {} + int gridSize; + bool gridVisible; + QPen gridPen; +}; DiagramDocument::DiagramDocument(QObject *parent) - : QGraphicsScene(parent), m_mode(DiagramDocument::Select), m_line(NULL) + : QGraphicsScene(parent), d(new DiagramDocumentPrivate), m_mode(DiagramDocument::Select), m_line(NULL) { m_undoStack = new QUndoStack(this); } +int +DiagramDocument::gridSize() const +{ + return d->gridSize; +} + +void +DiagramDocument::setGridSize(int size) +{ + d->gridSize = size; + update(); +} + +bool +DiagramDocument::isGridVisible() const +{ + return d->gridVisible; +} + +void +DiagramDocument::setGridVisible(bool visible) +{ + d->gridVisible = visible; + update(); +} + +QColor +DiagramDocument::gridColor() const +{ + return d->gridPen.color(); +} + +void +DiagramDocument::setGridColor(const QColor &color) +{ + d->gridPen.setColor(color); + update(); +} + +void +DiagramDocument::drawBackground(QPainter *painter, const QRectF &rect) +{ + if (d->gridVisible) { + qreal gridSize = d->gridSize; + qreal x0 = gridSize * floor(rect.left() / gridSize); + qreal y0 = gridSize * floor(rect.top() / gridSize); + qreal x1 = gridSize * ceil(rect.right() / gridSize); + qreal y1 = gridSize * ceil(rect.bottom() / gridSize); + painter->save(); + painter->setPen(d->gridPen); + painter->setRenderHint(QPainter::Antialiasing, false); + // FIXME do this in one QPainter::drawPoints call + for (qreal x = x0; x < x1; x += gridSize) + for (qreal y = y0; y < y1; y += gridSize) + painter->drawPoint(x, y); + painter->restore(); + } +} + DiagramDocument::Mode DiagramDocument::mode() { |