9#include <QtCore/QAbstractItemModel>
10#include <QtCore/QList>
11#include <QtCore/QHash>
12#include <QtCore/QLocale>
13#include <QtGui/QColor>
14#include <QtGui/QBitmap>
27 bool danger()
const {
return m_danger; }
29 bool ncrMode()
const {
return m_ncrMode; }
44 int lineNumber()
const {
return m_message.lineNumber(); }
58 bool compare(
const QString &findText,
bool matchSubstring,
59 Qt::CaseSensitivity cs)
const;
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; }
114 int m_finishedCount = 0;
115 int m_finishedDangerCount = 0;
116 int m_unfinishedDangerCount = 0;
117 int m_nonobsoleteCount = 0;
118 QList<MessageItem> msgItemList;
166 const QString &sourcetext,
const QString &comment)
const;
173 bool isEmpty()
const {
return m_numMessages == 0; }
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,
186 {
return pretty ? prettifyPlainFileName(m_srcFileName) : m_srcFileName; }
203 void doCharCounting(
const QString& text,
int& trW,
int& trC,
int& trCS);
219 QList<GroupItem> m_contextList;
220 QList<GroupItem> m_labelList;
222 bool save(
const QString &fileName, QWidget *parent);
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;
243 QString m_localizedLanguage;
244 QStringList m_numerusForms;
245 QList<
bool> m_countRefNeeds;
259 bool isEmpty()
const {
return !m_nonnullCount; }
261 bool isObsolete()
const {
return m_nonnullCount && !m_nonobsoleteCount; }
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; }
281 QString m_pluralText;
283 int m_nonnullCount = 0;
284 int m_nonobsoleteCount = 0;
285 int m_editableCount = 0;
286 int m_unfinishedCount = 0;
296 {
return const_cast<MultiMessageItem *>(&m_multiMessageList[msgIdx]); }
299 int findMessage(
const QString &sourcetext,
const QString &comment)
const;
304 int messageCount()
const {
return m_messageLists.isEmpty() ? 0 : m_messageLists[0].size(); }
313 void appendEmptyModel();
314 void assignLastModel(
GroupItem *g,
bool writable);
315 void removeModel(
int pos);
316 void moveModel(
int oldPos,
int newPos);
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; }
330 QList<MultiMessageItem> m_multiMessageList;
331 QList<GroupItem *> m_groupList;
333 QList<QList<MessageItem *> > m_messageLists;
334 QList<QList<MessageItem *> *> m_writableMessageLists;
335 int m_finishedCount = 0;
336 int m_editableCount = 0;
337 int m_nonobsoleteCount = 0;
349 int model()
const {
return m_model; }
364 int groupNo = 0,
int messageNo = 0);
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); }
389 {
return m_dataModels[model]->release(fileName, verbose, ignoreUnfinished, mode, parent); }
390 void close(
int model);
408 QString srcFileName(
int model,
bool pretty =
false)
const {
return m_dataModels[model]->srcFileName(pretty); }
410 bool isModified(
int model)
const {
return m_dataModels[model]->isModified(); }
411 void setModified(
int model,
bool dirty) { m_dataModels[model]->setModified(dirty); }
426 const auto &list = type == IDBASED ? m_multiLabelList : m_multiContextList;
460 void onLanguageChanged();
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; }
481 QList<MultiGroupItem> m_multiLabelList;
482 QList<MultiGroupItem> m_multiContextList;
483 QList<DataModel *> m_dataModels;
487 QColor
const *m_colors;
500 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex())
const override;
502 int rowCount(
const QModelIndex &parent = QModelIndex())
const override;
503 int columnCount(
const QModelIndex &parent = QModelIndex())
const override;
510 return dataIndex(index,
511 index.column() - 1 < m_data->modelCount() ? index.column() - 1 : -1);
DataIndex(TranslationType type, int group=-1, int message=-1)
TranslationType translationType() const
DataModelIterator(TranslationType type, const DataModel *model=0, int groupNo=0, int messageNo=0)
MessageItem * current() const
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)
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
bool setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
const QString & localizedLanguage() const
void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
int getSrcCharsSpc() 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
void setWritable(bool writable)
GroupItem * groupItem(DataIndex) const
QStringList normalizedTranslations(const MessageItem &m) const
QLocale::Territory sourceTerritory() const
QString srcFileName(bool pretty=false) const
QString fullContext() const
GroupItem(TranslationType type, const QString &group)
MessageItem * findMessage(const QString &sourcetext, const QString &comment) const
int unfinishedDangerCount() const
int nonobsoleteCount() const
MessageItem * findMessageById(const QString &msgid) const
int unfinishedCount() const
TranslationType translationType() const
MessageItem * messageItem(int i) const
int finishedDangerCount() const
int finishedCount() const
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 setTranslation(const QString &translation)
MessageItem(const TranslatorMessage &message)
bool compare(const QString &findText, bool matchSubstring, Qt::CaseSensitivity cs) const
void setNcrMode(bool mode)
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
QStringList translations() const
bool isUnfinished() const
TranslatorMessage::Type type() const
void setType(TranslatorMessage::Type type)
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
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
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
QLocale::Language sourceLanguage(int model) const
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)
static QStringList prettifyFileNames(const QStringList &names)
int getNumFinished() const
void setDanger(const MultiDataIndex &index, bool danger)
bool isModelWritable(int model) const
MultiMessageItem * multiMessageItem(const MultiDataIndex &index) const
int getNumEditable() const
void groupDataChanged(const MultiDataIndex &index)
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 modelDeleted(int model)
QLocale::Language sourceLanguage() const
void append(Phrase *phrase)
QLocale::Territory territory() const
QLocale::Language language() const
QString friendlyPhraseBookName() const
void setSourceLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
bool load(const QString &fileName, bool *langGuessed)
QList< Phrase * > phrases() const
void setLanguageAndTerritory(QLocale::Language lang, QLocale::Territory territory)
QLocale::Territory sourceTerritory() const
bool save(const QString &fileName)
void remove(Phrase *phrase)
void setPhraseBook(PhraseBook *book)
PhraseBook * phraseBook() const
void setDefinition(const QString &nd)
void setSource(const QString &ns)
QString definition() const
Candidate candidate() const
Phrase(const QString &source, const QString &target, const QString &definition, PhraseBook *phraseBook)
Phrase(const QString &source, const QString &target, const QString &definition, const Candidate &candidate, int sc=-1)
void setTarget(const QString &nt)
int getSimilarityScore(const QString &strCandidate)
StringSimilarityMatcher(const QString &stringToMatch)
bool operator==(const Phrase &p, const Phrase &q)
bool operator!=(const Phrase &p, const Phrase &q)
static int getSimilarityScore(const QString &str1, const QString &str2)
QList< Candidate > CandidateList
const int textSimilarityThreshold
bool operator!=(const Candidate &c, const Candidate &d)
CandidateList similarTextHeuristicCandidates(const Translator *tor, const QString &text, int maxCandidates)
bool operator==(const Candidate &c, const Candidate &d)
int main(int argc, char *argv[])
[ctor_close]
Candidate(const QString &c, const QString &s, const QString &d, const QString &t, const QString &i, const QString &l)
CoMatrix(const QString &str)
MultiGroupItem(int oldCount, GroupItem *groupItem, bool writable)
MultiMessageItem * multiMessageItem(int msgIdx) const
GroupItem * groupItem(int model) const
int findMessage(const QString &sourcetext, const QString &comment) const
TranslationType translationType() const
int getNumEditable() const
int findMessageById(const QString &id) const
int getNumFinished() const
MessageItem * messageItem(int model, int msgIdx) const
int firstNonobsoleteMessageIndex(int msgIdx) const
int countUnfinished() const
MultiMessageItem(const MessageItem *m)
int countEditable() const
int countNonobsolete() const
QString pluralText() const
bool isUnfinished() const