rusificationwidget.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "gui\rusificationwidget.h"
  2. #include "ui_rusificationwidget.h"
  3. #include "legacyapp.h"
  4. #include "rusificationtreeitem.h"
  5. #include <QDebug>
  6. void doStuffWithEveryItemInMyTree( QTreeWidgetItem *item )
  7. {
  8. item->setCheckState(0, Qt::Checked);
  9. for( int i = 0; i < item->childCount(); ++i )
  10. doStuffWithEveryItemInMyTree( item->child(i) );
  11. }
  12. QTreeWidgetItem* findItemByName(QTreeWidgetItem* item, QString name) {
  13. for (int i = 0; i < item->childCount(); i++) {
  14. if (((RusificationTreeItem*)item->child(i))->name == name)
  15. return item->child(i);
  16. QTreeWidgetItem* found_item = findItemByName(item->child(i), name);
  17. if (found_item)
  18. return found_item;
  19. }
  20. return nullptr;
  21. }
  22. RusificationWidget::RusificationWidget(LegacyApp *_app, QWidget *parent) :
  23. QWidget(parent),
  24. ui(new Ui::RusificationWidget),
  25. app(_app)
  26. {
  27. ui->setupUi(this);
  28. setupTreeWidget();
  29. ui_update_timer.setInterval(500);
  30. connect(&ui_update_timer, &QTimer::timeout, this, &RusificationWidget::updateUI);
  31. ui_update_timer.start();
  32. }
  33. RusificationWidget::~RusificationWidget()
  34. {
  35. delete ui;
  36. }
  37. void RusificationWidget::setupTreeWidget()
  38. {
  39. connect(ui->treeWidget_title, &QTreeWidget::itemEntered, this, &RusificationWidget::onHoveredTreeItemChanged);
  40. QSettings patch_list(qApp->applicationDirPath() + "/legacy_patches.ini", QSettings::IniFormat);
  41. patch_list.setIniCodec("UTF-8");
  42. ui->treeWidget_title->setMouseTracking(true);
  43. foreach (const QString &group, patch_list.childGroups()) {
  44. qDebug() << "Processing " << group << " patch item";
  45. RusificationTreeItem* item = new RusificationTreeItem(group);
  46. item->parseSettingsItem(patch_list);
  47. QTreeWidgetItem* parent_item = findItemByName(ui->treeWidget_title->invisibleRootItem(), item->parent_name);
  48. if (!parent_item)
  49. parent_item = ui->treeWidget_title->invisibleRootItem();
  50. parent_item->addChild(item);
  51. }
  52. ui->treeWidget_title->expandAll();
  53. doStuffWithEveryItemInMyTree(ui->treeWidget_title->invisibleRootItem());
  54. }
  55. void RusificationWidget::onHoveredTreeItemChanged(QTreeWidgetItem *item, int column)
  56. {
  57. RusificationTreeItem *tree_item = (RusificationTreeItem*)(item);
  58. ui->patch_hint->setText("Патч: " + tree_item->title + "\nОписание: " + tree_item->description);
  59. }
  60. void RusificationWidget::updateUI()
  61. {
  62. if (!qApp)
  63. return;
  64. QPoint pos = QCursor::pos();
  65. QWidget *hovered = qApp->widgetAt(pos);
  66. if (!hovered) {
  67. ui->patch_hint->setText("No object!");
  68. }
  69. if (hovered) {
  70. QWidget* parent = hovered->parentWidget();
  71. if (parent && (hovered->objectName() != "qt_scrollarea_viewport"
  72. || parent->objectName() != "treeWidget_title"))
  73. ui->patch_hint->setText(hovered->objectName() + "\n" + parent->objectName());
  74. }
  75. }