21#include <tqtoolbutton.h>
23#include <tqeventloop.h>
26#include <tdeapplication.h>
29#include <kiconloader.h>
31#include "kis_progress_subject.h"
32#include "kis_label_progress.h"
33#include "kis_cursor.h"
35class EscapeButton :
public TQToolButton {
39 EscapeButton(TQWidget * parent,
const char * name) : TQToolButton(parent, name) {};
41 void keyReleaseEvent(TQKeyEvent *e)
43 if (e->key()==TQt::Key_Escape)
48KisLabelProgress::KisLabelProgress(TQWidget *parent,
const char *name, WFlags f) : super(parent, name, f)
53 TQHBoxLayout *box =
new TQHBoxLayout(
this);
54 box->setAutoAdd(
true);
56 TQIconSet cancelIconSet = SmallIconSet(
"process-stop");
58 m_cancelButton =
new EscapeButton(
this,
"cancel_button");
59 m_cancelButton->setIconSet(cancelIconSet);
60 TQToolTip::add(m_cancelButton, i18n(
"Cancel"));
61 connect(m_cancelButton, TQ_SIGNAL(clicked()),
this, TQ_SLOT(cancelPressed()));
63 m_bar =
new KProgress(100,
this);
66KisLabelProgress::~KisLabelProgress()
70void KisLabelProgress::setSubject(KisProgressSubject *subject,
bool modal,
bool canCancel)
78 connect(subject, TQ_SIGNAL(notifyProgress(
int)),
this, TQ_SLOT(update(
int)));
79 connect(subject, TQ_SIGNAL(notifyProgressStage(
const TQString&,
int)),
this, TQ_SLOT(updateStage(
const TQString&,
int)));
80 connect(subject, TQ_SIGNAL(notifyProgressDone()),
this, TQ_SLOT(done()));
81 connect(subject, TQ_SIGNAL(notifyProgressError()),
this, TQ_SLOT(error()));
82 connect(subject, TQ_SIGNAL(destroyed()),
this, TQ_SLOT(subjectDestroyed()));
88 kdDebug() <<
"grabbing 1\n";
89 m_cancelButton->grabMouse();
90 m_cancelButton->grabKeyboard();
94 m_cancelButton->hide();
98 kdDebug() <<
"grabbing 2\n";
105 TQApplication::setOverrideCursor(KisCursor::waitCursor());
112bool KisLabelProgress::event(TQEvent * e)
115 if (!e)
return false;
117 int type = e->type();
120 case(KisProgress::ProgressEventBase + 1):
122 KisProgress::UpdateEvent * ue =
dynamic_cast<KisProgress::UpdateEvent*
>(e);
123 update(ue->m_percent);
126 case(KisProgress::ProgressEventBase + 2):
128 KisProgress::UpdateStageEvent * use =
dynamic_cast<KisProgress::UpdateStageEvent*
>(e);
129 updateStage(use->m_stage, use->m_percent);
132 case(KisProgress::ProgressEventBase + 3):
135 case(KisProgress::ProgressEventBase + 4):
138 case(KisProgress::ProgressEventBase + 5):
142 return TQLabel::event(e);
148void KisLabelProgress::reset()
151 m_subject->disconnect(
this);
155 TQApplication::restoreOverrideCursor();
163 m_cancelButton->releaseMouse();
164 m_cancelButton->releaseKeyboard();
168void KisLabelProgress::update(
int percent)
170 m_bar->setValue(percent);
172 TDEApplication *app = TDEApplication::kApplication();
174 app->processEvents();
180void KisLabelProgress::updateStage(
const TQString&,
int percent)
182 m_bar->setValue(percent);
184 TDEApplication *app = TDEApplication::kApplication();
187 app->processEvents();
190void KisLabelProgress::cancelPressed()
198void KisLabelProgress::subjectDestroyed()
203void KisLabelProgress::done()
208void KisLabelProgress::error()
213#include "kis_label_progress.moc"