File indexing completed on 2024-05-12 16:01:34

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_model_index_converter_show_all.h"
0008 
0009 #include "kis_node_dummies_graph.h"
0010 #include "kis_dummies_facade_base.h"
0011 #include "kis_node_model.h"
0012 
0013 
0014 KisModelIndexConverterShowAll::KisModelIndexConverterShowAll(KisDummiesFacadeBase *dummiesFacade,
0015                                                              KisNodeModel *model)
0016     : m_dummiesFacade(dummiesFacade),
0017       m_model(model)
0018 {
0019 }
0020 
0021 KisNodeDummy* KisModelIndexConverterShowAll::dummyFromRow(int row, QModelIndex parent)
0022 {
0023     Q_ASSERT(parent.isValid() || !row);
0024 
0025     if(!parent.isValid()) return m_dummiesFacade->rootDummy();
0026 
0027     KisNodeDummy *parentDummy = dummyFromIndex(parent);
0028 
0029     int rowCount = parentDummy->childCount();
0030     int index = rowCount - row - 1;
0031     return parentDummy->at(index);
0032 }
0033 
0034 KisNodeDummy* KisModelIndexConverterShowAll::dummyFromIndex(QModelIndex index)
0035 {
0036     Q_ASSERT(index.isValid());
0037     Q_ASSERT(index.internalPointer());
0038     return static_cast<KisNodeDummy*>(index.internalPointer());
0039 }
0040 
0041 QModelIndex KisModelIndexConverterShowAll::indexFromDummy(KisNodeDummy *dummy)
0042 {
0043     int row = 0;
0044 
0045     KisNodeDummy *parentDummy = dummy->parent();
0046 
0047     if(parentDummy) {
0048         int rowCount = parentDummy->childCount();
0049         int index = parentDummy->indexOf(dummy);
0050         row = rowCount - index - 1;
0051     }
0052 
0053     return m_model->createIndex(row, 0, (void*)dummy);
0054 }
0055 
0056 bool KisModelIndexConverterShowAll::indexFromAddedDummy(KisNodeDummy *parentDummy,
0057                                                         int index,
0058                                                         const QString &newNodeMetaObjectType,
0059                                                         QModelIndex &parentIndex,
0060                                                         int &row)
0061 {
0062     Q_UNUSED(newNodeMetaObjectType);
0063 
0064     Q_ASSERT(parentDummy || !index);
0065 
0066     if(!parentDummy) {
0067         row = 0;
0068         parentIndex = QModelIndex();
0069     }
0070     else {
0071         int rowCount = parentDummy->childCount();
0072         row = rowCount - index;
0073         parentIndex = indexFromDummy(parentDummy);
0074     }
0075     return true;
0076 }
0077 
0078 int KisModelIndexConverterShowAll::rowCount(QModelIndex parent)
0079 {
0080     if(!parent.isValid()) return 1;
0081 
0082     KisNodeDummy *parentDummy = dummyFromIndex(parent);
0083 
0084     return parentDummy->childCount();
0085 }