1. wxAppBase class appers, wxApp in wxGTK and wxMSW modified accordingly
(wxMotif not yet, but this change shouldn't break it) 2. GetStdIcon() small fixes 3. #pragma warning removed from dynlib.cpp git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
308
include/wx/app.h
308
include/wx/app.h
@@ -1,98 +1,298 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: app.h
|
||||
// Purpose: wxApp inclusion
|
||||
// Purpose: wxAppBase class and macros used for declaration of wxApp
|
||||
// derived class in the user code
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows licence
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_APP_H_BASE_
|
||||
#define _WX_APP_H_BASE_
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface "appbase.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// typedefs
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifdef __WXMSW__
|
||||
class WXDLLEXPORT wxApp;
|
||||
typedef wxApp* (*wxAppInitializerFunction) (void);
|
||||
class WXDLLEXPORT wxApp;
|
||||
typedef wxApp* (*wxAppInitializerFunction)();
|
||||
#else
|
||||
// returning wxApp* won't work with gcc
|
||||
#include "wx/object.h"
|
||||
|
||||
typedef wxObject* (*wxAppInitializerFunction)();
|
||||
#endif
|
||||
|
||||
#include "wx/object.h"
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifndef __WXMSW__
|
||||
typedef wxObject* (*wxAppInitializerFunction) (void); // returning wxApp* won't work with gcc
|
||||
#endif
|
||||
static const int wxPRINT_WINDOWS = 1;
|
||||
static const int wxPRINT_POSTSCRIPT = 2;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// the common part of wxApp implementations for all platforms
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxAppBase : public wxEvtHandler
|
||||
{
|
||||
public:
|
||||
// the virtual functions which may/must be overridden in the derived class
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
// called during the program initialization, returning FALSE from here
|
||||
// prevents the program from continuing - it's a good place to create
|
||||
// the top level program window and return TRUE.
|
||||
//
|
||||
// Override: always.
|
||||
virtual bool OnInit() { return FALSE; };
|
||||
|
||||
// a platform-dependent version of OnInit(): the code here is likely to
|
||||
// depend on the toolkit. default version does nothing.
|
||||
//
|
||||
// Override: rarely.
|
||||
virtual bool OnInitGui() { return TRUE; }
|
||||
|
||||
// called to start program execution - the default version just enters
|
||||
// the main GUI loop in which events are received and processed until
|
||||
// the last window is not deleted (if GetExitOnFrameDelete) or
|
||||
// ExitMainLoop() is called.
|
||||
//
|
||||
// Override: rarely.
|
||||
virtual int OnRun() { return MainLoop(); };
|
||||
|
||||
// called after the main loop termination. This is a good place for
|
||||
// cleaning up (it may be too late in dtor) and is also useful if you
|
||||
// want to return some non-default exit code - this is just the return
|
||||
// value of this method.
|
||||
//
|
||||
// Override: often.
|
||||
virtual int OnExit() { return 0; }
|
||||
|
||||
// called when a fatal exception occurs, this function should take care
|
||||
// not to do anything which might provoke a nested exception! It may be
|
||||
// overridden if you wish to react somehow in non-default way (core
|
||||
// dump under Unix, application crash under Windows) to fatal program
|
||||
// errors, however extreme care should be taken if you don't want this
|
||||
// function to crash.
|
||||
//
|
||||
// Override: rarely.
|
||||
virtual void OnFatalException() { }
|
||||
|
||||
// the worker functions - usually not used directly by the user code
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
// execute the main GUI loop, the function returns when the loop ends
|
||||
virtual int MainLoop() = 0;
|
||||
|
||||
// exit the main GUI loop during the next iteration (i.e. it does not
|
||||
// stop the program immediately!)
|
||||
virtual void ExitMainLoop() = 0;
|
||||
|
||||
// returns TRUE if the program is initialized
|
||||
virtual bool Initialized() = 0;
|
||||
|
||||
// returns TRUE if there are unprocessed events in the event queue
|
||||
virtual bool Pending() = 0;
|
||||
|
||||
// process the first event in the event queue (blocks until an event
|
||||
// apperas if there are none currently)
|
||||
virtual void Dispatch() = 0;
|
||||
|
||||
// application info: name, description, vendor
|
||||
// -------------------------------------------
|
||||
|
||||
// NB: all these should be set by the application itself, there are no
|
||||
// reasonable default except for the application name which is taken to
|
||||
// be argv[0]
|
||||
|
||||
// set/get the application name
|
||||
wxString GetAppName() const
|
||||
{
|
||||
if ( !m_appName )
|
||||
return m_className;
|
||||
else
|
||||
return m_appName;
|
||||
}
|
||||
void SetAppName(const wxString& name) { m_appName = name; }
|
||||
|
||||
// set/get the app class name
|
||||
wxString GetClassName() const { return m_className; }
|
||||
void SetClassName(const wxString& name) { m_className = name; }
|
||||
|
||||
// set/get the vendor name
|
||||
const wxString& GetVendorName() const { return m_vendorName; }
|
||||
void SetVendorName(const wxString& name) { m_vendorName = name; }
|
||||
|
||||
// top level window functions
|
||||
// --------------------------
|
||||
|
||||
// set the "main" top level window
|
||||
void SetTopWindow(wxWindow *win) { m_topWindow = win; }
|
||||
|
||||
// return the "main" top level window (if it hadn't been set previously
|
||||
// with SetTopWindow(), will return just some top level window and, if
|
||||
// there are none, will return NULL)
|
||||
wxWindow *GetTopWindow() const
|
||||
{
|
||||
if (m_topWindow)
|
||||
return m_topWindow;
|
||||
else if (wxTopLevelWindows.GetCount() > 0)
|
||||
return wxTopLevelWindows.GetFirst()->GetData();
|
||||
else
|
||||
return (wxWindow *)NULL;
|
||||
}
|
||||
|
||||
// control the exit behaviour: by default, the program will exit the
|
||||
// main loop (and so, usually, terminate) when the last top-level
|
||||
// program window is deleted. Beware that if you disabel this (with
|
||||
// SetExitOnFrameDelete(FALSE)), you'll have to call ExitMainLoop()
|
||||
// explicitly from somewhere.
|
||||
void SetExitOnFrameDelete(bool flag) { m_exitOnFrameDelete = flag; }
|
||||
bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
|
||||
|
||||
// miscellaneous customization functions
|
||||
// -------------------------------------
|
||||
|
||||
#if wxUSE_LOG
|
||||
// override this function to create default log target of arbitrary
|
||||
// user-defined class (default implementation creates a wxLogGui
|
||||
// object) - this log object is used by default by all wxLogXXX()
|
||||
// functions.
|
||||
virtual wxLog *CreateLogTarget() { return new wxLogGui; }
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
|
||||
// get the standard icon used by wxWin dialogs - this allows the user
|
||||
// to customize the standard dialogs. The 'which' parameter is one of
|
||||
// wxICON_XXX values
|
||||
virtual wxIcon GetStdIcon(int which) const = 0;
|
||||
|
||||
// VZ: what does this do exactly?
|
||||
void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; }
|
||||
bool GetWantDebugOutput() const { return m_wantDebugOutput; }
|
||||
|
||||
// set/get printing mode: see wxPRINT_XXX constants.
|
||||
//
|
||||
// default behaviour is the normal one for Unix: always use PostScript
|
||||
// printing.
|
||||
virtual void SetPrintMode(int WXUNUSED(mode)) { }
|
||||
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
|
||||
|
||||
// implementation only from now on
|
||||
// -------------------------------
|
||||
|
||||
// helpers for dynamic wxApp construction
|
||||
static void SetInitializerFunction(wxAppInitializerFunction fn)
|
||||
{ m_appInitFn = fn; }
|
||||
static wxAppInitializerFunction GetInitializerFunction()
|
||||
{ return m_appInitFn; }
|
||||
|
||||
// access to the command line arguments
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
//private:
|
||||
protected:
|
||||
// function used for dynamic wxApp creation
|
||||
static wxAppInitializerFunction m_appInitFn;
|
||||
|
||||
// application info (must be set from the user code)
|
||||
wxString m_vendorName, // vendor name (ACME Inc)
|
||||
m_appName, // app name
|
||||
m_className; // class name
|
||||
|
||||
// if TRUE, exit the main loop when the last top level window is deleted
|
||||
bool m_exitOnFrameDelete;
|
||||
|
||||
// TRUE if the application wants to get debug output
|
||||
bool m_wantDebugOutput;
|
||||
|
||||
// the main top level window - may be NULL
|
||||
wxWindow *m_topWindow;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// now include the declaration of the real class
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if defined(__WXMSW__)
|
||||
#include "wx/msw/app.h"
|
||||
#include "wx/msw/app.h"
|
||||
#elif defined(__WXMOTIF__)
|
||||
#include "wx/motif/app.h"
|
||||
#include "wx/motif/app.h"
|
||||
#elif defined(__WXQT__)
|
||||
#include "wx/qt/app.h"
|
||||
#include "wx/qt/app.h"
|
||||
#elif defined(__WXGTK__)
|
||||
#include "wx/gtk/app.h"
|
||||
#include "wx/gtk/app.h"
|
||||
#elif defined(__WXMAC__)
|
||||
#include "wx/mac/app.h"
|
||||
#include "wx/mac/app.h"
|
||||
#elif defined(__WXSTUBS__)
|
||||
#include "wx/stubs/app.h"
|
||||
#include "wx/stubs/app.h"
|
||||
#endif
|
||||
|
||||
// Having a global instance of this class allows
|
||||
// wxApp to be aware of the app creator function.
|
||||
// wxApp can then call this function to create a new
|
||||
// app object. Convoluted, but necessary.
|
||||
// ----------------------------------------------------------------------------
|
||||
// macros for dynamic creation of the application object
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Having a global instance of this class allows wxApp to be aware of the app
|
||||
// creator function. wxApp can then call this function to create a new app
|
||||
// object. Convoluted, but necessary.
|
||||
|
||||
class WXDLLEXPORT wxAppInitializer
|
||||
{
|
||||
public:
|
||||
wxAppInitializer(wxAppInitializerFunction fn)
|
||||
{
|
||||
wxApp::SetInitializerFunction(fn);
|
||||
}
|
||||
wxAppInitializer(wxAppInitializerFunction fn)
|
||||
{ wxApp::SetInitializerFunction(fn); }
|
||||
};
|
||||
|
||||
// Here's a macro you can use if your compiler
|
||||
// really, really wants main() to be in your main program
|
||||
// (e.g. hello.cpp).
|
||||
// Now IMPLEMENT_APP should add this code if required.
|
||||
// Here's a macro you can use if your compiler really, really wants main() to
|
||||
// be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this
|
||||
// code if required.
|
||||
|
||||
#if defined(__AIX__) || defined(__HPUX__)
|
||||
#define IMPLEMENT_WXWIN_MAIN \
|
||||
extern int wxEntry( int argc, char *argv[] ); \
|
||||
int main(int argc, char *argv[]) { return wxEntry(argc, argv); }
|
||||
|
||||
#define IMPLEMENT_WXWIN_MAIN \
|
||||
extern int wxEntry( int argc, char *argv[] ); \
|
||||
int main(int argc, char *argv[]) { return wxEntry(argc, argv); }
|
||||
#elif defined(__WXMSW__) && defined(WXUSINGDLL)
|
||||
// NT defines APIENTRY, 3.x not
|
||||
#if !defined(WXAPIENTRY)
|
||||
#ifdef __WATCOMC__
|
||||
#define WXAPIENTRY PASCAL
|
||||
#else
|
||||
#define WXAPIENTRY FAR PASCAL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// NT defines APIENTRY, 3.x not
|
||||
#if !defined(WXAPIENTRY)
|
||||
# ifdef __WATCOMC__
|
||||
# define WXAPIENTRY PASCAL
|
||||
# else
|
||||
# define WXAPIENTRY FAR PASCAL
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define IMPLEMENT_WXWIN_MAIN \
|
||||
int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\
|
||||
LPSTR m_lpCmdLine, int nCmdShow )\
|
||||
{\
|
||||
return wxEntry((WXHINSTANCE) hInstance, (WXHINSTANCE) hPrevInstance,\
|
||||
m_lpCmdLine, nCmdShow);\
|
||||
}
|
||||
#define IMPLEMENT_WXWIN_MAIN \
|
||||
int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\
|
||||
LPSTR m_lpCmdLine, int nCmdShow )\
|
||||
{\
|
||||
return wxEntry((WXHINSTANCE) hInstance, \
|
||||
(WXHINSTANCE) hPrevInstance,\
|
||||
m_lpCmdLine, nCmdShow);\
|
||||
}
|
||||
|
||||
#else
|
||||
#define IMPLEMENT_WXWIN_MAIN
|
||||
#define IMPLEMENT_WXWIN_MAIN
|
||||
#endif
|
||||
|
||||
// use this macro exactly once, the argument is the name of the wxApp-derived
|
||||
// class which is the class of your application
|
||||
#define IMPLEMENT_APP(appname) \
|
||||
wxApp *wxCreateApp(void) { return new appname; } \
|
||||
wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \
|
||||
appname& wxGetApp(void) { return *(appname *)wxTheApp; } \
|
||||
IMPLEMENT_WXWIN_MAIN
|
||||
|
||||
#define DECLARE_APP(appname) \
|
||||
extern appname& wxGetApp(void) ;
|
||||
wxApp *wxCreateApp() { return new appname; } \
|
||||
wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \
|
||||
appname& wxGetApp() { return *(appname *)wxTheApp; } \
|
||||
IMPLEMENT_WXWIN_MAIN
|
||||
|
||||
#define DECLARE_APP(appname) extern appname& wxGetApp();
|
||||
|
||||
#endif
|
||||
// _WX_APP_H_BASE_
|
||||
|
@@ -50,72 +50,34 @@ bool wxYield(void);
|
||||
// wxApp
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxApp: public wxEvtHandler
|
||||
class wxApp: public wxAppBase
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
|
||||
public:
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
|
||||
public:
|
||||
wxApp();
|
||||
~wxApp();
|
||||
|
||||
static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; }
|
||||
static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; }
|
||||
|
||||
/* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube).
|
||||
* under wxMSW, OnInitGui() does nothing by default. when overriding this method,
|
||||
* the code in it is likely to be platform dependent, otherwise use OnInit(). */
|
||||
/* override for altering the way wxGTK intializes the GUI
|
||||
* (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
|
||||
* default. when overriding this method, the code in it is likely to be
|
||||
* platform dependent, otherwise use OnInit(). */
|
||||
virtual bool OnInitGui();
|
||||
|
||||
/* override to create top level frame, display splash screen etc. */
|
||||
virtual bool OnInit() { return FALSE; }
|
||||
|
||||
virtual int OnRun() { return MainLoop(); }
|
||||
virtual int OnExit() { return 0; }
|
||||
|
||||
wxWindow *GetTopWindow();
|
||||
void SetTopWindow( wxWindow *win );
|
||||
|
||||
// override base class (pure) virtuals
|
||||
virtual int MainLoop();
|
||||
void ExitMainLoop();
|
||||
bool Initialized();
|
||||
virtual void ExitMainLoop();
|
||||
virtual bool Initialized();
|
||||
virtual bool Pending();
|
||||
virtual void Dispatch();
|
||||
|
||||
/** Returns the standard icons for the msg dialogs, implemented in
|
||||
src/generic/msgdlgg.cpp and src/gtk/app.cpp. */
|
||||
virtual wxIcon GetStdIcon(int which) const;
|
||||
inline void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; }
|
||||
inline bool GetWantDebugOutput() { return m_wantDebugOutput; }
|
||||
|
||||
// implementation only from now on
|
||||
void OnIdle( wxIdleEvent &event );
|
||||
bool SendIdleEvents();
|
||||
bool SendIdleEvents( wxWindow* win );
|
||||
|
||||
inline wxString GetAppName() const
|
||||
{ if (m_appName != "") return m_appName; else return m_className; }
|
||||
inline void SetAppName( const wxString& name ) { m_appName = name; }
|
||||
|
||||
inline wxString GetClassName() const { return m_className; }
|
||||
inline void SetClassName( const wxString& name ) { m_className = name; }
|
||||
|
||||
const wxString& GetVendorName() const { return m_vendorName; }
|
||||
void SetVendorName( const wxString& name ) { m_vendorName = name; }
|
||||
|
||||
inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; }
|
||||
inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
|
||||
|
||||
void SetPrintMode( int WXUNUSED(mode) ) {}
|
||||
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
|
||||
|
||||
#if wxUSE_LOG
|
||||
/* override this function to create default log target of arbitrary
|
||||
* user-defined classv (default implementation creates a wxLogGui object) */
|
||||
virtual wxLog *CreateLogTarget();
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
// implementation
|
||||
|
||||
static bool Initialize();
|
||||
static bool InitialzeVisual();
|
||||
static void CleanUp();
|
||||
@@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler
|
||||
#endif
|
||||
void DeletePendingObjects();
|
||||
|
||||
/// This can be used to suppress the generation of Idle events.
|
||||
inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
|
||||
inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
|
||||
|
||||
// This can be used to suppress the generation of Idle events.
|
||||
void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
|
||||
bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
|
||||
|
||||
bool m_initialized;
|
||||
bool m_exitOnFrameDelete;
|
||||
bool m_wantDebugOutput;
|
||||
wxWindow *m_topWindow;
|
||||
|
||||
|
||||
gint m_idleTag;
|
||||
#if wxUSE_THREADS
|
||||
gint m_wakeUpTimerTag;
|
||||
#endif
|
||||
unsigned char *m_colorCube;
|
||||
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
wxString m_vendorName;
|
||||
wxString m_appName;
|
||||
wxString m_className;
|
||||
|
||||
static wxAppInitializerFunction m_appInitFn;
|
||||
private:
|
||||
private:
|
||||
/// Set to TRUE while we are in wxYield().
|
||||
bool m_suppressIdleEvents;
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
#endif // __GTKAPPH__
|
||||
|
@@ -50,72 +50,34 @@ bool wxYield(void);
|
||||
// wxApp
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxApp: public wxEvtHandler
|
||||
class wxApp: public wxAppBase
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
|
||||
public:
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
|
||||
public:
|
||||
wxApp();
|
||||
~wxApp();
|
||||
|
||||
static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; }
|
||||
static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; }
|
||||
|
||||
/* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube).
|
||||
* under wxMSW, OnInitGui() does nothing by default. when overriding this method,
|
||||
* the code in it is likely to be platform dependent, otherwise use OnInit(). */
|
||||
/* override for altering the way wxGTK intializes the GUI
|
||||
* (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
|
||||
* default. when overriding this method, the code in it is likely to be
|
||||
* platform dependent, otherwise use OnInit(). */
|
||||
virtual bool OnInitGui();
|
||||
|
||||
/* override to create top level frame, display splash screen etc. */
|
||||
virtual bool OnInit() { return FALSE; }
|
||||
|
||||
virtual int OnRun() { return MainLoop(); }
|
||||
virtual int OnExit() { return 0; }
|
||||
|
||||
wxWindow *GetTopWindow();
|
||||
void SetTopWindow( wxWindow *win );
|
||||
|
||||
// override base class (pure) virtuals
|
||||
virtual int MainLoop();
|
||||
void ExitMainLoop();
|
||||
bool Initialized();
|
||||
virtual void ExitMainLoop();
|
||||
virtual bool Initialized();
|
||||
virtual bool Pending();
|
||||
virtual void Dispatch();
|
||||
|
||||
/** Returns the standard icons for the msg dialogs, implemented in
|
||||
src/generic/msgdlgg.cpp and src/gtk/app.cpp. */
|
||||
virtual wxIcon GetStdIcon(int which) const;
|
||||
inline void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; }
|
||||
inline bool GetWantDebugOutput() { return m_wantDebugOutput; }
|
||||
|
||||
// implementation only from now on
|
||||
void OnIdle( wxIdleEvent &event );
|
||||
bool SendIdleEvents();
|
||||
bool SendIdleEvents( wxWindow* win );
|
||||
|
||||
inline wxString GetAppName() const
|
||||
{ if (m_appName != "") return m_appName; else return m_className; }
|
||||
inline void SetAppName( const wxString& name ) { m_appName = name; }
|
||||
|
||||
inline wxString GetClassName() const { return m_className; }
|
||||
inline void SetClassName( const wxString& name ) { m_className = name; }
|
||||
|
||||
const wxString& GetVendorName() const { return m_vendorName; }
|
||||
void SetVendorName( const wxString& name ) { m_vendorName = name; }
|
||||
|
||||
inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; }
|
||||
inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
|
||||
|
||||
void SetPrintMode( int WXUNUSED(mode) ) {}
|
||||
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
|
||||
|
||||
#if wxUSE_LOG
|
||||
/* override this function to create default log target of arbitrary
|
||||
* user-defined classv (default implementation creates a wxLogGui object) */
|
||||
virtual wxLog *CreateLogTarget();
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
// implementation
|
||||
|
||||
static bool Initialize();
|
||||
static bool InitialzeVisual();
|
||||
static void CleanUp();
|
||||
@@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler
|
||||
#endif
|
||||
void DeletePendingObjects();
|
||||
|
||||
/// This can be used to suppress the generation of Idle events.
|
||||
inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
|
||||
inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
|
||||
|
||||
// This can be used to suppress the generation of Idle events.
|
||||
void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
|
||||
bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
|
||||
|
||||
bool m_initialized;
|
||||
bool m_exitOnFrameDelete;
|
||||
bool m_wantDebugOutput;
|
||||
wxWindow *m_topWindow;
|
||||
|
||||
|
||||
gint m_idleTag;
|
||||
#if wxUSE_THREADS
|
||||
gint m_wakeUpTimerTag;
|
||||
#endif
|
||||
unsigned char *m_colorCube;
|
||||
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
wxString m_vendorName;
|
||||
wxString m_appName;
|
||||
wxString m_className;
|
||||
|
||||
static wxAppInitializerFunction m_appInitFn;
|
||||
private:
|
||||
private:
|
||||
/// Set to TRUE while we are in wxYield().
|
||||
bool m_suppressIdleEvents;
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
#endif // __GTKAPPH__
|
||||
|
@@ -27,9 +27,6 @@ class WXDLLEXPORT wxApp ;
|
||||
class WXDLLEXPORT wxKeyEvent;
|
||||
class WXDLLEXPORT wxLog;
|
||||
|
||||
static const int wxPRINT_WINDOWS = 1;
|
||||
static const int wxPRINT_POSTSCRIPT = 2;
|
||||
|
||||
WXDLLEXPORT_DATA(extern wxApp*) wxTheApp;
|
||||
|
||||
// Force an exit from main loop
|
||||
@@ -40,125 +37,74 @@ bool WXDLLEXPORT wxYield();
|
||||
|
||||
// Represents the application. Derive OnInit and declare
|
||||
// a new App object to start application
|
||||
class WXDLLEXPORT wxApp: public wxEvtHandler
|
||||
class WXDLLEXPORT wxApp : public wxAppBase
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
wxApp();
|
||||
~wxApp();
|
||||
|
||||
static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; }
|
||||
static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; }
|
||||
|
||||
virtual int MainLoop();
|
||||
void ExitMainLoop();
|
||||
bool Initialized();
|
||||
virtual bool Pending() ;
|
||||
virtual void Dispatch() ;
|
||||
|
||||
void OnIdle(wxIdleEvent& event);
|
||||
void OnEndSession(wxCloseEvent& event);
|
||||
void OnQueryEndSession(wxCloseEvent& event);
|
||||
|
||||
// Generic
|
||||
virtual bool OnInit() { return FALSE; };
|
||||
|
||||
// No specific tasks to do here.
|
||||
virtual bool OnInitGui() { return TRUE; }
|
||||
|
||||
// Called to set off the main loop
|
||||
virtual int OnRun() { return MainLoop(); };
|
||||
virtual int OnExit() { return 0; }
|
||||
/** Returns the standard icons for the msg dialogs, implemented in
|
||||
src/generic/msgdlgg.cpp and src/gtk/app.cpp. */
|
||||
virtual wxIcon GetStdIcon(int which) const;
|
||||
|
||||
// called when a fatal exception occurs, this function should take care not
|
||||
// to do anything which might provoke a nested exception!
|
||||
virtual void OnFatalException() { }
|
||||
|
||||
void SetPrintMode(int mode) { m_printMode = mode; }
|
||||
int GetPrintMode() const { return m_printMode; }
|
||||
|
||||
void SetExitOnFrameDelete(bool flag) { m_exitOnFrameDelete = flag; }
|
||||
bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
|
||||
|
||||
const wxString& GetAppName() const {
|
||||
if (m_appName != _T(""))
|
||||
return m_appName;
|
||||
else return m_className;
|
||||
}
|
||||
|
||||
void SetAppName(const wxString& name) { m_appName = name; };
|
||||
wxString GetClassName() const { return m_className; }
|
||||
void SetClassName(const wxString& name) { m_className = name; }
|
||||
|
||||
void SetVendorName(const wxString& vendorName) { m_vendorName = vendorName; }
|
||||
const wxString& GetVendorName() const { return m_vendorName; }
|
||||
|
||||
wxWindow *GetTopWindow() const ;
|
||||
void SetTopWindow(wxWindow *win) { m_topWindow = win; }
|
||||
|
||||
void SetWantDebugOutput(bool flag) { m_wantDebugOutput = flag; }
|
||||
bool GetWantDebugOutput() { return m_wantDebugOutput; }
|
||||
|
||||
// Send idle event to all top-level windows.
|
||||
// Returns TRUE if more idle time is requested.
|
||||
bool SendIdleEvents();
|
||||
|
||||
// Send idle event to window and all subwindows
|
||||
// Returns TRUE if more idle time is requested.
|
||||
bool SendIdleEvents(wxWindow* win);
|
||||
|
||||
void SetAuto3D(bool flag) { m_auto3D = flag; }
|
||||
bool GetAuto3D() const { return m_auto3D; }
|
||||
|
||||
// Creates a log object
|
||||
virtual wxLog* CreateLogTarget();
|
||||
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||
|
||||
public:
|
||||
int argc;
|
||||
wxChar ** argv;
|
||||
wxApp();
|
||||
virtual ~wxApp();
|
||||
|
||||
// override base class (pure) virtuals
|
||||
virtual int MainLoop();
|
||||
virtual void ExitMainLoop();
|
||||
virtual bool Initialized();
|
||||
virtual bool Pending() ;
|
||||
virtual void Dispatch() ;
|
||||
|
||||
virtual wxIcon GetStdIcon(int which) const;
|
||||
|
||||
virtual void SetPrintMode(int mode) { m_printMode = mode; }
|
||||
virtual int GetPrintMode() const { return m_printMode; }
|
||||
|
||||
// implementation only
|
||||
void OnIdle(wxIdleEvent& event);
|
||||
void OnEndSession(wxCloseEvent& event);
|
||||
void OnQueryEndSession(wxCloseEvent& event);
|
||||
|
||||
// Send idle event to all top-level windows.
|
||||
// Returns TRUE if more idle time is requested.
|
||||
bool SendIdleEvents();
|
||||
|
||||
// Send idle event to window and all subwindows
|
||||
// Returns TRUE if more idle time is requested.
|
||||
bool SendIdleEvents(wxWindow* win);
|
||||
|
||||
void SetAuto3D(bool flag) { m_auto3D = flag; }
|
||||
bool GetAuto3D() const { return m_auto3D; }
|
||||
|
||||
protected:
|
||||
bool m_wantDebugOutput ;
|
||||
wxString m_className;
|
||||
wxString m_appName,
|
||||
m_vendorName;
|
||||
wxWindow * m_topWindow;
|
||||
bool m_exitOnFrameDelete;
|
||||
bool m_showOnInit;
|
||||
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
|
||||
bool m_auto3D ; // Always use 3D controls, except
|
||||
// where overriden
|
||||
static wxAppInitializerFunction m_appInitFn;
|
||||
bool m_showOnInit;
|
||||
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
|
||||
bool m_auto3D ; // Always use 3D controls, except where overriden
|
||||
|
||||
/* Windows-specific wxApp definitions */
|
||||
/* Windows-specific wxApp definitions */
|
||||
|
||||
public:
|
||||
|
||||
// Implementation
|
||||
static bool Initialize();
|
||||
static void CleanUp();
|
||||
// Implementation
|
||||
static bool Initialize();
|
||||
static void CleanUp();
|
||||
|
||||
static bool RegisterWindowClasses();
|
||||
// Convert Windows to argc, argv style
|
||||
void ConvertToStandardCommandArgs(char* p);
|
||||
virtual bool DoMessage();
|
||||
virtual bool ProcessMessage(WXMSG* pMsg);
|
||||
void DeletePendingObjects();
|
||||
bool ProcessIdle();
|
||||
static bool RegisterWindowClasses();
|
||||
// Convert Windows to argc, argv style
|
||||
void ConvertToStandardCommandArgs(char* p);
|
||||
virtual bool DoMessage();
|
||||
virtual bool ProcessMessage(WXMSG* pMsg);
|
||||
void DeletePendingObjects();
|
||||
bool ProcessIdle();
|
||||
#if wxUSE_THREADS
|
||||
void ProcessPendingEvents();
|
||||
void ProcessPendingEvents();
|
||||
#endif
|
||||
int GetComCtl32Version() const;
|
||||
int GetComCtl32Version() const;
|
||||
|
||||
public:
|
||||
int m_nCmdShow;
|
||||
int m_nCmdShow;
|
||||
|
||||
protected:
|
||||
bool m_keepGoing ;
|
||||
bool m_keepGoing ;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
#if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL))
|
||||
|
@@ -176,11 +176,12 @@ void *wxLibrary::GetSymbol(const wxString& symbname)
|
||||
wxDllType
|
||||
wxDllLoader::GetProgramHandle(void)
|
||||
{
|
||||
#ifdef __WXGTK__
|
||||
return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
|
||||
#ifdef __UNIX__
|
||||
return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
|
||||
#else
|
||||
#pragma warning "Not implemented, please fix!"
|
||||
return 0;
|
||||
wxFAIL_MSG(_("This method is not implemented under Windows"));
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -45,8 +45,6 @@
|
||||
// icons
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
BEGIN_EVENT_TABLE(wxGenericMessageDialog, wxDialog)
|
||||
EVT_BUTTON(wxID_YES, wxGenericMessageDialog::OnYes)
|
||||
@@ -57,46 +55,6 @@ END_EVENT_TABLE()
|
||||
IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog)
|
||||
#endif
|
||||
|
||||
#ifdef _WXGTK__
|
||||
# include "wx/gtk/info.xpm"
|
||||
# include "wx/gtk/error.xpm"
|
||||
# include "wx/gtk/question.xpm"
|
||||
# include "wx/gtk/warning.xpm"
|
||||
#else
|
||||
// MSW icons are in the ressources, for all other platforms - in XPM files
|
||||
# ifndef __WXMSW__
|
||||
# include "wx/generic/info.xpm"
|
||||
# include "wx/generic/question.xpm"
|
||||
# include "wx/generic/warning.xpm"
|
||||
# include "wx/generic/error.xpm"
|
||||
# endif // __WXMSW__
|
||||
#endif
|
||||
|
||||
wxIcon
|
||||
wxApp::GetStdIcon(int which) const
|
||||
{
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon(info_xpm);
|
||||
break;
|
||||
case wxICON_HAND:
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon(question_xpm);
|
||||
break;
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon(warning_xpm);
|
||||
break;
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent,
|
||||
const wxString& message,
|
||||
const wxString& caption,
|
||||
|
140
src/gtk/app.cpp
140
src/gtk/app.cpp
@@ -146,7 +146,7 @@ bool wxYield()
|
||||
might have been changed (it also will update other things set from
|
||||
OnUpdateUI() which is a nice (and desired) side effect) */
|
||||
while (wxTheApp->ProcessIdle()) { }
|
||||
|
||||
|
||||
#if 0
|
||||
for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst();
|
||||
node;
|
||||
@@ -175,24 +175,24 @@ bool wxYield()
|
||||
while (gtk_events_pending())
|
||||
gtk_main_iteration();
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
{
|
||||
if (!wxTheApp) return TRUE;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* when getting called from GDK's idle handler we
|
||||
are no longer within GDK's grab on the GUI
|
||||
thread so we must lock it here ourselves */
|
||||
GDK_THREADS_ENTER ();
|
||||
#endif
|
||||
|
||||
|
||||
/* sent idle event to all who request them */
|
||||
while (wxTheApp->ProcessIdle()) { }
|
||||
|
||||
|
||||
/* we don't want any more idle events until the next event is
|
||||
sent to wxGTK */
|
||||
gtk_idle_remove( wxTheApp->m_idleTag );
|
||||
@@ -204,7 +204,7 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
once each time after the event queue has been completely
|
||||
emptied */
|
||||
g_isIdle = TRUE;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* release lock again */
|
||||
GDK_THREADS_LEAVE ();
|
||||
@@ -221,7 +221,7 @@ void wxapp_install_idle_handler()
|
||||
indicating that the idle is over. */
|
||||
|
||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
g_isIdle = FALSE;
|
||||
}
|
||||
|
||||
@@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
|
||||
{
|
||||
gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
|
||||
wxTheApp->m_wakeUpTimerTag = 0;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
// when getting called from GDK's time-out handler
|
||||
// when getting called from GDK's time-out handler
|
||||
// we are no longer within GDK's grab on the GUI
|
||||
// thread so we must lock it here ourselves
|
||||
GDK_THREADS_ENTER ();
|
||||
#endif
|
||||
|
||||
|
||||
// unblock other threads wishing to do some GUI things
|
||||
wxMutexGuiLeave();
|
||||
|
||||
|
||||
// wake up other threads
|
||||
wxUsleep( 1 );
|
||||
|
||||
|
||||
// block other thread again
|
||||
wxMutexGuiEnter();
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
// release lock again
|
||||
GDK_THREADS_LEAVE ();
|
||||
#endif
|
||||
|
||||
|
||||
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
@@ -278,7 +278,7 @@ wxApp::wxApp()
|
||||
m_exitOnFrameDelete = TRUE;
|
||||
|
||||
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
/*
|
||||
#if wxUSE_THREADS
|
||||
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
|
||||
@@ -297,7 +297,7 @@ wxApp::~wxApp()
|
||||
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
|
||||
#endif
|
||||
*/
|
||||
|
||||
|
||||
if (m_colorCube) free(m_colorCube);
|
||||
}
|
||||
|
||||
@@ -305,7 +305,7 @@ bool wxApp::OnInitGui()
|
||||
{
|
||||
GdkVisual *visual = gdk_visual_get_system();
|
||||
|
||||
/* on some machines, the default visual is just 256 colours, so
|
||||
/* on some machines, the default visual is just 256 colours, so
|
||||
we make sure we get the best. this can sometimes be wasteful,
|
||||
of course, but what do these guys pay $30.000 for? */
|
||||
/*
|
||||
@@ -316,11 +316,11 @@ bool wxApp::OnInitGui()
|
||||
|
||||
GdkColormap *colormap = gdk_colormap_new( vis, FALSE );
|
||||
gtk_widget_set_default_colormap( colormap );
|
||||
|
||||
visual = vis;
|
||||
|
||||
visual = vis;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/* Nothing to do for 15, 16, 24, 32 bit displays */
|
||||
if (visual->depth > 8) return TRUE;
|
||||
|
||||
@@ -378,24 +378,24 @@ bool wxApp::OnInitGui()
|
||||
int bdiff = ((bb << 8) - colors[i].blue);
|
||||
int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
|
||||
if (sum < max)
|
||||
{
|
||||
{
|
||||
index = i; max = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* assume 8-bit true or static colors. this really
|
||||
exists. */
|
||||
GdkVisual* vis = gdk_colormap_get_visual( cmap );
|
||||
index = (r >> (5 - vis->red_prec)) << vis->red_shift;
|
||||
index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
|
||||
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
|
||||
/* assume 8-bit true or static colors. this really
|
||||
exists. */
|
||||
GdkVisual* vis = gdk_colormap_get_visual( cmap );
|
||||
index = (r >> (5 - vis->red_prec)) << vis->red_shift;
|
||||
index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
|
||||
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
|
||||
#else
|
||||
wxFAIL_MSG( _T("Unsupported graphics hardware") );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
m_colorCube[ (r*1024) + (g*32) + b ] = index;
|
||||
}
|
||||
}
|
||||
@@ -551,21 +551,6 @@ void wxApp::DeletePendingObjects()
|
||||
}
|
||||
}
|
||||
|
||||
wxWindow *wxApp::GetTopWindow()
|
||||
{
|
||||
if (m_topWindow)
|
||||
return m_topWindow;
|
||||
else if (wxTopLevelWindows.GetCount() > 0)
|
||||
return wxTopLevelWindows.GetFirst()->GetData();
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void wxApp::SetTopWindow( wxWindow *win )
|
||||
{
|
||||
m_topWindow = win;
|
||||
}
|
||||
|
||||
bool wxApp::Initialize()
|
||||
{
|
||||
wxBuffer = new wxChar[BUFSIZ + 512];
|
||||
@@ -670,10 +655,6 @@ void wxApp::CleanUp()
|
||||
delete oldLog;
|
||||
}
|
||||
|
||||
wxLog *wxApp::CreateLogTarget()
|
||||
{
|
||||
return new wxLogGui;
|
||||
}
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] )
|
||||
gtk_init( &argc, &argv );
|
||||
|
||||
wxSetDetectableAutoRepeat( TRUE );
|
||||
|
||||
|
||||
if (!wxApp::Initialize())
|
||||
return -1;
|
||||
|
||||
@@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] )
|
||||
if ( retValue == 0 )
|
||||
{
|
||||
/* delete pending toplevel windows (typically a single
|
||||
dialog) so that, if there isn't any left, we don't
|
||||
call OnRun() */
|
||||
dialog) so that, if there isn't any left, we don't
|
||||
call OnRun() */
|
||||
wxTheApp->DeletePendingObjects();
|
||||
|
||||
|
||||
wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
|
||||
|
||||
if (wxTheApp->Initialized())
|
||||
{
|
||||
{
|
||||
retValue = wxTheApp->OnRun();
|
||||
|
||||
wxWindow *topWindow = wxTheApp->GetTopWindow();
|
||||
@@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] )
|
||||
delete topWindow;
|
||||
wxTheApp->SetTopWindow( (wxWindow*) NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
wxTheApp->OnExit();
|
||||
}
|
||||
}
|
||||
@@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] )
|
||||
return retValue;
|
||||
}
|
||||
|
||||
# include "wx/gtk/info.xpm"
|
||||
# include "wx/gtk/error.xpm"
|
||||
# include "wx/gtk/question.xpm"
|
||||
# include "wx/gtk/warning.xpm"
|
||||
|
||||
#include "wx/gtk/info.xpm"
|
||||
#include "wx/gtk/error.xpm"
|
||||
#include "wx/gtk/question.xpm"
|
||||
#include "wx/gtk/warning.xpm"
|
||||
|
||||
wxIcon
|
||||
wxApp::GetStdIcon(int which) const
|
||||
{
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon(info_xpm);
|
||||
break;
|
||||
case wxICON_HAND:
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon(question_xpm);
|
||||
break;
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon(warning_xpm);
|
||||
break;
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
}
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon(info_xpm);
|
||||
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon(question_xpm);
|
||||
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon(warning_xpm);
|
||||
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
// still fall through
|
||||
|
||||
case wxICON_HAND:
|
||||
return wxIcon(error_xpm);
|
||||
}
|
||||
}
|
||||
|
140
src/gtk1/app.cpp
140
src/gtk1/app.cpp
@@ -146,7 +146,7 @@ bool wxYield()
|
||||
might have been changed (it also will update other things set from
|
||||
OnUpdateUI() which is a nice (and desired) side effect) */
|
||||
while (wxTheApp->ProcessIdle()) { }
|
||||
|
||||
|
||||
#if 0
|
||||
for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst();
|
||||
node;
|
||||
@@ -175,24 +175,24 @@ bool wxYield()
|
||||
while (gtk_events_pending())
|
||||
gtk_main_iteration();
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
{
|
||||
if (!wxTheApp) return TRUE;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* when getting called from GDK's idle handler we
|
||||
are no longer within GDK's grab on the GUI
|
||||
thread so we must lock it here ourselves */
|
||||
GDK_THREADS_ENTER ();
|
||||
#endif
|
||||
|
||||
|
||||
/* sent idle event to all who request them */
|
||||
while (wxTheApp->ProcessIdle()) { }
|
||||
|
||||
|
||||
/* we don't want any more idle events until the next event is
|
||||
sent to wxGTK */
|
||||
gtk_idle_remove( wxTheApp->m_idleTag );
|
||||
@@ -204,7 +204,7 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
|
||||
once each time after the event queue has been completely
|
||||
emptied */
|
||||
g_isIdle = TRUE;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* release lock again */
|
||||
GDK_THREADS_LEAVE ();
|
||||
@@ -221,7 +221,7 @@ void wxapp_install_idle_handler()
|
||||
indicating that the idle is over. */
|
||||
|
||||
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
g_isIdle = FALSE;
|
||||
}
|
||||
|
||||
@@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
|
||||
{
|
||||
gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
|
||||
wxTheApp->m_wakeUpTimerTag = 0;
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
// when getting called from GDK's time-out handler
|
||||
// when getting called from GDK's time-out handler
|
||||
// we are no longer within GDK's grab on the GUI
|
||||
// thread so we must lock it here ourselves
|
||||
GDK_THREADS_ENTER ();
|
||||
#endif
|
||||
|
||||
|
||||
// unblock other threads wishing to do some GUI things
|
||||
wxMutexGuiLeave();
|
||||
|
||||
|
||||
// wake up other threads
|
||||
wxUsleep( 1 );
|
||||
|
||||
|
||||
// block other thread again
|
||||
wxMutexGuiEnter();
|
||||
|
||||
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
// release lock again
|
||||
GDK_THREADS_LEAVE ();
|
||||
#endif
|
||||
|
||||
|
||||
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
@@ -278,7 +278,7 @@ wxApp::wxApp()
|
||||
m_exitOnFrameDelete = TRUE;
|
||||
|
||||
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
|
||||
|
||||
|
||||
/*
|
||||
#if wxUSE_THREADS
|
||||
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
|
||||
@@ -297,7 +297,7 @@ wxApp::~wxApp()
|
||||
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
|
||||
#endif
|
||||
*/
|
||||
|
||||
|
||||
if (m_colorCube) free(m_colorCube);
|
||||
}
|
||||
|
||||
@@ -305,7 +305,7 @@ bool wxApp::OnInitGui()
|
||||
{
|
||||
GdkVisual *visual = gdk_visual_get_system();
|
||||
|
||||
/* on some machines, the default visual is just 256 colours, so
|
||||
/* on some machines, the default visual is just 256 colours, so
|
||||
we make sure we get the best. this can sometimes be wasteful,
|
||||
of course, but what do these guys pay $30.000 for? */
|
||||
/*
|
||||
@@ -316,11 +316,11 @@ bool wxApp::OnInitGui()
|
||||
|
||||
GdkColormap *colormap = gdk_colormap_new( vis, FALSE );
|
||||
gtk_widget_set_default_colormap( colormap );
|
||||
|
||||
visual = vis;
|
||||
|
||||
visual = vis;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/* Nothing to do for 15, 16, 24, 32 bit displays */
|
||||
if (visual->depth > 8) return TRUE;
|
||||
|
||||
@@ -378,24 +378,24 @@ bool wxApp::OnInitGui()
|
||||
int bdiff = ((bb << 8) - colors[i].blue);
|
||||
int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
|
||||
if (sum < max)
|
||||
{
|
||||
{
|
||||
index = i; max = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
/* assume 8-bit true or static colors. this really
|
||||
exists. */
|
||||
GdkVisual* vis = gdk_colormap_get_visual( cmap );
|
||||
index = (r >> (5 - vis->red_prec)) << vis->red_shift;
|
||||
index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
|
||||
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
|
||||
/* assume 8-bit true or static colors. this really
|
||||
exists. */
|
||||
GdkVisual* vis = gdk_colormap_get_visual( cmap );
|
||||
index = (r >> (5 - vis->red_prec)) << vis->red_shift;
|
||||
index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
|
||||
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
|
||||
#else
|
||||
wxFAIL_MSG( _T("Unsupported graphics hardware") );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
m_colorCube[ (r*1024) + (g*32) + b ] = index;
|
||||
}
|
||||
}
|
||||
@@ -551,21 +551,6 @@ void wxApp::DeletePendingObjects()
|
||||
}
|
||||
}
|
||||
|
||||
wxWindow *wxApp::GetTopWindow()
|
||||
{
|
||||
if (m_topWindow)
|
||||
return m_topWindow;
|
||||
else if (wxTopLevelWindows.GetCount() > 0)
|
||||
return wxTopLevelWindows.GetFirst()->GetData();
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void wxApp::SetTopWindow( wxWindow *win )
|
||||
{
|
||||
m_topWindow = win;
|
||||
}
|
||||
|
||||
bool wxApp::Initialize()
|
||||
{
|
||||
wxBuffer = new wxChar[BUFSIZ + 512];
|
||||
@@ -670,10 +655,6 @@ void wxApp::CleanUp()
|
||||
delete oldLog;
|
||||
}
|
||||
|
||||
wxLog *wxApp::CreateLogTarget()
|
||||
{
|
||||
return new wxLogGui;
|
||||
}
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] )
|
||||
gtk_init( &argc, &argv );
|
||||
|
||||
wxSetDetectableAutoRepeat( TRUE );
|
||||
|
||||
|
||||
if (!wxApp::Initialize())
|
||||
return -1;
|
||||
|
||||
@@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] )
|
||||
if ( retValue == 0 )
|
||||
{
|
||||
/* delete pending toplevel windows (typically a single
|
||||
dialog) so that, if there isn't any left, we don't
|
||||
call OnRun() */
|
||||
dialog) so that, if there isn't any left, we don't
|
||||
call OnRun() */
|
||||
wxTheApp->DeletePendingObjects();
|
||||
|
||||
|
||||
wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
|
||||
|
||||
if (wxTheApp->Initialized())
|
||||
{
|
||||
{
|
||||
retValue = wxTheApp->OnRun();
|
||||
|
||||
wxWindow *topWindow = wxTheApp->GetTopWindow();
|
||||
@@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] )
|
||||
delete topWindow;
|
||||
wxTheApp->SetTopWindow( (wxWindow*) NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
wxTheApp->OnExit();
|
||||
}
|
||||
}
|
||||
@@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] )
|
||||
return retValue;
|
||||
}
|
||||
|
||||
# include "wx/gtk/info.xpm"
|
||||
# include "wx/gtk/error.xpm"
|
||||
# include "wx/gtk/question.xpm"
|
||||
# include "wx/gtk/warning.xpm"
|
||||
|
||||
#include "wx/gtk/info.xpm"
|
||||
#include "wx/gtk/error.xpm"
|
||||
#include "wx/gtk/question.xpm"
|
||||
#include "wx/gtk/warning.xpm"
|
||||
|
||||
wxIcon
|
||||
wxApp::GetStdIcon(int which) const
|
||||
{
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon(info_xpm);
|
||||
break;
|
||||
case wxICON_HAND:
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon(question_xpm);
|
||||
break;
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon(warning_xpm);
|
||||
break;
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
return wxIcon(error_xpm);
|
||||
break;
|
||||
}
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon(info_xpm);
|
||||
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon(question_xpm);
|
||||
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon(warning_xpm);
|
||||
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
// still fall through
|
||||
|
||||
case wxICON_HAND:
|
||||
return wxIcon(error_xpm);
|
||||
}
|
||||
}
|
||||
|
@@ -1062,21 +1062,6 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event)
|
||||
}
|
||||
}
|
||||
|
||||
wxLog* wxApp::CreateLogTarget()
|
||||
{
|
||||
return new wxLogGui;
|
||||
}
|
||||
|
||||
wxWindow* wxApp::GetTopWindow() const
|
||||
{
|
||||
if (m_topWindow)
|
||||
return m_topWindow;
|
||||
else if (wxTopLevelWindows.GetCount() > 0)
|
||||
return wxTopLevelWindows.GetFirst()->GetData();
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int wxApp::GetComCtl32Version() const
|
||||
{
|
||||
// have we loaded COMCTL32 yet?
|
||||
@@ -1149,28 +1134,28 @@ bool wxYield()
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
wxIcon
|
||||
wxApp::GetStdIcon(int which) const
|
||||
{
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon("wxICON_INFO");
|
||||
break;
|
||||
case wxICON_HAND:
|
||||
return wxIcon("wxICON_ERROR");
|
||||
break;
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon("wxICON_QUESTION");
|
||||
break;
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon("wxICON_WARNING");
|
||||
break;
|
||||
default:
|
||||
wxFAIL_MSG("requested non existent standard icon");
|
||||
return wxIcon("wxICON_ERROR");
|
||||
break;
|
||||
}
|
||||
switch(which)
|
||||
{
|
||||
case wxICON_INFORMATION:
|
||||
return wxIcon("wxICON_INFO");
|
||||
|
||||
case wxICON_QUESTION:
|
||||
return wxIcon("wxICON_QUESTION");
|
||||
|
||||
case wxICON_EXCLAMATION:
|
||||
return wxIcon("wxICON_WARNING");
|
||||
|
||||
default:
|
||||
wxFAIL_MSG(_T("requested non existent standard icon"));
|
||||
// still fall through
|
||||
|
||||
case wxICON_HAND:
|
||||
return wxIcon("wxICON_ERROR");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -323,15 +323,6 @@ void wxComboBox::DoSetSize(int x, int y,
|
||||
int sizeFlags)
|
||||
{
|
||||
wxControl::DoSetSize(x, y, width, height, sizeFlags);
|
||||
|
||||
// VZ: for unknown (to me) reasons, if we don't do this, the combobox
|
||||
// somehow is hidden by the static boxes, although static boxes do
|
||||
// put themselves at the very end of Z-order.
|
||||
if ( !::SetWindowPos(GetHwnd(), HWND_BOTTOM, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOSIZE) )
|
||||
{
|
||||
wxLogLastError(_T("SetWindowPos"));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -117,6 +117,8 @@ void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
wxControl::DoSetSize(x, y, width, height, sizeFlags);
|
||||
|
||||
return;
|
||||
|
||||
// the static box should always be on the bottom of the Z-order, otherwise
|
||||
// it may hide controls which are positioned inside it
|
||||
if ( !::SetWindowPos(GetHwnd(), HWND_TOP, 0, 0, 0, 0,
|
||||
@@ -172,7 +174,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
|
||||
// Alternatively, just make sure that wxStaticBox is always at the back! There are probably
|
||||
// few other circumstances where it matters about child clipping. But what about painting onto
|
||||
// to panel, inside a groupbox? Doesn't appear, because the box wipes it out.
|
||||
wxWindow *parent = GetParent();
|
||||
wxWindow *parent = 0; //GetParent();
|
||||
if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) )
|
||||
{
|
||||
// TODO: May in fact need to generate a paint event for inside this
|
||||
@@ -196,7 +198,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
|
||||
|
||||
long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||
{
|
||||
if ( 0 )//nMsg == WM_NCHITTEST)
|
||||
if ( nMsg == WM_NCHITTEST)
|
||||
{
|
||||
int xPos = LOWORD(lParam); // horizontal position of cursor
|
||||
int yPos = HIWORD(lParam); // vertical position of cursor
|
||||
|
Reference in New Issue
Block a user