| 1947 | |
| 1948 | |
| 1949 | void ControlPanelDialog::createLanguageTab() { |
| 1950 | languageTab = new QWidget(this); |
| 1951 | QVBoxLayout *layout = new QVBoxLayout(languageTab); |
| 1952 | |
| 1953 | // Add some spacing at the top |
| 1954 | layout->addSpacing(10); |
| 1955 | |
| 1956 | // Title and description |
| 1957 | QLabel *titleLabel = new QLabel(tr("Language Settings"), languageTab); |
| 1958 | titleLabel->setStyleSheet("font-size: 16px; font-weight: bold;"); |
| 1959 | layout->addWidget(titleLabel); |
| 1960 | |
| 1961 | layout->addSpacing(10); |
| 1962 | |
| 1963 | // Use system language checkbox |
| 1964 | useSystemLanguageCheckbox = new QCheckBox(tr("Use System Language (Auto-detect)"), languageTab); |
| 1965 | layout->addWidget(useSystemLanguageCheckbox); |
| 1966 | |
| 1967 | QLabel *systemNote = new QLabel(tr("When enabled, SpeedyNote will automatically detect and use your system's language setting."), languageTab); |
| 1968 | systemNote->setWordWrap(true); |
| 1969 | systemNote->setStyleSheet("color: gray; font-size: 11px; margin-bottom: 15px;"); |
| 1970 | layout->addWidget(systemNote); |
| 1971 | |
| 1972 | // Manual language selection |
| 1973 | QLabel *manualLabel = new QLabel(tr("Manual Language Override:"), languageTab); |
| 1974 | manualLabel->setStyleSheet("font-weight: bold;"); |
| 1975 | layout->addWidget(manualLabel); |
| 1976 | |
| 1977 | // Read saved language settings once — used both for combo population (so |
| 1978 | // a saved-but-uninstalled language still appears) and for initial state. |
| 1979 | QSettings settings(QStringLiteral("SpeedyNote"), QStringLiteral("App")); |
| 1980 | const bool useSystemLang = settings.value(QStringLiteral("useSystemLanguage"), true).toBool(); |
| 1981 | const QString overrideLang = settings.value(QStringLiteral("languageOverride"), |
| 1982 | QStringLiteral("en")).toString(); |
| 1983 | |
| 1984 | languageCombo = new QComboBox(languageTab); |
| 1985 | for (const auto& lang : discoverAvailableLanguages(overrideLang)) { |
| 1986 | languageCombo->addItem(lang.displayName, lang.code); |
| 1987 | if (!lang.installed) { |
| 1988 | // Grey out the "not installed" entry but still allow selection so the |
| 1989 | // user can see their saved choice and can change it. |
| 1990 | const int idx = languageCombo->count() - 1; |
| 1991 | languageCombo->setItemData(idx, QColor(Qt::gray), Qt::ForegroundRole); |
| 1992 | } |
| 1993 | } |
| 1994 | useSystemLanguageCheckbox->setChecked(useSystemLang); |
| 1995 | languageCombo->setEnabled(!useSystemLang); |
| 1996 | const int savedIdx = languageCombo->findData(overrideLang); |
| 1997 | if (savedIdx >= 0) languageCombo->setCurrentIndex(savedIdx); |
| 1998 | layout->addWidget(languageCombo); |
| 1999 | |
| 2000 | QLabel *manualNote = new QLabel(tr("Select a specific language to override the system setting. Changes take effect after restarting the application."), languageTab); |
| 2001 | manualNote->setWordWrap(true); |
| 2002 | manualNote->setStyleSheet("color: gray; font-size: 11px; margin-bottom: 15px;"); |
| 2003 | layout->addWidget(manualNote); |
| 2004 | |
| 2005 | // Current language status |
| 2006 | QLabel *statusLabel = new QLabel(tr("Current Language Status:"), languageTab); |
nothing calls this directly
no test coverage detected