LCOV - code coverage report
Current view: top level - sc/source/ui/miscdlgs - datafdlg.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 209 0.0 %
Date: 2014-04-14 Functions: 0 23 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  */
       9             : 
      10             : #undef SC_DLLIMPLEMENTATION
      11             : 
      12             : #include "datafdlg.hxx"
      13             : #include "scresid.hxx"
      14             : #include "viewdata.hxx"
      15             : #include "docsh.hxx"
      16             : #include "refundo.hxx"
      17             : #include "undodat.hxx"
      18             : 
      19             : #include "rtl/ustrbuf.hxx"
      20             : 
      21             : #define HDL(hdl)            LINK( this, ScDataFormDlg, hdl )
      22             : 
      23             : 
      24           0 : ScDataFormDlg::ScDataFormDlg(Window* pParent, ScTabViewShell* pTabViewShellOri)
      25             :     : ModalDialog(pParent, "DataFormDialog", "modules/scalc/ui/dataform.ui")
      26           0 :     , pTabViewShell(pTabViewShellOri)
      27             : {
      28           0 :     get(m_pBtnNew, "new");
      29           0 :     get(m_pBtnDelete, "delete");
      30           0 :     get(m_pBtnRestore, "restore");
      31           0 :     get(m_pBtnPrev, "prev");
      32           0 :     get(m_pBtnNext, "next");
      33           0 :     get(m_pBtnClose, "close");
      34           0 :     get(m_pFixedText, "label");
      35           0 :     sNewRecord = m_pFixedText->GetText();
      36           0 :     get(m_pSlider, "scrollbar");
      37           0 :     get(m_pGrid, "grid");
      38             : 
      39             :     //read header form current document, and add new controls
      40             :     OSL_ENSURE( pTabViewShell, "pTabViewShell is NULL! :-/" );
      41           0 :     ScViewData* pViewData = pTabViewShell->GetViewData();
      42             : 
      43           0 :     pDoc = pViewData->GetDocument();
      44           0 :     if (pDoc)
      45             :     {
      46           0 :         ScRange aRange;
      47           0 :         pViewData->GetSimpleArea( aRange );
      48           0 :         ScAddress aStart = aRange.aStart;
      49           0 :         ScAddress aEnd = aRange.aEnd;
      50             : 
      51           0 :         nStartCol = aStart.Col();
      52           0 :         nEndCol = aEnd.Col();
      53           0 :         nStartRow   = aStart.Row();
      54           0 :         nEndRow = aEnd.Row();
      55             : 
      56           0 :         nTab = pViewData->GetTabNo();
      57             :         //if there is no selection
      58           0 :         if ((nStartCol == nEndCol) && (nStartRow == nEndRow))
      59           0 :             bNoSelection = true;
      60             : 
      61           0 :         if (bNoSelection)
      62             :         {
      63             :             //find last not blank cell in row
      64           0 :             for (int i=1;i<=MAX_DATAFORM_COLS;i++)
      65             :             {
      66           0 :                 nEndCol++;
      67           0 :                 OUString aColName = pDoc->GetString(nEndCol, nStartRow, nTab);
      68           0 :                 int nColWidth = pDoc->GetColWidth( nEndCol, nTab );
      69           0 :                 if (aColName.isEmpty() && nColWidth)
      70             :                 {
      71           0 :                     nEndCol--;
      72           0 :                     break;
      73             :                 }
      74           0 :             }
      75             : 
      76             :             //find first not blank cell in row
      77           0 :             for (int i=1;i<=MAX_DATAFORM_COLS;i++)
      78             :             {
      79           0 :                 if (nStartCol <= 0)
      80           0 :                     break;
      81           0 :                 nStartCol--;
      82             : 
      83           0 :                 OUString aColName = pDoc->GetString(nStartCol, nStartRow, nTab);
      84           0 :                 int nColWidth = pDoc->GetColWidth( nEndCol, nTab );
      85           0 :                 if (aColName.isEmpty() && nColWidth)
      86             :                 {
      87           0 :                     nStartCol++;
      88           0 :                     break;
      89             :                 }
      90           0 :             }
      91             : 
      92             :             //skip leading hide column
      93           0 :             for (int i=1;i<=MAX_DATAFORM_COLS;i++)
      94             :             {
      95           0 :                 int nColWidth = pDoc->GetColWidth( nStartCol, nTab );
      96           0 :                 if (nColWidth)
      97           0 :                     break;
      98           0 :                 nStartCol++;
      99             :             }
     100             : 
     101           0 :             if (nEndCol < nStartCol)
     102           0 :                 nEndCol = nStartCol;
     103             : 
     104             :             //find last not blank cell in row
     105           0 :             for (int i=1;i<=MAX_DATAFORM_ROWS;i++)
     106             :             {
     107           0 :                 nEndRow++;
     108           0 :                 OUString aColName = pDoc->GetString(nStartCol, nEndRow, nTab);
     109           0 :                 if (aColName.isEmpty())
     110             :                 {
     111           0 :                     nEndRow--;
     112           0 :                     break;
     113             :                 }
     114           0 :             }
     115             : 
     116             :             //find first not blank cell in row
     117           0 :             for (int i=1;i<=MAX_DATAFORM_ROWS;i++)
     118             :             {
     119           0 :                 if (nStartRow <= 0)
     120           0 :                     break;
     121           0 :                 nStartRow--;
     122             : 
     123           0 :                 OUString aColName = pDoc->GetString(nStartCol, nStartRow, nTab);
     124           0 :                 if (aColName.isEmpty())
     125             :                 {
     126           0 :                     nStartRow++;
     127           0 :                     break;
     128             :                 }
     129           0 :             }
     130             : 
     131           0 :             if (nEndRow < nStartRow)
     132           0 :                 nEndRow = nStartRow;
     133             :         }
     134             : 
     135           0 :         nCurrentRow = nStartRow + 1;
     136             : 
     137           0 :         aColLength = nEndCol - nStartCol + 1;
     138             : 
     139             :         //new the controls
     140           0 :         maFixedTexts.reserve(aColLength);
     141           0 :         maEdits.reserve(aColLength);
     142             : 
     143           0 :         sal_Int32 nGridRow = 0;
     144           0 :         for(sal_uInt16 nIndex = 0; nIndex < aColLength; ++nIndex)
     145             :         {
     146           0 :             OUString aFieldName = pDoc->GetString(nIndex + nStartCol, nStartRow, nTab);
     147           0 :             int nColWidth = pDoc->GetColWidth( nIndex + nStartCol, nTab );
     148           0 :             if (nColWidth)
     149             :             {
     150           0 :                 maFixedTexts.push_back( new FixedText(m_pGrid) );
     151           0 :                 maEdits.push_back( new Edit(m_pGrid, WB_BORDER) );
     152             : 
     153           0 :                 maFixedTexts[nIndex].set_grid_left_attach(0);
     154           0 :                 maEdits[nIndex].set_grid_left_attach(1);
     155           0 :                 maFixedTexts[nIndex].set_grid_top_attach(nGridRow);
     156           0 :                 maEdits[nIndex].set_grid_top_attach(nGridRow);
     157             : 
     158           0 :                 maEdits[nIndex].SetWidthInChars(32);
     159           0 :                 maEdits[nIndex].set_hexpand(true);
     160             : 
     161           0 :                 ++nGridRow;
     162             : 
     163           0 :                 maFixedTexts[nIndex].SetText(aFieldName);
     164           0 :                 maFixedTexts[nIndex].Show();
     165           0 :                 maEdits[nIndex].Show();
     166             :             }
     167             :             else
     168             :             {
     169           0 :                 maFixedTexts.push_back( NULL );
     170           0 :                 maEdits.push_back( NULL );
     171             :             }
     172           0 :             if (!maEdits.is_null(nIndex))
     173           0 :                 maEdits[nIndex].SetModifyHdl( HDL(Impl_DataModifyHdl) );
     174           0 :         }
     175             :     }
     176             : 
     177           0 :     FillCtrls(nCurrentRow);
     178             : 
     179           0 :     m_pSlider->SetPageSize( 10 );
     180           0 :     m_pSlider->SetVisibleSize( 1 );
     181           0 :     m_pSlider->SetLineSize( 1 );
     182           0 :     m_pSlider->SetRange( Range( 0, nEndRow - nStartRow + 1) );
     183           0 :     m_pSlider->Show();
     184             : 
     185           0 :     m_pBtnNew->SetClickHdl(HDL(Impl_NewHdl));
     186           0 :     m_pBtnPrev->SetClickHdl(HDL(Impl_PrevHdl));
     187           0 :     m_pBtnNext->SetClickHdl(HDL(Impl_NextHdl));
     188             : 
     189           0 :     m_pBtnRestore->SetClickHdl(HDL(Impl_RestoreHdl));
     190           0 :     m_pBtnDelete->SetClickHdl(HDL(Impl_DeleteHdl));
     191           0 :     m_pBtnClose->SetClickHdl(HDL(Impl_CloseHdl));
     192             : 
     193           0 :     m_pSlider->SetEndScrollHdl(HDL(Impl_ScrollHdl));
     194             : 
     195           0 :     SetButtonState();
     196           0 : }
     197             : 
     198           0 : ScDataFormDlg::~ScDataFormDlg()
     199             : {
     200             : 
     201           0 : }
     202             : 
     203           0 : void ScDataFormDlg::FillCtrls(SCROW /*nCurrentRow*/)
     204             : {
     205           0 :     OUString  aFieldName;
     206           0 :     for (sal_uInt16 i = 0; i < aColLength; ++i)
     207             :     {
     208           0 :         if (!maEdits.is_null(i))
     209             :         {
     210           0 :             if (nCurrentRow<=nEndRow)
     211             :             {
     212           0 :                 aFieldName = pDoc->GetString(i + nStartCol, nCurrentRow, nTab);
     213           0 :                 maEdits[i].SetText(aFieldName);
     214             :             }
     215             :             else
     216           0 :                 maEdits[i].SetText(OUString());
     217             :         }
     218             :     }
     219             : 
     220           0 :     if (nCurrentRow <= nEndRow)
     221             :     {
     222           0 :         OUStringBuffer aBuf;
     223           0 :         aBuf.append(static_cast<sal_Int32>(nCurrentRow - nStartRow));
     224           0 :         aBuf.appendAscii(" / ");
     225           0 :         aBuf.append(static_cast<sal_Int32>(nEndRow - nStartRow));
     226           0 :         m_pFixedText->SetText(aBuf.makeStringAndClear());
     227             :     }
     228             :     else
     229           0 :         m_pFixedText->SetText(sNewRecord);
     230             : 
     231           0 :     m_pSlider->SetThumbPos(nCurrentRow-nStartRow-1);
     232           0 : }
     233             : 
     234           0 : IMPL_LINK( ScDataFormDlg, Impl_DataModifyHdl, Edit*, pEdit)
     235             : {
     236           0 :     if ( pEdit->IsModified() )
     237           0 :         m_pBtnRestore->Enable( true );
     238           0 :     return 0;
     239             : }
     240             : 
     241           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_NewHdl)
     242             : {
     243           0 :     ScViewData* pViewData = pTabViewShell->GetViewData();
     244           0 :     ScDocShell* pDocSh = pViewData->GetDocShell();
     245           0 :     if ( pDoc )
     246             :     {
     247           0 :         bool bHasData = false;
     248           0 :         boost::ptr_vector<Edit>::iterator itr = maEdits.begin(), itrEnd = maEdits.end();
     249           0 :         for(; itr != itrEnd; ++itr)
     250           0 :             if (!boost::is_null(itr))
     251           0 :                 if ( !(*itr).GetText().isEmpty() )
     252             :                 {
     253           0 :                     bHasData = true;
     254           0 :                     break;
     255             :                 }
     256             : 
     257           0 :         if ( bHasData )
     258             :         {
     259           0 :             pTabViewShell->DataFormPutData( nCurrentRow , nStartRow , nStartCol , nEndRow , nEndCol , maEdits , aColLength );
     260           0 :             nCurrentRow++;
     261           0 :             if (nCurrentRow >= nEndRow + 2)
     262             :             {
     263           0 :                     nEndRow ++ ;
     264           0 :                     m_pSlider->SetRange( Range( 0, nEndRow - nStartRow + 1) );
     265             :             }
     266           0 :             SetButtonState();
     267           0 :             FillCtrls(nCurrentRow);
     268           0 :             pDocSh->SetDocumentModified();
     269           0 :             pDocSh->PostPaintGridAll();
     270             :             }
     271             :     }
     272           0 :     return 0;
     273             : }
     274             : 
     275           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_PrevHdl)
     276             : {
     277           0 :     if (pDoc)
     278             :     {
     279           0 :         if ( nCurrentRow > nStartRow +1 )
     280           0 :             nCurrentRow--;
     281             : 
     282           0 :         SetButtonState();
     283           0 :         FillCtrls(nCurrentRow);
     284             :     }
     285           0 :     return 0;
     286             : }
     287             : 
     288           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_NextHdl)
     289             : {
     290           0 :     if (pDoc)
     291             :     {
     292           0 :         if ( nCurrentRow <= nEndRow)
     293           0 :             nCurrentRow++;
     294             : 
     295           0 :         SetButtonState();
     296           0 :         FillCtrls(nCurrentRow);
     297             :     }
     298           0 :     return 0;
     299             : }
     300             : 
     301           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_RestoreHdl)
     302             : {
     303           0 :     if (pDoc)
     304             :     {
     305           0 :         FillCtrls(nCurrentRow);
     306             :     }
     307           0 :     return 0;
     308             : }
     309             : 
     310           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_DeleteHdl)
     311             : {
     312           0 :     ScViewData* pViewData = pTabViewShell->GetViewData();
     313           0 :     ScDocShell* pDocSh = pViewData->GetDocShell();
     314           0 :     if (pDoc)
     315             :     {
     316           0 :         ScRange aRange(nStartCol, nCurrentRow, nTab, nEndCol, nCurrentRow, nTab);
     317           0 :         pDoc->DeleteRow(aRange);
     318           0 :         nEndRow--;
     319             : 
     320           0 :         SetButtonState();
     321           0 :         pDocSh->GetUndoManager()->Clear();
     322             : 
     323           0 :         FillCtrls(nCurrentRow);
     324           0 :         pDocSh->SetDocumentModified();
     325           0 :         pDocSh->PostPaintGridAll();
     326             :     }
     327           0 :     return 0;
     328             : }
     329             : 
     330           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_CloseHdl)
     331             : {
     332           0 :     EndDialog( );
     333           0 :     return 0;
     334             : }
     335             : 
     336           0 : IMPL_LINK_NOARG(ScDataFormDlg, Impl_ScrollHdl)
     337             : {
     338           0 :     long nOffset = m_pSlider->GetThumbPos();
     339           0 :     nCurrentRow = nStartRow + nOffset + 1;
     340           0 :     SetButtonState();
     341           0 :     FillCtrls(nCurrentRow);
     342           0 :     return 0;
     343             : }
     344             : 
     345           0 : void ScDataFormDlg::SetButtonState()
     346             : {
     347           0 :     if (nCurrentRow > nEndRow)
     348             :     {
     349           0 :         m_pBtnDelete->Enable( false );
     350           0 :         m_pBtnNext->Enable( false );
     351             :     }
     352             :     else
     353             :     {
     354           0 :         m_pBtnDelete->Enable( true );
     355           0 :         m_pBtnNext->Enable( true );
     356             :     }
     357             : 
     358           0 :     if (nCurrentRow == nStartRow + 1)
     359           0 :         m_pBtnPrev->Enable( false );
     360             :     else
     361           0 :         m_pBtnPrev->Enable( true );
     362             : 
     363           0 :     m_pBtnRestore->Enable( false );
     364           0 :     if ( maEdits.size()>=1 && !maEdits.is_null(0) )
     365           0 :         maEdits[0].GrabFocus();
     366           0 : }
     367             : 
     368             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10