mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 21:18:43 +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);
|
||||
|
||||
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...");
|
||||
attributeLayout->addWidget(newAttribute);
|
||||
attributeButtonLayout->addWidget(newAttribute);
|
||||
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();
|
||||
topLayout->addLayout(formLayout);
|
||||
|
||||
|
@ -141,19 +148,20 @@ bool MetavoxelEditor::eventFilter(QObject* watched, QEvent* event) {
|
|||
return false;
|
||||
}
|
||||
|
||||
void MetavoxelEditor::updateValueEditor() {
|
||||
void MetavoxelEditor::selectedAttributeChanged() {
|
||||
QString selected = getSelectedAttribute();
|
||||
if (selected.isNull()) {
|
||||
_deleteAttribute->setEnabled(false);
|
||||
_value->setVisible(false);
|
||||
return;
|
||||
}
|
||||
AttributePointer attribute = AttributeRegistry::getInstance()->getAttribute(selected);
|
||||
|
||||
_value->setVisible(true);
|
||||
|
||||
if (_valueArea->widget()) {
|
||||
delete _valueArea->widget();
|
||||
}
|
||||
|
||||
AttributePointer attribute = AttributeRegistry::getInstance()->getAttribute(selected);
|
||||
QWidget* editor = attribute->createEditor();
|
||||
if (editor) {
|
||||
_valueArea->setWidget(editor);
|
||||
|
@ -188,6 +196,10 @@ void MetavoxelEditor::createNewAttribute() {
|
|||
updateAttributes(nameText);
|
||||
}
|
||||
|
||||
void MetavoxelEditor::deleteSelectedAttribute() {
|
||||
|
||||
}
|
||||
|
||||
void MetavoxelEditor::centerGridPosition() {
|
||||
const float CENTER_OFFSET = 0.625f;
|
||||
float eyePosition = (glm::inverse(getGridRotation()) * Application::getInstance()->getCamera()->getPosition()).z -
|
||||
|
|
|
@ -17,6 +17,7 @@ class QComboBox;
|
|||
class QDoubleSpinBox;
|
||||
class QGroupBox;
|
||||
class QListWidget;
|
||||
class QPushButton;
|
||||
class QScrollArea;
|
||||
|
||||
/// Allows editing metavoxels.
|
||||
|
@ -31,8 +32,9 @@ public:
|
|||
|
||||
private slots:
|
||||
|
||||
void updateValueEditor();
|
||||
void selectedAttributeChanged();
|
||||
void createNewAttribute();
|
||||
void deleteSelectedAttribute();
|
||||
void centerGridPosition();
|
||||
void alignGridPosition();
|
||||
|
||||
|
@ -49,6 +51,7 @@ private:
|
|||
QVariant getValue() const;
|
||||
|
||||
QListWidget* _attributes;
|
||||
QPushButton* _deleteAttribute;
|
||||
QComboBox* _gridPlane;
|
||||
QDoubleSpinBox* _gridSpacing;
|
||||
QDoubleSpinBox* _gridPosition;
|
||||
|
|
|
@ -24,7 +24,7 @@ class QScriptValue;
|
|||
|
||||
class Attribute;
|
||||
|
||||
typedef QSharedPointer<Attribute> AttributePointer;
|
||||
typedef SharedObjectPointerTemplate<Attribute> AttributePointer;
|
||||
|
||||
/// Maintains information about metavoxel attribute types.
|
||||
class AttributeRegistry {
|
||||
|
@ -141,7 +141,7 @@ public:
|
|||
};
|
||||
|
||||
/// Represents a registered attribute.
|
||||
class Attribute : public QObject {
|
||||
class Attribute : public SharedObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
|
|
@ -31,7 +31,7 @@ class Bitstream;
|
|||
class OwnedAttributeValue;
|
||||
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
|
||||
/// 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;
|
||||
}
|
||||
|
||||
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) {
|
||||
QVBoxLayout* layout = new QVBoxLayout();
|
||||
layout->setAlignment(Qt::AlignTop);
|
||||
|
|
|
@ -44,49 +44,99 @@ private:
|
|||
};
|
||||
|
||||
/// A pointer to a shared object.
|
||||
class SharedObjectPointer {
|
||||
template<class T> class SharedObjectPointerTemplate {
|
||||
public:
|
||||
|
||||
SharedObjectPointer(SharedObject* data = NULL);
|
||||
SharedObjectPointer(const SharedObjectPointer& other);
|
||||
~SharedObjectPointer();
|
||||
|
||||
SharedObject* data() { return _data; }
|
||||
const SharedObject* data() const { return _data; }
|
||||
const SharedObject* constData() const { return _data; }
|
||||
SharedObjectPointerTemplate(T* data = NULL);
|
||||
SharedObjectPointerTemplate(const SharedObjectPointerTemplate<T>& other);
|
||||
~SharedObjectPointerTemplate();
|
||||
|
||||
T* data() const { return _data; }
|
||||
|
||||
void detach();
|
||||
|
||||
void swap(SharedObjectPointer& other) { qSwap(_data, other._data); }
|
||||
void swap(SharedObjectPointerTemplate<T>& other) { qSwap(_data, other._data); }
|
||||
|
||||
void reset();
|
||||
|
||||
operator SharedObject*() { return _data; }
|
||||
operator const SharedObject*() const { return _data; }
|
||||
|
||||
bool operator!() const { return !_data; }
|
||||
|
||||
bool operator!=(const SharedObjectPointer& other) const { return _data != other._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:
|
||||
operator T*() const { return _data; }
|
||||
T& operator*() const { return *_data; }
|
||||
T* operator->() const { return _data; }
|
||||
|
||||
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.
|
||||
class SharedObjectEditor : public QWidget {
|
||||
|
|
Loading…
Reference in a new issue