//
//     Copyright 2006 Jim Bublitz <jbublitz@nwinternet.com>
//     Earlier copyrights 1998 - 2005 Jim Bublitz and/or Phil Thompson
//     may also apply


//                 Generated by preSip
//            module kdecore  version KDE 3.5.3


// This software 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 software 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 library; see the file COPYING.
// If not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.


class KCmdLineOptions
{
%TypeHeaderCode
#include <kcmdlineargs.h>
extern char **pyArgvToC(PyObject *argvlist,int *argcp);
extern void updatePyArgv(PyObject *argvlist,int argc,char **argv);
%End


public:
    const char*          name;
    const char*          description;

%If ( KDE_3_5_3 -  )
// def is a Python keyword - use /PyName=/
//pykwd     const char*          def;
%End


};  // class KCmdLineOptions


class KCmdLineArgs
{
%TypeHeaderCode
#include <kcmdlineargs.h>
#include <qapplication.h>
%End


public:

%If ( KDE_3_2_0 -  )
    static void          init (SIP_PYLIST, const char*, const char*, const char*, const char*, bool = 0) [void (int, char**, const char*, const char*, const char*, const char*, bool = 0)];
%MethodCode
//takes _argc | (int) | _argv | (char) | _appname | (char) | programName | (char) | _description | (char) | _version | (char) | noKApp | (bool = 0)

    int argc, nargc;
    char **argv;

    // Convert the list.

    if ((argv = pyArgvToC(a0, &argc)) == NULL)
        return NULL;

    // Create it now the arguments are right.
    nargc = argc;

    Py_BEGIN_ALLOW_THREADS
    KCmdLineArgs::init (nargc,argv, a1, a2, a3, a4, a5);
    Py_END_ALLOW_THREADS

    // Now modify the original list.

    updatePyArgv (a0, argc, argv);
%End

%End

    static void          init (SIP_PYLIST, const char*, const char*, const char*, bool = 0) [void (int, char**, const char*, const char*, const char*, bool = 0)];
%MethodCode
//takes  _argv | (a Python list of strings which may be modified) | _appname | (char) | _description | (char) | _version | (char) | noKApp | (bool = False)

    int argc, nargc;
    char **argv;

    // Convert the list.

    if ((argv = pyArgvToC(a0, &argc)) == NULL)
        return NULL;

    // Create it now the arguments are right.
    nargc = argc;

    Py_BEGIN_ALLOW_THREADS
    KCmdLineArgs::init (nargc,argv, a1, a2, a3, a4);
    Py_END_ALLOW_THREADS

    // Now modify the original list.

    updatePyArgv (a0, argc, argv);
%End

    static void          init (SIP_PYLIST, const KAboutData*, bool = 0) [void (int, char**, const KAboutData*, bool = 0)];
%MethodCode
//takes  _argv | (a Python list of strings which may be modified) | about | (KAboutData) | noKApp | (bool = 0)

    int argc, nargc; //, iserr = 0;
    char **argv;

    // Convert the list.

    if ((argv = pyArgvToC (a0, &argc)) == NULL)
        return NULL;

    // Create it now the arguments are right.
    nargc = argc;

    Py_BEGIN_ALLOW_THREADS
    KCmdLineArgs::init (nargc, argv, a1, a2);
    Py_END_ALLOW_THREADS

    // Now modify the original list.

    updatePyArgv (a0, argc, argv);
%End

    static void          init (const KAboutData*);
    static void          addCmdLineOptions (SIP_PYLIST, const char* = 0, const char* = 0, const char* = 0) [void (const KCmdLineOptions*, const char* = 0, const char* = 0, const char* = 0)];
%MethodCode
//takes options  | (a Python list of tuples) | name | (char = 0) | id | (char = 0) | afterId | (char = 0)

//doc
// A Pytbon list of tuples (name, description, default) is the first parameter
// instead of a KCmdLineOptions object (KCmdLineOptions is not used);
// NULL (or None) parameters to mark the end of the list are not required
//end

    int n;

    if ((n = PyList_Size (a0)) == 0)
        return NULL;

    // opts is persistent
    KCmdLineOptions *opts;

    Py_BEGIN_ALLOW_THREADS
    opts = new KCmdLineOptions [n + 1];
    Py_END_ALLOW_THREADS

    int i, tsz;
    for (i = 0; i < n; i++)
    {
        PyObject *tuple;

        if ((tuple = PyList_GetItem (a0, i)) != NULL)
        {
            tsz = PyTuple_Size (tuple);
            PyObject *member;

            if (tsz == 0)
                goto errorExit;

            member = PyTuple_GET_ITEM (tuple, 0);
            if (PyString_Check (member))
                opts [i].name = PyString_AS_STRING (member);
            else
                goto errorExit;

            if (tsz > 1)
            {
                member = PyTuple_GET_ITEM (tuple, 1);
                if PyString_Check (member)
                    opts [i].description = PyString_AS_STRING (member);
                else
                    goto errorExit;
            }
            else
                opts [i].description = NULL;


            if (tsz > 2)
            {
                member = PyTuple_GET_ITEM (tuple, 2);
                if PyString_Check (member)
                    opts [i].def = PyString_AS_STRING (member);
                else
                    goto errorExit;
            }
            else
                opts [i].def = NULL;
        }
        else
            goto errorExit;
    }

    // mark the end of the list
    opts [n].name        = NULL;
    opts [n].description = NULL;
    opts [n].def         = NULL;

    Py_BEGIN_ALLOW_THREADS
    KCmdLineArgs::addCmdLineOptions (opts, a1, a2, a3);
    Py_END_ALLOW_THREADS

    Py_INCREF (Py_None);
    return Py_None;

errorExit:
    delete opts;
    return NULL;
%End

    static KCmdLineArgs* parsedArgs (const char* = 0);
    static QString       cwd ();
    static const char*   appName ();
    static void          usage (const char* = 0);
    static void          usage (const QString&);
    static void          enable_i18n ();
    QCString             getOption (const char*);

%If ( KDE_3_1_4 -  )
    QCStringList         getOptionList (const char*) const;
%End

    bool                 isSet (const char*);
    int                  count ();
    const char*          arg (int);
    KURL                 url (int);
    static KURL          makeURL (const char*);
    static void          setCwd (char*);
    void                 clear ();

%If ( KDE_3_2_0 -  )
    static void          reset ();
    static void          loadAppArgs (QDataStream&);

%If ( KDE_3_4_0 -  )
    static void          addTempFileOption ();
    static bool          isTempFileSet ();
%End

%End


protected:
                         KCmdLineArgs (const KCmdLineOptions*, const char*, const char*);
                         ~KCmdLineArgs ();

public:

%If (  - KDE_3_1_3 )
    QValueList<QCString> getOptionList (const char*);
%End


};  // class KCmdLineArgs

