1. added wxHelpProvider and (unfinished) wxSimpleHelpProvider

2. added wxStringHashTable which wxStringHashTable uses


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8316 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-09-10 12:43:37 +00:00
parent 6b6267d320
commit bd83cb56d2
8 changed files with 449 additions and 58 deletions

View File

@@ -1,11 +1,11 @@
/////////////////////////////////////////////////////////////////////////////
// Name: cshelp.h
// Purpose: Context-sensitive help classes
// Author: Julian Smart
// Name: wx/cshelp.h
// Purpose: Context-sensitive help support classes
// 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
/////////////////////////////////////////////////////////////////////////////
@@ -13,7 +13,7 @@
#define _WX_CSHELPH__
#ifdef __GNUG__
#pragma interface "cshelp.h"
#pragma interface "cshelp.h"
#endif
#include "wx/defs.h"
@@ -22,6 +22,10 @@
#include "wx/bmpbuttn.h"
// ----------------------------------------------------------------------------
// classes used to implement context help UI
// ----------------------------------------------------------------------------
/*
* wxContextHelp
* Invokes context-sensitive help. When the user
@@ -29,12 +33,11 @@
* window for the application to display help for.
*/
class WXDLLEXPORT wxContextHelp: public wxObject
class WXDLLEXPORT wxContextHelp : public wxObject
{
DECLARE_DYNAMIC_CLASS(wxContextHelp)
public:
wxContextHelp(wxWindow* win = NULL, bool beginHelp = TRUE);
~wxContextHelp();
virtual ~wxContextHelp();
bool BeginContextHelp(wxWindow* win);
bool EndContextHelp();
@@ -45,9 +48,11 @@ public:
void SetStatus(bool status) { m_status = status; }
protected:
bool m_inHelp;
bool m_status; // TRUE if the user left-clicked
private:
DECLARE_DYNAMIC_CLASS(wxContextHelp)
};
/*
@@ -56,19 +61,95 @@ protected:
* to put the application into context help mode.
*/
class WXDLLEXPORT wxContextHelpButton: public wxBitmapButton
class WXDLLEXPORT wxContextHelpButton : public wxBitmapButton
{
public:
wxContextHelpButton(wxWindow* parent, wxWindowID id = wxID_CONTEXT_HELP,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(20, -1),
long style = wxBU_AUTODRAW);
wxContextHelpButton(wxWindow* parent,
wxWindowID id = wxID_CONTEXT_HELP,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxBU_AUTODRAW);
void OnContextHelp(wxCommandEvent& event);
private:
DECLARE_CLASS(wxContextHelpButton)
DECLARE_EVENT_TABLE()
};
#endif // wxUSE_HELP
#endif
// _WX_CSHELPH__
// ----------------------------------------------------------------------------
// classes used to implement context help support
// ----------------------------------------------------------------------------
// wxHelpProvider is an ABC used by the program implementing context help to
// show the help text (or whatever: it may be HTML page or anything else) for
// the given window.
//
// The current help provider must be explicitly set by the application using
// wxHelpProvider::Set().
class WXDLLEXPORT wxHelpProvider
{
public:
// get/set the current (application-global) help provider (Set() returns
// the previous one)
static wxHelpProvider *Set(wxHelpProvider *helpProvider)
{
wxHelpProvider *helpProviderOld = ms_helpProvider;
ms_helpProvider = helpProvider;
return helpProviderOld;
}
// unlike some other class, the help provider is not created on demand,
// this must be explicitly done by the application
static wxHelpProvider *Get() { return ms_helpProvider; }
// get the help string (whose interpretation is help provider dependent
// except that empty string always means that no help is associated with
// the window) for this window
virtual wxString GetHelp(const wxWindowBase *window) = 0;
// do show help for the given window (uses GetHelp() internally if
// applicable), return TRUE if it was done or FALSE if no help available
// for this window
virtual bool ShowHelp(wxWindowBase *window) = 0;
// associate the text with the given window or id: although all help
// providers have these functions to allow making wxWindow::SetHelpText()
// work, not all of them implement them
virtual void AddHelp(wxWindowBase *window, const wxString& text);
// this version associates the given text with all window with this id
// (may be used to set the same help string for all [Cancel] buttons in
// the application, for example)
virtual void AddHelp(wxWindowID id, const wxString& text);
// virtual dtor for any base class
virtual ~wxHelpProvider();
private:
static wxHelpProvider *ms_helpProvider;
};
// wxSimpleHelpProvider is an implementation of wxHelpProvider which supports
// only plain text help strings and shows the string associated with the
// control (if any) in a tooltip
class WXDLLEXPORT wxSimpleHelpProvider : public wxHelpProvider
{
public:
// implement wxHelpProvider methods
virtual wxString GetHelp(const wxWindowBase *window);
virtual bool ShowHelp(wxWindowBase *window);
virtual void AddHelp(wxWindowBase *window, const wxString& text);
virtual void AddHelp(wxWindowID id, const wxString& text);
protected:
// we use 2 hashes for storing the help strings associated with windows
// and the ids
wxStringHashTable m_hashWindows,
m_hashIds;
};
#endif // _WX_CSHELPH__

View File

@@ -1,11 +1,11 @@
/////////////////////////////////////////////////////////////////////////////
// Name: event.h
// Name: wx/event.h
// Purpose: Event classes
// Author: Julian Smart
// Modified by:
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c)
// Copyright: (c) wxWindows team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
@@ -1404,35 +1404,43 @@ public:
wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); }
};
// A help event is sent when the user clicks on a window in context-help mode.
/*
wxEVT_HELP, wxEVT_DETAILED_HELP
Sent when the user clicks on a window in context-help mode.
The cursor position is in screen coordinates.
*/
wxEVT_HELP
wxEVT_DETAILED_HELP
*/
class WXDLLEXPORT wxHelpEvent : public wxCommandEvent
{
DECLARE_DYNAMIC_CLASS(wxHelpEvent)
public:
wxHelpEvent(wxEventType type = wxEVT_NULL, wxWindowID id = 0, const wxPoint& pt = wxPoint(0, 0))
{ m_eventType = type; m_id = id; m_pos = pt; }
wxHelpEvent(wxEventType type = wxEVT_NULL,
wxWindowID id = 0,
const wxPoint& pt = wxDefaultPosition)
{
m_eventType = type;
m_id = id;
m_pos = pt;
}
// Position of event
const wxPoint& GetPosition() const { return m_pos; }
void SetPosition(const wxPoint& pos) { m_pos = pos; }
// Position of event (in screen coordinates)
const wxPoint& GetPosition() const { return m_pos; }
void SetPosition(const wxPoint& pos) { m_pos = pos; }
// Optional link to further help
const wxString& GetLink() const { return m_link; }
void SetLink(const wxString& link) { m_link = link; }
// Optional link to further help
const wxString& GetLink() const { return m_link; }
void SetLink(const wxString& link) { m_link = link; }
// Optional target to display help in. E.g. a window specification
const wxString& GetTarget() const { return m_target; }
void SetTarget(const wxString& target) { m_target = target; }
// Optional target to display help in. E.g. a window specification
const wxString& GetTarget() const { return m_target; }
void SetTarget(const wxString& target) { m_target = target; }
wxPoint m_pos;
wxString m_target;
wxString m_link;
protected:
wxPoint m_pos;
wxString m_target;
wxString m_link;
private:
DECLARE_DYNAMIC_CLASS(wxHelpEvent)
};
#endif // wxUSE_GUI

View File

@@ -109,6 +109,36 @@ private:
DECLARE_NO_COPY_CLASS(wxHashTableLong);
};
// ----------------------------------------------------------------------------
// wxStringHashTable: a hash table which indexes strings with longs
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxStringHashTable : public wxObject
{
public:
wxStringHashTable(size_t sizeTable = wxHASH_SIZE_DEFAULT);
virtual ~wxStringHashTable();
// add a string associated with this key to the table
void Put(long key, const wxString& value);
// get the string from the key: if not found, an empty string is returned
// and the wasFound is set to FALSE if not NULL
wxString Get(long key, bool *wasFound = NULL) const;
// clean up
void Destroy();
private:
wxArrayLong **m_keys;
wxArrayString **m_values;
// the size of array above
size_t m_hashSize;
DECLARE_NO_COPY_CLASS(wxStringHashTable);
};
// ----------------------------------------------------------------------------
// for compatibility only
// ----------------------------------------------------------------------------

View File

@@ -579,8 +579,24 @@ public:
virtual void ScrollWindow( int dx, int dy,
const wxRect* rect = (wxRect *) NULL ) = 0;
// context-sensitive help
// ----------------------
// these are the convenience functions wrapping wxHelpProvider methods
#if wxUSE_HELP
// associate this help text with this window
void SetHelpText(const wxString& text);
// associate this help text with all windows with the same id as this
// one
void SetHelpTextForId(const wxString& text);
// get the help string associated with this window (may be empty)
wxString GetHelpText() const;
#endif // wxUSE_HELP
// tooltips
// --------
#if wxUSE_TOOLTIPS
// the easiest way to set a tooltip for a window is to use this method
void SetToolTip( const wxString &tip );
@@ -661,6 +677,9 @@ public:
void OnSysColourChanged( wxSysColourChangedEvent& event );
void OnInitDialog( wxInitDialogEvent &event );
void OnMiddleClick( wxMouseEvent& event );
#if wxUSE_HELP
void OnHelp(wxHelpEvent& event);
#endif // wxUSE_HELP
// get the haqndle of the window for the underlying window system: this
// is only used for wxWin itself or for user code which wants to call