lok: calc: set outline state

use a specific message from the client for set the visibility state of
a group instead of hijacking the update row/column header message

Change-Id: I9634c24bbffaddc916c8ad716ac6d5d31e735a55
Reviewed-on: https://gerrit.libreoffice.org/45445
Reviewed-by: Marco Cecchetti <mrcekets@gmail.com>
Tested-by: Marco Cecchetti <mrcekets@gmail.com>
This commit is contained in:
Marco Cecchetti 2017-11-28 23:08:34 +01:00 committed by Marco Cecchetti
parent 6f2f339d1d
commit f7c841f56f
5 changed files with 59 additions and 44 deletions

View file

@ -599,6 +599,7 @@ static void doc_setClientZoom(LibreOfficeKitDocument* pThis,
int nTileTwipWidth,
int nTileTwipHeight);
static void doc_setClientVisibleArea(LibreOfficeKitDocument* pThis, int nX, int nY, int nWidth, int nHeight);
static void doc_setOutlineState(LibreOfficeKitDocument* pThis, bool bColumn, int nLevel, int nIndex, bool bHidden);
static int doc_createView(LibreOfficeKitDocument* pThis);
static void doc_destroyView(LibreOfficeKitDocument* pThis, int nId);
static void doc_setView(LibreOfficeKitDocument* pThis, int nId);
@ -656,6 +657,7 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XCompone
m_pDocumentClass->getCommandValues = doc_getCommandValues;
m_pDocumentClass->setClientZoom = doc_setClientZoom;
m_pDocumentClass->setClientVisibleArea = doc_setClientVisibleArea;
m_pDocumentClass->setOutlineState = doc_setOutlineState;
m_pDocumentClass->createView = doc_createView;
m_pDocumentClass->destroyView = doc_destroyView;
@ -2986,10 +2988,6 @@ static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCo
int nY = 0;
int nWidth = 0;
int nHeight = 0;
bool bColumn = false;
int nLevel = -1;
int nGroupIndex = -2;
bool bHidden = false;
OString aArguments = aCommand.copy(aViewRowColumnHeaders.getLength() + 1);
sal_Int32 nParamIndex = 0;
do
@ -3015,23 +3013,10 @@ static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCo
nWidth = aValue.toInt32();
else if (aKey == "height")
nHeight = aValue.toInt32();
else if (aKey == "columnOutline")
bColumn = aValue.toBoolean();
else if (aKey == "groupLevel")
nLevel = aValue.toInt32();
else if (aKey == "groupIndex")
nGroupIndex = aValue.toInt32();
else if (aKey == "groupHidden")
bHidden = aValue.toBoolean();
}
while (nParamIndex >= 0);
aRectangle = tools::Rectangle(nX, nY, nX + nWidth, nY + nHeight);
if (nGroupIndex != -2)
{
pDoc->setOutlineState(bColumn, nLevel, nGroupIndex, bHidden);
}
}
OUString aHeaders = pDoc->getRowColumnHeaders(aRectangle);
@ -3133,6 +3118,20 @@ static void doc_setClientVisibleArea(LibreOfficeKitDocument* pThis, int nX, int
pDoc->setClientVisibleArea(aRectangle);
}
static void doc_setOutlineState(LibreOfficeKitDocument* pThis, bool bColumn, int nLevel, int nIndex, bool bHidden)
{
SolarMutexGuard aGuard;
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering";
return;
}
pDoc->setOutlineState(bColumn, nLevel, nIndex, bHidden);
}
static int doc_createView(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pThis*/)
{
SolarMutexGuard aGuard;

View file

@ -224,9 +224,13 @@ struct _LibreOfficeKitDocumentClass
int nTilePixelHeight,
int nTileTwipWidth,
int nTileTwipHeight);
/// @see lok::Document::setVisibleArea).
void (*setClientVisibleArea) (LibreOfficeKitDocument* pThis, int nX, int nY, int nWidth, int nHeight);
/// @see lok::Document::setOutlineState).
void (*setOutlineState) (LibreOfficeKitDocument* pThis, bool bColumn, int nLevel, int nIndex, bool bHidden);
/// @see lok::Document::createView().
int (*createView) (LibreOfficeKitDocument* pThis);
/// @see lok::Document::destroyView().

View file

@ -447,6 +447,19 @@ public:
mpDoc->pClass->setClientVisibleArea(mpDoc, nX, nY, nWidth, nHeight);
}
/**
* Show/Hide a single row/column header outline for Calc documents.
*
* @param bColumn - if we are dealing with a column or row group
* @param nLevel - the level to which the group belongs
* @param nIndex - the group entry index
* @param bHidden - the new group state (collapsed/expanded)
*/
void setOutlineState(bool bColumn, int nLevel, int nIndex, bool bHidden)
{
mpDoc->pClass->setOutlineState(mpDoc, bColumn, nLevel, nIndex, bHidden);
}
/**
* Create a new view for an existing document.
* By default a loaded document has 1 view.

View file

@ -143,19 +143,6 @@ public:
return OUString();
}
/**
* Show/Hide a single row/column header outline for Calc documents.
*
* @param bColumn - if we are dealing with a column or row group
* @param nLevel - the level to which the group belongs
* @param nIndex - the group entry index
* @param bHidden - the new group state (collapsed/expanded)
*/
virtual void setOutlineState(bool /*bColumn*/, int /*nLevel*/, int /*nIndex*/, bool /*bHidden*/)
{
return;
}
/**
* Get position and content of row/column headers of Calc documents.
*
@ -206,6 +193,19 @@ public:
{
}
/**
* Show/Hide a single row/column header outline for Calc documents.
*
* @param bColumn - if we are dealing with a column or row group
* @param nLevel - the level to which the group belongs
* @param nIndex - the group entry index
* @param bHidden - the new group state (collapsed/expanded)
*/
virtual void setOutlineState(bool /*bColumn*/, int /*nLevel*/, int /*nIndex*/, bool /*bHidden*/)
{
return;
}
/// Implementation for
/// lok::Document::getCommandValues(".uno:AcceptTrackedChanges") when there
/// is no matching UNO API.

View file

@ -958,20 +958,6 @@ void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, int
mnTileTwipHeight = nTileTwipHeight_;
}
void ScModelObj::setOutlineState(bool bColumn, int nLevel, int nIndex, bool bHidden)
{
ScViewData* pViewData = ScDocShell::GetViewData();
if (!pViewData)
return;
ScDBFunc* pFunc = pViewData->GetView();
if (pFunc)
pFunc->SetOutlineState(bColumn, nLevel, nIndex, bHidden);
}
OUString ScModelObj::getRowColumnHeaders(const tools::Rectangle& rRectangle)
{
ScViewData* pViewData = ScDocShell::GetViewData();
@ -1045,6 +1031,19 @@ void ScModelObj::setClientVisibleArea(const tools::Rectangle& rRectangle)
pViewData->ForcePageUpDownOffset(rRectangle.GetHeight());
}
void ScModelObj::setOutlineState(bool bColumn, int nLevel, int nIndex, bool bHidden)
{
ScViewData* pViewData = ScDocShell::GetViewData();
if (!pViewData)
return;
ScDBFunc* pFunc = pViewData->GetView();
if (pFunc)
pFunc->SetOutlineState(bColumn, nLevel, nIndex, bHidden);
}
OUString ScModelObj::getPostIts()
{
if (!pDocShell)