// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "dialog.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#pragma hdrstop
#endif
+#include "wx/dialog.h"
+
#ifndef WX_PRECOMP
- #include "wx/dialog.h"
#include "wx/utils.h"
#include "wx/frame.h"
#include "wx/app.h"
+ #include "wx/button.h"
#include "wx/settings.h"
#include "wx/intl.h"
#include "wx/log.h"
#endif
#include "wx/msw/private.h"
-#include "wx/log.h"
#include "wx/evtloop.h"
#include "wx/ptr_scpd.h"
-#if wxUSE_COMMON_DIALOGS && !defined(__WXMICROWIN__)
- #include <commdlg.h>
-#endif
+#include "wx/msw/wrapcdlg.h"
#if defined(__SMARTPHONE__) && defined(__WXWINCE__)
#include "wx/msw/wince/resources.h"
wxFLAGS_MEMBER(wxWS_EX_VALIDATE_RECURSIVELY)
wxFLAGS_MEMBER(wxSTAY_ON_TOP)
wxFLAGS_MEMBER(wxCAPTION)
+#if WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxTHICK_FRAME)
+#endif // WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxSYSTEM_MENU)
wxFLAGS_MEMBER(wxRESIZE_BORDER)
+#if WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxRESIZE_BOX)
+#endif // WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxCLOSE_BOX)
wxFLAGS_MEMBER(wxMAXIMIZE_BOX)
wxFLAGS_MEMBER(wxMINIMIZE_BOX)
wxModalEventLoop m_evtLoop;
};
-wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData);
+wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData)
// ============================================================================
// implementation
return true;
}
+#if WXWIN_COMPATIBILITY_2_6
+
// deprecated ctor
wxDialog::wxDialog(wxWindow *parent,
const wxString& title,
// nothing to do, obsolete method
}
+#endif // WXWIN_COMPATIBILITY_2_6
+
wxDialog::~wxDialog()
{
m_isBeingDeleted = true;
// showing the dialogs
// ----------------------------------------------------------------------------
+#if WXWIN_COMPATIBILITY_2_6
+
bool wxDialog::IsModalShowing() const
{
return IsModal();
}
+#endif // WXWIN_COMPATIBILITY_2_6
+
wxWindow *wxDialog::FindSuitableParent() const
{
// first try to use the currently active window
// wxWin event handlers
// ----------------------------------------------------------------------------
+bool wxDialog::EmulateButtonClickIfPresent(int id)
+{
+ wxButton *btn = wxDynamicCast(FindWindow(id), wxButton);
+
+ if ( !btn || !btn->IsEnabled() || !btn->IsShown() )
+ return false;
+
+ btn->MSWCommand(BN_CLICKED, 0 /* unused */);
+ return true;
+}
+
// Standard buttons
void wxDialog::OnOK(wxCommandEvent& WXUNUSED(event))
{
// sending the event, by calling SetAffirmativeId.
bool wxDialog::DoOK()
{
- wxButton *btn = wxDynamicCast(FindWindow(GetAffirmativeId()), wxButton);
-
- if ( btn && btn->IsEnabled() )
- {
- // If we have this button, press it
- btn->MSWCommand(BN_CLICKED, 0 /* unused */);
+ const int idOk = GetAffirmativeId();
+ if ( EmulateButtonClickIfPresent(idOk) )
return true;
- }
- else
- {
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId());
- event.SetEventObject(this);
- return GetEventHandler()->ProcessEvent(event);
- }
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId());
+ event.SetEventObject(this);
+
+ return GetEventHandler()->ProcessEvent(event);
}
-#endif
+#endif // __POCKETPC__
#if wxUSE_TOOLBAR && defined(__POCKETPC__)
// create main toolbar by calling OnCreateToolBar()
return new wxToolMenuBar(this, winid,
wxDefaultPosition, wxDefaultSize,
style, name);
-}
+}
#endif
// ---------------------------------------------------------------------------
-// dialog window proc
+// dialog Windows messages processing
// ---------------------------------------------------------------------------
+bool wxDialog::MSWProcessMessage(WXMSG* pMsg)
+{
+ const MSG * const msg = wx_reinterpret_cast(MSG *, pMsg);
+ if ( msg->message == WM_KEYDOWN && msg->wParam == VK_ESCAPE )
+ {
+ int idCancel = GetEscapeId();
+ switch ( idCancel )
+ {
+ case wxID_NONE:
+ // don't handle Esc specially at all
+ break;
+
+ case wxID_ANY:
+ // this value is special: it means translate Esc to wxID_CANCEL
+ // but if there is no such button, then fall back to wxID_OK
+ if ( EmulateButtonClickIfPresent(wxID_CANCEL) )
+ return true;
+ idCancel = wxID_OK;
+ // fall through
+
+ default:
+ // translate Esc to button press for the button with given id
+ if ( EmulateButtonClickIfPresent(idCancel) )
+ return true;
+ }
+ }
+
+ return wxDialogBase::MSWProcessMessage(pMsg);
+}
+
WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
WXLRESULT rc = 0;
return rc;
}
-