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


//                 Generated by preSip
//            module kdeui  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.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


class KKeyChooser : QWidget
{
%TypeHeaderCode
#include <kkeydialog.h>
%End


public:

    enum ActionType
    {
        Application, 
        ApplicationGlobal, 
        Standard, 
        Global
    };

                         KKeyChooser (QWidget* /TransferThis/, KKeyChooser::ActionType = Application , bool = 1);
                         KKeyChooser (KActionCollection*, QWidget* /TransferThis/, bool = 1);
                         KKeyChooser (KAccel*, QWidget* /TransferThis/, bool = 1);
                         KKeyChooser (KGlobalAccel*, QWidget* /TransferThis/);
                         KKeyChooser (KShortcutList*, QWidget* /TransferThis/, KKeyChooser::ActionType = Application , bool = 1);
    bool                 insert (KActionCollection*);

%If ( KDE_3_1_0 -  )
    bool                 insert (KActionCollection*, const QString&);
%End

    void                 syncToConfig (const QString&, KConfigBase*, bool);
    void                 commitChanges ();
    void                 save ();

%If ( KDE_3_2_0 -  )
    static bool          checkGlobalShortcutsConflict (const KShortcut&, bool, QWidget* /Transfer/);
    static bool          checkStandardShortcutsConflict (const KShortcut&, bool, QWidget* /Transfer/);
%End


signals:
    void                 keyChange ();

public slots:
    void                 allDefault ();
    void                 setPreferFourModifierKeys (bool);

protected:
    void                 initGUI (KKeyChooser::ActionType, bool);
    bool                 insert (KAccel*);
    bool                 insert (KGlobalAccel*);
    bool                 insert (KShortcutList*);

%If ( KDE_3_1_0 -  )
    void                 buildListView (uint, const QString& = QString ::null );
%End

    void                 readGlobalKeys ();
    void                 updateButtons ();
    void                 fontChange (const QFont&);
    void                 setShortcut (const KShortcut&);
    bool                 isKeyPresent (const KShortcut&, bool = 1);

%If ( KDE_3_1_0 -  )
//ig     bool                 isKeyPresentLocally (const KShortcut&, KKeyChooserItem*, const QString&);
%End

    void                 _warning (const KKeySequence&, QString, QString);

protected slots:
    void                 slotNoKey ();
    void                 slotDefaultKey ();
    void                 slotCustomKey ();
    void                 slotListItemSelected (QListViewItem*);
    void                 capturedShortcut (const KShortcut&);

%If ( KDE_3_1_0 -  )
    void                 slotSettingsChanged (int);

%If ( KDE_3_1_2 -  )
    void                 slotListItemDoubleClicked (QListViewItem*, const QPoint&, int);
%End

%End


protected:

public:
                         KKeyChooser (KAccel*, QWidget* /TransferThis/, bool, bool, bool = 0);
                         KKeyChooser (KGlobalAccel*, QWidget* /TransferThis/, bool, bool, bool = 0);

public slots:
    void                 listSync ();

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

protected:

%If (  - KDE_3_1_0 )
    void                 buildListView (uint);
%End


};  // class KKeyChooser


class KKeyDialog : KDialogBase
{
%TypeHeaderCode
#include <kkeydialog.h>
%End


public:
                         KKeyDialog (bool = 1, QWidget* /TransferThis/ = 0, const char* = 0);
    bool                 insert (KActionCollection*);

%If ( KDE_3_1_0 -  )
    bool                 insert (KActionCollection*, const QString&);
%End

    bool                 configure (bool = 1);
    void                 commitChanges ();
    static int           configure (KActionCollection*, QWidget* /Transfer/ = 0, bool = 1);
    static int           configure (KAccel*, QWidget* /Transfer/ = 0, bool = 1);
    static int           configure (KGlobalAccel*, QWidget* /Transfer/ = 0, bool = 1);

%If ( KDE_3_1_0 -  )
    static int           configure (KActionCollection*, bool, QWidget* /Transfer/ = 0, bool = 1);
    static int           configure (KAccel*, bool, QWidget* /Transfer/ = 0, bool = 1);
    static int           configure (KGlobalAccel*, bool, QWidget* /Transfer/ = 0, bool = 1);
%End

    static int           configureKeys (KAccel*, bool = 1, QWidget* /Transfer/ = 0);
    static int           configureKeys (KGlobalAccel*, bool = 1, QWidget* /Transfer/ = 0);
    static int           configureKeys (KActionCollection*, const QString&, bool = 1, QWidget* /Transfer/ = 0);

%If ( KDE_3_1_0 -  )

private:
                         KKeyDialog (KKeyChooser::ActionType, bool = 1, QWidget* /TransferThis/ = 0, const char* = 0);
%End


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

};  // class KKeyDialog

typedef KKeyChooser KKeyChooser;


%MappedType IntDict
//converts a Python dict of QString:int
{
%TypeHeaderCode
#include <qdict.h>
#include <sipqtQString.h>
#include <sipqtQCString.h>
typedef QDict<int> IntDict;
%End

%ConvertFromTypeCode
// Convert to a Python dictionary

    if (!sipCpp)
    return PyDict_New();

    PyObject *dict;

    // Create the dictionary.

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    // Get it.

    QDict<int> qdict = *sipCpp;
    QDictIterator<int> it (qdict);

    while (it.current ())
    {
        PyObject *a0 = sipConvertFromInstance (&it.currentKey (), sipClass_QCString, sipTransferObj);
        PyObject *a1 = PyInt_FromLong ((long) it.current ());

        if ((a0 == NULL) || (a1 == NULL) || (PyDict_SetItem (dict, a0, a1) < 0))
        {
            Py_XDECREF (a0);
            Py_XDECREF (a1);
            Py_DECREF (dict);
            return NULL;
        }
    }

    return dict;
%End


%ConvertToTypeCode
    // Convert a Python dictionary to a QDict<int> on the heap.

    if (sipIsErr == NULL)
        return PyDict_Check(sipPy);

    QDict<int>* qdict = new QDict<int>;

    PyObject *key, *value;
    SIP_SSIZE_T pos = 0;
    QString *a0;
    int a1;

    while (PyDict_Next(sipPy, &pos, &key, &value))
    {
        int iserr = 0;

        a0 = (QString *) sipForceConvertTo_QString (key, &iserr);

        if ((iserr) || (!PyInt_Check (value)))
        {
            *sipIsErr = 1;
            delete qdict;
            return 0;
        }

        a1 = (int) PyInt_AS_LONG (value);

        qdict->insert (*a0, &a1);
    }

    *sipCppPtr = qdict;

    return 1;
%End
};


