87 lines
2.3 KiB
C++
87 lines
2.3 KiB
C++
// -*- mode: cpp; mode: fold -*-
|
|
// Description /*{{{*/
|
|
/* ######################################################################
|
|
|
|
OpProgress - Operation Progress
|
|
|
|
This class allows lengthy operations to communicate their progress
|
|
to the GUI. The progress model is simple and is not designed to handle
|
|
the complex case of the multi-activity acquire class.
|
|
|
|
The model is based on the concept of an overall operation consisting
|
|
of a series of small sub operations. Each sub operation has it's own
|
|
completion status and the overall operation has it's completion status.
|
|
The units of the two are not mixed and are completely independent.
|
|
|
|
The UI is expected to subclass this to provide the visuals to the user.
|
|
|
|
##################################################################### */
|
|
/*}}}*/
|
|
#ifndef PKGLIB_PROGRESS_H
|
|
#define PKGLIB_PROGRESS_H
|
|
|
|
#include <apt-pkg/macros.h>
|
|
#include <string>
|
|
#include <sys/time.h>
|
|
|
|
|
|
class Configuration;
|
|
class APT_PUBLIC OpProgress
|
|
{
|
|
friend class OpTextProgress;
|
|
unsigned long long Current;
|
|
unsigned long long Total;
|
|
unsigned long long Size;
|
|
unsigned long long SubTotal;
|
|
float LastPercent;
|
|
|
|
// Change reduction code
|
|
struct timeval LastTime;
|
|
std::string LastOp;
|
|
std::string LastSubOp;
|
|
|
|
protected:
|
|
|
|
std::string Op;
|
|
std::string SubOp;
|
|
float Percent;
|
|
|
|
bool MajorChange;
|
|
|
|
bool CheckChange(float Interval = 0.7);
|
|
virtual void Update() {};
|
|
|
|
public:
|
|
|
|
void Progress(unsigned long long Current);
|
|
void SubProgress(unsigned long long SubTotal, const std::string &Op = "", float const Percent = -1);
|
|
void OverallProgress(unsigned long long Current,unsigned long long Total,
|
|
unsigned long long Size,const std::string &Op);
|
|
virtual void Done() {};
|
|
|
|
OpProgress();
|
|
virtual ~OpProgress() {};
|
|
};
|
|
|
|
class APT_PUBLIC OpTextProgress : public OpProgress
|
|
{
|
|
protected:
|
|
|
|
std::string OldOp;
|
|
bool NoUpdate;
|
|
bool NoDisplay;
|
|
unsigned long LastLen;
|
|
void Update() override;
|
|
void Write(const char *S);
|
|
|
|
public:
|
|
|
|
void Done() override;
|
|
|
|
explicit OpTextProgress(bool NoUpdate = false) : NoUpdate(NoUpdate),
|
|
NoDisplay(false), LastLen(0) {};
|
|
explicit OpTextProgress(Configuration &Config);
|
|
virtual ~OpTextProgress() {Done();};
|
|
};
|
|
|
|
#endif
|