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
#include "wx/window.h"
#include "wx/msgdlg.h"
#include "wx/accel.h"
#include "wx/setup.h"
#include "wx/dc.h"
@ -99,20 +100,28 @@ static wxWindowMGL* wxGetTopLevelParent(wxWindowMGL *win)
return p;
}
#ifdef __WXDEBUG__
// Add an easy way to capture screenshots:
static void CaptureScreenshot()
// An easy way to capture screenshots:
static void wxCaptureScreenshot()
{
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;
char screenshot[128];
sprintf(screenshot, "screenshot-%03i.png", screenshot_num++);
g_displayDC->savePNGFromDC(screenshot, 0, 0,
wxString screenshot;
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->sizey());
wxMessageBox(_("Screenshot captured: ") + wxString(screenshot));
}
#endif
// ---------------------------------------------------------------------------
// MGL_WM hooks:
@ -399,6 +408,30 @@ static long wxScanToKeyCode(event_t *event, bool translate)
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)
{
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);
#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
// 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);
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
// wasn't handled yet.
// wasn't handled yet:
if ( !ret && event.m_keyCode == WXK_TAB &&
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);
}
// Finally, process special meaning keys that are usually
// a responsibility of OS or window manager:
if ( !ret )
ret = wxHandleSpecialKeys(event);
return ret;
}
}
@ -499,6 +511,7 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e)
IMPLEMENT_ABSTRACT_CLASS(wxWindowMGL, wxWindowBase)
BEGIN_EVENT_TABLE(wxWindowMGL, wxWindowBase)
EVT_IDLE(wxWindowMGL::OnIdle)
END_EVENT_TABLE()
// ===========================================================================
@ -1205,3 +1218,13 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
window_t *wnd = MGL_wmGetWindowAtPosition(g_winMng, pt.x, pt.y);
return (wxWindow*)wnd->userData;
}
// ---------------------------------------------------------------------------
// idle events processing
// ---------------------------------------------------------------------------
void wxWindowMGL::OnIdle(wxIdleEvent& WXUNUSED(event))
{
UpdateWindowUI();
}