/*!
    \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<FileSearchResult> 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
  
*/
