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

Generated by: LCOV version 1.10