X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb6261e9ba8b162347135a9174afbc81244b10cc..80d2803f703d1b238f42725504f08266ef02defe:/src/common/cshelp.cpp diff --git a/src/common/cshelp.cpp b/src/common/cshelp.cpp index fe75524bb8..7917ac2c6f 100644 --- a/src/common/cshelp.cpp +++ b/src/common/cshelp.cpp @@ -1,41 +1,49 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cshelp.cpp +// Name: src/common/cshelp.cpp // Purpose: Context sensitive help class implementation -// Author: Julian Smart +// Author: Julian Smart, Vadim Zeitlin // Modified by: // Created: 08/09/2000 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart +// Copyright: (c) 2000 Julian Smart, Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + #ifdef __GNUG__ -#pragma implementation "cshelp.h" + #pragma implementation "cshelp.h" #endif +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_HELP + #ifndef WX_PRECOMP -#include "wx/defs.h" #endif +#include "wx/tipwin.h" #include "wx/app.h" - -#if wxUSE_HELP - +#include "wx/module.h" #include "wx/cshelp.h" -/* - * Invokes context-sensitive help - */ +// ---------------------------------------------------------------------------- +// wxContextHelpEvtHandler private class +// ---------------------------------------------------------------------------- -// This class exists in order to eat events until the left mouse -// button is pressed +// This class exists in order to eat events until the left mouse button is +// pressed class wxContextHelpEvtHandler: public wxEvtHandler { public: @@ -50,6 +58,19 @@ public: wxContextHelp* m_contextHelp; }; +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxContextHelp +// ---------------------------------------------------------------------------- + +/* + * Invokes context-sensitive help + */ + + IMPLEMENT_DYNAMIC_CLASS(wxContextHelp, wxObject) wxContextHelp::wxContextHelp(wxWindow* win, bool beginHelp) @@ -182,6 +203,10 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) return eventProcessed; } +// ---------------------------------------------------------------------------- +// wxContextHelpButton +// ---------------------------------------------------------------------------- + /* * wxContextHelpButton * You can add this to your dialogs (especially on non-Windows platforms) @@ -191,8 +216,8 @@ bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) #if !defined(__WXMSW__) static char * csquery_xpm[] = { "12 11 2 1", -" c None", -". c Black", +" c None", +". c #000000", " ", " .... ", " .. .. ", @@ -212,23 +237,113 @@ BEGIN_EVENT_TABLE(wxContextHelpButton, wxBitmapButton) EVT_BUTTON(wxID_CONTEXT_HELP, wxContextHelpButton::OnContextHelp) END_EVENT_TABLE() -wxContextHelpButton::wxContextHelpButton(wxWindow* parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, - long style): - wxBitmapButton(parent, id, wxNullBitmap, pos, size, style) +wxContextHelpButton::wxContextHelpButton(wxWindow* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style) + : wxBitmapButton(parent, id, wxBITMAP(csquery), + pos, size, style) { -#ifdef __WXMSW__ - wxBitmap bitmap(wxT("csquery_bmp"), wxBITMAP_TYPE_BMP_RESOURCE); -#else - wxBitmap bitmap(csquery_xpm); -#endif - - SetBitmapLabel(bitmap); } void wxContextHelpButton::OnContextHelp(wxCommandEvent& event) { - wxContextHelp contextHelp; + wxContextHelp contextHelp(GetParent()); +} + +// ---------------------------------------------------------------------------- +// wxHelpProvider +// ---------------------------------------------------------------------------- + +wxHelpProvider *wxHelpProvider::ms_helpProvider = (wxHelpProvider *)NULL; + +// trivial implementation of some methods which we don't want to make pure +// virtual for convenience + +void wxHelpProvider::AddHelp(wxWindowBase * WXUNUSED(window), + const wxString& WXUNUSED(text)) +{ +} + +void wxHelpProvider::AddHelp(wxWindowID WXUNUSED(id), + const wxString& WXUNUSED(text)) +{ +} + +wxHelpProvider::~wxHelpProvider() +{ +} + +// ---------------------------------------------------------------------------- +// wxSimpleHelpProvider +// ---------------------------------------------------------------------------- + +wxString wxSimpleHelpProvider::GetHelp(const wxWindowBase *window) +{ + bool wasFound; + wxString text = m_hashWindows.Get((long)window, &wasFound); + if ( !wasFound ) + text = m_hashIds.Get(window->GetId()); + + return text; +} + +void wxSimpleHelpProvider::AddHelp(wxWindowBase *window, const wxString& text) +{ + m_hashWindows.Put((long)window, text); +} + +void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text) +{ + m_hashIds.Put(id, text); +} + +bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window) +{ + wxString text = GetHelp(window); + if ( !text.empty() ) + { + new wxTipWindow((wxWindow *)window, text); + + return TRUE; + } + + return FALSE; +} + +// ---------------------------------------------------------------------------- +// wxHelpProviderModule: module responsible for cleaning up help provider. +// ---------------------------------------------------------------------------- + +class wxHelpProviderModule : public wxModule +{ +public: + bool OnInit(); + void OnExit(); + +private: + DECLARE_DYNAMIC_CLASS(wxHelpProviderModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxHelpProviderModule, wxModule) + +bool wxHelpProviderModule::OnInit() +{ + // Probably we don't want to do anything by default, + // since it could pull in extra code + // wxHelpProvider::Set(new wxSimpleHelpProvider); + + return TRUE; +} + +void wxHelpProviderModule::OnExit() +{ + if (wxHelpProvider::Get()) + { + delete wxHelpProvider::Get(); + wxHelpProvider::Set(NULL); + } } #endif // wxUSE_HELP