Files
loongoffice/sc/source/ui/condformat/condformatmgr.cxx
Markus Mohrhard 37e6631cc5 remove whitespace
Change-Id: Ib15413e73409cc33de01fa92a47b9d1237cfc4b2
2014-06-25 05:41:10 +02:00

234 lines
6.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include "condformatmgr.hxx"
#include "scresid.hxx"
#include "globstr.hrc"
#include "condformatdlg.hxx"
#include <vcl/msgbox.hxx>
#include "document.hxx"
ScCondFormatManagerWindow::ScCondFormatManagerWindow(SvSimpleTableContainer& rParent,
ScDocument* pDoc, ScConditionalFormatList* pFormatList)
: SvSimpleTable(rParent, WB_HSCROLL | WB_SORT | WB_TABSTOP)
, mpDoc(pDoc)
, mpFormatList(pFormatList)
{
OUString aConditionStr(ScGlobal::GetRscString(STR_HEADER_COND));
OUString aRangeStr(ScGlobal::GetRscString(STR_HEADER_RANGE));
OUStringBuffer sHeader;
sHeader.append(aRangeStr).append("\t").append(aConditionStr);
InsertHeaderEntry(sHeader.makeStringAndClear(), HEADERBAR_APPEND, HIB_LEFT | HIB_VCENTER);
setColSizes();
Init();
Show();
SetSelectionMode(MULTIPLE_SELECTION);
}
OUString ScCondFormatManagerWindow::createEntryString(const ScConditionalFormat& rFormat)
{
ScRangeList aRange = rFormat.GetRange();
OUString aStr;
aRange.Format(aStr, SCA_VALID, mpDoc, mpDoc->GetAddressConvention());
aStr += "\t";
aStr += ScCondFormatHelper::GetExpression(rFormat, aRange.GetTopLeftCorner());
return aStr;
}
void ScCondFormatManagerWindow::Init()
{
SetUpdateMode(false);
for(ScConditionalFormatList::iterator itr = mpFormatList->begin(); itr != mpFormatList->end(); ++itr)
{
SvTreeListEntry* pEntry = InsertEntryToColumn( createEntryString(*itr), TREELIST_APPEND, 0xffff );
maMapLBoxEntryToCondIndex.insert(std::pair<SvTreeListEntry*,sal_Int32>(pEntry,itr->GetKey()));
}
SetUpdateMode(true);
if (mpFormatList->size())
SelectRow(0);
}
void ScCondFormatManagerWindow::Resize()
{
SvSimpleTable::Resize();
if (GetParentDialog()->isCalculatingInitialLayoutSize())
setColSizes();
}
void ScCondFormatManagerWindow::DeleteSelection()
{
if(GetSelectionCount())
{
for(SvTreeListEntry* pEntry = FirstSelected(); pEntry != NULL; pEntry = NextSelected(pEntry))
{
sal_Int32 nIndex = maMapLBoxEntryToCondIndex.find(pEntry)->second;
mpFormatList->erase(nIndex);
}
RemoveSelection();
}
}
ScConditionalFormat* ScCondFormatManagerWindow::GetSelection()
{
SvTreeListEntry* pEntry = FirstSelected();
if(!pEntry)
return NULL;
sal_Int32 nIndex = maMapLBoxEntryToCondIndex.find(pEntry)->second;
return mpFormatList->GetFormat(nIndex);
}
void ScCondFormatManagerWindow::Update()
{
Clear();
maMapLBoxEntryToCondIndex.clear();
Init();
}
void ScCondFormatManagerWindow::setColSizes()
{
HeaderBar &rBar = GetTheHeaderBar();
if (rBar.GetItemCount() < 2)
return;
long aStaticTabs[]= { 2, 0, 0 };
aStaticTabs[2] = rBar.GetSizePixel().Width() / 2;
SvSimpleTable::SetTabs(aStaticTabs, MAP_PIXEL);
}
ScCondFormatManagerDlg::ScCondFormatManagerDlg(Window* pParent, ScDocument* pDoc, const ScConditionalFormatList* pFormatList, const ScAddress& rPos):
ModalDialog(pParent, "CondFormatManager", "modules/scalc/ui/condformatmanager.ui"),
mpFormatList( pFormatList ? new ScConditionalFormatList(*pFormatList) : NULL),
mpDoc(pDoc),
maPos(rPos),
mbModified(false)
{
SvSimpleTableContainer *pContainer = get<SvSimpleTableContainer>("CONTAINER");
Size aSize(LogicToPixel(Size(290, 220), MAP_APPFONT));
pContainer->set_width_request(aSize.Width());
pContainer->set_height_request(aSize.Height());
m_pCtrlManager = new ScCondFormatManagerWindow(*pContainer, mpDoc, mpFormatList);
get(m_pBtnAdd, "add");
get(m_pBtnRemove, "remove");
get(m_pBtnEdit, "edit");
m_pBtnRemove->SetClickHdl(LINK(this, ScCondFormatManagerDlg, RemoveBtnHdl));
m_pBtnEdit->SetClickHdl(LINK(this, ScCondFormatManagerDlg, EditBtnHdl));
m_pBtnAdd->SetClickHdl(LINK(this, ScCondFormatManagerDlg, AddBtnHdl));
m_pCtrlManager->SetDoubleClickHdl(LINK(this, ScCondFormatManagerDlg, EditBtnHdl));
}
ScCondFormatManagerDlg::~ScCondFormatManagerDlg()
{
delete m_pCtrlManager;
delete mpFormatList;
}
bool ScCondFormatManagerDlg::IsInRefMode() const
{
return true;
}
ScConditionalFormatList* ScCondFormatManagerDlg::GetConditionalFormatList()
{
ScConditionalFormatList* pList = mpFormatList;
mpFormatList = NULL;
return pList;
}
IMPL_LINK_NOARG(ScCondFormatManagerDlg, RemoveBtnHdl)
{
m_pCtrlManager->DeleteSelection();
mbModified = true;
return 0;
}
IMPL_LINK_NOARG(ScCondFormatManagerDlg, EditBtnHdl)
{
ScConditionalFormat* pFormat = m_pCtrlManager->GetSelection();
if(!pFormat)
return 0;
sal_uInt16 nId = 1;
ScModule* pScMod = SC_MOD();
pScMod->SetRefDialog( nId, true );
boost::scoped_ptr<ScCondFormatDlg> pDlg(new ScCondFormatDlg(this, mpDoc, pFormat, pFormat->GetRange(),
pFormat->GetRange().GetTopLeftCorner(), condformat::dialog::NONE));
Show(false, 0);
if(pDlg->Execute() == RET_OK)
{
sal_Int32 nKey = pFormat->GetKey();
mpFormatList->erase(nKey);
ScConditionalFormat* pNewFormat = pDlg->GetConditionalFormat();
if(pNewFormat)
{
pNewFormat->SetKey(nKey);
mpFormatList->InsertNew(pNewFormat);
}
m_pCtrlManager->Update();
mbModified = true;
}
Show(true, 0);
pScMod->SetRefDialog( nId, false );
return 0;
}
namespace {
sal_uInt32 FindKey(ScConditionalFormatList* pFormatList)
{
sal_uInt32 nKey = 0;
for(ScConditionalFormatList::const_iterator itr = pFormatList->begin(), itrEnd = pFormatList->end();
itr != itrEnd; ++itr)
{
if(itr->GetKey() > nKey)
nKey = itr->GetKey();
}
return nKey + 1;
}
}
IMPL_LINK_NOARG(ScCondFormatManagerDlg, AddBtnHdl)
{
sal_uInt16 nId = 1;
ScModule* pScMod = SC_MOD();
pScMod->SetRefDialog( nId, true );
boost::scoped_ptr<ScCondFormatDlg> pDlg(new ScCondFormatDlg(this, mpDoc, NULL, ScRangeList(),
maPos, condformat::dialog::CONDITION));
Show(false, 0);
if(pDlg->Execute() == RET_OK)
{
ScConditionalFormat* pNewFormat = pDlg->GetConditionalFormat();
if(pNewFormat)
{
mpFormatList->InsertNew(pNewFormat);
pNewFormat->SetKey(FindKey(mpFormatList));
m_pCtrlManager->Update();
mbModified = true;
}
}
Show(true, 0);
pScMod->SetRefDialog( nId, false );
return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */