diff options
Diffstat (limited to 'src/svnqt/diffoptions.cpp')
-rw-r--r-- | src/svnqt/diffoptions.cpp | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/svnqt/diffoptions.cpp b/src/svnqt/diffoptions.cpp new file mode 100644 index 0000000..7ada9c8 --- /dev/null +++ b/src/svnqt/diffoptions.cpp @@ -0,0 +1,144 @@ +/*************************************************************************** + * Copyright (C) 2007 by Rajko Albrecht [email protected] * + * http://kdesvn.alwins-world.de/ * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "diffoptions.hpp" +#include "stringarray.hpp" +#include "pool.hpp" + +#include <svn_diff.h> + +namespace svn +{ + struct DiffOptionsData + { + DiffOptions::IgnoreSpace _ignorespace; + bool _ignoreeol; + bool _showc; + + DiffOptionsData() + { + _ignorespace=DiffOptions::IgnoreSpaceNone; + _ignoreeol = _showc = false; + } + }; + + DiffOptions::DiffOptions() + :m_data(new DiffOptionsData()) + { + } + + void DiffOptions::init(const svn_diff_file_options_t*_diffopts) + { +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 4)) || (SVN_VER_MAJOR > 1) + m_data->_ignoreeol = _diffopts->ignore_eol_style; + +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 5)) || (SVN_VER_MAJOR > 1) + m_data->_showc = _diffopts->show_c_function; +#else + m_data->_showc = false; +#endif + switch (_diffopts->ignore_space) { + case svn_diff_file_ignore_space_change: + m_data->_ignorespace = IgnoreSpaceChange; + break; + case svn_diff_file_ignore_space_all: + m_data->_ignorespace = IgnoreSpaceAll; + break; + case svn_diff_file_ignore_space_none: + default: + m_data->_ignorespace = IgnoreSpaceNone; + break; + } +#else + Q_UNUSED(_diffopts); +#endif + } + + DiffOptions::DiffOptions(const QStringList&options) + :m_data(new DiffOptionsData()) + { +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 4)) || (SVN_VER_MAJOR > 1) + Pool pool; + StringArray _ar(options); + svn_diff_file_options_t * _diffopts = svn_diff_file_options_create(pool); + if (_diffopts) { + svn_error_t*error = svn_diff_file_options_parse(_diffopts,_ar.array(pool),pool); + if (error==0) { + init(_diffopts); + } + } +#else + Q_UNUSED(options) +#endif + } + + DiffOptions::DiffOptions(const svn_diff_file_options_t*options) + :m_data(new DiffOptionsData()) + { +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 4)) || (SVN_VER_MAJOR > 1) + if (options) { + init(options); + } +#else + Q_UNUSED(options) +#endif + } + + svn_diff_file_options_t*DiffOptions::options(const Pool&pool)const + { +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 4)) || (SVN_VER_MAJOR > 1) + svn_diff_file_options_t * _diffopts = svn_diff_file_options_create(pool); + _diffopts->ignore_eol_style = m_data->_ignoreeol; +#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 5)) || (SVN_VER_MAJOR > 1) + _diffopts->show_c_function = m_data->_showc; +#endif + switch (m_data->_ignorespace) { + case IgnoreSpaceChange: + _diffopts->ignore_space=svn_diff_file_ignore_space_change; + break; + case IgnoreSpaceAll: + _diffopts->ignore_space=svn_diff_file_ignore_space_all; + break; + case IgnoreSpaceNone: + default: + _diffopts->ignore_space=svn_diff_file_ignore_space_none; + break; + } + return _diffopts; +#else + Q_UNUSED(pool); + return 0; +#endif + } + + DiffOptions::DiffOptions(const DiffOptions&old) + :m_data(new DiffOptionsData()) + { + m_data->_showc = old.m_data->_showc; + m_data->_ignorespace=old.m_data->_ignorespace; + m_data->_ignoreeol=old.m_data->_ignoreeol; + } + + DiffOptions::~DiffOptions() + { + delete m_data; + m_data=0; + } +} |