windowbutton.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware)
  2. // Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao)
  3. // SPDX-License-Identifier: Apache-2.0
  4. #include "windowbutton.h"
  5. #include "windowbutton_p.h"
  6. #include <QtCore/QDebug>
  7. #include <QtGui/QtEvents>
  8. namespace QWK {
  9. WindowButtonPrivate::WindowButtonPrivate() = default;
  10. WindowButtonPrivate::~WindowButtonPrivate() = default;
  11. void WindowButtonPrivate::init() {
  12. }
  13. void WindowButtonPrivate::reloadIcon() {
  14. Q_Q(WindowButton);
  15. if (!q->isEnabled() && !iconDisabled.isNull()) {
  16. q->setIcon(iconDisabled);
  17. return;
  18. }
  19. if (q->isChecked() && !iconChecked.isNull()) {
  20. q->setIcon(iconChecked);
  21. return;
  22. }
  23. if (!iconNormal.isNull()) {
  24. q->setIcon(iconNormal);
  25. }
  26. }
  27. WindowButton::WindowButton(QWidget *parent) : WindowButton(*new WindowButtonPrivate(), parent) {
  28. }
  29. WindowButton::~WindowButton() = default;
  30. QIcon WindowButton::iconNormal() const {
  31. Q_D(const WindowButton);
  32. return d->iconNormal;
  33. }
  34. void WindowButton::setIconNormal(const QIcon &icon) {
  35. Q_D(WindowButton);
  36. d->iconNormal = icon;
  37. d->reloadIcon();
  38. }
  39. QIcon WindowButton::iconChecked() const {
  40. Q_D(const WindowButton);
  41. return d->iconChecked;
  42. }
  43. void WindowButton::setIconChecked(const QIcon &icon) {
  44. Q_D(WindowButton);
  45. d->iconChecked = icon;
  46. d->reloadIcon();
  47. }
  48. QIcon WindowButton::iconDisabled() const {
  49. Q_D(const WindowButton);
  50. return d->iconDisabled;
  51. }
  52. void WindowButton::setIconDisabled(const QIcon &icon) {
  53. Q_D(WindowButton);
  54. d->iconDisabled = icon;
  55. d->reloadIcon();
  56. }
  57. void WindowButton::checkStateSet() {
  58. Q_D(WindowButton);
  59. d->reloadIcon();
  60. }
  61. void WindowButton::mouseDoubleClickEvent(QMouseEvent *event) {
  62. if (event->button() == Qt::LeftButton) {
  63. Q_EMIT doubleClicked();
  64. }
  65. }
  66. WindowButton::WindowButton(WindowButtonPrivate &d, QWidget *parent)
  67. : QPushButton(parent), d_ptr(&d) {
  68. d.q_ptr = this;
  69. d.init();
  70. }
  71. }