InteractiveButton.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "InteractiveButton.h"
  2. #include <QApplication>
  3. #include <QPalette>
  4. InteractiveButton::InteractiveButton(QWidget* parent)
  5. : QPushButton(parent)
  6. {
  7. setEnabled(true);
  8. setAutoFillBackground(true);
  9. _mustBeSet=false;
  10. _highlight=false;
  11. connect(this, SIGNAL(toggled(bool)), this, SLOT(newBitValueSlot(bool)));
  12. }
  13. void InteractiveButton::highlight(bool state)
  14. {
  15. if (_highlight == state) return;
  16. _highlight=state;
  17. setColor();
  18. }
  19. void InteractiveButton::setColor()
  20. {
  21. // No style sheet since this will not work for Mac OS X atm.
  22. QPalette fiddle = QApplication::palette();
  23. int colorset=(_mustBeSet?4:0)+(_highlight?2:0)+((_mustBeSet&!_state)?1:0);
  24. switch (colorset) {
  25. case 6:
  26. fiddle.setColor(QPalette::Active, QPalette::Button, Qt::green);
  27. break;
  28. case 4:
  29. fiddle.setColor(QPalette::Active, QPalette::Button, Qt::darkGreen);
  30. break;
  31. case 3:
  32. case 7:
  33. fiddle.setColor(QPalette::Active, QPalette::Button, Qt::red);
  34. break;
  35. case 2:
  36. fiddle.setColor(QPalette::Active, QPalette::Button, Qt::yellow);
  37. break;
  38. case 5:
  39. case 1:
  40. fiddle.setColor(QPalette::Active, QPalette::Button, Qt::darkRed);
  41. break;
  42. };
  43. setPalette(fiddle);
  44. update();
  45. }
  46. void InteractiveButton::enterEvent(QEvent* event)
  47. {
  48. emit mouseOver(true);
  49. }
  50. void InteractiveButton::leaveEvent(QEvent* event)
  51. {
  52. emit mouseOver(false);
  53. }
  54. void InteractiveButton::newBitValueSlot(bool state)
  55. {
  56. _state=state;
  57. QString name = objectName();
  58. int bit = name.right(1).toInt();
  59. int reg = name.mid(
  60. 1 + name.indexOf('_'),
  61. name.lastIndexOf('_') - name.indexOf('_') - 1).toInt();
  62. emit newBitValue(reg, bit, state);
  63. setColor();
  64. }
  65. void InteractiveButton::mustBeSet(bool state)
  66. {
  67. if (state == _mustBeSet) return;
  68. _mustBeSet=state;
  69. setColor();
  70. }