]>
git.saurik.com Git - wxWidgets.git/blob - src/common/dlgcmn.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: common/dlgcmn.cpp
3 // Purpose: common (to all ports) wxDialog functions
4 // Author: Vadim Zeitlin
8 // Copyright: (c) Vadim Zeitlin
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
21 #pragma implementation "dialogbase.h"
24 // For compilers that support precompilation, includes "wx.h".
25 #include "wx/wxprec.h"
32 #include "wx/button.h"
33 #include "wx/dialog.h"
34 #include "wx/dcclient.h"
36 #include "wx/settings.h"
37 #include "wx/stattext.h"
39 #include "wx/button.h"
40 #include "wx/containr.h"
44 //--------------------------------------------------------------------------
46 //--------------------------------------------------------------------------
48 // FIXME - temporary hack in absence of wxtopLevelWindow, should be always used
49 #ifdef wxTopLevelWindowNative
50 BEGIN_EVENT_TABLE(wxDialogBase
, wxTopLevelWindow
)
51 WX_EVENT_TABLE_CONTROL_CONTAINER(wxDialogBase
)
54 WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase
)
57 void wxDialogBase::Init()
61 // the dialogs have this flag on by default to prevent the events from the
62 // dialog controls from reaching the parent frame which is usually
63 // undesirable and can lead to unexpected and hard to find bugs
64 SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS
);
66 #ifdef wxTopLevelWindowNative // FIXME - temporary hack, should be always used!
67 m_container
.SetContainerWindow(this);
71 #if wxUSE_STATTEXT && wxUSE_TEXTCTRL
73 wxSizer
*wxDialogBase::CreateTextSizer( const wxString
& message
)
75 wxBoxSizer
*box
= new wxBoxSizer( wxVERTICAL
);
77 // get line height for empty lines
79 wxFont
font( GetFont() );
82 GetTextExtent(_T("H"), (int*)NULL
, &y
, (int*)NULL
, (int*)NULL
, &font
);
85 for ( size_t pos
= 0; pos
< message
.length(); pos
++ )
87 switch ( message
[pos
] )
92 wxStaticText
*s1
= new wxStaticText( this, -1, line
);
103 // this is used as accel mnemonic prefix in the wxWindows
104 // controls but in the static messages created by
105 // CreateTextSizer() (used by wxMessageBox, for example), we
106 // don't want this special meaning, so we need to quote it
109 // fall through to add it normally too
112 line
+= message
[pos
];
116 // remaining text behind last '\n'
119 wxStaticText
*s2
= new wxStaticText( this, -1, line
);
126 #endif // wxUSE_STATTEXT && wxUSE_TEXTCTRL
130 wxSizer
*wxDialogBase::CreateButtonSizer( long flags
)
132 wxBoxSizer
*box
= new wxBoxSizer( wxHORIZONTAL
);
134 #if defined(__WXMSW__) || defined(__WXMAC__)
135 static const int margin
= 6;
137 static const int margin
= 10;
140 wxButton
*ok
= (wxButton
*) NULL
;
141 wxButton
*cancel
= (wxButton
*) NULL
;
142 wxButton
*yes
= (wxButton
*) NULL
;
143 wxButton
*no
= (wxButton
*) NULL
;
145 // always show an OK button, unless only YES_NO is given
146 if ((flags
& wxYES_NO
) == 0) flags
= flags
| wxOK
;
148 if (flags
& wxYES_NO
)
150 yes
= new wxButton( this, wxID_YES
, _("Yes"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
151 box
->Add( yes
, 0, wxLEFT
|wxRIGHT
, margin
);
152 no
= new wxButton( this, wxID_NO
, _("No") ,wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
153 box
->Add( no
, 0, wxLEFT
|wxRIGHT
, margin
);
157 yes
= new wxButton( this, wxID_YES
, _("Yes"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
158 box
->Add( yes
, 0, wxLEFT
|wxRIGHT
, margin
);
162 no
= new wxButton( this, wxID_NO
, _("No"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
163 box
->Add( no
, 0, wxLEFT
|wxRIGHT
, margin
);
168 ok
= new wxButton( this, wxID_OK
, _("OK"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
169 box
->Add( ok
, 0, wxLEFT
|wxRIGHT
, margin
);
172 if (flags
& wxFORWARD
)
173 box
->Add( new wxButton( this, wxID_FORWARD
, _("Forward"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
), 0, wxLEFT
|wxRIGHT
, margin
);
175 if (flags
& wxBACKWARD
)
176 box
->Add( new wxButton( this, wxID_BACKWARD
, _("Backward"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
), 0, wxLEFT
|wxRIGHT
, margin
);
179 box
->Add( new wxButton( this, wxID_SETUP
, _("Setup"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
), 0, wxLEFT
|wxRIGHT
, margin
);
182 box
->Add( new wxButton( this, wxID_MORE
, _("More..."),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
), 0, wxLEFT
|wxRIGHT
, margin
);
185 box
->Add( new wxButton( this, wxID_HELP
, _("Help"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
), 0, wxLEFT
|wxRIGHT
, margin
);
187 if (flags
& wxCANCEL
)
189 cancel
= new wxButton( this, wxID_CANCEL
, _("Cancel"),wxDefaultPosition
,wxDefaultSize
,wxCLIP_SIBLINGS
);
190 box
->Add( cancel
, 0, wxLEFT
|wxRIGHT
, margin
);
193 if (flags
& wxNO_DEFAULT
)
218 #endif // wxUSE_BUTTON