Changed: #1302 Landscape scene works correctly in world editor plugin. Replaced dynamic_cast on more faster qgraphicsitem_cast.

This commit is contained in:
dnk-88 2011-08-09 23:31:14 +03:00
parent 7ad4ac2cbe
commit 1ba0ec6aa0
5 changed files with 17 additions and 33 deletions

View file

@ -206,7 +206,7 @@ void LandscapeSceneBase::deleteItemZone(const ZonePosition &zonePos)
Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
Q_FOREACH(QGraphicsItem *item, listItems)
{
if (dynamic_cast<QGraphicsPixmapItem *>(item) != 0)
if (qgraphicsitem_cast<QGraphicsPixmapItem *>(item) != 0)
{
removeItem(item);
delete item;
@ -295,8 +295,6 @@ void LandscapeSceneBase::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
qreal y = mouseEvent->scenePos().y();
m_posX = sint32(floor(x / m_cellSize));
m_posY = sint32(-floor(y / m_cellSize));
m_mouseButton = mouseEvent->button();
}
void LandscapeSceneBase::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
@ -310,20 +308,22 @@ void LandscapeSceneBase::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
void LandscapeSceneBase::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
QGraphicsScene::mouseReleaseEvent(mouseEvent);
m_mouseButton = Qt::NoButton;
}
bool LandscapeSceneBase::checkUnderZone(const int posX, const int posY)
{
QList<QGraphicsItem *> listItems = items(QPointF(posX * m_cellSize + 10, abs(posY) * m_cellSize + 10),
Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
// TODO: Why crash program?
// QList<QGraphicsItem *> listItems = items(QPointF(posX * m_cellSize + 10, abs(posY) * m_cellSize + 10),
// Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
QList<QGraphicsItem *> listItems = items();
QPointF point(posX, abs(posY));
Q_FOREACH(QGraphicsItem *item, listItems)
{
if (dynamic_cast<QGraphicsPixmapItem *>(item) != 0)
return true;
if (item->pos() == point)
{
if (qgraphicsitem_cast<QGraphicsPixmapItem *>(item) != 0)
return true;
}
}
return false;
}

View file

@ -64,7 +64,6 @@ public Q_SLOTS:
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
private:
bool checkUnderZone(const int posX, const int posY);
@ -72,7 +71,6 @@ private:
int m_cellSize;
qreal m_mouseX, m_mouseY;
sint32 m_posX, m_posY;
Qt::MouseButton m_mouseButton;
ZoneBuilderBase *m_zoneBuilderBase;
};

View file

@ -151,7 +151,7 @@ void LandscapeView::mouseMoveEvent(QMouseEvent *event)
void LandscapeView::mouseReleaseEvent(QMouseEvent *event)
{
m_lastPanPoint = QPoint();
QApplication::restoreOverrideCursor();
setCursor(Qt::ArrowCursor);
QGraphicsView::mouseReleaseEvent(event);
}

View file

@ -20,14 +20,13 @@
// Project includes
#include "ui_project_settings_dialog.h"
#include "landscape_editor_global.h"
// Qt includes
namespace LandscapeEditor
{
class LANDSCAPE_EDITOR_EXPORT ProjectSettingsDialog: public QDialog
class ProjectSettingsDialog: public QDialog
{
Q_OBJECT

View file

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>419</width>
<height>93</height>
<height>67</height>
</rect>
</property>
<property name="windowTitle">
@ -38,20 +38,7 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Context:</string>
</property>
<property name="buddy">
<cstring>contextComboBox</cstring>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="contextComboBox"/>
</item>
<item row="2" column="0" colspan="3">
<item row="1" column="0" colspan="3">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>