Projekt

Allgemein

Profil

Herunterladen (4,13 KB) Statistiken
| Zweig: | Markierung: | Revision:
/***************************************************************************
$RCSfile$
-------------------
cvs : $Id$
begin : Mon Mar 01 2004
copyright : (C) 2004 by Martin Preuss
email : martin@libchipcard.de

***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/


#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#define GWEN_EXTEND_WAITCALLBACK
#include "qbwcb_progress.h"
#include "qbprogress.h"

#include <gwenhywfar/debug.h>



QBProgressCallback::QBProgressCallback(const char *id,
QBProgress::ProgressType pt)
:QBWaitCallback(id)
,_progressWidget(0)
,_progressType(pt)
,_lastProgress(0)
,_started(false){
}



QBProgressCallback::~QBProgressCallback(){
if (_progressWidget) {
if (_progressWidget->shouldStay()) {
_progressWidget->advance(_lastProgress);
_progressWidget->end();
}
else {
delete _progressWidget;
}
}
}



QBWaitCallback *QBProgressCallback::instantiate(){
return new QBProgressCallback(getId(), _progressType);
}



bool QBProgressCallback::_checkStart(bool force) {
GWEN_TYPE_UINT64 total64;
GWEN_TYPE_UINT32 total32;

total64=getProgressTotal();
if (total64==GWEN_WAITCALLBACK_PROGRESS_NONE)
total32=AB_BANKING_PROGRESS_NONE;
else
total32=(GWEN_TYPE_UINT32)total64;

if (_started) {
_progressWidget->setTotalPos(total32);
}
else {
time_t currTime;
double d;

currTime=time(0);
d=difftime(currTime, lastEntered());
if ((total64!=0 || d>=2) &&
(force ||
_progressType==QBProgress::ProgressTypeNormal ||
(_progressType==QBProgress::ProgressTypeFast && d>=5) ||
(_progressType==QBProgress::ProgressTypeSimple && d>=2))
) {

DBG_ERROR(0, "Starting with %d (after %d secs)",
(int) total32, (int)d);
_progressWidget=new QBProgress(0,
_progressType,
QWidget::tr("Waiting..."),
getText(),
getUnits(),
0,
"ProgressWidget",
Qt::WType_Dialog | Qt::WShowModal);
_progressWidget->setProgressText(getText());
_progressWidget->setProgressUnits(getUnits());
_progressWidget->start(total32);
_progressWidget->show();
_started=true;
}
}
return _started;
}


GWEN_WAITCALLBACK_RESULT
QBProgressCallback::checkAbort(unsigned int level){
int rv;

if (_checkStart((flags() & GWEN_WAITCALLBACK_FLAGS_IMMEDIATELY))) {
if (level!=0) {
rv=_progressWidget->advance(AB_BANKING_PROGRESS_NONE);
}
else {
if (_lastProgress==getProgressPos())
rv=_progressWidget->advance(AB_BANKING_PROGRESS_NONE);
else {
_lastProgress=getProgressPos();
rv=_progressWidget->advance(_lastProgress);
}
}

if (rv==AB_ERROR_USER_ABORT) {
DBG_WARN(0, "Aborted");
return GWEN_WaitCallbackResult_Abort;
}
}
return GWEN_WaitCallbackResult_Continue;
}



void QBProgressCallback::log(unsigned int level,
GWEN_LOGGER_LEVEL loglevel,
const char *s){
AB_BANKING_LOGLEVEL nl;

if (_checkStart(loglevel<=GWEN_LoggerLevelWarning ||
(flags() & GWEN_WAITCALLBACK_FLAGS_IMMEDIATELY))) {
switch(loglevel) {
case GWEN_LoggerLevelError: nl=AB_Banking_LogLevelError; break;
case GWEN_LoggerLevelWarning: nl=AB_Banking_LogLevelWarn; break;
case GWEN_LoggerLevelNotice: nl=AB_Banking_LogLevelNotice; break;
case GWEN_LoggerLevelDebug: nl=AB_Banking_LogLevelDebug; break;
case GWEN_LoggerLevelVerbous: nl=AB_Banking_LogLevelVerbous; break;
default:
DBG_NOTICE(AQBANKING_LOGDOMAIN, "Loglevel %d -> info", loglevel);
nl=AB_Banking_LogLevelInfo;
break;
}

_progressWidget->log(nl, s);
}
}





(17-17/22)