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  }
74 
76  {
77  Q_UNUSED(event);
78  QPainter p(this);
80 
81  int rw = rect().width();
82  int rh = rect().height();
83 
84  int w = rw > rh ? rh : rw;
85  int h = w;
86 
87  QRect rimg((rw-w)/2,(rh-h)/2,w,h);
88 
89  // p.fillRect(rimg,QBrush(Qt::gray));
90  QImage img = mImage.scaled(w,h);
91  double xc = w / 2.;
92  double yc = h / 2.;
93 
94  for (int y = 0; y<h; y++)
95  for (int x=0; x<w; x++)
96  {
97  QRgb col = img.pixel(x,y);
98  if (col & 0xFF000000)
99  {
100  double angle = atan2(y-yc,x-xc) / M_PI * 180.;
101  double da = angle >= mAngle ? angle - mAngle : angle + 360. - mAngle;
102  int opaque = floor(da / 360.*256);
103  opaque <<= 24;
104  col = (col & 0xFFFFFF) | opaque;
105  img.setPixel(x,y,col);
106  }
107  }
108 
109  p.drawImage(rimg,img);
110  }
111 
112  void BusyIndicator::setValue(int percent)
113  {
114  if (mProgressBar->value() == percent) return;
115  mProgressBar->setValue(percent);
116  update();
117  }
118 
120  {
121  if (mLabel->text() == txt) return;
122  mLabel->setText(txt);
123  update();
124  }
125 }
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()