Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
messagemodel.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef MESSAGEMODEL_H
5#define MESSAGEMODEL_H
6
7#include "translator.h"
8
9#include <QtCore/QAbstractItemModel>
10#include <QtCore/QList>
11#include <QtCore/QHash>
12#include <QtCore/QLocale>
13#include <QtGui/QColor>
14#include <QtGui/QBitmap>
15
17
18class DataModel;
19class MultiDataModel;
20struct StatisticalData;
21
23{
24public:
25 MessageItem(const TranslatorMessage &message);
26
27 bool danger() const { return m_danger; }
28 void setDanger(bool danger) { m_danger = danger; }
29 bool ncrMode() const { return m_ncrMode; }
30 void setNcrMode(bool mode) { m_ncrMode = mode; }
31
32 void setTranslation(const QString &translation);
33
34 QString id() const { return m_message.id(); }
35 QString context() const { return m_message.context(); }
36 QString label() const { return m_message.label(); }
37 QString text() const;
38 QString pluralText() const;
39 QString comment() const { return m_message.comment(); }
40 QString fileName() const { return m_message.fileName(); }
41 QString extraComment() const { return m_message.extraComment(); }
42 QString translatorComment() const { return m_message.translatorComment(); }
43 void setTranslatorComment(const QString &cmt) { m_message.setTranslatorComment(cmt); }
44 int lineNumber() const { return m_message.lineNumber(); }
45 QString translation() const;
47 void setTranslations(const QStringList &translations);
48
49 TranslatorMessage::Type type() const { return m_message.type(); }
50 void setType(TranslatorMessage::Type type) { m_message.setType(type); }
51
52 bool isFinished() const { return type() == TranslatorMessage::Finished; }
56 const TranslatorMessage &message() const { return m_message; }
57
58 bool compare(const QString &findText, bool matchSubstring,
59 Qt::CaseSensitivity cs) const;
60
61private:
62 TranslatorMessage m_message;
63 bool m_danger;
64 bool m_ncrMode;
65};
66
68
70{
71public:
72 GroupItem(TranslationType type, const QString &group) : m_group(group), m_translationType(type)
73 {
74 }
75
76 int finishedDangerCount() const { return m_finishedDangerCount; }
77 int unfinishedDangerCount() const { return m_unfinishedDangerCount; }
78
79 int finishedCount() const { return m_finishedCount; }
80 int unfinishedCount() const { return m_nonobsoleteCount - m_finishedCount; }
81 int nonobsoleteCount() const { return m_nonobsoleteCount; }
82
83 QString group() const { return m_group; }
84 TranslationType translationType() const { return m_translationType; }
85 QString comment() const { return m_comment; }
86 QString fullContext() const { return m_comment.trimmed(); }
87
88 // For item status in context list
89 bool isObsolete() const { return !nonobsoleteCount(); }
90 bool isFinished() const { return unfinishedCount() == 0; }
91
92 MessageItem *messageItem(int i) const;
93 int messageCount() const { return msgItemList.size(); }
94
95 MessageItem *findMessage(const QString &sourcetext, const QString &comment) const;
96 MessageItem *findMessageById(const QString &msgid) const;
97
98private:
99 friend class DataModel;
100 friend class MultiDataModel;
101 void appendMessage(const MessageItem &msg) { msgItemList.append(msg); }
102 void appendToComment(const QString &x);
103 void incrementFinishedCount() { ++m_finishedCount; }
104 void decrementFinishedCount() { --m_finishedCount; }
105 void incrementFinishedDangerCount() { ++m_finishedDangerCount; }
106 void decrementFinishedDangerCount() { --m_finishedDangerCount; }
107 void incrementUnfinishedDangerCount() { ++m_unfinishedDangerCount; }
108 void decrementUnfinishedDangerCount() { --m_unfinishedDangerCount; }
109 void incrementNonobsoleteCount() { ++m_nonobsoleteCount; }
110
111 QString m_comment;
112 QString m_group;
113 TranslationType m_translationType;
114 int m_finishedCount = 0;
115 int m_finishedDangerCount = 0;
116 int m_unfinishedDangerCount = 0;
117 int m_nonobsoleteCount = 0;
118 QList<MessageItem> msgItemList;
119};
120
122{
123public:
124 DataIndex(TranslationType type, int group = -1, int message = -1)
125 : m_group(group), m_message(message), m_type(type)
126 {
127 }
128 int group() const { return m_group; }
129 int message() const { return m_message; }
130 bool isValid() const { return m_group >= 0; }
131 bool isIdBased() const { return m_type == IDBASED; }
133
134protected:
138};
139
141{
142public:
143 DataModelIterator(TranslationType type, const DataModel *model = 0, int groupNo = 0,
144 int messageNo = 0);
145 MessageItem *current() const;
146 bool isValid() const;
147 void operator++();
148
149private:
150 const DataModel *m_model; // not owned
151};
152
153class DataModel : public QObject
154{
156public:
158
159 enum FindLocation { NoLocation = 0, SourceText = 0x1, Translations = 0x2, Comments = 0x4 };
160
161 // Specializations
162 int contextCount() const { return m_contextList.size(); }
163 int labelCount() const { return m_labelList.size(); }
164 GroupItem *findGroup(const QString &group, TranslationType type) const;
165 MessageItem *findMessage(const QString &context, const QString &label,
166 const QString &sourcetext, const QString &comment) const;
167
168 GroupItem *groupItem(int index, TranslationType type) const;
170 MessageItem *messageItem(const DataIndex &index) const;
171
172 int messageCount() const { return m_numMessages; }
173 bool isEmpty() const { return m_numMessages == 0; }
174 bool isModified() const { return m_modified; }
175 void setModified(bool dirty);
176 bool isWritable() const { return m_writable; }
177 void setWritable(bool writable) { m_writable = writable; }
178
179 bool isWellMergeable(const DataModel *other) const;
180 bool load(const QString &fileName, bool *langGuessed, QWidget *parent);
181 bool save(QWidget *parent) { return save(m_srcFileName, parent); }
182 bool saveAs(const QString &newFileName, QWidget *parent);
183 bool release(const QString &fileName, bool verbose,
184 bool ignoreUnfinished, TranslatorSaveMode mode, QWidget *parent);
185 QString srcFileName(bool pretty = false) const
186 { return pretty ? prettifyPlainFileName(m_srcFileName) : m_srcFileName; }
187
188 static QString prettifyPlainFileName(const QString &fn);
189 static QString prettifyFileName(const QString &fn);
190
191 bool setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
192 QLocale::Language language() const { return m_language; }
193 QLocale::Territory territory() const { return m_territory; }
194 void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory);
195 QLocale::Language sourceLanguage() const { return m_sourceLanguage; }
196 QLocale::Territory sourceTerritory() const { return m_sourceTerritory; }
197
198 const QString &localizedLanguage() const { return m_localizedLanguage; }
199 const QStringList &numerusForms() const { return m_numerusForms; }
200 const QList<bool> &countRefNeeds() const { return m_countRefNeeds; }
201
203 void doCharCounting(const QString& text, int& trW, int& trC, int& trCS);
204 void updateStatistics();
205
206 int getSrcWords() const { return m_srcWords; }
207 int getSrcChars() const { return m_srcChars; }
208 int getSrcCharsSpc() const { return m_srcCharsSpc; }
209
210signals:
212 void progressChanged(int finishedCount, int oldFinishedCount);
215
216private:
217 friend class DataModelIterator;
218
219 QList<GroupItem> m_contextList;
220 QList<GroupItem> m_labelList;
221
222 bool save(const QString &fileName, QWidget *parent);
223 void updateLocale();
224
225 bool m_writable;
226 bool m_modified;
227
228 int m_numMessages;
229
230 // For statistics
231 int m_srcWords;
232 int m_srcChars;
233 int m_srcCharsSpc;
234
235 QString m_srcFileName;
236 QLocale::Language m_language;
237 QLocale::Language m_sourceLanguage;
238 QLocale::Territory m_territory;
239 QLocale::Territory m_sourceTerritory;
240 bool m_relativeLocations;
241 Translator::ExtraData m_extra;
242
243 QString m_localizedLanguage;
244 QStringList m_numerusForms;
245 QList<bool> m_countRefNeeds;
246};
247
249{
250public:
253 {
254 }
255 QString id() const { return m_id; }
256 QString text() const { return m_text; }
257 QString pluralText() const { return m_pluralText; }
258 QString comment() const { return m_comment; }
259 bool isEmpty() const { return !m_nonnullCount; }
260 // The next two include also read-only
261 bool isObsolete() const { return m_nonnullCount && !m_nonobsoleteCount; }
262 int countNonobsolete() const { return m_nonobsoleteCount; }
263 // The next three include only read-write
264 int countEditable() const { return m_editableCount; }
265 bool isUnfinished() const { return m_unfinishedCount != 0; }
266 int countUnfinished() const { return m_unfinishedCount; }
267
268private:
269 friend class MultiDataModel;
270 void incrementNonnullCount() { ++m_nonnullCount; }
271 void decrementNonnullCount() { --m_nonnullCount; }
272 void incrementNonobsoleteCount() { ++m_nonobsoleteCount; }
273 void decrementNonobsoleteCount() { --m_nonobsoleteCount; }
274 void incrementEditableCount() { ++m_editableCount; }
275 void decrementEditableCount() { --m_editableCount; }
276 void incrementUnfinishedCount() { ++m_unfinishedCount; }
277 void decrementUnfinishedCount() { --m_unfinishedCount; }
278
279 QString m_id;
280 QString m_text;
281 QString m_pluralText;
282 QString m_comment;
283 int m_nonnullCount = 0; // all
284 int m_nonobsoleteCount = 0; // all
285 int m_editableCount = 0; // read-write
286 int m_unfinishedCount = 0; // read-write
287};
288
290{
291public:
292 MultiGroupItem(int oldCount, GroupItem *groupItem, bool writable);
293
294 GroupItem *groupItem(int model) const { return m_groupList[model]; }
296 { return const_cast<MultiMessageItem *>(&m_multiMessageList[msgIdx]); }
297 MessageItem *messageItem(int model, int msgIdx) const { return m_messageLists[model][msgIdx]; }
298 int firstNonobsoleteMessageIndex(int msgIdx) const;
299 int findMessage(const QString &sourcetext, const QString &comment) const;
300 int findMessageById(const QString &id) const;
301 QString group() const { return m_group; }
302 TranslationType translationType() const { return m_translationType; }
303 QString comment() const { return m_comment; }
304 int messageCount() const { return m_messageLists.isEmpty() ? 0 : m_messageLists[0].size(); }
305 // For item count in context list
306 int getNumFinished() const { return m_finishedCount; }
307 int getNumEditable() const { return m_editableCount; }
308 // For background in context list
309 bool isObsolete() const { return messageCount() && !m_nonobsoleteCount; }
310
311private:
312 friend class MultiDataModel;
313 void appendEmptyModel();
314 void assignLastModel(GroupItem *g, bool writable);
315 void removeModel(int pos);
316 void moveModel(int oldPos, int newPos); // newPos is *before* removing at oldPos
317 void putMessageItem(int pos, MessageItem *m);
318 void appendMessageItems(const QList<MessageItem *> &m);
319 void removeMultiMessageItem(int pos);
320 void incrementFinishedCount() { ++m_finishedCount; }
321 void decrementFinishedCount() { --m_finishedCount; }
322 void incrementEditableCount() { ++m_editableCount; }
323 void decrementEditableCount() { --m_editableCount; }
324 void incrementNonobsoleteCount() { ++m_nonobsoleteCount; }
325 void decrementNonobsoleteCount() { --m_nonobsoleteCount; }
326
327 QString m_group;
328 QString m_comment;
329 TranslationType m_translationType;
330 QList<MultiMessageItem> m_multiMessageList;
331 QList<GroupItem *> m_groupList;
332 // The next two could be in the MultiMessageItems, but are here for efficiency
333 QList<QList<MessageItem *> > m_messageLists;
334 QList<QList<MessageItem *> *> m_writableMessageLists;
335 int m_finishedCount = 0; // read-write
336 int m_editableCount = 0; // read-write
337 int m_nonobsoleteCount = 0; // all (note: this counts messages, not multi-messages)
338};
339
341{
342public:
343 MultiDataIndex(TranslationType type = TEXTBASED, int model = -1, int group = -1,
344 int message = -1)
345 : DataIndex(type, group, message), m_model(model)
346 {
347 }
348 void setModel(int model) { m_model = model; }
349 int model() const { return m_model; }
350 bool operator==(const MultiDataIndex &other) const
351 {
352 return m_model == other.m_model && m_group == other.m_group && m_message == other.m_message;
353 }
354 bool operator!=(const MultiDataIndex &other) const { return !(*this == other); }
355
356private:
357 int m_model = -1;
358};
359
361{
362public:
363 MultiDataModelIterator(TranslationType type, MultiDataModel *model = 0, int modelNo = -1,
364 int groupNo = 0, int messageNo = 0);
365 MessageItem *current() const;
366 bool isValid() const;
367 void operator++();
368
369private:
370 MultiDataModel *m_dataModel; // not owned
371};
372
373class MessageModel;
374
376{
378
379public:
382
383 bool isWellMergeable(const DataModel *dm) const;
384 void append(DataModel *dm, bool readWrite);
385 bool save(int model, QWidget *parent) { return m_dataModels[model]->save(parent); }
386 bool saveAs(int model, const QString &newFileName, QWidget *parent)
387 { return m_dataModels[model]->saveAs(newFileName, parent); }
388 bool release(int model, const QString &fileName, bool verbose, bool ignoreUnfinished, TranslatorSaveMode mode, QWidget *parent)
389 { return m_dataModels[model]->release(fileName, verbose, ignoreUnfinished, mode, parent); }
390 void close(int model);
391 void closeAll();
392 int isFileLoaded(const QString &name) const;
393 void moveModel(int oldPos, int newPos); // newPos is *before* removing at oldPos; note that this does not emit update signals
394
395 // Entire multi-model
396 int modelCount() const { return m_dataModels.size(); }
397 int labelCount() const { return m_multiLabelList.size(); }
398 int contextCount() const { return m_multiContextList.size(); }
399 int messageCount() const { return m_numMessages; }
400 // Next two needed for progress indicator in main window
401 int getNumFinished() const { return m_numFinished; }
402 int getNumEditable() const { return m_numEditable; }
403 bool isModified() const;
404 QStringList srcFileNames(bool pretty = false) const;
405 QString condensedSrcFileNames(bool pretty = false) const;
406
407 // Per submodel
408 QString srcFileName(int model, bool pretty = false) const { return m_dataModels[model]->srcFileName(pretty); }
409 bool isModelWritable(int model) const { return m_dataModels[model]->isWritable(); }
410 bool isModified(int model) const { return m_dataModels[model]->isModified(); }
411 void setModified(int model, bool dirty) { m_dataModels[model]->setModified(dirty); }
412 QLocale::Language language(int model) const { return m_dataModels[model]->language(); }
413 QLocale::Language sourceLanguage(int model) const { return m_dataModels[model]->sourceLanguage(); }
414
415 // Per message
416 void setTranslation(const MultiDataIndex &index, const QString &translation);
417 void setFinished(const MultiDataIndex &index, bool finished);
418 void setDanger(const MultiDataIndex &index, bool danger);
419
420 // Retrieve items
421 DataModel *model(int i) { return m_dataModels[i]; }
422
423 MultiGroupItem *multiGroupItem(const MultiDataIndex &index) const;
425 {
426 const auto &list = type == IDBASED ? m_multiLabelList : m_multiContextList;
427 return const_cast<MultiGroupItem *>(&list[idx]);
428 }
429
431 MessageItem *messageItem(const MultiDataIndex &index, int model) const;
433 {
434 return messageItem(index, index.model());
435 }
436
437 int findGroupIndex(const QString &group, TranslationType type) const;
438 MultiGroupItem *findGroup(const QString &group, TranslationType type) const;
439
440 static QString condenseFileNames(const QStringList &names);
441 static QStringList prettifyFileNames(const QStringList &names);
442
443 QBrush brushForModel(int model) const;
444 void updateColors();
445
446signals:
448 void modelDeleted(int model);
450 void languageChanged(int model);
451 void statsChanged(const StatisticalData &newStats);
452 void modifiedChanged(bool);
456 void translationChanged(const MultiDataIndex &index); // Only the primary one
457
458private slots:
459 void onModifiedChanged();
460 void onLanguageChanged();
461
462private:
464 friend class MessageModel;
465
466 GroupItem *groupItem(const MultiDataIndex &index) const;
467
468 void updateCountsOnAdd(int model, bool writable);
469 void updateCountsOnRemove(int model, bool writable);
470 void incrementFinishedCount() { ++m_numFinished; }
471 void decrementFinishedCount() { --m_numFinished; }
472 void incrementEditableCount() { ++m_numEditable; }
473 void decrementEditableCount() { --m_numEditable; }
474
475 int m_numFinished;
476 int m_numEditable;
477 int m_numMessages;
478
479 bool m_modified;
480
481 QList<MultiGroupItem> m_multiLabelList;
482 QList<MultiGroupItem> m_multiContextList;
483 QList<DataModel *> m_dataModels;
484 MessageModel *m_textBasedMsgModel;
485 MessageModel *m_idBasedMsgModel;
486
487 QColor const *m_colors;
488 QBitmap m_bitmap;
489};
490
492{
494
495public:
496 enum { SortRole = Qt::UserRole };
497 MessageModel(TranslationType translationType, QObject *parent, MultiDataModel *data);
498
499 // QAbstractItemModel
500 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
501 QModelIndex parent(const QModelIndex& index) const override;
502 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
503 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
504 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
505
506 // Convenience
507 MultiDataIndex dataIndex(const QModelIndex &index, int model) const;
508 MultiDataIndex dataIndex(const QModelIndex &index) const
509 {
510 return dataIndex(index,
511 index.column() - 1 < m_data->modelCount() ? index.column() - 1 : -1);
512 }
514
515private slots:
517 void groupItemChanged(const MultiDataIndex &index);
518 void messageItemChanged(const MultiDataIndex &index);
519
520private:
521 friend class MultiDataModel;
522
523 MultiDataModel *m_data; // not owned
524 const TranslationType m_translationType;
525};
526
527QT_END_NAMESPACE
528
529#endif // MESSAGEMODEL_H
DataIndex(TranslationType type, int group=-1, int message=-1)
int message() const
TranslationType m_type
TranslationType translationType() const
bool isIdBased() const
int group() const
bool isValid() const
bool isValid() const
DataModelIterator(TranslationType type, const DataModel *model=0, int groupNo=0, int messageNo=0)
MessageItem * current() const
void languageChanged()
int getSrcChars() const
void modifiedChanged()
bool load(const QString &fileName, bool *langGuessed, QWidget *parent)
const QList< bool > & countRefNeeds() const
bool save(QWidget *parent)
GroupItem * findGroup(const QString &group, TranslationType type) const
QLocale::Territory territory() const
static QString prettifyFileName(const QString &fn)
void doCharCounting(const QString &text, int &trW, int &trC, int &trCS)
static QString prettifyPlainFileName(const QString &fn)
QLocale::Language sourceLanguage() const
bool saveAs(const QString &newFileName, QWidget *parent)
int getSrcWords() const
bool isWritable() const
MessageItem * messageItem(const DataIndex &index) const
bool isWellMergeable(const DataModel *other) const
void setModified(bool dirty)
MessageItem * findMessage(const QString &context, const QString &label, const QString &sourcetext, const QString &comment) const
void updateStatistics()
bool setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
const QString & localizedLanguage() const
void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
int getSrcCharsSpc() const
bool isEmpty() const
const QStringList & numerusForms() const
QLocale::Language language() const
void progressChanged(int finishedCount, int oldFinishedCount)
bool release(const QString &fileName, bool verbose, bool ignoreUnfinished, TranslatorSaveMode mode, QWidget *parent)
GroupItem * groupItem(int index, TranslationType type) const
int messageCount() const
void setWritable(bool writable)
bool isModified() const
int labelCount() const
GroupItem * groupItem(DataIndex) const
QStringList normalizedTranslations(const MessageItem &m) const
int contextCount() const
QLocale::Territory sourceTerritory() const
QString srcFileName(bool pretty=false) const
QString fullContext() const
QString group() const
GroupItem(TranslationType type, const QString &group)
bool isFinished() const
MessageItem * findMessage(const QString &sourcetext, const QString &comment) const
int unfinishedDangerCount() const
QString comment() const
int nonobsoleteCount() const
MessageItem * findMessageById(const QString &msgid) const
int unfinishedCount() const
bool isObsolete() const
TranslationType translationType() const
MessageItem * messageItem(int i) const
int messageCount() const
int finishedDangerCount() const
int finishedCount() const
~MainWindow() override
void writeConfig()
void closeEvent(QCloseEvent *e) override
This event handler is called with the given event when Qt receives a window close request for a top-l...
bool openFiles(const QStringList &names)
bool eventFilter(QObject *obj, QEvent *ev) override
Filters events if this object has been installed as an event filter for the watched object.
void readConfig()
void setTranslation(const QString &translation)
QString comment() const
bool ncrMode() const
bool danger() const
MessageItem(const TranslatorMessage &message)
bool compare(const QString &findText, bool matchSubstring, Qt::CaseSensitivity cs) const
void setNcrMode(bool mode)
bool isFinished() const
QString context() const
QString text() const
QString extraComment() const
const TranslatorMessage & message() const
void setDanger(bool danger)
QString translatorComment() const
QString pluralText() const
void setTranslations(const QStringList &translations)
void setTranslatorComment(const QString &cmt)
QString translation() const
QString id() const
QStringList translations() const
QString fileName() const
bool isUnfinished() const
QString label() const
TranslatorMessage::Type type() const
int lineNumber() const
void setType(TranslatorMessage::Type type)
bool isObsolete() const
QModelIndex modelIndex(const MultiDataIndex &index)
QModelIndex parent(const QModelIndex &index) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Returns the index of the item in the model specified by the given row, column and parent index.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Returns the data stored under the given role for the item referred to by the index.
MessageModel(TranslationType translationType, QObject *parent, MultiDataModel *data)
MultiDataIndex dataIndex(const QModelIndex &index, int model) const
MultiDataIndex dataIndex(const QModelIndex &index) const
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Returns the number of rows under the given parent.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Returns the number of columns for the children of the given parent.
bool operator==(const MultiDataIndex &other) const
void setModel(int model)
int model() const
bool operator!=(const MultiDataIndex &other) const
MultiDataIndex(TranslationType type=TEXTBASED, int model=-1, int group=-1, int message=-1)
MultiDataModelIterator(TranslationType type, MultiDataModel *model=0, int modelNo=-1, int groupNo=0, int messageNo=0)
MessageItem * current() const
bool save(int model, QWidget *parent)
bool release(int model, const QString &fileName, bool verbose, bool ignoreUnfinished, TranslatorSaveMode mode, QWidget *parent)
int findGroupIndex(const QString &group, TranslationType type) const
QStringList srcFileNames(bool pretty=false) const
bool isModified(int model) const
int labelCount() const
void append(DataModel *dm, bool readWrite)
MessageItem * messageItem(const MultiDataIndex &index, int model) const
void setModified(int model, bool dirty)
MultiGroupItem * multiGroupItem(const MultiDataIndex &index) const
DataModel * model(int i)
QLocale::Language sourceLanguage(int model) const
bool isModified() const
void allModelsDeleted()
MultiGroupItem * multiGroupItem(int idx, TranslationType type) const
MultiGroupItem * findGroup(const QString &group, TranslationType type) const
QString condensedSrcFileNames(bool pretty=false) const
static QString condenseFileNames(const QStringList &names)
QBrush brushForModel(int model) const
int isFileLoaded(const QString &name) const
QLocale::Language language(int model) const
void languageChanged(int model)
void setTranslation(const MultiDataIndex &index, const QString &translation)
int messageCount() const
static QStringList prettifyFileNames(const QStringList &names)
int getNumFinished() const
void setDanger(const MultiDataIndex &index, bool danger)
int modelCount() const
bool isModelWritable(int model) const
MultiMessageItem * multiMessageItem(const MultiDataIndex &index) const
int getNumEditable() const
void groupDataChanged(const MultiDataIndex &index)
int contextCount() const
void modifiedChanged(bool)
void translationChanged(const MultiDataIndex &index)
void statsChanged(const StatisticalData &newStats)
void multiGroupDataChanged(const MultiDataIndex &index)
QString srcFileName(int model, bool pretty=false) const
MessageItem * messageItem(const MultiDataIndex &index) const
void setFinished(const MultiDataIndex &index, bool finished)
bool saveAs(int model, const QString &newFileName, QWidget *parent)
void messageDataChanged(const MultiDataIndex &index)
bool isWellMergeable(const DataModel *dm) const
void moveModel(int oldPos, int newPos)
void close(int model)
void modelDeleted(int model)
QLocale::Language sourceLanguage() const
Definition phrase.h:74
void append(Phrase *phrase)
Definition phrase.cpp:271
QLocale::Territory territory() const
Definition phrase.h:72
QLocale::Language language() const
Definition phrase.h:71
QString friendlyPhraseBookName() const
Definition phrase.cpp:302
bool isModified() const
Definition phrase.h:68
void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
Definition phrase.cpp:188
bool load(const QString &fileName, bool *langGuessed)
Definition phrase.cpp:197
void listChanged()
QList< Phrase * > phrases() const
Definition phrase.h:63
void setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
Definition phrase.cpp:179
QLocale::Territory sourceTerritory() const
Definition phrase.h:75
QString fileName() const
Definition phrase.h:66
bool save(const QString &fileName)
Definition phrase.cpp:239
void remove(Phrase *phrase)
Definition phrase.cpp:279
void setPhraseBook(PhraseBook *book)
Definition phrase.h:36
PhraseBook * phraseBook() const
Definition phrase.h:35
void setDefinition(const QString &nd)
Definition phrase.cpp:66
void setSource(const QString &ns)
Definition phrase.cpp:48
QString definition() const
Definition phrase.h:31
QString target() const
Definition phrase.h:29
int shortcut() const
Definition phrase.h:33
Phrase()
Definition phrase.cpp:30
Candidate candidate() const
Definition phrase.h:34
Phrase(const QString &source, const QString &target, const QString &definition, PhraseBook *phraseBook)
Definition phrase.cpp:41
Phrase(const QString &source, const QString &target, const QString &definition, const Candidate &candidate, int sc=-1)
Definition phrase.cpp:35
void setTarget(const QString &nt)
Definition phrase.cpp:57
QString source() const
Definition phrase.h:27
int getSimilarityScore(const QString &strCandidate)
Definition simtexth.cpp:152
StringSimilarityMatcher(const QString &stringToMatch)
Definition simtexth.cpp:146
TranslationType
@ IDBASED
@ TEXTBASED
bool operator==(const Phrase &p, const Phrase &q)
Definition phrase.cpp:75
bool operator!=(const Phrase &p, const Phrase &q)
Definition phrase.h:48
static int getSimilarityScore(const QString &str1, const QString &str2)
Definition simtexth.h:80
QList< Candidate > CandidateList
Definition simtexth.h:40
const int textSimilarityThreshold
Definition simtexth.h:7
bool operator!=(const Candidate &c, const Candidate &d)
Definition simtexth.h:36
CandidateList similarTextHeuristicCandidates(const Translator *tor, const QString &text, int maxCandidates)
Definition simtexth.cpp:161
bool operator==(const Candidate &c, const Candidate &d)
Definition simtexth.h:32
int main(int argc, char *argv[])
[ctor_close]
QString id
Definition simtexth.h:27
QString source
Definition simtexth.h:25
Candidate(const QString &c, const QString &s, const QString &d, const QString &t, const QString &i, const QString &l)
Definition simtexth.h:19
Candidate()
Definition simtexth.h:18
QString translation
Definition simtexth.h:29
QString disambiguation
Definition simtexth.h:28
QString context
Definition simtexth.h:24
QString label
Definition simtexth.h:26
quint8 b[52]
Definition simtexth.h:52
CoMatrix()
Definition simtexth.h:45
CoMatrix(const QString &str)
Definition simtexth.cpp:103
quint32 w[13]
Definition simtexth.h:53
MultiGroupItem(int oldCount, GroupItem *groupItem, bool writable)
int messageCount() const
MultiMessageItem * multiMessageItem(int msgIdx) const
GroupItem * groupItem(int model) const
int findMessage(const QString &sourcetext, const QString &comment) const
bool isObsolete() const
TranslationType translationType() const
int getNumEditable() const
int findMessageById(const QString &id) const
QString comment() const
QString group() const
int getNumFinished() const
MessageItem * messageItem(int model, int msgIdx) const
int firstNonobsoleteMessageIndex(int msgIdx) const
QString id() const
bool isObsolete() const
QString comment() const
int countUnfinished() const
QString text() const
MultiMessageItem(const MessageItem *m)
bool isEmpty() const
int countEditable() const
int countNonobsolete() const
QString pluralText() const
bool isUnfinished() const
TranslatorSaveMode