diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2014-11-14 14:54:24 +0000 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-11-15 14:43:27 +0100 |
commit | 340888d3e5c51d39ceb1642e50e9b62c6996ac01 (patch) | |
tree | e842fa45907db1afea7d3f012be80a1ee2dfa0be /vcl/workben | |
parent | 633c40bc36ea6efe07cb0ccbf527ba5ee94055b6 (diff) |
vcldemo: implement key-bindings and command-line
Change-Id: I98ea70a78f340a2050ef934de3111ba3191ff479
Conflicts:
vcl/workben/vcldemo.cxx
Diffstat (limited to 'vcl/workben')
-rw-r--r-- | vcl/workben/vcldemo.cxx | 105 |
1 files changed, 104 insertions, 1 deletions
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx index 2d4d2ed35c7f..665abd5408c2 100644 --- a/vcl/workben/vcldemo.cxx +++ b/vcl/workben/vcldemo.cxx @@ -68,14 +68,21 @@ class DemoWin : public DemoBase struct RegionRenderer { public: virtual ~RegionRenderer() {} + virtual OUString getName() = 0; + virtual sal_uInt16 getAccelerator() = 0; virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) = 0; +#define RENDER_DETAILS(name,key) \ + virtual OUString getName() SAL_OVERRIDE \ + { return OUString(SAL_STRINGIFY(name)); } \ + virtual sal_uInt16 getAccelerator() SAL_OVERRIDE \ + { return key; } }; std::vector< RegionRenderer * > maRenderers; sal_Int32 mnSelectedRenderer; - void InitRenderers(); + void InitRenderers(); public: DemoWin() : DemoBase() @@ -96,6 +103,9 @@ public: InitRenderers(); } + OUString getRendererList(); + void selectRenderer(const OUString &rName); + // Bouncing windows on click ... PushButton *mpButton; FloatingWindow *mpButtonWin; @@ -104,6 +114,7 @@ public: DECL_LINK(BounceTimerCb, void *); virtual void MouseButtonDown(const MouseEvent& rMEvt) SAL_OVERRIDE; + virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE; virtual void Paint(const Rectangle& rRect) SAL_OVERRIDE { @@ -163,6 +174,7 @@ public: struct DrawLines : public RegionRenderer { + RENDER_DETAILS(lines,KEY_L) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE { @@ -249,6 +261,7 @@ public: struct DrawText : public RegionRenderer { + RENDER_DETAILS(text,KEY_T) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &) SAL_OVERRIDE { @@ -261,6 +274,7 @@ public: struct DrawCheckered : public RegionRenderer { + RENDER_DETAILS(checks,KEY_C) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE { @@ -321,6 +335,7 @@ public: struct DrawPoly : public RegionRenderer { + RENDER_DETAILS(poly,KEY_P) DrawCheckered maCheckered; virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE @@ -344,6 +359,7 @@ public: struct DrawEllipse : public RegionRenderer { + RENDER_DETAILS(ellipse,KEY_E) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &) SAL_OVERRIDE { @@ -355,6 +371,7 @@ public: struct DrawGradient : public RegionRenderer { + RENDER_DETAILS(gradient,KEY_G) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE { @@ -425,6 +442,7 @@ public: struct DrawBitmap : public RegionRenderer { + RENDER_DETAILS(bitmap,KEY_B) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE { @@ -436,6 +454,7 @@ public: struct DrawBitmapEx : public RegionRenderer { + RENDER_DETAILS(bitmapex,KEY_X) DrawCheckered maCheckered; virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &rCtx) SAL_OVERRIDE @@ -453,6 +472,7 @@ public: struct DrawPolyPolygons : public RegionRenderer { + RENDER_DETAILS(polypoly,KEY_N) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &) SAL_OVERRIDE { @@ -503,6 +523,7 @@ public: struct DrawToVirtualDevice : public RegionRenderer { + RENDER_DETAILS(vdev,KEY_V) enum RenderType { RENDER_AS_BITMAP, RENDER_AS_OUTDEV, @@ -569,6 +590,8 @@ public: struct DrawIcons : public RegionRenderer { + RENDER_DETAILS(icons,KEY_I) + std::vector<OUString> maIconNames; std::vector<BitmapEx> maIcons; bool bHasLoadedAll; @@ -700,6 +723,7 @@ public: struct FetchDrawBitmap : public RegionRenderer { + RENDER_DETAILS(fetchdraw,KEY_F) virtual void RenderRegion(OutputDevice &rDev, Rectangle r, const RenderContext &) SAL_OVERRIDE { @@ -757,6 +781,34 @@ IMPL_LINK_NOARG(DemoWin,BounceTimerCb) return 0; } +void DemoWin::KeyInput(const KeyEvent &rKEvt) +{ + sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); + + // click to zoom out + if (mnSelectedRenderer >= 0) + { + if (nCode == KEY_ESCAPE || nCode == KEY_BACKSPACE) + { + mnSelectedRenderer = -1; + Invalidate(); + return; + } + } + else + { + for (size_t i = 0; i < maRenderers.size(); i++) + { + if (nCode == maRenderers[i]->getAccelerator()) + { + mnSelectedRenderer = i; + Invalidate(); + return; + } + } + } +} + void DemoWin::MouseButtonDown(const MouseEvent& rMEvt) { // click to zoom out @@ -820,8 +872,43 @@ void DemoWin::InitRenderers() maRenderers.push_back(new FetchDrawBitmap()); } +OUString DemoWin::getRendererList() +{ + OUStringBuffer aBuf; + for (size_t i = 0; i < maRenderers.size(); i++) + { + aBuf.append(maRenderers[i]->getName()); + aBuf.append(' '); + } + return aBuf.makeStringAndClear(); +} + +void DemoWin::selectRenderer(const OUString &rName) +{ + for (size_t i = 0; i < maRenderers.size(); i++) + { + if (maRenderers[i]->getName() == rName) + { + mnSelectedRenderer = i; + Invalidate(); + return; + } + } +} + class DemoApp : public Application { + int showHelp(DemoWin &rWin) + { + fprintf(stderr,"vcldemo - a VCL test app\n"); + fprintf(stderr," --help - print this text\n"); + fprintf(stderr," --show <renderer> - start with a given renderer, options are:\n"); + OUString aRenderers(rWin.getRendererList()); + fprintf(stderr," %s\n\n", + rtl::OUStringToOString(aRenderers, RTL_TEXTENCODING_UTF8).getStr()); + return 0; + } + public: DemoApp() {} @@ -830,6 +917,22 @@ public: try { DemoWin aMainWin; + + for (sal_Int32 i = 0; i < GetCommandLineParamCount(); i++) + { + bool bLast = i == GetCommandLineParamCount() - 1; + OUString aArg = GetCommandLineParam(i); + if (aArg == "--help" || aArg == "-h") + return showHelp(aMainWin); + if (aArg == "--show") + { + if (bLast) + return showHelp(aMainWin); + else + aMainWin.selectRenderer(GetCommandLineParam(++i)); + } + } + aMainWin.SetText("Interactive VCL demo"); aMainWin.Show(); Application::Execute(); |