26 #include "altlangstredit.moc"
34 #include <QToolButton>
35 #include <QGridLayout>
41 #include <kiconloader.h>
43 #include <ktextedit.h>
44 #include <kcombobox.h>
54 class AltLangStrEdit::Private
65 currentLanguage =
"x-default";
72 languageCodeMap.insert(
"x-default", i18n(
"Default Language") );
76 languageCodeMap.insert(
"af-ZA", i18n(
"Afrikaans (South Africa)") );
77 languageCodeMap.insert(
"am-ET", i18n(
"Amharic (Ethiopia)") );
78 languageCodeMap.insert(
"ar-AE", i18n(
"Arabic (UAE)") );
79 languageCodeMap.insert(
"ar-BH", i18n(
"Arabic (Bahrain)") );
80 languageCodeMap.insert(
"ar-DZ", i18n(
"Arabic (Algeria)") );
81 languageCodeMap.insert(
"ar-EG", i18n(
"Arabic (Egypt)") );
82 languageCodeMap.insert(
"ar-IQ", i18n(
"Arabic (Iraq)") );
83 languageCodeMap.insert(
"ar-JO", i18n(
"Arabic (Jordan)") );
84 languageCodeMap.insert(
"ar-KW", i18n(
"Arabic (Kuwait)") );
85 languageCodeMap.insert(
"ar-LB", i18n(
"Arabic (Lebanon)") );
86 languageCodeMap.insert(
"ar-LY", i18n(
"Arabic (Libya)") );
87 languageCodeMap.insert(
"ar-MA", i18n(
"Arabic (Morocco)") );
88 languageCodeMap.insert(
"ar-OM", i18n(
"Arabic (Oman)") );
89 languageCodeMap.insert(
"ar-QA", i18n(
"Arabic (Qatar)") );
90 languageCodeMap.insert(
"ar-SA", i18n(
"Arabic (Saudi Arabia)") );
91 languageCodeMap.insert(
"ar-SY", i18n(
"Arabic (Syria)") );
92 languageCodeMap.insert(
"ar-TN", i18n(
"Arabic (Tunisia)") );
93 languageCodeMap.insert(
"ar-YE", i18n(
"Arabic (Yemen)") );
94 languageCodeMap.insert(
"as-IN", i18n(
"Assamese (India)") );
95 languageCodeMap.insert(
"ba-RU", i18n(
"Bashkir (Russia)") );
96 languageCodeMap.insert(
"be-BY", i18n(
"Belarusian (Belarus)") );
97 languageCodeMap.insert(
"bg-BG", i18n(
"Bulgarian (Bulgaria)") );
98 languageCodeMap.insert(
"bn-IN", i18n(
"Bengali (India)") );
99 languageCodeMap.insert(
"bo-BT", i18n(
"Tibetan (Bhutan)") );
100 languageCodeMap.insert(
"bo-CN", i18n(
"Tibetan (PRC)") );
101 languageCodeMap.insert(
"br-FR", i18n(
"Breton (France)") );
102 languageCodeMap.insert(
"ca-AD", i18n(
"Catalan (Andorra)") );
103 languageCodeMap.insert(
"ca-ES", i18n(
"Catalan (Spain)") );
104 languageCodeMap.insert(
"ca-FR", i18n(
"Catalan (France)") );
105 languageCodeMap.insert(
"co-FR", i18n(
"Corsican (France)") );
106 languageCodeMap.insert(
"cs-CZ", i18n(
"Czech (Czech Republic)") );
107 languageCodeMap.insert(
"cy-GB", i18n(
"Welsh (United Kingdom)") );
108 languageCodeMap.insert(
"da-DK", i18n(
"Danish (Denmark)") );
109 languageCodeMap.insert(
"de-AT", i18n(
"German (Austria)") );
110 languageCodeMap.insert(
"de-CH", i18n(
"German (Switzerland)") );
111 languageCodeMap.insert(
"de-DE", i18n(
"German (Germany)") );
112 languageCodeMap.insert(
"de-LI", i18n(
"German (Liechtenstein)") );
113 languageCodeMap.insert(
"de-LU", i18n(
"German (Luxembourg)") );
114 languageCodeMap.insert(
"el-GR", i18n(
"Greek (Greece)") );
115 languageCodeMap.insert(
"en-AU", i18n(
"English (Australia)") );
116 languageCodeMap.insert(
"en-BZ", i18n(
"English (Belize)") );
117 languageCodeMap.insert(
"en-CA", i18n(
"English (Canada)") );
118 languageCodeMap.insert(
"en-CB", i18n(
"English (Caribbean)") );
119 languageCodeMap.insert(
"en-GB", i18n(
"English (United Kingdom)") );
120 languageCodeMap.insert(
"en-IE", i18n(
"English (Ireland)") );
121 languageCodeMap.insert(
"en-IN", i18n(
"English (India)") );
122 languageCodeMap.insert(
"en-JA", i18n(
"English (Jamaica)") );
123 languageCodeMap.insert(
"en-MY", i18n(
"English (Malaysia)") );
124 languageCodeMap.insert(
"en-NZ", i18n(
"English (New Zealand)") );
125 languageCodeMap.insert(
"en-PH", i18n(
"English (Philippines)") );
126 languageCodeMap.insert(
"en-SG", i18n(
"English (Singapore)") );
127 languageCodeMap.insert(
"en-TT", i18n(
"English (Trinidad)") );
128 languageCodeMap.insert(
"en-US", i18n(
"English (United States)") );
129 languageCodeMap.insert(
"en-ZA", i18n(
"English (South Africa)") );
130 languageCodeMap.insert(
"en-ZW", i18n(
"English (Zimbabwe)") );
131 languageCodeMap.insert(
"es-AR", i18n(
"Spanish (Argentina)") );
132 languageCodeMap.insert(
"es-BO", i18n(
"Spanish (Bolivia)") );
133 languageCodeMap.insert(
"es-CL", i18n(
"Spanish (Chile)") );
134 languageCodeMap.insert(
"es-CO", i18n(
"Spanish (Colombia)") );
135 languageCodeMap.insert(
"es-CR", i18n(
"Spanish (Costa Rica)") );
136 languageCodeMap.insert(
"es-DO", i18n(
"Spanish (Dominican Republic)") );
137 languageCodeMap.insert(
"es-EC", i18n(
"Spanish (Ecuador)") );
138 languageCodeMap.insert(
"es-ES", i18n(
"Spanish (Spain)") );
139 languageCodeMap.insert(
"es-GT", i18n(
"Spanish (Guatemala)") );
140 languageCodeMap.insert(
"es-HN", i18n(
"Spanish (Honduras)") );
141 languageCodeMap.insert(
"es-MX", i18n(
"Spanish (Mexico)") );
142 languageCodeMap.insert(
"es-NI", i18n(
"Spanish (Nicaragua)") );
143 languageCodeMap.insert(
"es-PA", i18n(
"Spanish (Panama)") );
144 languageCodeMap.insert(
"es-PE", i18n(
"Spanish (Peru)") );
145 languageCodeMap.insert(
"es-PR", i18n(
"Spanish (Puerto Rico)") );
146 languageCodeMap.insert(
"es-PY", i18n(
"Spanish (Paraguay)") );
147 languageCodeMap.insert(
"es-SV", i18n(
"Spanish (El Salvador)") );
148 languageCodeMap.insert(
"es-UR", i18n(
"Spanish (Uruguay)") );
149 languageCodeMap.insert(
"es-US", i18n(
"Spanish (United States)") );
150 languageCodeMap.insert(
"es-VE", i18n(
"Spanish (Venezuela)") );
151 languageCodeMap.insert(
"et-EE", i18n(
"Estonian (Estonia)") );
152 languageCodeMap.insert(
"eu-ES", i18n(
"Basque (Basque Country)") );
153 languageCodeMap.insert(
"fa-IR", i18n(
"Persian (Iran)") );
154 languageCodeMap.insert(
"fi-FI", i18n(
"Finnish (Finland)") );
155 languageCodeMap.insert(
"fo-FO", i18n(
"Faeroese (Faero Islands)") );
156 languageCodeMap.insert(
"fr-BE", i18n(
"French (Belgium)") );
157 languageCodeMap.insert(
"fr-CA", i18n(
"French (Canada)") );
158 languageCodeMap.insert(
"fr-CH", i18n(
"French (Switzerland)") );
159 languageCodeMap.insert(
"fr-FR", i18n(
"French (France)") );
160 languageCodeMap.insert(
"fr-LU", i18n(
"French (Luxembourg)") );
161 languageCodeMap.insert(
"fr-MC", i18n(
"French (Monaco)") );
162 languageCodeMap.insert(
"fy-NL", i18n(
"Frisian (Netherlands)") );
163 languageCodeMap.insert(
"ga-IE", i18n(
"Irish (Ireland)") );
164 languageCodeMap.insert(
"gl-ES", i18n(
"Galician (Galicia)") );
165 languageCodeMap.insert(
"gu-IN", i18n(
"Gujarati (India)") );
166 languageCodeMap.insert(
"he-IL", i18n(
"Hebrew (Israel)") );
167 languageCodeMap.insert(
"hi-IN", i18n(
"Hindi (India)") );
168 languageCodeMap.insert(
"hr-BA", i18n(
"Croatian (Bosnia and Herzegovina, Latin)") );
169 languageCodeMap.insert(
"hr-HR", i18n(
"Croatian (Croatia)") );
170 languageCodeMap.insert(
"hu-HU", i18n(
"Hungarian (Hungary)") );
171 languageCodeMap.insert(
"hy-AM", i18n(
"Armenian (Armenia)") );
172 languageCodeMap.insert(
"id-ID", i18n(
"(Indonesian)") );
173 languageCodeMap.insert(
"ii-CN", i18n(
"Yi (PRC)") );
174 languageCodeMap.insert(
"is-IS", i18n(
"Icelandic (Iceland)") );
175 languageCodeMap.insert(
"it-CH", i18n(
"Italian (Switzerland)") );
176 languageCodeMap.insert(
"it-IT", i18n(
"Italian (Italy)") );
177 languageCodeMap.insert(
"ja-JP", i18n(
"Japanese (Japan)") );
178 languageCodeMap.insert(
"ka-GE", i18n(
"Georgian (Georgia)") );
179 languageCodeMap.insert(
"kk-KZ", i18n(
"Kazakh (Kazakhstan)") );
180 languageCodeMap.insert(
"kl-GL", i18n(
"Greenlandic (Greenland)") );
181 languageCodeMap.insert(
"km-KH", i18n(
"Khmer (Cambodia)") );
182 languageCodeMap.insert(
"kn-IN", i18n(
"Kannada (India)") );
183 languageCodeMap.insert(
"ko-KR", i18n(
"Korean (South Korea)") );
184 languageCodeMap.insert(
"ky-KG", i18n(
"Kyrgyz (Kyrgyzstan)") );
185 languageCodeMap.insert(
"lb-LU", i18n(
"Luxembourgish (Luxembourg)") );
186 languageCodeMap.insert(
"lo-LA", i18n(
"Lao (Lao PDR)") );
187 languageCodeMap.insert(
"lt-LT", i18n(
"Lithuanian (Lithuania)") );
188 languageCodeMap.insert(
"lv-LV", i18n(
"Latvian (Latvia)") );
189 languageCodeMap.insert(
"mi-NZ", i18n(
"Maori (New Zealand)") );
190 languageCodeMap.insert(
"mk-MK", i18n(
"Macedonian (Macedonia)") );
191 languageCodeMap.insert(
"ml-IN", i18n(
"Malayalam (India)") );
192 languageCodeMap.insert(
"mn-CN", i18n(
"Mongolian (PRC)") );
193 languageCodeMap.insert(
"mn-MN", i18n(
"Mongolian (Mongolia)") );
194 languageCodeMap.insert(
"mr-IN", i18n(
"Marathi (India)") );
195 languageCodeMap.insert(
"ms-BN", i18n(
"Malay (Brunei Darussalam)") );
196 languageCodeMap.insert(
"ms-MY", i18n(
"Malay (Malaysia)") );
197 languageCodeMap.insert(
"mt-MT", i18n(
"Maltese (Malta)") );
198 languageCodeMap.insert(
"nb-NO", i18n(
"Norwegian Bokmål (Norway)") );
199 languageCodeMap.insert(
"ne-NP", i18n(
"Nepali (Nepal)") );
200 languageCodeMap.insert(
"nl-BE", i18n(
"Dutch (Belgium)") );
201 languageCodeMap.insert(
"nl-NL", i18n(
"Dutch (Netherlands)") );
202 languageCodeMap.insert(
"nn-NO", i18n(
"Norwegian Nynorsk (Norway)") );
203 languageCodeMap.insert(
"ns-ZA", i18n(
"Sesotho sa Leboa (South Africa)") );
204 languageCodeMap.insert(
"oc-FR", i18n(
"Occitan (France)") );
205 languageCodeMap.insert(
"or-IN", i18n(
"Oriya (India)") );
206 languageCodeMap.insert(
"pa-IN", i18n(
"Punjabi (India)") );
207 languageCodeMap.insert(
"pl-PL", i18n(
"Polish (Poland)") );
208 languageCodeMap.insert(
"ps-AF", i18n(
"Pashto (Afghanistan)") );
209 languageCodeMap.insert(
"pt-BR", i18n(
"Portuguese (Brazil)") );
210 languageCodeMap.insert(
"pt-PT", i18n(
"Portuguese (Portugal)") );
211 languageCodeMap.insert(
"rm-CH", i18n(
"Romansh (Switzerland)") );
212 languageCodeMap.insert(
"ro-RO", i18n(
"Romanian (Romania)") );
213 languageCodeMap.insert(
"ru-RU", i18n(
"Russian (Russia)") );
214 languageCodeMap.insert(
"rw-RW", i18n(
"Kinyarwanda (Rwanda)") );
215 languageCodeMap.insert(
"sa-IN", i18n(
"Sanskrit (India)") );
216 languageCodeMap.insert(
"se-FI", i18n(
"Sami (Northern, Finland)") );
217 languageCodeMap.insert(
"se-NO", i18n(
"Sami (Northern, Norway)") );
218 languageCodeMap.insert(
"se-SE", i18n(
"Sami (Northern, Sweden)") );
219 languageCodeMap.insert(
"si-LK", i18n(
"Sinhala (Sri Lanka)") );
220 languageCodeMap.insert(
"sk-SK", i18n(
"Slovak (Slovakia)") );
221 languageCodeMap.insert(
"sl-SI", i18n(
"Slovenian (Slovenia)") );
222 languageCodeMap.insert(
"sq-AL", i18n(
"Albanian (Albania)") );
223 languageCodeMap.insert(
"sv-FI", i18n(
"Swedish (Finland)") );
224 languageCodeMap.insert(
"sv-SE", i18n(
"Swedish (Sweden)") );
225 languageCodeMap.insert(
"sw-KE", i18n(
"Swahili (Kenya)") );
226 languageCodeMap.insert(
"ta-IN", i18n(
"Tamil (India)") );
227 languageCodeMap.insert(
"te-IN", i18n(
"Telugu (India)") );
228 languageCodeMap.insert(
"th-TH", i18n(
"Thai (Thailand)") );
229 languageCodeMap.insert(
"tk-TM", i18n(
"Turkmen (Turkmenistan)") );
230 languageCodeMap.insert(
"tn-ZA", i18n(
"Setswana Tswana (South Africa)") );
231 languageCodeMap.insert(
"tr-IN", i18n(
"Urdu (India)") );
232 languageCodeMap.insert(
"tr-TR", i18n(
"Turkish (Turkey)") );
233 languageCodeMap.insert(
"tt-RU", i18n(
"Tatar (Russia)") );
234 languageCodeMap.insert(
"ug-CN", i18n(
"Uighur (PRC)") );
235 languageCodeMap.insert(
"uk-UA", i18n(
"Ukrainian (Ukraine)") );
236 languageCodeMap.insert(
"ur-PK", i18n(
"Urdu (Pakistan)") );
237 languageCodeMap.insert(
"vi-VN", i18n(
"Vietnamese (Vietnam)") );
238 languageCodeMap.insert(
"wo-SN", i18n(
"Wolof (Senegal)") );
239 languageCodeMap.insert(
"xh-ZA", i18n(
"isiXhosa Xhosa (South Africa)") );
240 languageCodeMap.insert(
"yo-NG", i18n(
"Yoruba (Nigeria)") );
241 languageCodeMap.insert(
"zh-CN", i18n(
"Chinese (PRC)") );
242 languageCodeMap.insert(
"zh-HK", i18n(
"Chinese (Hong Kong SAR, PRC)") );
243 languageCodeMap.insert(
"zh-MO", i18n(
"Chinese (Macao SAR)") );
244 languageCodeMap.insert(
"zh-SG", i18n(
"Chinese (Singapore)") );
245 languageCodeMap.insert(
"zh-TW", i18n(
"Chinese (Taiwan)") );
246 languageCodeMap.insert(
"zu-ZA", i18n(
"isiZulu Zulu (South Africa)") );
251 languageCodeMap.clear();
258 LanguageCodeMap languageCodeMap;
276 :
QWidget(parent), d(new Private)
279 d->titleLabel =
new QLabel(
this);
281 d->delValueButton->setIcon(SmallIcon(
"edit-clear"));
282 d->delValueButton->setToolTip(i18n(
"Remove entry for this language"));
283 d->delValueButton->setEnabled(
false);
286 d->languageCB->setSizeAdjustPolicy(KComboBox::AdjustToContents);
287 d->languageCB->setWhatsThis(i18n(
"Select item language here."));
290 d->valueEdit->setCheckSpellingEnabled(
true);
295 grid->
addWidget(d->titleLabel, 0, 0, 1, 1);
296 grid->
addWidget(d->languageCB, 0, 2, 1, 1);
297 grid->
addWidget(d->delValueButton, 0, 3, 1, 1);
298 grid->
addWidget(d->valueEdit, 1, 0, 1,-1);
307 connect(d->languageCB, SIGNAL(currentIndexChanged(
int)),
310 connect(d->delValueButton, SIGNAL(clicked()),
313 connect(d->valueEdit, SIGNAL(textChanged()),
324 return d->currentLanguage;
329 if(d->currentLanguage.isEmpty())
331 d->currentLanguage =
"x-default";
335 d->currentLanguage = lang;
341 return d->languageCB->itemText(index);
346 d->titleLabel->setText(title);
351 d->valueEdit->setClickMessage(msg);
361 d->values.remove(d->currentLanguage);
368 d->currentLanguage = d->languageCB->currentText();
373 d->valueEdit->blockSignals(
true);
375 QString langISO3066 = d->currentLanguage;
377 d->valueEdit->setSpellCheckingLanguage(langISO3066);
379 QString text = d->values.value(d->currentLanguage);
380 d->valueEdit->setText(text);
381 d->delValueButton->setEnabled(!text.
isNull());
383 d->valueEdit->blockSignals(
false);
385 d->languageCB->setToolTip(d->languageCodeMap.value(d->currentLanguage));
395 d->valueEdit->blockSignals(
true);
397 QString text = d->values.value(d->currentLanguage);
398 d->valueEdit->setText(text);
399 d->delValueButton->setEnabled(!text.
isNull());
401 d->valueEdit->blockSignals(
false);
411 d->languageCB->blockSignals(
true);
413 d->languageCB->clear();
421 foreach(
const QString& item, list)
423 d->languageCB->addItem(item);
424 d->languageCB->setItemIcon(d->languageCB->count()-1, SmallIcon(
"dialog-ok"));
427 d->languageCB->insertSeparator(d->languageCB->count());
433 it != d->languageCodeMap.end(); ++it)
437 d->languageCB->addItem(it.key());
441 d->languageCB->setCurrentItem(d->currentLanguage);
443 d->languageCB->blockSignals(
false);
448 return d->values.value(
QString(
"x-default"));
458 QString editedText = d->valueEdit->toPlainText();
459 QString previousText = d->values.value(d->currentLanguage);
472 else if (previousText.
isNull())
476 else if (editedText != previousText)
481 d->values.insert(d->currentLanguage, editedText);
488 QString text = d->valueEdit->toPlainText();
490 d->values.insert(d->currentLanguage, text);
492 d->delValueButton->setEnabled(
true);
498 d->linesVisible = lines;
500 if (d->linesVisible == 0)
502 d->valueEdit->setFixedHeight(QWIDGETSIZE_MAX);
506 d->valueEdit->setFixedHeight(d->valueEdit->fontMetrics().lineSpacing() * d->linesVisible +
507 d->valueEdit->contentsMargins().top() +
508 d->valueEdit->contentsMargins().bottom() +
510 2*(d->valueEdit->style()->pixelMetric(QStyle::PM_DefaultFrameWidth) +
511 d->valueEdit->style()->pixelMetric(QStyle::PM_FocusFrameVMargin))
516 if (d->linesVisible < 3)
518 d->valueEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
524 return d->linesVisible;
529 if (e->
type() == QEvent::FontChange)
void reset()
Reset widget, clear all entries.
QString currentLanguageCode() const
void slotSelectionChanged()
QString defaultAltLang() const
void signalModified(const QString &lang, const QString &text)
Emitted when the user changes the text for the current language.
void setLinesVisible(uint lines)
Fix lines visibile in text editor to lines.
AltLangStrEdit(QWidget *parent)
bool contains(const QString &str, Qt::CaseSensitivity cs) const
void addCurrent()
Ensure that the current language is added to the list of entries, even if the text is empty...
void setCurrentLanguageCode(const QString &lang)
void signalSelectionChanged(const QString &lang)
Emitted when the current language changed.
void signalValueAdded(const QString &lang, const QString &text)
Emitted when an entry for a new language is added.
void setSpacing(int spacing)
void setValues(const KExiv2::AltLangMap &values)
void loadLangAltListEntries()
void setTitle(const QString &title)
bool asDefaultAltLang() const
uint linesVisible() const
void setMargin(int margin)
KExiv2::AltLangMap & values()
bool setAlignment(QWidget *w, QFlags< Qt::AlignmentFlag > alignment)
QString & replace(int position, int n, QChar after)
void signalValueDeleted(const QString &lang)
Emitted when the entry for a language is removed.
void setColumnStretch(int column, int stretch)
QString languageCode(int index) const
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
virtual void changeEvent(QEvent *e)
void setClickMessage(const QString &msg)
===========================================================This file is a part of digiKam project htt...