102 lines
3.8 KiB
C++
Executable File
102 lines
3.8 KiB
C++
Executable File
#ifndef MAINWINDOW_H
|
|
#define MAINWINDOW_H
|
|
|
|
#include <QMainWindow>
|
|
#include <QJsonObject>
|
|
#include <memory>
|
|
#include <QNetworkReply>
|
|
|
|
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_bulkAutoTranslateButton_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;
|
|
};
|
|
struct BulkTranslationItem {
|
|
QTreeWidgetItem *item;
|
|
QString originalText;
|
|
QString translatedText;
|
|
QVector<QString> placeholders;
|
|
};
|
|
std::unique_ptr<QNetworkAccessManager> networkManager;
|
|
Ui::MainWindow *ui;
|
|
QJsonObject configuration;
|
|
bool noConfigChange{false};
|
|
std::map<QString, QString> fileContentsMap;
|
|
std::map<QString, std::vector<QString> > 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 requestNextBulkTranslationBatch();
|
|
void handleBulkTranslationReply(QNetworkReply *reply, int firstItem, int itemCount);
|
|
void showBulkTranslationDialog();
|
|
void onDeeplTranslationAuthenticationError(QNetworkReply *reply, QAuthenticator *authenticator);
|
|
void countAndShowUntranslated();
|
|
void searchNext();
|
|
QVector<TranslationItem> parseTextBlock(const QString &block);
|
|
void setConfigValue(const QString &key, const QString &value);
|
|
// DeepL placeholder protection: maps tag id -> original placeholder text
|
|
QVector<QString> deeplPlaceholderMap;
|
|
QString protectPlaceholdersForDeepl(const QString &input);
|
|
QString restorePlaceholdersFromDeepl(const QString &input);
|
|
QVector<BulkTranslationItem> bulkTranslations;
|
|
int nextBulkTranslationIndex{0};
|
|
};
|
|
#endif // MAINWINDOW_H
|