/////////////////////////////////////////////////////////////////////////////
// Name:        _sound.i
// Purpose:     SWIG interface stuff for wxSound
//
// Author:      Robin Dunn
//
// Created:     18-June-1999
// RCS-ID:      $Id$
// Copyright:   (c) 2003 by Total Control Software
// Licence:     wxWindows license
/////////////////////////////////////////////////////////////////////////////

// Not a %module


//---------------------------------------------------------------------------
%newgroup

%{
#include <wx/sound.h>
%}    

//---------------------------------------------------------------------------

enum wxSoundFlags
{
    wxSOUND_SYNC   = 0,
    wxSOUND_ASYNC  = 1,
    wxSOUND_LOOP   = 2
};



%{
#if !wxUSE_SOUND
// A C++ stub class for wxWave for platforms that don't have it.
class wxSound : public wxObject
{
public:
    wxSound() {
        wxPyBeginBlockThreads();
        PyErr_SetString(PyExc_NotImplementedError,
                        "wxSound is not available on this platform.");
        wxPyEndBlockThreads();
    }
    wxSound(const wxString&, bool) {
        wxPyBeginBlockThreads();
        PyErr_SetString(PyExc_NotImplementedError,
                        "wxSound is not available on this platform.");
        wxPyEndBlockThreads();
    }
    wxSound(int, const wxByte*) {
        wxPyBeginBlockThreads();
        PyErr_SetString(PyExc_NotImplementedError,
                        "wxSound is not available on this platform.");
        wxPyEndBlockThreads();
    }
    
    ~wxSound() {};

    bool Create(const wxString&, bool) { return false; }
    bool Create(int, const wxByte*) { return false; };
    bool IsOk() { return false; };    
    bool Play(unsigned) const { return false; }
    static bool Play(const wxString&, unsigned) { return false; }
    static void Stop() {}
};

#endif
%}



class wxSound /*: public wxObject*/
{
public:
    %nokwargs wxSound;
    wxSound();
    wxSound(const wxString& fileName, bool isResource = false);
    wxSound(int size, const wxByte* data);
    ~wxSound();

    %nokwargs Create;
    %nokwargs Play;
    
    // Create from resource or file
    bool Create(const wxString& fileName, bool isResource = false);

#ifndef __WXMAC__
    // Create from data
    bool Create(int size, const wxByte* data);
#else
    %extend {
        bool Create(int size, const wxByte* data) {
            wxPyBeginBlockThreads();
            PyErr_SetString(PyExc_NotImplementedError,
                            "Create from data  is not available on this platform.");
            wxPyEndBlockThreads();
            return False;
        }
    }
#endif
    
    bool  IsOk();
    
    // Play the sound:
    bool Play(unsigned flags = wxSOUND_ASYNC) const;

    // Plays sound from filename:
    %name(PlaySound)static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC);

#ifndef __WXMAC__
    static void Stop();
#else
    %extend {
        static void Stop() {}
    }
#endif

    %pythoncode { def __nonzero__(self): return self.IsOk() }
};




//---------------------------------------------------------------------------