/*!
\page progress.html
\title 11.Showing and reacting to progress information
The progress bars give us the information about the progress status of a current task.We can find
progress bar showing up in the Qt Creator window at the left side. Whenever a task is executed
a progress bar pops up showing the progress status until the task is completed.
\inlineimage qtc-progressbar-11.png
\section1 11.1 Creating a progress bar
First we will declare the methods required for implementing a "Progress Bar" widget and then we will attach the widget with "Header Filter" in "Find/Replace"
and see it working according to the search progress status.
\section2 Step 1. Modification of "HeaderFilter" class
The "HeaderFilter" class discussed in Chapter 9. is further modified.
So we will now declare the methods required for a "Progress Bar" in the following block of code.
\code
struct HeaderFilterData;
class HeaderFilter : public Find::IFindFilter
{
Q_OBJECT
public:
HeaderFilter();
~HeaderFilter();
...
QWidget *createProgressWidget();
private:
HeaderFilterData *d;
};
\endcode
Here \bold {createProgressWidget()} is not implemented from Find::IFindFilter. It is a custom function written within HeaderFilter class,
which takes up the onus of returning a progress display widget.
\section2 Step 2. Implementation of the "HeaderFilter" class
The private member variables of the \bold {HeaderFilter} class are declared in the structure \bold {HeaderFilterData}
\code
struct HeaderFilterData
{
QFutureWatcher watcher;
QLabel *resultLabel;
...
...
};
\endcode
The \bold {constructor} and the \bold {destructor} are as follows.
\code
HeaderFilter::HeaderFilter()
{
d = new HeaderFilterProgressData;
d->watcher.setPendingResultsLimit(1);
d->resultLabel = 0 ;
...
}
HeaderFilter::~HeaderFilter()
{
delete d;
}
\endcode
The \bold {findAll()} method is further modified to create a progress bar popup the bar while searching
is going on.
\code
void HeaderFilter::findAll(const QString &text,QTextDocument::FindFlags findFlags)
{
...
...
...
//The "progress" is the instance of FutureProgress class.
//The "progress" is the pointer to the progress bar created
//Creates and shows the "progress" bar for searching task.
Core::FutureProgress *progress =
Core::ICore::instance()->progressManager()->addTask(d->watcher.future(),
"MySearch",
Find::Constants::TASK_SEARCH,
Core::ProgressManager::KeepOnFinish
);
progress->setWidget(createProgressWidget());
connect(progress, SIGNAL(clicked()), d->searchResultWindow(), SLOT(popup()));
}
\endcode
The \bold {createProgressWidget()} function creates the progress widget.It shows
the number of searched items found below and is placed below the progress bar.
\code
QWidget *HeaderFilter::createProgressWidget()
{
d->resultLabel = new QLabel;
d->resultLabel->setAlignment(Qt::AlignCenter);
QFont f = d->resultLabel->font();
f.setBold(true);
f.setPointSizeF(StyleHelper::sidebarFontSize());
d->resultLabel->setFont(f);
d->resultLabel->setPalette(StyleHelper::sidebarFontPalette(d->resultLabel->palette()));
d->resultLabel->setText(tr("%1 found").arg(d->searchResultWindow()->numberOfResults()));
return d->resultLabel;
}
\endcode
\section2 Step 3.Testing the plugin.
Now its the time to test the plugin. For searching we use our "HeaderFilter" and the searched result is shown in the
"Search Results" window and the progress bar pops up while searching.
\inlineimage qtc-searchprogress-11.png
*/