diff options
author | Mateusz Starzycki <mstarzycki@gmail.com> | 2018-05-03 11:51:55 +0200 |
---|---|---|
committer | Mateusz Starzycki <mstarzycki@gmail.com> | 2020-04-08 08:32:08 +0200 |
commit | 7ec161d6f2380147227a1fdac85a34932f232ed3 (patch) | |
tree | d1cb9080bd2fdde0c79e19472ae43ef263315791 | |
parent | 493889e4ca9ad129935c0acc7bb628d3321dcaf7 (diff) |
Implement enhanced translation statistics
More detailed statistics about translation count such as
the word, character and total messages per finished unfinished
and obsolete category
Task-number: QTBUG-2088
Change-Id: I0af2bde9c74635a92cd89553c09a54d3d9682aa5
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
-rw-r--r-- | src/linguist/linguist/mainwindow.cpp | 4 | ||||
-rw-r--r-- | src/linguist/linguist/messagemodel.cpp | 40 | ||||
-rw-r--r-- | src/linguist/linguist/messagemodel.h | 6 | ||||
-rw-r--r-- | src/linguist/linguist/statistics.cpp | 31 | ||||
-rw-r--r-- | src/linguist/linguist/statistics.h | 20 | ||||
-rw-r--r-- | src/linguist/linguist/statistics.ui | 204 |
6 files changed, 265 insertions, 40 deletions
diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp index 26a3d03f2..4174444c8 100644 --- a/src/linguist/linguist/mainwindow.cpp +++ b/src/linguist/linguist/mainwindow.cpp @@ -2722,8 +2722,8 @@ void MainWindow::toggleStatistics() if (m_ui.actionStatistics->isChecked()) { if (!m_statistics) { m_statistics = new Statistics(this); - connect(m_dataModel, SIGNAL(statsChanged(int,int,int,int,int,int)), - m_statistics, SLOT(updateStats(int,int,int,int,int,int))); + connect(m_dataModel, SIGNAL(statsChanged(StatisticalData)), + m_statistics, SLOT(updateStats(StatisticalData))); } m_statistics->show(); updateStatistics(); diff --git a/src/linguist/linguist/messagemodel.cpp b/src/linguist/linguist/messagemodel.cpp index 74c49cf83..133cd0fc0 100644 --- a/src/linguist/linguist/messagemodel.cpp +++ b/src/linguist/linguist/messagemodel.cpp @@ -27,6 +27,7 @@ ****************************************************************************/ #include "messagemodel.h" +#include "statistics.h" #include <QtCore/QCoreApplication> #include <QtCore/QDebug> @@ -426,20 +427,37 @@ void DataModel::setSourceLanguageAndCountry(QLocale::Language lang, QLocale::Cou void DataModel::updateStatistics() { - int trW = 0; - int trC = 0; - int trCS = 0; - + StatisticalData stats {}; for (DataModelIterator it(this); it.isValid(); ++it) { const MessageItem *mi = it.current(); - if (mi->isFinished()) { - const QStringList translations = mi->translations(); - for (const QString &trnsl : translations) - doCharCounting(trnsl, trW, trC, trCS); + if (mi->isObsolete()) { + stats.obsoleteMsg++; + } else if (mi->isFinished()) { + bool hasDanger = false; + for (const QString &trnsl : mi->translations()) { + doCharCounting(trnsl, stats.wordsFinished, stats.charsFinished, stats.charsSpacesFinished); + hasDanger |= mi->danger(); + } + if (hasDanger) + stats.translatedMsgDanger++; + else + stats.translatedMsgNoDanger++; + } else if (mi->isUnfinished()) { + bool hasDanger = false; + for (const QString &trnsl : mi->translations()) { + doCharCounting(trnsl, stats.wordsUnfinished, stats.charsUnfinished, stats.charsSpacesUnfinished); + hasDanger |= mi->danger(); + } + if (hasDanger) + stats.unfinishedMsgDanger++; + else + stats.unfinishedMsgNoDanger++; } } - - emit statsChanged(m_srcWords, m_srcChars, m_srcCharsSpc, trW, trC, trCS); + stats.wordsSource = m_srcWords; + stats.charsSource = m_srcChars; + stats.charsSpacesSource = m_srcCharsSpc; + emit statsChanged(stats); } void DataModel::setModified(bool isModified) @@ -771,7 +789,7 @@ void MultiDataModel::append(DataModel *dm, bool readWrite) updateCountsOnAdd(modelCount() - 1, readWrite); connect(dm, SIGNAL(modifiedChanged()), SLOT(onModifiedChanged())); connect(dm, SIGNAL(languageChanged()), SLOT(onLanguageChanged())); - connect(dm, SIGNAL(statsChanged(int,int,int,int,int,int)), SIGNAL(statsChanged(int,int,int,int,int,int))); + connect(dm, SIGNAL(statsChanged(StatisticalData)), SIGNAL(statsChanged(StatisticalData))); emit modelAppended(); } diff --git a/src/linguist/linguist/messagemodel.h b/src/linguist/linguist/messagemodel.h index 32f868d51..85a05f28d 100644 --- a/src/linguist/linguist/messagemodel.h +++ b/src/linguist/linguist/messagemodel.h @@ -42,6 +42,7 @@ QT_BEGIN_NAMESPACE class DataModel; class MultiDataModel; +struct StatisticalData; class MessageItem { @@ -73,6 +74,7 @@ public: void setType(TranslatorMessage::Type type) { m_message.setType(type); } bool isFinished() const { return type() == TranslatorMessage::Finished; } + bool isUnfinished() const { return type() == TranslatorMessage::Unfinished; } bool isObsolete() const { return type() == TranslatorMessage::Obsolete || type() == TranslatorMessage::Vanished; } const TranslatorMessage &message() const { return m_message; } @@ -217,7 +219,7 @@ public: int getSrcCharsSpc() const { return m_srcCharsSpc; } signals: - void statsChanged(int words, int characters, int cs, int words2, int characters2, int cs2); + void statsChanged(const StatisticalData &newStats); void progressChanged(int finishedCount, int oldFinishedCount); void languageChanged(); void modifiedChanged(); @@ -444,7 +446,7 @@ signals: void modelDeleted(int model); void allModelsDeleted(); void languageChanged(int model); - void statsChanged(int words, int characters, int cs, int words2, int characters2, int cs2); + void statsChanged(const StatisticalData &newStats); void modifiedChanged(bool); void multiContextDataChanged(const MultiDataIndex &index); void contextDataChanged(const MultiDataIndex &index); diff --git a/src/linguist/linguist/statistics.cpp b/src/linguist/linguist/statistics.cpp index e3f42f2ec..24dfeea2e 100644 --- a/src/linguist/linguist/statistics.cpp +++ b/src/linguist/linguist/statistics.cpp @@ -41,14 +41,31 @@ void Statistics::languageChange() retranslateUi(this); } -void Statistics::updateStats(int sW,int sC,int sCS,int trW,int trC,int trCS) +void Statistics::updateStats(const StatisticalData& newStats) { - untrWords->setText(QString::number(sW)); - untrChars->setText(QString::number(sC)); - untrCharsSpc->setText(QString::number(sCS)); - trWords->setText(QString::number(trW)); - trChars->setText(QString::number(trC)); - trCharsSpc->setText(QString::number(trCS)); + int totals = newStats.translatedMsgDanger + newStats.translatedMsgNoDanger + + newStats.unfinishedMsgNoDanger + newStats.unfinishedMsgDanger; + int totalsWithObsolete = totals + newStats.obsoleteMsg; + int unfinished = newStats.unfinishedMsgDanger + newStats.unfinishedMsgNoDanger; + int finished = newStats.translatedMsgNoDanger + newStats.translatedMsgDanger; + + wordsSourceTextbox->setText(QString::number(newStats.wordsSource)); + charsSourceTextbox->setText(QString::number(newStats.charsSource)); + charsSpacesSourceTextbox->setText(QString::number(newStats.charsSpacesSource)); + wordsFinishedTextbox->setText(QString::number(newStats.wordsFinished)); + charsFinishedTextbox->setText(QString::number(newStats.charsFinished)); + charsSpacesFinishedTextbox->setText(QString::number(newStats.charsSpacesFinished)); + wordsUnfinishedTextbox->setText(QString::number(newStats.wordsUnfinished)); + charsUnfinishedTextbox->setText(QString::number(newStats.charsUnfinished)); + charsSpacesUnfinishedTextbox->setText(QString::number(newStats.charsSpacesUnfinished)); + totalMessagesTextbox->setText(QString::number(totals)); + totalWithObsoleteTextbox->setText(QString::number(totalsWithObsolete)); + totalFinishedTextbox->setText(QString::number(finished)); + finishedWithoutWarningsTextbox->setText(QString::number(newStats.translatedMsgNoDanger)); + finishedWithWarningsTextbox->setText(QString::number(newStats.translatedMsgDanger)); + unfinishedNoObsTextbox->setText(QString::number(unfinished)); + unfinishedNoWarningsTextbox->setText(QString::number(newStats.unfinishedMsgNoDanger)); + unfinishedWithWarningsTextbox->setText(QString::number(newStats.unfinishedMsgDanger)); } QT_END_NAMESPACE diff --git a/src/linguist/linguist/statistics.h b/src/linguist/linguist/statistics.h index 6fcbdcf07..8f8939201 100644 --- a/src/linguist/linguist/statistics.h +++ b/src/linguist/linguist/statistics.h @@ -34,6 +34,24 @@ QT_BEGIN_NAMESPACE +struct StatisticalData +{ + int wordsSource; + int charsSource; + int charsSpacesSource; + int wordsFinished; + int charsFinished; + int charsSpacesFinished; + int wordsUnfinished; + int charsUnfinished; + int charsSpacesUnfinished; + int translatedMsgNoDanger; + int translatedMsgDanger; + int obsoleteMsg; + int unfinishedMsgNoDanger; + int unfinishedMsgDanger; +}; + class Statistics : public QDialog, public Ui::Statistics { Q_OBJECT @@ -43,7 +61,7 @@ public: ~Statistics() {} public slots: - virtual void updateStats(int w1, int c1, int cs1, int w2, int c2, int cs2); + virtual void updateStats(const StatisticalData &newStats); protected slots: virtual void languageChange(); diff --git a/src/linguist/linguist/statistics.ui b/src/linguist/linguist/statistics.ui index aaf70d7ab..68798c43a 100644 --- a/src/linguist/linguist/statistics.ui +++ b/src/linguist/linguist/statistics.ui @@ -33,15 +33,15 @@ <rect> <x>0</x> <y>0</y> - <width>336</width> - <height>169</height> + <width>422</width> + <height>386</height> </rect> </property> <property name="windowTitle"> <string>Statistics</string> </property> <layout class="QGridLayout"> - <item row="1" column="0"> + <item row="2" column="0"> <layout class="QHBoxLayout"> <item> <spacer name="spacer4_2"> @@ -107,64 +107,234 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QLabel" name="untrWords"> + <item row="0" column="3"> + <widget class="QLabel" name="textLabel7"> + <property name="text"> + <string>Unfinished</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="wordsSourceTextbox"> <property name="text"> <string>0</string> </property> </widget> </item> - <item row="1" column="2"> - <widget class="QLabel" name="trWords"> + <item row="3" column="2"> + <widget class="QLabel" name="wordsFinishedTextbox"> <property name="text"> <string>0</string> </property> </widget> </item> - <item row="1" column="0"> + <item row="3" column="3"> + <widget class="QLabel" name="wordsUnfinishedTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="3" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> <string>Words:</string> </property> </widget> </item> - <item row="2" column="2"> - <widget class="QLabel" name="trChars"> + <item row="1" column="2"> + <widget class="QLabel" name="charsFinishedTextbox"> <property name="text"> <string>0</string> </property> </widget> </item> - <item row="2" column="1"> - <widget class="QLabel" name="untrChars"> + <item row="1" column="3"> + <widget class="QLabel" name="charsUnfinishedTextbox"> <property name="text"> <string>0</string> </property> </widget> </item> - <item row="2" column="0"> + <item row="1" column="1"> + <widget class="QLabel" name="charsSourceTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="1" column="0"> <widget class="QLabel" name="textLabel3"> <property name="text"> <string>Characters:</string> </property> </widget> </item> - <item row="3" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="textLabel6"> <property name="text"> <string>Characters (with spaces):</string> </property> </widget> </item> - <item row="3" column="2"> - <widget class="QLabel" name="trCharsSpc"> + <item row="2" column="2"> + <widget class="QLabel" name="charsSpacesFinishedTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="charsSpacesSourceTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="charsSpacesUnfinishedTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QFrame" name="frame5"> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QGridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="textLabelTot"> + <property name="text"> + <string>Total translatable messages:</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="textLabelTotFinished"> + <property name="text"> + <string>Total finished:</string> + </property> + <property name="indent"> + <number>15</number> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="textLabelFinishedNoWarn"> + <property name="text"> + <string>Without warnings:</string> + </property> + <property name="indent"> + <number>30</number> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="textLabelFinishedWarn"> + <property name="text"> + <string>With warnings:</string> + </property> + <property name="indent"> + <number>30</number> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="textLabelUnfinished"> + <property name="text"> + <string>Unfinished:</string> + </property> + <property name="indent"> + <number>15</number> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="textLabelUnfinishedNoWarn"> + <property name="text"> + <string>Without warnings:</string> + </property> + <property name="indent"> + <number>30</number> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="textLabelUnfinishedWarn"> + <property name="text"> + <string>With warnings:</string> + </property> + <property name="indent"> + <number>30</number> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="textLabelTotWithObs"> + <property name="text"> + <string>Total messages including obsolete:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="totalMessagesTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="totalFinishedTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="finishedWithoutWarningsTextbox"> <property name="text"> <string>0</string> </property> </widget> </item> <item row="3" column="1"> - <widget class="QLabel" name="untrCharsSpc"> + <widget class="QLabel" name="finishedWithWarningsTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QLabel" name="unfinishedNoObsTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QLabel" name="unfinishedNoWarningsTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QLabel" name="unfinishedWithWarningsTextbox"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QLabel" name="totalWithObsoleteTextbox"> <property name="text"> <string>0</string> </property> |