///////////////////////////////////////////////////////////////////////////// // Name: msgdlg.cpp // Purpose: wxMessageDialog // Author: William Osborne // Modified by: // Created: 10/13/04 // RCS-ID: $Id: // Copyright: (c) William Osborne // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "msgdlg.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/app.h" #include "wx/defs.h" #include "wx/utils.h" #include "wx/dialog.h" #include "wx/msgdlg.h" #endif IMPLEMENT_CLASS(wxMessageDialog, wxDialog) wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption, long style, const wxPoint& WXUNUSED(pos)) { #ifdef __WXDEBUG__ // check for common programming errors if ( (style & wxID_OK) == wxID_OK ) { // programmer probably confused wxID_OK with wxOK. Correct one is wxOK. wxFAIL_MSG( _T("wxMessageBox: Did you mean wxOK (and not wxID_OK)?") ); } #endif // __WXDEBUG__ m_caption = caption; m_message = message; m_dialogStyle = style; m_parent = parent; } int wxMessageDialog::ShowModal() { int AlertID=1000; int Result=0; int wxResult=wxID_OK; // Handle to the currently running application database DmOpenRef AppDB; SysGetModuleDatabase(SysGetRefNum(), NULL, &AppDB); // Translate wx styles into Palm OS styles if (m_dialogStyle & wxYES_NO) { if (m_dialogStyle & wxCANCEL) AlertID=1300; // Yes No Cancel else AlertID=1200; // Yes No } if (m_dialogStyle & wxOK) { if (m_dialogStyle & wxCANCEL) AlertID=1100; // Ok Cancel else AlertID=1000; // Ok } // Add the icon styles if (m_dialogStyle & wxICON_EXCLAMATION) AlertID=AlertID+0; // Warning else if (m_dialogStyle & wxICON_HAND) AlertID=AlertID+1; // Error else if (m_dialogStyle & wxICON_INFORMATION) AlertID=AlertID+2; // Information else if (m_dialogStyle & wxICON_QUESTION) AlertID=AlertID+3; // Confirmation // The Palm OS Dialog API does not support custom titles in a dialog box. // So we have to set the title by manipulating the resource. // Get the alert resource char *AlertPtr; MemHandle AlertHandle; AlertHandle=DmGetResource(AppDB,'Talt',AlertID); AlertPtr=(char *)MemHandleLock(AlertHandle); AlertPtr+=8; // Clear out any old title. This must be done with a static array of chars // because using MemSet is not supported on resources and could result in // crashes or unpredictable behaviour. char ClearTitle[25]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}; MemMove(AlertPtr,&ClearTitle,25); // Get the title length and make sure it is not too long int TitleLength=m_caption.length(); if(TitleLength>25) TitleLength=25; // Center the title in the window int BufferLength=(25-TitleLength)/2; AlertPtr+=BufferLength; // Copy the title MemMove(AlertPtr,m_caption.c_str(),TitleLength); // Release the resource MemHandleUnlock(AlertHandle); DmReleaseResource(AlertHandle); // Display the dialog Result=FrmCustomAlert(AppDB,AlertID,m_message.c_str(),"",""); // Convert the Palm OS result to wxResult if(AlertID<1100) { // Ok wxResult=wxID_OK; } else if(AlertID<1200) { // Ok Cancel if(Result==0) wxResult=wxID_OK; else wxResult=wxID_CANCEL; } else if(AlertID<1300) { // Yes No if(Result==0) wxResult=wxID_YES; else wxResult=wxID_NO; } else { // Yes No Cancel if(Result==0) wxResult=wxID_YES; else if(Result==1) wxResult=wxID_NO; else wxResult=wxID_CANCEL; } return wxResult; }