5
5
6
6
#include < QStringBuilder>
7
7
#include < QCloseEvent>
8
- #include < QDebug>
9
8
#include < QPushButton>
10
- #include < QString>
11
9
12
10
namespace Private
13
11
{
@@ -53,46 +51,64 @@ ProgressDlg::ProgressDlg()
53
51
p.setColor ( QPalette::Base, p.color ( QPalette::Window ) );
54
52
p.setColor ( QPalette::Text, p.color ( QPalette::WindowText ) );
55
53
ui->txtLog ->setPalette ( p );
54
+
55
+ connect (&mUpdater , &QTimer::timeout, this , &ProgressDlg::updateActivities);
56
+ mUpdater .start (250 );
56
57
}
57
58
58
59
ProgressDlg::~ProgressDlg ()
59
60
{
60
61
delete ui;
61
62
}
62
63
63
- void ProgressDlg::setAction ( const QString& action,
64
- const QStringList& open,
65
- const QStringList& current,
66
- const QStringList& done )
64
+ int ProgressDlg::updateInterval () const
67
65
{
68
- QString act = action;
66
+ return mUpdater .interval ();
67
+ }
69
68
70
- foreach ( QString s, done )
71
- {
72
- act += QStringLiteral ( " (<font color= \" green \" > " ) % s % QStringLiteral ( " </font>) " );
73
- }
69
+ void ProgressDlg::setUpdateInterval ( int msec )
70
+ {
71
+ mUpdater . setInterval (msec );
72
+ }
74
73
75
- foreach ( QString s, current )
76
- {
77
- act += QStringLiteral ( " (<font color= \" blue \" > " ) % s % QStringLiteral ( " </font>) " );
78
- }
74
+ void ProgressDlg::addActivity ( const QString& description, QObject* activity,
75
+ const StepInfo::List& steps)
76
+ {
77
+ Q_ASSERT (activity);
79
78
80
- foreach ( QString s, open )
81
- {
82
- act += QStringLiteral ( " (<font color=\" red\" >" ) % s % QStringLiteral ( " </font>)" );
79
+ Private::ProgressWdgt* a ( new Private::ProgressWdgt (description) );
80
+ mActivities [activity] = a;
81
+
82
+ QTreeWidgetItem* activityItem (new QTreeWidgetItem);
83
+ ui->treeProgress ->addTopLevelItem (activityItem);
84
+ ui->treeProgress ->setItemWidget (activityItem, 0 , a);
85
+
86
+ foreach (const StepInfo& sir, steps) {
87
+ Private::ProgressWdgt* s = new Private::ProgressWdgt (sir.desc );
88
+ a->mSteps [sir.name ] = s;
89
+
90
+ QTreeWidgetItem* stepItem (new QTreeWidgetItem);
91
+ activityItem->addChild (stepItem);
92
+ ui->treeProgress ->setItemWidget (stepItem, 0 , s);
83
93
}
94
+ }
95
+
96
+ void ProgressDlg::setStatusInfo (QObject* activity, const QString& step,
97
+ const QString& text)
98
+ {
99
+ Q_ASSERT (activity && !step.isEmpty ());
84
100
85
- ui->lblAction ->setText ( act );
101
+ Private::ProgressWdgt* s = findStep (activity, step);
102
+ s->txtStatusInfo ->setText (text);
86
103
}
87
104
88
- void ProgressDlg::setCurrent (QObject* current)
105
+ void ProgressDlg::setPercentage (QObject* activity, const QString& step,
106
+ qreal percent)
89
107
{
90
- mCurrent = current ;
108
+ Q_ASSERT (activity && !step. isEmpty ()) ;
91
109
92
- connect ( mCurrent , SIGNAL (remoteMessage (QString)),
93
- this , SLOT (remoteMessage (QString)) );
94
- connect ( mCurrent , SIGNAL (transportProgress (quint32, quint32, quint32, quint64)),
95
- this , SLOT (transportProgress (quint32, quint32, quint32, quint64)) );
110
+ Private::ProgressWdgt* s = findStep (activity, step);
111
+ s->mPercentage = qMin ( qMax (percent, 0 .), 1 . ) * 100 .;
96
112
}
97
113
98
114
void ProgressDlg::closeEvent ( QCloseEvent* ev )
@@ -106,35 +122,7 @@ void ProgressDlg::closeEvent( QCloseEvent* ev )
106
122
QDialog::closeEvent ( ev );
107
123
}
108
124
109
- void ProgressDlg::transportProgress ( quint32 totalObjects,
110
- quint32 indexedObjects,
111
- quint32 receivedObjects,
112
- quint64 receivedBytes )
113
- {
114
- QString recv;
115
- if ( receivedBytes > 1024 * 1024 * 950 ) /* 950 is so we get 0.9 gb */
116
- {
117
- recv = QString::number ( receivedBytes / (1024 *1024 *1024.0 ), ' f' , 2 ) % QStringLiteral ( " Gb" );
118
- }
119
- else if ( receivedBytes > 1024 * 950 )
120
- {
121
- recv = QString::number ( receivedBytes / (1024 *1024.0 ), ' f' , 2 ) % QStringLiteral ( " Mb" );
122
- }
123
- else if ( receivedBytes > 950 )
124
- {
125
- recv = QString::number ( receivedBytes / 1024.0 , ' f' , 2 ) % QStringLiteral ( " Kb" );
126
- }
127
- else
128
- {
129
- recv = QString::number ( receivedBytes );
130
- }
131
- ui->lblTransferSize ->setText ( recv );
132
-
133
- ui->progressBar ->setRange ( 0 , totalObjects * 2 );
134
- ui->progressBar ->setValue ( indexedObjects + receivedObjects );
135
- }
136
-
137
- void ProgressDlg::remoteMessage ( const QString& msg )
125
+ void ProgressDlg::remoteMessage (const QString& msg)
138
126
{
139
127
mRawRemoteMessage += msg;
140
128
@@ -166,27 +154,53 @@ void ProgressDlg::remoteMessage( const QString& msg )
166
154
output += QString ( outputBuffer, outBufLen );
167
155
168
156
QString log = mBaseLog % QStringLiteral ( " <br/>" ) %
169
- output.replace ( QChar ( L' \n ' ), QLatin1String (" <br/>" ) ).simplified ();
157
+ output.replace ( QChar ( L' \n ' ), QStringLiteral (" <br/>" ) ).simplified ();
170
158
171
159
ui->txtLog ->setHtml ( log );
172
160
}
173
161
174
- void ProgressDlg::beginStep ( const QString& step )
162
+ void ProgressDlg::finished (QObject* activity )
175
163
{
176
- mBaseLog += tr ( " <font color=\" blue\" >%1</font><br/>" ).arg ( step );
177
- ui->txtLog ->setHtml ( mBaseLog );
164
+ mActivities [activity]->mStatus = Private::ProgressWdgt::Stopped;
165
+
166
+ bool done = true ;
167
+ foreach (Private::ProgressWdgt* a, mActivities ) {
168
+ done &= (a->mStatus == Private::ProgressWdgt::Stopped);
169
+ if (!done) {
170
+ break ;
171
+ }
172
+ }
173
+
174
+ if (done) {
175
+ mDone = true ;
176
+ ui->buttonBox ->button ( QDialogButtonBox::Close )->setEnabled ( true );
177
+ }
178
178
}
179
179
180
- void ProgressDlg::finalizeStep ( )
180
+ void ProgressDlg::finished (QObject* activity, const QString& step )
181
181
{
182
- mBaseLog = ui->txtLog ->toHtml () % QStringLiteral ( " <br/>" );
183
- mRawRemoteMessage = QString ();
182
+ Q_ASSERT (activity && !step.isEmpty ());
183
+
184
+ Private::ProgressWdgt* a = mActivities [activity];
185
+ a->mSteps [step]->mStatus = Private::ProgressWdgt::Stopped;
186
+ }
184
187
185
- ui->txtLog ->setHtml ( mBaseLog );
188
+ void ProgressDlg::updateActivities ()
189
+ {
190
+ foreach (Private::ProgressWdgt* a, mActivities ) {
191
+ a->mPercentage = 0 ;
192
+ foreach (Private::ProgressWdgt* s, a->mSteps ) {
193
+ s->progressBar ->setValue (qRound (s->mPercentage ));
194
+ qreal stepPercent = s->mPercentage / a->mSteps .size ();
195
+ a->mPercentage += qMin ( qMax (stepPercent, 0 .), 100 .);
196
+ }
197
+
198
+ a->progressBar ->setValue (qRound (a->mPercentage ));
199
+ }
186
200
}
187
201
188
- void ProgressDlg::setDone ()
202
+ Private::ProgressWdgt* ProgressDlg::findStep (QObject* activity, const QString& step) const
189
203
{
190
- mDone = true ;
191
- ui-> buttonBox -> button ( QDialogButtonBox::Close )-> setEnabled ( true ) ;
204
+ Private::ProgressWdgt* a = mActivities [activity] ;
205
+ return step. isEmpty () || !a ? nullptr : a-> mSteps [step] ;
192
206
}
0 commit comments