browsewidget.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "browsewidget.h"
  2. #include "ui_browsewidget.h"
  3. #include "models/lotromanager.h"
  4. #include <QMessageBox>
  5. BrowseWidget::BrowseWidget(LotroManager* mgr, QSettings* settings, QWidget *parent) :
  6. QWidget(parent), lotro_manager(mgr), settings(settings),
  7. ui(new Ui::BrowseWidget)
  8. {
  9. ui->setupUi(this);
  10. //void localeFileInfoReceived(QString);
  11. connect(lotro_manager, &LotroManager::localeFileContentsReceived, this, &BrowseWidget::onLotroLocaleFileContentsReceived);
  12. connect(lotro_manager, &LotroManager::localeFileInfoReceived, this, &BrowseWidget::onLotroLocaleFileInfoReceived);
  13. resize(parent->size());
  14. }
  15. BrowseWidget::~BrowseWidget()
  16. {
  17. delete ui;
  18. }
  19. void BrowseWidget::on_find_button_common_clicked()
  20. {
  21. if (ui->file_id_common->text().toLongLong() == 0) {
  22. QMessageBox::warning(this->parentWidget(), "Не указан ID файла!", "Укажите, пожалуйста, корректный (числовой) ID текстового файла!");
  23. return;
  24. }
  25. QMetaObject::invokeMethod(lotro_manager, "getLocaleFileContents", Qt::QueuedConnection,
  26. Q_ARG(long long, ui->file_id_common->text().toLongLong()),
  27. Q_ARG(int, LOTRO_DAT::DatLocaleManager::PATCHED)
  28. );
  29. QMetaObject::invokeMethod(lotro_manager, "getLocaleFileContents", Qt::QueuedConnection,
  30. Q_ARG(long long, ui->file_id_common->text().toLongLong()),
  31. Q_ARG(int, LOTRO_DAT::DatLocaleManager::ORIGINAL)
  32. );
  33. }
  34. void BrowseWidget::onLotroLocaleFileContentsReceived(int locale, LOTRO_DAT::SubfileData data)
  35. {
  36. //void localeFileContentsReceived(int, LOTRO_DAT::SubfileData); // extention, contents
  37. //void localeFileInfoReceived(QString);
  38. QLabel* target_contents;
  39. QLineEdit* target_args;
  40. if (locale == LOTRO_DAT::DatLocaleManager::PATCHED) {
  41. target_args = ui->patched_args_common;
  42. target_contents = ui->patched_content_common;
  43. } else {
  44. target_args = ui->original_args_common;
  45. target_contents = ui->original_content_common;
  46. }
  47. if (ui->fragment_id_common->text().toLongLong() == 0) {
  48. target_contents->setText(QString::fromStdU16String(data.text_data));
  49. target_args->clear();
  50. return;
  51. }
  52. long long fragment_id = ui->fragment_id_common->text().toLongLong();
  53. unsigned beginning = data.text_data.find(QString::number(fragment_id).toStdU16String(), 0);
  54. if (beginning == std::u16string::npos) {
  55. QMessageBox::warning(this->parentWidget(), "Фрагмент не найден!", "Не удалось найти в файле фрагмент с заданным ID!");
  56. return;
  57. }
  58. unsigned ending = data.text_data.find(QString("|||").toStdU16String(), beginning);
  59. unsigned size = std::u16string::npos;
  60. if (ending != std::u16string::npos)
  61. size = ending - beginning;
  62. std::u16string str = data.text_data.substr(beginning, size);
  63. QStringList splitted_fragment = QString::fromStdU16String(str).split(":::");
  64. if (splitted_fragment.size() != 3) {
  65. QMessageBox::warning(this->parentWidget(), "Ошибка импорта!", QString("Получены некорректные данные фрагмента! Будет выведен весь файл!"));
  66. target_contents->setText(QString::fromStdU16String(str));
  67. target_args->clear();
  68. return;
  69. }
  70. target_args->setText(splitted_fragment.at(1));
  71. target_contents->setText(splitted_fragment.at(2));
  72. return;
  73. }
  74. void BrowseWidget::onLotroLocaleFileInfoReceived(int locale, QString info)
  75. {
  76. QLabel* target_contents;
  77. QLineEdit* target_args;
  78. if (locale == LOTRO_DAT::DatLocaleManager::PATCHED) {
  79. target_args = ui->patched_args_common;
  80. target_contents = ui->patched_content_common;
  81. } else {
  82. target_args = ui->original_args_common;
  83. target_contents = ui->original_content_common;
  84. }
  85. target_args->clear();
  86. target_contents->setText(info);
  87. }
  88. void BrowseWidget::on_getFileInfoButton_common_clicked()
  89. {
  90. QMetaObject::invokeMethod(lotro_manager, "getLocaleFileInfo", Qt::QueuedConnection,
  91. Q_ARG(long long, ui->file_id_common->text().toLongLong()),
  92. Q_ARG(int, LOTRO_DAT::DatLocaleManager::ORIGINAL)
  93. );
  94. QMetaObject::invokeMethod(lotro_manager, "getLocaleFileInfo", Qt::QueuedConnection,
  95. Q_ARG(long long, ui->file_id_common->text().toLongLong()),
  96. Q_ARG(int, LOTRO_DAT::DatLocaleManager::PATCHED)
  97. );
  98. }