helpwidget.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "widgets/HelpWidget.h"
  2. #include "ui_HelpWidget.h"
  3. #include <QDebug>
  4. #include <QScrollBar>
  5. HelpWidget::HelpWidget(QSettings* settings, PatchDownloader* patch_downloader, LotroDatManager* lotro_dat_manager, QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::HelpWidget)
  8. {
  9. ui->setupUi(this);
  10. currently_active_entry = ui->menuentry_1;
  11. // moveMenuHoverWidget(ui->menuentry_1);
  12. qDebug() << ui->hover_button_widget->geometry();
  13. connect(ui->content_scroll_area->verticalScrollBar(), &QScrollBar::valueChanged, this, &HelpWidget::handleContentScrolling);
  14. }
  15. HelpWidget::~HelpWidget()
  16. {
  17. delete ui;
  18. }
  19. void HelpWidget::handleContentScrolling(int value)
  20. {
  21. if (scrollAreaContentsAnimation && scrollAreaContentsAnimation->state() == QAbstractAnimation::Running)
  22. return;
  23. // qDebug() << "VALUE CHANGED: " << value << ui->content_scroll_area->verticalScrollBar()->maximum();
  24. QPushButton* new_active_entry = ui->menuentry_1;
  25. if (value >= ui->sub_entry_1->y() + ui->sub_entry_1->height() * 2 / 3)
  26. new_active_entry = ui->menuentry_2;
  27. if (value >= ui->sub_entry_2->y() + ui->sub_entry_2->height() * 2 / 3)
  28. new_active_entry = ui->menuentry_3;
  29. if (value >= ui->sub_entry_3->y() + ui->sub_entry_3->height() * 2 / 3)
  30. new_active_entry = ui->menuentry_4;
  31. if (value >= ui->sub_entry_4->y() + ui->sub_entry_4->height() * 2 / 3 || value == ui->content_scroll_area->verticalScrollBar()->maximum())
  32. new_active_entry = ui->menuentry_5;
  33. if (value == 0)
  34. new_active_entry = ui->menuentry_1;
  35. moveMenuHoverWidget(new_active_entry);
  36. }
  37. void HelpWidget::moveMenuHoverWidget(QPushButton *target)
  38. {
  39. if (ui->hover_button_widget->size() == QSize(0, 0)) {
  40. ui->hover_button_widget->resize(target->size() + QSize(10, 0));
  41. ui->hover_button_widget->move(ui->checkpoints_list->pos() + target->pos() + QPoint(-5, 0));
  42. } else {
  43. if (menuHoverWidgetAnimation == nullptr)
  44. menuHoverWidgetAnimation = new QPropertyAnimation(ui->hover_button_widget, "geometry");
  45. else
  46. menuHoverWidgetAnimation->stop();
  47. menuHoverWidgetAnimation->setDuration(200);
  48. menuHoverWidgetAnimation->setStartValue(QRect(ui->hover_button_widget->pos(), ui->hover_button_widget->size()));
  49. menuHoverWidgetAnimation->setEndValue(QRect(ui->checkpoints_list->pos() + target->pos() + QPoint(-5, 0), target->size() + QSize(10, 0)));
  50. menuHoverWidgetAnimation->start();
  51. }
  52. ui->menuentry_1->raise();
  53. ui->menuentry_2->raise();
  54. ui->menuentry_3->raise();
  55. ui->menuentry_4->raise();
  56. }
  57. void HelpWidget::scrollContentToWidget(QWidget *widget)
  58. {
  59. if (scrollAreaContentsAnimation == nullptr)
  60. scrollAreaContentsAnimation = new QPropertyAnimation(ui->content_scroll_area->verticalScrollBar(), "value");
  61. else
  62. scrollAreaContentsAnimation->stop();
  63. scrollAreaContentsAnimation->setDuration(200);
  64. scrollAreaContentsAnimation->setStartValue(ui->content_scroll_area->verticalScrollBar()->value());
  65. scrollAreaContentsAnimation->setEndValue(widget->y());
  66. scrollAreaContentsAnimation->start();
  67. }
  68. void HelpWidget::on_menuentry_1_clicked()
  69. {
  70. if (currently_active_entry != ui->menuentry_1) {
  71. currently_active_entry = ui->menuentry_1;
  72. moveMenuHoverWidget(ui->menuentry_1);
  73. }
  74. scrollContentToWidget(ui->sub_entry_1);
  75. }
  76. void HelpWidget::on_menuentry_2_clicked()
  77. {
  78. if (currently_active_entry != ui->menuentry_2) {
  79. currently_active_entry = ui->menuentry_2;
  80. moveMenuHoverWidget(ui->menuentry_2);
  81. }
  82. scrollContentToWidget(ui->sub_entry_2);
  83. }
  84. void HelpWidget::on_menuentry_3_clicked()
  85. {
  86. if (currently_active_entry != ui->menuentry_3) {
  87. currently_active_entry = ui->menuentry_3;
  88. moveMenuHoverWidget(ui->menuentry_3);
  89. }
  90. scrollContentToWidget(ui->sub_entry_3);
  91. }
  92. void HelpWidget::on_menuentry_4_clicked()
  93. {
  94. if (currently_active_entry != ui->menuentry_4) {
  95. currently_active_entry = ui->menuentry_4;
  96. moveMenuHoverWidget(ui->menuentry_4);
  97. }
  98. scrollContentToWidget(ui->sub_entry_4);
  99. }
  100. void HelpWidget::on_menuentry_5_clicked()
  101. {
  102. if (currently_active_entry != ui->menuentry_5) {
  103. currently_active_entry = ui->menuentry_5;
  104. moveMenuHoverWidget(ui->menuentry_5);
  105. }
  106. scrollContentToWidget(ui->sub_entry_5);
  107. }