/* mapwidget.h This file is part of the Project::OSiRiON world editor and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_EDITOR_MAPWIDGET__ #define __INCLUDED_EDITOR_MAPWIDGET__ #include "entityproperties.h" #include #include namespace editor { class EntityWidget; class Manipulator; /** * @brief MapWidget shows the zone map with the blue grid line * */ class MapWidget : public QWidget { Q_OBJECT public: MapWidget(QWidget *parent = 0); /** * @brief add an entity to the map * */ EntityWidget *addEntity(); void save(QTextStream &textstream); /** * @brief return the currently selected entity * */ inline EntityWidget *selected() { return mapwidget_selected; } /** * @return the current map zoom factor * */ float zoom() const; protected: /** * @brief handle draw events * */ virtual void paintEvent(QPaintEvent *event); /** * @brief handle resize events * */ virtual void resizeEvent(QResizeEvent *event); /** * @brief handle mouse button press events * */ virtual void mousePressEvent(QMouseEvent *event); /** * @brief handle mouse button press events * */ virtual void mouseReleaseEvent(QMouseEvent *event); /** * @brief handle mouse move press events * */ virtual void mouseMoveEvent(QMouseEvent *event); /** * @brief handle mousewheel events * */ virtual void wheelEvent(QWheelEvent *event); /** * @brief handle keypress events * */ virtual void keyPressEvent(QKeyEvent *event); signals: /** * @brief the selected() signal is emitted if an entity on the map is selected * */ void propertiesChanged(EntityProperties *properties); public slots: /** * @brief move and resize child widgets * This should be called whenever a child location on the map has changed. * */ void resizeChildren(); /** * @brief delete selected entities * */ void deleteSelected(); /** * @brief duplicate selected entities * */ void duplicateSelected(); /** * @brief called when an entity on the map has been clicked * */ void select(EntityWidget *entity); private slots: /** * @brief clear current selection * */ void deselect(); /** * @brief entity is dragged * */ void dragEntity(EntityWidget *entity, int x, int y); private: void doBoxSelect(); typedef QList Entities; int dragstart_x; int dragstart_y; int dragstop_x; int dragstop_y; bool is_dragging; bool is_box_selecting; // zoom factor, as a power of 2 int mapwidget_zoomfactor; // center of the map, in world coordinates Vector3f mapwidget_center; Entities mapwidget_enties; EntityWidget *mapwidget_selected; Manipulator *mapwidget_manipulator; }; } #endif // __INCLUDED_EDITOR_MAPWIDGET__