File indexing completed on 2024-10-06 12:46:17
0001 /* This file is part of the KDE project 0002 Copyright (C) 2003-2017 Jarosław Staniek <staniek@kde.org> 0003 0004 This program is free software; you can redistribute it and/or 0005 modify it under the terms of the GNU Library General Public 0006 License as published by the Free Software Foundation; either 0007 version 2 of the License, or (at your option) any later version. 0008 0009 This program is distributed in the hope that it will be useful, 0010 but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012 Library General Public License for more details. 0013 0014 You should have received a copy of the GNU Library General Public License 0015 along with this program; see the file COPYING. If not, write to 0016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0017 * Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #ifndef KDB_KDBTABLESCHEMACHANGELISTENER_H 0021 0022 #include <kdb_export.h> 0023 #include <KDbTristate> 0024 0025 class KDbConnection; 0026 class KDbQuerySchema; 0027 class KDbTableSchema; 0028 class KDbTableSchemaChangeListenerPrivate; 0029 0030 //! @short An interface allowing to listen for table schema changes 0031 /** 0032 * The KDbTableSchemaChangeListener class can be used to listen for changes in table schema. 0033 * For example query designer window that uses given table schema can be informed about 0034 * planned changes and it can be decided about closing the window prior to changes in the schema. 0035 */ 0036 class KDB_EXPORT KDbTableSchemaChangeListener 0037 { 0038 public: 0039 KDbTableSchemaChangeListener(); 0040 virtual ~KDbTableSchemaChangeListener(); 0041 0042 /** 0043 * Closes listening object so it will be deleted and thus no longer use a conflicting 0044 * table schema. For example if the listening object is a query designer in Kexi 0045 * application, the designer window will be closed. 0046 * This method can be used to avoid conflicts altering table schema or deleting it. 0047 */ 0048 virtual tristate closeListener() = 0; 0049 0050 /** 0051 * @return translated string that clearly identifies object that listens for changes 0052 * in a given table schema. 0053 * 0054 * For example it can be a query that uses the table, see KexiQueryPart in Kexi application 0055 * and the translated name can be "Query \"abc\"". This friendly identifier can be then 0056 * displayed by the application to inform users about objects depending on the table 0057 * so users can decide whether to approve schema changes or close the depending windows 0058 * to avoid conflicts. 0059 * 0060 * By default the name string is empty. 0061 */ 0062 QString name() const; 0063 0064 /** 0065 * @return translated string that clearly identifies object that listens for changes 0066 * in a given table schema. 0067 * 0068 * @see name() 0069 */ 0070 void setName(const QString &name); 0071 0072 /** Registers @a listener for receiving (listening) information about changes in table schema 0073 * @a table and all tables related to lookup fields. Changes can be related to altering and 0074 * removing. 0075 */ 0076 static void registerForChanges(KDbConnection *conn, 0077 KDbTableSchemaChangeListener* listener, 0078 const KDbTableSchema* table); 0079 0080 /** 0081 * Registers @a listener for receiving (listening) information about changes in query schema 0082 * @a query and all tables that the query uses. 0083 * 0084 * All tables related to lookup fields of these tables are also checked. 0085 * Changes can be related to table altering and removing. 0086 */ 0087 static void registerForChanges(KDbConnection *conn, 0088 KDbTableSchemaChangeListener* listener, 0089 const KDbQuerySchema* query); 0090 0091 /** 0092 * Unregisters @a listener for receiving (listening) information about changes 0093 * in table schema @a table. 0094 */ 0095 static void unregisterForChanges(KDbConnection *conn, 0096 KDbTableSchemaChangeListener* listener, 0097 const KDbTableSchema* table); 0098 0099 /** 0100 * Unregisters all listeners for receiving (listening) information about changes 0101 * in table schema @a table. 0102 */ 0103 static void unregisterForChanges(KDbConnection *conn, 0104 const KDbTableSchema* table); 0105 0106 /** 0107 * Unregisters @a listener for receiving (listening) information about changes 0108 * in any table or query schema. 0109 */ 0110 static void unregisterForChanges(KDbConnection *conn, 0111 KDbTableSchemaChangeListener* listener); 0112 0113 /** 0114 * Unregisters @a listener for receiving (listening) information about changes 0115 * in query schema @a query. 0116 */ 0117 static void unregisterForChanges(KDbConnection *conn, 0118 KDbTableSchemaChangeListener* listener, 0119 const KDbQuerySchema* query); 0120 0121 /** 0122 * Unregisters all listeners for receiving (listening) information about changes 0123 * in query schema @a query. 0124 */ 0125 static void unregisterForChanges(KDbConnection *conn, 0126 const KDbQuerySchema* query); 0127 0128 /** 0129 * @return list of all table schema listeners registered for receiving (listening) 0130 * information about changes in table schema @a table and other tables or queries depending 0131 * on @a table. 0132 */ 0133 static QList<KDbTableSchemaChangeListener *> listeners(KDbConnection *conn, 0134 const KDbTableSchema *table); 0135 0136 /** 0137 * @return list of all table schema listeners registered for receiving (listening) 0138 * information about changes in query @a query and other tables or queries depending on @a query. 0139 */ 0140 static QList<KDbTableSchemaChangeListener *> listeners(KDbConnection *conn, 0141 const KDbQuerySchema *query); 0142 0143 /** 0144 * Closes all table schema listeners for table schema @a table except for the ones from 0145 * the @a except list. 0146 * 0147 * See KDbTableSchemaChangeListener::closeListener() for explanation of the operation 0148 * of closing listener. 0149 * 0150 * @return true if all listenters for the table schema @a table have been successfully closed 0151 * (returned true) or @c false or @c cancelled if at least one listener returned 0152 * @c false or @c cancelled, respectively. 0153 * Regardless of returned value, closeListener() is called on all listeners for @a table. 0154 */ 0155 static tristate closeListeners(KDbConnection *conn, const KDbTableSchema* table, 0156 const QList<KDbTableSchemaChangeListener*> &except 0157 = QList<KDbTableSchemaChangeListener*>()); 0158 0159 /** 0160 * Closes all table schema listeners for query schema @a query except for the ones from 0161 * the @a except list. 0162 * 0163 * See KDbTableSchemaChangeListener::closeListener() for explanation of the operation 0164 * of closing listener. 0165 * 0166 * @return true if all listenters for the table schema @a table have been successfully closed 0167 * (returned true) or @c false or @c cancelled if at least one listener returned 0168 * @c false or @c cancelled, respectively. 0169 * Regardless of returned value, closeListener() is called on all listeners for @a table. 0170 */ 0171 static tristate closeListeners(KDbConnection *conn, const KDbQuerySchema* query, 0172 const QList<KDbTableSchemaChangeListener*> &except 0173 = QList<KDbTableSchemaChangeListener*>()); 0174 0175 private: 0176 Q_DISABLE_COPY(KDbTableSchemaChangeListener) 0177 KDbTableSchemaChangeListenerPrivate * const d; 0178 }; 0179 0180 #endif