summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz Starzycki <mstarzycki@gmail.com>2018-05-03 11:51:55 +0200
committerMateusz Starzycki <mstarzycki@gmail.com>2020-04-08 08:32:08 +0200
commit7ec161d6f2380147227a1fdac85a34932f232ed3 (patch)
treed1cb9080bd2fdde0c79e19472ae43ef263315791
parent493889e4ca9ad129935c0acc7bb628d3321dcaf7 (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.cpp4
-rw-r--r--src/linguist/linguist/messagemodel.cpp40
-rw-r--r--src/linguist/linguist/messagemodel.h6
-rw-r--r--src/linguist/linguist/statistics.cpp31
-rw-r--r--src/linguist/linguist/statistics.h20
-rw-r--r--src/linguist/linguist/statistics.ui204
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>