Improved sorting of add-ons.

I added possibility to back to default sorting by click on the head of the column third time.
There is still problem with switching between name and date column.

Code probably could be better. Feel free to improve it.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@13621 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
deveee
2013-09-03 20:53:33 +00:00
parent cb9017d5e8
commit d00e0397f3
5 changed files with 42 additions and 9 deletions

View File

@@ -1547,9 +1547,9 @@ void Skin::drawListSelection(const core::recti &rect, Widget* widget,
void Skin::drawListHeader(const irr::core::rect< irr::s32 > &rect,
Widget* widget)
{
bool isSelected =(((ListWidget*)widget->m_event_handler)->m_selected_column
== widget);
bool isSelected =
(((ListWidget*)widget->m_event_handler)->m_selected_column == widget &&
((ListWidget*)widget->m_event_handler)->m_sort_default == false);
drawBoxFromStretchableTexture(widget, rect,
(isSelected ? SkinConfig::m_render_params["list_header::down"]
@@ -1562,10 +1562,11 @@ void Skin::drawListHeader(const irr::core::rect< irr::s32 > &rect,
ITexture* img;
if (((ListWidget*)widget->m_event_handler)->m_sort_desc)
img =
SkinConfig::m_render_params["list_sort_down::neutral"].getImage();
SkinConfig::m_render_params["list_sort_up::neutral"].getImage();
else
img =
SkinConfig::m_render_params["list_sort_up::neutral"].getImage();
SkinConfig::m_render_params["list_sort_down::neutral"].getImage();
core::recti destRect(rect.UpperLeftCorner,
core::dimension2di(rect.getHeight(),
rect.getHeight()));

View File

@@ -39,6 +39,7 @@ ListWidget::ListWidget() : Widget(WTYPE_LIST)
m_listener = NULL;
m_selected_column = NULL;
m_sort_desc = true;
m_sort_default = true;
}
// -----------------------------------------------------------------------------
@@ -299,6 +300,8 @@ void ListWidget::elementRemoved()
}
m_header_elements.clearAndDeleteAll();
m_selected_column = NULL;
m_sort_desc = 1;
m_sort_default = 1;
}
// -----------------------------------------------------------------------------
@@ -373,7 +376,13 @@ EventPropagation ListWidget::transmitEvent(Widget* w,
m_selected_column = m_header_elements.get(col);
/** \brief Allows sort icon to change depending on sort order **/
m_sort_desc = !m_sort_desc;
if (m_sort_desc && !m_sort_default)
m_sort_default = true;
else
{
m_sort_desc = !m_sort_desc;
m_sort_default = false;
}
/*
for (int n=0; n<m_header_elements.size(); n++)
{

View File

@@ -70,6 +70,9 @@ namespace GUIEngine
/** \brief whether this list is sorted in descending order */
bool m_sort_desc;
/** true when deault sorting is enabled */
bool m_sort_default;
struct Column
{
irr::core::stringw m_text;

View File

@@ -137,6 +137,7 @@ void AddonsScreen::init()
m_reloading = false;
m_sort_desc = true;
m_sort_default = true;
getWidget<GUIEngine::RibbonWidget>("category")->setDeactivated();
@@ -380,14 +381,31 @@ void AddonsScreen::loadList()
// ----------------------------------------------------------------------------
void AddonsScreen::onColumnClicked(int column_id)
{
if (m_sort_desc && !m_sort_default)
m_sort_default = true;
else
{
m_sort_desc = !m_sort_desc;
m_sort_default = false;
}
switch(column_id)
{
case 0: Addon::setSortOrder(Addon::SO_NAME); break;
case 1: Addon::setSortOrder(Addon::SO_DATE); break;
case 0:
if (!m_sort_default)
Addon::setSortOrder(Addon::SO_NAME);
else
Addon::setSortOrder(Addon::SO_DEFAULT);
break;
case 1:
if (!m_sort_default)
Addon::setSortOrder(Addon::SO_NAME);
else
Addon::setSortOrder(Addon::SO_DEFAULT);
break;
default: assert(0);
} // switch
/** \brief Toggle the sort order after column click **/
m_sort_desc = !m_sort_desc;
loadList();
} // onColumnClicked

View File

@@ -77,6 +77,8 @@ private:
/** \brief To check (and set) if sort order is descending **/
bool m_sort_desc;
bool m_sort_default;
/** List of date filters **/
std::vector<DateFilter> m_date_filters;