-
Notifications
You must be signed in to change notification settings - Fork 0
/
excelwidget.h
197 lines (162 loc) · 6.98 KB
/
excelwidget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#ifndef EXCELWIDGET_H
#define EXCELWIDGET_H
#include <QWidget>
#include <QFileDialog>
#include <QScopedPointer>
#include <QFile>
#include <QtConcurrentRun>
#include <QFutureWatcher>
#include <QFuture>
#include <QThreadPool>
#include <QProgressDialog>
#include <QAxObject>
#include <QMessageBox>
#include <QTableView>
#include <QItemSelectionModel>
#include <shlobj.h> //для использования QAxObject в отдельном потоке
#include "defines.h"
#include "address.h"
#include "xlsparser.h"
#include "tablemodel.h"
#include "parseexcelwidget.h"
#include "database.h"
#include "simpledelegate.h"
#include "searcher.h"
#include "parseexcelwidget.h"
/// Cкрывать столбец с распарсенным элементами
#define HIDE_PARSED_COLUMNS 1
/// Отправить найденные элементы отладчику
//#define SHOW_FOUNDED_ITEMS_TO_DEBUG
const int MAX_OPEN_IN_ROWS=0;
namespace Ui {
class ExcelWidget;
}
template<typename T>
class FutureWatcher;
// ********************* class ExcelWidget ********************
/**
* \class ExcelWidget
* \brief Основной класс, производящий всю работу над самим документом с адресами (Excel, csv)
*/
class ExcelWidget : public QWidget
{
Q_OBJECT
public:
explicit ExcelWidget(QWidget *parent = 0);
~ExcelWidget();
QString getCurrentTab();
int getCountTab();
ParseExcelWidget *getParseWidget()
{
return _parseWidget;
}
public slots:
void open();
void search();
void search2();
void stopSearch();
bool closeTab(); //если есть еще вкладки, то true
bool save(); //если успешно сохранено, то true
void waitSearch();
signals:
void headReaded(QString sheet, MapAddressElementPosition head);
void rowReaded(QString sheet, int nRow, QStringList row);
void countRows(QString sheet, int count);
void sheetsReaded(QStringList sheets);
void rowParsed(QString sheet, int row);
void sheetParsed(QString sheet);
void opening(QString fname); //начало чтения файла
void openFinished(QString fname); //чтение файла окончено
void openError(QString fname); //чтение файла окончено c ошибкой
void searching(QString sheet); //поиск начат
void searchFinished(QString sheet); //поиск в базе окончен
void saving(QString sheet, QString file); //сохранение начато
void saveFinished(QString sheet, QString file); //сохранение завершено
void toDebug(QString objName, QString mes);
void searchInBase(QString sheetName, int nRow, Address addr);
void searchInBase2(QString sheetName, int nRow, Address addr, bool findIt);
void startSearchThread(QThread::Priority);
void finishSearchThread();
void waitSearchThread(int msec);
void messageReady(QString);
void errorOccured(QString nameObject, int code, QString errorDesc);
void currentRowChanged(QString sheet, int nRow, MapAEValue data); //срабатывает по изменении строки в модели
void objectDeleted();
private slots:
void onRowRead(const QString &sheet, const int &nRow, QStringList &row);
bool onHeadRead(const QString &sheet, QStringList &head);
void onSheetRead(const QString &sheet);
void onHideColumn(const QString &sheet, int column);
void onRowParsed(QString sheet, int nRow, Address a); //parser signal-slots
void onSheetParsed(QString sheet);
void onSearchFinished(QString sheet);
void onNotFoundMandatoryColumn(QString sheet, AddressElements ae, QString colName);
// void onProcessOfSearchFinished();
void onFinishSearch();
void onFounedAddress(QString sheetName, int nRow, Address addr);
void onNotFounedAddress(QString sheetName, int nRow, Address addr);
void onProcessOfOpenFinished();//после того окончили с открытием excel документа
void onRemoveRow(QString sheet, int nRow);
void onCurrentRowChanged();
void onCurrentRowChanged(QString sheet, int nRow, QStringList row);
void onTableDataChanged(QModelIndex topLeft, QModelIndex bottomRight, QVector<int> roles);
void onParsedDataChanged(QString sheet, int nRow, MapAEValue row);
void on__lineEditNewAddr_returnPressed();
void on_pushButton_clicked();
void onAddNewAddr(QString addr);
private:
Ui::ExcelWidget *_ui;
XlsParser *_parser;
ParseExcelWidget *_parseWidget;
QHash<QString, TableModel *> _models;
QHash<QString, QTableView *> _views;
QHash<QString, QItemSelectionModel *> _selections;
// QHash<QString, int> _sheetIndex;
QFutureWatcher<QVariant> _futureWatcher;
QFutureWatcher<ListAddress> _futureWatcherS;
QMap<QString, MapAddressElementPosition> _mapHead;
QMap<QString, MapAddressElementPosition> _mapPHead;
QThread *_thread;
QHash<QString, int> _countParsedRow;
QHash<QString, int> _countRow;
QHash<QString, int> _editedRow; //редактируемая пользователем строка
QHash<QString, int> _countRepatingRow; //количество повторяющихся строк (строк для которых найдено более одного совпадения в базе)
QHash<QString, QSet<int> > _searchingRows; //номер строк, которые ищутся в данный момент в БД
QHash<QString, int> _insertedRowAfterSearch; //номер вставляемой строки при повторе
// QString _searchingSheetName;
SimpleDelegate *_delegateFounded;
SimpleDelegate *_delegateNotFounded;
SimpleDelegate *_delegateRepeatFounded;
QMap<QString, ListAddress > _data2;
QString _openFilename;
QList<FutureWatcher<SearchStruct> *> _listFuture;
QThreadPool _threadPool;
// ExcelDocument _data;
// QThread *_thread;
QVariant openExcelFile(QString filename, int maxCount);
QVariant openCsvFile(QString filename, int maxCountRows);
bool saveToCsv(const QString &filename, const QString &sheet);
bool saveToExcel(const QString &filename, const QString &sheetName);
bool runThreadSave(const QString &filename, const QString &sheetName);
void runThreadOpen(QString openFilename);
void removeSheet(QString &sheet);
QString getCurrentTime() const
{
return QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
}
};
template<typename T>
class FutureWatcher : public QFutureWatcher<T>
{
public:
FutureWatcher(QObject * parent = 0) :
QFutureWatcher<T>(parent)
{
// qDebug() << "FutureWatcher";
}
~FutureWatcher()
{
// qDebug() << "~FutureWatcher";
}
};
#endif // EXCELWIDGET_H