added possibility to customize the listbox colours

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21138 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-06-13 22:26:45 +00:00
parent 6874238c54
commit 9a9b4940a1
6 changed files with 252 additions and 56 deletions

View File

@@ -39,6 +39,8 @@
#include "wx/dc.h"
#endif
#include "wx/colordlg.h"
#include "wx/htmllbox.h"
// you can also have a file containing HTML strings for testing, enable this if
@@ -66,56 +68,22 @@
class MyHtmlListBox : public wxHtmlListBox
{
public:
MyHtmlListBox(wxWindow *parent, bool multi = false)
: wxHtmlListBox(parent, -1, wxDefaultPosition, wxDefaultSize,
multi ? wxLB_MULTIPLE : 0)
{
SetMargins(5, 5);
MyHtmlListBox(wxWindow *parent, bool multi = false);
#ifdef USE_HTML_FILE
if ( !m_file.Open("results") )
{
wxLogError("Failed to open results file");
}
else
{
SetItemCount(m_file.GetLineCount());
}
#else
SetItemCount(10);
#endif
if ( HasMultipleSelection() )
Select(3);
else
SetSelection(3);
}
void SetChangeSelFg(bool change) { m_change = change; }
protected:
virtual wxString OnGetItem(size_t n) const
{
#ifdef USE_HTML_FILE
wxString s;
if ( m_file.IsOpened() )
s = m_file[n];
return s;
#else
int level = n % 6 + 1;
return wxString::Format(_T("<h%d><font color=#%2x%2x%2x>")
_T("Item</font> <b>%lu</b>")
_T("</h%d>"),
level,
abs(n - 192) % 256,
abs(n - 256) % 256,
abs(n - 128) % 256,
(unsigned long)n, level);
#endif
}
virtual wxString OnGetItem(size_t n) const;
// change the appearance by overriding these functions
virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const;
virtual wxColour GetSelectedTextColour(const wxColour& colFg) const;
bool m_change;
#ifdef USE_HTML_FILE
wxTextFile m_file;
#endif
};
class MyFrame : public wxFrame
@@ -133,6 +101,11 @@ public:
void OnToggleMulti(wxCommandEvent& event);
void OnSelectAll(wxCommandEvent& event);
void OnSetBgCol(wxCommandEvent& event);
void OnSetSelBgCol(wxCommandEvent& event);
void OnSetSelFgCol(wxCommandEvent& event);
void OnUpdateUISelectAll(wxUpdateUIEvent& event);
void OnLboxSelect(wxCommandEvent& event);
@@ -169,6 +142,10 @@ enum
HtmlLbox_ToggleMulti,
HtmlLbox_SelectAll,
HtmlLbox_SetBgCol,
HtmlLbox_SetSelBgCol,
HtmlLbox_SetSelFgCol,
// it is important for the id corresponding to the "About" command to have
// this standard value as otherwise it won't be handled properly under Mac
// (where it is special and put into the "Apple" menu)
@@ -189,6 +166,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(HtmlLbox_About, MyFrame::OnAbout)
EVT_MENU(HtmlLbox_SetBgCol, MyFrame::OnSetBgCol)
EVT_MENU(HtmlLbox_SetSelBgCol, MyFrame::OnSetSelBgCol)
EVT_MENU(HtmlLbox_SetSelFgCol, MyFrame::OnSetSelFgCol)
EVT_UPDATE_UI(HtmlLbox_SelectAll, MyFrame::OnUpdateUISelectAll)
@@ -226,7 +206,7 @@ MyFrame::MyFrame()
_T("Set &margins...\tCtrl-G"),
_T("Change the margins around the items"));
menuHLbox->AppendCheckItem(HtmlLbox_DrawSeparator,
_T("Draw &separators\tCtrl-S"),
_T("&Draw separators\tCtrl-D"),
_T("Toggle drawing separators between cells"));
menuHLbox->AppendSeparator();
menuHLbox->AppendCheckItem(HtmlLbox_ToggleMulti,
@@ -234,6 +214,12 @@ MyFrame::MyFrame()
_T("Toggle multiple selection on/off"));
menuHLbox->AppendSeparator();
menuHLbox->Append(HtmlLbox_SelectAll, _T("Select &all items\tCtrl-A"));
menuHLbox->AppendSeparator();
menuHLbox->Append(HtmlLbox_SetBgCol, _T("Set &background...\tCtrl-B"));
menuHLbox->Append(HtmlLbox_SetSelBgCol,
_T("Set &selection background...\tCtrl-S"));
menuHLbox->AppendCheckItem(HtmlLbox_SetSelFgCol,
_T("Keep &foreground in selection\tCtrl-F"));
// the "About" item should be in the help menu
wxMenu *helpMenu = new wxMenu;
@@ -297,7 +283,7 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
this);
}
void MyFrame::OnSetMargins(wxCommandEvent&)
void MyFrame::OnSetMargins(wxCommandEvent& WXUNUSED(event))
{
long margin = wxGetNumberFromUser
(
@@ -328,7 +314,7 @@ void MyFrame::OnToggleMulti(wxCommandEvent& event)
sizer->Layout();
}
void MyFrame::OnSelectAll(wxCommandEvent& event)
void MyFrame::OnSelectAll(wxCommandEvent& WXUNUSED(event))
{
m_hlbox->SelectRange(0, m_hlbox->GetItemCount() - 1);
}
@@ -338,6 +324,36 @@ void MyFrame::OnUpdateUISelectAll(wxUpdateUIEvent& event)
event.Enable( m_hlbox && m_hlbox->HasMultipleSelection() );
}
void MyFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event))
{
wxColour col = wxGetColourFromUser(this, m_hlbox->GetBackgroundColour());
if ( col.Ok() )
{
m_hlbox->SetBackgroundColour(col);
m_hlbox->Refresh();
SetStatusText(_T("Background colour changed."));
}
}
void MyFrame::OnSetSelBgCol(wxCommandEvent& WXUNUSED(event))
{
wxColour col = wxGetColourFromUser(this, m_hlbox->GetSelectionBackground());
if ( col.Ok() )
{
m_hlbox->SetSelectionBackground(col);
m_hlbox->Refresh();
SetStatusText(_T("Selection background colour changed."));
}
}
void MyFrame::OnSetSelFgCol(wxCommandEvent& event)
{
m_hlbox->SetChangeSelFg(!event.IsChecked());
m_hlbox->Refresh();
}
// ----------------------------------------------------------------------------
// listbox event handlers
// ----------------------------------------------------------------------------
@@ -378,6 +394,34 @@ void MyFrame::OnLboxSelect(wxCommandEvent& event)
// MyHtmlListBox
// ============================================================================
MyHtmlListBox::MyHtmlListBox(wxWindow *parent, bool multi)
: wxHtmlListBox(parent, -1, wxDefaultPosition, wxDefaultSize,
multi ? wxLB_MULTIPLE : 0)
{
m_change = true;
SetMargins(5, 5);
#ifdef USE_HTML_FILE
if ( !m_file.Open("results") )
{
wxLogError("Failed to open results file");
}
else
{
SetItemCount(m_file.GetLineCount());
}
#else
SetItemCount(10);
#endif
// select something
if ( HasMultipleSelection() )
Select(3);
else
SetSelection(3);
}
void MyHtmlListBox::OnDrawSeparator(wxDC& dc, wxRect& rect, size_t) const
{
if ( ((MyFrame *)GetParent())->
@@ -389,3 +433,29 @@ void MyHtmlListBox::OnDrawSeparator(wxDC& dc, wxRect& rect, size_t) const
}
}
wxString MyHtmlListBox::OnGetItem(size_t n) const
{
#ifdef USE_HTML_FILE
wxString s;
if ( m_file.IsOpened() )
s = m_file[n];
return s;
#else
int level = n % 6 + 1;
return wxString::Format(_T("<h%d><font color=#%2x%2x%2x>")
_T("Item</font> <b>%lu</b>")
_T("</h%d>"),
level,
abs(n - 192) % 256,
abs(n - 256) % 256,
abs(n - 128) % 256,
(unsigned long)n, level);
#endif
}
wxColour MyHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const
{
return m_change ? wxHtmlListBox::GetSelectedTextColour(colFg) : colFg;
}