/*************************/
/* Menu " CONFIRMATION " */
/* fonction Get_Message	 */
/* test demande ESC 	 */
/*************************/

#include "fctsys.h"
#include "common.h"

enum id_dialog {
    ID_TIMOUT = 1500
};

/* Classe d'affichage de messages, identique a wxMessageDialog,
 *  mais pouvant etre effacee au bout d'un time out donne
 */
class WinEDA_MessageDialog : public wxMessageDialog
{
private:
    int     m_LifeTime;
    wxTimer m_Timer;

public:
    WinEDA_MessageDialog( wxWindow * parent, const wxString &msg,
                          const wxString &title, int style, int lifetime );
    ~WinEDA_MessageDialog() { };

    void OnTimeOut( wxTimerEvent& event );

    DECLARE_EVENT_TABLE()
};

BEGIN_EVENT_TABLE( WinEDA_MessageDialog, wxMessageDialog )
    EVT_TIMER( ID_TIMOUT, WinEDA_MessageDialog::OnTimeOut )
END_EVENT_TABLE()

/**********************************************************************************/
WinEDA_MessageDialog::WinEDA_MessageDialog( wxWindow* parent, const wxString& msg,
                                            const wxString& title, int style, int lifetime ) :
    wxMessageDialog( parent, msg, title, style )
/**********************************************************************************/
{
    m_LifeTime = lifetime;
    m_Timer.SetOwner( this, ID_TIMOUT );
    if( m_LifeTime > 0 )
        m_Timer.Start( 100 * m_LifeTime, wxTIMER_ONE_SHOT ); // m_LifeTime = duree en 0.1 secondes
}


/********************************************************/
void WinEDA_MessageDialog::OnTimeOut( wxTimerEvent& event )
/********************************************************/
{
    m_Timer.Stop();
    EndModal( wxID_YES );   // Does not work, I do not know why (this function is correctly called after time out)
}


/*****************************************************************************/
void DisplayError( wxWindow* parent, const wxString& text, int displaytime )
/*****************************************************************************/

/*  Affiche un Message d'Erreur ou d'avertissement.
 *  si warn > 0 le dialogue disparait apres displaytime * 0.1 secondes
 */
{
    wxMessageDialog* dialog;

    if( displaytime > 0 )
        dialog = new WinEDA_MessageDialog( parent, text, _( "Warning" ),
                                           wxOK | wxICON_INFORMATION,
                                           displaytime );
    else
        dialog = new WinEDA_MessageDialog( parent, text, _( "Error" ),
                                           wxOK | wxICON_ERROR, 0 );

    dialog->ShowModal();
    dialog->Destroy();
}


/**************************************************************************/
void DisplayInfoMessage( wxWindow* parent, const wxString& text, int displaytime )
/**************************************************************************/

/* Affiche un Message d'information.
 */

{
    wxMessageDialog* dialog;

    dialog = new WinEDA_MessageDialog( parent, text, _( "Info:" ),
                                       wxOK | wxICON_INFORMATION, displaytime );

    dialog->ShowModal();
    dialog->Destroy();
}


/**************************************************/
bool IsOK( wxWindow* parent, const wxString& text )
/**************************************************/
{
    int ii;

    ii = wxMessageBox( text, _( "Confirmation" ),
                       wxYES_NO | wxCENTRE | wxICON_HAND, parent );
    if( ii == wxYES )
        return TRUE;
    return FALSE;
}


/***********************************************************************/
int Get_Message( const wxString& title,           // The question
                 const wxString& frame_caption,   // The frame caption
                 wxString& buffer,                // String input/return buffer
                 wxWindow* frame )
/***********************************************************************/

/* Get a text from user
 *  titre = titre a afficher
 *  buffer : text enter by user
 *  leading and trailing spaces are removed
 *      if buffer != "" buffer is displayed
 *      return:
 *          0 if OK
 *          != 0 if ESCAPE
 */
{
    wxString message;

    message = wxGetTextFromUser( title, frame_caption,
                                 buffer, frame );
    if( !message.IsEmpty() )
    {
        message.Trim( FALSE );      // Remove blanks at beginning
        message.Trim( TRUE );       // Remove blanks at end
        buffer = message;
        return 0;
    }

    return 1;
}
