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 QMenu; 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 &comment); 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