LCOV - code coverage report
Current view: top level - sc/source/ui/condformat - condformatmgr.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 133 0.0 %
Date: 2014-11-03 Functions: 0 22 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             : #include "condformatmgr.hxx"
      11             : #include "scresid.hxx"
      12             : #include "globstr.hrc"
      13             : #include "condformatdlg.hxx"
      14             : #include <vcl/msgbox.hxx>
      15             : #include "document.hxx"
      16             : 
      17           0 : ScCondFormatManagerWindow::ScCondFormatManagerWindow(SvSimpleTableContainer& rParent,
      18             :     ScDocument* pDoc, ScConditionalFormatList* pFormatList)
      19             :     : SvSimpleTable(rParent, WB_HSCROLL | WB_SORT | WB_TABSTOP)
      20             :     , mpDoc(pDoc)
      21           0 :     , mpFormatList(pFormatList)
      22             : {
      23           0 :     OUString aConditionStr(ScGlobal::GetRscString(STR_HEADER_COND));
      24           0 :     OUString aRangeStr(ScGlobal::GetRscString(STR_HEADER_RANGE));
      25             : 
      26           0 :     OUStringBuffer sHeader;
      27           0 :     sHeader.append(aRangeStr).append("\t").append(aConditionStr);
      28           0 :     InsertHeaderEntry(sHeader.makeStringAndClear(), HEADERBAR_APPEND, HIB_LEFT | HIB_VCENTER);
      29           0 :     setColSizes();
      30             : 
      31           0 :     Init();
      32           0 :     Show();
      33           0 :     SetSelectionMode(MULTIPLE_SELECTION);
      34           0 : }
      35             : 
      36           0 : OUString ScCondFormatManagerWindow::createEntryString(const ScConditionalFormat& rFormat)
      37             : {
      38           0 :     ScRangeList aRange = rFormat.GetRange();
      39           0 :     OUString aStr;
      40           0 :     aRange.Format(aStr, SCA_VALID, mpDoc, mpDoc->GetAddressConvention());
      41           0 :     aStr += "\t";
      42           0 :     aStr += ScCondFormatHelper::GetExpression(rFormat, aRange.GetTopLeftCorner());
      43           0 :     return aStr;
      44             : }
      45             : 
      46           0 : void ScCondFormatManagerWindow::Init()
      47             : {
      48           0 :     SetUpdateMode(false);
      49             : 
      50           0 :     if (mpFormatList)
      51             :     {
      52           0 :         for(ScConditionalFormatList::iterator itr = mpFormatList->begin(); itr != mpFormatList->end(); ++itr)
      53             :         {
      54           0 :             SvTreeListEntry* pEntry = InsertEntryToColumn( createEntryString(*itr), TREELIST_APPEND, 0xffff );
      55           0 :             maMapLBoxEntryToCondIndex.insert(std::pair<SvTreeListEntry*,sal_Int32>(pEntry,itr->GetKey()));
      56             :         }
      57             :     }
      58             : 
      59           0 :     SetUpdateMode(true);
      60             : 
      61           0 :     if (mpFormatList && mpFormatList->size())
      62           0 :         SelectRow(0);
      63           0 : }
      64             : 
      65           0 : void ScCondFormatManagerWindow::Resize()
      66             : {
      67           0 :     SvSimpleTable::Resize();
      68           0 :     if (GetParentDialog()->isCalculatingInitialLayoutSize())
      69           0 :         setColSizes();
      70           0 : }
      71             : 
      72           0 : void ScCondFormatManagerWindow::DeleteSelection()
      73             : {
      74           0 :     if(GetSelectionCount())
      75             :     {
      76           0 :         for(SvTreeListEntry* pEntry = FirstSelected(); pEntry != NULL; pEntry = NextSelected(pEntry))
      77             :         {
      78           0 :             sal_Int32 nIndex = maMapLBoxEntryToCondIndex.find(pEntry)->second;
      79           0 :             mpFormatList->erase(nIndex);
      80             :         }
      81           0 :         RemoveSelection();
      82             :     }
      83           0 : }
      84             : 
      85           0 : ScConditionalFormat* ScCondFormatManagerWindow::GetSelection()
      86             : {
      87           0 :     SvTreeListEntry* pEntry = FirstSelected();
      88           0 :     if(!pEntry)
      89           0 :         return NULL;
      90             : 
      91           0 :     sal_Int32 nIndex = maMapLBoxEntryToCondIndex.find(pEntry)->second;
      92           0 :     return mpFormatList->GetFormat(nIndex);
      93             : }
      94             : 
      95           0 : void ScCondFormatManagerWindow::Update()
      96             : {
      97           0 :     Clear();
      98           0 :     maMapLBoxEntryToCondIndex.clear();
      99           0 :     Init();
     100           0 : }
     101             : 
     102           0 : void ScCondFormatManagerWindow::setColSizes()
     103             : {
     104           0 :     HeaderBar &rBar = GetTheHeaderBar();
     105           0 :     if (rBar.GetItemCount() < 2)
     106           0 :         return;
     107           0 :     long aStaticTabs[]= { 2, 0, 0 };
     108           0 :     aStaticTabs[2] = rBar.GetSizePixel().Width() / 2;
     109           0 :     SvSimpleTable::SetTabs(aStaticTabs, MAP_PIXEL);
     110             : }
     111             : 
     112           0 : ScCondFormatManagerDlg::ScCondFormatManagerDlg(vcl::Window* pParent, ScDocument* pDoc, const ScConditionalFormatList* pFormatList, const ScAddress& rPos):
     113             :     ModalDialog(pParent, "CondFormatManager", "modules/scalc/ui/condformatmanager.ui"),
     114           0 :     mpFormatList( pFormatList ? new ScConditionalFormatList(*pFormatList) : NULL),
     115             :     mpDoc(pDoc),
     116             :     maPos(rPos),
     117           0 :     mbModified(false)
     118             : {
     119           0 :     SvSimpleTableContainer *pContainer = get<SvSimpleTableContainer>("CONTAINER");
     120           0 :     Size aSize(LogicToPixel(Size(290, 220), MAP_APPFONT));
     121           0 :     pContainer->set_width_request(aSize.Width());
     122           0 :     pContainer->set_height_request(aSize.Height());
     123           0 :     m_pCtrlManager = new ScCondFormatManagerWindow(*pContainer, mpDoc, mpFormatList);
     124           0 :     get(m_pBtnAdd, "add");
     125           0 :     get(m_pBtnRemove, "remove");
     126           0 :     get(m_pBtnEdit, "edit");
     127             : 
     128           0 :     m_pBtnRemove->SetClickHdl(LINK(this, ScCondFormatManagerDlg, RemoveBtnHdl));
     129           0 :     m_pBtnEdit->SetClickHdl(LINK(this, ScCondFormatManagerDlg, EditBtnHdl));
     130           0 :     m_pBtnAdd->SetClickHdl(LINK(this, ScCondFormatManagerDlg, AddBtnHdl));
     131           0 :     m_pCtrlManager->SetDoubleClickHdl(LINK(this, ScCondFormatManagerDlg, EditBtnHdl));
     132           0 : }
     133             : 
     134           0 : ScCondFormatManagerDlg::~ScCondFormatManagerDlg()
     135             : {
     136           0 :     delete m_pCtrlManager;
     137           0 :     delete mpFormatList;
     138           0 : }
     139             : 
     140           0 : bool ScCondFormatManagerDlg::IsInRefMode() const
     141             : {
     142           0 :     return true;
     143             : }
     144             : 
     145           0 : ScConditionalFormatList* ScCondFormatManagerDlg::GetConditionalFormatList()
     146             : {
     147           0 :     ScConditionalFormatList* pList = mpFormatList;
     148           0 :     mpFormatList = NULL;
     149           0 :     return pList;
     150             : }
     151             : 
     152           0 : IMPL_LINK_NOARG(ScCondFormatManagerDlg, RemoveBtnHdl)
     153             : {
     154           0 :     m_pCtrlManager->DeleteSelection();
     155           0 :     mbModified = true;
     156           0 :     return 0;
     157             : }
     158             : 
     159           0 : IMPL_LINK_NOARG(ScCondFormatManagerDlg, EditBtnHdl)
     160             : {
     161           0 :     ScConditionalFormat* pFormat = m_pCtrlManager->GetSelection();
     162             : 
     163           0 :     if(!pFormat)
     164           0 :         return 0;
     165             : 
     166           0 :     sal_uInt16 nId = 1;
     167           0 :     ScModule* pScMod = SC_MOD();
     168           0 :     pScMod->SetRefDialog( nId, true );
     169             :     boost::scoped_ptr<ScCondFormatDlg> pDlg(new ScCondFormatDlg(this, mpDoc, pFormat, pFormat->GetRange(),
     170           0 :                                                pFormat->GetRange().GetTopLeftCorner(), condformat::dialog::NONE));
     171           0 :     Show(false, 0);
     172           0 :     if(pDlg->Execute() == RET_OK)
     173             :     {
     174           0 :         sal_Int32 nKey = pFormat->GetKey();
     175           0 :         mpFormatList->erase(nKey);
     176           0 :         ScConditionalFormat* pNewFormat = pDlg->GetConditionalFormat();
     177           0 :         if(pNewFormat)
     178             :         {
     179           0 :             pNewFormat->SetKey(nKey);
     180           0 :             mpFormatList->InsertNew(pNewFormat);
     181             :         }
     182             : 
     183           0 :         m_pCtrlManager->Update();
     184           0 :         mbModified = true;
     185             :     }
     186           0 :     Show(true, 0);
     187             : 
     188           0 :     pScMod->SetRefDialog( nId, false );
     189             : 
     190           0 :     return 0;
     191             : }
     192             : 
     193             : namespace {
     194             : 
     195           0 : sal_uInt32 FindKey(ScConditionalFormatList* pFormatList)
     196             : {
     197           0 :     sal_uInt32 nKey = 0;
     198           0 :     for(ScConditionalFormatList::const_iterator itr = pFormatList->begin(), itrEnd = pFormatList->end();
     199             :             itr != itrEnd; ++itr)
     200             :     {
     201           0 :         if(itr->GetKey() > nKey)
     202           0 :             nKey = itr->GetKey();
     203             :     }
     204             : 
     205           0 :     return nKey + 1;
     206             : }
     207             : 
     208             : }
     209             : 
     210           0 : IMPL_LINK_NOARG(ScCondFormatManagerDlg, AddBtnHdl)
     211             : {
     212           0 :     sal_uInt16 nId = 1;
     213           0 :     ScModule* pScMod = SC_MOD();
     214           0 :     pScMod->SetRefDialog( nId, true );
     215             :     boost::scoped_ptr<ScCondFormatDlg> pDlg(new ScCondFormatDlg(this, mpDoc, NULL, ScRangeList(),
     216           0 :                                                maPos, condformat::dialog::CONDITION));
     217           0 :     Show(false, 0);
     218           0 :     if(pDlg->Execute() == RET_OK)
     219             :     {
     220           0 :         ScConditionalFormat* pNewFormat = pDlg->GetConditionalFormat();
     221           0 :         if(pNewFormat)
     222             :         {
     223           0 :             mpFormatList->InsertNew(pNewFormat);
     224           0 :             pNewFormat->SetKey(FindKey(mpFormatList));
     225           0 :             m_pCtrlManager->Update();
     226             : 
     227           0 :             mbModified = true;
     228             :         }
     229             :     }
     230           0 :     Show(true, 0);
     231           0 :     pScMod->SetRefDialog( nId, false );
     232             : 
     233           0 :     return 0;
     234           0 : }
     235             : 
     236             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10