X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/664e13143ee51a6b1aa1c30d1401ac04b11bdcca..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/msw/dialog.cpp diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index 1f9459d57d..b8b73d2525 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -25,6 +25,7 @@ #endif #include "wx/dialog.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/msw/wrapcdlg.h" @@ -50,64 +51,6 @@ // wxWin macros // ---------------------------------------------------------------------------- -#if wxUSE_EXTENDED_RTTI -WX_DEFINE_FLAGS( wxDialogStyle ) - -wxBEGIN_FLAGS( wxDialogStyle ) - // new style border flags, we put them first to - // use them for streaming out - wxFLAGS_MEMBER(wxBORDER_SIMPLE) - wxFLAGS_MEMBER(wxBORDER_SUNKEN) - wxFLAGS_MEMBER(wxBORDER_DOUBLE) - wxFLAGS_MEMBER(wxBORDER_RAISED) - wxFLAGS_MEMBER(wxBORDER_STATIC) - wxFLAGS_MEMBER(wxBORDER_NONE) - - // old style border flags - wxFLAGS_MEMBER(wxSIMPLE_BORDER) - wxFLAGS_MEMBER(wxSUNKEN_BORDER) - wxFLAGS_MEMBER(wxDOUBLE_BORDER) - wxFLAGS_MEMBER(wxRAISED_BORDER) - wxFLAGS_MEMBER(wxSTATIC_BORDER) - wxFLAGS_MEMBER(wxNO_BORDER) - - // standard window styles - wxFLAGS_MEMBER(wxTAB_TRAVERSAL) - wxFLAGS_MEMBER(wxCLIP_CHILDREN) - - // dialog styles - 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) -wxEND_FLAGS( wxDialogStyle ) - -IMPLEMENT_DYNAMIC_CLASS_XTI(wxDialog, wxTopLevelWindow,"wx/dialog.h") - -wxBEGIN_PROPERTIES_TABLE(wxDialog) - wxPROPERTY( Title, wxString, SetTitle, GetTitle, wxString() , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY_FLAGS( WindowStyle , wxDialogStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style -wxEND_PROPERTIES_TABLE() - -wxBEGIN_HANDLERS_TABLE(wxDialog) -wxEND_HANDLERS_TABLE() - -wxCONSTRUCTOR_6( wxDialog , wxWindow* , Parent , wxWindowID , Id , wxString , Title , wxPoint , Position , wxSize , Size , long , WindowStyle) - -#else -IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow) -#endif - // ---------------------------------------------------------------------------- // wxDialogModalData // ---------------------------------------------------------------------------- @@ -150,7 +93,9 @@ void wxDialog::Init() #if wxUSE_TOOLBAR && defined(__POCKETPC__) m_dialogToolBar = NULL; #endif +#if wxUSE_DIALOG_SIZEGRIP m_hGripper = 0; +#endif // wxUSE_DIALOG_SIZEGRIP } bool wxDialog::Create(wxWindow *parent, @@ -179,6 +124,7 @@ bool wxDialog::Create(wxWindow *parent, CreateToolBar(); #endif +#if wxUSE_DIALOG_SIZEGRIP if ( HasFlag(wxRESIZE_BORDER) ) { CreateGripper(); @@ -186,6 +132,7 @@ bool wxDialog::Create(wxWindow *parent, Connect(wxEVT_CREATE, wxWindowCreateEventHandler(wxDialog::OnWindowCreate)); } +#endif // wxUSE_DIALOG_SIZEGRIP return true; } @@ -195,35 +142,15 @@ wxDialog::~wxDialog() // this will also reenable all the other windows for a modal dialog Show(false); +#if wxUSE_DIALOG_SIZEGRIP DestroyGripper(); +#endif // wxUSE_DIALOG_SIZEGRIP } // ---------------------------------------------------------------------------- // showing the dialogs // ---------------------------------------------------------------------------- -wxWindow *wxDialog::FindSuitableParent() const -{ - // first try to use the currently active window - HWND hwndFg = ::GetForegroundWindow(); - wxWindow *parent = hwndFg ? wxFindWinFromHandle((WXHWND)hwndFg) - : NULL; - if ( !parent ) - { - // next try the main app window - parent = wxTheApp->GetTopWindow(); - } - - // finally, check if the parent we found is really suitable - if ( !parent || parent == (wxWindow *)this || !parent->IsShown() ) - { - // don't use this one - parent = NULL; - } - - return parent; -} - bool wxDialog::Show(bool show) { if ( show == IsShown() ) @@ -268,15 +195,12 @@ bool wxDialog::Show(bool show) return true; } -void wxDialog::Raise() -{ - ::SetForegroundWindow(GetHwnd()); -} - // show dialog modally int wxDialog::ShowModal() { - wxASSERT_MSG( !IsModal(), _T("ShowModal() can't be called twice") ); + WX_HOOK_MODAL_DIALOG(); + + wxASSERT_MSG( !IsModal(), wxT("ShowModal() can't be called twice") ); Show(); @@ -295,7 +219,7 @@ int wxDialog::ShowModal() void wxDialog::EndModal(int retCode) { - wxASSERT_MSG( IsModal(), _T("EndModal() called for non modal dialog") ); + wxASSERT_MSG( IsModal(), wxT("EndModal() called for non modal dialog") ); SetReturnCode(retCode); @@ -306,6 +230,8 @@ void wxDialog::EndModal(int retCode) // wxDialog gripper handling // ---------------------------------------------------------------------------- +#if wxUSE_DIALOG_SIZEGRIP + void wxDialog::SetWindowStyleFlag(long style) { wxDialogBase::SetWindowStyleFlag(style); @@ -350,7 +276,7 @@ void wxDialog::DestroyGripper() // have been called yet) wxASSERT_MSG( !IsShown() || ::GetWindow((HWND)m_hGripper, GW_HWNDNEXT) == 0, - _T("Bug in wxWidgets: gripper should be at the bottom of Z-order") ); + wxT("Bug in wxWidgets: gripper should be at the bottom of Z-order") ); ::DestroyWindow((HWND) m_hGripper); m_hGripper = 0; } @@ -358,7 +284,7 @@ void wxDialog::DestroyGripper() void wxDialog::ShowGripper(bool show) { - wxASSERT_MSG( m_hGripper, _T("shouldn't be called if we have no gripper") ); + wxASSERT_MSG( m_hGripper, wxT("shouldn't be called if we have no gripper") ); if ( show ) ResizeGripper(); @@ -368,7 +294,7 @@ void wxDialog::ShowGripper(bool show) void wxDialog::ResizeGripper() { - wxASSERT_MSG( m_hGripper, _T("shouldn't be called if we have no gripper") ); + wxASSERT_MSG( m_hGripper, wxT("shouldn't be called if we have no gripper") ); HWND hwndGripper = (HWND)m_hGripper; @@ -394,6 +320,8 @@ void wxDialog::OnWindowCreate(wxWindowCreateEvent& event) event.Skip(); } +#endif // wxUSE_DIALOG_SIZEGRIP + // ---------------------------------------------------------------------------- // wxWin event handlers // ---------------------------------------------------------------------------- @@ -408,7 +336,7 @@ bool wxDialog::DoOK() if ( EmulateButtonClickIfPresent(idOk) ) return true; - wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId()); + wxCommandEvent event(wxEVT_BUTTON, GetAffirmativeId()); event.SetEventObject(this); return HandleWindowEvent(event); @@ -475,6 +403,7 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar break; case WM_SIZE: +#if wxUSE_DIALOG_SIZEGRIP if ( m_hGripper ) { switch ( wParam ) @@ -487,8 +416,9 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar ShowGripper(true); } } +#endif // wxUSE_DIALOG_SIZEGRIP - // the Windows dialogs unfortunately are not meant to be resizeable + // the Windows dialogs unfortunately are not meant to be resizable // at all and their standard class doesn't include CS_[VH]REDRAW // styles which means that the window is not refreshed properly // after the resize and no amount of WS_CLIPCHILDREN/SIBLINGS can @@ -511,7 +441,7 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar { // set our cursor for all windows (but see below) wxCursor cursor = m_cursor; - if ( !cursor.Ok() ) + if ( !cursor.IsOk() ) cursor = wxCURSOR_ARROW; ::SetCursor(GetHcursorOf(cursor)); @@ -532,7 +462,7 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar } if ( !processed ) - rc = wxWindow::MSWWindowProc(message, wParam, lParam); + rc = wxDialogBase::MSWWindowProc(message, wParam, lParam); return rc; }