#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class QTreeWidgetItem; class QFile; class QNetworkReply; class QAuthenticator; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_selectProjectDirButton_clicked(); // void on_reloadButton_clicked(); void on_languageCombo_currentTextChanged(const QString &selectedLanguage); void on_reloadTranslationsButton_clicked(); void on_reloadFilesButton_clicked(); void on_nextUntranslatedButton_clicked(); void on_treeWidget_itemSelectionChanged(); void on_setTranslationButton_clicked(); void on_setTranslationAndJumpNextButton_clicked(); void on_setAndNextAndAutoTranslate_clicked(); void on_translationEdit_returnPressed(); void on_saveButton_clicked(); void on_cleanupButton_clicked(); void on_cleanupAndSaveButton_clicked(); void onDeeplTranslationPossibilitiesLoaded(QNetworkReply *reply); void on_deeplTranslateFrom_currentTextChanged(const QString &sourceLanguage); void on_autoTranslateButton_clicked(); void on_searchButton_clicked(); void on_searchNextButton_clicked(); void on_deeplApiKey_editingFinished(); void on_copyButton_clicked(); private: struct TranslationItem { TranslationItem(int line_, QString character_, QString oldText_, QString newText_): line(line_), character(character_), oldText(oldText_), newText(newText_) {}; int line; QString character; QString oldText; QString newText; }; std::unique_ptr networkManager; Ui::MainWindow *ui; QJsonObject configuration; bool noConfigChange{false}; std::map fileContentsMap; std::map > translationsMap; QString searchQuery; void crawlProject(); void populateTreeWidgetFromMap(); void saveFiles(QStringList &failedFiles); bool createBackup(const QString &filePath, const QString &backupFileName); bool editAndSaveFile(QTreeWidgetItem *fileItem, const QString &backupFileName, const QString &fileName); bool saveToFile(const QString &backupFileName, const QStringList &lines); bool parseAndEditFile(QFile &backupFile, QTreeWidgetItem *fileItem, QStringList &lines, bool &changed); QString findNewText(QTreeWidgetItem *fileItem, const QString &lineNumber, const QString &originalText, const QString &speaker); void loadDeeplTranslationPossibilities(); void renderDeeplSources(); void translationRequestFinished(QNetworkReply *reply); void onDeeplTranslationAuthenticationError(QNetworkReply *reply, QAuthenticator *authenticator); void countAndShowUntranslated(); void searchNext(); QVector parseTextBlock(const QString &block); void setConfigValue(const QString &key, const QString &value); }; #endif // MAINWINDOW_H