]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/fl/rowlayoutpl.cpp
fix evaluation order bug (patch 1158099)
[wxWidgets.git] / contrib / src / fl / rowlayoutpl.cpp
index a1dd955c8ce058609905e0f016c9d4abcf6b1887..675a572e27e2edd069af075f8faeb7874c1ed665 100644 (file)
@@ -8,7 +8,7 @@
 // Copyright:   (c) Aleksandras Gluchovas
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
+
 #ifdef __GNUG__
     #pragma implementation "rowlayoutpl.h"
 #endif
@@ -61,10 +61,10 @@ void cbRowLayoutPlugin::CheckIfAtTheBoundary( cbBarInfo* pTheBar, cbRowInfo& row
     // In this case we need to check if the pBarNode appears to be inserted
     // chain of fixed-bars on the very right or left side of the row,
     // then all the white-space, such chain should be eliminated,
-    // and the resulting chain justified to the right or the left 
+    // and the resulting chain justified to the right or the left
     // side of the row
 
-    if ( !pTheBar->IsFixed() || rowInfo.mHasOnlyFixedBars ) 
+    if ( !pTheBar->IsFixed() || rowInfo.mHasOnlyFixedBars )
 
         return;
 
@@ -76,7 +76,7 @@ void cbRowLayoutPlugin::CheckIfAtTheBoundary( cbBarInfo* pTheBar, cbRowInfo& row
 
     do
     {
-        if ( !pBar->IsFixed() ) 
+        if ( !pBar->IsFixed() )
             break;
 
         wxRect& bounds = pBar->mBounds;
@@ -91,15 +91,15 @@ void cbRowLayoutPlugin::CheckIfAtTheBoundary( cbBarInfo* pTheBar, cbRowInfo& row
     }
     while( 1 );
 
-    // slide fixed bars to the left on the left side relative to the pBarNode   
+    // slide fixed bars to the left on the left side relative to the pBarNode
 
     pBar = rowInfo.mBars[0];
 
     prevX = 0;
-    
+
     do
     {
-        if ( pBar->IsFixed() ) 
+        if ( pBar->IsFixed() )
 
             break;
 
@@ -120,9 +120,13 @@ void cbRowLayoutPlugin::ExpandNotFixedBars( cbRowInfo* pRow )
 {
     ApplyLengthRatios( pRow );
 
+    #if 1
+
    // FIXME:: something's wrong?
    return;
 
+    #else
+
     double freeSpc = (double)GetRowFreeSpace( pRow );
 
     // calculate sum of precents
@@ -148,22 +152,26 @@ void cbRowLayoutPlugin::ExpandNotFixedBars( cbRowInfo* pRow )
         {
             bar.mLenRatio = bar.mLenRatio/(pcntSum);
 
-            bar.mBounds.width = 
-                
+            bar.mBounds.width =
+
                 wxMax( mpPane->mProps.mMinCBarDim.x, int( freeSpc*bar.mLenRatio ) );
         }
-        
+
         bar.mBounds.x = curX;
         curX = bar.mBounds.x + bar.mBounds.width;
     }
+    #endif
 }
 
-void cbRowLayoutPlugin::AdjustLengthOfInserted( cbRowInfo* pRow, cbBarInfo* pTheBar )
+void cbRowLayoutPlugin::AdjustLengthOfInserted( cbRowInfo* WXUNUSED(pRow), cbBarInfo* WXUNUSED(pTheBar) )
 {
-    return;  // TBD: Makes following code unreachable
+    return;
 
-    // pTheBar is not-fixed
+#if 0
+
+    // TBD: Makes following code unreachable
 
+    // pTheBar is not-fixed
 
     // FIXME:: what is this for??
 
@@ -203,13 +211,16 @@ void cbRowLayoutPlugin::AdjustLengthOfInserted( cbRowInfo* pRow, cbBarInfo* pThe
 
         pTheBar->mBounds.width = freeSpc * (1.0 - pcntSum);
 #endif
+
+#endif
+
 }
 
 void cbRowLayoutPlugin::FitBarsToRange( int from, int till,
                                         cbBarInfo* pTheBar, cbRowInfo* pRow )
 {
-    cbBarInfo* pFromBar = NULL;
-    cbBarInfo* pTillBar = NULL;
+    cbBarInfo* pFromBar;
+    cbBarInfo* pTillBar;
 
     if ( pTheBar->mBounds.x > from )
     {
@@ -249,7 +260,7 @@ void cbRowLayoutPlugin::FitBarsToRange( int from, int till,
       {
             pBar->mBounds.width =
                 wxMax( mpPane->mProps.mMinCBarDim.x,
-                       int( double(freeSpc) * (pBar->mLenRatio/pcntSum) )
+                       (int)( ((double)freeSpc) * (pBar->mLenRatio/pcntSum) )
                      );
       }
         pBar = pBar->mpNext;
@@ -259,7 +270,7 @@ void cbRowLayoutPlugin::FitBarsToRange( int from, int till,
 
     pBar      = pFromBar;
     int prevX = from;
-    bool hasNotFixedBars = FALSE;
+    bool hasNotFixedBars = false;
 
     while ( pBar != pTillBar )
     {
@@ -267,7 +278,7 @@ void cbRowLayoutPlugin::FitBarsToRange( int from, int till,
 
         if ( !pBar->IsFixed() )
         {
-            hasNotFixedBars = TRUE;
+            hasNotFixedBars = true;
 
             freeSpc -= bounds.width;
         }
@@ -275,7 +286,7 @@ void cbRowLayoutPlugin::FitBarsToRange( int from, int till,
         bounds.x = prevX;
 
         prevX = bounds.x + bounds.width;
-        
+
         pBar = pBar->mpNext;
     }
 
@@ -378,10 +389,10 @@ void cbRowLayoutPlugin::RecalcLengthRatios( cbRowInfo* pRow )
     // attach remainder (the result of lost precision) to the
     // last not-fixed bar
 
-#if !defined(__EXPERIMENTAL)    
+#if !defined(__EXPERIMENTAL)
 
     if ( pLastNotFixed )
-        
+
         pLastNotFixed->mLenRatio += pcntLeft;
 #endif
 
@@ -389,11 +400,11 @@ void cbRowLayoutPlugin::RecalcLengthRatios( cbRowInfo* pRow )
 
 void cbRowLayoutPlugin::ApplyLengthRatios( cbRowInfo* pRow )
 {
+    size_t i;
     double pcntSum = 0;
 
     // FOR NOW:: all-in-one
 
-    size_t i = 0;
     for ( i = 0; i != pRow->mBars.Count(); ++i )
     {
         if ( !pRow->mBars[i]->IsFixed() )
@@ -402,13 +413,13 @@ void cbRowLayoutPlugin::ApplyLengthRatios( cbRowInfo* pRow )
 
     /*
     pBar = node_to_first_bar_node( pRow );
-    
+
     while( pBar )
     {
         cbBarInfo& bar = node_to_bar( pBar );
 
         if ( !bar.IsFixed() )
-        
+
             bar.mLenRatio = pcntSum / bar.mLenRatio;
 
         pBar = pBar->Next();
@@ -426,26 +437,29 @@ void cbRowLayoutPlugin::ApplyLengthRatios( cbRowInfo* pRow )
     // is returned right back to the row - so that it would retain
     // it's original dimensions in this row (this is kind of AI...)
     //
-    // The problem is - when it's remvoed, the sum of 
+    // The problem is - when it's remvoed, the sum of
     // mLenRatio's is not in "balance", i.e. is < 1.0,
     // it's possible to restore balance, but instead of that
-    // we artifically ajdust freeSpc value in a way that it would 
+    // we artifically ajdust freeSpc value in a way that it would
     // look like total of mLetRatio's is 1.0, thus original
     // len. ratios are _preserved_:
 
+    if (pcntSum == 0.0)
+        pcntSum = 1.0;
+
     double unit = freeSpc / pcntSum;
 
-    bool haveSquished = FALSE;
+    bool haveSquished = false;
 
     for ( i = 0; i != pRow->mBars.Count(); ++i )
     {
         if ( !pRow->mBars[i]->IsFixed() )
         {
-            cbBarInfo& bar = *pRow->mBars[i];   
-            
+            cbBarInfo& bar = *pRow->mBars[i];
+
             if ( int( unit * bar.mLenRatio ) < mpPane->mProps.mMinCBarDim.x )
             {
-                haveSquished = TRUE;
+                haveSquished = true;
 
                 bar.mBounds.width = -1; // mark as "squished"
 
@@ -473,8 +487,8 @@ void cbRowLayoutPlugin::ApplyLengthRatios( cbRowInfo* pRow )
             else
                 bar.mBounds.width = int( unit * bar.mLenRatio );
 
-            // a little bit of AI: 
-            // memorize bar's height and width, when docked in 
+            // a little bit of AI:
+            // memorize bar's height and width, when docked in
             // the current orientation - by making the current
             // dimensions to be "preffered" ones for this docking state
 
@@ -493,37 +507,37 @@ void cbRowLayoutPlugin::DetectBarHandles( cbRowInfo* pRow )
 {
     // first pass from left to right (detect left-side handles)
 
-    bool foundNotFixed = FALSE;
+    bool foundNotFixed = false;
 
     size_t i;
     for ( i = 0; i != pRow->mBars.Count(); ++i )
     {
         cbBarInfo& bar = *pRow->mBars[i];
-        
-        bar.mHasLeftHandle = FALSE;
+
+        bar.mHasLeftHandle = false;
 
         if ( !bar.IsFixed() )
         {
             if ( foundNotFixed )
-        
+
                 if ( bar.mpPrev &&
                      bar.mpPrev->IsFixed() )
-                
-                    bar.mHasLeftHandle = TRUE;
 
-            foundNotFixed = TRUE;
+                    bar.mHasLeftHandle = true;
+
+            foundNotFixed = true;
         }
     }
 
     // pass from right to left (detect right-side handles)
 
-    foundNotFixed = FALSE;
+    foundNotFixed = false;
 
     cbBarInfo* pBar = pRow->mBars[ pRow->mBars.Count() - 1 ];
 
     while( pBar )
     {
-        pBar->mHasRightHandle = FALSE;
+        pBar->mHasRightHandle = false;
 
         if ( !pBar->IsFixed() )
         {
@@ -531,9 +545,9 @@ void cbRowLayoutPlugin::DetectBarHandles( cbRowInfo* pRow )
 
                 if ( pBar->mpNext )
 
-                     pBar->mHasRightHandle = TRUE;
+                     pBar->mHasRightHandle = true;
 
-            foundNotFixed = TRUE;
+            foundNotFixed = true;
         }
 
         pBar = pBar->mpPrev;
@@ -546,7 +560,7 @@ void cbRowLayoutPlugin::RelayoutNotFixedBarsAround( cbBarInfo* pTheBar, cbRowInf
     {
         if (  !pTheBar->IsFixed() )
         {
-            // this bar the first in the row, move it's 
+            // this bar the first in the row, move it's
             // left edge to the very left
             pTheBar->mBounds.width += pTheBar->mBounds.x;
             pTheBar->mBounds.x      = 0;
@@ -559,7 +573,7 @@ void cbRowLayoutPlugin::RelayoutNotFixedBarsAround( cbBarInfo* pTheBar, cbRowInf
     {
         if ( !pTheBar->IsFixed() )
         {
-            // this bar is the last one, move it's 
+            // this bar is the last one, move it's
             // right edge to the very right
 
             pTheBar->mBounds.width = mpPane->mPaneWidth - pTheBar->mBounds.x;
@@ -597,7 +611,7 @@ int cbRowLayoutPlugin::CalcRowHeight( cbRowInfo& row )
 
     size_t i;
     for ( i = 0; i != row.mBars.Count(); ++i )
-    
+
         maxHeight = wxMax( maxHeight, row.mBars[i]->mBounds.height );
 
     return maxHeight;
@@ -664,7 +678,7 @@ void cbRowLayoutPlugin::SlideRightSideBars( cbBarInfo* pTheBar )
     }
 }
 
-void cbRowLayoutPlugin::ShiftLeftTrashold( cbBarInfo* pTheBar, cbRowInfo& row )
+void cbRowLayoutPlugin::ShiftLeftTrashold( cbBarInfo* WXUNUSED(pTheBar), cbRowInfo& row )
 {
     wxRect& first = row.mBars[0]->mBounds;
 
@@ -764,8 +778,8 @@ void cbRowLayoutPlugin::ShiftRightTrashold( cbBarInfo* pTheBar, cbRowInfo& row )
                 }
             }
 
-            int leftShift = ( rightOverflow > leftFreeSpc ) 
-                            ? leftFreeSpc 
+            int leftShift = ( rightOverflow > leftFreeSpc )
+                            ? leftFreeSpc
                             : rightOverflow;
 
             theBar.x -= leftShift;
@@ -782,7 +796,7 @@ void cbRowLayoutPlugin::ShiftRightTrashold( cbBarInfo* pTheBar, cbRowInfo& row )
     } while(1);
 }
 
-void cbRowLayoutPlugin::InsertBefore( cbBarInfo* pBeforeBar, 
+void cbRowLayoutPlugin::InsertBefore( cbBarInfo* pBeforeBar,
                                       cbBarInfo* pTheBar,
                                       cbRowInfo& row        )
 {
@@ -820,7 +834,7 @@ void cbRowLayoutPlugin::DoInsertBar( cbBarInfo* pTheBar, cbRowInfo& row )
             InsertBefore( &bar, pTheBar, row );
             return;
         }
-        
+
         else
         // if bar hits the right edge
         if ( theBar.x <= cur.x + cur.width )
@@ -912,14 +926,14 @@ void cbRowLayoutPlugin::OnInsertBar( cbInsertBarEvent& event )
 
         DetectBarHandles( pIntoRow );
 
-        // do proportional resizing of not-fixed bars 
+        // do proportional resizing of not-fixed bars
         ApplyLengthRatios( pIntoRow );
     }
 
     // adjust the bar's docking state
 
-    // a little bit of AI: 
-    // memorize bar's height and width, when docked in 
+    // a little bit of AI:
+    // memorize bar's height and width, when docked in
     // the current orientation - by making the current
     // dimensions to be "preferred" ones for this docking state
 
@@ -948,8 +962,8 @@ void cbRowLayoutPlugin::OnRemoveBar ( cbRemoveBarEvent& event )
 
     // rest bar information after removing it from the row
     pBar->mpRow           = NULL;
-    pBar->mHasLeftHandle  = FALSE;
-    pBar->mHasRightHandle = FALSE;
+    pBar->mHasLeftHandle  = false;
+    pBar->mHasRightHandle = false;
 
     mpPane->InitLinksForRow( pRow ); // relink "mpNext/mpPrev"s
 
@@ -968,7 +982,7 @@ void cbRowLayoutPlugin::OnRemoveBar ( cbRemoveBarEvent& event )
         // force repainting of bars, in the row, from which the bar was removed
 
         // FIXME:: really needed?
-        pRow->mBars[0]->mUMgrData.SetDirty(TRUE);
+        pRow->mBars[0]->mUMgrData.SetDirty(true);
 
         // re-setup mHasOnlyFixedBars flag for the row information
         event.mpPane->SyncRowFlags( pRow );
@@ -990,7 +1004,7 @@ void cbRowLayoutPlugin::OnLayoutRow( cbLayoutRowEvent& event )
 
     if ( !pRow->mHasOnlyFixedBars )
     {
-        // do proportional resizing of not-fixed bars 
+        // do proportional resizing of not-fixed bars
         ApplyLengthRatios( pRow );
     }
 
@@ -1037,7 +1051,7 @@ void cbRowLayoutPlugin::OnLayoutRows( cbLayoutRowsEvent& event )
         cbRowInfo& row = *mpPane->GetRowList()[ i ];
         //mpPane->CalcLengthRatios(& row);
 
-        // setup "has-handle" flags for rows, which depend on the existance 
+        // setup "has-handle" flags for rows, which depend on the existence
         // of not-fixed bars in the row
 
         if ( !row.mHasOnlyFixedBars )
@@ -1045,22 +1059,22 @@ void cbRowLayoutPlugin::OnLayoutRows( cbLayoutRowsEvent& event )
             if ( mpPane->mAlignment == FL_ALIGN_TOP ||
                  mpPane->mAlignment == FL_ALIGN_LEFT   )
             {
-                row.mHasLowerHandle = TRUE;
+                row.mHasLowerHandle = true;
 
-                row.mHasUpperHandle = FALSE; 
+                row.mHasUpperHandle = false;
             }
             else
             {
-                row.mHasUpperHandle = TRUE;
+                row.mHasUpperHandle = true;
 
-                row.mHasLowerHandle = FALSE; 
+                row.mHasLowerHandle = false;
             }
         }
         else
         {
             // otherwise, rows with fixed-bars only, have no height-resizing handles
-            row.mHasUpperHandle = FALSE; 
-            row.mHasLowerHandle = FALSE; 
+            row.mHasUpperHandle = false;
+            row.mHasLowerHandle = false;
         }
 
         // setup vertical positions for items in the row
@@ -1095,8 +1109,6 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
     // FIXME:: Next line not used.
     //int     newHeight      = pTheRow->mRowHeight;
 
-    int     freeSpc        = 0;
-
     if ( forUpperHandle )
     {
         // calculate available free space from above,
@@ -1104,10 +1116,8 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
 
         cbRowInfo* pRow = pTheRow->mpPrev;
 
-        while( pRow ) 
+        while( pRow )
         {
-            freeSpc += pRow->mRowHeight - event.mpPane->GetMinimalRowHeight( pRow );
-
             pRow = pRow->mpPrev;
         }
     }
@@ -1118,10 +1128,8 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
 
         cbRowInfo* pRow = pTheRow->mpNext;
 
-        while( pRow ) 
+        while( pRow )
         {
-            freeSpc += pRow->mRowHeight - mpPane->GetMinimalRowHeight( pRow );
-
             pRow = pRow->mpNext;
         }
     }
@@ -1154,7 +1162,7 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
             {
                 int prevHeight = pRow->mRowHeight;
 
-                int newHeight  = wxMax( event.mpPane->GetMinimalRowHeight( pRow ), 
+                int newHeight  = wxMax( event.mpPane->GetMinimalRowHeight( pRow ),
                                         prevHeight - needed );
 
                 if ( newHeight != prevHeight )
@@ -1187,7 +1195,7 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
             {
                 int prevHeight = pRow->mRowHeight;
 
-                int newHeight  = wxMax( event.mpPane->GetMinimalRowHeight( pRow ), 
+                int newHeight  = wxMax( event.mpPane->GetMinimalRowHeight( pRow ),
                                         prevHeight - needed );
 
                 if ( newHeight != prevHeight )
@@ -1203,12 +1211,12 @@ void cbRowLayoutPlugin::OnResizeRow( cbResizeRowEvent& event )
     }
 
     if ( forUpperHandle )
-    
+
         event.mpPane->SetRowHeight( pTheRow, pTheRow->mRowHeight + (-ofs) );
     else
         event.mpPane->SetRowHeight( pTheRow, pTheRow->mRowHeight +   ofs  );
 
-    mpLayout->RecalcLayout(FALSE);
+    mpLayout->RecalcLayout(false);
 
     mpLayout->GetUpdatesManager().OnFinishChanges();
     mpLayout->GetUpdatesManager().UpdateNow();