wxApp development for WXPM

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4562 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
1999-11-15 04:50:09 +00:00
parent d45d30c868
commit 9ed0fac8a8
8 changed files with 434 additions and 598 deletions

View File

@@ -24,10 +24,10 @@ class WXDLLEXPORT wxLog;
WXDLLEXPORT_DATA(extern wxApp*) wxTheApp; WXDLLEXPORT_DATA(extern wxApp*) wxTheApp;
// Force an exit from main loop // Force an exit from main loop
void WXDLLEXPORT wxExit(); void WXDLLEXPORT wxExit(void);
// Yield to other apps/messages // Yield to other apps/messages
bool WXDLLEXPORT wxYield(); bool WXDLLEXPORT wxYield(void);
// 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
@@ -39,68 +39,73 @@ public:
wxApp(); wxApp();
virtual ~wxApp(); virtual ~wxApp();
virtual bool OnInitGui(void);
// override base class (pure) virtuals // override base class (pure) virtuals
virtual int MainLoop(); virtual int MainLoop(void);
virtual void ExitMainLoop(); virtual void ExitMainLoop(void);
virtual bool Initialized(); virtual bool Initialized(void);
virtual bool Pending() ; virtual bool Pending(void) ;
virtual void Dispatch() ; virtual void Dispatch(void);
virtual wxIcon GetStdIcon(int which) const; virtual wxIcon GetStdIcon(int which) const;
virtual void SetPrintMode(int mode) { m_printMode = mode; } virtual void SetPrintMode(int mode) { m_nPrintMode = mode; }
virtual int GetPrintMode() const { return m_printMode; } virtual int GetPrintMode(void) const { return m_nPrintMode; }
// implementation only // implementation only
void OnIdle(wxIdleEvent& event); void OnIdle(wxIdleEvent& rEvent);
void OnEndSession(wxCloseEvent& event); void OnEndSession(wxCloseEvent& rEvent);
void OnQueryEndSession(wxCloseEvent& event); void OnQueryEndSession(wxCloseEvent& rEvent);
// Send idle event to all top-level windows. // Send idle event to all top-level windows.
// Returns TRUE if more idle time is requested. // Returns TRUE if more idle time is requested.
bool SendIdleEvents(); bool SendIdleEvents(void);
// Send idle event to window and all subwindows // Send idle event to window and all subwindows
// Returns TRUE if more idle time is requested. // Returns TRUE if more idle time is requested.
bool SendIdleEvents(wxWindow* win); bool SendIdleEvents(wxWindow* pWin);
void SetAuto3D(bool flag) { m_auto3D = flag; } void SetAuto3D(bool bFlag) { m_bAuto3D = bFlag; }
bool GetAuto3D() const { return m_auto3D; } bool GetAuto3D(void) const { return m_bAuto3D; }
protected: protected:
bool m_showOnInit; bool m_bShowOnInit;
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT int m_nPrintMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
bool m_auto3D ; // Always use 3D controls, except where overriden bool m_bAuto3D ; // Always use 3D controls, except where overriden
/* Windows-specific wxApp definitions */
//
// PM-specific wxApp definitions */
//
public: public:
// Implementation // Implementation
static bool Initialize(); static bool Initialize(HAB vHab);
static void CleanUp(); static void CleanUp(void);
static bool RegisterWindowClasses(); static bool RegisterWindowClasses(HAB vHab);
// Convert Windows to argc, argv style virtual bool DoMessage(void);
void ConvertToStandardCommandArgs(char* p);
virtual bool DoMessage();
virtual bool ProcessMessage(WXMSG* pMsg); virtual bool ProcessMessage(WXMSG* pMsg);
void DeletePendingObjects(); void DeletePendingObjects(void);
bool ProcessIdle(); bool ProcessIdle(void);
#if wxUSE_THREADS #if wxUSE_THREADS
void ProcessPendingEvents(); void ProcessPendingEvents(void);
#endif #endif
int GetComCtl32Version() const;
public: public:
int m_nCmdShow; int m_nCmdShow;
protected: protected:
bool m_keepGoing ; bool m_bKeepGoing ;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
private:
HAB m_vHab;
HMQ m_hMq;
QMSG m_vMsg;
}; };
int WXDLLEXPORT wxEntry( int argc, char *argv[] );
#endif #endif
// _WX_APP_H_ // _WX_APP_H_

View File

@@ -114,6 +114,8 @@ private:
{ return(wxConfigBase::Write(key, value));}; { return(wxConfigBase::Write(key, value));};
virtual bool Write(const wxString& key, bool value) virtual bool Write(const wxString& key, bool value)
{ return(wxConfigBase::Write(key, value));}; { return(wxConfigBase::Write(key, value));};
virtual bool Write(const wxString& key, const char* value)
{ return(wxConfigBase::Write(key, value));};
}; };
#endif //_INICONF_H #endif //_INICONF_H

View File

@@ -14,7 +14,7 @@
#include "wx/object.h" #include "wx/object.h"
class WXDLLEXPORT wxTimer: public wxObject class WXDLLEXPORT wxTimer: public wxTimerBase
{ {
friend void wxProcessTimer(wxTimer& timer); friend void wxProcessTimer(wxTimer& timer);
@@ -22,22 +22,16 @@ public:
wxTimer(); wxTimer();
~wxTimer(); ~wxTimer();
virtual bool Start(int milliseconds = -1, virtual bool Start( int nMilliseconds = -1
bool one_shot = FALSE); // Start timer ,bool bOneShot = FALSE
virtual void Stop(); // Stop timer );
virtual void Stop(void);
virtual void Notify() = 0; // Override this member inline virtual bool IsRunning(void) const { return m_ulId != 0L; }
// Returns the current interval time (0 if stop)
int Interval() const { return milli; };
bool OneShot() const { return oneShot; }
protected: protected:
bool oneShot ; ULONG m_ulId;
int milli ; HAB m_Hab;
int lastMilli ;
long id;
private: private:
DECLARE_ABSTRACT_CLASS(wxTimer) DECLARE_ABSTRACT_CLASS(wxTimer)

View File

@@ -81,6 +81,12 @@ protected:
WXHBITMAP m_hBitmap; WXHBITMAP m_hBitmap;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
private:
//Virtual function hiding suppression
inline wxToolBarTool *AddTool(int toolIndex, const wxBitmap& bitmap, const wxBitmap& pushedBitmap = wxNullBitmap,
bool toggle = FALSE, wxCoord xPos = -1, wxCoord yPos = -1, wxObject *clientData = NULL,
const wxString& helpString1 = "", const wxString& helpString2 = "")
{ return(AddTool(toolIndex, bitmap, pushedBitmap, toggle, (long)xPos, (long)yPos, clientData, helpString1, helpString2)); }
}; };
#endif // wxUSE_TOOLBAR #endif // wxUSE_TOOLBAR

File diff suppressed because it is too large Load Diff

View File

@@ -67,7 +67,6 @@ List of files yet to be implemented. As you finish a file, delete it from the l
..\os2\$D\taskbar.obj \ ..\os2\$D\taskbar.obj \
..\os2\$D\textctrl.obj \ ..\os2\$D\textctrl.obj \
..\os2\$D\thread.obj \ ..\os2\$D\thread.obj \
..\os2\$D\timer.obj \
..\os2\$D\toolbar.obj \ ..\os2\$D\toolbar.obj \
..\os2\$D\tooltip.obj \ ..\os2\$D\tooltip.obj \
..\os2\$D\treectrl.obj \ ..\os2\$D\treectrl.obj \

View File

@@ -777,5 +777,10 @@ bool WXDLLEXPORT wxGuiOwnedByMainThread()
return s_bGuiOwnedByMainThread; return s_bGuiOwnedByMainThread;
} }
bool WXDLLEXPORT wxIsWaitingForThread()
{
return s_bWaitingForThread;
}
#endif #endif
// wxUSE_THREADS // wxUSE_THREADS

View File

@@ -37,7 +37,7 @@
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxList wxTimerList(wxKEY_INTEGER); wxList wxTimerList(wxKEY_INTEGER);
UINT wxTimerProc(HWND hwnd, WORD, int idTimer, DWORD); ULONG wxTimerProc(HWND hwnd, ULONG, int nIdTimer, ULONG);
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// macros // macros
@@ -49,9 +49,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
wxTimer::wxTimer() wxTimer::wxTimer()
{ {
milli = 0 ; m_ulId = 0;
id = 0;
oneShot = FALSE;
} }
wxTimer::~wxTimer() wxTimer::~wxTimer()
@@ -61,74 +59,84 @@ wxTimer::~wxTimer()
wxTimerList.DeleteObject(this); wxTimerList.DeleteObject(this);
} }
bool wxTimer::Start(int milliseconds,bool mode) bool wxTimer::Start(
int nMilliseconds
, bool bOneShot
)
{ {
oneShot = mode; (void)wxTimerBase::Start( nMilliseconds
if (milliseconds < 0) ,bOneShot
milliseconds = lastMilli; );
wxCHECK_MSG( milliseconds > 0, FALSE, wxT("invalid value for timer timeour") ); wxCHECK_MSG( m_milli > 0L, FALSE, wxT("invalid value for timer") );
lastMilli = milli = milliseconds;
wxTimerList.DeleteObject(this); wxTimerList.DeleteObject(this);
// TODO:
/*
TIMERPROC wxTimerProcInst = (TIMERPROC)
MakeProcInstance((FARPROC)wxTimerProc, wxGetInstance());
id = SetTimer(NULL, (UINT)(id ? id : 1), //
(UINT)milliseconds, wxTimerProcInst); // Create a windowless timer
*/ //
if (id > 0) m_ulId = ::WinStartTimer( m_Hab
,NULL
,(m_ulId ? m_ulId : 1L)
,(ULONG)nMilliseconds
);
if (m_ulId > 0L)
{ {
wxTimerList.Append(id, this); wxTimerList.Append( m_ulId
,this
return TRUE; );
return(TRUE);
} }
else else
{ {
wxLogSysError(_("Couldn't create a timer")); wxLogSysError(_("Couldn't create a timer"));
return FALSE; return(FALSE);
} }
} }
void wxTimer::Stop() void wxTimer::Stop()
{ {
if ( id ) if ( m_ulId )
{ {
// KillTimer(NULL, (UINT)id); ::WinStopTimer(m_Hab, NULL, m_ulId);
wxTimerList.DeleteObject(this); wxTimerList.DeleteObject(this);
} }
id = 0; m_ulId = 0L;
milli = 0;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// private functions // private functions
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxProcessTimer(wxTimer& timer) void wxProcessTimer(
wxTimer& rTimer
)
{ {
//
// Avoid to process spurious timer events // Avoid to process spurious timer events
if ( timer.id == 0) //
if (rTimer.m_ulId == 0L)
return; return;
if ( timer.oneShot ) if (rTimer.IsOneShot())
timer.Stop(); rTimer.Stop();
timer.Notify(); rTimer.Notify();
} }
UINT wxTimerProc(HWND WXUNUSED(hwnd), WORD, int idTimer, DWORD) ULONG wxTimerProc(
HWND WXUNUSED(hwnd)
, ULONG
, int nIdTimer
, ULONG
)
{ {
wxNode *node = wxTimerList.Find((long)idTimer); wxNode* pNode = wxTimerList.Find((ULONG)nIdTimer);
wxCHECK_MSG( node, 0, wxT("bogus timer id in wxTimerProc") ); wxCHECK_MSG(pNode, 0, wxT("bogus timer id in wxTimerProc") );
wxProcessTimer(*(wxTimer *)node->Data());
wxProcessTimer(*(wxTimer *)pNode->Data());
return 0; return 0;
} }