File indexing completed on 2024-05-12 05:44:27
0001 /*************************************************************************** 0002 * Copyright (C) 2008 by Rajko Albrecht ral@alwins-world.de * 0003 * https://kde.org/applications/development/org.kde.kdesvn * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 0019 ***************************************************************************/ 0020 0021 #include "svnitemnode.h" 0022 #include "settings/kdesvnsettings.h" 0023 #include "svnfrontend/maintreewidget.h" 0024 #include "svnqt/revision.h" 0025 0026 SvnItemModelNode::SvnItemModelNode(SvnItemModelNodeDir *aParentNode, SvnActions *bl, MainTreeWidget *id) 0027 : SvnItem() 0028 , _parentNode(aParentNode) 0029 , _actions(bl) 0030 , _display(id) 0031 { 0032 } 0033 0034 int SvnItemModelNode::rowNumber() const 0035 { 0036 if (!_parentNode) { 0037 return -1; 0038 } 0039 return _parentNode->childList().indexOf(const_cast<SvnItemModelNode *>(this)); 0040 } 0041 0042 bool SvnItemModelNode::NodeIsDir() const 0043 { 0044 return false; 0045 } 0046 0047 SvnItemModelNodeDir *SvnItemModelNode::parent() const 0048 { 0049 return _parentNode; 0050 } 0051 0052 QColor SvnItemModelNode::backgroundColor() const 0053 { 0054 if (Kdesvnsettings::colored_state()) { 0055 switch (m_bgColor) { 0056 case UPDATES: 0057 return Kdesvnsettings::color_need_update(); 0058 case LOCKED: 0059 return Kdesvnsettings::color_locked_item(); 0060 case ADDED: 0061 return Kdesvnsettings::color_item_added(); 0062 case DELETED: 0063 return Kdesvnsettings::color_item_deleted(); 0064 case MODIFIED: 0065 return Kdesvnsettings::color_changed_item(); 0066 case MISSING: 0067 return Kdesvnsettings::color_missed_item(); 0068 case NOTVERSIONED: 0069 return Kdesvnsettings::color_notversioned_item(); 0070 case CONFLICT: 0071 return Kdesvnsettings::color_conflicted_item(); 0072 case NEEDLOCK: 0073 return Kdesvnsettings::color_need_lock(); 0074 case NONE: 0075 break; 0076 } 0077 } 0078 return QColor(); 0079 } 0080 0081 bool SvnItemModelNode::NodeHasChilds() const 0082 { 0083 return false; 0084 } 0085 0086 /************************ 0087 * Methods from SvnItem * 0088 ************************/ 0089 QString SvnItemModelNode::getParentDir() const 0090 { 0091 if (parent()) { 0092 return parent()->fullName(); 0093 } 0094 return QString(); 0095 } 0096 0097 SvnItem *SvnItemModelNode::getParentItem() const 0098 { 0099 return _parentNode; 0100 } 0101 0102 svn::Revision SvnItemModelNode::correctPeg() const 0103 { 0104 /// @todo backlink to remote revision storage 0105 return _display->baseRevision(); 0106 } 0107 0108 void SvnItemModelNode::refreshStatus(bool children) 0109 { 0110 _display->refreshItem(this); 0111 if (!children && _parentNode) { 0112 _parentNode->refreshStatus(false); 0113 } 0114 } 0115 0116 SvnActions *SvnItemModelNode::getWrapper() const 0117 { 0118 return _actions; 0119 } 0120 0121 char SvnItemModelNode::sortChar() const 0122 { 0123 return 3; 0124 } 0125 0126 SvnItemModelNodeDir::SvnItemModelNodeDir(SvnActions *bl, MainTreeWidget *disp) 0127 : SvnItemModelNode(nullptr, bl, disp) 0128 , m_Children() 0129 { 0130 } 0131 0132 SvnItemModelNodeDir::SvnItemModelNodeDir(SvnItemModelNodeDir *_parent, SvnActions *bl, MainTreeWidget *disp) 0133 : SvnItemModelNode(_parent, bl, disp) 0134 , m_Children() 0135 { 0136 } 0137 0138 SvnItemModelNodeDir::~SvnItemModelNodeDir() 0139 { 0140 clear(); 0141 } 0142 0143 void SvnItemModelNodeDir::clear() 0144 { 0145 qDeleteAll(m_Children); 0146 m_Children.clear(); 0147 } 0148 0149 const QVector<SvnItemModelNode *> &SvnItemModelNodeDir::childList() const 0150 { 0151 return m_Children; 0152 } 0153 0154 bool SvnItemModelNodeDir::NodeIsDir() const 0155 { 0156 if (isValid()) { 0157 return isDir(); 0158 } 0159 return true; 0160 } 0161 0162 SvnItemModelNode *SvnItemModelNodeDir::child(int row) const 0163 { 0164 if (row < 0 || row >= m_Children.size()) { 0165 return nullptr; 0166 } 0167 return m_Children[row]; 0168 } 0169 0170 char SvnItemModelNodeDir::sortChar() const 0171 { 0172 return 1; 0173 } 0174 0175 SvnItemModelNode *SvnItemModelNodeDir::findPath(const QVector<QStringRef> &parts) 0176 { 0177 for (auto &child : m_Children) { 0178 if (child->shortName() == parts[0]) { 0179 if (parts.size() == 1) { 0180 return child; 0181 } else if (child->isDir()) { 0182 return static_cast<SvnItemModelNodeDir *>(child)->findPath(parts.mid(1)); 0183 } 0184 } 0185 } 0186 return nullptr; 0187 } 0188 0189 bool SvnItemModelNodeDir::contains(const QString &fullName) const 0190 { 0191 return indexOf(fullName) != -1; 0192 } 0193 0194 int SvnItemModelNodeDir::indexOf(const QString &fullPath) const 0195 { 0196 for (int i = 0; i < m_Children.size(); ++i) { 0197 if (m_Children[i]->fullName() == fullPath) { 0198 return i; 0199 } 0200 } 0201 return -1; 0202 } 0203 0204 void SvnItemModelNodeDir::refreshStatus(bool children) 0205 { 0206 SvnItemModelNode::refreshStatus(children); 0207 if (!isValid()) { 0208 return; 0209 } 0210 if (children) { 0211 for (auto &child : m_Children) { 0212 child->refreshStatus(children); 0213 } 0214 } 0215 } 0216 0217 bool SvnItemModelNodeDir::NodeHasChilds() const 0218 { 0219 return !isIgnored(); 0220 }