1
git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
177
qad_widgets/qvariantedit.h
Normal file
177
qad_widgets/qvariantedit.h
Normal file
@@ -0,0 +1,177 @@
|
||||
#ifndef QVARIANTEDIT_H
|
||||
#define QVARIANTEDIT_H
|
||||
|
||||
#include "clineedit.h"
|
||||
#include "ecombobox.h"
|
||||
#include "colorbutton.h"
|
||||
#include "qrectedit.h"
|
||||
#include "qpointedit.h"
|
||||
#include <QCheckBox>
|
||||
#include <QDoubleSpinBox>
|
||||
|
||||
|
||||
class StringListEdit: public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
StringListEdit(QWidget * parent = 0);
|
||||
~StringListEdit() {delete combo; delete butt_add; delete butt_del; delete butt_clear;}
|
||||
|
||||
QStringList value() const {QStringList l; for (int i = 0; i < combo->count(); ++i) l << combo->itemText(i); return l;}
|
||||
|
||||
private:
|
||||
virtual void changeEvent(QEvent * e);
|
||||
|
||||
QBoxLayout lay;
|
||||
EComboBox * combo;
|
||||
QPushButton * butt_add, * butt_del, * butt_clear;
|
||||
|
||||
public slots:
|
||||
void setValue(const QStringList & v) {combo->clear(); combo->addItems(v); combo->setCurrentIndex(0);}
|
||||
|
||||
private slots:
|
||||
void editItem();
|
||||
void addItem() {combo->addItem(combo->currentText()); emit valueChanged();}
|
||||
void delItem() {if (combo->currentIndex() < 0) return; combo->removeItem(combo->currentIndex()); emit valueChanged();}
|
||||
void clear() {if (combo->count() == 0) return; combo->clear(); emit valueChanged();}
|
||||
|
||||
signals:
|
||||
void valueChanged();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class PathEdit: public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
PathEdit(QWidget * parent = 0);
|
||||
~PathEdit() {delete line; delete butt_select;}
|
||||
|
||||
QString value() const {return line->text();}
|
||||
|
||||
bool is_dir, is_abs;
|
||||
QString filter;
|
||||
|
||||
private:
|
||||
virtual void changeEvent(QEvent * e);
|
||||
|
||||
QBoxLayout lay;
|
||||
CLineEdit * line;
|
||||
QPushButton * butt_select;
|
||||
|
||||
public slots:
|
||||
void setValue(const QString & v) {line->setText(v);}
|
||||
|
||||
private slots:
|
||||
void select();
|
||||
|
||||
signals:
|
||||
void valueChanged();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class QVariantEdit: public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QVariant value READ value WRITE setValue)
|
||||
|
||||
public:
|
||||
explicit QVariantEdit(QWidget * parent = 0);
|
||||
~QVariantEdit();
|
||||
|
||||
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);
|
||||
|
||||
|
||||
QLabel * _empty;
|
||||
CLineEdit * _line;
|
||||
QCheckBox * _check;
|
||||
ColorButton * _color;
|
||||
StringListEdit * _list;
|
||||
QDateTimeEdit * _date;
|
||||
QDoubleSpinBox * _spin;
|
||||
QRectEdit * _rect;
|
||||
QPointEdit * _point;
|
||||
PathEdit * _path;
|
||||
QComboBox * _enum;
|
||||
QWidget * _cur_edit;
|
||||
QVariant _value;
|
||||
|
||||
private slots:
|
||||
void _changed() {emit valueChanged(value());}
|
||||
|
||||
public slots:
|
||||
void setValue(const QVariant & v);
|
||||
|
||||
signals:
|
||||
void valueChanged(QVariant);
|
||||
|
||||
};
|
||||
|
||||
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