[Libreoffice-commits] core.git: dbaccess/source include/svtools reportdesign/source svtools/source svx/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed May 20 18:24:54 UTC 2020


 dbaccess/source/ui/inc/QueryDesignView.hxx            |    8 
 dbaccess/source/ui/querydesign/QueryDesignView.cxx    |   10 -
 dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx |   45 +++--
 include/svtools/editbrowsebox.hxx                     |   18 --
 reportdesign/source/ui/dlg/GroupsSorting.cxx          |   47 ++---
 reportdesign/source/ui/inc/GroupsSorting.hxx          |    2 
 svtools/source/brwbox/ebbcontrols.cxx                 |   59 +-----
 svx/source/fmcomp/gridcell.cxx                        |  159 ++++++------------
 svx/source/inc/gridcell.hxx                           |    9 -
 9 files changed, 140 insertions(+), 217 deletions(-)

New commits:
commit 68d161c6803654f4ce816af7e79371a2d3497b4f
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed May 13 13:59:11 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed May 20 20:24:16 2020 +0200

    weld ComboBoxControl
    
    Change-Id: Ie862bb782b4c3e203af88d45c850ce0cab60f2e5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94123
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/dbaccess/source/ui/inc/QueryDesignView.hxx b/dbaccess/source/ui/inc/QueryDesignView.hxx
index feb1266b24fb..4f057178669c 100644
--- a/dbaccess/source/ui/inc/QueryDesignView.hxx
+++ b/dbaccess/source/ui/inc/QueryDesignView.hxx
@@ -28,8 +28,10 @@ namespace connectivity
 {
     class OSQLParseNode;
 }
-
-class ComboBox;
+namespace weld
+{
+    class ComboBox;
+}
 namespace dbaui
 {
     enum SqlParseError
@@ -109,7 +111,7 @@ namespace dbaui
         void TableDeleted(const OUString& rAliasName);
 
         sal_Int32 getColWidth( sal_uInt16 _nColPos) const;
-        void fillValidFields(const OUString& strTableName, ComboBox* pFieldList);
+        void fillValidFields(const OUString& strTableName, weld::ComboBox& rFieldList);
 
         void SaveUIConfig();
         void stopTimer();
diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
index 59494bc9b253..30afb75932f6 100644
--- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
@@ -27,7 +27,6 @@
 #include <o3tl/safeint.hxx>
 #include <osl/diagnose.h>
 #include <vcl/svapp.hxx>
-#include <vcl/combobox.hxx>
 #include <vcl/weld.hxx>
 #include <browserids.hxx>
 #include "SelectionBrowseBox.hxx"
@@ -2647,10 +2646,9 @@ sal_Int32 OQueryDesignView::getColWidth(sal_uInt16 _nColPos) const
     return nWidth;
 }
 
-void OQueryDesignView::fillValidFields(const OUString& sAliasName, ComboBox* pFieldList)
+void OQueryDesignView::fillValidFields(const OUString& sAliasName, weld::ComboBox& rFieldList)
 {
-    OSL_ENSURE(pFieldList != nullptr, "OQueryDesignView::FillValidFields : What the hell do you think I can do with a NULL-ptr ? This will crash !");
-    pFieldList->Clear();
+    rFieldList.clear();
 
     bool bAllTables = sAliasName.isEmpty();
 
@@ -2669,9 +2667,9 @@ void OQueryDesignView::fillValidFields(const OUString& sAliasName, ComboBox* pFi
             for (auto const& field : aFields)
             {
                 if (bAllTables || field.toChar() == '*')
-                    pFieldList->InsertEntry(strCurrentPrefix + field);
+                    rFieldList.append_text(strCurrentPrefix + field);
                 else
-                    pFieldList->InsertEntry(field);
+                    rFieldList.append_text(field);
             }
 
             if (!bAllTables)
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index a288e478bc14..c2b4cd9517d8 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -122,7 +122,7 @@ OSelectionBrowseBox::OSelectionBrowseBox( vcl::Window* pParent )
     m_pTextCell     = VclPtr<Edit>::Create(&GetDataWindow(), 0);
     m_pVisibleCell  = VclPtr<CheckBoxControl>::Create(&GetDataWindow());
     m_pTableCell    = VclPtr<ListBoxControl>::Create(&GetDataWindow());     m_pTableCell->SetDropDownLineCount( 20 );
-    m_pFieldCell    = VclPtr<ComboBoxControl>::Create(&GetDataWindow());    m_pFieldCell->SetDropDownLineCount( 20 );
+    m_pFieldCell    = VclPtr<ComboBoxControl>::Create(&GetDataWindow());
     m_pOrderCell    = VclPtr<ListBoxControl>::Create(&GetDataWindow());
     m_pFunctionCell = VclPtr<ListBoxControl>::Create(&GetDataWindow());     m_pFunctionCell->SetDropDownLineCount( 20 );
 
@@ -475,20 +475,21 @@ void OSelectionBrowseBox::InitController(CellControllerRef& /*rController*/, lon
     {
         case BROW_FIELD_ROW:
         {
-            m_pFieldCell->Clear();
-            m_pFieldCell->SetText(OUString());
+            weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+            rComboBox.clear();
+            rComboBox.set_entry_text(OUString());
 
             OUString aField(pEntry->GetField());
             OUString aTable(pEntry->GetAlias());
 
-            getDesignView()->fillValidFields(aTable, m_pFieldCell);
+            getDesignView()->fillValidFields(aTable, rComboBox);
 
             // replace with alias.*
             if (aField.trim() == "*")
             {
                 aField = aTable + ".*";
             }
-            m_pFieldCell->SetText(aField);
+            rComboBox.set_entry_text(aField);
         }   break;
         case BROW_TABLE_ROW:
         {
@@ -924,7 +925,8 @@ bool OSelectionBrowseBox::SaveModified()
 
             case BROW_FIELD_ROW:
             {
-                OUString aFieldName(m_pFieldCell->GetText());
+                weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+                OUString aFieldName(rComboBox.get_active_text());
                 try
                 {
                     if (aFieldName.isEmpty())
@@ -943,9 +945,9 @@ bool OSelectionBrowseBox::SaveModified()
                         if ( !m_bInUndoMode )
                             rController.GetUndoManager().EnterListAction(OUString(),OUString(),0,ViewShellId(-1));
 
-                        sal_Int32 nPos = m_pFieldCell->GetEntryPos(aFieldName);
+                        sal_Int32 nPos = rComboBox.find_text(aFieldName);
                         OUString aAliasName = pEntry->GetAlias();
-                        if ( nPos != COMBOBOX_ENTRY_NOTFOUND && aAliasName.isEmpty() && aFieldName.indexOf('.') >= 0 )
+                        if ( nPos != -1 && aAliasName.isEmpty() && aFieldName.indexOf('.') >= 0 )
                         { // special case, we have a table field so we must cut the table name
                             OUString sTableAlias = aFieldName.getToken(0,'.');
                             pEntry->SetAlias(sTableAlias);
@@ -2346,8 +2348,12 @@ bool OSelectionBrowseBox::isCutAllowed() const
         case BROW_FUNCTION_ROW:
             break;
         case BROW_FIELD_ROW:
-            bCutAllowed = !m_pFieldCell->GetSelected().isEmpty();
+        {
+            weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+            int nStartPos, nEndPos;
+            bCutAllowed = rComboBox.get_entry_selection_bounds(nStartPos, nEndPos);
             break;
+        }
         default:
             bCutAllowed = !m_pTextCell->GetSelected().isEmpty();
             break;
@@ -2361,9 +2367,11 @@ void OSelectionBrowseBox::cut()
     switch (nRow)
     {
         case BROW_FIELD_ROW:
-            m_pFieldCell->Cut();
-            m_pFieldCell->SetModifyFlag();
+        {
+            weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+            rComboBox.cut_entry_clipboard();
             break;
+        }
         default:
             m_pTextCell->Cut();
             m_pTextCell->SetModifyFlag();
@@ -2380,9 +2388,11 @@ void OSelectionBrowseBox::paste()
     switch (nRow)
     {
         case BROW_FIELD_ROW:
-            m_pFieldCell->Paste();
-            m_pFieldCell->SetModifyFlag();
+        {
+            weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+            rComboBox.paste_entry_clipboard();
             break;
+        }
         default:
             m_pTextCell->Paste();
             m_pTextCell->SetModifyFlag();
@@ -2418,8 +2428,11 @@ void OSelectionBrowseBox::copy()
     switch (nRow)
     {
         case BROW_FIELD_ROW:
-            m_pFieldCell->Copy();
+        {
+            weld::ComboBox& rComboBox = m_pFieldCell->get_widget();
+            rComboBox.copy_entry_clipboard();
             break;
+        }
         default:
             m_pTextCell->Copy();
     }
@@ -2616,7 +2629,7 @@ void OSelectionBrowseBox::setFunctionCell(OTableFieldDescRef const & _pEntry)
             OSL_ENSURE(!_pEntry->isNumeric(),"Not allowed to combine group by and numeric values!");
             m_pFunctionCell->SelectEntry(m_pFunctionCell->GetEntry(m_pFunctionCell->GetEntryCount() - 1));
         }
-        else if ( m_pFunctionCell->GetEntryPos(_pEntry->GetFunction()) != COMBOBOX_ENTRY_NOTFOUND )
+        else if ( m_pFunctionCell->GetEntryPos(_pEntry->GetFunction()) != LISTBOX_ENTRY_NOTFOUND )
             m_pFunctionCell->SelectEntry(_pEntry->GetFunction());
         else
             m_pFunctionCell->SelectEntryPos(0);
@@ -2633,7 +2646,7 @@ void OSelectionBrowseBox::setFunctionCell(OTableFieldDescRef const & _pEntry)
         if ( !bCountRemoved && m_pFunctionCell->GetEntryCount() < 2)
             m_pFunctionCell->InsertEntry(m_aFunctionStrings.getToken(2, ';')); // 2 -> COUNT
 
-        if(m_pFunctionCell->GetEntryPos(_pEntry->GetFunction()) != COMBOBOX_ENTRY_NOTFOUND)
+        if(m_pFunctionCell->GetEntryPos(_pEntry->GetFunction()) != LISTBOX_ENTRY_NOTFOUND)
             m_pFunctionCell->SelectEntry(_pEntry->GetFunction());
         else
             m_pFunctionCell->SelectEntryPos(0);
diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx
index 71f8260fc487..228edb70cf01 100644
--- a/include/svtools/editbrowsebox.hxx
+++ b/include/svtools/editbrowsebox.hxx
@@ -26,11 +26,11 @@
 #include <svtools/svtdllapi.h>
 #include <tools/ref.hxx>
 #include <vcl/window.hxx>
-#include <vcl/combobox.hxx>
 #include <vcl/lstbox.hxx>
 
 #include <svtools/brwbox.hxx>
 #include <svtools/brwhead.hxx>
+#include <svtools/InterimItemWindow.hxx>
 #include <vcl/vclmedit.hxx>
 #include <o3tl/typed_flags_set.hxx>
 
@@ -301,9 +301,7 @@ namespace svt
         DECL_LINK( OnClick, Button*, void );
     };
 
-
     //= CheckBoxCellController
-
     class SVT_DLLPUBLIC CheckBoxCellController final : public CellController
     {
     public:
@@ -319,29 +317,27 @@ namespace svt
         DECL_LINK(ModifyHdl, LinkParamNone*, void);
     };
 
-
     //= ComboBoxControl
-
-    class SVT_DLLPUBLIC ComboBoxControl final : public ComboBox
+    class SVT_DLLPUBLIC ComboBoxControl final : public InterimItemWindow
     {
         friend class ComboBoxCellController;
 
     public:
         ComboBoxControl(vcl::Window* pParent);
 
+        weld::ComboBox& get_widget() { return *m_xWidget; }
+
     private:
-        virtual bool PreNotify( NotifyEvent& rNEvt ) override;
+        std::unique_ptr<weld::ComboBox> m_xWidget;
     };
 
-
     //= ComboBoxCellController
-
     class SVT_DLLPUBLIC ComboBoxCellController : public CellController
     {
     public:
 
         ComboBoxCellController(ComboBoxControl* pParent);
-        ComboBoxControl& GetComboBox() const { return static_cast<ComboBoxControl &>(GetWindow()); }
+        weld::ComboBox& GetComboBox() const { return static_cast<ComboBoxControl&>(GetWindow()).get_widget(); }
 
         virtual bool IsModified() const override;
         virtual void ClearModified() override;
@@ -349,7 +345,7 @@ namespace svt
     protected:
         virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
     private:
-        DECL_LINK(ModifyHdl, Edit&, void);
+        DECL_LINK(ModifyHdl, weld::ComboBox&, void);
     };
 
 
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
index 69ff9786cc3b..8cb3a65347f1 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.cxx
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -52,7 +52,7 @@ using namespace ::com::sun::star;
 using namespace svt;
 using namespace ::comphelper;
 
-    static void lcl_addToList_throw( ComboBoxControl& _rListBox, ::std::vector<ColumnInfo>& o_aColumnList,const uno::Reference< container::XNameAccess>& i_xColumns )
+    static void lcl_addToList_throw( weld::ComboBox& _rListBox, ::std::vector<ColumnInfo>& o_aColumnList,const uno::Reference< container::XNameAccess>& i_xColumns )
     {
         const uno::Sequence< OUString > aEntries = i_xColumns->getElementNames();
         for ( const OUString& rEntry : aEntries )
@@ -63,9 +63,9 @@ using namespace ::comphelper;
                 xColumn->getPropertyValue(PROPERTY_LABEL) >>= sLabel;
             o_aColumnList.emplace_back(rEntry,sLabel );
             if ( !sLabel.isEmpty() )
-                _rListBox.InsertEntry( sLabel );
+                _rListBox.append_text( sLabel );
             else
-                _rListBox.InsertEntry( rEntry );
+                _rListBox.append_text( rEntry );
         }
     }
 
@@ -159,7 +159,7 @@ protected:
 
 private:
 
-    DECL_LINK( CBChangeHdl, ComboBox&, void);
+    DECL_LINK( CBChangeHdl, weld::ComboBox&, void);
 
 public:
     DECL_LINK( DelayedDelete, void*, void );
@@ -266,8 +266,9 @@ sal_Int8 OFieldExpressionControl::AcceptDrop( const BrowserAcceptDropEvent& rEvt
     sal_Int8 nAction = DND_ACTION_NONE;
     if ( IsEditing() )
     {
-        sal_Int32 nPos = m_pComboCell->GetSelectedEntryPos();
-        if ( COMBOBOX_ENTRY_NOTFOUND != nPos || !m_pComboCell->GetText().isEmpty() )
+        weld::ComboBox& rComboBox = m_pComboCell->get_widget();
+        sal_Int32 nPos = rComboBox.get_active();
+        if (nPos != -1 || !rComboBox.get_active_text().isEmpty())
             SaveModified();
         DeactivateCell();
     }
@@ -339,9 +340,10 @@ void OFieldExpressionControl::moveGroups(const uno::Sequence<uno::Any>& _aGroups
 
 void OFieldExpressionControl::fillColumns(const uno::Reference< container::XNameAccess>& _xColumns)
 {
-    m_pComboCell->Clear();
+    weld::ComboBox& rComboBox = m_pComboCell->get_widget();
+    rComboBox.clear();
     if ( _xColumns.is() )
-        lcl_addToList_throw(*m_pComboCell,m_aColumnInfo,_xColumns);
+        lcl_addToList_throw(rComboBox, m_aColumnInfo, _xColumns);
 }
 
 void OFieldExpressionControl::lateInit()
@@ -368,10 +370,11 @@ void OFieldExpressionControl::lateInit()
         InsertDataColumn( FIELD_EXPRESSION, RptResId(STR_RPT_EXPRESSION), 100);
 
         m_pComboCell = VclPtr<ComboBoxControl>::Create( &GetDataWindow() );
-        m_pComboCell->SetSelectHdl(LINK(this,OFieldExpressionControl,CBChangeHdl));
+        weld::ComboBox& rComboBox = m_pComboCell->get_widget();
+        rComboBox.connect_changed(LINK(this,OFieldExpressionControl,CBChangeHdl));
         m_pComboCell->SetHelpId(HID_RPT_FIELDEXPRESSION);
 
-        m_pComboCell->SetGetFocusHdl(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusGot));
+        rComboBox.connect_focus_in(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusGot));
 
 
         // set browse mode
@@ -389,20 +392,16 @@ void OFieldExpressionControl::lateInit()
     RowInserted(0, m_aGroupPositions.size());
 }
 
-
-IMPL_LINK_NOARG( OFieldExpressionControl, CBChangeHdl, ComboBox&, void )
+IMPL_LINK_NOARG( OFieldExpressionControl, CBChangeHdl, weld::ComboBox&, void )
 {
-
     SaveModified();
 }
 
-
 bool OFieldExpressionControl::IsTabAllowed(bool /*bForward*/) const
 {
     return false;
 }
 
-
 bool OFieldExpressionControl::SaveModified()
 {
     sal_Int32 nRow = GetCurRow();
@@ -447,10 +446,11 @@ bool OFieldExpressionControl::SaveModified()
                 xGroup = m_pParent->getGroup(m_aGroupPositions[nRow]);
             if ( xGroup.is() )
             {
-                sal_Int32 nPos = m_pComboCell->GetSelectedEntryPos();
+                weld::ComboBox& rComboBox = m_pComboCell->get_widget();
+                sal_Int32 nPos = rComboBox.get_active();
                 OUString sExpression;
-                if ( COMBOBOX_ENTRY_NOTFOUND == nPos )
-                    sExpression = m_pComboCell->GetText();
+                if (nPos == -1)
+                    sExpression = rComboBox.get_active_text();
                 else
                 {
                     sExpression = m_aColumnInfo[nPos].sColumnName;
@@ -507,11 +507,10 @@ OUString OFieldExpressionControl::GetCellText( long nRow, sal_uInt16 /*nColId*/
     return sText;
 }
 
-
 void OFieldExpressionControl::InitController( CellControllerRef& /*rController*/, long nRow, sal_uInt16 nColumnId )
 {
-
-    m_pComboCell->SetText( GetCellText( nRow, nColumnId ) );
+    weld::ComboBox& rComboBox = m_pComboCell->get_widget();
+    rComboBox.set_entry_text(GetCellText(nRow, nColumnId));
 }
 
 bool OFieldExpressionControl::CursorMoving(long nNewRow, sal_uInt16 nNewCol)
@@ -532,11 +531,10 @@ bool OFieldExpressionControl::CursorMoving(long nNewRow, sal_uInt16 nNewCol)
 CellController* OFieldExpressionControl::GetController( long /*nRow*/, sal_uInt16 /*nColumnId*/ )
 {
     ComboBoxCellController* pCellController = new ComboBoxCellController( m_pComboCell );
-    pCellController->GetComboBox().SetReadOnly(!m_pParent->m_pController->isEditable());
+    pCellController->GetComboBox().set_entry_editable(m_pParent->m_pController->isEditable());
     return pCellController;
 }
 
-
 bool OFieldExpressionControl::SeekRow( long _nRow )
 {
     // the basis class needs the call, because that's how the class knows which line will be painted
@@ -545,7 +543,6 @@ bool OFieldExpressionControl::SeekRow( long _nRow )
     return true;
 }
 
-
 void OFieldExpressionControl::PaintCell( OutputDevice& rDev, const tools::Rectangle& rRect, sal_uInt16 nColumnId ) const
 {
     OUString aText  =GetCellText( m_nCurrentPos, nColumnId );
@@ -930,7 +927,7 @@ sal_Int32 OGroupsSortingDialog::getColumnDataType(const OUString& _sColumnName)
     return nDataType;
 }
 
-IMPL_LINK_NOARG(OGroupsSortingDialog, OnControlFocusGot, Control&, void )
+IMPL_LINK_NOARG(OGroupsSortingDialog, OnControlFocusGot, weld::Widget&, void )
 {
     m_xHelpWindow->set_label(RptResId(STR_RPT_HELP_FIELD));
 }
diff --git a/reportdesign/source/ui/inc/GroupsSorting.hxx b/reportdesign/source/ui/inc/GroupsSorting.hxx
index 270484a19b3c..cd038e6164c4 100644
--- a/reportdesign/source/ui/inc/GroupsSorting.hxx
+++ b/reportdesign/source/ui/inc/GroupsSorting.hxx
@@ -74,7 +74,7 @@ private:
     DECL_LINK( OnWidgetFocusLost, weld::Widget&, void );
     DECL_LINK( OnWidgetFocusGot, weld::Widget&, void );
 
-    DECL_LINK( OnControlFocusGot, Control&, void );
+    DECL_LINK( OnControlFocusGot, weld::Widget&, void );
 
     DECL_LINK( LBChangeHdl, weld::ComboBox&, void );
     DECL_LINK( OnFormatAction, const OString&, void );
diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx
index c90561c6a89a..65f333d09cf9 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -26,75 +26,47 @@
 namespace svt
 {
 
-
     //= ComboBoxControl
-
     ComboBoxControl::ComboBoxControl(vcl::Window* pParent)
-                   :ComboBox(pParent, WB_DROPDOWN|WB_NOBORDER)
-    {
-        EnableAutoSize(false);
-        EnableAutocomplete(true);
-        SetDropDownLineCount(5);
-    }
-
-
-    bool ComboBoxControl::PreNotify( NotifyEvent& rNEvt )
+        : InterimItemWindow(pParent, "svt/ui/combocontrol.ui", "ComboControl")
+        , m_xWidget(m_xBuilder->weld_combo_box("combobox"))
     {
-        if (rNEvt.GetType() == MouseNotifyEvent::KEYINPUT && !IsInDropDown())
-        {
-            const KeyEvent *pEvt = rNEvt.GetKeyEvent();
-            const vcl::KeyCode rKey = pEvt->GetKeyCode();
-
-            if ((rKey.GetCode() == KEY_UP || rKey.GetCode() == KEY_DOWN) &&
-                (!pEvt->GetKeyCode().IsShift() && pEvt->GetKeyCode().IsMod1()))
-            {
-                // select next resp. previous entry
-                sal_Int32 nPos = GetEntryPos(GetText());
-                int nDir = (rKey.GetCode() == KEY_DOWN ? 1 : -1);
-                if (!((nPos == 0 && nDir == -1) || (nPos >= GetEntryCount() && nDir == 1)))
-                {
-                    nPos += nDir;
-                    SetText(GetEntry(nPos));
-                }
-                return true;
-            }
-        }
-        return ComboBox::PreNotify(rNEvt);
     }
 
     //= ComboBoxCellController
     ComboBoxCellController::ComboBoxCellController(ComboBoxControl* pWin)
                              :CellController(pWin)
     {
-        GetComboBox().SetModifyHdl( LINK(this, ComboBoxCellController, ModifyHdl) );
+        GetComboBox().connect_changed(LINK(this, ComboBoxCellController, ModifyHdl));
     }
 
-    IMPL_LINK_NOARG(ComboBoxCellController, ModifyHdl, Edit&, void)
+    IMPL_LINK_NOARG(ComboBoxCellController, ModifyHdl, weld::ComboBox&, void)
     {
         callModifyHdl();
     }
 
-
     bool ComboBoxCellController::MoveAllowed(const KeyEvent& rEvt) const
     {
-        ComboBoxControl& rBox = GetComboBox();
+        weld::ComboBox& rBox = GetComboBox();
         switch (rEvt.GetKeyCode().GetCode())
         {
             case KEY_END:
             case KEY_RIGHT:
             {
-                Selection aSel = rBox.GetSelection();
-                return !aSel && aSel.Max() == rBox.GetText().getLength();
+                int nStartPos, nEndPos;
+                bool bNoSelection = rBox.get_entry_selection_bounds(nStartPos, nEndPos);
+                return bNoSelection && nEndPos == rBox.get_active_text().getLength();
             }
             case KEY_HOME:
             case KEY_LEFT:
             {
-                Selection aSel = rBox.GetSelection();
-                return !aSel && aSel.Min() == 0;
+                int nStartPos, nEndPos;
+                bool bNoSelection = rBox.get_entry_selection_bounds(nStartPos, nEndPos);
+                return bNoSelection && nStartPos == 0;
             }
             case KEY_UP:
             case KEY_DOWN:
-                if (rBox.IsInDropDown())
+                if (rBox.get_popup_shown())
                     return false;
                 if (!rEvt.GetKeyCode().IsShift() &&
                      rEvt.GetKeyCode().IsMod1())
@@ -106,7 +78,7 @@ namespace svt
             case KEY_PAGEUP:
             case KEY_PAGEDOWN:
             case KEY_RETURN:
-                if (rBox.IsInDropDown())
+                if (rBox.get_popup_shown())
                     return false;
                 [[fallthrough]];
             default:
@@ -114,15 +86,14 @@ namespace svt
         }
     }
 
-
     bool ComboBoxCellController::IsModified() const
     {
-        return GetComboBox().IsValueChangedFromSaved();
+        return GetComboBox().get_value_changed_from_saved();
     }
 
     void ComboBoxCellController::ClearModified()
     {
-        GetComboBox().SaveValue();
+        GetComboBox().save_value();
     }
 
     //= ListBoxControl
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index 24eebf68fba2..82b3b411b746 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -2392,7 +2392,6 @@ DbComboBox::DbComboBox(DbGridColumn& _rColumn)
     doPropertyListening( FM_PROP_LINECOUNT );
 }
 
-
 void DbComboBox::_propertyChanged( const PropertyChangeEvent& _rEvent )
 {
     if ( _rEvent.PropertyName == FM_PROP_STRINGITEMLIST )
@@ -2405,36 +2404,28 @@ void DbComboBox::_propertyChanged( const PropertyChangeEvent& _rEvent )
     }
 }
 
-
 void DbComboBox::SetList(const Any& rItems)
 {
     ComboBoxControl* pField = static_cast<ComboBoxControl*>(m_pWindow.get());
-    pField->Clear();
+    weld::ComboBox& rComboBox = pField->get_widget();
+    rComboBox.clear();
 
     css::uno::Sequence<OUString> aTest;
     if (rItems >>= aTest)
     {
         for (const OUString& rString : std::as_const(aTest))
-             pField->InsertEntry(rString);
+             rComboBox.append_text(rString);
 
         // tell the grid control that this controller is invalid and has to be re-initialized
         invalidatedController();
     }
 }
 
-
-void DbComboBox::implAdjustGenericFieldSetting( const Reference< XPropertySet >& _rxModel )
+void DbComboBox::implAdjustGenericFieldSetting(const Reference<XPropertySet>&)
 {
-    DBG_ASSERT( m_pWindow, "DbComboBox::implAdjustGenericFieldSetting: not to be called without window!" );
-    DBG_ASSERT( _rxModel.is(), "DbComboBox::implAdjustGenericFieldSetting: invalid model!" );
-    if ( m_pWindow && _rxModel.is() )
-    {
-        sal_Int16  nLines = getINT16( _rxModel->getPropertyValue( FM_PROP_LINECOUNT ) );
-        static_cast< ComboBoxControl* >( m_pWindow.get() )->SetDropDownLineCount( nLines );
-    }
+    // we no longer pay attention to FM_PROP_LINECOUNT
 }
 
-
 void DbComboBox::Init( vcl::Window& rParent, const Reference< XRowSet >& xCursor )
 {
     m_rColumn.SetAlignmentFromModel(css::awt::TextAlign::LEFT);
@@ -2472,13 +2463,12 @@ OUString DbComboBox::GetFormatText(const Reference< css::sdb::XColumn >& _rxFiel
     return fmter.getFormattedValue();
 }
 
-
 void DbComboBox::UpdateFromField(const Reference< css::sdb::XColumn >& _rxField, const Reference< XNumberFormatter >& xFormatter)
 {
-    m_pWindow->SetText(GetFormatText(_rxField, xFormatter));
+    ComboBoxControl* pControl = static_cast<ComboBoxControl*>(m_pWindow.get());
+    pControl->get_widget().set_entry_text(GetFormatText(_rxField, xFormatter));
 }
 
-
 void DbComboBox::updateFromModel( Reference< XPropertySet > _rxModel )
 {
     OSL_ENSURE( _rxModel.is() && m_pWindow, "DbComboBox::updateFromModel: invalid call!" );
@@ -2486,14 +2476,17 @@ void DbComboBox::updateFromModel( Reference< XPropertySet > _rxModel )
     OUString sText;
     _rxModel->getPropertyValue( FM_PROP_TEXT ) >>= sText;
 
-    static_cast< ComboBox* >( m_pWindow.get() )->SetText( sText );
-    static_cast< ComboBox* >( m_pWindow.get() )->SetSelection( Selection( SELECTION_MAX, SELECTION_MIN ) );
+    ComboBoxControl* pControl = static_cast<ComboBoxControl*>(m_pWindow.get());
+    weld::ComboBox& rComboBox = pControl->get_widget();
+    rComboBox.set_entry_text(sText);
+    rComboBox.select_entry_region(0, -1);
 }
 
-
 bool DbComboBox::commitControl()
 {
-    OUString aText( m_pWindow->GetText());
+    ComboBoxControl* pControl = static_cast<ComboBoxControl*>(m_pWindow.get());
+    weld::ComboBox& rComboBox = pControl->get_widget();
+    OUString aText(rComboBox.get_active_text());
     m_rColumn.getModel()->setPropertyValue(FM_PROP_TEXT, makeAny(aText));
     return true;
 }
@@ -2696,9 +2689,10 @@ void DbFilterField::SetList(const Any& rItems, bool bComboBox)
     {
         if (bComboBox)
         {
-            ComboBox* pField = static_cast<ComboBox*>(m_pWindow.get());
+            ComboBoxControl* pField = static_cast<ComboBoxControl*>(m_pWindow.get());
+            weld::ComboBox& rComboBox = pField->get_widget();
             for (const OUString& rString : std::as_const(aTest))
-                pField->InsertEntry(rString);
+                rComboBox.append_text(rString);
         }
         else
         {
@@ -2746,13 +2740,9 @@ void DbFilterField::CreateControl(vcl::Window* pParent, const Reference< css::be
 
             if (!m_bFilterList)
             {
-                sal_Int16  nLines       = ::comphelper::getINT16(xModel->getPropertyValue(FM_PROP_LINECOUNT));
-                Any  aItems      = xModel->getPropertyValue(FM_PROP_STRINGITEMLIST);
+                Any aItems = xModel->getPropertyValue(FM_PROP_STRINGITEMLIST);
                 SetList(aItems, true);
-                static_cast<ComboBox*>(m_pWindow.get())->SetDropDownLineCount(nLines);
             }
-            else
-                static_cast<ComboBox*>(m_pWindow.get())->SetDropDownLineCount(5);
 
         }   break;
         default:
@@ -2807,7 +2797,6 @@ void DbFilterField::Init( vcl::Window& rParent, const Reference< XRowSet >& xCur
         pAsEdit->SetReadOnly( false );
 }
 
-
 CellControllerRef DbFilterField::CreateController() const
 {
     CellControllerRef xController;
@@ -2831,7 +2820,6 @@ CellControllerRef DbFilterField::CreateController() const
     return xController;
 }
 
-
 void DbFilterField::updateFromModel( Reference< XPropertySet > _rxModel )
 {
     OSL_ENSURE( _rxModel.is() && m_pWindow, "DbFilterField::updateFromModel: invalid call!" );
@@ -2841,7 +2829,6 @@ void DbFilterField::updateFromModel( Reference< XPropertySet > _rxModel )
     // remember: updateFromModel should be some kind of opposite of commitControl
 }
 
-
 bool DbFilterField::commitControl()
 {
     OUString aText(m_aText);
@@ -3066,12 +3053,13 @@ void DbFilterField::Update()
         (void)xListCursor->next();
     }
 
+    ComboBoxControl* pField = static_cast<ComboBoxControl*>(m_pWindow.get());
+    weld::ComboBox& rComboBox = pField->get_widget();
     // filling the entries for the combobox
     for (const auto& rString : aStringList)
-        static_cast<ComboBox*>(m_pWindow.get())->InsertEntry(rString);
+        rComboBox.append_text(rString);
 }
 
-
 OUString DbFilterField::GetFormatText(const Reference< XColumn >& /*_rxField*/, const Reference< XNumberFormatter >& /*xFormatter*/, Color** /*ppColor*/)
 {
     return OUString();
@@ -4327,11 +4315,12 @@ FmXComboBoxCell::FmXComboBoxCell( DbGridColumn* pColumn, std::unique_ptr<DbCellC
     :FmXTextCell( pColumn, std::move(pControl) )
     ,m_aItemListeners( m_aMutex )
     ,m_aActionListeners( m_aMutex )
-    ,m_pComboBox( &static_cast< ComboBox& >( m_pCellControl->GetWindow() ) )
+    ,m_rComboBox(static_cast<ComboBoxControl&>(m_pCellControl->GetWindow()).get_widget())
+    ,m_nLines(Application::GetSettings().GetStyleSettings().GetListBoxMaximumLineCount())
 {
+    m_rComboBox.connect_changed(LINK(this, FmXComboBoxCell, ChangedHdl));
 }
 
-
 FmXComboBoxCell::~FmXComboBoxCell()
 {
     if ( !OComponentHelper::rBHelper.bDisposed )
@@ -4342,7 +4331,6 @@ FmXComboBoxCell::~FmXComboBoxCell()
 
 }
 
-
 void FmXComboBoxCell::disposing()
 {
     css::lang::EventObject aEvt(*this);
@@ -4352,7 +4340,6 @@ void FmXComboBoxCell::disposing()
     FmXTextCell::disposing();
 }
 
-
 Any SAL_CALL FmXComboBoxCell::queryAggregation( const css::uno::Type& _rType )
 {
     Any aReturn = FmXTextCell::queryAggregation(_rType);
@@ -4363,7 +4350,6 @@ Any SAL_CALL FmXComboBoxCell::queryAggregation( const css::uno::Type& _rType )
     return aReturn;
 }
 
-
 Sequence< Type > SAL_CALL FmXComboBoxCell::getTypes(  )
 {
     return ::comphelper::concatSequences(
@@ -4372,22 +4358,18 @@ Sequence< Type > SAL_CALL FmXComboBoxCell::getTypes(  )
     );
 }
 
-
 IMPLEMENT_GET_IMPLEMENTATION_ID( FmXComboBoxCell )
 
-
 void SAL_CALL FmXComboBoxCell::addItemListener(const Reference< awt::XItemListener >& l)
 {
     m_aItemListeners.addInterface( l );
 }
 
-
 void SAL_CALL FmXComboBoxCell::removeItemListener(const Reference< awt::XItemListener >& l)
 {
     m_aItemListeners.removeInterface( l );
 }
 
-
 void SAL_CALL FmXComboBoxCell::addActionListener(const Reference< awt::XActionListener >& l)
 {
     m_aActionListeners.addInterface( l );
@@ -4399,53 +4381,41 @@ void SAL_CALL FmXComboBoxCell::removeActionListener(const Reference< awt::XActio
     m_aActionListeners.removeInterface( l );
 }
 
-
 void SAL_CALL FmXComboBoxCell::addItem( const OUString& Item, sal_Int16 Pos )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    if ( m_pComboBox )
-        m_pComboBox->InsertEntry( Item, Pos );
+    m_rComboBox.insert_text(Pos, Item);
 }
 
-
 void SAL_CALL FmXComboBoxCell::addItems( const Sequence< OUString >& Items, sal_Int16 Pos )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    if ( m_pComboBox )
+    sal_uInt16 nP = Pos;
+    for ( const auto& rItem : Items )
     {
-        sal_uInt16 nP = Pos;
-        for ( const auto& rItem : Items )
-        {
-            m_pComboBox->InsertEntry( rItem, nP );
-            if ( Pos != -1 )
-                nP++;
-        }
+        m_rComboBox.insert_text(nP, rItem);
+        if ( Pos != -1 )
+            nP++;
     }
 }
 
-
 void SAL_CALL FmXComboBoxCell::removeItems( sal_Int16 Pos, sal_Int16 Count )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    if ( m_pComboBox )
-    {
-        for ( sal_uInt16 n = Count; n; )
-            m_pComboBox->RemoveEntryAt( Pos + (--n) );
-    }
+    for ( sal_uInt16 n = Count; n; )
+        m_rComboBox.remove( Pos + (--n) );
 }
 
-
 sal_Int16 SAL_CALL FmXComboBoxCell::getItemCount()
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    return m_pComboBox ? m_pComboBox->GetEntryCount() : 0;
+    return m_rComboBox.get_count();
 }
 
-
 OUString SAL_CALL FmXComboBoxCell::getItem( sal_Int16 Pos )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    return m_pComboBox ? m_pComboBox->GetEntry(Pos) : OUString();
+    return m_rComboBox.get_text(Pos);
 }
 
 Sequence< OUString > SAL_CALL FmXComboBoxCell::getItems()
@@ -4453,64 +4423,43 @@ Sequence< OUString > SAL_CALL FmXComboBoxCell::getItems()
     ::osl::MutexGuard aGuard( m_aMutex );
 
     Sequence< OUString > aItems;
-    if ( m_pComboBox )
-    {
-        const sal_Int32 nEntries = m_pComboBox->GetEntryCount();
-        aItems.realloc( nEntries );
-        OUString* pItem = aItems.getArray();
-        for ( sal_Int32 n=0; n<nEntries; ++n, ++pItem )
-            *pItem = m_pComboBox->GetEntry( n );
-    }
+    const sal_Int32 nEntries = m_rComboBox.get_count();
+    aItems.realloc( nEntries );
+    OUString* pItem = aItems.getArray();
+    for ( sal_Int32 n=0; n<nEntries; ++n, ++pItem )
+        *pItem = m_rComboBox.get_text(n);
     return aItems;
 }
 
-
 sal_Int16 SAL_CALL FmXComboBoxCell::getDropDownLineCount()
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-
-    sal_Int16 nLines = 0;
-    if ( m_pComboBox )
-        nLines = m_pComboBox->GetDropDownLineCount();
-
-    return nLines;
+    return m_nLines;
 }
 
-
 void SAL_CALL FmXComboBoxCell::setDropDownLineCount(sal_Int16 nLines)
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    if ( m_pComboBox )
-        m_pComboBox->SetDropDownLineCount( nLines );
+    // just store it to return it
+    m_nLines = nLines;
 }
 
-
-void FmXComboBoxCell::onWindowEvent( const VclEventId _nEventId, const vcl::Window& _rWindow, const void* _pEventData )
+IMPL_LINK_NOARG(FmXComboBoxCell, ChangedHdl, weld::ComboBox&, void)
 {
+    if (!m_rComboBox.changed_by_direct_pick())
+        return;
 
-    switch ( _nEventId )
-    {
-    case VclEventId::ComboboxSelect:
-    {
-        awt::ItemEvent aEvent;
-        aEvent.Source = *this;
-        aEvent.Highlighted = 0;
-
-        // with multiple selection 0xFFFF, otherwise the ID
-        aEvent.Selected =   ( m_pComboBox->GetSelectedEntryCount() == 1 )
-                        ?   m_pComboBox->GetSelectedEntryPos()
-                        :   0xFFFF;
-        m_aItemListeners.notifyEach( &awt::XItemListener::itemStateChanged, aEvent );
-    }
-    break;
+    awt::ItemEvent aEvent;
+    aEvent.Source = *this;
+    aEvent.Highlighted = 0;
 
-    default:
-        FmXTextCell::onWindowEvent( _nEventId, _rWindow, _pEventData );
-        break;
-    }
+    // with invalid selection 0xFFFF, otherwise the position
+    aEvent.Selected =   ( m_rComboBox.get_active() != -1 )
+                    ?   m_rComboBox.get_active()
+                    :   0xFFFF;
+    m_aItemListeners.notifyEach( &awt::XItemListener::itemStateChanged, aEvent );
 }
 
-
 FmXFilterCell::FmXFilterCell(DbGridColumn* pColumn, std::unique_ptr<DbFilterField> pControl )
               :FmXGridCell( pColumn, std::move(pControl) )
               ,m_aTextListeners(m_aMutex)
@@ -4518,7 +4467,6 @@ FmXFilterCell::FmXFilterCell(DbGridColumn* pColumn, std::unique_ptr<DbFilterFiel
     static_cast<DbFilterField*>(m_pCellControl.get())->SetCommitHdl( LINK( this, FmXFilterCell, OnCommit ) );
 }
 
-
 FmXFilterCell::~FmXFilterCell()
 {
     if (!OComponentHelper::rBHelper.bDisposed)
@@ -4530,7 +4478,6 @@ FmXFilterCell::~FmXFilterCell()
 }
 
 // XUnoTunnel
-
 sal_Int64 SAL_CALL FmXFilterCell::getSomething( const Sequence< sal_Int8 >& _rIdentifier )
 {
     sal_Int64 nReturn(0);
diff --git a/svx/source/inc/gridcell.hxx b/svx/source/inc/gridcell.hxx
index b46582e6f104..f30d96c8790a 100644
--- a/svx/source/inc/gridcell.hxx
+++ b/svx/source/inc/gridcell.hxx
@@ -1012,7 +1012,10 @@ class FmXComboBoxCell   :public FmXTextCell
 private:
     ::comphelper::OInterfaceContainerHelper2   m_aItemListeners,
                                         m_aActionListeners;
-    VclPtr<ComboBox>                    m_pComboBox;
+    weld::ComboBox& m_rComboBox;
+    sal_uInt16 m_nLines;
+
+    DECL_LINK(ChangedHdl, weld::ComboBox&, void);
 
 protected:
     virtual ~FmXComboBoxCell() override;
@@ -1041,12 +1044,8 @@ public:
     virtual css::uno::Sequence< OUString > SAL_CALL getItems(  ) override;
     virtual ::sal_Int16 SAL_CALL getDropDownLineCount(  ) override;
     virtual void SAL_CALL setDropDownLineCount( ::sal_Int16 Lines ) override;
-
-protected:
-    virtual void onWindowEvent( const VclEventId _nEventId, const vcl::Window& _rWindow, const void* _pEventData ) override;
 };
 
-
 typedef ::cppu::ImplHelper2 <   css::awt::XTextComponent
                             ,   css::lang::XUnoTunnel
                             >   FmXFilterCell_Base;


More information about the Libreoffice-commits mailing list