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 }