HAL
progress_bar.cpp
Go to the documentation of this file.
3 #include <QGridLayout>
4 #include <QVBoxLayout>
5 #include <QSpacerItem>
6 #include <QImage>
7 #include <QApplication>
8 #include <QPainter>
9 #include <math.h>
10 #include <QDebug>
11 
12 namespace hal {
13 
15  : AbstractBusyIndicator(parent)
16  {
18  setLineWidth(3);
19  QGridLayout* layout = new QGridLayout(this);
22  layout->addWidget(mLabel = new QLabel(this), 1, 0);
23  layout->addWidget(mProgressBar = new QProgressBar(this), 2, 0);
25  mButAbort = new QPushButton("Abort",this);
27  layout->addWidget(mButAbort, 4, 0);
28  if (context)
30  else
31  mButAbort->setDisabled(true);
32  }
33 
34  void ProgressBar::setValue(int percent)
35  {
36  if (percent >= 6) mButAbort->setDisabled(true);
37  mProgressBar->setValue(percent);
38  }
39 
40  void ProgressBar::setText(const QString& txt)
41  {
42  mLabel->setText(txt);
43  }
44 //----------------------
45 
47  : AbstractBusyIndicator(parent)
48  {
49  QVBoxLayout* layout = new QVBoxLayout(this);
51  layout->addWidget(mLabel = new QLabel(this));
52  mAnimation = new BusyAnimation(this);
53  mTimer = new QTimer(this);
55  layout->addWidget(mAnimation);
56  layout->addWidget(mProgressBar = new QProgressBar(this));
57  mTimer->start(80);
58  }
59 
61  {
62  mTimer->stop();
63  }
64 
66  : QWidget(parent), mImage(QImage(":/icons/hal9000","PNG")), mAngle(0)
67  {;}
68 
70  {
71  mAngle += 5;
72  update();
73  qApp->processEvents();
74  }
75 
77  {
78  Q_UNUSED(event);
79  QPainter p(this);
81 
82  int rw = rect().width();
83  int rh = rect().height();
84 
85  int w = rw > rh ? rh : rw;
86  int h = w;
87 
88  QRect rimg((rw-w)/2,(rh-h)/2,w,h);
89 
90 // p.fillRect(rimg,QBrush(Qt::gray));
91  QImage img = mImage.scaled(w,h);
92  double xc = w / 2.;
93  double yc = h / 2.;
94 
95  for (int y = 0; y<h; y++)
96  for (int x=0; x<w; x++)
97  {
98  QRgb col = img.pixel(x,y);
99  if (col & 0xFF000000)
100  {
101  double angle = atan2(y-yc,x-xc) / M_PI * 180.;
102  double da = angle >= mAngle ? angle - mAngle : angle + 360. - mAngle;
103  int opaque = floor(da / 360.*256);
104  opaque <<= 24;
105  col = (col & 0xFFFFFF) | opaque;
106  img.setPixel(x,y,col);
107  }
108  }
109 
110  p.drawImage(rimg,img);
111  }
112 
113  void BusyIndicator::setValue(int percent)
114  {
115  mProgressBar->setValue(percent);
116  update();
117  qApp->processEvents();
118  }
119 
121  {
122  if (mLabel->text() == txt) return;
123  mLabel->setText(txt);
124  qApp->processEvents();
125  }
126 }
BusyAnimation(QWidget *parent=nullptr)
void paintEvent(QPaintEvent *event) override
BusyIndicator(QWidget *parent=nullptr)
void setText(const QString &txt) override
void setValue(int percent) override
Logical container for modules, gates, and nets.
Definition: graph_context.h:55
ProgressBar(GraphContext *context, QWidget *parent=nullptr)
void setText(const QString &txt) override
void setValue(int percent) override
void clicked(bool checked)
void setLineWidth(int)
void setFrameStyle(int style)
QRgb pixel(int x, int y) const const
QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const const
void setPixel(int x, int y, uint index_or_rgb)
void setText(const QString &)
virtual void addItem(QLayoutItem *item)=0
void addWidget(QWidget *w)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags)
void setRenderHint(QPainter::RenderHint hint, bool on)
void setValue(int value)
AlignCenter
void start(int msec)
void stop()
void timeout()
virtual bool event(QEvent *event) override
QLayout * layout() const const
void setDisabled(bool disable)
void setSizePolicy(QSizePolicy)
void update()