many changes; major ones:
[wxWidgets.git] / src / common / dlgcmn.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: common/dlgcmn.cpp
3 // Purpose: common (to all ports) wxDialog functions
4 // Author: Vadim Zeitlin
5 // Modified by:
6 // Created: 28.06.99
7 // RCS-ID: $Id$
8 // Copyright: (c) Vadim Zeitlin
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 #if 0
21 #ifdef __GNUG__
22 #pragma implementation
23 #endif
24 #endif
25
26 // For compilers that support precompilation, includes "wx.h".
27 #include "wx/wxprec.h"
28
29 #ifdef __BORLANDC__
30 #pragma hdrstop
31 #endif
32
33 #ifndef WX_PRECOMP
34 #include "wx/dialog.h"
35 #include "wx/dcclient.h"
36 #include "wx/intl.h"
37 #include "wx/settings.h"
38 #include "wx/stattext.h"
39 #include "wx/sizer.h"
40 #endif
41
42 //--------------------------------------------------------------------------
43 // wxDialogBase
44 //--------------------------------------------------------------------------
45
46 wxSizer *wxDialogBase::CreateTextSizer( const wxString &message )
47 {
48 wxBoxSizer *box = new wxBoxSizer( wxVERTICAL );
49
50 // get line height for empty lines
51 int y = 0;
52 wxFont new_font( GetFont() );
53 if (!new_font.Ok()) new_font = *wxSWISS_FONT;
54 GetTextExtent( "H", (int*)NULL, &y, (int*)NULL, (int*)NULL, &new_font );
55
56 wxString line;
57 for (size_t pos = 0; pos < message.Len(); pos++)
58 {
59 if (message[pos] == T('\n'))
60 {
61 if (!line.IsEmpty())
62 {
63 wxStaticText *s1 = new wxStaticText( this, -1, line );
64 box->Add( s1 );
65 line = T("");
66 }
67 else
68 {
69 box->Add( 5, y );
70 }
71 }
72 else
73 {
74 line += message[pos];
75 }
76 }
77
78 // remaining text behind last '\n'
79 if (!line.IsEmpty())
80 {
81 wxStaticText *s2 = new wxStaticText( this, -1, line );
82 box->Add( s2 );
83 }
84
85 return box;
86 }
87
88 wxSizer *wxDialogBase::CreateButtonSizer( long flags )
89 {
90 wxBoxSizer *box = new wxBoxSizer( wxHORIZONTAL );
91
92 #if defined(__WXMSW__) || defined(__WXMAC__)
93 int margin = 6;
94 #else
95 int margin = 10;
96 #endif
97
98 wxButton *ok = (wxButton *) NULL;
99 wxButton *cancel = (wxButton *) NULL;
100 wxButton *yes = (wxButton *) NULL;
101 wxButton *no = (wxButton *) NULL;
102
103 // always show an OK button, unless only YES_NO is given
104 if ((flags & wxYES_NO) == 0) flags = flags | wxOK;
105
106 if (flags & wxYES_NO)
107 {
108 yes = new wxButton( this, wxID_YES, _("Yes") );
109 box->Add( yes, 0, wxLEFT|wxRIGHT, margin );
110 no = new wxButton( this, wxID_NO, _("No") );
111 box->Add( no, 0, wxLEFT|wxRIGHT, margin );
112 } else
113 if (flags & wxYES)
114 {
115 yes = new wxButton( this, wxID_YES, _("Yes") );
116 box->Add( yes, 0, wxLEFT|wxRIGHT, margin );
117 } else
118 if (flags & wxNO)
119 {
120 no = new wxButton( this, wxID_NO, _("No") );
121 box->Add( no, 0, wxLEFT|wxRIGHT, margin );
122 }
123
124 if (flags & wxOK)
125 {
126 ok = new wxButton( this, wxID_OK, _("OK") );
127 box->Add( ok, 0, wxLEFT|wxRIGHT, margin );
128 }
129
130 if (flags & wxFORWARD)
131 box->Add( new wxButton( this, wxID_FORWARD, _("Forward") ), 0, wxLEFT|wxRIGHT, margin );
132
133 if (flags & wxBACKWARD)
134 box->Add( new wxButton( this, wxID_BACKWARD, _("Backward") ), 0, wxLEFT|wxRIGHT, margin );
135
136 if (flags & wxSETUP)
137 box->Add( new wxButton( this, wxID_SETUP, _("Setup") ), 0, wxLEFT|wxRIGHT, margin );
138
139 if (flags & wxMORE)
140 box->Add( new wxButton( this, wxID_MORE, _("More...") ), 0, wxLEFT|wxRIGHT, margin );
141
142 if (flags & wxHELP)
143 box->Add( new wxButton( this, wxID_HELP, _("Help") ), 0, wxLEFT|wxRIGHT, margin );
144
145 if (flags & wxCANCEL)
146 {
147 cancel = new wxButton( this, wxID_CANCEL, _("Cancel") );
148 box->Add( cancel, 0, wxLEFT|wxRIGHT, margin );
149 }
150
151 if (flags & wxNO_DEFAULT)
152 {
153 if (no)
154 {
155 no->SetDefault();
156 no->SetFocus();
157 }
158 }
159 else
160 {
161 if (ok)
162 {
163 ok->SetDefault();
164 ok->SetFocus();
165 }
166 else if (yes)
167 {
168 yes->SetDefault();
169 yes->SetFocus();
170 }
171 }
172
173 return box;
174 }
175