git-svn-id: svn://db.shs.com.ru/libs@161 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -3,9 +3,6 @@
|
||||
#include <QFileDialog>
|
||||
|
||||
|
||||
__QVariantEditRegistrator__ __registrator__;
|
||||
|
||||
|
||||
StringListEdit::~StringListEdit() {
|
||||
delete combo;
|
||||
delete butt_add;
|
||||
@@ -289,21 +286,21 @@ void QVariantEdit::_recreate(const QVariant & new_value) {
|
||||
default: break;
|
||||
}
|
||||
if (!_cur_edit) {
|
||||
if (new_value.canConvert<QVariantEdit::EnumType>()) {
|
||||
if (new_value.canConvert<QAD::Enum>()) {
|
||||
_enum = new EComboBox(this);
|
||||
_setEnum(new_value.value<QVariantEdit::EnumType>());
|
||||
_setEnum(new_value.value<QAD::Enum>());
|
||||
_cur_edit = _enum;
|
||||
connect(_enum, SIGNAL(currentIndexChanged(int)), this, SLOT(_changed()));
|
||||
}
|
||||
if (new_value.canConvert<QVariantEdit::FileType>()) {
|
||||
if (new_value.canConvert<QAD::File>()) {
|
||||
_path = new PathEdit(this);
|
||||
_setFile(new_value.value<QVariantEdit::FileType>());
|
||||
_setFile(new_value.value<QAD::File>());
|
||||
_cur_edit = _path;
|
||||
connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed()));
|
||||
}
|
||||
if (new_value.canConvert<QVariantEdit::DirType>()) {
|
||||
if (new_value.canConvert<QAD::Dir>()) {
|
||||
_path = new PathEdit(this);
|
||||
_setDir(new_value.value<QVariantEdit::DirType>());
|
||||
_setDir(new_value.value<QAD::Dir>());
|
||||
_cur_edit = _path;
|
||||
connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed()));
|
||||
}
|
||||
@@ -336,28 +333,29 @@ QVariant QVariantEdit::value() const {
|
||||
case QVariant::Time: return _date->time();
|
||||
case QVariant::DateTime: return _date->dateTime();
|
||||
default:
|
||||
if (_value.canConvert<QVariantEdit::EnumType>() && _enum) {
|
||||
QVariantEdit::EnumType ret;
|
||||
if (_value.canConvert<QAD::Enum>() && _enum) {
|
||||
QAD::Enum ret;
|
||||
for (int i = 0; i < _enum->count(); ++i)
|
||||
ret.enum_list << _enum->itemText(i);
|
||||
ret.value = _enum->currentText();
|
||||
return QVariant::fromValue<QVariantEdit::EnumType>(ret);
|
||||
ret.enum_list << QAD::Enumerator(_enum->itemData(i).toInt(), _enum->itemText(i));
|
||||
ret.enum_name = _enum->property("enum_name").toString();
|
||||
ret.selected = _enum->currentText();
|
||||
return QVariant::fromValue<QAD::Enum>(ret);
|
||||
}
|
||||
if (_value.canConvert<QVariantEdit::FileType>() && _path) {
|
||||
if (_value.canConvert<QAD::File>() && _path) {
|
||||
if (!_path->is_dir) {
|
||||
QVariantEdit::FileType ret;
|
||||
QAD::File ret;
|
||||
ret.file = _path->value();
|
||||
ret.filter = _path->filter;
|
||||
ret.is_abs = _path->is_abs;
|
||||
return QVariant::fromValue<QVariantEdit::FileType>(ret);
|
||||
return QVariant::fromValue<QAD::File>(ret);
|
||||
}
|
||||
}
|
||||
if (_value.canConvert<QVariantEdit::DirType>() && _path) {
|
||||
if (_value.canConvert<QAD::Dir>() && _path) {
|
||||
if (_path->is_dir) {
|
||||
QVariantEdit::DirType ret;
|
||||
QAD::Dir ret;
|
||||
ret.dir = _path->value();
|
||||
ret.is_abs = _path->is_abs;
|
||||
return QVariant::fromValue<QVariantEdit::DirType>(ret);
|
||||
return QVariant::fromValue<QAD::Dir>(ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -377,10 +375,10 @@ void QVariantEdit::setValue(const QVariant & v) {
|
||||
if (_rect) {_rect->setValue(v.toRectF());}
|
||||
if (_point) {_point->setValue(v.toPointF());}
|
||||
if (_path) {
|
||||
if (_path->is_dir) _setDir(v.value<QVariantEdit::DirType>());
|
||||
else _setFile(v.value<QVariantEdit::FileType>());
|
||||
if (_path->is_dir) _setDir(v.value<QAD::Dir>());
|
||||
else _setFile(v.value<QAD::File>());
|
||||
}
|
||||
if (_enum) {_setEnum(v.value<QVariantEdit::EnumType>());}
|
||||
if (_enum) {_setEnum(v.value<QAD::Enum>());}
|
||||
if (_cur_edit) _cur_edit->blockSignals(false);
|
||||
}
|
||||
|
||||
@@ -414,12 +412,14 @@ void QVariantEdit::_newPath() {
|
||||
}
|
||||
|
||||
|
||||
void QVariantEdit::_setEnum(const QVariantEdit::EnumType & v) {
|
||||
void QVariantEdit::_setEnum(const QAD::Enum & v) {
|
||||
_enum->clear();
|
||||
_enum->addItems(v.enum_list);
|
||||
_enum->setProperty("enum_name", v.enum_name);
|
||||
foreach (const QAD::Enumerator & e, v.enum_list)
|
||||
_enum->addItem(e.name, QVariant(e.value));
|
||||
int i(0);
|
||||
for (i = 0; i < _enum->count(); ++i)
|
||||
if (_enum->itemText(i) == v.value) {
|
||||
if (_enum->itemText(i) == v.selected) {
|
||||
_enum->setCurrentIndex(i);
|
||||
break;
|
||||
}
|
||||
@@ -428,7 +428,7 @@ void QVariantEdit::_setEnum(const QVariantEdit::EnumType & v) {
|
||||
}
|
||||
|
||||
|
||||
void QVariantEdit::_setFile(const FileType & v) {
|
||||
void QVariantEdit::_setFile(const QAD::File & v) {
|
||||
_path->is_dir = false;
|
||||
_path->setValue(v.file);
|
||||
_path->filter = v.filter;
|
||||
@@ -436,7 +436,7 @@ void QVariantEdit::_setFile(const FileType & v) {
|
||||
}
|
||||
|
||||
|
||||
void QVariantEdit::_setDir(const DirType & v) {
|
||||
void QVariantEdit::_setDir(const QAD::Dir & v) {
|
||||
_path->is_dir = true;
|
||||
_path->setValue(v.dir);
|
||||
_path->is_abs = v.is_abs;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "colorbutton.h"
|
||||
#include "qrectedit.h"
|
||||
#include "qpointedit.h"
|
||||
#include "qad_types.h"
|
||||
#include <QCheckBox>
|
||||
#include <QDoubleSpinBox>
|
||||
|
||||
@@ -88,36 +89,15 @@ public:
|
||||
QVariant value() const;
|
||||
QSize sizeHint() const {if (_cur_edit) return _cur_edit->sizeHint(); return QWidget::sizeHint();}
|
||||
|
||||
struct EnumType {
|
||||
QString toString() const {return value;}
|
||||
QString value;
|
||||
QStringList enum_list;
|
||||
};
|
||||
|
||||
struct FileType {
|
||||
FileType(const QString & p = QString(), const QString & f = QString(), bool abs = false): file(p), filter(f), is_abs(abs) {}
|
||||
QString toString() const {return file;}
|
||||
QString file;
|
||||
QString filter;
|
||||
bool is_abs;
|
||||
};
|
||||
|
||||
struct DirType {
|
||||
DirType(const QString & d = QString(), bool abs = false): dir(d), is_abs(abs) {}
|
||||
QString toString() const {return dir;}
|
||||
QString dir;
|
||||
bool is_abs;
|
||||
};
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent * );
|
||||
void _recreate(const QVariant & new_value);
|
||||
void _delete();
|
||||
void _resize() {if (_cur_edit) _cur_edit->resize(size());}
|
||||
void _newPath();
|
||||
void _setEnum(const EnumType & v);
|
||||
void _setFile(const FileType & v);
|
||||
void _setDir(const DirType & v);
|
||||
void _setEnum(const QAD::Enum & v);
|
||||
void _setFile(const QAD::File & v);
|
||||
void _setDir(const QAD::Dir & v);
|
||||
|
||||
|
||||
QLabel * _empty;
|
||||
@@ -145,33 +125,4 @@ signals:
|
||||
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(QVariantEdit::EnumType)
|
||||
inline QDataStream & operator <<(QDataStream & s, const QVariantEdit::EnumType & v) {s << v.value << v.enum_list; return s;}
|
||||
inline QDataStream & operator >>(QDataStream & s, QVariantEdit::EnumType & v) {s >> v.value >> v.enum_list; return s;}
|
||||
inline QDebug operator <<(QDebug s, const QVariantEdit::EnumType & v) {s.nospace() << v.value; return s.space();}
|
||||
|
||||
Q_DECLARE_METATYPE(QVariantEdit::FileType)
|
||||
inline QDataStream & operator <<(QDataStream & s, const QVariantEdit::FileType & v) {s << v.file << v.filter << v.is_abs; return s;}
|
||||
inline QDataStream & operator >>(QDataStream & s, QVariantEdit::FileType & v) {s >> v.file >> v.filter >> v.is_abs; return s;}
|
||||
inline QDebug operator <<(QDebug s, const QVariantEdit::FileType & v) {s.nospace() << v.file; return s.space();}
|
||||
|
||||
Q_DECLARE_METATYPE(QVariantEdit::DirType)
|
||||
inline QDataStream & operator <<(QDataStream & s, const QVariantEdit::DirType & v) {s << v.dir << v.is_abs; return s;}
|
||||
inline QDataStream & operator >>(QDataStream & s, QVariantEdit::DirType & v) {s >> v.dir >> v.is_abs; return s;}
|
||||
inline QDebug operator <<(QDebug s, const QVariantEdit::DirType & v) {s.nospace() << v.dir; return s.space();}
|
||||
|
||||
class __QVariantEditRegistrator__ {
|
||||
public:
|
||||
__QVariantEditRegistrator__() {
|
||||
qRegisterMetaType<QVariantEdit::EnumType>("QVariantEdit::EnumType");
|
||||
qRegisterMetaTypeStreamOperators<QVariantEdit::EnumType>("QVariantEdit::EnumType");
|
||||
|
||||
qRegisterMetaType<QVariantEdit::FileType>("QVariantEdit::FileType");
|
||||
qRegisterMetaTypeStreamOperators<QVariantEdit::FileType>("QVariantEdit::FileType");
|
||||
|
||||
qRegisterMetaType<QVariantEdit::DirType>("QVariantEdit::DirType");
|
||||
qRegisterMetaTypeStreamOperators<QVariantEdit::DirType>("QVariantEdit::DirType");
|
||||
}
|
||||
};
|
||||
|
||||
#endif // QVARIANTEDIT_H
|
||||
|
||||
Reference in New Issue
Block a user