// Copyright (C) 2008 Lukas Lalinsky // // 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. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #ifndef DATABASEMODEL_H #define DATABASEMODEL_H #include #include #include #include #include #include #include class DatabaseTable; class DatabaseRelationship; class DiagramConnection; class DiagramItem; class DiagramObject; class DiagramDocument : public QGraphicsScene { Q_OBJECT Q_PROPERTY(int gridSize READ gridSize WRITE setGridSize) Q_PROPERTY(bool gridVisible READ isGridVisible WRITE setGridVisible) Q_PROPERTY(QColor gridColor READ gridColor WRITE setGridColor) public: DiagramDocument(QObject *parent = 0); enum Mode { Select = 0, AddTable, AddRelation }; Mode mode(); void setMode(Mode mode); DatabaseTable *selectedTable(); void deleteSelectedItems(); void save(const QString &fileName); void load(const QString &fileName); QString fileName() { return m_fileName; } void setFileName(const QString &fileName) { m_fileName = fileName; } DiagramItem *itemById(const QUuid &id); QUndoStack *undoStack() const { return m_undoStack; } void itemMoved(DiagramItem *table); void itemHasMoved(DiagramItem *table); QList findConnections(DiagramObject *object); template QList itemsByType(); int gridSize() const; void setGridSize(int size); bool isGridVisible() const; void setGridVisible(bool visible); QColor gridColor() const; void setGridColor(const QColor &color); signals: void modeChanged(DiagramDocument::Mode mode); friend class DatabaseTable; protected slots: void updatePositions(DiagramObject *object); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); void drawBackground(QPainter *painter, const QRectF &rect); private: class DiagramDocumentPrivate; DiagramDocumentPrivate *const d; bool m_trackingMoves; QMap m_movedItems; QUndoStack *m_undoStack; Mode m_mode; QString m_fileName; QGraphicsLineItem *m_line; }; #endif