summaryrefslogtreecommitdiff
path: root/src/diagramdocument.cpp
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-08 22:27:59 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-08 22:27:59 +0100
commit83ec1b4f1722ce891f3d5871e27ae66a7228abe4 (patch)
treeeb643f502880a79be88f81f0f5a8c1636f41b1a1 /src/diagramdocument.cpp
parentec5ba128e5a4dcb2c231a65f1d224012ecebd341 (diff)
downloaddbmodel-83ec1b4f1722ce891f3d5871e27ae66a7228abe4.tar.gz
dbmodel-83ec1b4f1722ce891f3d5871e27ae66a7228abe4.tar.bz2
Show grid
Diffstat (limited to 'src/diagramdocument.cpp')
-rw-r--r--src/diagramdocument.cpp78
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()
{