![]() |
QxOrm
1.2.8
C++ Object Relational Mapping library
|
00001 /**************************************************************************** 00002 ** 00003 ** http://www.qxorm.com/ 00004 ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com) 00005 ** 00006 ** This file is part of the QxOrm library 00007 ** 00008 ** This software is provided 'as-is', without any express or implied 00009 ** warranty. In no event will the authors be held liable for any 00010 ** damages arising from the use of this software 00011 ** 00012 ** Commercial Usage 00013 ** Licensees holding valid commercial QxOrm licenses may use this file in 00014 ** accordance with the commercial license agreement provided with the 00015 ** Software or, alternatively, in accordance with the terms contained in 00016 ** a written agreement between you and Lionel Marty 00017 ** 00018 ** GNU General Public License Usage 00019 ** Alternatively, this file may be used under the terms of the GNU 00020 ** General Public License version 3.0 as published by the Free Software 00021 ** Foundation and appearing in the file 'license.gpl3.txt' included in the 00022 ** packaging of this file. Please review the following information to 00023 ** ensure the GNU General Public License version 3.0 requirements will be 00024 ** met : http://www.gnu.org/copyleft/gpl.html 00025 ** 00026 ** If you are unsure which license is appropriate for your use, or 00027 ** if you have questions regarding the use of this file, please contact : 00028 ** contact@qxorm.com 00029 ** 00030 ****************************************************************************/ 00031 00032 #ifndef _IX_MODEL_H_ 00033 #define _IX_MODEL_H_ 00034 00035 #ifdef _MSC_VER 00036 #pragma once 00037 #endif 00038 00046 #include <QtCore/qabstractitemmodel.h> 00047 00048 #ifndef Q_MOC_RUN 00049 #include <QxRegister/IxClass.h> 00050 #include <QxDataMember/IxDataMemberX.h> 00051 #include <QxCollection/QxCollection.h> 00052 #include <QxDao/IxSqlRelation.h> 00053 #include <QxDao/QxSqlQuery.h> 00054 #include <QxDao/QxDao.h> 00055 #include <QxValidator/QxInvalidValueX.h> 00056 #include <QxValidator/QxValidatorFct.h> 00057 #endif // Q_MOC_RUN 00058 00059 namespace qx { 00060 00144 class QX_DLL_EXPORT IxModel : public QAbstractItemModel 00145 { 00146 00147 Q_OBJECT 00148 00149 public: 00150 00151 typedef QHash<QString, IxModel *> type_relation_by_name; 00152 typedef QList<type_relation_by_name> type_lst_relation_by_name; 00153 00154 protected: 00155 00156 IxClass * m_pClass; 00157 IxDataMemberX * m_pDataMemberX; 00158 IxDataMember * m_pDataMemberId; 00159 IxCollection * m_pCollection; 00160 QHash<int, QByteArray> m_lstRoleNames; 00161 QList<IxDataMember *> m_lstDataMember; 00162 QHash<QString, int> m_lstDataMemberByKey; 00163 QHash<QString, QString> m_lstHeaders; 00164 QStringList m_lstColumns; 00165 QSqlDatabase m_database; 00166 QSqlError m_lastError; 00167 IxModel * m_pParent; 00168 type_lst_relation_by_name m_lstChild; 00169 00170 public: 00171 00172 IxModel(QObject * parent = 0); 00173 virtual ~IxModel(); 00174 00175 IxClass * getClass() const; 00176 IxCollection * getCollection() const; 00177 QSqlDatabase getDatabase() const; 00178 QSqlError getLastError() const; 00179 Q_INVOKABLE QString getLastErrorAsString() const; 00180 Q_INVOKABLE QStringList getListOfColumns() const; 00181 QHash<QString, QString> getListOfHeaders() const; 00182 IxDataMember * getDataMember(int column) const; 00183 Q_INVOKABLE QString getDataMemberKey(int column) const; 00184 Q_INVOKABLE QVariant getModelValue(int row, const QString & column) const; 00185 00186 void setDatabase(const QSqlDatabase & db); 00187 Q_INVOKABLE void setListOfColumns(const QStringList & lst); 00188 void setListOfHeaders(const QHash<QString, QString> & lst); 00189 Q_INVOKABLE bool setModelValue(int row, const QString & column, const QVariant & value); 00190 void setParentModel(IxModel * pParent); 00191 00192 virtual long qxCount(const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL) = 0; 00193 virtual QSqlError qxCount(long & lCount, const qx::QxSqlQuery & query = qx::QxSqlQuery(), QSqlDatabase * pDatabase = NULL) = 0; 00194 virtual QSqlError qxFetchById(const QVariant & id, const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00195 virtual QSqlError qxFetchAll(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00196 virtual QSqlError qxFetchByQuery(const qx::QxSqlQuery & query, const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00197 virtual QSqlError qxInsert(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00198 virtual QSqlError qxUpdate(const qx::QxSqlQuery & query = qx::QxSqlQuery(), const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00199 virtual QSqlError qxSave(const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00200 virtual QSqlError qxSaveRow(int row, const QStringList & relation = QStringList(), QSqlDatabase * pDatabase = NULL) = 0; 00201 virtual QSqlError qxDeleteById(const QVariant & id, QSqlDatabase * pDatabase = NULL) = 0; 00202 virtual QSqlError qxDeleteAll(QSqlDatabase * pDatabase = NULL) = 0; 00203 virtual QSqlError qxDeleteByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0; 00204 virtual QSqlError qxDestroyById(const QVariant & id, QSqlDatabase * pDatabase = NULL) = 0; 00205 virtual QSqlError qxDestroyAll(QSqlDatabase * pDatabase = NULL) = 0; 00206 virtual QSqlError qxDestroyByQuery(const qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0; 00207 virtual QSqlError qxExecuteQuery(qx::QxSqlQuery & query, QSqlDatabase * pDatabase = NULL) = 0; 00208 virtual qx_bool qxExist(const QVariant & id, QSqlDatabase * pDatabase = NULL) = 0; 00209 virtual qx::QxInvalidValueX qxValidate(const QStringList & groups = QStringList()) = 0; 00210 00211 Q_INVOKABLE int qxCount_(const QString & sQuery); 00212 Q_INVOKABLE bool qxFetchById_(const QVariant & id, const QStringList & relation = QStringList()); 00213 Q_INVOKABLE bool qxFetchAll_(const QStringList & relation = QStringList()); 00214 Q_INVOKABLE bool qxFetchByQuery_(const QString & sQuery, const QStringList & relation = QStringList()); 00215 Q_INVOKABLE bool qxInsert_(const QStringList & relation = QStringList()); 00216 Q_INVOKABLE bool qxUpdate_(const QString & sQuery, const QStringList & relation = QStringList()); 00217 Q_INVOKABLE bool qxSave_(const QStringList & relation = QStringList()); 00218 Q_INVOKABLE bool qxSaveRow_(int row, const QStringList & relation = QStringList()); 00219 Q_INVOKABLE bool qxDeleteById_(const QVariant & id); 00220 Q_INVOKABLE bool qxDeleteAll_(); 00221 Q_INVOKABLE bool qxDeleteByQuery_(const QString & sQuery); 00222 Q_INVOKABLE bool qxDestroyById_(const QVariant & id); 00223 Q_INVOKABLE bool qxDestroyAll_(); 00224 Q_INVOKABLE bool qxDestroyByQuery_(const QString & sQuery); 00225 Q_INVOKABLE bool qxExecuteQuery_(const QString & sQuery); 00226 Q_INVOKABLE bool qxExist_(const QVariant & id); 00227 Q_INVOKABLE QString qxValidate_(const QStringList & groups = QStringList()); 00228 00229 protected: 00230 00231 void raiseEvent_headerDataChanged(Qt::Orientation orientation, int first, int last); 00232 #if (QT_VERSION >= 0x050000) 00233 void raiseEvent_dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight, const QVector<int> & roles = QVector<int>()); 00234 void raiseEvent_layoutAboutToBeChanged(const QList<QPersistentModelIndex> & parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); 00235 void raiseEvent_layoutChanged(const QList<QPersistentModelIndex> & parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); 00236 #else // (QT_VERSION >= 0x050000) 00237 void raiseEvent_dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight); 00238 void raiseEvent_layoutAboutToBeChanged(); 00239 void raiseEvent_layoutChanged(); 00240 #endif // (QT_VERSION >= 0x050000) 00241 00242 public: 00243 00244 Q_INVOKABLE void clear(bool bUpdateColumns = false); 00245 00246 virtual int rowCount(const QModelIndex & parent = QModelIndex()) const; 00247 virtual int columnCount(const QModelIndex & parent = QModelIndex()) const; 00248 virtual QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; 00249 virtual QModelIndex parent(const QModelIndex & index) const; 00250 virtual bool hasChildren(const QModelIndex & parent = QModelIndex()) const; 00251 virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; 00252 virtual Qt::ItemFlags flags(const QModelIndex & index) const; 00253 virtual Qt::DropActions supportedDropActions() const; 00254 virtual bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); 00255 virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant & value, int role = Qt::EditRole); 00256 00257 #if (QT_VERSION >= 0x050000) 00258 virtual QHash<int, QByteArray> roleNames() const; 00259 virtual Qt::DropActions supportedDragActions() const; 00260 #endif // (QT_VERSION >= 0x050000) 00261 00262 protected: 00263 00264 void generateRoleNames(); 00265 QSqlDatabase * database(QSqlDatabase * other); 00266 IxModel * getChild(long row, const QString & relation); 00267 void insertChild(long row, const QString & relation, IxModel * pChild); 00268 void removeListOfChild(long row); 00269 00270 }; 00271 00272 } // namespace qx 00273 00274 #endif // _IX_MODEL_H_