File indexing completed on 2024-04-28 05:42:11

0001 /*
0002  * Port for usage with qt-framework and development for kdesvn
0003  * Copyright (C) 2005-2009 by Rajko Albrecht (ral@alwins-world.de)
0004  * https://kde.org/applications/development/org.kde.kdesvn
0005  */
0006 /*
0007  * ====================================================================
0008  * Copyright (c) 2002-2005 The RapidSvn Group.  All rights reserved.
0009  * dev@rapidsvn.tigris.org
0010  *
0011  * This library is free software; you can redistribute it and/or
0012  * modify it under the terms of the GNU Lesser General Public
0013  * License as published by the Free Software Foundation; either
0014  * version 2.1 of the License, or (at your option) any later version.
0015  *
0016  * This library is distributed in the hope that it will be useful,
0017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0019  * Lesser General Public License for more details.
0020  *
0021  * You should have received a copy of the GNU Lesser General Public
0022  * License along with this library (in the file LGPL.txt); if not,
0023  * write to the Free Software Foundation, Inc., 51 Franklin St,
0024  * Fifth Floor, Boston, MA  02110-1301  USA
0025  *
0026  * This software consists of voluntary contributions made by many
0027  * individuals.  For exact contribution history, see the revision
0028  * history and logs, available at http://rapidsvn.tigris.org/.
0029  * ====================================================================
0030  */
0031 
0032 #ifndef SVNQT_TARGETS_H
0033 #define SVNQT_TARGETS_H
0034 
0035 #include <svnqt/svnqt_defines.h>
0036 #include <svnqt/svnqttypes.h>
0037 
0038 // apr api
0039 #include <apr_tables.h>
0040 
0041 #include <QList>
0042 #include <QtContainerFwd>
0043 
0044 class QUrl;
0045 
0046 namespace svn
0047 {
0048 // forward declarations
0049 class Pool;
0050 
0051 /**
0052  * Encapsulation for Subversion target arrays handling
0053  */
0054 class SVNQT_EXPORT Targets
0055 {
0056 public:
0057     /**
0058      * Constructor
0059      *
0060      * @param targets vector of paths
0061      */
0062     explicit Targets(const svn::Paths &targets);
0063 
0064     /**
0065      * Constructor
0066      * @param path a single paths
0067      */
0068     Targets(const svn::Path &target); // krazy:exclude=explicit
0069 
0070     /**
0071      * Constructor. Initializes list with just
0072      * one entry
0073      *
0074      * @param target
0075      */
0076     Targets(const QString &target = QString()); // krazy:exclude=explicit
0077 
0078     /**
0079      * Returns an apr array containing
0080      * char *.
0081      *
0082      * @param pool Pool used for conversion
0083      */
0084     apr_array_header_t *array(const Pool &pool) const;
0085 
0086     /**
0087      * Returns a vector of paths
0088      *
0089      * @return vector of paths
0090      */
0091     const Paths &targets() const
0092     {
0093         return m_targets;
0094     }
0095 
0096     /**
0097      * @return the number of targets
0098      */
0099     Paths::size_type size() const
0100     {
0101         return m_targets.size();
0102     }
0103 
0104     /**
0105      * operator to return the vector
0106      *
0107      * @return vector with targets
0108      */
0109     operator const Paths &() const
0110     {
0111         return m_targets;
0112     }
0113 
0114     const Path &operator[](Paths::size_type which) const
0115     {
0116         return m_targets.at(which);
0117     }
0118     /**
0119      * returns one single target.
0120      * the first in the vector, if no parameter given if there are more
0121      * than one. if there is no target or parameter > then stored pathes returns
0122      * an empty path
0123      * \param which which item we want
0124      * @return single path
0125      */
0126     const Path target(Paths::size_type which) const;
0127 
0128     /** convenience functions
0129      */
0130     static Targets fromStringList(const QStringList &paths);
0131     enum class UrlConversion { KeepUrl, PreferLocalPath };
0132 
0133     static Targets fromUrlList(const QList<QUrl> &urls, UrlConversion conversion);
0134 
0135 private:
0136     Paths m_targets;
0137 };
0138 }
0139 
0140 #endif
0141 /* -----------------------------------------------------------------
0142  * local variables:
0143  * eval: (load-file "../../rapidsvn-dev.el")
0144  * end:
0145  */