added (wxMSW-only) wxToolTip::SetMaxWidth() and improve its default behaviour (#2817)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58329 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-01-23 13:26:20 +00:00
parent 6063039441
commit be8b43858c
4 changed files with 198 additions and 97 deletions

View File

@@ -28,7 +28,10 @@
#if wxUSE_TOOLTIPS
#include "wx/tooltip.h"
#endif
#ifdef __WXMSW__
#include "wx/numdlg.h"
#endif // __WXMSW__
#endif // wxUSE_TOOLTIPS
#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
#define USE_XPM
@@ -75,6 +78,10 @@ public:
MyPanel(wxFrame *frame, int x, int y, int w, int h);
virtual ~MyPanel();
#if wxUSE_TOOLTIPS
void SetAllToolTips();
#endif // wxUSE_TOOLTIPS
void OnIdle( wxIdleEvent &event );
void OnListBox( wxCommandEvent &event );
void OnListBoxDoubleClick( wxCommandEvent &event );
@@ -187,6 +194,9 @@ public:
#if wxUSE_TOOLTIPS
void OnSetTooltipDelay(wxCommandEvent& event);
void OnToggleTooltips(wxCommandEvent& event);
#ifdef __WXMSW__
void OnSetMaxTooltipWidth(wxCommandEvent& event);
#endif // __WXMSW__
#endif // wxUSE_TOOLTIPS
void OnEnableAll(wxCommandEvent& event);
@@ -380,6 +390,7 @@ enum
// tooltip menu
CONTROLS_SET_TOOLTIP_DELAY = 200,
CONTROLS_ENABLE_TOOLTIPS,
CONTROLS_SET_TOOLTIPS_MAX_WIDTH,
// panel menu
CONTROLS_ENABLE_ALL,
@@ -455,7 +466,7 @@ const int ID_RADIOBOX_SEL_NUM = 161;
const int ID_RADIOBOX_SEL_STR = 162;
const int ID_RADIOBOX_FONT = 163;
const int ID_RADIOBOX_ENABLE = 164;
const int ID_RADIOBOX2 = 165;
const int ID_RADIOBUTTON_1 = 166;
const int ID_RADIOBUTTON_2 = 167;
@@ -530,6 +541,7 @@ EVT_BUTTON (ID_COMBO_FONT, MyPanel::OnComboButtons)
EVT_BUTTON (ID_COMBO_SET_TEXT, MyPanel::OnComboButtons)
EVT_CHECKBOX (ID_COMBO_ENABLE, MyPanel::OnComboButtons)
EVT_RADIOBOX (ID_RADIOBOX, MyPanel::OnRadio)
EVT_RADIOBOX (ID_RADIOBOX2, MyPanel::OnRadio)
EVT_BUTTON (ID_RADIOBOX_SEL_NUM, MyPanel::OnRadioButtons)
EVT_BUTTON (ID_RADIOBOX_SEL_STR, MyPanel::OnRadioButtons)
EVT_BUTTON (ID_RADIOBOX_FONT, MyPanel::OnRadioButtons)
@@ -745,9 +757,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
SetListboxClientData(wxT("listbox"), m_listboxSorted);
m_listbox->SetCursor(*wxCROSS_CURSOR);
#if wxUSE_TOOLTIPS
m_listbox->SetToolTip( _T("This is a list box") );
#endif // wxUSE_TOOLTIPS
m_lbSelectNum = new wxButton( panel, ID_LISTBOX_SEL_NUM, _T("Select #&2"), wxPoint(180,30), wxSize(140,30) );
m_lbSelectThis = new wxButton( panel, ID_LISTBOX_SEL_STR, _T("&Select 'This'"), wxPoint(340,30), wxSize(140,30) );
@@ -758,16 +767,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
button->SetDefault();
#if wxUSE_TOOLTIPS
button->SetToolTip( _T("Press here to set italic font") );
#endif // wxUSE_TOOLTIPS
m_checkbox = new wxCheckBox( panel, ID_LISTBOX_ENABLE, _T("&Disable"), wxPoint(20,170) );
m_checkbox->SetValue(false);
button->MoveAfterInTabOrder(m_checkbox);
#if wxUSE_TOOLTIPS
m_checkbox->SetToolTip( _T("Click here to disable the listbox") );
#endif // wxUSE_TOOLTIPS
(void)new wxCheckBox( panel, ID_CHANGE_COLOUR, _T("&Toggle colour"),
wxPoint(110,170) );
panel->SetCursor(wxCursor(wxCURSOR_HAND));
@@ -821,25 +823,14 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
};
panel = new wxPanel(m_book);
#if wxUSE_TOOLTIPS
wxRadioBox *radio2 =
#endif // wxUSE_TOOLTIPS
new MyRadioBox( panel, ID_RADIOBOX, _T("&That"), wxPoint(10,160), wxDefaultSize, WXSIZEOF(choices2), choices2, 1, wxRA_SPECIFY_ROWS );
m_radio = new wxRadioBox( panel, ID_RADIOBOX, _T("T&his"), wxPoint(10,10), wxDefaultSize, WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS );
#if wxUSE_TOOLTIPS
m_combo->SetToolTip(_T("This is a natural\ncombobox - can you believe me?"));
radio2->SetToolTip(_T("Ever seen a radiobox?"));
//m_radio->SetToolTip(_T("Tooltip for the entire radiobox"));
for ( unsigned int nb = 0; nb < WXSIZEOF(choices); nb++ )
{
m_radio->SetItemToolTip(nb, _T("tooltip for\n") + choices[nb]);
}
// remove the tooltip for one of the items
m_radio->SetItemToolTip(2, _T(""));
#endif // wxUSE_TOOLTIPS
new MyRadioBox(panel, ID_RADIOBOX2, _T("&That"),
wxPoint(10,160), wxDefaultSize,
WXSIZEOF(choices2), choices2,
1, wxRA_SPECIFY_ROWS );
m_radio = new wxRadioBox(panel, ID_RADIOBOX, _T("T&his"),
wxPoint(10,10), wxDefaultSize,
WXSIZEOF(choices), choices,
1, wxRA_SPECIFY_COLS );
#if wxUSE_HELP
for( unsigned int item = 0; item < WXSIZEOF(choices); ++item )
@@ -879,9 +870,6 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
wxDefaultPosition, wxSize(155,wxDefaultCoord),
wxSL_AUTOTICKS | wxSL_LABELS);
m_slider->SetTickFreq(40, 0);
#if wxUSE_TOOLTIPS
m_slider->SetToolTip(_T("This is a sliding slider"));
#endif // wxUSE_TOOLTIPS
sz->Add( m_slider, 0, wxALL, 10 );
m_gaugeVert = new wxGauge( panel, wxID_ANY, 100,
@@ -1074,8 +1062,48 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
sizer->Add(m_book, wxSizerFlags().Border().Expand());
sizer->Add(m_text, wxSizerFlags(1).Border().Expand());
SetSizer(sizer);
#if wxUSE_TOOLTIPS
SetAllToolTips();
#endif // wxUSE_TOOLTIPS
}
#if wxUSE_TOOLTIPS
namespace
{
void ResetToolTip(wxWindow *win, const char *tip)
{
wxCHECK_RET( win, "NULL window?" );
win->UnsetToolTip();
win->SetToolTip(tip);
}
}
void MyPanel::SetAllToolTips()
{
ResetToolTip(FindWindow(ID_LISTBOX_FONT), "Press here to set italic font");
ResetToolTip(m_checkbox, "Click here to disable the listbox");
ResetToolTip(m_listbox, "This is a list box");
ResetToolTip(m_combo, "This is a natural\ncombobox - can you believe me?");
ResetToolTip(m_slider, "This is a sliding slider");
ResetToolTip(FindWindow(ID_RADIOBOX2), "Ever seen a radiobox?");
//ResetToolTip(m_radio, "Tooltip for the entire radiobox");
for ( unsigned int nb = 0; nb < m_radio->GetCount(); nb++ )
{
m_radio->SetItemToolTip(nb, "");
m_radio->SetItemToolTip(nb, "tooltip for\n" + m_radio->GetString(nb));
}
// remove the tooltip for one of the items
m_radio->SetItemToolTip(2, "");
}
#endif // wxUSE_TOOLTIPS
void MyPanel::OnIdle(wxIdleEvent& event)
{
static const int INVALID_SELECTION = -2;
@@ -1741,6 +1769,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
#if wxUSE_TOOLTIPS
EVT_MENU(CONTROLS_SET_TOOLTIP_DELAY, MyFrame::OnSetTooltipDelay)
EVT_MENU(CONTROLS_ENABLE_TOOLTIPS, MyFrame::OnToggleTooltips)
#ifdef __WXMSW__
EVT_MENU(CONTROLS_SET_TOOLTIPS_MAX_WIDTH, MyFrame::OnSetMaxTooltipWidth)
#endif // __WXMSW__
#endif // wxUSE_TOOLTIPS
EVT_MENU(CONTROLS_ENABLE_ALL, MyFrame::OnEnableAll)
@@ -1787,6 +1818,9 @@ MyFrame::MyFrame(const wxChar *title, int x, int y)
tooltip_menu->Append(CONTROLS_ENABLE_TOOLTIPS, _T("&Toggle tooltips\tCtrl-T"),
_T("enable/disable tooltips"), true);
tooltip_menu->Check(CONTROLS_ENABLE_TOOLTIPS, true);
#ifdef __WXMSW__
tooltip_menu->Append(CONTROLS_SET_TOOLTIPS_MAX_WIDTH, "Set maximal &width");
#endif // __WXMSW__
menu_bar->Append(tooltip_menu, _T("&Tooltips"));
#endif // wxUSE_TOOLTIPS
@@ -1860,7 +1894,36 @@ void MyFrame::OnToggleTooltips(wxCommandEvent& WXUNUSED(event))
wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
}
#endif // tooltips
#ifdef __WXMSW__
void MyFrame::OnSetMaxTooltipWidth(wxCommandEvent& WXUNUSED(event))
{
static int s_maxWidth = 0;
wxNumberEntryDialog dlg
(
this,
"Change maximal tooltip width",
"&Width in pixels:",
GetTitle(),
s_maxWidth,
-1,
600
);
if ( dlg.ShowModal() == wxID_CANCEL )
return;
s_maxWidth = dlg.GetValue();
wxToolTip::SetMaxWidth(s_maxWidth);
// we need to set the tooltip again to test the new width
m_panel->SetAllToolTips();
}
#endif // __WXMSW__
#endif // wxUSE_TOOLTIPS
void MyFrame::OnEnableAll(wxCommandEvent& WXUNUSED(event))
{