/* entitywidget.cc 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 */ #include #include #include #include #include namespace editor { EntityWidget::EntityWidget(QWidget *parent) : QWidget(parent) { entitywidget_selected = SelectNone; is_dragging = false; } EntityWidget::EntityWidget(EntityWidget &entity_widget, QWidget *parent) : QWidget(parent) { entitywidget_selected = SelectNone; is_dragging = false; assign(entity_widget); } void EntityWidget::set_selected(const Selected selected) { entitywidget_selected = selected; update(); } void EntityWidget::assign(EntityWidget &other) { EntityProperties properties = *(other.properties()); entitywidget_entityproperties.assign(properties); } void EntityWidget::paintEvent(QPaintEvent *event) { QPen pen(Qt::black, 1, Qt::SolidLine); QPainter painter(this); switch (entitywidget_selected) { case SelectNone: painter.setClipping(true); break; case SelectHighlight: pen.setColor(QColor(191, 0, 0)); painter.setPen(pen); painter.setClipping(false); break; case SelectActive: pen.setColor(QColor(255, 0, 0)); painter.setPen(pen); painter.setClipping(false); break; } painter.setPen(pen); painter.drawEllipse(0, 0, width() - 1 , height() - 1); float r = width() / 2; if (r < 12) r = 12; /* float dx = r * sin(entitywidget_entityproperties.yaw()); float dy = r * cos(entitywidget_entityproperties.yaw()); if (!is_selected) { pen.setColor(Qt::yellow); } painter.setPen(pen); painter.drawLine(width() /2, height() /2, width() /2 - dx, height() /2 - dy); */ } void EntityWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { //qDebug() << "clicked entity " << name(); event->accept(); if ((selected() == SelectHighlight) || (selected() == SelectActive)) { is_dragging = true; emit dragStart(); } emit clicked(this); } else { event->ignore(); is_dragging = false; } } void EntityWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { if (is_dragging) emit dragStop(); is_dragging = false; } } void EntityWidget::mouseMoveEvent(QMouseEvent *event) { if (is_dragging) { emit dragMove(this, event->pos().x(), event->pos().y()); } } }