git-svn-id: svn://db.shs.com.ru/libs@161 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2017-02-02 08:52:24 +00:00
parent dfb021c228
commit 0932e6ecf4
20 changed files with 663 additions and 432 deletions

View File

@@ -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;

View File

@@ -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