/* QAD - Qt ADvanced Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef SQL_RECORD_WIDGET_H #define SQL_RECORD_WIDGET_H #include "qad_sql_table_export.h" #include #include #include #include #include #include class QAD_SQL_TABLE_EXPORT SQLRecordWidget: public QWidget { Q_OBJECT public: SQLRecordWidget(QWidget * parent = 0); ~SQLRecordWidget(); void setRecord(const QSqlRecord & q, bool full_update = false); void setReadOnly(bool yes) { ro = yes; updateWidgets(); } void setFixedValue(const QString & name, const QVariant & value); void setTypeForName(const QString & name, const QString & type) { ftypes[name] = type; } void clearValues(); void removeWidgets() { qDeleteAll(cws); cws.clear(); } void hideColumn(const QString & col) { hidden << col; } void showColumn(const QString & col) { hidden.remove(col); } void showColumns() { hidden.clear(); } void addRelation(const QString & this_column, const QString & other_table, const QString & other_key, const QString & other_column) { relations_src << RelationSrc(this_column, other_table, other_key, other_column); updateRelations(); } void removeRelations() { relations_src.clear(); updateRelations(); } void addTranslation(const QString & file); void setConnectionName(const QString & conn_name) { connection_name = conn_name; } QString connectionName() const { return connection_name; } QString getValuesQuery() const; QString getUpdateQuery() const; bool isEmpty() const; QWidget * valueWidget(const QString & name) const { foreach(QWidget * w, cws) if (w->objectName() == name) return w; return 0; } void updateRelations(); protected: QPair trColumn(const QString & n) { QPair trn = translates.value(n); if (trn.first.isEmpty()) return QPair(n, ""); return trn; } void createWidgets(const QSqlRecord & q); void updateWidgets(); QVariant::Type fieldType(const QSqlField & f); struct QAD_SQL_TABLE_EXPORT RelationSrc { RelationSrc(const QString & v0 = QString(), const QString & v1 = QString(), const QString & v2 = QString(), const QString & v3 = QString()) : tcol(v0) , table(v1) , key(v2) , ocol(v3) {} QString tcol; QString table; QString key; QString ocol; }; QMap> translates; QVector relations_src; QMap>> relations; QMap ftypes; QSet hidden; QWidgetList cws; bool ro; QString connection_name; signals: void updateRequest(); void widgetsCreated(); }; #endif // SQL_RECORD_WIDGET_H