File indexing completed on 2024-05-12 04:06:22
0001 /* 0002 SPDX-FileCopyrightText: 2010 Stefan Majewsky <majewsky@gmx.net> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "triggerlistview.h" 0008 #include "triggerlistview_p.h" 0009 #include <KCategoryDrawer> 0010 #include <KLocalizedString> 0011 #include <QStandardItemModel> 0012 static QString categoryToString(Palapeli::Interactor::Category category) 0013 { 0014 switch (category) 0015 { 0016 case Palapeli::Interactor::PieceInteraction: 0017 return i18n("Interaction with pieces"); 0018 case Palapeli::Interactor::TableInteraction: 0019 return i18n("Interaction with the puzzle table"); 0020 case Palapeli::Interactor::ViewportInteraction: 0021 return i18n("Interaction with the viewport"); 0022 case Palapeli::Interactor::NoCategory: default: 0023 return QString(); 0024 } 0025 } 0026 0027 Palapeli::TriggerListView::TriggerListView(const QMap<QByteArray, Palapeli::Interactor*>& interactors, Palapeli::InteractorType interactorType, QWidget* parent) 0028 : KCategorizedView(parent) 0029 , m_categoryDrawer(new KCategoryDrawer(this)) 0030 , m_baseModel(new QStandardItemModel(this)) 0031 , m_proxyModel(new Palapeli::TriggerListProxyModel(this)) 0032 , m_delegate(new Palapeli::TriggerListDelegate(this)) 0033 { 0034 //fill base model with interactors 0035 QMap<QByteArray, Palapeli::Interactor*>::const_iterator it1 = interactors.begin(), it2 = interactors.end(); 0036 for (; it1 != it2; ++it1) 0037 { 0038 //filter interactor 0039 Palapeli::Interactor* interactor = it1.value(); 0040 if (interactor->interactorType() != interactorType) 0041 continue; 0042 //create item for interactor 0043 QStandardItem* item = new QStandardItem; 0044 item->setData(interactor->description(), Qt::DisplayRole); 0045 item->setData(interactor->icon(), Qt::DecorationRole); 0046 item->setData(interactorType, Palapeli::InteractorTypeRole); 0047 item->setData(it1.key(), Palapeli::InteractorRole); 0048 item->setData(QVariant::fromValue(Palapeli::Trigger()), Palapeli::TriggerRole); 0049 item->setData(categoryToString(interactor->category()), KCategorizedSortFilterProxyModel::CategoryDisplayRole); 0050 item->setData(interactor->category(), KCategorizedSortFilterProxyModel::CategorySortRole); 0051 m_baseModel->appendRow(item); 0052 } 0053 //setup model/view 0054 m_proxyModel->setSourceModel(m_baseModel); 0055 setModel(m_proxyModel); 0056 setItemDelegate(m_delegate); 0057 connect(m_delegate, &Palapeli::TriggerListDelegate::triggerChanged, this, &TriggerListView::associationsChanged); 0058 // setCategoryDrawer(m_categoryDrawer); //FIXME: Why do I crash? 0059 } 0060 0061 Palapeli::TriggerListView::~TriggerListView() 0062 { 0063 delete m_categoryDrawer; 0064 } 0065 0066 void Palapeli::TriggerListView::getAssociations(QMap<QByteArray, Palapeli::Trigger>& associations) 0067 { 0068 for (int i = 0; i < m_baseModel->rowCount(); ++i) 0069 { 0070 QStandardItem* item = m_baseModel->item(i); 0071 const QByteArray interactor = item->data(Palapeli::InteractorRole).value<QByteArray>(); 0072 const Palapeli::Trigger trigger = item->data(Palapeli::TriggerRole).value<Palapeli::Trigger>(); 0073 if (trigger.isValid()) 0074 associations.insert(interactor, trigger); 0075 } 0076 } 0077 0078 void Palapeli::TriggerListView::setAssociations(const QMap<QByteArray, Palapeli::Trigger>& associations) 0079 { 0080 for (int i = 0; i < m_baseModel->rowCount(); ++i) 0081 { 0082 QStandardItem* item = m_baseModel->item(i); 0083 const QByteArray interactor = item->data(Palapeli::InteractorRole).value<QByteArray>(); 0084 item->setData(QVariant::fromValue(associations.value(interactor)), Palapeli::TriggerRole); 0085 } 0086 } 0087 0088 0089 // 0090 0091 #include "moc_triggerlistview.cpp" 0092 #include "moc_triggerlistview_p.cpp"