/*************************************************************************** * Copyright (C) 1999-2006 by Éric Bischoff * * Copyright (C) 2007 by Albert Astals Cid * * * * 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. * ***************************************************************************/ /* Play ground widget */ #ifndef _PLAYGROUND_H_ #define _PLAYGROUND_H_ #include #include #include #include class KActionCollection; class Action; class ToDraw; class TopLevel; class QGraphicsSvgItem; class PlayGround : public QGraphicsView { Q_OBJECT public: PlayGround(TopLevel *parent); ~PlayGround(); enum LoadError { NoError, OldFileVersionError, OtherError }; void reset(); LoadError loadFrom(const QString &name); bool saveAs(const QString &name); bool printPicture(QPrinter &printer); QPixmap getPicture(); void connectRedoAction(QAction *action); void connectUndoAction(QAction *action); void registerPlayGrounds(); bool loadPlayGround(const QString &gameboardFile); QString currentGameboard() const; bool isAspectRatioLocked() const; public Q_SLOTS: void lockAspectRatio(bool lock); protected: void mousePressEvent(QMouseEvent *event); void resizeEvent(QResizeEvent *event); private: QRectF backgroundRect() const; bool insideBackground(const QSizeF &size, const QPointF &pos) const; void placeDraggedItem(const QPoint &pos); void placeNewItem(const QPoint &pos); void playGroundPixmap(const QString &playgroundName, QPixmap &pixmap); void recenterView(); QGraphicsScene *scene() const; QUndoStack *undoStack() const; QString m_gameboardFile; // the file the board QMap m_objectsNameSound; // map between element name and sound QMap m_objectsNameRatio; // map between element name and scaling ratio TopLevel *m_topLevel; // Top-level window QString m_pickedElement; // the SVG element the cursor is ToDraw *m_dragItem; // the item we are dragging QSvgRenderer m_SvgRenderer; // the SVG renderer int m_nextZValue; // the next Z value to use bool m_lockAspect; // whether we are locking aspect ratio QUndoGroup m_undoGroup; class SceneData { public: QGraphicsScene *scene; QUndoStack *undoStack; }; QMap m_scenes; // caches the items of each playground }; #endif /* kate: replace-tabs on; indent-width 2; */