/* sidebar.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 */ #include #include #include #include #include "sidebar.h" #include "entitywidget.h" namespace editor { SideBar::SideBar(QWidget *parent) : QWidget(parent) { // zone name label_zone = new QLabel(tr("Zone Name")); label_zone->setAlignment(Qt::AlignHCenter); // entity type label_entitytype = new QLabel(tr("[type]")); label_entitytype->setAlignment(Qt::AlignHCenter); // entity label QHBoxLayout *box_entitylabel = new QHBoxLayout(); QLabel *label_entitylabel = new QLabel(tr("label")); edit_entitylabel = new QLineEdit(tr("entity_label")); box_entitylabel->addWidget(label_entitylabel); box_entitylabel->addWidget(edit_entitylabel); connect(edit_entitylabel, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityLabel(const QString &))); // entity name QHBoxLayout *box_entityname = new QHBoxLayout(); QLabel *label_entityname = new QLabel(tr("name")); edit_entityname = new QLineEdit(tr("Entity Name")); box_entityname->addWidget(label_entityname); box_entityname->addWidget(edit_entityname); connect(edit_entityname, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityName(const QString &))); // entity location QHBoxLayout *box_entitylocation = new QHBoxLayout(); QLabel *label_entitylocation = new QLabel(tr("location")); edit_entitylocation_x = new QLineEdit(tr("x")); edit_entitylocation_y = new QLineEdit(tr("y")); edit_entitylocation_z = new QLineEdit(tr("z")); box_entitylocation->addWidget(label_entitylocation); box_entitylocation->addWidget(edit_entitylocation_x); box_entitylocation->addWidget(edit_entitylocation_y); box_entitylocation->addWidget(edit_entitylocation_z); connect(edit_entitylocation_x, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityLocationX(const QString &))); connect(edit_entitylocation_y, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityLocationY(const QString &))); connect(edit_entitylocation_z, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityLocationZ(const QString &))); // entity radius QHBoxLayout *box_entityradius = new QHBoxLayout(); QLabel *label_entityradius = new QLabel(tr("radius")); edit_entityradius = new QLineEdit(tr("radius")); box_entityradius->addWidget(label_entityradius); box_entityradius->addWidget(edit_entityradius); connect(edit_entityradius, SIGNAL(textChanged(const QString &)), this, SLOT(updateEntityRadius(const QString &))); // entity values QLabel *label_entityproperties = new QLabel(tr("properties")); text_entityvalues = new QTextEdit(); text_entityvalues ->setTabChangesFocus(true); connect(text_entityvalues, SIGNAL(textChanged()), this, SLOT(updateEntityValues())); // entity info QLabel *label_info = new QLabel(tr("info")); text_info = new QTextEdit(); text_info ->setTabChangesFocus(true); connect(text_info, SIGNAL(textChanged()), this, SLOT(updateEntityInfo())); // entity subsections QLabel *label_entitysubsections = new QLabel(tr("subsections")); text_subsections = new QTextEdit(); text_subsections ->setTabChangesFocus(true); connect(text_subsections, SIGNAL(textChanged()), this, SLOT(updateEntitySubSections())); // global vertical layout QVBoxLayout *box_global = new QVBoxLayout(); box_global->addWidget(label_zone); box_global->addSpacing(8); box_global->addWidget(label_entitytype); box_global->addLayout(box_entitylabel); box_global->addLayout(box_entityname); box_global->addLayout(box_entitylocation); box_global->addLayout(box_entityradius); box_global->addWidget(label_entityproperties); box_global->addWidget(text_entityvalues,1); box_global->addWidget(label_info); box_global->addWidget(text_info,1); box_global->addWidget(label_entitysubsections); box_global->addWidget(text_subsections,1); setLayout(box_global); setProperties(0); } void SideBar::updateEntityLabel(const QString &value) { if (last_selected) { last_selected->set_label(value); } } void SideBar::updateEntityName(const QString &value) { if (last_selected) { last_selected->set_name(value); } } void SideBar::updateEntityLocationX(const QString &value) { if (last_selected) { bool ok; float x = value.toFloat(&ok); if (ok) { last_selected->set_location(x, last_selected->location()[1], last_selected->location()[2]); emit entityChanged(); } } } void SideBar::updateEntityLocationY(const QString &value) { if (last_selected) { bool ok; float y = value.toFloat(&ok); if (ok) { last_selected->set_location(last_selected->location()[0], y, last_selected->location()[2]); emit entityChanged(); } } } void SideBar::updateEntityLocationZ(const QString &value) { if (last_selected) { bool ok; float z = value.toFloat(&ok); if (ok) { last_selected->set_location(last_selected->location()[0], last_selected->location()[1], z); emit entityChanged(); } } } void SideBar::updateEntityRadius(const QString &value) { if (last_selected) { bool ok; float r = value.toFloat(&ok); if (ok) { last_selected->set_radius(r); } else { last_selected->set_radius(0.0f); } emit entityChanged(); } } void SideBar::updateEntityValues() { if (last_selected) { last_selected->set_values(text_entityvalues->toPlainText()); } } void SideBar::updateEntitySubSections() { if (last_selected) { last_selected->set_subsections(text_subsections->toPlainText()); } } void SideBar::updateEntityInfo() { if (last_selected) { last_selected->set_info(text_info->toPlainText()); } } void SideBar::setProperties(EntityProperties *properties) { last_selected = properties; if (!properties) { label_entitytype->clear(); edit_entitylabel->setEnabled(false); edit_entitylabel->clear(); edit_entityname->setEnabled(false); edit_entityname->clear(); edit_entitylocation_x->setEnabled(false); edit_entitylocation_x->clear(); edit_entitylocation_y->setEnabled(false); edit_entitylocation_y->clear(); edit_entitylocation_z->setEnabled(false); edit_entitylocation_z->clear(); edit_entityradius->setEnabled(false); edit_entityradius->clear(); text_entityvalues->setEnabled(false); text_entityvalues->clear(); text_subsections->setEnabled(false); text_subsections->clear(); text_info->setEnabled(false); text_info->clear(); } else { QString value; value = '['; value += properties->type(); value += ']'; label_entitytype->setText(value); edit_entitylabel->setEnabled(true); edit_entitylabel->setText(properties->label()); edit_entityname->setEnabled(true); edit_entityname->setText(properties->name()); edit_entitylocation_x->setEnabled(true); value.setNum(properties->location()[0]); edit_entitylocation_x->setText(value); edit_entitylocation_y->setEnabled(true); value.setNum(properties->location()[1]); edit_entitylocation_y->setText(value); edit_entitylocation_z->setEnabled(true); value.setNum(properties->location()[2]); edit_entitylocation_z->setText(value); edit_entityradius->setEnabled(true); value.setNum(properties->radius()); edit_entityradius->setText(value); text_entityvalues->setEnabled(true); text_entityvalues->setPlainText(properties->values()); text_subsections->setEnabled(true); text_subsections->setPlainText(properties->subsections()); text_info->setEnabled(true); text_info->setPlainText(properties->info()); } } void SideBar::setZoneName(const QString &name) { label_zone->setText(name); } }