]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix horizontal alignment in icon view in generic wxListCtrl.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 20 Dec 2011 21:21:38 +0000 (21:21 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 20 Dec 2011 21:21:38 +0000 (21:21 +0000)
Ensure that all the items in the same column have the same width, so that
their labels are centred.

Closes #9227.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70066 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
samples/listctrl/listtest.cpp
src/generic/listctrl.cpp

index c4d5ab5849a15c6718a7de4e5c6dfe166aa0883c..36f74dd1f604e1cdce6c74a98e547cf1ef5746e3 100644 (file)
@@ -453,6 +453,7 @@ All (GUI):
 - Added wxFilePickerCtrl::SetInitialDirectory().
 - Added wxDataViewItemAttr::SetBackgroundColour() and implemented it in generic
   wxDataViewCtrl (Andrew Xu).
+- Fix item alignment in icon view in the generic wxListCtrl.
 
 MSW:
 
index 0536b200768f2df7177d69453a86ac65ccd7304f..97d3a4fef379a29969d10de04d999623c73bfb68 100644 (file)
@@ -571,8 +571,14 @@ void MyFrame::InitWithIconItems(bool withText, bool sameIcon)
 
         if ( withText )
         {
-            m_listCtrl->InsertItem(i, wxString::Format(wxT("Label %d"), i),
-                                   image);
+            // Make labels of different widths to test the layout.
+            wxString label;
+            if ( !(i % 5) )
+                label.Printf("Longer label %d", i);
+            else
+                label.Printf("Label %d", i);
+
+            m_listCtrl->InsertItem(i, label, image);
         }
         else
         {
index 50052c8773a485f5875f00c45e2befa0b4ce3fdd..8ad024386e8d4073de87897243f6c04740519d7c 100644 (file)
@@ -3629,6 +3629,9 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
 
                 int x = EXTRA_BORDER_X;
                 int y = EXTRA_BORDER_Y;
+
+                // Note that "row" here is vertical, i.e. what is called
+                // "column" in many other places in wxWidgets.
                 int maxWidthInThisRow = 0;
 
                 m_linesPerPage = 0;
@@ -3650,8 +3653,20 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
                     if (currentlyVisibleLines > m_linesPerPage)
                         m_linesPerPage = currentlyVisibleLines;
 
-                    if ( y + sizeLine.y >= clientHeight )
+                    // Have we reached the end of the row either because no
+                    // more items would fit or because there are simply no more
+                    // items?
+                    if ( y + sizeLine.y >= clientHeight
+                            || i == count - 1)
                     {
+                        // Adjust all items in this row to have the same
+                        // width to ensure that they all align horizontally.
+                        size_t firstRowLine = i - currentlyVisibleLines + 1;
+                        for (size_t j = firstRowLine; j <= i; j++)
+                        {
+                            GetLine(j)->m_gi->ExtendWidth(maxWidthInThisRow);
+                        }
+
                         currentlyVisibleLines = 0;
                         y = EXTRA_BORDER_Y;
                         maxWidthInThisRow += MARGIN_BETWEEN_ROWS;
@@ -3660,10 +3675,6 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
                         maxWidthInThisRow = 0;
                     }
 
-                    // We have reached the last item.
-                    if ( i == count - 1 )
-                        entireWidth += maxWidthInThisRow;
-
                     if ( (tries == 0) &&
                             (entireWidth + SCROLL_UNIT_X > clientWidth) )
                     {