From ee7a11b0efdd5afb9299b904303f40b3c44609e2 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Mon, 1 May 2023 01:23:08 +0200 Subject: [PATCH] champion images in runepages --- include/datadragon.h | 2 +- include/runemanager.h | 5 +++++ include/runepagelist.h | 3 +++ src/mainwindow.cpp | 1 + src/runemanager.cpp | 30 +++++++++++++++++++++++++++++- src/runepagelist.cpp | 12 ++++++++++++ 6 files changed, 51 insertions(+), 2 deletions(-) diff --git a/include/datadragon.h b/include/datadragon.h index ecfd06a..6aec402 100644 --- a/include/datadragon.h +++ b/include/datadragon.h @@ -95,4 +95,4 @@ private: }; -std::ostream& operator<<(std::ostream& str, const DataDragon::ChampData& cd); \ No newline at end of file +std::ostream& operator<<(std::ostream& str, const DataDragon::ChampData& cd); diff --git a/include/runemanager.h b/include/runemanager.h index 3eb31b4..175f5a2 100644 --- a/include/runemanager.h +++ b/include/runemanager.h @@ -13,7 +13,9 @@ namespace Ui { } class ClientAPI; +class DataDragon; class QListWidgetItem; +class QTimer; class RuneManager : public QWidget { Q_OBJECT @@ -23,6 +25,7 @@ public: ~RuneManager(); void setConfig(Config& config); + void setDataDragon(DataDragon& dd); private slots: void loadRunes(); @@ -38,10 +41,12 @@ private slots: private: void syncRunes(); + void reloadAARunes(); Ui::RuneManager* ui; std::shared_ptr client; Config* config = nullptr; + QTimer* initialLoadTimer = nullptr; std::vector runeInfo; std::vector runeStyles; diff --git a/include/runepagelist.h b/include/runepagelist.h index 523b534..c6e3edc 100644 --- a/include/runepagelist.h +++ b/include/runepagelist.h @@ -13,6 +13,7 @@ namespace Ui { class RunePageList; } +class DataDragon; class DropEvent; class RunePageList : public QListWidget { @@ -27,6 +28,7 @@ public: constexpr void setClient(bool b) { isClient = b; } constexpr void setOther(QListWidget* other) { this->other = other; } + constexpr void setDataDragon(DataDragon& dd) { this->dd = ⅆ } void loadRunePages(const std::vector& pages); void loadRunePages(const std::vector>& pages); @@ -58,5 +60,6 @@ private: Ui::RunePageList* ui; QListWidget* other = nullptr; + DataDragon* dd = nullptr; bool isClient; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e6f8026..b8d48aa 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -30,6 +30,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), loading(true), ui QObject::connect(tab, &SettingsTab::toggled, this, &MainWindow::tabtoggled); } + ui->runesPage->setDataDragon(dd); ui->runesPage->setConfig(conf); ui->enableAll->setChecked(rc.enabledAutoAccept); diff --git a/src/runemanager.cpp b/src/runemanager.cpp index 448858e..f7ac368 100644 --- a/src/runemanager.cpp +++ b/src/runemanager.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "clientapi.h" @@ -22,7 +23,12 @@ RuneManager::RuneManager(QWidget* parent) : QWidget(parent), ui(new Ui::RuneMana QObject::connect(ui->chkAutoCopy, &QCheckBox::clicked, this, &RuneManager::autoSyncToggled); - loadRunes(); + + initialLoadTimer = new QTimer(this); + QObject::connect(initialLoadTimer, &QTimer::timeout, this, &RuneManager::loadRunes); + initialLoadTimer->setInterval(std::chrono::milliseconds(1)); + initialLoadTimer->setSingleShot(true); + initialLoadTimer->start(); } RuneManager::~RuneManager() { @@ -40,7 +46,17 @@ void RuneManager::setConfig(Config& config) { } } +void RuneManager::setDataDragon(DataDragon& dd) { + ui->listaaRunes->setDataDragon(dd); + ui->listClientRunes->setDataDragon(dd); +} + void RuneManager::loadRunes() { + if(initialLoadTimer) { + initialLoadTimer->deleteLater(); + initialLoadTimer = nullptr; + } + this->ui->btnRetry->setEnabled(false); QCoreApplication::processEvents(); @@ -66,6 +82,9 @@ void RuneManager::loadRunes() { const std::vector runePages = client->getAllRunePages(); ui->listClientRunes->loadRunePages(runePages); + // reload runepages - so they ids can get their names + reloadAARunes(); + // check if autosync is enabled if(config && config->getConfig().runepagesConfig.autoSync) { syncRunes(); @@ -193,3 +212,12 @@ void RuneManager::syncRunes() { ui->listaaRunes->loadRunePages(configs); } } + +void RuneManager::reloadAARunes() { + if(!config) return; + + const auto& pages = config->getConfig().runepagesConfig.runePages; + + // reload runes + ui->listaaRunes->loadRunePages(pages); +} \ No newline at end of file diff --git a/src/runepagelist.cpp b/src/runepagelist.cpp index fdf9a0f..ef6aa69 100644 --- a/src/runepagelist.cpp +++ b/src/runepagelist.cpp @@ -7,6 +7,8 @@ #include #include +#include "datadragon.h" + RunePageList::RunePageList(QWidget* parent) : QListWidget(parent), ui(new Ui::RunePageList) { ui->setupUi(this); @@ -108,12 +110,22 @@ void RunePageList::addRunepageItem(QString name, int id, const ::RunePage& rp, b QListWidgetItem* item = new QListWidgetItem(name); item->setData(RoleId, (uint) id); item->setData(RolePointer, (qulonglong) new ::RunePage(rp)); + + if(dd) { + const DataDragon::ChampData& champData = dd->getBestMatchingChamp(name.toStdString()); + if(champData.key != -1) { + QPixmap iamge = dd->getImage(champData.id); + item->setIcon(iamge); + } + } + QString tooltipStr; if(id != -1) { tooltipStr = QString("id: %0\n").arg(id); } tooltipStr += getRuneDescription(rp); item->setToolTip(tooltipStr); + item->setFlags(item->flags() | Qt::ItemIsEditable); if(isCurrent) { item->setSelected(true);