#include "itemstore.h" #include #include #include "train.h" #include "../trainjs.h" ItemStore::ItemStore(QObject *parent): QObject(parent) { } void ItemStore::addItem(std::shared_ptr item) { if(!item) { qWarning()<<"invalid item"; return; } bool mached = false; for(unsigned i = 0; i < items_.size(); i++ ) if(*items_[i] == *item) mached = true; if(!mached) { items_.push_back(std::shared_ptr(item)); if(dynamic_cast(item.get())) { std::vector> joysticks = TrainJs::getJsDevices(); for(auto joystick: joysticks) { if(!joystick->itemIsSet()) { joystick->setItem(item); connect(joystick.get(), &TrainJs::reqNewItem, this, &ItemStore::jsReqNewItem); break; } } } itemAdded(std::weak_ptr(items_.back())); } qDebug()<<"Got item: "<id()<<" matched: "<> joysticks = TrainJs::getJsDevices(); for(auto joystick: joysticks) { if(joystick->getWantsNewItem()) { std::shared_ptr oldItem = joystick->getItem().lock(); for(size_t i = 0; i < items_.size(); ++i) { if(!oldItem || *items_[i] == *oldItem) { if(i+1 < items_.size()) joystick->setItem(items_[i+1]); else joystick->setItem(items_[0]); break; } } } } } void ItemStore::addItems(const std::vector>& itemIn) { for(unsigned j = 0; j < itemIn.size(); j++) addItem(itemIn[j]); } void ItemStore::removeItem(const ItemData& item) { for(unsigned j = 0; j < items_.size(); j++) { if(item == *items_[j]) { items_.erase(items_.begin()+j); --j; } } } void ItemStore::clear() { for(size_t i = 0; i < items_.size(); ++i) itemDeleted(*items_[i]); items_.clear(); } void ItemStore::itemStateChanged(const ItemData& item) { for(unsigned i = 0; i < items_.size(); i++ ) { if(items_[i]->operator==(item)) { if(items_[i]->getValue() != item.getValue())items_[i]->informValue(item.getValue()); } } }