sc/inc/column.hxx | 2 sc/inc/document.hxx | 2 sc/inc/global.hxx | 8 ++ sc/inc/table.hxx | 6 + sc/qa/unit/ucalc.cxx | 36 ++++------ sc/source/core/data/column2.cxx | 20 ++--- sc/source/core/data/document.cxx | 4 - sc/source/core/data/table1.cxx | 134 ++++++++++++++++++++++++++++++++------- sc/source/ui/vba/vbarange.cxx | 13 +-- sc/source/ui/view/tabview2.cxx | 8 +- sc/source/ui/view/viewfun2.cxx | 4 - 11 files changed, 163 insertions(+), 74 deletions(-)
New commits: commit 5e0672f32ea6a4d3d6cf66874d0d7c0bdb3dec1d Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Aug 9 15:58:00 2012 +0200 remove useless variable Change-Id: Ic04e11cd0768bc203188f0b5adb5f4b9725fd6d9 diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index fbd84e7..d381db3 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1335,7 +1335,6 @@ SCROW ScColumn::FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const { if(bForward) { - bool bFound = false; do { nRow++; @@ -1362,13 +1361,12 @@ SCROW ScColumn::FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const nRow = maItems[nIndex].nRow - 1; } } - while(!bFound && nRow < MAXROW); + while(nRow < MAXROW); return MAXROW; } else { - bool bFound = false; do { nRow--; @@ -1390,7 +1388,7 @@ SCROW ScColumn::FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const else nRow = maItems[nIndex-1].nRow + 1; } - while(!bFound && nRow > 0); + while(nRow > 0); return 0; } commit a69d704dc0950ab62e260cb93eb5f37db45e2183 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Aug 9 15:56:00 2012 +0200 adapt unit test and activate all test cases Change-Id: If5998c62709de0f95b2870327fca951cd81f2406 diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index fc51b22..49beff8 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -4617,27 +4617,27 @@ void Test::testFindAreaPosRowDown() SCCOL nCol = 0; SCROW nRow = 0; - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(2), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(5), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(6), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(MAXROW), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(0), nCol); @@ -4645,12 +4645,12 @@ void Test::testFindAreaPosRowDown() nCol = 1; nRow = 2; - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(3), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(1), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 0, 1); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_DOWN); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(6), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(1), nCol); @@ -4678,29 +4678,27 @@ void Test::testFindAreaPosColRight() SCCOL nCol = 0; SCROW nRow = 0; - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(1), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(2), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); - // BUG! This returns right now 4 because FindAreaPos does - // not yet work correctly with hidden rows - //CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(5), nCol); + CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(5), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(6), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(0), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(MAXCOL), nCol); @@ -4708,14 +4706,12 @@ void Test::testFindAreaPosColRight() nCol = 2; nRow = 1; - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), nRow); - // BUG! This returns right now 4 because FindAreaPos does - // not yet work correctly with hidden rows - //CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(3), nCol); + CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(3), nCol); - pDoc->FindAreaPos(nCol, nRow, 0, 1, 0); + pDoc->FindAreaPos(nCol, nRow, 0, SC_MOVE_RIGHT); CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(1), nRow); CPPUNIT_ASSERT_EQUAL(static_cast<SCCOL>(6), nCol); commit 36bc405d72f1d1898437dfa25d8cb4bdfba63e06 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Aug 9 15:44:23 2012 +0200 fix column navigation with CTRL + direction, fdo#45020 Change-Id: I422b1b85e539d4e2819b93deaf8543410b44b9bd diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 6bc8c8c..d9c18ec 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -167,7 +167,7 @@ public: SCROW GetFirstVisDataPos() const; bool GetPrevDataPos(SCROW& rRow) const; bool GetNextDataPos(SCROW& rRow) const; - void FindDataAreaPos(SCROW& rRow, long nMovY) const; // (without Broadcaster) + void FindDataAreaPos(SCROW& rRow, bool bDown) const; // (without Broadcaster) void FindUsed( SCROW nStartRow, SCROW nEndRow, bool* pUsed ) const; SCSIZE VisibleCount( SCROW nStartRow, SCROW nEndRow ) const; diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 9893e7a..8fcdc6d 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -959,7 +959,7 @@ public: SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, ScDirection eDir ); - SC_DLLPUBLIC void FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY ); + SC_DLLPUBLIC void FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, ScMoveDirection eDirection ); SC_DLLPUBLIC void GetNextPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY, bool bMarked, bool bUnprotected, const ScMarkData& rMark ); diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx index 371431f..44d8810 100644 --- a/sc/inc/global.hxx +++ b/sc/inc/global.hxx @@ -329,6 +329,14 @@ enum FillCmd FILL_AUTO }; +enum ScMoveDirection +{ + SC_MOVE_RIGHT, + SC_MOVE_LEFT, + SC_MOVE_UP, + SC_MOVE_DOWN +}; + enum FillDateCmd { FILL_DAY, diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index bb365db..8748326 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -424,7 +424,7 @@ public: SCSIZE GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScDirection eDir ); - void FindAreaPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY ); + void FindAreaPos( SCCOL& rCol, SCROW& rRow, ScMoveDirection eDirection ); void GetNextPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY, bool bMarked, bool bUnprotected, const ScMarkData& rMark ); @@ -913,6 +913,10 @@ private: void CopyPrintRange(const ScTable& rTable); + SCCOL FindNextVisibleColWithContent(SCCOL nCol, bool bRight, SCROW nRow); + + SCCOL FindNextVisibleCol(SCCOL nCol, bool bRight); + /** * Use this to iterate through non-empty visible cells in a single column. */ diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index f22fec0..fbd84e7 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1396,12 +1396,8 @@ SCROW ScColumn::FindNextVisibleRowWithContent(SCROW nRow, bool bForward) const } } -void ScColumn::FindDataAreaPos(SCROW& rRow, long nMovY) const +void ScColumn::FindDataAreaPos(SCROW& rRow, bool bDown) const { - if (!nMovY) - return; - bool bForward = (nMovY>0); - // check if we are in a data area SCSIZE nIndex; bool bThere = Search(rRow, nIndex); @@ -1411,7 +1407,7 @@ void ScColumn::FindDataAreaPos(SCROW& rRow, long nMovY) const size_t nLastIndex = maItems.size() - 1; if (bThere) { - SCROW nNextRow = FindNextVisibleRow(rRow, bForward); + SCROW nNextRow = FindNextVisibleRow(rRow, bDown); SCSIZE nNewIndex; bool bNextThere = Search(nNextRow, nNewIndex); if(bNextThere && maItems[nNewIndex].pCell->IsBlank()) @@ -1423,7 +1419,7 @@ void ScColumn::FindDataAreaPos(SCROW& rRow, long nMovY) const nLastRow = nNextRow; do { - nNextRow = FindNextVisibleRow(nLastRow, bForward); + nNextRow = FindNextVisibleRow(nLastRow, bDown); bNextThere = Search(nNextRow, nNewIndex); if(!bNextThere || maItems[nNewIndex].pCell->IsBlank()) bNextThere = false; @@ -1436,12 +1432,12 @@ void ScColumn::FindDataAreaPos(SCROW& rRow, long nMovY) const } else { - rRow = FindNextVisibleRowWithContent(nNextRow, bForward); + rRow = FindNextVisibleRowWithContent(nNextRow, bDown); } } else { - rRow = FindNextVisibleRowWithContent(rRow, bForward); + rRow = FindNextVisibleRowWithContent(rRow, bDown); } } diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index de977d8..58f834f 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -5329,10 +5329,10 @@ SCSIZE ScDocument::GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB } -void ScDocument::FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY ) +void ScDocument::FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, ScMoveDirection eDirection ) { if (ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab]) - maTabs[nTab]->FindAreaPos( rCol, rRow, nMovX, nMovY ); + maTabs[nTab]->FindAreaPos( rCol, rRow, eDirection ); } diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index 090345a..e8c5d2e 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -1053,44 +1053,132 @@ void ScTable::LimitChartArea( SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol --rEndRow; } -void ScTable::FindAreaPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY ) +SCCOL ScTable::FindNextVisibleCol( SCCOL nCol, bool bRight ) { - if (nMovX) + if(bRight) { - SCsCOL nNewCol = (SCsCOL) rCol; - bool bThere = aCol[nNewCol].HasVisibleDataAt(rRow); - bool bFnd; - if (bThere) + nCol++; + SCCOL nEnd = 0; + bool bHidden = pDocument->ColHidden(nCol, nTab, NULL, &nEnd); + if(bHidden) + nCol = nEnd +1; + + return std::min<SCCOL>(MAXCOL, nCol); + } + else + { + nCol--; + SCCOL nStart = MAXCOL; + bool bHidden = pDocument->ColHidden(nCol, nTab, &nStart, NULL); + if(bHidden) + nCol = nStart - 1; + + return std::max<SCCOL>(0, nCol); + } +} + +SCCOL ScTable::FindNextVisibleColWithContent( SCCOL nCol, bool bRight, SCROW nRow ) +{ + if(bRight) + { + if(nCol == MAXCOL) + return MAXCOL; + + do { - do + nCol++; + SCCOL nEndCol = 0; + bool bHidden = pDocument->ColHidden( nCol, nTab, NULL, &nEndCol ); + if(bHidden) { - nNewCol = sal::static_int_cast<SCsCOL>( nNewCol + nMovX ); - bFnd = (nNewCol>=0 && nNewCol<=MAXCOL) ? aCol[nNewCol].HasVisibleDataAt(rRow) : false; + nCol = nEndCol +1; + if(nEndCol >= MAXCOL) + return MAXCOL; } - while (bFnd); - nNewCol = sal::static_int_cast<SCsCOL>( nNewCol - nMovX ); - if (nNewCol == (SCsCOL)rCol) - bThere = false; + if(aCol[nCol].HasVisibleDataAt(nRow)) + return nCol; } + while(nCol < MAXCOL); + + return MAXCOL; + } + else + { + if(nCol == 0) + return 0; - if (!bThere) + do { - do + nCol--; + SCCOL nStartCol = MAXCOL; + bool bHidden = pDocument->ColHidden( nCol, nTab, &nStartCol, NULL ); + if(bHidden) { - nNewCol = sal::static_int_cast<SCsCOL>( nNewCol + nMovX ); - bFnd = (nNewCol>=0 && nNewCol<=MAXCOL) ? aCol[nNewCol].HasVisibleDataAt(rRow) : true; + nCol = nStartCol -1; + if(nCol <= 0) + return 0; } - while (!bFnd); + + if(aCol[nCol].HasVisibleDataAt(nRow)) + return nCol; } + while(nCol > 0); - if (nNewCol<0) nNewCol=0; - if (nNewCol>MAXCOL) nNewCol=MAXCOL; - rCol = (SCCOL) nNewCol; + return 0; } +} + +void ScTable::FindAreaPos( SCCOL& rCol, SCROW& rRow, ScMoveDirection eDirection ) +{ + if (eDirection == SC_MOVE_LEFT || eDirection == SC_MOVE_RIGHT) + { + SCCOL nNewCol = rCol; + bool bThere = aCol[nNewCol].HasVisibleDataAt(rRow); + bool bRight = (eDirection == SC_MOVE_RIGHT); + if (bThere) + { + if(nNewCol >= MAXCOL && eDirection == SC_MOVE_RIGHT) + return; + else if(nNewCol == 0 && eDirection == SC_MOVE_LEFT) + return; - if (nMovY) - aCol[rCol].FindDataAreaPos(rRow,nMovY); + SCCOL nNextCol = FindNextVisibleCol( nNewCol, bRight ); + + if(aCol[nNextCol].HasVisibleDataAt(rRow)) + { + bool bFound = false; + nNewCol = nNextCol; + do + { + nNextCol = FindNextVisibleCol( nNewCol, bRight ); + if(aCol[nNextCol].HasVisibleDataAt(rRow)) + nNewCol = nNextCol; + else + bFound = true; + } + while(!bFound && nNextCol > 0 && nNextCol < MAXCOL); + } + else + { + nNewCol = FindNextVisibleColWithContent(nNewCol, bRight, rRow); + } + } + else + { + nNewCol = FindNextVisibleColWithContent(nNewCol, bRight, rRow); + } + + if (nNewCol<0) + nNewCol=0; + if (nNewCol>MAXCOL) + nNewCol=MAXCOL; + rCol = nNewCol; + } + else + { + aCol[rCol].FindDataAreaPos(rRow,eDirection == SC_MOVE_DOWN); + } } bool ScTable::ValidNextPos( SCCOL nCol, SCROW nRow, const ScMarkData& rMark, diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index 3bc6e4f..7caa0e8 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -3705,21 +3705,20 @@ ScVbaRange::End( ::sal_Int32 Direction ) throw (uno::RuntimeException) ScDocShell* pDocShell = getScDocShell(); ScDocument* pDoc = pDocShell->GetDocument(); - SCsCOL nMoveX = 0; - SCsROW nMoveY = 0; + ScMoveDirection eDirection; switch ( Direction ) { case excel::XlDirection::xlDown: - nMoveY = 1; + eDirection = SC_MOVE_DOWN; break; case excel::XlDirection::xlUp: - nMoveY = -1; + eDirection = SC_MOVE_UP; break; case excel::XlDirection::xlToLeft: - nMoveX = -1; + eDirection = SC_MOVE_LEFT; break; case excel::XlDirection::xlToRight: - nMoveX = 1; + eDirection = SC_MOVE_RIGHT; break; default: throw uno::RuntimeException( ::rtl::OUString( "Invalid Direction" ), uno::Reference< uno::XInterface >() ); @@ -3727,7 +3726,7 @@ ScVbaRange::End( ::sal_Int32 Direction ) throw (uno::RuntimeException) if ( pDoc ) { - pDoc->FindAreaPos( nNewX, nNewY, nTab, nMoveX, nMoveY ); + pDoc->FindAreaPos( nNewX, nNewY, nTab, eDirection ); } ScRange aNewRange( (SCCOL)nNewX, (SCROW)nNewY, nTab, (SCCOL)nNewX, (SCROW)nNewY, nTab ); diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx index e73bbfd..e8f3fa5 100644 --- a/sc/source/ui/view/tabview2.cxx +++ b/sc/source/ui/view/tabview2.cxx @@ -650,16 +650,16 @@ void ScTabView::GetAreaMoveEndPosition(SCsCOL nMovX, SCsROW nMovY, ScFollowMode SCsCOLROW i; if ( nMovX > 0 ) for ( i=0; i<nMovX; i++ ) - pDoc->FindAreaPos( nNewX, nCurY, nTab, 1, 0 ); + pDoc->FindAreaPos( nNewX, nCurY, nTab, SC_MOVE_RIGHT ); if ( nMovX < 0 ) for ( i=0; i<-nMovX; i++ ) - pDoc->FindAreaPos( nNewX, nCurY, nTab, -1, 0 ); + pDoc->FindAreaPos( nNewX, nCurY, nTab, SC_MOVE_LEFT ); if ( nMovY > 0 ) for ( i=0; i<nMovY; i++ ) - pDoc->FindAreaPos( nCurX, nNewY, nTab, 0, 1 ); + pDoc->FindAreaPos( nCurX, nNewY, nTab, SC_MOVE_DOWN ); if ( nMovY < 0 ) for ( i=0; i<-nMovY; i++ ) - pDoc->FindAreaPos( nCurX, nNewY, nTab, 0, -1 ); + pDoc->FindAreaPos( nCurX, nNewY, nTab, SC_MOVE_UP ); if (eMode==SC_FOLLOW_JUMP) // unten/rechts nicht zuviel grau anzeigen { diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index b55e103..4f1cbd9 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -1471,7 +1471,7 @@ void ScViewFunc::FillCrossDblClick() if ( pDoc->HasData( nMovX, nStartY, nTab ) && pDoc->HasData( nMovX, nStartY + 1, nTab ) ) { - pDoc->FindAreaPos( nMovX, nMovY, nTab, 0, 1 ); + pDoc->FindAreaPos( nMovX, nMovY, nTab, SC_MOVE_DOWN ); if ( nMovY > nEndY ) { @@ -1490,7 +1490,7 @@ void ScViewFunc::FillCrossDblClick() if ( pDoc->HasData( nMovX, nStartY, nTab ) && pDoc->HasData( nMovX, nStartY + 1, nTab ) ) { - pDoc->FindAreaPos( nMovX, nMovY, nTab, 0, 1 ); + pDoc->FindAreaPos( nMovX, nMovY, nTab, SC_MOVE_DOWN ); if ( nMovY > nEndY ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits