gui.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "gui.h"
  2. #include "ui_gui.h"
  3. #include <QMouseEvent>
  4. #include <QFileDialog>
  5. #include <QtConcurrent/QtConcurrent>
  6. #include <QMessageBox>
  7. #include <LotroDat.h>
  8. using namespace LOTRO_DAT;
  9. GUI::GUI(QWidget *parent) :
  10. QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint),
  11. ui(new Ui::GUI)
  12. {
  13. state = "free";
  14. ui->setupUi(this);
  15. ui->Progress->hide();
  16. setWindowTitle("Gi1dor's font restorator");
  17. setWindowIcon(QIcon(":/data/icon.ico"));
  18. connect(this, SIGNAL(update_percent(int)), this, SLOT(on_update_percent(int)));
  19. connect(this, SIGNAL(update_label(QString)), this, SLOT(on_update_label(QString)));
  20. connect(this, SIGNAL(patch_finished(QString, bool)), this, SLOT(on_patch_finished(QString, bool)));
  21. }
  22. GUI::~GUI()
  23. {
  24. delete ui;
  25. }
  26. void GUI::closeEvent(QCloseEvent *e){
  27. if (state != "free")
  28. e->ignore();
  29. }
  30. void GUI::mouseMoveEvent( QMouseEvent* e ) {
  31. if( e->buttons() | Qt::LeftButton ) {
  32. QPoint pt=mapFromGlobal(QCursor::pos());
  33. QWidget* child=childAt(pt);
  34. if (child == 0) {
  35. setGeometry(pos().x() + ( e->x() - dx ), pos().y() + ( e->y() - dy ), width(), height());
  36. return;
  37. }
  38. QString cname = child->metaObject()->className();
  39. if (cname != "QPushButton" && cname != "QComboBox"){ // отключаем перетягивание при наведение на активные элементы
  40. setGeometry(pos().x() + ( e->x() - dx ), pos().y() + ( e->y() - dy ), width(), height());
  41. } else {
  42. dx = e->x();
  43. dy = e->y();
  44. }
  45. }
  46. }
  47. void GUI::mousePressEvent( QMouseEvent* e ) {
  48. if( e->button() == Qt::LeftButton ) {
  49. dx = e->x();
  50. dy = e->y();
  51. setCursor( Qt::OpenHandCursor );
  52. }
  53. }
  54. void GUI::mouseReleaseEvent( QMouseEvent* e ) {
  55. if( e->button() == Qt::LeftButton ) {
  56. setCursor( Qt::ArrowCursor );
  57. dx = e->x();
  58. dy = e->y();
  59. }
  60. }
  61. void GUI::on_close_btn_clicked()
  62. {
  63. if (state == "free")
  64. QApplication::exit(0);
  65. }
  66. void GUI::on_fileDialogButton_clicked()
  67. {
  68. datFilePath = QFileDialog::getOpenFileName(0, "Открыть .dat файл", "", "client_local_English.dat");
  69. }
  70. void GUI::on_performAction_clicked()
  71. {
  72. ui->Progress->show();
  73. ui->performAction->hide();
  74. QFuture<void> future = QtConcurrent::run([=]() {
  75. startPatching();
  76. });
  77. }
  78. void GUI::startPatching() {
  79. state = "busy";
  80. DatFile file;
  81. emit update_percent(30);
  82. emit update_label("Открываем .dat файл...");
  83. if (file.InitDatFile(datFilePath.toStdString(), 0) < 0) {
  84. emit patch_finished("Неудача! Не могу открыть файл " + datFilePath
  85. + ". Проверьте, что путь правильный и выключены лаунчер игры и русификатор!"
  86. , false);
  87. return;
  88. }
  89. emit update_label("Открываем патч...");
  90. emit update_percent(70);
  91. Database patch;
  92. if (!patch.InitDatabase("kfbIUYBKrjhsb.kbd")) {
  93. emit patch_finished("Неудача! Не могу открыть патч шрифтов!", false);
  94. return;
  95. }
  96. emit update_label("Проводим обновление...");
  97. file.PatchAllDatabase(&patch);
  98. emit update_percent(90);
  99. emit update_label("Завершаем обновление...");
  100. file.CloseDatFile();
  101. emit patch_finished("Успех! Проверьте в игре, что шрифты успешно восстановились!", true);
  102. }
  103. void GUI::on_patch_finished(QString result, bool ok) {
  104. ui->Progress->hide();
  105. ui->performAction->show();
  106. state = "free";
  107. message.setText(result);
  108. message.setIcon(ok ? QMessageBox::Information : QMessageBox::Critical);
  109. message.show();
  110. }
  111. void GUI::on_update_percent(int newPercent) {
  112. ui->progressBar->setValue(newPercent);
  113. }
  114. void GUI::on_update_label(QString label) {
  115. ui->processLabel->setText(label);
  116. }