include/vcl/uitest/uiobject.hxx |   21 ++++++++++++++
 include/vcl/vclmedit.hxx        |   46 +++++++++++++++++++++++++++++++
 vcl/source/edit/vclmedit.cxx    |   52 +++++++----------------------------
 vcl/source/uitest/uiobject.cxx  |   58 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 135 insertions(+), 42 deletions(-)

New commits:
commit e66a0d7095260c62b067541a0c47ce5c07074f18
Author: Markus Mohrhard <markus.mohrh...@googlemail.com>
Date:   Sun Jan 7 14:23:31 2018 +0100

    uitest: add support for GtkTextView/VclMultiLineEdit
    
    Change-Id: If1f22ee562b73a54042985254e0b9cd127025b55
    Reviewed-on: https://gerrit.libreoffice.org/47529
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com>

diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index de413107903e..0493cbc19c98 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -192,6 +192,27 @@ protected:
     virtual OUString get_name() const override;
 };
 
+class UITEST_DLLPUBLIC MultiLineEditUIObject : public WindowUIObject
+{
+    VclPtr<VclMultiLineEdit> mxEdit;
+
+public:
+
+    MultiLineEditUIObject(const VclPtr<VclMultiLineEdit>& xEdit);
+    virtual ~MultiLineEditUIObject() override;
+
+    virtual void execute(const OUString& rAction,
+            const StringMap& rParameters) override;
+
+    virtual StringMap get_state() override;
+
+    static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+protected:
+
+    virtual OUString get_name() const override;
+};
+
 // TODO: moggi: maybe let it inherit from the button case
 class UITEST_DLLPUBLIC CheckBoxUIObject : public WindowUIObject
 {
diff --git a/include/vcl/vclmedit.hxx b/include/vcl/vclmedit.hxx
index 03f0b5667968..7caf3662aa0e 100644
--- a/include/vcl/vclmedit.hxx
+++ b/include/vcl/vclmedit.hxx
@@ -31,6 +31,47 @@ class Timer;
 class ExtTextEngine;
 class TextView;
 
+class TextWindow : public vcl::Window
+{
+private:
+    VclPtr<Edit>    mxParent;
+    ExtTextEngine*  mpExtTextEngine;
+    TextView*       mpExtTextView;
+
+    bool            mbInMBDown;
+    bool            mbFocusSelectionHide;
+    bool            mbIgnoreTab;
+    bool            mbActivePopup;
+    bool            mbSelectOnTab;
+
+public:
+    explicit        TextWindow(Edit* pParent);
+    virtual         ~TextWindow() override;
+    virtual void    dispose() override;
+
+    ExtTextEngine*  GetTextEngine() const { return mpExtTextEngine; }
+    TextView*       GetTextView() const { return mpExtTextView; }
+
+    virtual void    MouseMove( const MouseEvent& rMEvt ) override;
+    virtual void    MouseButtonDown( const MouseEvent& rMEvt ) override;
+    virtual void    MouseButtonUp( const MouseEvent& rMEvt ) override;
+    virtual void    KeyInput( const KeyEvent& rKEvent ) override;
+
+    virtual void    Command( const CommandEvent& rCEvt ) override;
+
+    virtual void    Paint(vcl::RenderContext& rRenderContext, const 
tools::Rectangle& rRect) override;
+    virtual void    Resize() override;
+
+    virtual void    GetFocus() override;
+    virtual void    LoseFocus() override;
+
+    void            SetAutoFocusHide( bool bAutoHide ) { mbFocusSelectionHide 
= bAutoHide; }
+
+    void            SetIgnoreTab( bool bIgnore ) { mbIgnoreTab = bIgnore; }
+
+    void            DisableSelectionOnFocus() { mbSelectOnTab = false; }
+};
+
 class VCL_DLLPUBLIC VclMultiLineEdit : public Edit
 {
     friend class VCLXAccessibleEdit;
@@ -55,8 +96,8 @@ protected:
     void            ImplInitSettings( bool bBackground );
     static WinBits  ImplInitStyle( WinBits nStyle );
 
-    ExtTextEngine*  GetTextEngine() const;
     TextView*       GetTextView() const;
+    ExtTextEngine*  GetTextEngine() const;
     ScrollBar*      GetVScrollBar() const;
 
     virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
@@ -133,6 +174,9 @@ public:
 
     void            EnableCursor( bool bEnable );
 
+    TextWindow*     GetTextWindow();
+    virtual FactoryFunction GetUITestFactory() const override;
+
     virtual bool set_property(const OString &rKey, const OUString &rValue) 
override;
 };
 
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index de34176ea07e..66fb2b058d72 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -26,52 +26,12 @@
 #include <vcl/xtextedt.hxx>
 #include <svl/undo.hxx>
 #include <svl/lstner.hxx>
+#include <vcl/uitest/uiobject.hxx>
 
 #include <strings.hrc>
 #include <vcl/scrbar.hxx>
 #include <vcl/settings.hxx>
 
-class TextWindow : public vcl::Window
-{
-private:
-    VclPtr<Edit>    mxParent;
-    ExtTextEngine*  mpExtTextEngine;
-    TextView*       mpExtTextView;
-
-    bool            mbInMBDown;
-    bool            mbFocusSelectionHide;
-    bool            mbIgnoreTab;
-    bool            mbActivePopup;
-    bool            mbSelectOnTab;
-
-public:
-    explicit        TextWindow(Edit* pParent);
-    virtual         ~TextWindow() override;
-    virtual void    dispose() override;
-
-    ExtTextEngine*  GetTextEngine() const { return mpExtTextEngine; }
-    TextView*       GetTextView() const { return mpExtTextView; }
-
-    virtual void    MouseMove( const MouseEvent& rMEvt ) override;
-    virtual void    MouseButtonDown( const MouseEvent& rMEvt ) override;
-    virtual void    MouseButtonUp( const MouseEvent& rMEvt ) override;
-    virtual void    KeyInput( const KeyEvent& rKEvent ) override;
-
-    virtual void    Command( const CommandEvent& rCEvt ) override;
-
-    virtual void    Paint(vcl::RenderContext& rRenderContext, const 
tools::Rectangle& rRect) override;
-    virtual void    Resize() override;
-
-    virtual void    GetFocus() override;
-    virtual void    LoseFocus() override;
-
-    void            SetAutoFocusHide( bool bAutoHide ) { mbFocusSelectionHide 
= bAutoHide; }
-
-    void            SetIgnoreTab( bool bIgnore ) { mbIgnoreTab = bIgnore; }
-
-    void            DisableSelectionOnFocus() { mbSelectOnTab = false; }
-};
-
 class ImpVclMEdit : public SfxListener
 {
 private:
@@ -1590,6 +1550,16 @@ void VclMultiLineEdit::EnableCursor( bool bEnable )
     GetTextView()->EnableCursor( bEnable );
 }
 
+TextWindow* VclMultiLineEdit::GetTextWindow()
+{
+    return pImpVclMEdit->GetTextWindow();
+}
+
+FactoryFunction VclMultiLineEdit::GetUITestFactory() const
+{
+    return MultiLineEditUIObject::create;
+}
+
 bool VclMultiLineEdit::set_property(const OString &rKey, const OUString 
&rValue)
 {
     if (rKey == "cursor-visible")
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 9fe9035e2e6a..56373981be74 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -18,6 +18,7 @@
 #include <vcl/button.hxx>
 #include <vcl/dialog.hxx>
 #include <vcl/edit.hxx>
+#include <vcl/vclmedit.hxx>
 
 #include <comphelper/string.hxx>
 
@@ -670,6 +671,63 @@ std::unique_ptr<UIObject> 
EditUIObject::create(vcl::Window* pWindow)
     return std::unique_ptr<UIObject>(new EditUIObject(pEdit));
 }
 
+MultiLineEditUIObject::MultiLineEditUIObject(const VclPtr<VclMultiLineEdit>& 
xEdit):
+    WindowUIObject(xEdit),
+    mxEdit(xEdit)
+{
+}
+
+MultiLineEditUIObject::~MultiLineEditUIObject()
+{
+}
+
+void MultiLineEditUIObject::execute(const OUString& rAction,
+        const StringMap& rParameters)
+{
+    bool bHandled = true;
+    if (rAction == "TYPE")
+    {
+        WindowUIObject aChildObj(mxEdit->GetTextWindow());
+        aChildObj.execute(rAction, rParameters);
+    }
+    else if (rAction == "SELECT")
+    {
+        if (rParameters.find("FROM") != rParameters.end() &&
+                rParameters.find("TO") != rParameters.end())
+        {
+            long nMin = rParameters.find("FROM")->second.toInt32();
+            long nMax = rParameters.find("TO")->second.toInt32();
+            Selection aSelection(nMin, nMax);
+            mxEdit->SetSelection(aSelection);
+        }
+    }
+
+    if (!bHandled)
+        WindowUIObject::execute(rAction, rParameters);
+}
+
+StringMap MultiLineEditUIObject::get_state()
+{
+    StringMap aMap = WindowUIObject::get_state();
+    aMap["MaxTextLength"] = OUString::number(mxEdit->GetMaxTextLen());
+    aMap["SelectedText"] = mxEdit->GetSelected();
+    aMap["Text"] = mxEdit->GetText();
+
+    return aMap;
+}
+
+OUString MultiLineEditUIObject::get_name() const
+{
+    return OUString("MultiLineEditUIObject");
+}
+
+std::unique_ptr<UIObject> MultiLineEditUIObject::create(vcl::Window* pWindow)
+{
+    VclMultiLineEdit* pEdit = dynamic_cast<VclMultiLineEdit*>(pWindow);
+    assert(pEdit);
+    return std::unique_ptr<UIObject>(new MultiLineEditUIObject(pEdit));
+}
+
 CheckBoxUIObject::CheckBoxUIObject(const VclPtr<CheckBox>& xCheckbox):
     WindowUIObject(xCheckbox),
     mxCheckBox(xCheckbox)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to