1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the Qt Linguist of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
21 | ** included in the packaging of this file. Please review the following |
22 | ** information to ensure the GNU General Public License requirements will |
23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
24 | ** |
25 | ** $QT_END_LICENSE$ |
26 | ** |
27 | ****************************************************************************/ |
28 | |
29 | #ifndef MAINWINDOW_H |
30 | #define MAINWINDOW_H |
31 | |
32 | #include "phrase.h" |
33 | #include "ui_mainwindow.h" |
34 | #include "recentfiles.h" |
35 | #include "messagemodel.h" |
36 | |
37 | #include <QtCore/QHash> |
38 | #include <QtCore/QLocale> |
39 | |
40 | #include <QtWidgets/QMainWindow> |
41 | |
42 | QT_BEGIN_NAMESPACE |
43 | |
44 | class QPixmap; |
45 | class QAction; |
46 | class QDialog; |
47 | class QLabel; |
48 | class ; |
49 | class QPrinter; |
50 | class QProcess; |
51 | class QIcon; |
52 | class QSortFilterProxyModel; |
53 | class QStackedWidget; |
54 | class QTableView; |
55 | class QTreeView; |
56 | |
57 | class BatchTranslationDialog; |
58 | class ErrorsView; |
59 | class FindDialog; |
60 | class FocusWatcher; |
61 | class FormPreviewView; |
62 | class MessageEditor; |
63 | class PhraseView; |
64 | class SourceCodeView; |
65 | class Statistics; |
66 | class TranslateDialog; |
67 | class TranslationSettingsDialog; |
68 | |
69 | class MainWindow : public QMainWindow |
70 | { |
71 | Q_OBJECT |
72 | public: |
73 | enum {PhraseCloseMenu, PhraseEditMenu, PhrasePrintMenu}; |
74 | |
75 | MainWindow(); |
76 | ~MainWindow(); |
77 | |
78 | bool openFiles(const QStringList &names, bool readWrite = true); |
79 | static RecentFiles &recentFiles(); |
80 | static QString friendlyString(const QString &str); |
81 | |
82 | protected: |
83 | void readConfig(); |
84 | void writeConfig(); |
85 | void closeEvent(QCloseEvent *); |
86 | bool eventFilter(QObject *object, QEvent *event); |
87 | |
88 | private slots: |
89 | void done(); |
90 | void doneAndNext(); |
91 | void prev(); |
92 | void next(); |
93 | void recentFileActivated(QAction *action); |
94 | void setupRecentFilesMenu(); |
95 | void open(); |
96 | void openAux(); |
97 | void saveAll(); |
98 | void save(); |
99 | void saveAs(); |
100 | void releaseAll(); |
101 | void release(); |
102 | void releaseAs(); |
103 | void print(); |
104 | void closeFile(); |
105 | bool closeAll(); |
106 | void findAgain(); |
107 | void showTranslateDialog(); |
108 | void showBatchTranslateDialog(); |
109 | void showTranslationSettings(); |
110 | void updateTranslateHit(bool &hit); |
111 | void translate(int mode); |
112 | void newPhraseBook(); |
113 | void openPhraseBook(); |
114 | void closePhraseBook(QAction *action); |
115 | void editPhraseBook(QAction *action); |
116 | void printPhraseBook(QAction *action); |
117 | void addToPhraseBook(); |
118 | void manual(); |
119 | void resetSorting(); |
120 | void about(); |
121 | void aboutQt(); |
122 | |
123 | void updateViewMenu(); |
124 | void fileAboutToShow(); |
125 | void editAboutToShow(); |
126 | |
127 | void showContextDock(); |
128 | void showMessagesDock(); |
129 | void showPhrasesDock(); |
130 | void showSourceCodeDock(); |
131 | void showErrorDock(); |
132 | |
133 | void setupPhrase(); |
134 | bool maybeSaveAll(); |
135 | bool maybeSave(int model); |
136 | void updateProgress(); |
137 | void maybeUpdateStatistics(const MultiDataIndex &); |
138 | void translationChanged(const MultiDataIndex &); |
139 | void updateCaption(); |
140 | void updateLatestModel(const QModelIndex &index); |
141 | void selectedContextChanged(const QModelIndex &sortedIndex, const QModelIndex &oldIndex); |
142 | void selectedMessageChanged(const QModelIndex &sortedIndex, const QModelIndex &oldIndex); |
143 | void setCurrentMessage(int modelIndex, const Candidate &tm); |
144 | |
145 | // To synchronize from the message editor to the model ... |
146 | void updateTranslation(const QStringList &translations); |
147 | void updateTranslatorComment(const QString &); |
148 | |
149 | void updateActiveModel(int); |
150 | void refreshItemViews(); |
151 | void toggleFinished(const QModelIndex &index); |
152 | void prevUnfinished(); |
153 | void nextUnfinished(); |
154 | void findNext(const QString &text, DataModel::FindLocation where, |
155 | bool matchCase, bool ignoreAccelerators, bool skipObsolete, bool regularExp); |
156 | void revalidate(); |
157 | void toggleStatistics(); |
158 | void toggleVisualizeWhitespace(); |
159 | void onWhatsThis(); |
160 | void updatePhraseDicts(); |
161 | void updatePhraseDict(int model); |
162 | |
163 | private: |
164 | QModelIndex nextContext(const QModelIndex &index) const; |
165 | QModelIndex prevContext(const QModelIndex &index) const; |
166 | QModelIndex nextMessage(const QModelIndex ¤tIndex, bool checkUnfinished = false) const; |
167 | QModelIndex prevMessage(const QModelIndex ¤tIndex, bool checkUnfinished = false) const; |
168 | bool next(bool checkUnfinished); |
169 | bool prev(bool checkUnfinished); |
170 | |
171 | void updateStatistics(); |
172 | void initViewHeaders(); |
173 | void modelCountChanged(); |
174 | void setupMenuBar(); |
175 | void setupToolBars(); |
176 | void setCurrentMessage(const QModelIndex &index); |
177 | void setCurrentMessage(const QModelIndex &index, int model); |
178 | QModelIndex setMessageViewRoot(const QModelIndex &index); |
179 | QModelIndex currentContextIndex() const; |
180 | QModelIndex currentMessageIndex() const; |
181 | PhraseBook *openPhraseBook(const QString &name); |
182 | bool isPhraseBookOpen(const QString &name); |
183 | bool savePhraseBook(QString *name, PhraseBook &pb); |
184 | bool maybeSavePhraseBook(PhraseBook *phraseBook); |
185 | bool maybeSavePhraseBooks(); |
186 | QStringList pickTranslationFiles(); |
187 | void showTranslationSettings(int model); |
188 | void updateLatestModel(int model); |
189 | void updateSourceView(int model, MessageItem *item); |
190 | void updatePhraseBookActions(); |
191 | void updatePhraseDictInternal(int model); |
192 | void releaseInternal(int model); |
193 | void saveInternal(int model); |
194 | |
195 | QPrinter *printer(); |
196 | |
197 | // FIXME: move to DataModel |
198 | void updateDanger(const MultiDataIndex &index, bool verbose); |
199 | |
200 | bool searchItem(DataModel::FindLocation where, const QString &searchWhat); |
201 | |
202 | QProcess *m_assistantProcess; |
203 | QTreeView *m_contextView; |
204 | QTreeView *m_messageView; |
205 | MultiDataModel *m_dataModel; |
206 | MessageModel *m_messageModel; |
207 | QSortFilterProxyModel *m_sortedContextsModel; |
208 | QSortFilterProxyModel *m_sortedMessagesModel; |
209 | MessageEditor *m_messageEditor; |
210 | PhraseView *m_phraseView; |
211 | QStackedWidget *m_sourceAndFormView; |
212 | SourceCodeView *m_sourceCodeView; |
213 | FormPreviewView *m_formPreviewView; |
214 | ErrorsView *m_errorsView; |
215 | QLabel *m_progressLabel; |
216 | QLabel *m_modifiedLabel; |
217 | FocusWatcher *m_focusWatcher; |
218 | QString m_phraseBookDir; |
219 | // model : keyword -> list of appropriate phrases in the phrasebooks |
220 | QList<QHash<QString, QList<Phrase *> > > m_phraseDict; |
221 | QList<PhraseBook *> m_phraseBooks; |
222 | QMap<QAction *, PhraseBook *> m_phraseBookMenu[3]; |
223 | QPrinter *m_printer; |
224 | |
225 | FindDialog *m_findDialog; |
226 | QString m_findText; |
227 | Qt::CaseSensitivity m_findMatchCase; |
228 | bool m_findIgnoreAccelerators; |
229 | bool m_findSkipObsolete; |
230 | bool m_findUseRegExp; |
231 | DataModel::FindLocation m_findWhere; |
232 | |
233 | TranslateDialog *m_translateDialog; |
234 | QString m_latestFindText; |
235 | int m_latestCaseSensitivity; |
236 | int m_remainingCount; |
237 | int m_hitCount; |
238 | |
239 | BatchTranslationDialog *m_batchTranslateDialog; |
240 | TranslationSettingsDialog *m_translationSettingsDialog; |
241 | |
242 | bool m_settingCurrentMessage; |
243 | int m_fileActiveModel; |
244 | int m_editActiveModel; |
245 | MultiDataIndex m_currentIndex; |
246 | |
247 | QDockWidget *m_contextDock; |
248 | QDockWidget *m_messagesDock; |
249 | QDockWidget *m_phrasesDock; |
250 | QDockWidget *m_sourceAndFormDock; |
251 | QDockWidget *m_errorsDock; |
252 | |
253 | Ui::MainWindow m_ui; // menus and actions |
254 | Statistics *m_statistics; |
255 | }; |
256 | |
257 | QT_END_NAMESPACE |
258 | |
259 | #endif |
260 | |