// This is the SIP interface definition for TQStringList.
//
// Copyright (c) 2007
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyTQt.
// 
// This copy of PyTQt 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, or (at your option) any later
// version.
// 
// PyTQt is supplied 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
// PyTQt; see the file LICENSE.  If not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


%ExportedDoc
<Sect2><Title>TQStringList (TQt v2+)</Title>
<Para>
The Python <Literal>len</Literal>, <Literal>[]</Literal> (for both reading and
writing slices and individual elements), <Literal>del</Literal> (for deleting
slices and individual elements), <Literal>+</Literal>, <Literal>+=</Literal>,
<Literal>*</Literal>, <Literal>*=</Literal>, <Literal>==</Literal>,
<Literal>!=</Literal> and <Literal>in</Literal> operators are supported.
</Para>

<FuncSynopsis>
	<FuncDef>Iterator <Function>append</Function></FuncDef>
	<ParamDef>const TQString &<Parameter>x</Parameter></ParamDef>
</FuncSynopsis>
<Para>
This does not return a value.
</Para>

<FuncSynopsis>
	<FuncDef>Iterator <Function>prepend</Function></FuncDef>
	<ParamDef>const TQString &<Parameter>x</Parameter></ParamDef>
</FuncSynopsis>
<Para>
This does not return a value.
</Para>
</Sect2>
%End


class TQStringList
{
%TypeHeaderCode
#include <tqstringlist.h>
%End

public:
	TQStringList();
	TQStringList(const TQStringList &);
	TQStringList(const TQString &);

	void sort();
	static TQStringList fromStrList(const TQStrList &);
	static TQStringList split(const TQString &,const TQString &,bool = 0);
	static TQStringList split(const TQChar &,const TQString &,bool = 0);
	static TQStringList split(const TQRegExp &,const TQString &,bool = 0);
	TQString join(const TQString &) const;
	TQStringList grep(const TQString &,bool = 1) const;
	TQStringList grep(const TQRegExp &) const;

	TQStringList &gres(const TQString &,const TQString &,bool = 1);
	TQStringList &gres(const TQRegExp &,const TQString &);

	// These are actually in TQValueList, which isn't implemented so
	// pretend they are here.

	bool isEmpty() const;
	void append(const TQString &);
	void prepend(const TQString &);
	void remove(const TQString &);
	const TQString &first() const;
	const TQString &last() const;
	int findIndex(const TQString &) const;
	uint contains(const TQString &) const;
	uint count() const;
	void clear();

	int __len__();
%MethodCode
		sipRes = sipCpp -> count();
%End

	void __setitem__(int,const TQString &);
%MethodCode
		int len;

		len = sipCpp -> count();

		if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0)
			sipIsErr = 1;
		else
			(*sipCpp)[a0] = *a1;
%End

	void __setitem__(SIP_PYSLICE,const TQStringList &);
%MethodCode
		Py_ssize_t len, start, stop, step, slicelength, i;

		len = sipCpp -> count();

		if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0)
			sipIsErr = 1;
		else
		{
			int vlen = a1 -> count();

			if (vlen != slicelength)
			{
				sipBadLengthForSlice(vlen,slicelength);
				sipIsErr = 1;
			}
			else
			{
				TQStringList::ConstIterator it = a1 -> begin();

				for (i = 0; i < slicelength; ++i)
				{
					(*sipCpp)[start] = *it;
					start += step;
					++it;
				}
			}
		}
%End

	void __delitem__(int);
%MethodCode
		int len;

		len = sipCpp -> count();

		if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0)
			sipIsErr = 1;
		else
			sipCpp -> remove(sipCpp -> at(a0));
%End

	void __delitem__(SIP_PYSLICE);
%MethodCode
		Py_ssize_t len, start, stop, step, slicelength, i;

		len = sipCpp -> count();

		if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0)
			sipIsErr = 1;
		else
			for (i = 0; i < slicelength; ++i)
			{
				sipCpp -> remove(sipCpp -> at(start));
				start += step - 1;
			}
%End

	TQString operator[](int);
%MethodCode
		int len;

		len = sipCpp -> count();

		if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0)
			sipIsErr = 1;
		else
			sipRes = new TQString((*sipCpp)[a0]);
%End

	TQStringList operator[](SIP_PYSLICE slice);
%MethodCode
		Py_ssize_t len, start, stop, step, slicelength, i;

		len = sipCpp -> count();

		if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0)
			sipIsErr = 1;
		else
		{
			sipRes = new TQStringList();

			for (i = 0; i < slicelength; ++i)
			{
				(*sipRes) += (*sipCpp)[start];
				start += step;
			}
		}
%End

	int __contains__(const TQString &);
%MethodCode
		sipRes = (sipCpp -> findIndex(*a0) >= 0);
%End

	TQStringList operator+(const TQStringList &);
	TQStringList &operator+=(const TQStringList &);

	TQStringList &operator+=(const TQString &);

	TQStringList operator*(int);
%MethodCode
		sipRes = new TQStringList();

		while (a0-- > 0)
			*sipRes += *sipCpp;
%End

	TQStringList &operator*=(int);
%MethodCode
		TQStringList orig(*sipCpp);

		sipCpp -> clear();

		while (a0-- > 0)
			*sipCpp += orig;
%End

	bool operator==(const TQStringList &);
	bool operator!=(const TQStringList &);
};
