/////////////////////////////////////////////////////////////////////////////
-// Name: richtextsymboldlg.cpp
+// Name: src/richtext/richtextsymboldlg.cpp
// Purpose:
// Author: Julian Smart
// Modified by:
// Created: 10/5/2006 3:11:58 PM
-// RCS-ID:
+// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence:
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
#if wxUSE_RICHTEXT
#include "wx/richtext/richtextsymboldlg.h"
#ifndef WX_PRECOMP
-#include "wx/wx.h"
+ #include "wx/sizer.h"
+ #include "wx/stattext.h"
+ #include "wx/combobox.h"
+ #include "wx/button.h"
+ #include "wx/settings.h"
+ #include "wx/icon.h"
+ #include "wx/listbox.h"
#endif
-////@begin includes
-////@end includes
-
-#include "wx/fontenum.h"
#include "wx/dcbuffer.h"
-#include "wx/settings.h"
-////@begin XPM images
-////@end XPM images
+// Only for cached font name
+#include "wx/richtext/richtextctrl.h"
/* Microsoft Unicode subset numbering
*/
{
int m_low, m_high;
wxUnicodeSubsetCodes m_subset;
- wxChar* m_name;
+ const wxChar* m_name;
} g_UnicodeSubsetTable[] =
{
{ 0x0000, 0x007E,
}
#endif
+bool wxSymbolPickerDialog::sm_showToolTips = false;
+
/*!
* wxSymbolPickerDialog type definition
*/
#if defined(__UNICODE__)
EVT_COMBOBOX( ID_SYMBOLPICKERDIALOG_SUBSET, wxSymbolPickerDialog::OnSubsetSelected )
+ EVT_UPDATE_UI( ID_SYMBOLPICKERDIALOG_SUBSET, wxSymbolPickerDialog::OnSymbolpickerdialogSubsetUpdate )
#endif
#if defined(__UNICODE__)
EVT_COMBOBOX( ID_SYMBOLPICKERDIALOG_FROM, wxSymbolPickerDialog::OnFromUnicodeSelected )
#endif
-#if defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXOS2__) || defined(__WXMGL__) || defined(__WXMOTIF__) || defined(__WXCOCOA__) || defined(__WXX11__) || defined(__WXPALMOS__)
EVT_UPDATE_UI( wxID_OK, wxSymbolPickerDialog::OnOkUpdate )
-#endif
-
-#if defined(__WXMAC__)
- EVT_UPDATE_UI( wxID_OK, wxSymbolPickerDialog::OnOkUpdate )
-#endif
////@end wxSymbolPickerDialog event table entries
END_EVENT_TABLE()
+IMPLEMENT_HELP_PROVISION(wxSymbolPickerDialog)
+
/*!
* wxSymbolPickerDialog constructors
*/
m_symbol = symbol;
////@begin wxSymbolPickerDialog creation
- SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS|wxDIALOG_EX_CONTEXTHELP);
+ SetExtraStyle(wxWS_EX_BLOCK_EVENTS|wxDIALOG_EX_CONTEXTHELP);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
#if defined(__UNICODE__)
m_fromUnicodeCtrl = NULL;
#endif
+ m_stdButtonSizer = NULL;
////@end wxSymbolPickerDialog member initialisation
m_dontUpdate = false;
}
void wxSymbolPickerDialog::CreateControls()
{
+#ifdef __WXMAC__
+ SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+#endif
+
////@begin wxSymbolPickerDialog content construction
wxSymbolPickerDialog* itemDialog1 = this;
itemBoxSizer4->Add(itemBoxSizer5, 1, wxGROW, 5);
wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("&Font:"), wxDefaultPosition, wxDefaultSize, 0 );
- itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE, 5);
+ itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxString* m_fontCtrlStrings = NULL;
- m_fontCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_FONT, _T(""), wxDefaultPosition, wxSize(240, -1), 0, m_fontCtrlStrings, wxCB_READONLY );
+ wxArrayString m_fontCtrlStrings;
+ m_fontCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_FONT, wxEmptyString, wxDefaultPosition, wxSize(240, -1), m_fontCtrlStrings, wxCB_READONLY );
+ m_fontCtrl->SetHelpText(_("The font from which to take the symbol."));
+ if (wxSymbolPickerDialog::ShowToolTips())
+ m_fontCtrl->SetToolTip(_("The font from which to take the symbol."));
itemBoxSizer5->Add(m_fontCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemBoxSizer5->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#if defined(__UNICODE__)
wxStaticText* itemStaticText9 = new wxStaticText( itemDialog1, wxID_STATIC, _("&Subset:"), wxDefaultPosition, wxDefaultSize, 0 );
- itemBoxSizer5->Add(itemStaticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE, 5);
+ itemBoxSizer5->Add(itemStaticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
#if defined(__UNICODE__)
- wxString* m_subsetCtrlStrings = NULL;
- m_subsetCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_SUBSET, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_subsetCtrlStrings, wxCB_READONLY );
+ wxArrayString m_subsetCtrlStrings;
+ m_subsetCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_SUBSET, wxEmptyString, wxDefaultPosition, wxDefaultSize, m_subsetCtrlStrings, wxCB_READONLY );
m_subsetCtrl->SetHelpText(_("Shows a Unicode subset."));
- if (ShowToolTips())
+ if (wxSymbolPickerDialog::ShowToolTips())
m_subsetCtrl->SetToolTip(_("Shows a Unicode subset."));
itemBoxSizer5->Add(m_subsetCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
- m_symbolsCtrl = new wxSymbolListCtrl( itemDialog1, ID_SYMBOLPICKERDIALOG_LISTCTRL, wxDefaultPosition, wxSize(500, 240), wxSIMPLE_BORDER );
+ m_symbolsCtrl = new wxSymbolListCtrl( itemDialog1, ID_SYMBOLPICKERDIALOG_LISTCTRL, wxDefaultPosition, wxSize(500, 200), 0 );
itemBoxSizer3->Add(m_symbolsCtrl, 1, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer3->Add(itemBoxSizer12, 0, wxGROW, 5);
m_symbolStaticCtrl = new wxStaticText( itemDialog1, wxID_STATIC, _("xxxx"), wxDefaultPosition, wxSize(40, -1), wxALIGN_CENTRE );
- itemBoxSizer12->Add(m_symbolStaticCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE, 5);
+ itemBoxSizer12->Add(m_symbolStaticCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemBoxSizer12->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText15 = new wxStaticText( itemDialog1, wxID_STATIC, _("&Character code:"), wxDefaultPosition, wxDefaultSize, 0 );
- itemBoxSizer12->Add(itemStaticText15, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE, 5);
+ itemBoxSizer12->Add(itemStaticText15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
- m_characterCodeCtrl = new wxTextCtrl( itemDialog1, ID_SYMBOLPICKERDIALOG_CHARACTERCODE, _T(""), wxDefaultPosition, wxSize(140, -1), wxTE_READONLY|wxTE_CENTRE );
+ m_characterCodeCtrl = new wxTextCtrl( itemDialog1, ID_SYMBOLPICKERDIALOG_CHARACTERCODE, wxEmptyString, wxDefaultPosition, wxSize(140, -1), wxTE_READONLY|wxTE_CENTRE );
+ m_characterCodeCtrl->SetHelpText(_("The character code."));
+ if (wxSymbolPickerDialog::ShowToolTips())
+ m_characterCodeCtrl->SetToolTip(_("The character code."));
itemBoxSizer12->Add(m_characterCodeCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemBoxSizer12->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#if defined(__UNICODE__)
wxStaticText* itemStaticText18 = new wxStaticText( itemDialog1, wxID_STATIC, _("&From:"), wxDefaultPosition, wxDefaultSize, 0 );
- itemBoxSizer12->Add(itemStaticText18, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE, 5);
+ itemBoxSizer12->Add(itemStaticText18, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
#if defined(__UNICODE__)
- wxString m_fromUnicodeCtrlStrings[] = {
- _("ASCII"),
- _("Unicode")
- };
- m_fromUnicodeCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_FROM, _("ASCII"), wxDefaultPosition, wxDefaultSize, 2, m_fromUnicodeCtrlStrings, wxCB_READONLY );
- m_fromUnicodeCtrl->SetStringSelection(_("ASCII"));
+ wxArrayString m_fromUnicodeCtrlStrings;
+ m_fromUnicodeCtrlStrings.Add(_("ASCII"));
+ m_fromUnicodeCtrlStrings.Add(_("Unicode"));
+ m_fromUnicodeCtrl = new wxComboBox( itemDialog1, ID_SYMBOLPICKERDIALOG_FROM, _("Unicode"), wxDefaultPosition, wxDefaultSize, m_fromUnicodeCtrlStrings, wxCB_READONLY );
+ m_fromUnicodeCtrl->SetStringSelection(_("Unicode"));
+ m_fromUnicodeCtrl->SetHelpText(_("The range to show."));
+ if (wxSymbolPickerDialog::ShowToolTips())
+ m_fromUnicodeCtrl->SetToolTip(_("The range to show."));
itemBoxSizer12->Add(m_fromUnicodeCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
-#if defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXOS2__) || defined(__WXMGL__) || defined(__WXMOTIF__) || defined(__WXCOCOA__) || defined(__WXX11__) || defined(__WXPALMOS__)
- wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxHORIZONTAL);
- itemBoxSizer3->Add(itemBoxSizer20, 0, wxGROW, 5);
-
- itemBoxSizer20->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+ m_stdButtonSizer = new wxStdDialogButtonSizer;
- wxButton* itemButton22 = new wxButton( itemDialog1, wxID_OK, _("Insert"), wxDefaultPosition, wxDefaultSize, 0 );
- itemButton22->SetDefault();
- itemButton22->SetHelpText(_("Inserts the chosen symbol."));
- if (ShowToolTips())
- itemButton22->SetToolTip(_("Inserts the chosen symbol."));
- itemBoxSizer20->Add(itemButton22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
-
- wxButton* itemButton23 = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
- itemButton23->SetHelpText(_("Closes the dialog without inserting a symbol."));
- if (ShowToolTips())
- itemButton23->SetToolTip(_("Closes the dialog without inserting a symbol."));
- itemBoxSizer20->Add(itemButton23, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
-
-#endif
+ itemBoxSizer3->Add(m_stdButtonSizer, 0, wxGROW|wxTOP|wxBOTTOM, 5);
+ wxButton* itemButton21 = new wxButton( itemDialog1, wxID_OK, _("Insert"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemButton21->SetDefault();
+ m_stdButtonSizer->AddButton(itemButton21);
-#if defined(__WXMAC__)
- wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxHORIZONTAL);
- itemBoxSizer3->Add(itemBoxSizer24, 0, wxGROW, 5);
+ wxButton* itemButton22 = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stdButtonSizer->AddButton(itemButton22);
- itemBoxSizer24->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+ wxButton* itemButton23 = new wxButton( itemDialog1, wxID_HELP, _("&Help"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stdButtonSizer->AddButton(itemButton23);
- wxButton* itemButton26 = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
- itemButton26->SetHelpText(_("Closes the dialog without inserting a symbol."));
- if (ShowToolTips())
- itemButton26->SetToolTip(_("Closes the dialog without inserting a symbol."));
- itemBoxSizer24->Add(itemButton26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
-
- wxButton* itemButton27 = new wxButton( itemDialog1, wxID_OK, _("Insert"), wxDefaultPosition, wxDefaultSize, 0 );
- itemButton27->SetDefault();
- itemButton27->SetHelpText(_("Inserts the chosen symbol."));
- if (ShowToolTips())
- itemButton27->SetToolTip(_("Inserts the chosen symbol."));
- itemBoxSizer24->Add(itemButton27, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
-
-#endif
+ m_stdButtonSizer->Realize();
////@end wxSymbolPickerDialog content construction
+ if (GetHelpId() == -1)
+ {
+ wxWindow* button = FindWindowById(wxID_HELP);
+ if (button)
+ m_stdButtonSizer->Show(button, false);
+ }
}
/// Data transfer
if (m_fontCtrl->GetCount() == 0)
{
- wxArrayString faceNames = wxFontEnumerator::GetFacenames();
+ wxArrayString faceNames = wxRichTextCtrl::GetAvailableFontNames();
faceNames.Sort();
faceNames.Insert(_("(Normal text)"), 0);
m_fontCtrl->Append(faceNames);
}
- if (m_fontName.IsEmpty())
+ if (m_fontName.empty())
m_fontCtrl->SetSelection(0);
else
{
m_fontCtrl->SetSelection(0);
}
- if (!m_symbol.IsEmpty())
- {
- int sel = (int) m_symbol[0];
- m_symbolsCtrl->SetSelection(sel);
- }
-
#if defined(__UNICODE__)
if (m_subsetCtrl->GetCount() == 0)
{
// Insert items into subset combo
int i;
- for (i = 0; i < (int) (sizeof(g_UnicodeSubsetTable)/sizeof(g_UnicodeSubsetTable[0])); i++)
+ for (i = 0; i < (int) WXSIZEOF(g_UnicodeSubsetTable); i++)
{
m_subsetCtrl->Append(g_UnicodeSubsetTable[i].m_name);
}
}
#endif
- UpdateSymbolDisplay();
+#if defined(__UNICODE__)
+ m_symbolsCtrl->SetUnicodeMode(m_fromUnicode);
+#endif
+
+ if (!m_symbol.empty())
+ {
+ int sel = (int) m_symbol[0];
+ m_symbolsCtrl->SetSelection(sel);
+ }
+
+ UpdateSymbolDisplay(true, m_symbol.empty());
m_dontUpdate = false;
{
wxFont font;
wxString fontNameToUse;
- if (m_fontName.IsEmpty())
+ if (m_fontName.empty())
fontNameToUse = m_normalTextFontName;
else
fontNameToUse = m_fontName;
- if (!fontNameToUse.IsEmpty())
+ if (!fontNameToUse.empty())
{
font = wxFont(14, wxDEFAULT, wxNORMAL, wxNORMAL, false, fontNameToUse);
}
m_symbolsCtrl->SetFont(font);
}
- if (!m_symbol.IsEmpty())
+ if (!m_symbol.empty())
{
m_symbolStaticCtrl->SetFont(font);
m_symbolStaticCtrl->SetLabel(m_symbol);
return;
int sel = event.GetSelection();
- if (sel == -1)
+ if (sel == wxNOT_FOUND)
m_symbol = wxEmptyString;
else
{
{
// Need to make the subset selection reflect the current symbol
int i;
- for (i = 0; i < (int) (sizeof(g_UnicodeSubsetTable)/sizeof(g_UnicodeSubsetTable[0])); i++)
+ for (i = 0; i < (int) WXSIZEOF(g_UnicodeSubsetTable); i++)
{
if (sel >= g_UnicodeSubsetTable[i].m_low && sel <= g_UnicodeSubsetTable[i].m_high)
{
}
#endif
+#if defined(__UNICODE__)
+
+/*!
+ * wxEVT_UPDATE_UI event handler for ID_SYMBOLPICKERDIALOG_SUBSET
+ */
+
+void wxSymbolPickerDialog::OnSymbolpickerdialogSubsetUpdate( wxUpdateUIEvent& event )
+{
+ event.Enable(m_fromUnicode);
+}
+#endif
+
/*!
* wxEVT_UPDATE_UI event handler for wxID_OK
*/
/// Get the selected symbol character
int wxSymbolPickerDialog::GetSymbolChar() const
{
- if (m_symbol.IsEmpty())
+ if (m_symbol.empty())
return -1;
else
return (int) m_symbol[0];
}
-/*!
- * Should we show tooltips?
- */
-
-bool wxSymbolPickerDialog::ShowToolTips()
-{
- return true;
-}
-
/*!
* Get bitmap resources
*/
const wxString& name)
{
style |= wxWANTS_CHARS | wxFULL_REPAINT_ON_RESIZE;
+
+ if ((style & wxBORDER_MASK) == wxBORDER_DEFAULT)
+ style |= wxBORDER_THEME;
+
if ( !wxVScrolledWindow::Create(parent, id, pos, size, style, name) )
return false;
SetupCtrl();
+ SetInitialSize(size);
+
return true;
}
{
wxASSERT_MSG( current == wxNOT_FOUND ||
(current >= m_minSymbolValue && current <= m_maxSymbolValue),
- _T("wxSymbolListCtrl::DoSetCurrent(): invalid symbol value") );
+ wxT("wxSymbolListCtrl::DoSetCurrent(): invalid symbol value") );
if ( current == m_current )
{
}
if ( m_current != wxNOT_FOUND )
- RefreshLine(SymbolValueToLineNumber(m_current));
+ RefreshRow(SymbolValueToLineNumber(m_current));
m_current = current;
// don't need to refresh it -- it will be redrawn anyhow
if ( !IsVisible(lineNo) )
{
- ScrollToLine(lineNo);
+ ScrollToRow(lineNo);
}
else // line is at least partly visible
{
// it is, indeed, only partly visible, so scroll it into view to
// make it entirely visible
- while ( unsigned(lineNo) == GetLastVisibleLine() &&
- ScrollToLine(GetVisibleBegin()+1) )
+ while ( (unsigned)lineNo + 1 == GetVisibleEnd() &&
+ ScrollToRow(GetVisibleBegin() + 1) )
;
// but in any case refresh it as even if it was only partly visible
// before we need to redraw it entirely as its background changed
- RefreshLine(lineNo);
+ RefreshRow(lineNo);
}
}
{
wxCHECK_RET( selection == wxNOT_FOUND ||
(selection >= m_minSymbolValue && selection < m_maxSymbolValue),
- _T("wxSymbolListCtrl::SetSelection(): invalid symbol value") );
+ wxT("wxSymbolListCtrl::SetSelection(): invalid symbol value") );
DoSetCurrent(selection);
}
// wxSymbolListCtrl painting
// ----------------------------------------------------------------------------
-wxCoord wxSymbolListCtrl::OnGetLineHeight(size_t WXUNUSED(line)) const
+wxCoord wxSymbolListCtrl::OnGetRowHeight(size_t WXUNUSED(line)) const
{
return m_cellSize.y + 2*m_ptMargins.y + 1 /* for divider */ ;
}
dc.SetFont(GetFont());
// the bounding rectangle of the current line
- wxRect rectLine;
- rectLine.width = clientSize.x;
+ wxRect rectRow;
+ rectRow.width = clientSize.x;
dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)));
dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
- dc.SetBackgroundMode(wxTRANSPARENT);
+ dc.SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT);
// iterate over all visible lines
const size_t lineMax = GetVisibleEnd();
- for ( size_t line = GetFirstVisibleLine(); line < lineMax; line++ )
+ for ( size_t line = GetVisibleBegin(); line < lineMax; line++ )
{
- const wxCoord hLine = OnGetLineHeight(line);
+ const wxCoord hRow = OnGetRowHeight(line);
- rectLine.height = hLine;
+ rectRow.height = hRow;
// and draw the ones which intersect the update rect
- if ( rectLine.Intersects(rectUpdate) )
+ if ( rectRow.Intersects(rectUpdate) )
{
// don't allow drawing outside of the lines rectangle
- wxDCClipper clip(dc, rectLine);
+ wxDCClipper clip(dc, rectRow);
- wxRect rect = rectLine;
+ wxRect rect = rectRow;
rect.Deflate(m_ptMargins.x, m_ptMargins.y);
OnDrawItem(dc, rect, line);
}
else // no intersection
{
- if ( rectLine.GetTop() > rectUpdate.GetBottom() )
+ if ( rectRow.GetTop() > rectUpdate.GetBottom() )
{
// we are already below the update rect, no need to continue
// further
//else: the next line may intersect the update rect
}
- rectLine.y += hLine;
+ rectRow.y += hRow;
}
}
m_symbolsPerLine = sz.x/(m_cellSize.x+m_ptMargins.x);
int noLines = (1 + SymbolValueToLineNumber(m_maxSymbolValue));
- SetLineCount(noLines);
+ SetRowCount(noLines);
Refresh();
if (scrollToSelection && m_current != wxNOT_FOUND && m_current >= m_minSymbolValue && m_current <= m_maxSymbolValue)
{
- ScrollToLine(SymbolValueToLineNumber(m_current));
+ ScrollToRow(SymbolValueToLineNumber(m_current));
}
}
{
if (item != wxNOT_FOUND && item >= m_minSymbolValue && item <= m_maxSymbolValue)
{
- ScrollToLine(SymbolValueToLineNumber(item));
+ ScrollToRow(SymbolValueToLineNumber(item));
}
}
// hit testing
int wxSymbolListCtrl::HitTest(const wxPoint& pt)
{
- wxCoord lineHeight = OnGetLineHeight(0);
+ wxCoord lineHeight = OnGetRowHeight(0);
int atLine = GetVisibleBegin() + (pt.y/lineHeight);
int symbol = (atLine*m_symbolsPerLine) + (pt.x/(m_cellSize.x+1));