Ticket #3905: 3905_COList_refresh_v2.1.patch

File 3905_COList_refresh_v2.1.patch, 6.9 KB (added by Imarok, 8 years ago)

renaming ObjectDef and m_ObjectsDefs. Change one if to an else if

  • source/gui/COList.cpp

     
    2424#include "soundmanager/ISoundManager.h"
    2525
    2626COList::COList()
    27     : CList(), m_HeadingHeight(30.f), m_SelectedDef(-1), m_SelectedColumnOrder(0)
     27    : CList(), m_HeadingHeight(30.f), m_SelectedColumn(-1), m_SelectedColumnOrder(0)
    2828{
    2929    AddSetting(GUIST_CGUISpriteInstance,    "sprite_heading");
    3030    AddSetting(GUIST_bool,                  "sortable"); // The actual sorting is done in JS for more versatility
     
    8282    GUI<CStr>::GetSetting(this, "default_column", defaultColumn);
    8383    defaultColumn = "list_" + defaultColumn;
    8484
    85     for (size_t c = 0; c < m_ObjectsDefs.size(); ++c)
     85    for (size_t c = 0; c < m_Columns.size(); ++c)
    8686    {
    8787        SGUIText* text = new SGUIText();
    8888        CGUIString gui_string;
    89         gui_string.SetValue(m_ObjectsDefs[c].m_Heading);
     89        gui_string.SetValue(m_Columns[c].m_Heading);
    9090        *text = GetGUI()->GenerateText(gui_string, font, width, buffer_zone, this);
    9191        AddText(text);
    9292
    93         if (m_SelectedDef == (size_t)-1 && defaultColumn == m_ObjectsDefs[c].m_Id)
    94             m_SelectedDef = c;
     93        if (m_SelectedColumn == (size_t)-1 && defaultColumn == m_Columns[c].m_Id)
     94            m_SelectedColumn = c;
    9595    }
    9696
    97     if (m_SelectedDef != (size_t)-1)
    98         GUI<CStr>::SetSetting(this, "selected_column", m_ObjectsDefs[m_SelectedDef].m_Id.substr(5));
     97    if (m_SelectedColumn != (size_t)-1)
     98        GUI<CStr>::SetSetting(this, "selected_column", m_Columns[m_SelectedColumn].m_Id.substr(5));
    9999
    100100    if (m_SelectedColumnOrder == 0)
    101101    {
     
    109109    for (size_t i = 0; i < pList->m_Items.size(); ++i)
    110110    {
    111111        m_ItemsYPositions[i] = buffered_y;
    112         for (size_t c = 0; c < m_ObjectsDefs.size(); ++c)
     112        for (size_t c = 0; c < m_Columns.size(); ++c)
    113113        {
    114114            CGUIList* pList_c;
    115             GUI<CGUIList>::GetSettingPointer(this, m_ObjectsDefs[c].m_Id, pList_c);
     115            GUI<CGUIList>::GetSettingPointer(this, m_Columns[c].m_Id, pList_c);
    116116            SGUIText* text = new SGUIText();
    117117            *text = GetGUI()->GenerateText(pList_c->m_Items[i], font, width, buffer_zone, this);
    118118            if (c == 0)
     
    147147
    148148    switch (Message.type)
    149149    {
     150    case GUIM_SETTINGS_UPDATED:
     151        {
     152            if (Message.value == "selected_column_order")
     153                GUI<int>::GetSetting(this, "selected_column_order", m_SelectedColumnOrder);
     154            else if (Message.value == "selected_column")
     155            {
     156                CStr selectedColumn;
     157                GUI<CStr>::GetSetting(this, "selected_column", selectedColumn);
     158                for (size_t c = 0; c < m_Columns.size(); ++c)
     159                {
     160                    if (m_Columns[c].m_Id.substr(5) == selectedColumn)
     161                        m_SelectedColumn = c;
     162                }
     163            }
     164            return;
     165        }
    150166    // If somebody clicks on the column heading
    151167    case GUIM_MOUSE_PRESS_LEFT:
    152168    {
     
    160176            return;
    161177
    162178        float xpos = 0;
    163         for (size_t def = 0; def < m_ObjectsDefs.size(); ++def)
     179        for (size_t def = 0; def < m_Columns.size(); ++def)
    164180        {
    165             float width = m_ObjectsDefs[def].m_Width;
     181            float width = m_Columns[def].m_Width;
    166182            // Check if it's a decimal value, and if so, assume relative positioning.
    167             if (m_ObjectsDefs[def].m_Width < 1 && m_ObjectsDefs[def].m_Width > 0)
     183            if (m_Columns[def].m_Width < 1 && m_Columns[def].m_Width > 0)
    168184                width *= m_TotalAvalibleColumnWidth;
    169185            CPos leftTopCorner = m_CachedActualSize.TopLeft() + CPos(xpos, 0);
    170186            if (mouse.x >= leftTopCorner.x &&
     
    171187                mouse.x < leftTopCorner.x + width &&
    172188                mouse.y < leftTopCorner.y + m_HeadingHeight)
    173189            {
    174                 if (def != m_SelectedDef)
     190                if (def != m_SelectedColumn)
    175191                {
    176192                    m_SelectedColumnOrder = 1;
    177                     m_SelectedDef = def;
     193                    m_SelectedColumn = def;
    178194                }
    179195                else
    180196                    m_SelectedColumnOrder = -m_SelectedColumnOrder;
    181                 GUI<CStr>::SetSetting(this, "selected_column", m_ObjectsDefs[def].m_Id.substr(5));
     197                GUI<CStr>::SetSetting(this, "selected_column", m_Columns[def].m_Id.substr(5));
    182198                GUI<int>::SetSetting(this, "selected_column_order", m_SelectedColumnOrder);
    183199                GUI<int>::SetSetting(this, "selected_def", def);
    184200                ScriptEvent("selectioncolumnchange");
     
    215231    }
    216232    else if (child.GetNodeName() == elmt_def)
    217233    {
    218         ObjectDef oDef;
     234        COListColumn oDef;
    219235
    220236        for (XMBAttribute attr : child.GetAttributes())
    221237        {
     
    282298            }
    283299        }
    284300
    285         m_ObjectsDefs.push_back(oDef);
     301        m_Columns.push_back(oDef);
    286302
    287303        AddSetting(GUIST_CGUIList, oDef.m_Id);
    288304        SetupText();
     
    380396
    381397    // Draw column headers
    382398    float xpos = 0;
    383     for (size_t def = 0; def < m_ObjectsDefs.size(); ++def)
     399    for (size_t def = 0; def < m_Columns.size(); ++def)
    384400    {
    385401        // Check if it's a decimal value, and if so, assume relative positioning.
    386         float width = m_ObjectsDefs[def].m_Width;
    387         if (m_ObjectsDefs[def].m_Width < 1 && m_ObjectsDefs[def].m_Width > 0)
     402        float width = m_Columns[def].m_Width;
     403        if (m_Columns[def].m_Width < 1 && m_Columns[def].m_Width > 0)
    388404            width *= m_TotalAvalibleColumnWidth;
    389405
    390406        CPos leftTopCorner = m_CachedActualSize.TopLeft() + CPos(xpos, 0);
     
    391407
    392408        CGUISpriteInstance* sprite;
    393409        // If the list sorted by current column
    394         if (m_SelectedDef == def)
     410        if (m_SelectedColumn == def)
    395411            sprite = sprite_order;
    396412        else
    397413            sprite = sprite_not_sorted;
     
    405421    }
    406422
    407423    // Draw list items for each column
    408     const size_t objectsCount = m_ObjectsDefs.size();
     424    const size_t objectsCount = m_Columns.size();
    409425    for (size_t i = 0; i < pList->m_Items.size(); ++i)
    410426    {
    411427        if (m_ItemsYPositions[i+1] - scroll < 0 ||
     
    435451            // Determine text position and width
    436452            const CPos textPos = rect.TopLeft() + CPos(xpos, -scroll + m_ItemsYPositions[i]);
    437453
    438             float width = m_ObjectsDefs[def].m_Width;;
     454            float width = m_Columns[def].m_Width;;
    439455            // Check if it's a decimal value, and if so, assume relative positioning.
    440             if (m_ObjectsDefs[def].m_Width < 1 && m_ObjectsDefs[def].m_Width > 0)
     456            if (m_Columns[def].m_Width < 1 && m_Columns[def].m_Width > 0)
    441457                width *= m_TotalAvalibleColumnWidth;
    442458
    443459            // Clip text to the column (to prevent drawing text into the neighboring column)
     
    446462            cliparea2.bottom = std::min(cliparea2.bottom, textPos.y + rowHeight);
    447463
    448464            // Draw list item
    449             DrawText(objectsCount * (i+/*Heading*/1) + def, m_ObjectsDefs[def].m_TextColor, textPos, bz+0.1f, cliparea2);
     465            DrawText(objectsCount * (i +/*Heading*/1) + def, m_Columns[def].m_TextColor, textPos, bz + 0.1f, cliparea2);
    450466            xpos += width;
    451467        }
    452468    }
  • source/gui/COList.h

     
    2323/**
    2424 * Represents a column.
    2525 */
    26 struct ObjectDef
     26struct COListColumn
    2727{
    2828  CColor m_TextColor;
    2929  CStr m_Id;
     
    6363    /**
    6464     * Available columns.
    6565     */
    66     std::vector<ObjectDef> m_ObjectsDefs;
     66    std::vector<COListColumn> m_Columns;
    6767
    6868    /**
    6969     * Index of the selected column.
    7070     */
    71     size_t m_SelectedDef;
     71    size_t m_SelectedColumn;
    7272
    7373    /**
    7474     * +1 for ascending, -1 for descending sort order.