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


//                 Generated by preSip
//            module tdecore  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 TDEApplication : TQApplication, TDEInstance
{
%TypeHeaderCode
#include <tdeapplication.h>
#include <tdecmdlineargs.h>
extern char **pyArgvToC(PyObject *argvlist,int *argcp);
extern void updatePyArgv(PyObject *argvlist,int argc,char **argv);
%End


public:

    enum CaptionLayout
    {
        CaptionAppLast, 
        CaptionAppFirst, 
        CaptionNoApp
    };

                         TDEApplication (bool = 1, bool = 1);

%If ( KDE_3_3_0 -  )
//ig                          TDEApplication (Display*, TQt::HANDLE = 0, TQt::HANDLE = 0, bool = 1);
%End

//ig                          TDEApplication (Display*, int&, char**, const TQCString&, bool = 1, bool = 1);
                         TDEApplication (SIP_PYLIST, TQCString&, bool = 1, bool = 1) [(int&, char**, const TQCString&, bool = 1, bool = 1)];
%MethodCode
//takes argv | (a Python list of strings) | rAppName | (Python string) | allowStyles | (bool = 1)  | GUIenabled | (bool = 1)

        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

        // The following two lines simulate the actual ctor call
        // which is commented out below
        TDECmdLineArgs::init (nargc, argv, (char *)"unknown", (char *)"KDE Application", NULL, false);
        sipCpp = new sipTDEApplication((bool)a1,(bool)a2);

        // This method calls TDECmdLineArgs::initIgnore, which is a private method
//        sipCpp = new sipTDEApplication (nargc,argv, qc, a1, a2);

        Py_END_ALLOW_THREADS

        // Now modify the original list.

        updatePyArgv(a0, argc, argv);
%End

    static void          addCmdLineOptions ();
    static TDEApplication* kApplication ();
    TDEConfig*             sessionConfig ();
    bool                 isRestored () const;
    void                 disableSessionManagement ();

%If ( KDE_3_2_0 -  )
    void                 enableSessionManagement ();
%End


    enum ShutdownConfirm
    {
        ShutdownConfirmDefault, 
        ShutdownConfirmNo, 
        ShutdownConfirmYes
    };


    enum ShutdownType
    {
        ShutdownTypeDefault, 
        ShutdownTypeNone, 
        ShutdownTypeReboot, 
        ShutdownTypeHalt
    };


    enum ShutdownMode
    {
        ShutdownModeDefault, 
        ShutdownModeSchedule, 
        ShutdownModeTryNow, 
        ShutdownModeForceNow, 
        ShutdownModeInteractive
    };

    bool                 requestShutDown (TDEApplication::ShutdownConfirm = ShutdownConfirmDefault , TDEApplication::ShutdownType = ShutdownTypeDefault , TDEApplication::ShutdownMode = ShutdownModeDefault );
    void                 propagateSessionManager ();
    void                 commitData (TQSessionManager&);
    void                 saveState (TQSessionManager&);

%If ( KDE_3_1_1 -  )
    bool                 sessionSaving () const;
%End

    static DCOPClient*   dcopClient ();
    static void          disableAutoDcopRegistration ();
    TQPixmap              icon () const;
    TQString              iconName () const;
    TQPixmap              miniIcon () const;
    TQString              miniIconName () const;
    void                 setTopWidget (TQWidget*);

%If ( KDE_3_2_0 -  )
    void                 invokeHelp (const TQString&, const TQString&, const TQCString&) const;
%End

    void                 invokeHelp (const TQString& = TQString ::null , const TQString& = TQString ::null ) const;
    void                 invokeHTMLHelp (const TQString&, const TQString& = TQString ::null ) const;

%If ( KDE_3_2_0 -  )
    void                 invokeMailer (const TQString&, const TQString&, const TQCString&);
%End

    void                 invokeMailer (const TQString&, const TQString&);

%If ( KDE_3_3_0 -  )
    void                 invokeMailer (const KURL&, const TQCString&, bool);
%End


%If ( KDE_3_2_0 -  )
    void                 invokeMailer (const KURL&, const TQCString&);
%End

    void                 invokeMailer (const KURL&);

%If ( KDE_3_2_0 -  )
    void                 invokeMailer (const TQString&, const TQString&, const TQString&, const TQString&, const TQString&, const TQString&, const TQStringList&, const TQCString&);
%End

    void                 invokeMailer (const TQString&, const TQString&, const TQString&, const TQString&, const TQString&, const TQString& = TQString ::null , const TQStringList& = TQStringList ());

public slots:

%If ( KDE_3_2_0 -  )
    void                 invokeBrowser (const TQString&, const TQCString&);
%End

    void                 invokeBrowser (const TQString&);

%If ( KDE_3_2_0 -  )
    void                 cut ();
    void                 copy ();
    void                 paste ();
    void                 clear ();
    void                 selectAll ();
%End


public:
    static TQCString      launcher ();
    static int           startServiceByName (const TQString&, const TQString&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);
    static int           startServiceByName (const TQString&, const TQStringList&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);
    static int           startServiceByDesktopPath (const TQString&, const TQString&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);
    static int           startServiceByDesktopPath (const TQString&, const TQStringList&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);
    static int           startServiceByDesktopName (const TQString&, const TQString&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);
    static int           startServiceByDesktopName (const TQString&, const TQStringList&, TQString* /Out/, TQCString* /Out/, int*, const TQCString& = TQCString ("" ), bool = 0);

%If ( KDE_3_2_0 -  )
    static int           tdeinitExec (const TQString&, const TQStringList&, TQString* /Out/, int*, TQCString&);
%End

    static int           tdeinitExec (const TQString&, const TQStringList&, TQString* /Out/, int*);

%If ( KDE_3_2_0 -  )
    static int           tdeinitExecWait (const TQString&, const TQStringList&, TQString* /Out/, int*, TQCString&);
%End

    static int           tdeinitExecWait (const TQString&, const TQStringList&, TQString* /Out/, int*);
    TQString              caption () const;
//ig     TDEStyle*              kstyle () const;
    TQString              makeStdCaption (const TQString&, bool = 1, bool = 0) const;
    TQString              tempSaveName (const TQString&) const;
    TQString              checkRecoverFile (const TQString&, bool&) const;
    Display*             getDisplay ();
    void                 enableStyles ();
    void                 disableStyles ();
    void                 installX11EventFilter (TQWidget*);

%If ( KDE_3_2_0 -  )
    void                 removeX11EventFilter (const TQWidget*);
%End

    static int           random ();
    static TQString       randomString (int);
    void                 addKipcEventMask (int);
    void                 removeKipcEventMask (int);
    TQCString             startupId () const;
    void                 setStartupId (const TQCString&);

%If ( KDE_3_2_0 -  )
    void                 updateUserTimestamp (ulong = 0);

%If ( KDE_3_2_3 -  )
    ulong                userTimestamp () const;

%If ( KDE_3_3_0 -  )
    void                 updateRemoteUserTimestamp (const TQCString&, ulong = 0);
%End

%End

%End

    TQString              geometryArgument () const;
    void                 installKDEPropertyMap ();
    bool                 authorize (const TQString&);
    bool                 authorizeTDEAction (const char*);

%If ( KDE_3_1_0 -  )
    bool                 authorizeURLAction (const TQString&, const KURL&, const KURL&);

%If ( KDE_3_2_0 -  )
    void                 allowURLAction (const TQString&, const KURL&, const KURL&);
    bool                 authorizeControlModule (const TQString&);
    TQStringList          authorizeControlModules (const TQStringList&);

%If ( KDE_3_4_0 -  )
    static ButtonState   keyboardMouseState ();
%End

%End


    enum 
    {
        ShiftModifier, 
        LockModifier, 
        ControlModifier, 
        Modifier1, 
        Modifier2, 
        Modifier3, 
        Modifier4, 
        Modifier5
    };

    static uint          keyboardModifiers ();

    enum 
    {
        Button1Pressed, 
        Button2Pressed, 
        Button3Pressed, 
        Button4Pressed, 
        Button5Pressed
    };

    static uint          mouseState ();
%End


public slots:
    void                 ref ();
    void                 deref ();

protected:
                         TDEApplication (bool, bool, TDEInstance*);

%If ( KDE_3_3_0 -  )
//ig                          TDEApplication (Display*, TQt::HANDLE, TQt::HANDLE, bool, TDEInstance*);
%End

//ig     bool                 x11EventFilter (XEvent*);

%If ( KDE_3_2_0 -  )
    void                 invokeEditSlot (const char*);
%End


public:
    bool                 notify (TQObject*, TQEvent*);

%If ( KDE_3_2_0 -  )
//ig     int                  xErrhandler (Display*, void*);
//ig     int                  xioErrhandler (Display*);
%End


%If ( KDE_3_0_1 -  )
//ig     void                 iceIOErrorHandler (_IceConn*);
%End

    bool                 loadedByKdeinit;
    static void          startKdeinit ();

    enum SettingsCategory
    {
        SETTINGS_MOUSE, 
        SETTINGS_COMPLETION, 
        SETTINGS_PATHS, 
        SETTINGS_POPUPMENU, 
        SETTINGS_QT, 
        SETTINGS_SHORTCUTS
    };


%If ( KDE_3_1_0 -  )
    static TQPalette      createApplicationPalette ();
    static TQPalette      createApplicationPalette (TDEConfig*, int);

%If ( KDE_3_2_0 -  )
    static void          installSigpipeHandler ();
    static bool          guiEnabled ();
%End

%End


signals:
    void                 tdedisplayPaletteChanged ();
    void                 tdedisplayStyleChanged ();
    void                 tdedisplayFontChanged ();
    void                 appearanceChanged ();
    void                 toolbarAppearanceChanged (int);
    void                 backgroundChanged (int);
    void                 settingsChanged (int);
    void                 iconChanged (int);
    void                 kipcMessage (int, int);
    void                 saveYourself ();
    void                 shutDown ();

private:
                         TDEApplication (const TDEApplication&);

protected:
//igx     virtual void         virtual_hook (int, void*);

public:

%If (  - KDE_3_2_0 )
    int                  xioErrhandler ();
%End


};  // class TDEApplication


class KSessionManaged
{
%TypeHeaderCode
#include <tdeapplication.h>
%End


public:
                         KSessionManaged ();
    virtual bool         saveState (TQSessionManager&);
    virtual bool         commitData (TQSessionManager&);

protected:
//igx     virtual void         virtual_hook (int, void*);

};  // class KSessionManaged

typedef ulong Atom;
//ig typedef void Display;
//ig bool                 checkAccess (const TQString&, int);


%ModuleCode
#include <string.h>

// Convert a Python argv list to a conventional C argc count and argv array.
char **pyArgvToC(PyObject *argvlist,int *argcp)
{
    int argc;
    char **argv;

    argc = PyList_Size(argvlist);

    // Allocate space for two copies of the argument pointers, plus the
    // terminating NULL.
    if ((argv = (char **)sipMalloc(2 * (argc + 1) * sizeof (char *))) == NULL)
        return NULL;

    // Convert the list.
    for (int a = 0; a < argc; ++a)
    {
        char *arg;

        // Get the argument and allocate memory for it.
        if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL ||
            (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL)
            return NULL;

        // Copy the argument and save a pointer to it.
        strcpy(argv[a],arg);
        argv[a + argc + 1] = argv[a];
    }

    argv[argc + argc + 1] = argv[argc] = NULL;

    *argcp = argc;

    return argv;
}


// Remove arguments from the Python argv list that have been removed from the
// C argv array.
void updatePyArgv(PyObject *argvlist,int argc,char **argv)
{
    for (int a = 0, na = 0; a < argc; ++a)
    {
        // See if it was removed.
        if (argv[na] == argv[a + argc + 1])
            ++na;
        else
            PyList_SetSlice(argvlist,na,na + 1,NULL);
    }
}
%End
