]> git.saurik.com Git - wxWidgets.git/blob - src/palmos/msgdlg.cpp
Make room for the focus ring to be visible on Mac.
[wxWidgets.git] / src / palmos / msgdlg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/palmos/msgdlg.cpp
3 // Purpose: wxMessageDialog
4 // Author: William Osborne - minimal working wxPalmOS port
5 // Modified by:
6 // Created: 10/13/04
7 // RCS-ID: $Id$
8 // Copyright: (c) William Osborne
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #ifndef WX_PRECOMP
20 #include "wx/app.h"
21 #include "wx/utils.h"
22 #include "wx/dialog.h"
23 #include "wx/msgdlg.h"
24 #endif
25
26 #include <Loader.h>
27 #include <Form.h>
28
29 IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
30
31 wxMessageDialog::wxMessageDialog(wxWindow *parent,
32 const wxString& message,
33 const wxString& caption,
34 long style,
35 const wxPoint& WXUNUSED(pos))
36 {
37 m_caption = caption;
38 m_message = message;
39 m_parent = parent;
40 SetMessageDialogStyle(style);
41 }
42
43 int wxMessageDialog::ShowModal()
44 {
45 int AlertID=1000;
46 int Result=0;
47 int wxResult=wxID_OK;
48 const long style = GetMessageDialogStyle();
49
50 // Handle to the currently running application database
51 DmOpenRef AppDB;
52 SysGetModuleDatabase(SysGetRefNum(), NULL, &AppDB);
53
54 // Translate wx styles into Palm OS styles
55 if (style & wxYES_NO)
56 {
57 if (style & wxCANCEL)
58 AlertID=1300; // Yes No Cancel
59 else
60 AlertID=1200; // Yes No
61 }
62 if (style & wxOK)
63 {
64 if (style & wxCANCEL)
65 AlertID=1100; // Ok Cancel
66 else
67 AlertID=1000; // Ok
68 }
69
70 // Add the icon styles
71 if (style & wxICON_EXCLAMATION)
72 AlertID=AlertID+0; // Warning
73 else if (style & wxICON_HAND)
74 AlertID=AlertID+1; // Error
75 else if (style & wxICON_INFORMATION)
76 AlertID=AlertID+2; // Information
77 else if (style & wxICON_QUESTION)
78 AlertID=AlertID+3; // Confirmation
79
80 // The Palm OS Dialog API does not support custom titles in a dialog box.
81 // So we have to set the title by manipulating the resource.
82
83 // Get the alert resource
84 char *AlertPtr;
85 MemHandle AlertHandle;
86 AlertHandle=DmGetResource(AppDB,'Talt',AlertID);
87
88 AlertPtr=(char *)MemHandleLock(AlertHandle);
89 AlertPtr+=8;
90
91 // Clear out any old title. This must be done with a static array of chars
92 // because using MemSet is not supported on resources and could result in
93 // crashes or unpredictable behaviour.
94 char ClearTitle[25]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
95 MemMove(AlertPtr,&ClearTitle,25);
96
97 // Get the title length and make sure it is not too long
98 int TitleLength=m_caption.length();
99 if(TitleLength>25)
100 TitleLength=25;
101
102 // Center the title in the window
103 int BufferLength=(25-TitleLength)/2;
104 AlertPtr+=BufferLength;
105
106 // Copy the title
107 MemMove(AlertPtr,m_caption.c_str(),TitleLength);
108
109 // Release the resource
110 MemHandleUnlock(AlertHandle);
111 DmReleaseResource(AlertHandle);
112
113 // Display the dialog
114 Result=FrmCustomAlert(AppDB,AlertID,m_message.c_str(),"","");
115
116 // Convert the Palm OS result to wxResult
117 if(AlertID<1100)
118 {
119 // Ok
120 wxResult=wxID_OK;
121 }
122 else if(AlertID<1200)
123 {
124 // Ok Cancel
125 if(Result==0)
126 wxResult=wxID_OK;
127 else
128 wxResult=wxID_CANCEL;
129 }
130 else if(AlertID<1300)
131 {
132 // Yes No
133 if(Result==0)
134 wxResult=wxID_YES;
135 else
136 wxResult=wxID_NO;
137 }
138 else
139 {
140 // Yes No Cancel
141 if(Result==0)
142 wxResult=wxID_YES;
143 else if(Result==1)
144 wxResult=wxID_NO;
145 else
146 wxResult=wxID_CANCEL;
147 }
148
149 return wxResult;
150 }