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:
Vadim Zeitlin
1999-07-06 00:44:26 +00:00
parent 4092d6f221
commit 094637f6d6
11 changed files with 491 additions and 544 deletions

View File

@@ -1,98 +1,298 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: app.h // 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 // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem // Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#ifndef _WX_APP_H_BASE_ #ifndef _WX_APP_H_BASE_
#define _WX_APP_H_BASE_ #define _WX_APP_H_BASE_
#ifdef __GNUG__
#pragma interface "appbase.h"
#endif
// ----------------------------------------------------------------------------
// typedefs
// ----------------------------------------------------------------------------
#ifdef __WXMSW__ #ifdef __WXMSW__
class WXDLLEXPORT wxApp; class WXDLLEXPORT wxApp;
typedef wxApp* (*wxAppInitializerFunction) (void); typedef wxApp* (*wxAppInitializerFunction)();
#else
// returning wxApp* won't work with gcc
#include "wx/object.h"
typedef wxObject* (*wxAppInitializerFunction)();
#endif #endif
#include "wx/object.h" // ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
#ifndef __WXMSW__ static const int wxPRINT_WINDOWS = 1;
typedef wxObject* (*wxAppInitializerFunction) (void); // returning wxApp* won't work with gcc static const int wxPRINT_POSTSCRIPT = 2;
#endif
// ----------------------------------------------------------------------------
// 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__) #if defined(__WXMSW__)
#include "wx/msw/app.h" #include "wx/msw/app.h"
#elif defined(__WXMOTIF__) #elif defined(__WXMOTIF__)
#include "wx/motif/app.h" #include "wx/motif/app.h"
#elif defined(__WXQT__) #elif defined(__WXQT__)
#include "wx/qt/app.h" #include "wx/qt/app.h"
#elif defined(__WXGTK__) #elif defined(__WXGTK__)
#include "wx/gtk/app.h" #include "wx/gtk/app.h"
#elif defined(__WXMAC__) #elif defined(__WXMAC__)
#include "wx/mac/app.h" #include "wx/mac/app.h"
#elif defined(__WXSTUBS__) #elif defined(__WXSTUBS__)
#include "wx/stubs/app.h" #include "wx/stubs/app.h"
#endif #endif
// Having a global instance of this class allows // ----------------------------------------------------------------------------
// wxApp to be aware of the app creator function. // macros for dynamic creation of the application object
// wxApp can then call this function to create a new // ----------------------------------------------------------------------------
// app object. Convoluted, but necessary.
// 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 class WXDLLEXPORT wxAppInitializer
{ {
public: public:
wxAppInitializer(wxAppInitializerFunction fn) wxAppInitializer(wxAppInitializerFunction fn)
{ { wxApp::SetInitializerFunction(fn); }
wxApp::SetInitializerFunction(fn);
}
}; };
// Here's a macro you can use if your compiler // Here's a macro you can use if your compiler really, really wants main() to
// really, really wants main() to be in your main program // be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this
// (e.g. hello.cpp). // code if required.
// Now IMPLEMENT_APP should add this code if required.
#if defined(__AIX__) || defined(__HPUX__) #if defined(__AIX__) || defined(__HPUX__)
#define IMPLEMENT_WXWIN_MAIN \ #define IMPLEMENT_WXWIN_MAIN \
extern int wxEntry( int argc, char *argv[] ); \ extern int wxEntry( int argc, char *argv[] ); \
int main(int argc, char *argv[]) { return wxEntry(argc, argv); } int main(int argc, char *argv[]) { return wxEntry(argc, argv); }
#elif defined(__WXMSW__) && defined(WXUSINGDLL) #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 #define IMPLEMENT_WXWIN_MAIN \
#if !defined(WXAPIENTRY) int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\
# ifdef __WATCOMC__ LPSTR m_lpCmdLine, int nCmdShow )\
# define WXAPIENTRY PASCAL {\
# else return wxEntry((WXHINSTANCE) hInstance, \
# define WXAPIENTRY FAR PASCAL (WXHINSTANCE) hPrevInstance,\
# endif m_lpCmdLine, nCmdShow);\
#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);\
}
#else #else
#define IMPLEMENT_WXWIN_MAIN #define IMPLEMENT_WXWIN_MAIN
#endif #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) \ #define IMPLEMENT_APP(appname) \
wxApp *wxCreateApp(void) { return new appname; } \ wxApp *wxCreateApp() { return new appname; } \
wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \
appname& wxGetApp(void) { return *(appname *)wxTheApp; } \ appname& wxGetApp() { return *(appname *)wxTheApp; } \
IMPLEMENT_WXWIN_MAIN IMPLEMENT_WXWIN_MAIN
#define DECLARE_APP(appname) \
extern appname& wxGetApp(void) ;
#define DECLARE_APP(appname) extern appname& wxGetApp();
#endif #endif
// _WX_APP_H_BASE_ // _WX_APP_H_BASE_

View File

@@ -50,72 +50,34 @@ bool wxYield(void);
// wxApp // wxApp
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class wxApp: public wxEvtHandler class wxApp: public wxAppBase
{ {
DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_DYNAMIC_CLASS(wxApp)
public:
public:
wxApp(); wxApp();
~wxApp(); ~wxApp();
static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; } /* override for altering the way wxGTK intializes the GUI
static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
* default. when overriding this method, the code in it is likely to be
/* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube). * platform dependent, otherwise use OnInit(). */
* 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(); 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(); // override base class (pure) virtuals
void SetTopWindow( wxWindow *win );
virtual int MainLoop(); virtual int MainLoop();
void ExitMainLoop(); virtual void ExitMainLoop();
bool Initialized(); virtual bool Initialized();
virtual bool Pending(); virtual bool Pending();
virtual void Dispatch(); 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; 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 ); void OnIdle( wxIdleEvent &event );
bool SendIdleEvents(); bool SendIdleEvents();
bool SendIdleEvents( wxWindow* win ); 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 Initialize();
static bool InitialzeVisual(); static bool InitialzeVisual();
static void CleanUp(); static void CleanUp();
@@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler
#endif #endif
void DeletePendingObjects(); void DeletePendingObjects();
/// This can be used to suppress the generation of Idle events. // This can be used to suppress the generation of Idle events.
inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
bool m_initialized; bool m_initialized;
bool m_exitOnFrameDelete;
bool m_wantDebugOutput;
wxWindow *m_topWindow;
gint m_idleTag; gint m_idleTag;
#if wxUSE_THREADS #if wxUSE_THREADS
gint m_wakeUpTimerTag; gint m_wakeUpTimerTag;
#endif #endif
unsigned char *m_colorCube; unsigned char *m_colorCube;
int argc; private:
char **argv;
wxString m_vendorName;
wxString m_appName;
wxString m_className;
static wxAppInitializerFunction m_appInitFn;
private:
/// Set to TRUE while we are in wxYield(). /// Set to TRUE while we are in wxYield().
bool m_suppressIdleEvents; bool m_suppressIdleEvents;
DECLARE_EVENT_TABLE()
DECLARE_EVENT_TABLE()
}; };
#endif // __GTKAPPH__ #endif // __GTKAPPH__

View File

@@ -50,72 +50,34 @@ bool wxYield(void);
// wxApp // wxApp
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class wxApp: public wxEvtHandler class wxApp: public wxAppBase
{ {
DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_DYNAMIC_CLASS(wxApp)
public:
public:
wxApp(); wxApp();
~wxApp(); ~wxApp();
static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; } /* override for altering the way wxGTK intializes the GUI
static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
* default. when overriding this method, the code in it is likely to be
/* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube). * platform dependent, otherwise use OnInit(). */
* 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(); 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(); // override base class (pure) virtuals
void SetTopWindow( wxWindow *win );
virtual int MainLoop(); virtual int MainLoop();
void ExitMainLoop(); virtual void ExitMainLoop();
bool Initialized(); virtual bool Initialized();
virtual bool Pending(); virtual bool Pending();
virtual void Dispatch(); 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; 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 ); void OnIdle( wxIdleEvent &event );
bool SendIdleEvents(); bool SendIdleEvents();
bool SendIdleEvents( wxWindow* win ); 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 Initialize();
static bool InitialzeVisual(); static bool InitialzeVisual();
static void CleanUp(); static void CleanUp();
@@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler
#endif #endif
void DeletePendingObjects(); void DeletePendingObjects();
/// This can be used to suppress the generation of Idle events. // This can be used to suppress the generation of Idle events.
inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
bool m_initialized; bool m_initialized;
bool m_exitOnFrameDelete;
bool m_wantDebugOutput;
wxWindow *m_topWindow;
gint m_idleTag; gint m_idleTag;
#if wxUSE_THREADS #if wxUSE_THREADS
gint m_wakeUpTimerTag; gint m_wakeUpTimerTag;
#endif #endif
unsigned char *m_colorCube; unsigned char *m_colorCube;
int argc; private:
char **argv;
wxString m_vendorName;
wxString m_appName;
wxString m_className;
static wxAppInitializerFunction m_appInitFn;
private:
/// Set to TRUE while we are in wxYield(). /// Set to TRUE while we are in wxYield().
bool m_suppressIdleEvents; bool m_suppressIdleEvents;
DECLARE_EVENT_TABLE()
DECLARE_EVENT_TABLE()
}; };
#endif // __GTKAPPH__ #endif // __GTKAPPH__

View File

@@ -27,9 +27,6 @@ class WXDLLEXPORT wxApp ;
class WXDLLEXPORT wxKeyEvent; class WXDLLEXPORT wxKeyEvent;
class WXDLLEXPORT wxLog; class WXDLLEXPORT wxLog;
static const int wxPRINT_WINDOWS = 1;
static const int wxPRINT_POSTSCRIPT = 2;
WXDLLEXPORT_DATA(extern wxApp*) wxTheApp; WXDLLEXPORT_DATA(extern wxApp*) wxTheApp;
// Force an exit from main loop // Force an exit from main loop
@@ -40,125 +37,74 @@ bool WXDLLEXPORT wxYield();
// Represents the application. Derive OnInit and declare // Represents the application. Derive OnInit and declare
// a new App object to start application // a new App object to start application
class WXDLLEXPORT wxApp: public wxEvtHandler class WXDLLEXPORT wxApp : public wxAppBase
{ {
DECLARE_DYNAMIC_CLASS(wxApp) 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();
public: public:
int argc; wxApp();
wxChar ** argv; 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: protected:
bool m_wantDebugOutput ; bool m_showOnInit;
wxString m_className; int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
wxString m_appName, bool m_auto3D ; // Always use 3D controls, except where overriden
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;
/* Windows-specific wxApp definitions */ /* Windows-specific wxApp definitions */
public: public:
// Implementation // Implementation
static bool Initialize(); static bool Initialize();
static void CleanUp(); static void CleanUp();
static bool RegisterWindowClasses(); static bool RegisterWindowClasses();
// Convert Windows to argc, argv style // Convert Windows to argc, argv style
void ConvertToStandardCommandArgs(char* p); void ConvertToStandardCommandArgs(char* p);
virtual bool DoMessage(); virtual bool DoMessage();
virtual bool ProcessMessage(WXMSG* pMsg); virtual bool ProcessMessage(WXMSG* pMsg);
void DeletePendingObjects(); void DeletePendingObjects();
bool ProcessIdle(); bool ProcessIdle();
#if wxUSE_THREADS #if wxUSE_THREADS
void ProcessPendingEvents(); void ProcessPendingEvents();
#endif #endif
int GetComCtl32Version() const; int GetComCtl32Version() const;
public: public:
int m_nCmdShow; int m_nCmdShow;
protected: protected:
bool m_keepGoing ; bool m_keepGoing ;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
#if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL)) #if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL))

View File

@@ -176,11 +176,12 @@ void *wxLibrary::GetSymbol(const wxString& symbname)
wxDllType wxDllType
wxDllLoader::GetProgramHandle(void) wxDllLoader::GetProgramHandle(void)
{ {
#ifdef __WXGTK__ #ifdef __UNIX__
return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/); return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
#else #else
#pragma warning "Not implemented, please fix!" wxFAIL_MSG(_("This method is not implemented under Windows"));
return 0;
return 0;
#endif #endif
} }

View File

@@ -45,8 +45,6 @@
// icons // icons
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
BEGIN_EVENT_TABLE(wxGenericMessageDialog, wxDialog) BEGIN_EVENT_TABLE(wxGenericMessageDialog, wxDialog)
EVT_BUTTON(wxID_YES, wxGenericMessageDialog::OnYes) EVT_BUTTON(wxID_YES, wxGenericMessageDialog::OnYes)
@@ -57,46 +55,6 @@ END_EVENT_TABLE()
IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog) IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog)
#endif #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, wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent,
const wxString& message, const wxString& message,
const wxString& caption, const wxString& caption,

View File

@@ -146,7 +146,7 @@ bool wxYield()
might have been changed (it also will update other things set from might have been changed (it also will update other things set from
OnUpdateUI() which is a nice (and desired) side effect) */ OnUpdateUI() which is a nice (and desired) side effect) */
while (wxTheApp->ProcessIdle()) { } while (wxTheApp->ProcessIdle()) { }
#if 0 #if 0
for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst();
node; node;
@@ -175,24 +175,24 @@ bool wxYield()
while (gtk_events_pending()) while (gtk_events_pending())
gtk_main_iteration(); gtk_main_iteration();
} }
return TRUE; return TRUE;
} }
gint wxapp_idle_callback( gpointer WXUNUSED(data) ) gint wxapp_idle_callback( gpointer WXUNUSED(data) )
{ {
if (!wxTheApp) return TRUE; if (!wxTheApp) return TRUE;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* when getting called from GDK's idle handler we /* when getting called from GDK's idle handler we
are no longer within GDK's grab on the GUI are no longer within GDK's grab on the GUI
thread so we must lock it here ourselves */ thread so we must lock it here ourselves */
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
/* sent idle event to all who request them */ /* sent idle event to all who request them */
while (wxTheApp->ProcessIdle()) { } while (wxTheApp->ProcessIdle()) { }
/* we don't want any more idle events until the next event is /* we don't want any more idle events until the next event is
sent to wxGTK */ sent to wxGTK */
gtk_idle_remove( wxTheApp->m_idleTag ); 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 once each time after the event queue has been completely
emptied */ emptied */
g_isIdle = TRUE; g_isIdle = TRUE;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* release lock again */ /* release lock again */
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
@@ -221,7 +221,7 @@ void wxapp_install_idle_handler()
indicating that the idle is over. */ indicating that the idle is over. */
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
g_isIdle = FALSE; g_isIdle = FALSE;
} }
@@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{ {
gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag ); gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
wxTheApp->m_wakeUpTimerTag = 0; wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 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 // we are no longer within GDK's grab on the GUI
// thread so we must lock it here ourselves // thread so we must lock it here ourselves
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
// unblock other threads wishing to do some GUI things // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
// wake up other threads // wake up other threads
wxUsleep( 1 ); wxUsleep( 1 );
// block other thread again // block other thread again
wxMutexGuiEnter(); wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
// release lock again // release lock again
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
#endif #endif
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
return TRUE; return TRUE;
} }
#endif #endif
@@ -278,7 +278,7 @@ wxApp::wxApp()
m_exitOnFrameDelete = TRUE; m_exitOnFrameDelete = TRUE;
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
/* /*
#if wxUSE_THREADS #if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); 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 ); if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif #endif
*/ */
if (m_colorCube) free(m_colorCube); if (m_colorCube) free(m_colorCube);
} }
@@ -305,7 +305,7 @@ bool wxApp::OnInitGui()
{ {
GdkVisual *visual = gdk_visual_get_system(); 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, we make sure we get the best. this can sometimes be wasteful,
of course, but what do these guys pay $30.000 for? */ 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 ); GdkColormap *colormap = gdk_colormap_new( vis, FALSE );
gtk_widget_set_default_colormap( colormap ); gtk_widget_set_default_colormap( colormap );
visual = vis; visual = vis;
} }
*/ */
/* Nothing to do for 15, 16, 24, 32 bit displays */ /* Nothing to do for 15, 16, 24, 32 bit displays */
if (visual->depth > 8) return TRUE; if (visual->depth > 8) return TRUE;
@@ -378,24 +378,24 @@ bool wxApp::OnInitGui()
int bdiff = ((bb << 8) - colors[i].blue); int bdiff = ((bb << 8) - colors[i].blue);
int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
if (sum < max) if (sum < max)
{ {
index = i; max = sum; index = i; max = sum;
} }
} }
} }
else else
{ {
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* assume 8-bit true or static colors. this really /* assume 8-bit true or static colors. this really
exists. */ exists. */
GdkVisual* vis = gdk_colormap_get_visual( cmap ); GdkVisual* vis = gdk_colormap_get_visual( cmap );
index = (r >> (5 - vis->red_prec)) << vis->red_shift; index = (r >> (5 - vis->red_prec)) << vis->red_shift;
index |= (g >> (5 - vis->green_prec)) << vis->green_shift; index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
#else #else
wxFAIL_MSG( _T("Unsupported graphics hardware") ); wxFAIL_MSG( _T("Unsupported graphics hardware") );
#endif #endif
} }
m_colorCube[ (r*1024) + (g*32) + b ] = index; 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() bool wxApp::Initialize()
{ {
wxBuffer = new wxChar[BUFSIZ + 512]; wxBuffer = new wxChar[BUFSIZ + 512];
@@ -670,10 +655,6 @@ void wxApp::CleanUp()
delete oldLog; delete oldLog;
} }
wxLog *wxApp::CreateLogTarget()
{
return new wxLogGui;
}
#endif // wxUSE_LOG #endif // wxUSE_LOG
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] )
gtk_init( &argc, &argv ); gtk_init( &argc, &argv );
wxSetDetectableAutoRepeat( TRUE ); wxSetDetectableAutoRepeat( TRUE );
if (!wxApp::Initialize()) if (!wxApp::Initialize())
return -1; return -1;
@@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] )
if ( retValue == 0 ) if ( retValue == 0 )
{ {
/* delete pending toplevel windows (typically a single /* delete pending toplevel windows (typically a single
dialog) so that, if there isn't any left, we don't dialog) so that, if there isn't any left, we don't
call OnRun() */ call OnRun() */
wxTheApp->DeletePendingObjects(); wxTheApp->DeletePendingObjects();
wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0; wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
if (wxTheApp->Initialized()) if (wxTheApp->Initialized())
{ {
retValue = wxTheApp->OnRun(); retValue = wxTheApp->OnRun();
wxWindow *topWindow = wxTheApp->GetTopWindow(); wxWindow *topWindow = wxTheApp->GetTopWindow();
@@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] )
delete topWindow; delete topWindow;
wxTheApp->SetTopWindow( (wxWindow*) NULL ); wxTheApp->SetTopWindow( (wxWindow*) NULL );
} }
} }
wxTheApp->OnExit(); wxTheApp->OnExit();
} }
} }
@@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] )
return retValue; return retValue;
} }
# include "wx/gtk/info.xpm" #include "wx/gtk/info.xpm"
# include "wx/gtk/error.xpm" #include "wx/gtk/error.xpm"
# include "wx/gtk/question.xpm" #include "wx/gtk/question.xpm"
# include "wx/gtk/warning.xpm" #include "wx/gtk/warning.xpm"
wxIcon wxIcon
wxApp::GetStdIcon(int which) const wxApp::GetStdIcon(int which) const
{ {
switch(which) switch(which)
{ {
case wxICON_INFORMATION: case wxICON_INFORMATION:
return wxIcon(info_xpm); return wxIcon(info_xpm);
break;
case wxICON_HAND: case wxICON_QUESTION:
return wxIcon(error_xpm); return wxIcon(question_xpm);
break;
case wxICON_QUESTION: case wxICON_EXCLAMATION:
return wxIcon(question_xpm); return wxIcon(warning_xpm);
break;
case wxICON_EXCLAMATION: default:
return wxIcon(warning_xpm); wxFAIL_MSG("requested non existent standard icon");
break; // still fall through
default:
wxFAIL_MSG("requested non existent standard icon"); case wxICON_HAND:
return wxIcon(error_xpm); return wxIcon(error_xpm);
break; }
}
} }

View File

@@ -146,7 +146,7 @@ bool wxYield()
might have been changed (it also will update other things set from might have been changed (it also will update other things set from
OnUpdateUI() which is a nice (and desired) side effect) */ OnUpdateUI() which is a nice (and desired) side effect) */
while (wxTheApp->ProcessIdle()) { } while (wxTheApp->ProcessIdle()) { }
#if 0 #if 0
for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst();
node; node;
@@ -175,24 +175,24 @@ bool wxYield()
while (gtk_events_pending()) while (gtk_events_pending())
gtk_main_iteration(); gtk_main_iteration();
} }
return TRUE; return TRUE;
} }
gint wxapp_idle_callback( gpointer WXUNUSED(data) ) gint wxapp_idle_callback( gpointer WXUNUSED(data) )
{ {
if (!wxTheApp) return TRUE; if (!wxTheApp) return TRUE;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* when getting called from GDK's idle handler we /* when getting called from GDK's idle handler we
are no longer within GDK's grab on the GUI are no longer within GDK's grab on the GUI
thread so we must lock it here ourselves */ thread so we must lock it here ourselves */
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
/* sent idle event to all who request them */ /* sent idle event to all who request them */
while (wxTheApp->ProcessIdle()) { } while (wxTheApp->ProcessIdle()) { }
/* we don't want any more idle events until the next event is /* we don't want any more idle events until the next event is
sent to wxGTK */ sent to wxGTK */
gtk_idle_remove( wxTheApp->m_idleTag ); 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 once each time after the event queue has been completely
emptied */ emptied */
g_isIdle = TRUE; g_isIdle = TRUE;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* release lock again */ /* release lock again */
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
@@ -221,7 +221,7 @@ void wxapp_install_idle_handler()
indicating that the idle is over. */ indicating that the idle is over. */
wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
g_isIdle = FALSE; g_isIdle = FALSE;
} }
@@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{ {
gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag ); gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
wxTheApp->m_wakeUpTimerTag = 0; wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 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 // we are no longer within GDK's grab on the GUI
// thread so we must lock it here ourselves // thread so we must lock it here ourselves
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
// unblock other threads wishing to do some GUI things // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
// wake up other threads // wake up other threads
wxUsleep( 1 ); wxUsleep( 1 );
// block other thread again // block other thread again
wxMutexGuiEnter(); wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
// release lock again // release lock again
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
#endif #endif
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
return TRUE; return TRUE;
} }
#endif #endif
@@ -278,7 +278,7 @@ wxApp::wxApp()
m_exitOnFrameDelete = TRUE; m_exitOnFrameDelete = TRUE;
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
/* /*
#if wxUSE_THREADS #if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); 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 ); if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif #endif
*/ */
if (m_colorCube) free(m_colorCube); if (m_colorCube) free(m_colorCube);
} }
@@ -305,7 +305,7 @@ bool wxApp::OnInitGui()
{ {
GdkVisual *visual = gdk_visual_get_system(); 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, we make sure we get the best. this can sometimes be wasteful,
of course, but what do these guys pay $30.000 for? */ 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 ); GdkColormap *colormap = gdk_colormap_new( vis, FALSE );
gtk_widget_set_default_colormap( colormap ); gtk_widget_set_default_colormap( colormap );
visual = vis; visual = vis;
} }
*/ */
/* Nothing to do for 15, 16, 24, 32 bit displays */ /* Nothing to do for 15, 16, 24, 32 bit displays */
if (visual->depth > 8) return TRUE; if (visual->depth > 8) return TRUE;
@@ -378,24 +378,24 @@ bool wxApp::OnInitGui()
int bdiff = ((bb << 8) - colors[i].blue); int bdiff = ((bb << 8) - colors[i].blue);
int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
if (sum < max) if (sum < max)
{ {
index = i; max = sum; index = i; max = sum;
} }
} }
} }
else else
{ {
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* assume 8-bit true or static colors. this really /* assume 8-bit true or static colors. this really
exists. */ exists. */
GdkVisual* vis = gdk_colormap_get_visual( cmap ); GdkVisual* vis = gdk_colormap_get_visual( cmap );
index = (r >> (5 - vis->red_prec)) << vis->red_shift; index = (r >> (5 - vis->red_prec)) << vis->red_shift;
index |= (g >> (5 - vis->green_prec)) << vis->green_shift; index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
#else #else
wxFAIL_MSG( _T("Unsupported graphics hardware") ); wxFAIL_MSG( _T("Unsupported graphics hardware") );
#endif #endif
} }
m_colorCube[ (r*1024) + (g*32) + b ] = index; 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() bool wxApp::Initialize()
{ {
wxBuffer = new wxChar[BUFSIZ + 512]; wxBuffer = new wxChar[BUFSIZ + 512];
@@ -670,10 +655,6 @@ void wxApp::CleanUp()
delete oldLog; delete oldLog;
} }
wxLog *wxApp::CreateLogTarget()
{
return new wxLogGui;
}
#endif // wxUSE_LOG #endif // wxUSE_LOG
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] )
gtk_init( &argc, &argv ); gtk_init( &argc, &argv );
wxSetDetectableAutoRepeat( TRUE ); wxSetDetectableAutoRepeat( TRUE );
if (!wxApp::Initialize()) if (!wxApp::Initialize())
return -1; return -1;
@@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] )
if ( retValue == 0 ) if ( retValue == 0 )
{ {
/* delete pending toplevel windows (typically a single /* delete pending toplevel windows (typically a single
dialog) so that, if there isn't any left, we don't dialog) so that, if there isn't any left, we don't
call OnRun() */ call OnRun() */
wxTheApp->DeletePendingObjects(); wxTheApp->DeletePendingObjects();
wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0; wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
if (wxTheApp->Initialized()) if (wxTheApp->Initialized())
{ {
retValue = wxTheApp->OnRun(); retValue = wxTheApp->OnRun();
wxWindow *topWindow = wxTheApp->GetTopWindow(); wxWindow *topWindow = wxTheApp->GetTopWindow();
@@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] )
delete topWindow; delete topWindow;
wxTheApp->SetTopWindow( (wxWindow*) NULL ); wxTheApp->SetTopWindow( (wxWindow*) NULL );
} }
} }
wxTheApp->OnExit(); wxTheApp->OnExit();
} }
} }
@@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] )
return retValue; return retValue;
} }
# include "wx/gtk/info.xpm" #include "wx/gtk/info.xpm"
# include "wx/gtk/error.xpm" #include "wx/gtk/error.xpm"
# include "wx/gtk/question.xpm" #include "wx/gtk/question.xpm"
# include "wx/gtk/warning.xpm" #include "wx/gtk/warning.xpm"
wxIcon wxIcon
wxApp::GetStdIcon(int which) const wxApp::GetStdIcon(int which) const
{ {
switch(which) switch(which)
{ {
case wxICON_INFORMATION: case wxICON_INFORMATION:
return wxIcon(info_xpm); return wxIcon(info_xpm);
break;
case wxICON_HAND: case wxICON_QUESTION:
return wxIcon(error_xpm); return wxIcon(question_xpm);
break;
case wxICON_QUESTION: case wxICON_EXCLAMATION:
return wxIcon(question_xpm); return wxIcon(warning_xpm);
break;
case wxICON_EXCLAMATION: default:
return wxIcon(warning_xpm); wxFAIL_MSG("requested non existent standard icon");
break; // still fall through
default:
wxFAIL_MSG("requested non existent standard icon"); case wxICON_HAND:
return wxIcon(error_xpm); return wxIcon(error_xpm);
break; }
}
} }

View File

@@ -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 int wxApp::GetComCtl32Version() const
{ {
// have we loaded COMCTL32 yet? // have we loaded COMCTL32 yet?
@@ -1149,28 +1134,28 @@ bool wxYield()
return TRUE; return TRUE;
} }
wxIcon wxIcon
wxApp::GetStdIcon(int which) const wxApp::GetStdIcon(int which) const
{ {
switch(which) switch(which)
{ {
case wxICON_INFORMATION: case wxICON_INFORMATION:
return wxIcon("wxICON_INFO"); return wxIcon("wxICON_INFO");
break;
case wxICON_HAND: case wxICON_QUESTION:
return wxIcon("wxICON_ERROR"); return wxIcon("wxICON_QUESTION");
break;
case wxICON_QUESTION: case wxICON_EXCLAMATION:
return wxIcon("wxICON_QUESTION"); return wxIcon("wxICON_WARNING");
break;
case wxICON_EXCLAMATION: default:
return wxIcon("wxICON_WARNING"); wxFAIL_MSG(_T("requested non existent standard icon"));
break; // still fall through
default:
wxFAIL_MSG("requested non existent standard icon"); case wxICON_HAND:
return wxIcon("wxICON_ERROR"); return wxIcon("wxICON_ERROR");
break; }
}
} }

View File

@@ -323,15 +323,6 @@ void wxComboBox::DoSetSize(int x, int y,
int sizeFlags) int sizeFlags)
{ {
wxControl::DoSetSize(x, y, width, height, 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 #endif

View File

@@ -117,6 +117,8 @@ void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{ {
wxControl::DoSetSize(x, y, width, height, sizeFlags); wxControl::DoSetSize(x, y, width, height, sizeFlags);
return;
// the static box should always be on the bottom of the Z-order, otherwise // the static box should always be on the bottom of the Z-order, otherwise
// it may hide controls which are positioned inside it // it may hide controls which are positioned inside it
if ( !::SetWindowPos(GetHwnd(), HWND_TOP, 0, 0, 0, 0, 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 // 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 // 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. // 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) ) 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 // 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) 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 xPos = LOWORD(lParam); // horizontal position of cursor
int yPos = HIWORD(lParam); // vertical position of cursor int yPos = HIWORD(lParam); // vertical position of cursor