diff options
-rw-r--r-- | include/vcl/menubtn.hxx | 5 | ||||
-rw-r--r-- | include/vcl/uitest/uiobject.hxx | 23 | ||||
-rw-r--r-- | vcl/source/control/menubtn.cxx | 12 | ||||
-rw-r--r-- | vcl/source/uitest/uiobject.cxx | 60 |
4 files changed, 100 insertions, 0 deletions
diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx index 609d3d031aab..ea6916a48629 100644 --- a/include/vcl/menubtn.hxx +++ b/include/vcl/menubtn.hxx @@ -84,6 +84,11 @@ public: void SetActivateHdl( const Link<MenuButton *, void>& rLink ) { maActivateHdl = rLink; } void SetSelectHdl( const Link<MenuButton *, void>& rLink ) { maSelectHdl = rLink; } + + virtual FactoryFunction GetUITestFactory() const override; + + void SetCurItemId(); + }; diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx index 1797c9156aba..c5b3f07dbe75 100644 --- a/include/vcl/uitest/uiobject.hxx +++ b/include/vcl/uitest/uiobject.hxx @@ -35,6 +35,7 @@ class SpinButton; class SpinField; class VerticalTabControl; class VclMultiLineEdit; +class MenuButton; class ToolBox; typedef std::map<const OUString, OUString> StringMap; @@ -504,6 +505,28 @@ private: virtual OUString get_name() const override; }; +class MenuButtonUIObject final : public WindowUIObject +{ + VclPtr<MenuButton> mxMenuButton; + +public: + + MenuButtonUIObject(const VclPtr<MenuButton>& xMenuButton); + virtual ~MenuButtonUIObject() override; + + virtual StringMap get_state() override; + + virtual void execute(const OUString& rAction, + const StringMap& rParameters) override; + + static std::unique_ptr<UIObject> create(vcl::Window* pWindow); + +private: + + virtual OUString get_name() const override; +}; + + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx index 7402d361f4b8..4acf4ffddc82 100644 --- a/vcl/source/control/menubtn.cxx +++ b/vcl/source/control/menubtn.cxx @@ -24,6 +24,7 @@ #include <vcl/timer.hxx> #include <vcl/menubtn.hxx> #include <vcl/settings.hxx> +#include <vcl/uitest/uiobject.hxx> void MenuButton::ImplInit( vcl::Window* pParent, WinBits nStyle ) { @@ -229,6 +230,17 @@ void MenuButton::SetPopover(Window* pWindow) mpFloatingWindow = pWindow; } + +FactoryFunction MenuButton::GetUITestFactory() const +{ + return MenuButtonUIObject::create; +} + +void MenuButton::SetCurItemId(){ + mnCurItemId = mpMenu->GetCurItemId(); + msCurItemIdent = mpMenu->GetCurItemIdent(); +} + //class MenuToggleButton ---------------------------------------------------- MenuToggleButton::MenuToggleButton( vcl::Window* pParent, WinBits nWinBits ) diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx index 806f6ab23e70..1b501e2676e5 100644 --- a/vcl/source/uitest/uiobject.cxx +++ b/vcl/source/uitest/uiobject.cxx @@ -26,6 +26,7 @@ #include <vcl/toolkit/dialog.hxx> #include <vcl/toolkit/field.hxx> #include <vcl/edit.hxx> +#include <vcl/menubtn.hxx> #include <vcl/vclmedit.hxx> #include <vcl/uitest/logger.hxx> #include <uiobject-internal.hxx> @@ -1612,4 +1613,63 @@ std::unique_ptr<UIObject> ToolBoxUIObject::create(vcl::Window* pWindow) return std::unique_ptr<UIObject>(new ToolBoxUIObject(pToolBox)); } +MenuButtonUIObject::MenuButtonUIObject(const VclPtr<MenuButton>& xMenuButton): + WindowUIObject(xMenuButton), + mxMenuButton(xMenuButton) +{ +} + +MenuButtonUIObject::~MenuButtonUIObject() +{ +} + +StringMap MenuButtonUIObject::get_state() +{ + StringMap aMap = WindowUIObject::get_state(); + aMap["Label"] = mxMenuButton->GetDisplayText(); + return aMap; +} + +void MenuButtonUIObject::execute(const OUString& rAction, + const StringMap& rParameters) +{ + if (rAction == "CLICK") + { + mxMenuButton->Check(!mxMenuButton->IsChecked()); + mxMenuButton->Toggle(); + } + else if (rAction == "OPENLIST") + { + mxMenuButton->ExecuteMenu(); + } + else if (rAction == "OPENFROMLIST") + { + auto itr = rParameters.find("POS"); + sal_uInt32 nPos = itr->second.toUInt32(); + + sal_uInt32 nId = mxMenuButton->GetPopupMenu()->GetItemId(nPos); + mxMenuButton->GetPopupMenu()->SetSelectedEntry(nId); + mxMenuButton->SetCurItemId(); + mxMenuButton->Select(); + } + else if (rAction == "CLOSELIST") + { + mxMenuButton->GetPopupMenu()->EndExecute(); + } + else + WindowUIObject::execute(rAction, rParameters); +} + +OUString MenuButtonUIObject::get_name() const +{ + return "MenuButtonUIObject"; +} + +std::unique_ptr<UIObject> MenuButtonUIObject::create(vcl::Window* pWindow) +{ + MenuButton* pMenuButton = dynamic_cast<MenuButton*>(pWindow); + assert(pMenuButton); + return std::unique_ptr<UIObject>(new MenuButtonUIObject(pMenuButton)); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |