Index: COList.cpp =================================================================== --- COList.cpp +++ COList.cpp @@ -26,7 +26,6 @@ COList::COList() : CList() { AddSetting(GUIST_CGUISpriteInstance, "sprite_heading"); - AddSetting(GUIST_float, "heading_height"); AddSetting(GUIST_bool, "sortable"); // The actual sorting is done in JS for more versatility AddSetting(GUIST_CStr, "selected_column"); AddSetting(GUIST_int, "selected_column_order"); @@ -33,6 +32,7 @@ AddSetting(GUIST_CGUISpriteInstance, "sprite_asc"); // Show the order of sorting AddSetting(GUIST_CGUISpriteInstance, "sprite_desc"); AddSetting(GUIST_CGUISpriteInstance, "sprite_not_sorted"); + m_TopY = 0; } void COList::SetupText() @@ -73,11 +73,18 @@ for (COListColumn column : m_Columns) { + float width_factor = column.m_Width; + if (column.m_Width >= 1 && column.m_Width <= 0) + { + width_factor /= m_TotalAvailableColumnWidth; + } + SGUIText* text = new SGUIText(); CGUIString gui_string; gui_string.SetValue(column.m_Heading); - *text = GetGUI()->GenerateText(gui_string, font, width, buffer_zone, this); + *text = GetGUI()->GenerateText(gui_string, font, width * width_factor, buffer_zone, this); AddText(text); + m_TopY = std::max(m_TopY, text->m_Size.cy); } // Generate texts @@ -85,21 +92,27 @@ for (size_t i = 0; i < pList->m_Items.size(); ++i) { - m_ItemsYPositions[i] = buffered_y; + m_ItemsYPositions[i] = 0; float shift = 0.0f; for (size_t c = 0; c < m_Columns.size(); ++c) { + float width_factor = m_Columns[c].m_Width; + if (m_Columns[c].m_Width >= 1 && m_Columns[c].m_Width <= 0) + { + width_factor /= m_TotalAvailableColumnWidth; + } + CGUIList* pList_c; GUI::GetSettingPointer(this, "list_" + m_Columns[c].m_Id, pList_c); SGUIText* text = new SGUIText(); if (!pList_c->m_Items[i].GetOriginalString().empty()) - *text = GetGUI()->GenerateText(pList_c->m_Items[i], font, width, buffer_zone, this); + *text = GetGUI()->GenerateText(pList_c->m_Items[i], font, width * width_factor, buffer_zone, this); else { // Minimum height of a space character of the current font size CGUIString align_string; align_string.SetValue(L" "); - *text = GetGUI()->GenerateText(align_string, font, width, buffer_zone, this); + *text = GetGUI()->GenerateText(align_string, font, width * width_factor, buffer_zone, this); } shift = std::max(shift, text->m_Size.cy); AddText(text); @@ -124,9 +137,7 @@ CRect COList::GetListRect() const { - float headingHeight; - GUI::GetSetting(this, "heading_height", headingHeight); - return m_CachedActualSize + CRect(0, headingHeight, 0, 0); + return m_CachedActualSize + CRect(0, m_TopY, 0, 0); } void COList::HandleMessage(SGUIMessage& Message) @@ -151,8 +162,6 @@ GUI::GetSetting(this, "selected_column", selectedColumn); int selectedColumnOrder; GUI::GetSetting(this, "selected_column_order", selectedColumnOrder); - float headingHeight; - GUI::GetSetting(this, "heading_height", headingHeight); float xpos = 0; for (COListColumn column : m_Columns) @@ -169,7 +178,7 @@ CPos leftTopCorner = m_CachedActualSize.TopLeft() + CPos(xpos, 0); if (mouse.x >= leftTopCorner.x && mouse.x < leftTopCorner.x + width && - mouse.y < leftTopCorner.y + headingHeight) + mouse.y < leftTopCorner.y + m_TopY) { if (column.m_Id != selectedColumn) { @@ -369,14 +378,11 @@ } } - float headingHeight; - GUI::GetSetting(this, "heading_height", headingHeight); - // Draw line above column header CGUISpriteInstance* sprite_heading = NULL; GUI::GetSettingPointer(this, "sprite_heading", sprite_heading); CRect rect_head(m_CachedActualSize.left, m_CachedActualSize.top, m_CachedActualSize.right, - m_CachedActualSize.top + headingHeight); + m_CachedActualSize.top + m_TopY); GetGUI()->DrawSprite(*sprite_heading, cell_id, bz, rect_head); // Draw column headers