| 67 | { |
| 68 | public: |
| 69 | Window() : QDialog(nullptr, Qt::WindowMinMaxButtonsHint) |
| 70 | { |
| 71 | display = new QFormLayout(this); |
| 72 | |
| 73 | settings.beginGroup(TRANSLATION_PROVIDER); |
| 74 | |
| 75 | auto translateToCombo = new QComboBox(this); |
| 76 | translateToCombo->addItems(languagesTo); |
| 77 | int i = -1; |
| 78 | if (settings.contains(TRANSLATE_TO)) i = translateToCombo->findText(settings.value(TRANSLATE_TO).toString()); |
| 79 | if (i < 0) i = translateToCombo->findText(NATIVE_LANGUAGE, Qt::MatchStartsWith); |
| 80 | if (i < 0) i = translateToCombo->findText("English", Qt::MatchStartsWith); |
| 81 | translateToCombo->setCurrentIndex(i); |
| 82 | SaveTranslateTo(translateToCombo->currentText()); |
| 83 | display->addRow(TRANSLATE_TO, translateToCombo); |
| 84 | connect(translateToCombo, &QComboBox::currentTextChanged, this, &Window::SaveTranslateTo); |
| 85 | auto translateFromCombo = new QComboBox(this); |
| 86 | translateFromCombo->addItem("?"); |
| 87 | translateFromCombo->addItems(languagesFrom); |
| 88 | i = -1; |
| 89 | if (settings.contains(TRANSLATE_FROM)) i = translateFromCombo->findText(settings.value(TRANSLATE_FROM).toString()); |
| 90 | if (i < 0) i = 0; |
| 91 | translateFromCombo->setCurrentIndex(i); |
| 92 | SaveTranslateFrom(translateFromCombo->currentText()); |
| 93 | display->addRow(TRANSLATE_FROM, translateFromCombo); |
| 94 | connect(translateFromCombo, &QComboBox::currentTextChanged, this, &Window::SaveTranslateFrom); |
| 95 | for (auto [value, label] : Array<bool&, const char*>{ |
| 96 | { translateSelectedOnly, TRANSLATE_SELECTED_THREAD_ONLY }, |
| 97 | { useRateLimiter, RATE_LIMIT_ALL_THREADS }, |
| 98 | { rateLimitSelected, RATE_LIMIT_SELECTED_THREAD }, |
| 99 | { useCache, USE_TRANS_CACHE }, |
| 100 | { useFilter, FILTER_GARBAGE } |
| 101 | }) |
| 102 | { |
| 103 | value = settings.value(label, value).toBool(); |
| 104 | auto checkBox = new QCheckBox(this); |
| 105 | checkBox->setChecked(value); |
| 106 | display->addRow(label, checkBox); |
| 107 | connect(checkBox, &QCheckBox::clicked, [label, &value](bool checked) { settings.setValue(label, value = checked); }); |
| 108 | } |
| 109 | for (auto [value, label] : Array<int&, const char*>{ |
| 110 | { tokenCount, MAX_TRANSLATIONS_IN_TIMESPAN }, |
| 111 | { rateLimitTimespan, TIMESPAN }, |
| 112 | { maxSentenceSize, MAX_SENTENCE_SIZE }, |
| 113 | }) |
| 114 | { |
| 115 | value = settings.value(label, value).toInt(); |
| 116 | auto spinBox = new QSpinBox(this); |
| 117 | spinBox->setRange(0, INT_MAX); |
| 118 | spinBox->setValue(value); |
| 119 | display->addRow(label, spinBox); |
| 120 | connect(spinBox, qOverload<int>(&QSpinBox::valueChanged), [label, &value](int newValue) { settings.setValue(label, value = newValue); }); |
| 121 | } |
| 122 | if (GET_API_KEY_FROM) |
| 123 | { |
| 124 | auto keyEdit = new QLineEdit(settings.value(API_KEY).toString(), this); |
| 125 | tlp->authKey = S(keyEdit->text()); |
| 126 | QObject::connect(keyEdit, &QLineEdit::textChanged, [](QString key) { settings.setValue(API_KEY, S(tlp->authKey = S(key))); }); |