1. added wxUpdateUIEvent handling to wxMGL

2. added Alt-F4 and PrintScreen handling
3. removed accelerators handling (done by wxUniv)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2002-02-14 00:37:12 +00:00
parent cbe0afe09a
commit d53fc7c96d

View File

@@ -29,6 +29,7 @@
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/window.h" #include "wx/window.h"
#include "wx/msgdlg.h"
#include "wx/accel.h" #include "wx/accel.h"
#include "wx/setup.h" #include "wx/setup.h"
#include "wx/dc.h" #include "wx/dc.h"
@@ -99,20 +100,28 @@ static wxWindowMGL* wxGetTopLevelParent(wxWindowMGL *win)
return p; return p;
} }
#ifdef __WXDEBUG__ // An easy way to capture screenshots:
// Add an easy way to capture screenshots: static void wxCaptureScreenshot()
static void CaptureScreenshot()
{ {
wxBusyCursor bcur; #ifdef __DOS__
#define SCREENSHOT_FILENAME _T("sshot%03i.png")
#else
#define SCREENSHOT_FILENAME _T("screenshot-%03i.png")
#endif
static int screenshot_num = 0; static int screenshot_num = 0;
char screenshot[128]; wxString screenshot;
sprintf(screenshot, "screenshot-%03i.png", screenshot_num++);
g_displayDC->savePNGFromDC(screenshot, 0, 0, do
{
screenshot.Printf(SCREENSHOT_FILENAME, screenshot_num++);
} while ( wxFileExists(screenshot) && screenshot_num < 1000 );
g_displayDC->savePNGFromDC(screenshot.mb_str(), 0, 0,
g_displayDC->sizex(), g_displayDC->sizex(),
g_displayDC->sizey()); g_displayDC->sizey());
wxMessageBox(_("Screenshot captured: ") + wxString(screenshot));
} }
#endif
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// MGL_WM hooks: // MGL_WM hooks:
@@ -399,6 +408,30 @@ static long wxScanToKeyCode(event_t *event, bool translate)
return key; return key;
} }
static bool wxHandleSpecialKeys(wxKeyEvent& event)
{
// Add an easy way to capture screenshots:
if ( event.m_keyCode == WXK_SNAPSHOT
#ifdef __WXDEBUG__ // FIXME_MGL - remove when KB_sysReq works in MGL!
|| (event.m_keyCode == WXK_F1 &&
event.m_shiftDown && event.m_controlDown)
)
#endif
{
wxCaptureScreenshot();
return TRUE;
}
if ( event.m_keyCode == WXK_F4 && event.m_altDown &&
gs_activeFrame != NULL )
{
gs_activeFrame->Close();
return TRUE;
}
return FALSE;
}
static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
{ {
wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd); wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd);
@@ -436,35 +469,9 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
ret = win->GetEventHandler()->ProcessEvent(event); ret = win->GetEventHandler()->ProcessEvent(event);
#ifdef __WXDEBUG__
// Add an easy way to capture screenshots:
if ( event.m_keyCode == WXK_F1 &&
event.m_shiftDown && event.m_controlDown )
CaptureScreenshot();
#endif
#if wxUSE_ACCEL
if ( !ret )
{
for (wxWindowMGL *w = win; w; w = w->GetParent())
{
int command = w->GetAcceleratorTable()->GetCommand(event);
if ( command != -1 )
{
wxCommandEvent eventc(wxEVT_COMMAND_MENU_SELECTED, command);
ret = w->GetEventHandler()->ProcessEvent(eventc);
break;
}
if ( w->IsTopLevel() )
break;
}
}
#endif // wxUSE_ACCEL
// wxMSW doesn't send char events with Alt pressed // wxMSW doesn't send char events with Alt pressed
// Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x // Only send wxEVT_CHAR event if not processed yet. Thus, ALT-x
// will only be sent if it is not in an accelerator table. // will only be sent if it is not in an accelerator table:
event2.m_keyCode = wxScanToKeyCode(e, FALSE); event2.m_keyCode = wxScanToKeyCode(e, FALSE);
if ( !ret && event2.m_keyCode != 0 ) if ( !ret && event2.m_keyCode != 0 )
{ {
@@ -473,7 +480,7 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
} }
// Synthetize navigation key event, but do it only if the TAB key // Synthetize navigation key event, but do it only if the TAB key
// wasn't handled yet. // wasn't handled yet:
if ( !ret && event.m_keyCode == WXK_TAB && if ( !ret && event.m_keyCode == WXK_TAB &&
win->GetParent() && win->GetParent()->HasFlag(wxTAB_TRAVERSAL) ) win->GetParent() && win->GetParent()->HasFlag(wxTAB_TRAVERSAL) )
{ {
@@ -487,6 +494,11 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
ret = win->GetParent()->GetEventHandler()->ProcessEvent(navEvent); ret = win->GetParent()->GetEventHandler()->ProcessEvent(navEvent);
} }
// Finally, process special meaning keys that are usually
// a responsibility of OS or window manager:
if ( !ret )
ret = wxHandleSpecialKeys(event);
return ret; return ret;
} }
} }
@@ -499,6 +511,7 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
IMPLEMENT_ABSTRACT_CLASS(wxWindowMGL, wxWindowBase) IMPLEMENT_ABSTRACT_CLASS(wxWindowMGL, wxWindowBase)
BEGIN_EVENT_TABLE(wxWindowMGL, wxWindowBase) BEGIN_EVENT_TABLE(wxWindowMGL, wxWindowBase)
EVT_IDLE(wxWindowMGL::OnIdle)
END_EVENT_TABLE() END_EVENT_TABLE()
// =========================================================================== // ===========================================================================
@@ -1205,3 +1218,13 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
window_t *wnd = MGL_wmGetWindowAtPosition(g_winMng, pt.x, pt.y); window_t *wnd = MGL_wmGetWindowAtPosition(g_winMng, pt.x, pt.y);
return (wxWindow*)wnd->userData; return (wxWindow*)wnd->userData;
} }
// ---------------------------------------------------------------------------
// idle events processing
// ---------------------------------------------------------------------------
void wxWindowMGL::OnIdle(wxIdleEvent& WXUNUSED(event))
{
UpdateWindowUI();
}