lok jsdialogs: Introduce dumping of widgets hierarchy to vcl::Window.

Change-Id: Ie3267e1f888df371d281e81ead437a150aa8dc1c
Reviewed-on: https://gerrit.libreoffice.org/79796
Tested-by: Jenkins
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
This commit is contained in:
Jan Holesovsky
2019-09-14 21:26:21 +02:00
committed by Szymon Kłos
parent 9590e8d0a2
commit 75b8db7fa7
3 changed files with 127 additions and 8 deletions

View File

@@ -395,7 +395,7 @@ namespace oglcanvas
setupGraphicsState( rAct, viewState, renderState );
rAct.maFunction = std::bind(&lcl_drawLine,
_1, _2, _3, _4, _5,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5,
aStartPoint, aEndPoint);
}
}
@@ -415,7 +415,7 @@ namespace oglcanvas
// TODO(F2): subdivide&render whole curve
rAct.maFunction = std::bind(&lcl_drawLine,
_1,_2,_3,_4,_5,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5,
geometry::RealPoint2D(
aBezierSegment.Px,
aBezierSegment.Py),
@@ -568,10 +568,10 @@ namespace oglcanvas
pGradient->getValues() );
rAct.maFunction = std::bind(&lcl_fillGradientPolyPolygon,
_1,_2,_3,_4,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4,
rValues,
textures[0],
_6);
std::placeholders::_6);
}
else
{
@@ -611,14 +611,14 @@ namespace oglcanvas
canvas::tools::getStdColorSpace()));
rAct.maFunction = std::bind(&lcl_fillTexturedPolyPolygon,
_1,_2,_3,_4,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4,
textures[0],
aSize,
aARGBBytes,
rtl_crc32(0,
aARGBBytes.getConstArray(),
aARGBBytes.getLength()),
_6);
std::placeholders::_6);
}
// TODO(F1): handle non-integer case
}
@@ -791,7 +791,7 @@ namespace oglcanvas
setupGraphicsState( rAct, viewState, renderState );
rAct.maFunction = std::bind(&lcl_drawOwnBitmap,
_1,_2,_3,_4,_5,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5,
*pOwnBitmap);
}
else
@@ -820,7 +820,7 @@ namespace oglcanvas
setupGraphicsState( rAct, viewState, renderState );
rAct.maFunction = std::bind(&lcl_drawGenericBitmap,
_1,_2,_3,_4,_5,
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5,
aSize, aARGBBytes,
rtl_crc32(0,
aARGBBytes.getConstArray(),

View File

@@ -34,6 +34,8 @@
#include <com/sun/star/uno/Reference.hxx>
#include <memory>
#include <boost/property_tree/ptree.hpp>
class VirtualDevice;
struct ImplSVEvent;
struct ImplWinData;
@@ -1213,6 +1215,9 @@ public:
/// Find an existing Window based on the LOKWindowId.
static VclPtr<vcl::Window> FindLOKWindow(vcl::LOKWindowId nWindowId);
/// Dumps itself and potentially its children to a property tree, to be written easily to JSON.
virtual boost::property_tree::ptree DumpAsPropertyTree();
/// Dialog / window tunneling related methods.
Size PaintActiveFloatingWindow(VirtualDevice& rDevice) const;

View File

@@ -3251,6 +3251,120 @@ VclPtr<vcl::Window> Window::GetParentWithLOKNotifier()
return pWindow;
}
namespace
{
const char* windowTypeName(WindowType nWindowType)
{
switch (nWindowType)
{
case WindowType::NONE: return "none";
case WindowType::MESSBOX: return "messagebox";
case WindowType::INFOBOX: return "infobox";
case WindowType::WARNINGBOX: return "warningbox";
case WindowType::ERRORBOX: return "errorbox";
case WindowType::QUERYBOX: return "querybox";
case WindowType::WINDOW: return "window";
case WindowType::WORKWINDOW: return "workwindow";
case WindowType::CONTAINER: return "container";
case WindowType::FLOATINGWINDOW: return "floatingwindow";
case WindowType::DIALOG: return "dialog";
case WindowType::MODELESSDIALOG: return "modelessdialog";
case WindowType::MODALDIALOG: return "modaldialog";
case WindowType::CONTROL: return "control";
case WindowType::PUSHBUTTON: return "pushbutton";
case WindowType::OKBUTTON: return "okbutton";
case WindowType::CANCELBUTTON: return "cancelbutton";
case WindowType::HELPBUTTON: return "helpbutton";
case WindowType::IMAGEBUTTON: return "imagebutton";
case WindowType::MENUBUTTON: return "menubutton";
case WindowType::MOREBUTTON: return "morebutton";
case WindowType::SPINBUTTON: return "spinbutton";
case WindowType::RADIOBUTTON: return "radiobutton";
case WindowType::CHECKBOX: return "checkbox";
case WindowType::TRISTATEBOX: return "tristatebox";
case WindowType::EDIT: return "edit";
case WindowType::MULTILINEEDIT: return "multilineedit";
case WindowType::COMBOBOX: return "combobox";
case WindowType::LISTBOX: return "listbox";
case WindowType::MULTILISTBOX: return "multilistbox";
case WindowType::FIXEDTEXT: return "fixedtext";
case WindowType::FIXEDLINE: return "fixedline";
case WindowType::FIXEDBITMAP: return "fixedbitmap";
case WindowType::FIXEDIMAGE: return "fixedimage";
case WindowType::GROUPBOX: return "groupbox";
case WindowType::SCROLLBAR: return "scrollbar";
case WindowType::SCROLLBARBOX: return "scrollbarbox";
case WindowType::SPLITTER: return "splitter";
case WindowType::SPLITWINDOW: return "splitwindow";
case WindowType::SPINFIELD: return "spinfield";
case WindowType::PATTERNFIELD: return "patternfield";
case WindowType::NUMERICFIELD: return "numericfield";
case WindowType::METRICFIELD: return "metricfield";
case WindowType::CURRENCYFIELD: return "currencyfield";
case WindowType::DATEFIELD: return "datefield";
case WindowType::TIMEFIELD: return "timefield";
case WindowType::PATTERNBOX: return "patternbox";
case WindowType::NUMERICBOX: return "numericbox";
case WindowType::METRICBOX: return "metricbox";
case WindowType::CURRENCYBOX: return "currencybox";
case WindowType::DATEBOX: return "datebox";
case WindowType::TIMEBOX: return "timebox";
case WindowType::LONGCURRENCYFIELD: return "longcurrencyfield";
case WindowType::LONGCURRENCYBOX: return "longcurrencybox";
case WindowType::SCROLLWINDOW: return "scrollwindow";
case WindowType::TOOLBOX: return "toolbox";
case WindowType::DOCKINGWINDOW: return "dockingwindow";
case WindowType::STATUSBAR: return "statusbar";
case WindowType::TABPAGE: return "tabpage";
case WindowType::TABCONTROL: return "tabcontrol";
case WindowType::TABDIALOG: return "tabdialog";
case WindowType::BORDERWINDOW: return "borderwindow";
case WindowType::BUTTONDIALOG: return "buttondialog";
case WindowType::SYSTEMCHILDWINDOW: return "systemchildwindow";
case WindowType::SLIDER: return "slider";
case WindowType::MENUBARWINDOW: return "menubarwindow";
case WindowType::TREELISTBOX: return "treelistbox";
case WindowType::HELPTEXTWINDOW: return "helptextwindow";
case WindowType::INTROWINDOW: return "introwindow";
case WindowType::LISTBOXWINDOW: return "listboxwindow";
case WindowType::DOCKINGAREA: return "dockingarea";
case WindowType::RULER: return "ruler";
case WindowType::CALCINPUTLINE: return "calcinputline";
case WindowType::HEADERBAR: return "headerbar";
case WindowType::VERTICALTABCONTROL: return "verticaltabcontrol";
// nothing to do here, but for completeness
case WindowType::TOOLKIT_FRAMEWINDOW: return "toolkit_framewindow";
case WindowType::TOOLKIT_SYSTEMCHILDWINDOW: return "toolkit_systemchildwindow";
}
return "none";
}
}
boost::property_tree::ptree Window::DumpAsPropertyTree()
{
boost::property_tree::ptree aTree;
aTree.put("id", get_id()); // TODO could be missing - sort out
aTree.put("type", windowTypeName(GetType()));
aTree.put("text", GetText());
boost::property_tree::ptree aChildren;
if (vcl::Window* pChild = mpWindowImpl->mpFirstChild)
{
while (pChild)
{
aChildren.push_back(std::make_pair("", pChild->DumpAsPropertyTree()));
pChild = pChild->mpWindowImpl->mpNext;
}
aTree.add_child("children", aChildren);
}
return aTree;
}
void Window::ImplCallDeactivateListeners( vcl::Window *pNew )
{
// no deactivation if the newly activated window is my child