mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 12:28:02 +02:00
Working on deleting attributes.
This commit is contained in:
parent
f9b0ff0608
commit
d6d95a586d
6 changed files with 104 additions and 95 deletions
|
@ -45,12 +45,19 @@ MetavoxelEditor::MetavoxelEditor() :
|
||||||
attributeGroup->setLayout(attributeLayout);
|
attributeGroup->setLayout(attributeLayout);
|
||||||
|
|
||||||
attributeLayout->addWidget(_attributes = new QListWidget());
|
attributeLayout->addWidget(_attributes = new QListWidget());
|
||||||
connect(_attributes, SIGNAL(itemSelectionChanged()), SLOT(updateValueEditor()));
|
connect(_attributes, SIGNAL(itemSelectionChanged()), SLOT(selectedAttributeChanged()));
|
||||||
|
|
||||||
|
QHBoxLayout* attributeButtonLayout = new QHBoxLayout();
|
||||||
|
attributeLayout->addLayout(attributeButtonLayout);
|
||||||
|
|
||||||
QPushButton* newAttribute = new QPushButton("New...");
|
QPushButton* newAttribute = new QPushButton("New...");
|
||||||
attributeLayout->addWidget(newAttribute);
|
attributeButtonLayout->addWidget(newAttribute);
|
||||||
connect(newAttribute, SIGNAL(clicked()), SLOT(createNewAttribute()));
|
connect(newAttribute, SIGNAL(clicked()), SLOT(createNewAttribute()));
|
||||||
|
|
||||||
|
attributeButtonLayout->addWidget(_deleteAttribute = new QPushButton("Delete"));
|
||||||
|
_deleteAttribute->setEnabled(false);
|
||||||
|
connect(_deleteAttribute, SIGNAL(clicked()), SLOT(deleteSelectedAttribute()));
|
||||||
|
|
||||||
QFormLayout* formLayout = new QFormLayout();
|
QFormLayout* formLayout = new QFormLayout();
|
||||||
topLayout->addLayout(formLayout);
|
topLayout->addLayout(formLayout);
|
||||||
|
|
||||||
|
@ -141,19 +148,20 @@ bool MetavoxelEditor::eventFilter(QObject* watched, QEvent* event) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MetavoxelEditor::updateValueEditor() {
|
void MetavoxelEditor::selectedAttributeChanged() {
|
||||||
QString selected = getSelectedAttribute();
|
QString selected = getSelectedAttribute();
|
||||||
if (selected.isNull()) {
|
if (selected.isNull()) {
|
||||||
|
_deleteAttribute->setEnabled(false);
|
||||||
_value->setVisible(false);
|
_value->setVisible(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
AttributePointer attribute = AttributeRegistry::getInstance()->getAttribute(selected);
|
||||||
|
|
||||||
_value->setVisible(true);
|
_value->setVisible(true);
|
||||||
|
|
||||||
if (_valueArea->widget()) {
|
if (_valueArea->widget()) {
|
||||||
delete _valueArea->widget();
|
delete _valueArea->widget();
|
||||||
}
|
}
|
||||||
|
|
||||||
AttributePointer attribute = AttributeRegistry::getInstance()->getAttribute(selected);
|
|
||||||
QWidget* editor = attribute->createEditor();
|
QWidget* editor = attribute->createEditor();
|
||||||
if (editor) {
|
if (editor) {
|
||||||
_valueArea->setWidget(editor);
|
_valueArea->setWidget(editor);
|
||||||
|
@ -188,6 +196,10 @@ void MetavoxelEditor::createNewAttribute() {
|
||||||
updateAttributes(nameText);
|
updateAttributes(nameText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MetavoxelEditor::deleteSelectedAttribute() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void MetavoxelEditor::centerGridPosition() {
|
void MetavoxelEditor::centerGridPosition() {
|
||||||
const float CENTER_OFFSET = 0.625f;
|
const float CENTER_OFFSET = 0.625f;
|
||||||
float eyePosition = (glm::inverse(getGridRotation()) * Application::getInstance()->getCamera()->getPosition()).z -
|
float eyePosition = (glm::inverse(getGridRotation()) * Application::getInstance()->getCamera()->getPosition()).z -
|
||||||
|
|
|
@ -17,6 +17,7 @@ class QComboBox;
|
||||||
class QDoubleSpinBox;
|
class QDoubleSpinBox;
|
||||||
class QGroupBox;
|
class QGroupBox;
|
||||||
class QListWidget;
|
class QListWidget;
|
||||||
|
class QPushButton;
|
||||||
class QScrollArea;
|
class QScrollArea;
|
||||||
|
|
||||||
/// Allows editing metavoxels.
|
/// Allows editing metavoxels.
|
||||||
|
@ -31,8 +32,9 @@ public:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void updateValueEditor();
|
void selectedAttributeChanged();
|
||||||
void createNewAttribute();
|
void createNewAttribute();
|
||||||
|
void deleteSelectedAttribute();
|
||||||
void centerGridPosition();
|
void centerGridPosition();
|
||||||
void alignGridPosition();
|
void alignGridPosition();
|
||||||
|
|
||||||
|
@ -49,6 +51,7 @@ private:
|
||||||
QVariant getValue() const;
|
QVariant getValue() const;
|
||||||
|
|
||||||
QListWidget* _attributes;
|
QListWidget* _attributes;
|
||||||
|
QPushButton* _deleteAttribute;
|
||||||
QComboBox* _gridPlane;
|
QComboBox* _gridPlane;
|
||||||
QDoubleSpinBox* _gridSpacing;
|
QDoubleSpinBox* _gridSpacing;
|
||||||
QDoubleSpinBox* _gridPosition;
|
QDoubleSpinBox* _gridPosition;
|
||||||
|
|
|
@ -24,7 +24,7 @@ class QScriptValue;
|
||||||
|
|
||||||
class Attribute;
|
class Attribute;
|
||||||
|
|
||||||
typedef QSharedPointer<Attribute> AttributePointer;
|
typedef SharedObjectPointerTemplate<Attribute> AttributePointer;
|
||||||
|
|
||||||
/// Maintains information about metavoxel attribute types.
|
/// Maintains information about metavoxel attribute types.
|
||||||
class AttributeRegistry {
|
class AttributeRegistry {
|
||||||
|
@ -141,7 +141,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Represents a registered attribute.
|
/// Represents a registered attribute.
|
||||||
class Attribute : public QObject {
|
class Attribute : public SharedObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -31,7 +31,7 @@ class Bitstream;
|
||||||
class OwnedAttributeValue;
|
class OwnedAttributeValue;
|
||||||
class TypeStreamer;
|
class TypeStreamer;
|
||||||
|
|
||||||
typedef QSharedPointer<Attribute> AttributePointer;
|
typedef SharedObjectPointerTemplate<Attribute> AttributePointer;
|
||||||
|
|
||||||
/// Streams integer identifiers that conform to the following pattern: each ID encountered in the stream is either one that
|
/// Streams integer identifiers that conform to the following pattern: each ID encountered in the stream is either one that
|
||||||
/// has been sent (received) before, or is one more than the highest previously encountered ID (starting at zero). This allows
|
/// has been sent (received) before, or is one more than the highest previously encountered ID (starting at zero). This allows
|
||||||
|
|
|
@ -72,62 +72,6 @@ bool SharedObject::equals(const SharedObject* other) const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedObjectPointer::SharedObjectPointer(SharedObject* data) : _data(data) {
|
|
||||||
if (_data) {
|
|
||||||
_data->incrementReferenceCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedObjectPointer::SharedObjectPointer(const SharedObjectPointer& other) : _data(other._data) {
|
|
||||||
if (_data) {
|
|
||||||
_data->incrementReferenceCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedObjectPointer::~SharedObjectPointer() {
|
|
||||||
if (_data) {
|
|
||||||
_data->decrementReferenceCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SharedObjectPointer::detach() {
|
|
||||||
if (_data && _data->getReferenceCount() > 1) {
|
|
||||||
_data->decrementReferenceCount();
|
|
||||||
(_data = _data->clone())->incrementReferenceCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SharedObjectPointer::reset() {
|
|
||||||
if (_data) {
|
|
||||||
_data->decrementReferenceCount();
|
|
||||||
}
|
|
||||||
_data = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedObjectPointer& SharedObjectPointer::operator=(SharedObject* data) {
|
|
||||||
if (_data) {
|
|
||||||
_data->decrementReferenceCount();
|
|
||||||
}
|
|
||||||
if ((_data = data)) {
|
|
||||||
_data->incrementReferenceCount();
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedObjectPointer& SharedObjectPointer::operator=(const SharedObjectPointer& other) {
|
|
||||||
if (_data) {
|
|
||||||
_data->decrementReferenceCount();
|
|
||||||
}
|
|
||||||
if ((_data = other._data)) {
|
|
||||||
_data->incrementReferenceCount();
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint qHash(const SharedObjectPointer& pointer, uint seed) {
|
|
||||||
return qHash(pointer.data(), seed);
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedObjectEditor::SharedObjectEditor(const QMetaObject* metaObject, QWidget* parent) : QWidget(parent) {
|
SharedObjectEditor::SharedObjectEditor(const QMetaObject* metaObject, QWidget* parent) : QWidget(parent) {
|
||||||
QVBoxLayout* layout = new QVBoxLayout();
|
QVBoxLayout* layout = new QVBoxLayout();
|
||||||
layout->setAlignment(Qt::AlignTop);
|
layout->setAlignment(Qt::AlignTop);
|
||||||
|
|
|
@ -44,49 +44,99 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A pointer to a shared object.
|
/// A pointer to a shared object.
|
||||||
class SharedObjectPointer {
|
template<class T> class SharedObjectPointerTemplate {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
SharedObjectPointer(SharedObject* data = NULL);
|
SharedObjectPointerTemplate(T* data = NULL);
|
||||||
SharedObjectPointer(const SharedObjectPointer& other);
|
SharedObjectPointerTemplate(const SharedObjectPointerTemplate<T>& other);
|
||||||
~SharedObjectPointer();
|
~SharedObjectPointerTemplate();
|
||||||
|
|
||||||
SharedObject* data() { return _data; }
|
|
||||||
const SharedObject* data() const { return _data; }
|
|
||||||
const SharedObject* constData() const { return _data; }
|
|
||||||
|
|
||||||
|
T* data() const { return _data; }
|
||||||
|
|
||||||
void detach();
|
void detach();
|
||||||
|
|
||||||
void swap(SharedObjectPointer& other) { qSwap(_data, other._data); }
|
void swap(SharedObjectPointerTemplate<T>& other) { qSwap(_data, other._data); }
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
operator SharedObject*() { return _data; }
|
|
||||||
operator const SharedObject*() const { return _data; }
|
|
||||||
|
|
||||||
bool operator!() const { return !_data; }
|
bool operator!() const { return !_data; }
|
||||||
|
operator T*() const { return _data; }
|
||||||
bool operator!=(const SharedObjectPointer& other) const { return _data != other._data; }
|
T& operator*() const { return *_data; }
|
||||||
|
T* operator->() const { return _data; }
|
||||||
SharedObject& operator*() { return *_data; }
|
|
||||||
const SharedObject& operator*() const { return *_data; }
|
|
||||||
|
|
||||||
SharedObject* operator->() { return _data; }
|
|
||||||
const SharedObject* operator->() const { return _data; }
|
|
||||||
|
|
||||||
SharedObjectPointer& operator=(SharedObject* data);
|
|
||||||
SharedObjectPointer& operator=(const SharedObjectPointer& other);
|
|
||||||
|
|
||||||
bool operator==(const SharedObjectPointer& other) const { return _data == other._data; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
SharedObject* _data;
|
SharedObjectPointerTemplate<T>& operator=(T* data);
|
||||||
|
SharedObjectPointerTemplate<T>& operator=(const SharedObjectPointerTemplate<T>& other);
|
||||||
|
|
||||||
|
bool operator==(const SharedObjectPointerTemplate<T>& other) const { return _data == other._data; }
|
||||||
|
bool operator!=(const SharedObjectPointerTemplate<T>& other) const { return _data != other._data; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
T* _data;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(SharedObjectPointer)
|
template<class T> inline SharedObjectPointerTemplate<T>::SharedObjectPointerTemplate(T* data) : _data(data) {
|
||||||
|
if (_data) {
|
||||||
|
_data->incrementReferenceCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint qHash(const SharedObjectPointer& pointer, uint seed = 0);
|
template<class T> inline SharedObjectPointerTemplate<T>::SharedObjectPointerTemplate(const SharedObjectPointerTemplate<T>& other) :
|
||||||
|
_data(other._data) {
|
||||||
|
|
||||||
|
if (_data) {
|
||||||
|
_data->incrementReferenceCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> inline SharedObjectPointerTemplate<T>::~SharedObjectPointerTemplate() {
|
||||||
|
if (_data) {
|
||||||
|
_data->decrementReferenceCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> inline void SharedObjectPointerTemplate<T>::detach() {
|
||||||
|
if (_data && _data->getReferenceCount() > 1) {
|
||||||
|
_data->decrementReferenceCount();
|
||||||
|
(_data = _data->clone())->incrementReferenceCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> inline void SharedObjectPointerTemplate<T>::reset() {
|
||||||
|
if (_data) {
|
||||||
|
_data->decrementReferenceCount();
|
||||||
|
}
|
||||||
|
_data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> inline SharedObjectPointerTemplate<T>& SharedObjectPointerTemplate<T>::operator=(T* data) {
|
||||||
|
if (_data) {
|
||||||
|
_data->decrementReferenceCount();
|
||||||
|
}
|
||||||
|
if ((_data = data)) {
|
||||||
|
_data->incrementReferenceCount();
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> inline SharedObjectPointerTemplate<T>& SharedObjectPointerTemplate<T>::operator=(
|
||||||
|
const SharedObjectPointerTemplate<T>& other) {
|
||||||
|
if (_data) {
|
||||||
|
_data->decrementReferenceCount();
|
||||||
|
}
|
||||||
|
if ((_data = other._data)) {
|
||||||
|
_data->incrementReferenceCount();
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> uint qHash(const SharedObjectPointerTemplate<T>& pointer, uint seed = 0) {
|
||||||
|
return qHash(pointer.data(), seed);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef SharedObjectPointerTemplate<SharedObject> SharedObjectPointer;
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(SharedObjectPointer)
|
||||||
|
|
||||||
/// Allows editing shared object instances.
|
/// Allows editing shared object instances.
|
||||||
class SharedObjectEditor : public QWidget {
|
class SharedObjectEditor : public QWidget {
|
||||||
|
|
Loading…
Reference in a new issue