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:
parent
6874238c54
commit
9a9b4940a1
@ -51,7 +51,7 @@ Destructor cleans up whatever resources we use.
|
||||
|
||||
\membersection{wxHtmlListBox::Create}\label{wxhtmllistboxcreate}
|
||||
|
||||
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id = wxID\_ANY}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{size\_t }{countItems = 0}, \param{long }{style = 0}, \param{const wxString\& }{name = wxVListBoxNameStr}}
|
||||
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id = wxID\_ANY}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = 0}, \param{const wxString\& }{name = wxVListBoxNameStr}}
|
||||
|
||||
Creates the control and optionally sets the initial number of items in it
|
||||
(it may also be set or changed later with
|
||||
@ -63,6 +63,40 @@ wxListBox styles can not be used here.
|
||||
Returns {\tt true} on success or {\tt false} if the control couldn't be created
|
||||
|
||||
|
||||
\membersection{wxHtmlListBox::GetSelectedTextBgColour}\label{wxhtmllistboxgetselectedtextbgcolour}
|
||||
|
||||
\constfunc{wxColour}{GetSelectedTextBgColour}{\param{const wxColour\& }{colBg}}
|
||||
|
||||
This virtual function may be overridden to change the appearance of the
|
||||
background of the selected cells in the same way as
|
||||
\helpref{GetSelectedTextColour}{wxhtmllistboxgetselectedtextcolour}.
|
||||
|
||||
It should be rarely, if ever, used because
|
||||
\helpref{SetSelectionBackground}{wxvlistboxsetselectionbackground} allows to
|
||||
change the selection background for all cells at once and doing anything more
|
||||
fancy is probably going to look strangely.
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
\helpref{GetSelectedTextColour}{wxhtmllistboxgetselectedtextcolour}
|
||||
|
||||
|
||||
\membersection{wxHtmlListBox::GetSelectedTextColour}\label{wxhtmllistboxgetselectedtextcolour}
|
||||
|
||||
\constfunc{wxColour}{GetSelectedTextColour}{\param{const wxColour\& }{colFg}}
|
||||
|
||||
This virtual function may be overridden to customize the appearance of the
|
||||
selected cells. It is used to determine how the colour {\it colFg} is going to
|
||||
look inside selection. By default all original colours are completely ignored
|
||||
and the standard, system-dependent, selection colour is used but the program
|
||||
may wish to override this to achieve some custom appearance.
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
\helpref{GetSelectedTextBgColour}{wxhtmllistboxgetselectedtextbgcolour},\\
|
||||
\helpref{SetSelectionBackground}{wxvlistboxsetselectionbackground},\\
|
||||
\helpref{wxSystemSettings::GetColour}{wxsystemsettingsgetcolour}
|
||||
|
||||
|
||||
\membersection{wxHtmlListBox::OnGetItem}\label{wxhtmllistboxongetitem}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
class WXDLLEXPORT wxHtmlCell;
|
||||
class WXDLLEXPORT wxHtmlWinParser;
|
||||
class WXDLLEXPORT wxHtmlListBoxCache;
|
||||
class WXDLLEXPORT wxHtmlListBoxStyle;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxHtmlListBox
|
||||
@ -73,6 +74,20 @@ protected:
|
||||
virtual wxString OnGetItemMarkup(size_t n) const;
|
||||
|
||||
|
||||
// this method allows to customize the selection appearance: it may be used
|
||||
// to specify the colour of the text which normally has the given colour
|
||||
// colFg when it is inside the selection
|
||||
//
|
||||
// by default, the original colour is not used at all and all text has the
|
||||
// same (default for this system) colour inside selection
|
||||
virtual wxColour GetSelectedTextColour(const wxColour& colFg) const;
|
||||
|
||||
// this is the same as GetSelectedTextColour() but allows to customize the
|
||||
// background colour -- this is even more rarely used as you can change it
|
||||
// globally using SetSelectionBackground()
|
||||
virtual wxColour GetSelectedTextBgColour(const wxColour& colBg) const;
|
||||
|
||||
|
||||
// we implement both of these functions in terms of OnGetItem(), they are
|
||||
// not supposed to be overridden by our descendants
|
||||
virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const;
|
||||
@ -90,11 +105,19 @@ protected:
|
||||
void CacheItem(size_t n) const;
|
||||
|
||||
private:
|
||||
// this class caches the pre-parsed HTML to speed up display
|
||||
wxHtmlListBoxCache *m_cache;
|
||||
|
||||
// HTML parser we use
|
||||
wxHtmlWinParser *m_htmlParser;
|
||||
|
||||
// rendering style for the parser which allows us to customize our colours
|
||||
wxHtmlListBoxStyle *m_htmlRendStyle;
|
||||
|
||||
|
||||
// it calls our GetSelectedTextColour() and GetSelectedTextBgColour()
|
||||
friend class wxHtmlListBoxStyle;
|
||||
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
@ -120,6 +120,9 @@ public:
|
||||
// get the margins around each item
|
||||
wxPoint GetMargins() const { return m_ptMargins; }
|
||||
|
||||
// get the background colour of selected cells
|
||||
const wxColour& GetSelectionBackground() const { return m_colBgSel; }
|
||||
|
||||
|
||||
// operations
|
||||
// ----------
|
||||
@ -179,6 +182,9 @@ public:
|
||||
void SetMargins(const wxPoint& pt);
|
||||
void SetMargins(wxCoord x, wxCoord y) { SetMargins(wxPoint(x, y)); }
|
||||
|
||||
// change the background colour of the selected cells
|
||||
void SetSelectionBackground(const wxColour& col);
|
||||
|
||||
|
||||
protected:
|
||||
// the derived class must implement this function to actually draw the item
|
||||
@ -258,6 +264,10 @@ private:
|
||||
// margins
|
||||
wxPoint m_ptMargins;
|
||||
|
||||
// the selection bg colour
|
||||
wxColour m_colBgSel;
|
||||
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,12 @@
|
||||
#include "wx/html/forcelnk.h"
|
||||
FORCE_WXHTML_MODULES()
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// ============================================================================
|
||||
// private classes
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxHtmlListBoxCache
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// this class is used by wxHtmlListBox to cache the parsed representation of
|
||||
@ -117,6 +121,32 @@ private:
|
||||
size_t m_items[SIZE];
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxHtmlListBoxStyle
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// just forward wxDefaultHtmlRenderingStyle callbacks to the main class so that
|
||||
// they could be overridden by the user code
|
||||
class wxHtmlListBoxStyle : public wxDefaultHtmlRenderingStyle
|
||||
{
|
||||
public:
|
||||
wxHtmlListBoxStyle(wxHtmlListBox& hlbox) : m_hlbox(hlbox) { }
|
||||
|
||||
virtual wxColour GetSelectedTextColour(const wxColour& colFg)
|
||||
{
|
||||
return m_hlbox.GetSelectedTextColour(colFg);
|
||||
}
|
||||
|
||||
virtual wxColour GetSelectedTextBgColour(const wxColour& colBg)
|
||||
{
|
||||
return m_hlbox.GetSelectedTextBgColour(colBg);
|
||||
}
|
||||
|
||||
private:
|
||||
const wxHtmlListBox& m_hlbox;
|
||||
};
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event tables
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -136,6 +166,7 @@ END_EVENT_TABLE()
|
||||
void wxHtmlListBox::Init()
|
||||
{
|
||||
m_htmlParser = NULL;
|
||||
m_htmlRendStyle = new wxHtmlListBoxStyle(*this);
|
||||
m_cache = new wxHtmlListBoxCache;
|
||||
}
|
||||
|
||||
@ -152,11 +183,30 @@ bool wxHtmlListBox::Create(wxWindow *parent,
|
||||
wxHtmlListBox::~wxHtmlListBox()
|
||||
{
|
||||
delete m_cache;
|
||||
|
||||
if ( m_htmlParser )
|
||||
{
|
||||
delete m_htmlParser->GetDC();
|
||||
delete m_htmlParser;
|
||||
}
|
||||
|
||||
delete m_htmlRendStyle;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxHtmlListBox appearance
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxColour wxHtmlListBox::GetSelectedTextColour(const wxColour& colFg) const
|
||||
{
|
||||
return m_htmlRendStyle->
|
||||
wxDefaultHtmlRenderingStyle::GetSelectedTextColour(colFg);
|
||||
}
|
||||
|
||||
wxColour
|
||||
wxHtmlListBox::GetSelectedTextBgColour(const wxColour& WXUNUSED(colBg)) const
|
||||
{
|
||||
return GetSelectionBackground();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -231,7 +281,9 @@ void wxHtmlListBox::OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const
|
||||
wxHtmlSelection htmlSel;
|
||||
htmlSel.Set(wxPoint(0, 0), cell, wxPoint(INT_MAX, INT_MAX), cell);
|
||||
htmlRendInfo.SetSelection(&htmlSel);
|
||||
//htmlRendInfo.SetSelectionState(wxHTML_SEL_IN);
|
||||
if ( m_htmlRendStyle )
|
||||
htmlRendInfo.SetStyle(m_htmlRendStyle);
|
||||
htmlRendInfo.GetState().SetSelectionState(wxHTML_SEL_IN);
|
||||
}
|
||||
|
||||
// note that we can't stop drawing exactly at the window boundary as then
|
||||
|
@ -69,11 +69,12 @@ bool wxVListBox::Create(wxWindow *parent,
|
||||
if ( !wxVScrolledWindow::Create(parent, id, pos, size, style, name) )
|
||||
return false;
|
||||
|
||||
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX));
|
||||
|
||||
if ( style & wxLB_MULTIPLE )
|
||||
m_selStore = new wxSelectionStore;
|
||||
|
||||
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX));
|
||||
m_colBgSel = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -282,7 +283,7 @@ int wxVListBox::GetNextSelected(unsigned long& cookie) const
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxVListBox painting
|
||||
// wxVListBox appearance parameters
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxVListBox::SetMargins(const wxPoint& pt)
|
||||
@ -295,6 +296,15 @@ void wxVListBox::SetMargins(const wxPoint& pt)
|
||||
}
|
||||
}
|
||||
|
||||
void wxVListBox::SetSelectionBackground(const wxColour& col)
|
||||
{
|
||||
m_colBgSel = col;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxVListBox painting
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxCoord wxVListBox::OnGetLineHeight(size_t line) const
|
||||
{
|
||||
return OnMeasureItem(line) + 2*m_ptMargins.y;
|
||||
@ -337,10 +347,7 @@ void wxVListBox::OnPaint(wxPaintEvent& event)
|
||||
{
|
||||
if ( isSelected )
|
||||
{
|
||||
wxBrush brush(wxSystemSettings::
|
||||
GetColour(wxSYS_COLOUR_HIGHLIGHT),
|
||||
wxSOLID);
|
||||
dc.SetBrush(brush);
|
||||
dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
|
||||
}
|
||||
else // !selected
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user