messagedialog.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "gui\messagedialog.h"
  2. #include "ui_messagedialog.h"
  3. #include <QPixmap>
  4. #include <QBitmap>
  5. #include <QMouseEvent>
  6. #include "legacyapp.h"
  7. #include <QTextCodec>
  8. using namespace LOTRO_DAT;
  9. MessageDialog::MessageDialog(LegacyApp *app_, QWidget *parent) :
  10. QDialog(parent),
  11. ui(new Ui::MessageDialog), app(app_)
  12. {
  13. ui->setupUi(this);
  14. setModal(true);
  15. setWindowTitle("Выполнение операции...");
  16. QPixmap background(":/assets/backgrounds/process_dialog.png");
  17. QPixmap current_bg = background.scaled(width(), height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  18. QBitmap current_mask = current_bg.mask();
  19. setMask(current_mask);
  20. QPalette palette;
  21. palette.setBrush(QPalette::Window, current_bg);
  22. setPalette(palette);
  23. loader.setFileName(":/assets/backgrounds/loading-gear.gif");
  24. ui->loader->setMovie(&loader);
  25. loader.setScaledSize(ui->loader->size());
  26. loader.start();
  27. uiUpdateTimer.setInterval(30);
  28. connect(&uiUpdateTimer, &QTimer::timeout, this, &MessageDialog::updateUI);
  29. uiUpdateTimer.start();
  30. }
  31. void MessageDialog::mousePressEvent(QMouseEvent *event)
  32. {
  33. if (event->button() == Qt::LeftButton) {
  34. dragPosition = event->globalPos() - frameGeometry().topLeft();
  35. event->accept();
  36. }
  37. }
  38. void MessageDialog::updateUI()
  39. {
  40. if (!qApp)
  41. return;
  42. std::string debug_msg = app->client_local_dat.GetStatusModule().GetDebugMessage();
  43. QTextCodec *codec = QTextCodec::codecForName("UTF8");
  44. QByteArray ba(debug_msg.c_str());
  45. QString dmsg = codec->toUnicode(ba);
  46. int percentage = app->client_local_dat.GetStatusModule().GetPercentage();
  47. DatStatus::DAT_STATUS status = app->client_local_dat.GetStatusModule().GetStatus();
  48. QString title = "";
  49. switch (status) {
  50. case DatStatus::E_INITIALISING:
  51. title = "Инициализация";
  52. break;
  53. case DatStatus::E_EXTRACTING:
  54. title = "Извлечение данных";
  55. break;
  56. case DatStatus::E_PATCHING:
  57. title = "Применение патча";
  58. break;
  59. case DatStatus::E_COMMITING:
  60. title = "Фиксация данных";
  61. break;
  62. case DatStatus::E_BACKUP_CREATING:
  63. title = "Создание резервной копии";
  64. break;
  65. case DatStatus::E_BACKUP_REMOVING:
  66. title = "Удаление резервной копии";
  67. break;
  68. case DatStatus::E_GATHERING_INFO:
  69. title = "Сбор информации ядра";
  70. break;
  71. case DatStatus::E_FREE:
  72. title = "Свободен";
  73. break;
  74. default:
  75. title = "Неизвестная операция";
  76. break;
  77. }
  78. if (status == DatStatus::E_FREE)
  79. hide();
  80. else
  81. show();
  82. ui->title->setText(title);
  83. ui->progressBar->setValue(percentage);
  84. ui->debug_info->setText(dmsg);
  85. }
  86. void MessageDialog::mouseMoveEvent(QMouseEvent *event)
  87. {
  88. if (event->buttons() & Qt::LeftButton) {
  89. move(event->globalPos() - dragPosition);
  90. app->window.move(event->globalPos() - dragPosition +
  91. QPoint((width() - app->window.width()) / 2, (height() - app->window.height()) / 2)
  92. );
  93. event->accept();
  94. }
  95. }
  96. MessageDialog::~MessageDialog()
  97. {
  98. delete ui;
  99. }