diff options
author | Manfred Blume <manfred.blume@cib.de> | 2017-10-27 07:29:08 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-04-28 14:42:54 +0200 |
commit | 750f616d137cda0656f3b2a06a013fd3569a039b (patch) | |
tree | 60c2f5fc6f55f35fd95a940250657bbff18dc8d8 /sw | |
parent | 67b1c26c27590678ece7bcef763433aedd0b164d (diff) |
sw: add frame size & content logging to dbg_lay
Change-Id: Ibc4f3dbfb9f6a4ad182185deac71d5fd31d5597f
Reviewed-on: https://gerrit.libreoffice.org/43926
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw')
-rwxr-xr-x[-rw-r--r--] | sw/source/core/layout/dbg_lay.cxx | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/sw/source/core/layout/dbg_lay.cxx b/sw/source/core/layout/dbg_lay.cxx index c472a90f51ba..6db1895b80e8 100644..100755 --- a/sw/source/core/layout/dbg_lay.cxx +++ b/sw/source/core/layout/dbg_lay.cxx @@ -100,6 +100,13 @@ #include <flyfrm.hxx> #include <txtfrm.hxx> #include <fntcache.hxx> +#include <tabfrm.hxx> +#include <swtblfmt.hxx> +#include <rowfrm.hxx> +#include <cellfrm.hxx> +#include <layfrm.hxx> +#include <frame.hxx> +#include <swtable.hxx> #include <comphelper/string.hxx> @@ -447,6 +454,105 @@ static void lcl_Flags(OStringBuffer& rOut, const SwFrame* pFrame) rOut.append(pFrame->isFramePrintAreaValid() ? '+' : '-'); } +static void lcl_Padded(OStringBuffer& rOut, const OString& s, size_t length) +{ + rOut.append(s); + for (size_t i = 0; i < length - s.getLength(); i++) + { + rOut.append(" "); + } +} + +static void lcl_Padded(OStringBuffer& rOut, const long n, size_t length = 5) +{ + sal_Char sz[RTL_STR_MAX_VALUEOFINT64]; + rtl_str_valueOfInt64(sz, n, 10); + OString s(sz); + lcl_Padded(rOut, s, length); +} + +/// output the frame as plain text. +static void lcl_FrameRect(OStringBuffer& rOut, const char* hint, const SwRect rect) +{ + rOut.append("["); + rOut.append(hint); + rOut.append(":X:"); + lcl_Padded(rOut, rect.Pos().X()); + rOut.append(", Y:"); + lcl_Padded(rOut, rect.Pos().Y()); + rOut.append(", Width:"); + lcl_Padded(rOut, rect.SSize().Width()); + rOut.append(", Height:"); + lcl_Padded(rOut, rect.SSize().Height()); + rOut.append("] "); +} + +static OString lcl_TableInfo(const SwTabFrame* pTabFrame) +{ + const SwTable* pTable = pTabFrame->GetTable(); + const SwModify* pModify = pTable->GetRegisteredIn(); + const SwFormat* pFormat = static_cast<const SwFormat*>(pModify); + const OUString& text = pFormat->GetName(); + return OUStringToOString(text, RTL_TEXTENCODING_ASCII_US); +} + +static OString lcl_RowInfo(const SwRowFrame* pFrame) +{ + // dummy, needs actual functionality... + if (pFrame == nullptr) + return ""; + const SwTableLine* pTabLine = pFrame->GetTabLine(); + if (pTabLine == nullptr) + return ""; + + return "RowInfo"; +} + +static OUString lcl_CellText(const SwCellFrame* pFrame) +{ + OUString result; + int n = 0; + sal_Char sz[RTL_STR_MAX_VALUEOFINT64]; + + const SwStartNode* pStartNode = pFrame->GetTabBox()->GetSttNd(); + const SwEndNode* pEndNode = pStartNode->EndOfSectionNode(); + const SwNodes& nodes = pStartNode->GetNodes(); + + for (sal_uLong i = pStartNode->GetIndex(); i < nodes.Count(); i++) + { + SwNode* pNode = nodes[i]; + + if (pNode->IsEndNode()) + { + if (pNode->EndOfSectionNode() == pEndNode) + break; + } + else if (pNode->IsTextNode()) + { + n++; + result += "Para:"; + rtl_str_valueOfInt64(sz, n, 10); + OUString s = OUString::createFromAscii(sz); + result += s; + result += " "; + result += pNode->GetTextNode()->GetText(); + } + } + + rtl_str_valueOfInt64(sz, n, 10); + OUString s = OUString::createFromAscii(sz); + s += " para(s):"; + s += result; + + return s; +} + +static OString lcl_CellInfo(const SwCellFrame* pFrame) +{ + const OUString text = "CellInfo: " + pFrame->GetTabBox()->GetName() + " Text: " + lcl_CellText(pFrame); + return OUStringToOString(text, RTL_TEXTENCODING_ASCII_US); +} + /// output the type of the frame as plain text. static void lcl_FrameType( OStringBuffer& rOut, const SwFrame* pFrame ) { @@ -656,6 +762,40 @@ void SwImplProtocol::Record_( const SwFrame* pFrame, PROT nFunction, DbgAction n } default: break; } + + aOut.append(" "); + while (aOut.getLength() < 40) aOut.append(" "); + lcl_FrameRect(aOut, "SwFrame", pFrame->getFrameArea()); + + aOut.append(" "); + while (aOut.getLength() < 90) aOut.append(" "); + lcl_FrameRect(aOut, "SwPrint", pFrame->getFramePrintArea()); + + if (pFrame->IsTextFrame()) + { + aOut.append(" "); + while (aOut.getLength() < 140) aOut.append(" "); + const OUString& text = static_cast<const SwTextFrame*>(pFrame)->GetTextNode()->GetText(); + OString o = OUStringToOString(text, RTL_TEXTENCODING_ASCII_US); + aOut.append(o); + } + else if (pFrame->IsTabFrame()) + { + const SwTabFrame* pTabFrame = static_cast<const SwTabFrame*>(pFrame); + aOut.append(lcl_TableInfo(pTabFrame)); + } + else if (pFrame->IsRowFrame()) + { + const SwRowFrame* pRowFrame = static_cast<const SwRowFrame*>(pFrame); + aOut.append(lcl_RowInfo(pRowFrame)); + + } + else if (pFrame->IsCellFrame()) + { + const SwCellFrame* pCellFrame = static_cast<const SwCellFrame*>(pFrame); + aOut.append(lcl_CellInfo(pCellFrame)); + } + pStream->WriteCharPtr( aOut.getStr() ); (*pStream) << endl; // output pStream->Flush(); // to the disk, so we can read it immediately |