1
/***************************************************************************
2
* Copyright (C) 2005 by Adam Treat *
5
* Copyright (C) 2004 by Scott Wheeler *
8
* Copyright (C) 2000 Trolltech AS. All rights reserved. *
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
21
#include "datatableinterface.h"
27
#include <qfeatures.h>
28
#include <qstringlist.h>
29
#include <qobjectlist.h>
31
#include <kshortcut.h>
32
#include <kdirwatch.h>
40
class DataTableSearch;
41
class DatabaseConnection;
43
typedef QValueList<DataTable *> DataTableList;
44
typedef QValueList<DataReport *> DataReportList;
45
typedef QValueList<DataTableSearch> DataSearchList;
47
class Project : public DataTableInterface
49
friend class DataTable;
50
friend class DataTableBox;
51
friend class DatabaseConnection;
54
Project( QWidgetStack *dataTableStack, const QString &fileName = "" );
58
virtual void initialize();
60
virtual void uglyInitialize();
62
QString fileName() const;
64
virtual void newProject();
68
virtual void closeProject();
70
virtual void clipboard();
72
void setModified( bool b );
73
QString makeAbsolute( const QString &f );
74
QString makeRelative( const QString &f );
76
bool openDatabase( const QString &connection, bool suppressDialog = true );
77
void closeDatabase( const QString &connection );
79
QPtrList<DataTable> dataTablesByPtr() const;
80
QPtrList<DatabaseConnection> databaseConnections() const;
81
void setDatabaseConnections( const QPtrList<DatabaseConnection> &lst );
82
void addDatabaseConnection( DatabaseConnection *conn );
83
void removeDatabaseConnection( const QString &conn );
84
void removeAllDatabaseConnections();
85
DatabaseConnection *databaseConnection( const QString &name );
86
QStringList databaseConnectionList();
87
QStringList databaseTableList( const QString &connection );
88
QStringList databaseFieldList( const QString &connection, const QString &table );
90
bool loadConnections();
92
void setDataTables( const QPtrList<DataTable> &lst );
93
void addDataTable( DataTable *table );
94
void addDataReport( DataReport *report );
95
void removeDataTable( const QString &table );
96
void removeDataReport( const QString &report );
97
DataTable *dataTable( const QString &name );
98
QStringList dataTableList();
100
bool loadDataTables();
102
// ******************** DataTableCollection ********************
103
// The following group of functions implement the DataTableInterface API.
104
virtual QString name() const;
106
virtual QStringList dataTables() const;
107
// virtual void createDataTable( const QString &name );
109
virtual QString dataTable() const;
110
virtual void setDataTable( const QString &dataTable );
112
virtual void configureTable();
113
virtual void addVirtualField();
114
virtual void removeTable();
115
virtual void moveTableUp();
116
virtual void moveTableDown();
117
virtual void sortTables();
118
virtual void configureReport();
119
virtual void removeReport();
120
virtual void refreshReport();
122
virtual void editSearch();
123
virtual void removeSearch();
124
DataSearchList searchList();
125
virtual void invokeSearch( const QString &search );
126
virtual void appendSearch( const DataTableSearch &search );
127
virtual void removeSearch( const DataTableSearch &search );
129
virtual void advancedSearchRequested();
130
virtual void createKugarReport();
131
virtual void createKugarReport( const QString &parentTable );
133
void createDataTable();
134
void createChildDataTable( const QString &name );
135
void createSearchDataTable();
136
void createForeignDataTable();
137
void createDatabaseDataTable();
139
QObject *object() const;
143
virtual DataTable *currentDataTable() const;
144
virtual DataReport *currentDataReport() const;
145
virtual DataTable *rootOfCurrentDataTable();
146
virtual DataTableList dataTablesInCurrentTree();
147
virtual DataTableList dataTablesInDataTableTree( DataTable *dataTable );
148
virtual DataTableList childrenOfDataTable( DataTable *dataTable );
149
virtual DataTableList dataTablesInCurrentPeerTree();
150
virtual DataTableList dataTablesInDataTablePeerTree( DataTable *dataTable );
152
virtual void scrollTableUp();
153
virtual void scrollTableDown();
154
void scrollTabLeft();
155
void scrollTabRight();
157
void previousRecord();
165
virtual void setSplashMessage( const QString &txt );
166
virtual void setupDataTable( DataTable *dataTable, const QString &iconName );
167
virtual void setupDataTable( DataTable *dataTable, const QString &iconName, DataTable* parentTable );
168
virtual void setIconName( DataTable* dataTable, const QString &iconName );
169
virtual void setupDataReport( DataReport *dataReport, const QString &iconName );
170
virtual void setupDataReport( DataReport *dataReport, const QString &iconName, DataTable *parentTable );
171
virtual void setIconName( DataReport* dataReport, const QString &iconName );
172
QString uniqueDataTableName( const QString &suggest = i18n( "DataTable" ) ) const;
173
virtual QWidgetStack *dataTableStack() const;
174
DataTable *dataTableByName( const QString &name ) const;
176
void addName( const QString &name );
177
void removeName( const QString &name );
180
virtual void raise( DataTable *dataTable );
181
virtual void raise( DataReport *datareport );
183
bool containsDataTableFile( const QString &file ) const;
185
QString dataTableNameDialog( const QString &caption = i18n( "Create New DataTable" ),
186
const QString &suggest = QString::null,
187
bool forceUnique = true ) const;
189
// ******************** DataTableCollection ********************
193
QString m_projectIcon;
195
QPtrList<DatabaseConnection> m_dbConnections;
196
QPtrList<DataTable> m_dataTables;
197
QPtrList<DataReport> m_dataReports;
198
DataSearchList m_searchList;
200
// ******************** DataTableCollection ********************
202
QWidgetStack *m_dataTableStack;
203
ActionHandler *m_actionHandler;
205
QStringList m_dataTableNames;
206
// ******************** DataTableCollection ********************
209
inline QString sanitize( const QString &str )
211
//Replace special xml characters like '&','<' '>',''','"'
212
//with there xml markup equivalent (eg: &, <, etc)
214
value = value.replace( '&', "&" );
215
value = value.replace( '<', "<" );
216
value = value.replace( '>', ">" );
217
value = value.replace( '\'', "'" );
218
value = value.replace( '"', """ );
222
inline QString deSanitize( const QString &str )
224
//Replace xml markup characters (eg: &, <, etc)
225
//with there equivalent like '&','<' '>',''','"'
227
value = value.replace( "&", "&" );
228
value = value.replace( "<", "<" );
229
value = value.replace( ">", ">" );
230
value = value.replace( "'", "'" );
231
value = value.replace( """, "\"" );
235
class Project::ActionHandler : public QObject
239
ActionHandler( Project *collection );
242
KAction *createAction( const QString &text,
245
const QString &icon = QString::null,
246
const KShortcut &shortcut = KShortcut() );
249
void slotConfigureTable()
251
m_project->configureTable();
253
void slotAddVirtualField()
255
m_project->addVirtualField();
257
void slotConfigureReport()
259
m_project->configureReport();
261
void slotRemoveTable()
263
m_project->removeTable();
265
void slotMoveTableUp()
267
m_project->moveTableUp();
269
void slotMoveTableDown()
271
m_project->moveTableDown();
273
void slotRemoveReport()
275
m_project->removeReport();
277
void slotRefreshReport()
279
m_project->refreshReport();
281
void slotNewProject()
283
m_project->newProject();
285
void slotOpenProject()
287
m_project->openProject();
289
void slotSaveProject()
291
m_project->saveProject();
293
void slotSaveAsProject()
295
m_project->saveAsProject();
297
void slotCloseProject()
299
m_project->closeProject();
301
void slotEditProject()
303
m_project->editProject();
307
m_project->clipboard();
309
void slotEditSearch()
311
m_project->editSearch();
313
void slotRemoveSearch()
315
m_project->removeSearch();
317
void slotCreateDataTable()
319
m_project->createDataTable();
321
void slotCreateSearchDataTable()
323
m_project->createSearchDataTable();
325
void slotCreateDatabaseDataTable()
327
m_project->createDatabaseDataTable();
329
void slotCreateForeignDataTable()
331
m_project->createForeignDataTable();
333
void slotAdvancedSearchClicked()
335
m_project->advancedSearchRequested();
337
void slotCreateKugarReport()
339
m_project->createKugarReport();
341
void slotScrollTableUp()
343
m_project->scrollTableUp();
345
void slotScrollTableDown()
347
m_project->scrollTableDown();
349
void slotScrollTabLeft()
351
m_project->scrollTabLeft();
353
void slotScrollTabRight()
355
m_project->scrollTabRight();
357
void slotFirstRecord()
359
m_project->firstRecord();
361
void slotPreviousRecord()
363
m_project->previousRecord();
365
void slotNextRecord()
367
m_project->nextRecord();
369
void slotLastRecord()
371
m_project->lastRecord();
377
void slotInsertRecord()
379
m_project->insertRecord();
381
void slotChangeRecord()
383
m_project->changeRecord();
385
void slotDeleteRecord()
387
m_project->deleteRecord();
390
void signalSelectedItemsChanged();
391
void signalCountChanged();
395
QPtrList<KAction*> *m_parentFieldActions;