X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b8b9d8a790b93e749cc886b4d63245de8cac74d2..894406521a0058c3e06b957f32564043f23ad231:/src/common/cshelp.cpp?ds=sidebyside diff --git a/src/common/cshelp.cpp b/src/common/cshelp.cpp index 2cc7626a4a..a7da4a1cf5 100644 --- a/src/common/cshelp.cpp +++ b/src/common/cshelp.cpp @@ -6,14 +6,14 @@ // Created: 08/09/2000 // RCS-ID: $Id$ // Copyright: (c) 2000 Julian Smart, Vadim Zeitlin -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "cshelp.h" #endif @@ -56,6 +56,8 @@ public: //// Data wxContextHelp* m_contextHelp; + + DECLARE_NO_COPY_CLASS(wxContextHelpEvtHandler) }; // ============================================================================ @@ -87,22 +89,26 @@ wxContextHelp::~wxContextHelp() EndContextHelp(); } +// Not currently needed, but on some systems capture may not work as +// expected so we'll leave it here for now. +#ifdef __WXMOTIF__ static void wxPushOrPopEventHandlers(wxContextHelp* help, wxWindow* win, bool push) { if (push) win->PushEventHandler(new wxContextHelpEvtHandler(help)); else - win->PopEventHandler(); + win->PopEventHandler(TRUE); - wxNode* node = win->GetChildren().First(); + wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); while (node) { - wxWindow* child = (wxWindow*) node->Data(); + wxWindow* child = node->GetData(); wxPushOrPopEventHandlers(help, child, push); - node = node->Next(); + node = node->GetNext(); } } +#endif // Begin 'context help mode' bool wxContextHelp::BeginContextHelp(wxWindow* win) @@ -122,8 +128,11 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) m_status = FALSE; -// win->PushEventHandler(new wxContextHelpEvtHandler(this)); +#ifdef __WXMOTIF__ wxPushOrPopEventHandlers(this, win, TRUE); +#else + win->PushEventHandler(new wxContextHelpEvtHandler(this)); +#endif win->CaptureMouse(); @@ -131,8 +140,11 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) win->ReleaseMouse(); -// win->PopEventHandler(TRUE); +#ifdef __WXMOTIF__ wxPushOrPopEventHandlers(this, win, FALSE); +#else + win->PopEventHandler(TRUE); +#endif win->SetCursor(oldCursor); @@ -140,14 +152,14 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) { wxPoint pt; wxWindow* winAtPtr = wxFindWindowAtPointer(pt); - /* + +#if 0 if (winAtPtr) { - wxString msg; - msg.Printf("Picked %s (%d)", (const char*) winAtPtr->GetName(), winAtPtr->GetId()); - cout << msg << '\n'; + printf("Picked %s (%d)\n", winAtPtr->GetName().c_str(), + winAtPtr->GetId()); } - */ +#endif if (winAtPtr) DispatchEvent(winAtPtr, pt); @@ -166,6 +178,7 @@ bool wxContextHelp::EndContextHelp() bool wxContextHelp::EventLoop() { m_inHelp = TRUE; + while ( m_inHelp ) { if (wxTheApp->Pending()) @@ -177,6 +190,7 @@ bool wxContextHelp::EventLoop() wxTheApp->ProcessIdle(); } } + return TRUE; } @@ -219,6 +233,7 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) { wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), pt) ; helpEvent.SetEventObject(this); + eventProcessed = win->GetEventHandler()->ProcessEvent(helpEvent); // Go up the window hierarchy until the event is handled (or not). @@ -239,7 +254,6 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) * to put the application into context help mode. */ -#if !defined(__WXMSW__) static const char * csquery_xpm[] = { "12 11 2 1", " c None", @@ -255,7 +269,6 @@ static const char * csquery_xpm[] = { " .. ", " .. ", " "}; -#endif IMPLEMENT_CLASS(wxContextHelpButton, wxBitmapButton) @@ -268,8 +281,15 @@ wxContextHelpButton::wxContextHelpButton(wxWindow* parent, const wxPoint& pos, const wxSize& size, long style) - : wxBitmapButton(parent, id, wxBITMAP(csquery), +#if defined(__WXPM__) + : wxBitmapButton(parent, id, wxBitmap(wxCSQUERY_BITMAP + ,wxBITMAP_TYPE_RESOURCE + ), + pos, size, style) +#else + : wxBitmapButton(parent, id, wxBitmap(csquery_xpm), pos, size, style) +#endif { } @@ -297,6 +317,11 @@ void wxHelpProvider::AddHelp(wxWindowID WXUNUSED(id), { } +// removes the association +void wxHelpProvider::RemoveHelp(wxWindowBase* WXUNUSED(window)) +{ +} + wxHelpProvider::~wxHelpProvider() { } @@ -307,22 +332,34 @@ wxHelpProvider::~wxHelpProvider() wxString wxSimpleHelpProvider::GetHelp(const wxWindowBase *window) { - bool wasFound; - wxString text = m_hashWindows.Get((long)window, &wasFound); - if ( !wasFound ) - text = m_hashIds.Get(window->GetId()); + wxLongToStringHashMap::iterator it = m_hashWindows.find((long)window); + + if ( it == m_hashWindows.end() ) + { + it = m_hashIds.find(window->GetId()); + if ( it == m_hashIds.end() ) + return wxEmptyString; + } - return text; + return it->second; } void wxSimpleHelpProvider::AddHelp(wxWindowBase *window, const wxString& text) { - m_hashWindows.Put((long)window, text); + m_hashWindows.erase((long)window); + m_hashWindows[(long)window] = text; } void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text) { - m_hashIds.Put(id, text); + m_hashIds.erase((long)id); + m_hashIds[id] = text; +} + +// removes the association +void wxSimpleHelpProvider::RemoveHelp(wxWindowBase* window) +{ + m_hashWindows.erase((long)window); } bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window) @@ -390,7 +427,7 @@ bool wxHelpControllerHelpProvider::ShowHelp(wxWindowBase *window) // Convenience function for turning context id into wxString wxString wxContextId(int id) { - return wxString(IntToString(id)); + return wxString::Format(_T("%d"), id); } // ----------------------------------------------------------------------------