chart2/source/controller/dialogs/ChartTypeDialogController.cxx |  545 
++++++----
 chart2/source/controller/dialogs/tp_ChartType.cxx              |   36 
 chart2/source/controller/dialogs/tp_ChartType.hxx              |    8 
 chart2/source/controller/sidebar/ChartTypePanel.cxx            |   41 
 chart2/source/controller/sidebar/ChartTypePanel.hxx            |    6 
 chart2/source/inc/ChartTypeDialogController.hxx                |   46 
 chart2/uiconfig/ui/sidebartype.ui                              |   35 
 chart2/uiconfig/ui/tp_ChartType.ui                             |   38 
 compilerplugins/clang/moveparam.cxx                            |    6 
 include/svx/sidebar/LineWidthPopup.hxx                         |   15 
 sc/qa/uitest/chart2/tdf142851.py                               |   10 
 solenv/clang-format/excludelist                                |    2 
 svx/Library_svx.mk                                             |    1 
 svx/source/sidebar/line/LineWidthPopup.cxx                     |  225 +++-
 svx/source/sidebar/line/LineWidthValueSet.cxx                  |  163 --
 svx/source/sidebar/line/LineWidthValueSet.hxx                  |   55 -
 svx/uiconfig/ui/floatinglineproperty.ui                        |   34 
 17 files changed, 711 insertions(+), 555 deletions(-)

New commits:
commit a90322275cc018e35a38f57c62fd91980d8bff5d
Author:     Parth Raiyani <[email protected]>
AuthorDate: Fri Aug 29 19:41:42 2025 +0530
Commit:     Caolán McNamara <[email protected]>
CommitDate: Wed Feb 25 09:19:26 2026 +0100

    Switch to IconView from ValueSet for chart dialogs
    
    - Updated UI in sidebartype.ui and tp_ChartType.ui to include GtkIconView
    - Replaced ValueSet with weld::IconView in ChartTypePanel and tp_ChartType
    - Update ChartTypeDialogController to work with IconView
    - added tooltip support
    - updated relevant test cases
    
    Change-Id: If68fd529dcdf320d00fcd16698d0db02ba975a22
    Signed-off-by: Parth Raiyani <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190070
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Szymon Kłos <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200227
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx 
b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
index 8fb90ca9724b..91b31b707af1 100644
--- a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
+++ b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
@@ -34,9 +34,9 @@
 
 #include <com/sun/star/chart2/DataPointGeometry3D.hpp>
 
-#include <svtools/valueset.hxx>
 #include <vcl/image.hxx>
 #include <vcl/settings.hxx>
+#include <vcl/virdev.hxx>
 
 #include <comphelper/diagnose_ex.hxx>
 
@@ -45,6 +45,14 @@ namespace chart
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::chart2;
 
+namespace {
+void lcl_appendSubType(weld::IconView& rIV, const OUString& rId, const 
OUString& rText,
+                       Bitmap aBmp)
+{
+    rIV.append(rId, rText, &aBmp);
+}
+}
+
 ChartTypeParameter::ChartTypeParameter()
                     : nSubTypeIndex( 1 )
                     , bXAxisWithValues( false )
@@ -345,9 +353,13 @@ void ChartTypeDialogController::commitToModel( const 
ChartTypeParameter& rParame
 
     }
 }
-void ChartTypeDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& /*rParameter*/ )
+void ChartTypeDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& /*rParameter*/ )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+}
+OUString ChartTypeDialogController::getChartName( sal_Int32 /*nId*/ ) const
+{
+    return OUString();
 }
 bool ChartTypeDialogController::shouldShow_3DLookControl() const
 {
@@ -384,6 +396,15 @@ void ChartTypeDialogController::setTemplateProperties( 
const uno::Reference< bea
 {
 }
 
+Bitmap ChartTypeDialogController::getPreviewBitmap(Image pImage)
+{
+    Bitmap aPreviewBitmap = pImage.GetBitmap();
+    VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create();
+    if (pVDev->GetDPIScaleFactor() > 1)
+        aPreviewBitmap.Scale(pVDev->GetDPIScaleFactor(), 
pVDev->GetDPIScaleFactor());
+    return aPreviewBitmap;
+}
+
 ColumnOrBarChartDialogController_Base::ColumnOrBarChartDialogController_Base()
 {
 }
@@ -433,51 +454,69 @@ const tTemplateServiceChartTypeParameterMap& 
ColumnChartDialogController::getTem
         {"com.sun.star.chart2.template.ThreeDColumnDeep" ,               
ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z)}};
     return s_aTemplateMap;
 }
-void ColumnChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, 
const ChartTypeParameter& rParameter )
+void ColumnChartDialogController::fillSubTypeList( weld::IconView& 
rSubTypeList, const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString normalText = SchResId( STR_NORMAL );
+    OUString stackedText = SchResId( STR_STACKED );
+    OUString percentText = SchResId( STR_PERCENT );
+    OUString deepText = SchResId( STR_DEEP );
 
     if( rParameter.b3DLook )
     {
         switch(rParameter.nGeometry3D)
         {
             case DataPointGeometry3D::CYLINDER:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_SAEULE_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_SAEULE_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_SAEULE_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_SAEULE_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_SAEULE_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_SAEULE_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_SAEULE_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_SAEULE_3D_4)));
             break;
             case DataPointGeometry3D::CONE:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_KEGEL_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_KEGEL_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_KEGEL_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_KEGEL_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGEL_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGEL_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGEL_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGEL_3D_4)));
             break;
             case DataPointGeometry3D::PYRAMID:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_PYRAMID_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_PYRAMID_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_PYRAMID_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_PYRAMID_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMID_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMID_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMID_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMID_3D_4)));
             break;
             default: //DataPointGeometry3D::CUBOID:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_COLUMNS_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_COLUMNS_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_COLUMNS_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_COLUMNS_3D));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_3D)));
             break;
         }
     }
     else
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_COLUMNS_2D_1));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_COLUMNS_2D_2));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_COLUMNS_2D_3));
+        lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_2D_1)));
+        lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_2D_2)));
+        lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMNS_2D_3)));
     }
+}
 
-    rSubTypeList.SetItemText( 1, SchResId( STR_NORMAL ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_STACKED ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_PERCENT ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_DEEP ) );
+OUString ColumnChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_NORMAL );
+        case 2:
+            return SchResId( STR_STACKED );
+        case 3:
+            return SchResId( STR_PERCENT );
+        case 4:
+            return SchResId( STR_DEEP );
+        default:
+            break;
+    }
+    return OUString();
 }
 
 BarChartDialogController::BarChartDialogController()
@@ -510,50 +549,69 @@ const tTemplateServiceChartTypeParameterMap& 
BarChartDialogController::getTempla
         {"com.sun.star.chart2.template.ThreeDBarDeep" ,               
ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z)}};
     return s_aTemplateMap;
 }
-void BarChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void BarChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString normalText = SchResId( STR_NORMAL );
+    OUString stackedText = SchResId( STR_STACKED );
+    OUString percentText = SchResId( STR_PERCENT );
+    OUString deepText = SchResId( STR_DEEP );
 
     if( rParameter.b3DLook )
     {
         switch(rParameter.nGeometry3D)
         {
             case DataPointGeometry3D::CYLINDER:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_ROEHRE_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_ROEHRE_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_ROEHRE_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_ROEHRE_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_ROEHRE_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_ROEHRE_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_ROEHRE_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_ROEHRE_3D_4)));
             break;
             case DataPointGeometry3D::CONE:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_KEGELQ_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_KEGELQ_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_KEGELQ_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_KEGELQ_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGELQ_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGELQ_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGELQ_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_KEGELQ_3D_4)));
             break;
             case DataPointGeometry3D::PYRAMID:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_PYRAMIDQ_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_PYRAMIDQ_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_PYRAMIDQ_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_PYRAMIDQ_3D_4));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMIDQ_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMIDQ_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMIDQ_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PYRAMIDQ_3D_4)));
             break;
             default: //DataPointGeometry3D::CUBOID:
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_BARS_3D_1));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_BARS_3D_2));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_BARS_3D_3));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_BARS_3D));
+                lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_3D_1)));
+                lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_3D_2)));
+                lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_3D_3)));
+                lcl_appendSubType(rSubTypeList,"4", deepText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_3D)));
             break;
         }
     }
     else
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_BARS_2D_1));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_BARS_2D_2));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_BARS_2D_3));
+        lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_2D_1)));
+        lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_2D_2)));
+        lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BARS_2D_3)));
+    }
+}
+
+OUString BarChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_NORMAL );
+        case 2:
+            return SchResId( STR_STACKED );
+        case 3:
+            return SchResId( STR_PERCENT );
+        case 4:
+            return SchResId( STR_DEEP );
+        default:
+            break;
     }
-    rSubTypeList.SetItemText( 1, SchResId( STR_NORMAL ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_STACKED ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_PERCENT ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_DEEP ) );
+    return OUString();
 }
 
 //=========
@@ -591,28 +649,29 @@ const tTemplateServiceChartTypeParameterMap& 
PieChartDialogController::getTempla
     {"com.sun.star.chart2.template.ThreeDDonutAllExploded" , 
ChartTypeParameter(4,false,true)}};
     return s_aTemplateMap;
 }
-void PieChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void PieChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString normalText = SchResId( STR_NORMAL );
+    OUString explodedText = SchResId( STR_PIE_EXPLODED );
+    OUString donutText = SchResId( STR_DONUT );
+    OUString donutExplodedText = SchResId( STR_DONUT_EXPLODED );
 
     if( rParameter.b3DLook )
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_CIRCLES_3D));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_CIRCLES_3D_EXPLODED));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_DONUT_3D));
-        rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_DONUT_3D_EXPLODED));
+        lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_CIRCLES_3D)));
+        lcl_appendSubType(rSubTypeList,"2", explodedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_CIRCLES_3D_EXPLODED)));
+        lcl_appendSubType(rSubTypeList,"3", donutText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_DONUT_3D)));
+        lcl_appendSubType(rSubTypeList,"4", donutExplodedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_DONUT_3D_EXPLODED)));
     }
     else
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_CIRCLES_2D));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_CIRCLES_2D_EXPLODED));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_DONUT_2D));
-        rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_DONUT_2D_EXPLODED));
+        lcl_appendSubType(rSubTypeList,"1", normalText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_CIRCLES_2D)));
+        lcl_appendSubType(rSubTypeList,"2", explodedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_CIRCLES_2D_EXPLODED)));
+        lcl_appendSubType(rSubTypeList,"3", donutText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_DONUT_2D)));
+        lcl_appendSubType(rSubTypeList,"4", donutExplodedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_DONUT_2D_EXPLODED)));
     }
-    rSubTypeList.SetItemText( 1, SchResId( STR_NORMAL         ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_PIE_EXPLODED   ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_DONUT          ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_DONUT_EXPLODED ) );
 }
 
 bool PieChartDialogController::shouldShow_3DLookControl() const
@@ -620,6 +679,24 @@ bool PieChartDialogController::shouldShow_3DLookControl() 
const
     return true;
 }
 
+OUString PieChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_NORMAL );
+        case 2:
+            return SchResId( STR_PIE_EXPLODED );
+        case 3:
+            return SchResId( STR_DONUT );
+        case 4:
+            return SchResId( STR_DONUT_EXPLODED );
+        default:
+            break;
+    }
+    return OUString();
+}
+
 void PieChartDialogController::adjustParameterToSubType( ChartTypeParameter& 
rParameter )
 {
     if(rParameter.eStackMode==GlobalStackMode_STACK_Z)
@@ -655,14 +732,29 @@ const tTemplateServiceChartTypeParameterMap& 
OfPieChartDialogController::getTemp
     {"com.sun.star.chart2.template.PieOfPie" ,               
ChartTypeParameter(2,false,false)}};
     return s_aTemplateMap;
 }
-void OfPieChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, 
const ChartTypeParameter& /*rParameter*/ )
+void OfPieChartDialogController::fillSubTypeList( weld::IconView& 
rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString barOfPieText = SchResId( STR_BAR_OF_PIE );
+    OUString pieOfPieText = SchResId( STR_PIE_OF_PIE );
 
-    rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_BAR_OF_PIE));
-    rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_PIE_OF_PIE));
-    rSubTypeList.SetItemText( 1, SchResId( STR_BAR_OF_PIE ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_PIE_OF_PIE ) );
+    lcl_appendSubType(rSubTypeList,"1", barOfPieText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BAR_OF_PIE)));
+    lcl_appendSubType(rSubTypeList,"2", pieOfPieText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_PIE_OF_PIE)));
+}
+
+OUString OfPieChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_BAR_OF_PIE );
+        case 2:
+            return SchResId( STR_PIE_OF_PIE );
+        default:
+            break;
+    }
+    return OUString();
 }
 
 bool OfPieChartDialogController::shouldShow_3DLookControl() const
@@ -815,9 +907,14 @@ const tTemplateServiceChartTypeParameterMap& 
LineChartDialogController::getTempl
     {"com.sun.star.chart2.template.ThreeDLineDeep" ,             
ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z,false,true)}};
     return s_aTemplateMap;
 }
-void LineChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void LineChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString pointsOnlyText = SchResId( STR_POINTS_ONLY );
+    OUString pointsAndLinesText = SchResId( STR_POINTS_AND_LINES );
+    OUString linesOnlyText = SchResId( STR_LINES_ONLY );
+    OUString lines3DText = SchResId( STR_LINES_3D );
 
     switch( rParameter.eCurveStyle )
     {
@@ -825,17 +922,17 @@ void LineChartDialogController::fillSubTypeList( 
ValueSet& rSubTypeList, const C
         case CurveStyle_B_SPLINES:
             if( rParameter.eStackMode == GlobalStackMode_NONE || 
rParameter.eStackMode == GlobalStackMode_STACK_Z )
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XCATEGORY));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XCATEGORY_SMOOTH));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XCATEGORY_SMOOTH));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XCATEGORY_SMOOTH));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XCATEGORY)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XCATEGORY_SMOOTH)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XCATEGORY_SMOOTH)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XCATEGORY_SMOOTH)));
             }
             else
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_STACKED));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_STACKED_SMOOTH));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_STACKED_SMOOTH));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_STACKED_SMOOTH));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_STACKED)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_STACKED_SMOOTH)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_STACKED_SMOOTH)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_STACKED_SMOOTH)));
             }
             break;
         case CurveStyle_STEP_START:
@@ -844,41 +941,53 @@ void LineChartDialogController::fillSubTypeList( 
ValueSet& rSubTypeList, const C
         case CurveStyle_STEP_CENTER_Y:
             if( rParameter.eStackMode == GlobalStackMode_NONE || 
rParameter.eStackMode == GlobalStackMode_STACK_Z )
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XCATEGORY));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XCATEGORY_STEPPED));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XCATEGORY_STEPPED));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XCATEGORY_STEPPED));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XCATEGORY)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XCATEGORY_STEPPED)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XCATEGORY_STEPPED)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XCATEGORY_STEPPED)));
             }
             else
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_STACKED));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_STACKED_STEPPED));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_STACKED_STEPPED));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_STACKED_STEPPED));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_STACKED)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_STACKED_STEPPED)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_STACKED_STEPPED)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_STACKED_STEPPED)));
             }
             break;
         default: // includes CurveStyle_LINES
             //direct lines
             if( rParameter.eStackMode == GlobalStackMode_NONE || 
rParameter.eStackMode == GlobalStackMode_STACK_Z )
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XCATEGORY));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XCATEGORY));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XCATEGORY));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XCATEGORY));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XCATEGORY)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XCATEGORY)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XCATEGORY)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XCATEGORY)));
             }
             else
             {
-                rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_STACKED));
-                rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_STACKED));
-                rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_STACKED));
-                rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_STACKED));
+                lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_STACKED)));
+                lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_STACKED)));
+                lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_STACKED)));
+                lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_STACKED)));
             }
     }
-
-    rSubTypeList.SetItemText( 1, SchResId( STR_POINTS_ONLY ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_POINTS_AND_LINES ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_LINES_ONLY ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_LINES_3D ) );
+}
+OUString LineChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_POINTS_ONLY );
+        case 2:
+            return SchResId( STR_POINTS_AND_LINES );
+        case 3:
+            return SchResId( STR_LINES_ONLY );
+        case 4:
+            return SchResId( STR_LINES_3D );
+        default:
+            break;
+    }
+    return OUString();
 }
 bool LineChartDialogController::shouldShow_StackingControl() const
 {
@@ -955,19 +1064,24 @@ const tTemplateServiceChartTypeParameterMap& 
XYChartDialogController::getTemplat
     return s_aTemplateMap;
 }
 
-void XYChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void XYChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString pointsOnlyText = SchResId( STR_POINTS_ONLY );
+    OUString pointsAndLinesText = SchResId( STR_POINTS_AND_LINES );
+    OUString linesOnlyText = SchResId( STR_LINES_ONLY );
+    OUString lines3DText = SchResId( STR_LINES_3D );
 
     switch (rParameter.eCurveStyle)
     {
         case CurveStyle_CUBIC_SPLINES:
         case CurveStyle_B_SPLINES:
         {
-            rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XVALUES));
-            rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XVALUES_SMOOTH));
-            rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XVALUES_SMOOTH));
-            rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XVALUES_SMOOTH));
+            lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XVALUES)));
+            lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XVALUES_SMOOTH)));
+            lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XVALUES_SMOOTH)));
+            lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XVALUES_SMOOTH)));
             break;
         }
         case CurveStyle_STEP_START:
@@ -975,23 +1089,35 @@ void XYChartDialogController::fillSubTypeList( ValueSet& 
rSubTypeList, const Cha
         case CurveStyle_STEP_CENTER_X:
         case CurveStyle_STEP_CENTER_Y:
         {
-            rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XVALUES));
-            rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XVALUES_STEPPED));
-            rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XVALUES_STEPPED));
-            rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XVALUES_STEPPED));
+            lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XVALUES)));
+            lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XVALUES_STEPPED)));
+            lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XVALUES_STEPPED)));
+            lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XVALUES_STEPPED)));
             break;
         }
         default: // includes CurveStyle_LINES
-            rSubTypeList.InsertItem(1, Image(StockImage::Yes, 
BMP_POINTS_XVALUES));
-            rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_LINE_P_XVALUES));
-            rSubTypeList.InsertItem(3, Image(StockImage::Yes, 
BMP_LINE_O_XVALUES));
-            rSubTypeList.InsertItem(4, Image(StockImage::Yes, 
BMP_LINE3D_XVALUES));
+            lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_POINTS_XVALUES)));
+            lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_P_XVALUES)));
+            lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE_O_XVALUES)));
+            lcl_appendSubType(rSubTypeList,"4", lines3DText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_LINE3D_XVALUES)));
     }
-
-    rSubTypeList.SetItemText( 1, SchResId( STR_POINTS_ONLY ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_POINTS_AND_LINES ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_LINES_ONLY ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_LINES_3D ) );
+}
+OUString XYChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_POINTS_ONLY );
+        case 2:
+            return SchResId( STR_POINTS_AND_LINES );
+        case 3:
+            return SchResId( STR_LINES_ONLY );
+        case 4:
+            return SchResId( STR_LINES_3D );
+        default:
+            break;
+    }
+    return OUString();
 }
 bool XYChartDialogController::shouldShow_SplineControl() const
 {
@@ -1065,26 +1191,42 @@ const tTemplateServiceChartTypeParameterMap& 
AreaChartDialogController::getTempl
     return s_aTemplateMap;
 }
 
-void AreaChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void AreaChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+    m_b3DLook = rParameter.b3DLook;
+
+    OUString firstText = SchResId( m_b3DLook ? STR_DEEP : STR_NORMAL );
+    OUString stackedText = SchResId( STR_STACKED );
+    OUString percentText = SchResId( STR_PERCENT );
 
     if( rParameter.b3DLook )
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_AREAS_3D));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_AREAS_3D_1));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_AREAS_3D_2));
+        lcl_appendSubType(rSubTypeList,"1", firstText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_3D)));
+        lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_3D_1)));
+        lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_3D_2)));
     }
     else
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_AREAS_2D_1));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_AREAS_2D));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_AREAS_2D_3));
+        lcl_appendSubType(rSubTypeList,"1", firstText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_2D_1)));
+        lcl_appendSubType(rSubTypeList,"2", stackedText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_2D)));
+        lcl_appendSubType(rSubTypeList,"3", percentText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_AREAS_2D_3)));
     }
-
-    rSubTypeList.SetItemText( 1, SchResId( rParameter.b3DLook ? STR_DEEP : 
STR_NORMAL ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_STACKED ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_PERCENT ) );
+}
+OUString AreaChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( m_b3DLook ? STR_DEEP : STR_NORMAL );
+        case 2:
+            return SchResId( STR_STACKED );
+        case 3:
+            return SchResId( STR_PERCENT );
+        default:
+            break;
+    }
+    return OUString();
 }
 void AreaChartDialogController::adjustParameterToSubType( ChartTypeParameter& 
rParameter )
 {
@@ -1161,29 +1303,46 @@ const tTemplateServiceChartTypeParameterMap& 
NetChartDialogController::getTempla
     {"com.sun.star.chart2.template.PercentStackedFilledNet" 
,ChartTypeParameter(4,false,false,GlobalStackMode_STACK_Y_PERCENT,false,false)}};
     return s_aTemplateMap;
 }
-void NetChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter )
+void NetChartDialogController::fillSubTypeList( weld::IconView& rSubTypeList, 
const ChartTypeParameter& rParameter )
 {
-    rSubTypeList.Clear();
+    rSubTypeList.clear();
+
+    OUString pointsOnlyText = SchResId( STR_POINTS_ONLY );
+    OUString pointsAndLinesText = SchResId( STR_POINTS_AND_LINES );
+    OUString linesOnlyText = SchResId( STR_LINES_ONLY );
+    OUString filledText = SchResId( STR_FILLED );
 
     if( rParameter.eStackMode == GlobalStackMode_NONE )
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_NET_SYMB));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_NET_LINESYMB));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_NET));
-        rSubTypeList.InsertItem(4, Image(StockImage::Yes, BMP_NET_FILL));
+        lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_SYMB)));
+        lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_LINESYMB)));
+        lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET)));
+        lcl_appendSubType(rSubTypeList,"4", filledText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_FILL)));
     }
     else
     {
-        rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_NET_SYMB_STACK));
-        rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_NET_LINESYMB_STACK));
-        rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_NET_STACK));
-        rSubTypeList.InsertItem(4, Image(StockImage::Yes, BMP_NET_FILL_STACK));
+        lcl_appendSubType(rSubTypeList,"1", pointsOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_SYMB_STACK)));
+        lcl_appendSubType(rSubTypeList,"2", pointsAndLinesText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_LINESYMB_STACK)));
+        lcl_appendSubType(rSubTypeList,"3", linesOnlyText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_STACK)));
+        lcl_appendSubType(rSubTypeList,"4", filledText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_NET_FILL_STACK)));
     }
-
-    rSubTypeList.SetItemText( 1, SchResId( STR_POINTS_ONLY ) );
-    rSubTypeList.SetItemText( 2, SchResId( STR_POINTS_AND_LINES ) );
-    rSubTypeList.SetItemText( 3, SchResId( STR_LINES_ONLY ) );
-    rSubTypeList.SetItemText( 4, SchResId( STR_FILLED ) );
+}
+OUString NetChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_POINTS_ONLY );
+        case 2:
+            return SchResId( STR_POINTS_AND_LINES );
+        case 3:
+            return SchResId( STR_LINES_ONLY );
+        case 4:
+            return SchResId( STR_FILLED );
+        default:
+            break;
+    }
+    return OUString();
 }
 void NetChartDialogController::adjustParameterToSubType( ChartTypeParameter& 
rParameter )
 {
@@ -1240,18 +1399,37 @@ const tTemplateServiceChartTypeParameterMap& 
StockChartDialogController::getTemp
     return s_aTemplateMap;
 }
 
-void StockChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, 
const ChartTypeParameter& /*rParameter*/ )
+void StockChartDialogController::fillSubTypeList( weld::IconView& 
rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
 {
-    rSubTypeList.Clear();
-    rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_STOCK_1));
-    rSubTypeList.InsertItem(2, Image(StockImage::Yes, BMP_STOCK_2));
-    rSubTypeList.InsertItem(3, Image(StockImage::Yes, BMP_STOCK_3));
-    rSubTypeList.InsertItem(4, Image(StockImage::Yes, BMP_STOCK_4));
+    rSubTypeList.clear();
 
-    rSubTypeList.SetItemText( 1, SchResId(STR_STOCK_1) );
-    rSubTypeList.SetItemText( 2, SchResId(STR_STOCK_2) );
-    rSubTypeList.SetItemText( 3, SchResId(STR_STOCK_3) );
-    rSubTypeList.SetItemText( 4, SchResId(STR_STOCK_4) );
+    OUString stock1Text = SchResId(STR_STOCK_1);
+    OUString stock2Text = SchResId(STR_STOCK_2);
+    OUString stock3Text = SchResId(STR_STOCK_3);
+    OUString stock4Text = SchResId(STR_STOCK_4);
+
+    lcl_appendSubType(rSubTypeList,"1", stock1Text, 
getPreviewBitmap(Image(StockImage::Yes, BMP_STOCK_1)));
+    lcl_appendSubType(rSubTypeList,"2", stock2Text, 
getPreviewBitmap(Image(StockImage::Yes, BMP_STOCK_2)));
+    lcl_appendSubType(rSubTypeList,"3", stock3Text, 
getPreviewBitmap(Image(StockImage::Yes, BMP_STOCK_3)));
+    lcl_appendSubType(rSubTypeList,"4", stock4Text, 
getPreviewBitmap(Image(StockImage::Yes, BMP_STOCK_4)));
+}
+
+OUString StockChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_STOCK_1 );
+        case 2:
+            return SchResId( STR_STOCK_2 );
+        case 3:
+            return SchResId( STR_STOCK_3 );
+        case 4:
+            return SchResId( STR_STOCK_4 );
+        default:
+            break;
+    }
+    return OUString();
 }
 
 void StockChartDialogController::adjustParameterToSubType( ChartTypeParameter& 
rParameter )
@@ -1283,14 +1461,29 @@ const tTemplateServiceChartTypeParameterMap& 
CombiColumnLineChartDialogControlle
     return s_aTemplateMap;
 }
 
-void CombiColumnLineChartDialogController::fillSubTypeList( ValueSet& 
rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
+void CombiColumnLineChartDialogController::fillSubTypeList( weld::IconView& 
rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
 {
-    rSubTypeList.Clear();
-    rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_COLUMN_LINE));
-    rSubTypeList.InsertItem(2, Image(StockImage::Yes, 
BMP_COLUMN_LINE_STACKED));
+    rSubTypeList.clear();
 
-    rSubTypeList.SetItemText(1, SchResId(STR_LINE_COLUMN));
-    rSubTypeList.SetItemText(2, SchResId(STR_LINE_STACKEDCOLUMN));
+    OUString lineColumnText = SchResId(STR_LINE_COLUMN);
+    OUString lineStackedColumnText = SchResId(STR_LINE_STACKEDCOLUMN);
+
+    lcl_appendSubType(rSubTypeList,"1", lineColumnText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMN_LINE)));
+    lcl_appendSubType(rSubTypeList,"2", lineStackedColumnText, 
getPreviewBitmap(Image(StockImage::Yes, BMP_COLUMN_LINE_STACKED)));
+}
+
+OUString CombiColumnLineChartDialogController::getChartName( sal_Int32 nId ) 
const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_LINE_COLUMN );
+        case 2:
+            return SchResId( STR_LINE_STACKEDCOLUMN );
+        default:
+            break;
+    }
+    return OUString();
 }
 
 void CombiColumnLineChartDialogController::showExtraControls(weld::Builder* 
pBuilder)
@@ -1409,12 +1602,24 @@ const tTemplateServiceChartTypeParameterMap& 
BubbleChartDialogController::getTem
         {"com.sun.star.chart2.template.Bubble" ,          
ChartTypeParameter(1,true)}};
     return s_aTemplateMap;
 }
-void BubbleChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, 
const ChartTypeParameter& /*rParameter*/ )
+void BubbleChartDialogController::fillSubTypeList( weld::IconView& 
rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
 {
-    rSubTypeList.Clear();
-    rSubTypeList.InsertItem(1, Image(StockImage::Yes, BMP_BUBBLE_1));
+    rSubTypeList.clear();
 
-    rSubTypeList.SetItemText( 1, SchResId(STR_BUBBLE_1) );
+    OUString bubble1Text = SchResId(STR_BUBBLE_1);
+
+    lcl_appendSubType(rSubTypeList,"1", bubble1Text, 
getPreviewBitmap(Image(StockImage::Yes, BMP_BUBBLE_1)));
+}
+OUString BubbleChartDialogController::getChartName( sal_Int32 nId ) const
+{
+    switch (nId)
+    {
+        case 1:
+            return SchResId( STR_BUBBLE_1 );
+        default:
+            break;
+    }
+    return OUString();
 }
 void BubbleChartDialogController::adjustParameterToSubType( 
ChartTypeParameter& rParameter )
 {
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx 
b/chart2/source/controller/dialogs/tp_ChartType.cxx
index 59f8776a0160..53021ec55d59 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -27,8 +27,6 @@
 #include <Diagram.hxx>
 #include <unonames.hxx>
 
-#include <svtools/valueset.hxx>
-
 #include <utility>
 #include <vcl/weld.hxx>
 #include <vcl/outdev.hxx>
@@ -53,12 +51,8 @@ ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, 
weld::DialogControlle
     , m_aTimerTriggeredControllerLock( m_xChartModel )
     , m_xFT_ChooseType(m_xBuilder->weld_label(u"FT_CAPTION_FOR_WIZARD"_ustr))
     , m_xMainTypeList(m_xBuilder->weld_tree_view(u"charttype"_ustr))
-    , m_xSubTypeList(new 
ValueSet(m_xBuilder->weld_scrolled_window(u"subtypewin"_ustr, true)))
-    , m_xSubTypeListWin(new weld::CustomWeld(*m_xBuilder, u"subtype"_ustr, 
*m_xSubTypeList))
+    , m_xSubTypeList(m_xBuilder->weld_icon_view(u"subtype_iconview"_ustr))
 {
-    Size 
aSize(m_xSubTypeList->GetDrawingArea()->get_ref_device().LogicToPixel(Size(150, 
50), MapMode(MapUnit::MapAppFont)));
-    m_xSubTypeListWin->set_size_request(aSize.Width(), aSize.Height());
-
     if (bShowDescription)
     {
         m_xFT_ChooseType->show();
@@ -71,16 +65,13 @@ ChartTypeTabPage::ChartTypeTabPage(weld::Container* pPage, 
weld::DialogControlle
     SetPageTitle(SchResId(STR_PAGE_CHARTTYPE));
 
     m_xMainTypeList->connect_selection_changed(LINK(this, ChartTypeTabPage, 
SelectMainTypeHdl));
-    m_xSubTypeList->SetSelectHdl( LINK( this, ChartTypeTabPage, 
SelectSubTypeHdl ) );
+    m_xSubTypeList->connect_selection_changed( LINK( this, ChartTypeTabPage, 
SelectSubTypeHdl ) );
+    m_xSubTypeList->connect_query_tooltip( LINK(this, ChartTypeTabPage, 
QueryTooltipHdl) );
 
-    m_xSubTypeList->SetStyle(m_xSubTypeList->GetStyle() |
-        WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | 
WB_3DLOOK );
     // Set number of columns in chart type selector.
     // TODO: Ideally this would not be hard-coded, but determined
     // programmatically based on the maximum number of chart types across all
     // controllers.
-    m_xSubTypeList->SetColCount(4);
-    m_xSubTypeList->SetLineCount(1);
 
     bool bEnableComplexChartTypes = true;
     uno::Reference< beans::XPropertySet > xProps( 
static_cast<cppu::OWeakObject*>(m_xChartModel.get()), uno::UNO_QUERY );
@@ -142,14 +133,13 @@ ChartTypeTabPage::~ChartTypeTabPage()
     m_pSplineResourceGroup.reset();
     m_pGeometryResourceGroup.reset();
     m_pSortByXValuesResourceGroup.reset();
-    m_xSubTypeListWin.reset();
     m_xSubTypeList.reset();
 }
 
 ChartTypeParameter ChartTypeTabPage::getCurrentParamter() const
 {
     ChartTypeParameter aParameter;
-    aParameter.nSubTypeIndex = 
static_cast<sal_Int32>(m_xSubTypeList->GetSelectedItemId());
+    aParameter.nSubTypeIndex = m_xSubTypeList->get_selected_id().toInt32();
     m_pDim3DLookResourceGroup->fillParameter( aParameter );
     m_pStackingResourceGroup->fillParameter( aParameter );
     m_pSplineResourceGroup->fillParameter( aParameter );
@@ -213,7 +203,7 @@ ChartTypeDialogController* 
ChartTypeTabPage::getSelectedMainType()
     return pTypeController;
 }
 
-IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl, ValueSet*, void)
+IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl, weld::IconView&, void)
 {
     if( m_pCurrentMainType )
     {
@@ -224,6 +214,16 @@ IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl, 
ValueSet*, void)
     }
 }
 
+IMPL_LINK(ChartTypeTabPage, QueryTooltipHdl, const weld::TreeIter&, iter, 
OUString)
+{
+    const OUString sId = m_xSubTypeList->get_id(iter);
+
+    if(!sId.isEmpty() && m_pCurrentMainType)
+        return m_pCurrentMainType->getChartName(sId.toInt32());
+
+    return OUString();
+}
+
 IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl, weld::TreeView&, void)
 {
     selectMainType();
@@ -274,7 +274,7 @@ void ChartTypeTabPage::selectMainType()
 void ChartTypeTabPage::showAllControls( ChartTypeDialogController& 
rTypeController )
 {
     m_xMainTypeList->show();
-    m_xSubTypeList->Show();
+    m_xSubTypeList->show();
 
     bool bShow = rTypeController.shouldShow_3DLookControl();
     m_pDim3DLookResourceGroup->showControls( bShow );
@@ -296,7 +296,7 @@ void ChartTypeTabPage::fillAllControls( const 
ChartTypeParameter& rParameter, bo
     {
         m_pCurrentMainType->fillSubTypeList(*m_xSubTypeList, rParameter);
     }
-    m_xSubTypeList->SelectItem( static_cast<sal_uInt16>( 
rParameter.nSubTypeIndex) );
+    m_xSubTypeList->select( static_cast<sal_uInt16>( rParameter.nSubTypeIndex 
- 1) ); // Convert 1-based subtype index to 0-based index for selection
     m_pDim3DLookResourceGroup->fillControls( rParameter );
     m_pStackingResourceGroup->fillControls( rParameter );
     m_pSplineResourceGroup->fillControls( rParameter );
@@ -357,7 +357,7 @@ void ChartTypeTabPage::initializePage()
     if( !bFound )
     {
         m_xMainTypeList->show();
-        m_xSubTypeList->Show();
+        m_xSubTypeList->show();
         m_pDim3DLookResourceGroup->showControls( false );
         m_pStackingResourceGroup->showControls( false );
         m_pSplineResourceGroup->showControls( false );
diff --git a/chart2/source/controller/dialogs/tp_ChartType.hxx 
b/chart2/source/controller/dialogs/tp_ChartType.hxx
index 946beb836e1a..537b03a3aeaa 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.hxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.hxx
@@ -29,8 +29,6 @@
 
 namespace weld { class CustomWeld; }
 
-class ValueSet;
-
 namespace chart
 {
 
@@ -65,7 +63,8 @@ private:
     void selectMainType();
 
     DECL_LINK(SelectMainTypeHdl, weld::TreeView&, void);
-    DECL_LINK(SelectSubTypeHdl, ValueSet*, void );
+    DECL_LINK(SelectSubTypeHdl, weld::IconView&, void );
+    DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString);
 
     std::unique_ptr<Dim3DLookResourceGroup>     m_pDim3DLookResourceGroup;
     std::unique_ptr<StackingResourceGroup>      m_pStackingResourceGroup;
@@ -84,8 +83,7 @@ private:
 
     std::unique_ptr<weld::Label>  m_xFT_ChooseType;
     std::unique_ptr<weld::TreeView> m_xMainTypeList;
-    std::unique_ptr<ValueSet> m_xSubTypeList;
-    std::unique_ptr<weld::CustomWeld> m_xSubTypeListWin;
+    std::unique_ptr<weld::IconView> m_xSubTypeList;
 };
 
 } //namespace chart
diff --git a/chart2/source/controller/sidebar/ChartTypePanel.cxx 
b/chart2/source/controller/sidebar/ChartTypePanel.cxx
index 74c3423ebe6d..b4393de64526 100644
--- a/chart2/source/controller/sidebar/ChartTypePanel.cxx
+++ b/chart2/source/controller/sidebar/ChartTypePanel.cxx
@@ -29,7 +29,6 @@
 #include <Diagram.hxx>
 #include <unonames.hxx>
 
-#include <svtools/valueset.hxx>
 #include <comphelper/diagnose_ex.hxx>
 
 using namespace css;
@@ -53,20 +52,11 @@ ChartTypePanel::ChartTypePanel(weld::Widget* pParent, 
::chart::ChartController*
     , m_nChangingCalls(0)
     , m_aTimerTriggeredControllerLock(m_xChartModel)
     , m_xMainTypeList(m_xBuilder->weld_combo_box(u"cmb_chartType"_ustr))
-    , m_xSubTypeList(new 
ValueSet(m_xBuilder->weld_scrolled_window(u"subtypewin"_ustr, true)))
-    , m_xSubTypeListWin(new weld::CustomWeld(*m_xBuilder, u"subtype"_ustr, 
*m_xSubTypeList))
+    , m_xSubTypeList(m_xBuilder->weld_icon_view(u"subtype_iconview"_ustr))
 {
-    Size aSize(m_xSubTypeList->GetDrawingArea()->get_ref_device().LogicToPixel(
-        Size(120, 40), MapMode(MapUnit::MapAppFont)));
-    m_xSubTypeListWin->set_size_request(aSize.Width(), aSize.Height());
-
     m_xMainTypeList->connect_changed(LINK(this, ChartTypePanel, 
SelectMainTypeHdl));
-    m_xSubTypeList->SetSelectHdl(LINK(this, ChartTypePanel, SelectSubTypeHdl));
-
-    m_xSubTypeList->SetStyle(m_xSubTypeList->GetStyle() | WB_ITEMBORDER | 
WB_DOUBLEBORDER
-                             | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK);
-    m_xSubTypeList->SetColCount(4);
-    m_xSubTypeList->SetLineCount(1);
+    m_xSubTypeList->connect_selection_changed(LINK(this, ChartTypePanel, 
SelectSubTypeHdl));
+    m_xSubTypeList->connect_query_tooltip(LINK(this, ChartTypePanel, 
QueryTooltipHdl));
 
     bool bEnableComplexChartTypes = true;
     uno::Reference<beans::XPropertySet> 
xProps(static_cast<cppu::OWeakObject*>(m_xChartModel.get()),
@@ -130,17 +120,14 @@ ChartTypePanel::~ChartTypePanel()
     m_pSplineResourceGroup.reset();
     m_pGeometryResourceGroup.reset();
     m_pSortByXValuesResourceGroup.reset();
-    m_xSubTypeListWin.reset();
     m_xSubTypeList.reset();
 
-    m_xSubTypeListWin.reset();
-    m_xSubTypeList.reset();
     m_xMainTypeList.reset();
 }
 
 IMPL_LINK_NOARG(ChartTypePanel, SelectMainTypeHdl, weld::ComboBox&, void) { 
selectMainType(); }
 
-IMPL_LINK_NOARG(ChartTypePanel, SelectSubTypeHdl, ValueSet*, void)
+IMPL_LINK_NOARG(ChartTypePanel, SelectSubTypeHdl, weld::IconView&, void)
 {
     if (m_pCurrentMainType)
     {
@@ -151,6 +138,16 @@ IMPL_LINK_NOARG(ChartTypePanel, SelectSubTypeHdl, 
ValueSet*, void)
     }
 }
 
+IMPL_LINK(ChartTypePanel, QueryTooltipHdl, const weld::TreeIter&, iter, 
OUString)
+{
+    const OUString sId = m_xSubTypeList->get_id(iter);
+
+    if (!sId.isEmpty() && m_pCurrentMainType)
+        return m_pCurrentMainType->getChartName(sId.toInt32());
+
+    return OUString();
+}
+
 void ChartTypePanel::Initialize()
 {
     if (!m_xChartModel.is())
@@ -206,7 +203,7 @@ void ChartTypePanel::Initialize()
 
     if (!bFound)
     {
-        m_xSubTypeList->Hide();
+        m_xSubTypeList->hide();
         m_pDim3DLookResourceGroup->showControls(false);
         m_pStackingResourceGroup->showControls(false);
         m_pSplineResourceGroup->showControls(false);
@@ -309,7 +306,7 @@ ChartTypeDialogController* 
ChartTypePanel::getSelectedMainType()
 void ChartTypePanel::showAllControls(ChartTypeDialogController& 
rTypeController)
 {
     m_xMainTypeList->show();
-    m_xSubTypeList->Show();
+    m_xSubTypeList->show();
 
     bool bShow = rTypeController.shouldShow_3DLookControl();
     m_pDim3DLookResourceGroup->showControls(bShow);
@@ -332,7 +329,9 @@ void ChartTypePanel::fillAllControls(const 
ChartTypeParameter& rParameter,
     {
         m_pCurrentMainType->fillSubTypeList(*m_xSubTypeList, rParameter);
     }
-    
m_xSubTypeList->SelectItem(static_cast<sal_uInt16>(rParameter.nSubTypeIndex));
+    m_xSubTypeList->select(static_cast<sal_uInt16>(
+        rParameter.nSubTypeIndex
+        - 1)); // Convert 1-based subtype index to 0-based index for selection
     m_pDim3DLookResourceGroup->fillControls(rParameter);
     m_pStackingResourceGroup->fillControls(rParameter);
     m_pSplineResourceGroup->fillControls(rParameter);
@@ -344,7 +343,7 @@ void ChartTypePanel::fillAllControls(const 
ChartTypeParameter& rParameter,
 ChartTypeParameter ChartTypePanel::getCurrentParameter() const
 {
     ChartTypeParameter aParameter;
-    aParameter.nSubTypeIndex = 
static_cast<sal_Int32>(m_xSubTypeList->GetSelectedItemId());
+    aParameter.nSubTypeIndex = m_xSubTypeList->get_selected_id().toInt32();
     m_pDim3DLookResourceGroup->fillParameter(aParameter);
     m_pStackingResourceGroup->fillParameter(aParameter);
     m_pSplineResourceGroup->fillParameter(aParameter);
diff --git a/chart2/source/controller/sidebar/ChartTypePanel.hxx 
b/chart2/source/controller/sidebar/ChartTypePanel.hxx
index 8df0020431db..79aded99acbb 100644
--- a/chart2/source/controller/sidebar/ChartTypePanel.hxx
+++ b/chart2/source/controller/sidebar/ChartTypePanel.hxx
@@ -85,7 +85,8 @@ private:
     void selectMainType();
 
     DECL_LINK(SelectMainTypeHdl, weld::ComboBox&, void);
-    DECL_LINK(SelectSubTypeHdl, ValueSet*, void);
+    DECL_LINK(SelectSubTypeHdl, weld::IconView&, void);
+    DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString);
 
     vcl::EnumContext maContext;
 
@@ -112,8 +113,7 @@ private:
     TimerTriggeredControllerLock m_aTimerTriggeredControllerLock;
 
     std::unique_ptr<weld::ComboBox> m_xMainTypeList;
-    std::unique_ptr<ValueSet> m_xSubTypeList;
-    std::unique_ptr<weld::CustomWeld> m_xSubTypeListWin;
+    std::unique_ptr<weld::IconView> m_xSubTypeList;
 };
 }
 } // end of namespace ::chart::sidebar
diff --git a/chart2/source/inc/ChartTypeDialogController.hxx 
b/chart2/source/inc/ChartTypeDialogController.hxx
index e55f6dea85dc..6cdce558f206 100644
--- a/chart2/source/inc/ChartTypeDialogController.hxx
+++ b/chart2/source/inc/ChartTypeDialogController.hxx
@@ -29,13 +29,14 @@
 #include <com/sun/star/chart2/CurveStyle.hpp>
 #include <vcl/weld.hxx>
 
+#include <vcl/image.hxx>
+#include <vcl/virdev.hxx>
+
 namespace com::sun::star::beans
 {
 class XPropertySet;
 }
 
-class ValueSet;
-
 namespace chart
 {
 class ChartModel;
@@ -95,7 +96,9 @@ public:
     virtual OUString getName() = 0;
     virtual OUString getImage() = 0;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const = 0;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList, const 
ChartTypeParameter& rParameter);
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
+                                 const ChartTypeParameter& rParameter);
+    virtual OUString getChartName(sal_Int32 nId) const;
 
     virtual bool shouldShow_3DLookControl() const;
     virtual bool shouldShow_StackingControl() const;
@@ -133,6 +136,7 @@ public:
 protected:
     bool bSupportsXAxisWithValues;
     bool bSupports3D;
+    static Bitmap getPreviewBitmap(Image pPreview);
 };
 
 class ColumnOrBarChartDialogController_Base : public ChartTypeDialogController
@@ -156,8 +160,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
 };
 
 class BarChartDialogController final : public 
ColumnOrBarChartDialogController_Base
@@ -169,8 +174,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
 };
 
 class PieChartDialogController final : public ChartTypeDialogController
@@ -182,8 +188,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 
     virtual bool shouldShow_3DLookControl() const override;
@@ -198,8 +205,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 
     virtual bool shouldShow_3DLookControl() const override;
@@ -230,8 +238,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
     virtual void adjustParameterToMainType(ChartTypeParameter& rParameter) 
override;
 
@@ -248,8 +257,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 
     virtual bool shouldShow_SplineControl() const override;
@@ -265,12 +275,16 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
     virtual void adjustParameterToMainType(ChartTypeParameter& rParameter) 
override;
 
     virtual bool shouldShow_3DLookControl() const override;
+
+private:
+    bool m_b3DLook = false;
 };
 
 class NetChartDialogController final : public ChartTypeDialogController
@@ -282,8 +296,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 
     virtual bool shouldShow_StackingControl() const override;
@@ -298,8 +313,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 };
 
@@ -311,8 +327,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 
     virtual void showExtraControls(weld::Builder* pBuilder) override;
@@ -341,8 +358,9 @@ public:
     virtual OUString getName() override;
     virtual OUString getImage() override;
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() 
const override;
-    virtual void fillSubTypeList(ValueSet& rSubTypeList,
+    virtual void fillSubTypeList(weld::IconView& rSubTypeList,
                                  const ChartTypeParameter& rParameter) 
override;
+    virtual OUString getChartName(sal_Int32 nId) const override;
     virtual void adjustParameterToSubType(ChartTypeParameter& rParameter) 
override;
 };
 
diff --git a/chart2/uiconfig/ui/sidebartype.ui 
b/chart2/uiconfig/ui/sidebartype.ui
index 557d06563edd..6913c9ec29a9 100644
--- a/chart2/uiconfig/ui/sidebartype.ui
+++ b/chart2/uiconfig/ui/sidebartype.ui
@@ -32,6 +32,14 @@
       <column type="GdkPixbuf"/>
     </columns>
   </object>
+  <object class="GtkTreeStore" id="liststore3">
+    <columns>
+      <!-- column-name pixbuf -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <!-- n-columns=1 n-rows=1 -->
   <object class="GtkGrid" id="ChartTypePanel">
     <property name="visible">True</property>
@@ -46,26 +54,29 @@
         <property name="row-spacing">3</property>
         <property name="column-spacing">6</property>
         <child>
-          <object class="GtkScrolledWindow" id="subtypewin">
+          <object class="GtkScrolledWindow">
             <property name="visible">True</property>
             <property name="can-focus">True</property>
             <property name="margin-bottom">6</property>
-            <property name="hexpand">True</property>
+            <property name="hexpand">False</property>
+            <property name="vexpand">False</property>
             <property name="hscrollbar-policy">never</property>
             <property name="vscrollbar-policy">never</property>
             <property name="shadow-type">in</property>
             <child>
-              <object class="GtkViewport">
+              <object class="GtkIconView" id="subtype_iconview">
                 <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <child>
-                  <object class="GtkDrawingArea" id="subtype">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="events">GDK_BUTTON_MOTION_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
-                    <property name="hexpand">True</property>
-                  </object>
-                </child>
+                <property name="can-focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="model">liststore3</property>
+                <property name="pixbuf-column">0</property>
+                <property name="columns">4</property>
+                <property name="selection-mode">single</property>
+                <property name="item-padding">2</property>
+                <property name="row-spacing">2</property>
+                <property name="column-spacing">2</property>
+                <property name="margin">2</property>
               </object>
             </child>
           </object>
diff --git a/chart2/uiconfig/ui/tp_ChartType.ui 
b/chart2/uiconfig/ui/tp_ChartType.ui
index 6d1fe5e895e7..ea1661df26c1 100644
--- a/chart2/uiconfig/ui/tp_ChartType.ui
+++ b/chart2/uiconfig/ui/tp_ChartType.ui
@@ -34,6 +34,14 @@
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkTreeStore" id="liststore3">
+    <columns>
+      <!-- column-name pixbuf -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkBox" id="tp_ChartType">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
@@ -81,26 +89,30 @@
                 <property name="vexpand">True</property>
                 <property name="row-spacing">6</property>
                 <child>
-                  <object class="GtkScrolledWindow" id="subtypewin">
+                  <object class="GtkScrolledWindow">
                     <property name="can-focus">True</property>
-                    <property name="hexpand">True</property>
+                    <property name="hexpand">False</property>
+                    <property name="vexpand">False</property>
                     <property name="hscrollbar-policy">never</property>
                     <property name="vscrollbar-policy">never</property>
                     <property name="shadow-type">in</property>
                     <child>
-                      <object class="GtkViewport">
+                      <object class="GtkIconView" id="subtype_iconview">
                         <property name="visible">True</property>
                         <property name="can-focus">True</property>
-                        <child>
-                          <object class="GtkDrawingArea" id="subtype">
-                            <property name="can-focus">True</property>
-                            <property name="events">GDK_BUTTON_MOTION_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
-                            <property name="hexpand">True</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="subtype-atkobject">
-                                <property 
name="AtkObject::accessible-description" translatable="yes" 
context="tp_ChartType|extended_tip|subtype">Select a sub type of the basic 
chart type.</property>
-                              </object>
-                            </child>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="model">liststore3</property>
+                        <property name="pixbuf-column">0</property>
+                        <property name="columns">4</property>
+                        <property name="selection-mode">single</property>
+                        <property name="item-padding">2</property>
+                        <property name="row-spacing">2</property>
+                        <property name="column-spacing">2</property>
+                        <property name="margin">2</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" 
id="subtype_iconview-atkobject">
+                            <property name="AtkObject::accessible-description" 
translatable="yes" context="tp_ChartType|extended_tip|subtype_iconview">Select 
a sub type of the basic chart type.</property>
                           </object>
                         </child>
                       </object>
diff --git a/sc/qa/uitest/chart2/tdf142851.py b/sc/qa/uitest/chart2/tdf142851.py
index e48b9cf46685..3f9b21e97f19 100644
--- a/sc/qa/uitest/chart2/tdf142851.py
+++ b/sc/qa/uitest/chart2/tdf142851.py
@@ -25,8 +25,14 @@ class tdf142851(UITestCase):
             xChart = xChartMain.getChild("CID/Page=")
 
             with self.ui_test.execute_dialog_through_action(xChart, "COMMAND", 
mkPropertyValues({"COMMAND" : "DiagramType"})) as xDialog:
-                chartTypeVisible = 
get_state_as_dict(xDialog.getChild("charttype"))['Visible']
-                subTypeVisible = 
get_state_as_dict(xDialog.getChild("subtype"))['Visible']
+                chartType = xDialog.getChild("charttype")
+                chartType_element = chartType.getChild("0")
+                chartType_element.executeAction("SELECT", mkPropertyValues({}))
+                chartTypeVisible = get_state_as_dict(chartType)['Visible']
+                subTypeIconView = xDialog.getChild("subtype_iconview")
+                subtype_element = subTypeIconView.getChild("0")
+                subtype_element.executeAction("SELECT", mkPropertyValues({}))
+                subTypeVisible = get_state_as_dict(subTypeIconView)['Visible']
 
             self.assertEqual('true', chartTypeVisible)
             self.assertEqual('true', subTypeVisible)
commit 2797aa27b001094615e9690fff521c40928b3d42
Author:     Parth Raiyani <[email protected]>
AuthorDate: Fri Aug 22 19:08:41 2025 +0530
Commit:     Caolán McNamara <[email protected]>
CommitDate: Wed Feb 25 09:19:13 2026 +0100

    Replaces ValueSet with IconView for line width selection
    
    - Updated the UI layout to use GtkIconView with better configuration 
options.
    - Simplified logic for filling and updating the selection view.
    - Added tooltip support
    - Removed obsolete code related to ValueSet including LineWidthValueSet
    - Fixed potential LibreOffice Kit crash by disabling unnecessary tooltip 
for popup dialog in Libreoffit Kit
    
    Change-Id: I23be48e9931ede35675ff4ed79a3ce9114badbb8
    Signed-off-by: Parth Raiyani <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189966
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Szymon Kłos <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200226
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/compilerplugins/clang/moveparam.cxx 
b/compilerplugins/clang/moveparam.cxx
index dc7a84b4d64d..93484ef60b5f 100644
--- a/compilerplugins/clang/moveparam.cxx
+++ b/compilerplugins/clang/moveparam.cxx
@@ -90,12 +90,6 @@ bool MoveParam::VisitCXXOperatorCallExpr(const 
CXXOperatorCallExpr* callExpr)
     if (!loplugin::TypeCheck(parmVarDecl->getType()).LvalueReference().Const())
         return true;
 
-    StringRef aFileName = getFilenameOfLocation(
-        
compiler.getSourceManager().getSpellingLoc(parmVarDecl->getBeginLoc()));
-    if (loplugin::hasPathnamePrefix(aFileName,
-                                    SRCDIR 
"/svx/source/sidebar/line/LineWidthValueSet.cxx"))
-        return true;
-
     report(DiagnosticsEngine::Warning, "rather use move && param1", 
callExpr->getBeginLoc());
 
     return true;
diff --git a/include/svx/sidebar/LineWidthPopup.hxx 
b/include/svx/sidebar/LineWidthPopup.hxx
index 262f3540941b..d8e84ffa0f1d 100644
--- a/include/svx/sidebar/LineWidthPopup.hxx
+++ b/include/svx/sidebar/LineWidthPopup.hxx
@@ -26,12 +26,9 @@
 #include <svtools/toolbarmenu.hxx>
 #include <array>
 
-class ValueSet;
-
 namespace svx::sidebar
 {
 class LinePropertyPanelBase;
-class LineWidthValueSet;
 
 class LineWidthPopup final : public WeldToolbarPopup
 {
@@ -57,11 +54,17 @@ private:
     Image m_aIMGCusGray;
 
     std::unique_ptr<weld::MetricSpinButton> m_xMFWidth;
-    std::unique_ptr<LineWidthValueSet> m_xVSWidth;
-    std::unique_ptr<weld::CustomWeld> m_xVSWidthWin;
+    std::unique_ptr<weld::IconView> m_xIVWidth;
+    Size aPreviewSize;
 
-    DECL_LINK(VSSelectHdl, ValueSet*, void);
+    DECL_LINK(ItemActivatedHdl, weld::IconView&, bool);
+    DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString);
     DECL_LINK(MFModifyHdl, weld::MetricSpinButton&, void);
+
+    VclPtr<VirtualDevice> CreateLinePreview(sal_uInt16 nLineWidth, const 
OUString& rText);
+    VclPtr<VirtualDevice> CreateCustomPreview(const Image& rImage, const 
OUString& rText,
+                                              bool bEnabled);
+    void PopulateIconView();
 };
 
 } // end of namespace svx::sidebar
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 1a45aca5b71f..944136b26a4a 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -11463,8 +11463,6 @@ svx/source/sidebar/graphic/GraphicPropertyPanel.hxx
 svx/source/sidebar/line/LinePropertyPanel.cxx
 svx/source/sidebar/line/LinePropertyPanel.hxx
 svx/source/sidebar/line/LinePropertyPanelBase.cxx
-svx/source/sidebar/line/LineWidthValueSet.cxx
-svx/source/sidebar/line/LineWidthValueSet.hxx
 svx/source/sidebar/media/MediaPlaybackPanel.cxx
 svx/source/sidebar/media/MediaPlaybackPanel.hxx
 svx/source/sidebar/nbdtmg.cxx
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 4a31c95deafa..b63bc55aa3ab 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -244,7 +244,6 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
     svx/source/sidebar/graphic/GraphicPropertyPanel \
     svx/source/sidebar/line/LinePropertyPanel \
     svx/source/sidebar/line/LinePropertyPanelBase \
-    svx/source/sidebar/line/LineWidthValueSet \
     svx/source/sidebar/line/LineWidthPopup \
     $(call 
gb_Helper_optional,AVMEDIA,svx/source/sidebar/media/MediaPlaybackPanel) \
     svx/source/sidebar/possize/PosSizePropertyPanel \
diff --git a/svx/source/sidebar/line/LineWidthPopup.cxx 
b/svx/source/sidebar/line/LineWidthPopup.cxx
index bce334b6dc93..0d0b13c7aa8f 100644
--- a/svx/source/sidebar/line/LineWidthPopup.cxx
+++ b/svx/source/sidebar/line/LineWidthPopup.cxx
@@ -26,8 +26,10 @@
 #include <unotools/viewoptions.hxx>
 #include <vcl/settings.hxx>
 #include <vcl/svapp.hxx>
-#include "LineWidthValueSet.hxx"
 #include <bitmaps.hlst>
+#include <comphelper/lok.hxx>
+#include <vcl/virdev.hxx>
+#include <i18nlangtag/mslangid.hxx>
 
 namespace svx::sidebar
 {
@@ -43,11 +45,9 @@ LineWidthPopup::LineWidthPopup(weld::Widget* pParent, 
LinePropertyPanelBase& rPa
     , m_aIMGCus(StockImage::Yes, RID_SVXBMP_WIDTH_CUSTOM)
     , m_aIMGCusGray(StockImage::Yes, RID_SVXBMP_WIDTH_CUSTOM_GRAY)
     , m_xMFWidth(m_xBuilder->weld_metric_spin_button(u"spin"_ustr, 
FieldUnit::POINT))
-    , m_xVSWidth(new LineWidthValueSet())
-    , m_xVSWidthWin(new weld::CustomWeld(*m_xBuilder, u"lineset"_ustr, 
*m_xVSWidth))
+    , m_xIVWidth(m_xBuilder->weld_icon_view(u"line_iconview"_ustr))
+    , aPreviewSize(300, 20)
 {
-    m_xVSWidth->SetStyle(m_xVSWidth->GetStyle() | WB_3DLOOK | 
WB_NO_DIRECTSELECT);
-
     maStrUnits[0] = "0.5";
     maStrUnits[1] = "0.8";
     maStrUnits[2] = "1.0";
@@ -68,39 +68,63 @@ LineWidthPopup::LineWidthPopup(weld::Widget* pParent, 
LinePropertyPanelBase& rPa
         maStrUnits[i] += m_sPt;
     }
 
-    for (sal_uInt16 i = 1; i <= 9; ++i)
-    {
-        m_xVSWidth->InsertItem(i);
-        m_xVSWidth->SetItemText(i, maStrUnits[i - 1]);
-    }
+    PopulateIconView();
 
-    m_xVSWidth->SetUnit(maStrUnits);
-    m_xVSWidth->SetItemData(1, reinterpret_cast<void*>(5));
-    m_xVSWidth->SetItemData(2, reinterpret_cast<void*>(8));
-    m_xVSWidth->SetItemData(3, reinterpret_cast<void*>(10));
-    m_xVSWidth->SetItemData(4, reinterpret_cast<void*>(15));
-    m_xVSWidth->SetItemData(5, reinterpret_cast<void*>(23));
-    m_xVSWidth->SetItemData(6, reinterpret_cast<void*>(30));
-    m_xVSWidth->SetItemData(7, reinterpret_cast<void*>(45));
-    m_xVSWidth->SetItemData(8, reinterpret_cast<void*>(60));
-    m_xVSWidth->SetImage(m_aIMGCusGray);
+    m_xIVWidth->connect_item_activated(LINK(this, LineWidthPopup, 
ItemActivatedHdl));
 
-    m_xVSWidth->SetSelItem(0);
+    // Avoid LibreOffice Kit crash: tooltip handlers cause segfault during 
JSDialog
+    // serialization when popup widgets are destroyed/recreated during 
character formatting resets.
+    // Tooltip event binding is not needed for LibreOffice Kit
+    if (!comphelper::LibreOfficeKit::isActive())
+    {
+        m_xIVWidth->connect_query_tooltip(LINK(this, LineWidthPopup, 
QueryTooltipHdl));
+    }
 
-    m_xVSWidth->SetSelectHdl(LINK(this, LineWidthPopup, VSSelectHdl));
     m_xMFWidth->connect_value_changed(LINK(this, LineWidthPopup, MFModifyHdl));
 }
 
 LineWidthPopup::~LineWidthPopup() {}
 
-IMPL_LINK_NOARG(LineWidthPopup, VSSelectHdl, ValueSet*, void)
+IMPL_LINK_NOARG(LineWidthPopup, ItemActivatedHdl, weld::IconView&, bool)
 {
-    sal_uInt16 iPos = m_xVSWidth->GetSelectedItemId();
+    OUString sSelectedId = m_xIVWidth->get_selected_id();
+    if (sSelectedId.isEmpty())
+        return false;
+
+    sal_uInt32 iPos = sSelectedId.toUInt32();
+
     if (iPos >= 1 && iPos <= 8)
     {
-        sal_IntPtr nVal = OutputDevice::LogicToLogic(
-            reinterpret_cast<sal_IntPtr>(m_xVSWidth->GetItemData(iPos)), 
MapUnit::MapPoint,
-            m_eMapUnit);
+        sal_IntPtr nVal = 0;
+        switch (iPos - 1)
+        {
+            case 0:
+                nVal = 5;
+                break; // 0.5pt
+            case 1:
+                nVal = 8;
+                break; // 0.8pt
+            case 2:
+                nVal = 10;
+                break; // 1.0pt
+            case 3:
+                nVal = 15;
+                break; // 1.5pt
+            case 4:
+                nVal = 23;
+                break; // 2.3pt
+            case 5:
+                nVal = 30;
+                break; // 3.0pt
+            case 6:
+                nVal = 45;
+                break; // 4.5pt
+            case 7:
+                nVal = 60;
+                break; // 6.0pt
+        }
+
+        nVal = OutputDevice::LogicToLogic(nVal, MapUnit::MapPoint, m_eMapUnit);
         nVal = m_xMFWidth->denormalize(nVal);
         XLineWidthItem aWidthItem(nVal);
         m_rParent.setLineWidth(aWidthItem);
@@ -119,12 +143,6 @@ IMPL_LINK_NOARG(LineWidthPopup, VSSelectHdl, ValueSet*, 
void)
             m_rParent.setLineWidth(aWidthItem);
             m_rParent.SetWidth(nVal);
         }
-        else
-        {
-            m_xVSWidth->SetNoSelection(); //add , set no selection and keep 
the last select item
-            m_xVSWidth->SetFormat();
-            m_xVSWidth->Invalidate();
-        }
         //modify end
     }
 
@@ -132,16 +150,14 @@ IMPL_LINK_NOARG(LineWidthPopup, VSSelectHdl, ValueSet*, 
void)
     {
         m_rParent.EndLineWidthPopup();
     }
+
+    return true;
 }
 
 IMPL_LINK_NOARG(LineWidthPopup, MFModifyHdl, weld::MetricSpinButton&, void)
 {
-    if (m_xVSWidth->GetSelItem())
-    {
-        m_xVSWidth->SetSelItem(0);
-        m_xVSWidth->SetFormat();
-        m_xVSWidth->Invalidate();
-    }
+    m_xIVWidth->unselect_all();
+
     tools::Long nTmp = 
static_cast<tools::Long>(m_xMFWidth->get_value(FieldUnit::NONE));
     tools::Long nVal = OutputDevice::LogicToLogic(nTmp, MapUnit::MapPoint, 
m_eMapUnit);
     sal_Int32 nNewWidth = static_cast<short>(m_xMFWidth->denormalize(nVal));
@@ -149,11 +165,24 @@ IMPL_LINK_NOARG(LineWidthPopup, MFModifyHdl, 
weld::MetricSpinButton&, void)
     m_rParent.setLineWidth(aWidthItem);
 }
 
+IMPL_LINK(LineWidthPopup, QueryTooltipHdl, const weld::TreeIter&, rIter, 
OUString)
+{
+    OUString sId = m_xIVWidth->get_id(rIter);
+    sal_uInt16 iPos = sId.toUInt32();
+    if (iPos >= 1 && iPos <= 8)
+        return maStrUnits[iPos - 1];
+    else if (iPos == 9)
+        return m_bCustom ? 
(OUString::number(static_cast<double>(m_nCustomWidth) / 10) + m_sPt)
+                         : maStrUnits[8];
+    return OUString();
+}
+
 void LineWidthPopup::SetWidthSelect(tools::Long lValue, bool bValuable, 
MapUnit eMapUnit)
 {
     m_bVSFocus = true;
-    m_xVSWidth->SetSelItem(0);
+    m_xIVWidth->unselect_all();
     m_eMapUnit = eMapUnit;
+
     SvtViewOptions aWinOpt(EViewType::Window, u"PopupPanel_LineWidth"_ustr);
     if (aWinOpt.Exists())
     {
@@ -165,18 +194,19 @@ void LineWidthPopup::SetWidthSelect(tools::Long lValue, 
bool bValuable, MapUnit
         OUString aWinData(aTmp);
         m_nCustomWidth = aWinData.toInt32();
         m_bCustom = true;
-        m_xVSWidth->SetImage(m_aIMGCus);
-        m_xVSWidth->SetCusEnable(true);
 
         OUString aStrTip = 
OUString::number(static_cast<double>(m_nCustomWidth) / 10) + m_sPt;
-        m_xVSWidth->SetItemText(9, aStrTip);
+        VclPtr<VirtualDevice> aCustomVDev = CreateCustomPreview(m_aIMGCus, 
aStrTip, true);
+        m_xIVWidth->set_image(8, *aCustomVDev);
+        m_xIVWidth->set_text(8, aStrTip);
     }
     else
     {
         m_bCustom = false;
-        m_xVSWidth->SetImage(m_aIMGCusGray);
-        m_xVSWidth->SetCusEnable(false);
-        m_xVSWidth->SetItemText(9, maStrUnits[8]);
+        VclPtr<VirtualDevice> aCustomVDev
+            = CreateCustomPreview(m_aIMGCusGray, maStrUnits[8], false);
+        m_xIVWidth->set_image(8, *aCustomVDev);
+        m_xIVWidth->set_text(8, maStrUnits[8]);
     }
 
     if (bValuable)
@@ -196,7 +226,7 @@ void LineWidthPopup::SetWidthSelect(tools::Long lValue, 
bool bValuable, MapUnit
     {
         if (strCurrValue == maStrUnits[i])
         {
-            m_xVSWidth->SetSelItem(i + 1);
+            m_xIVWidth->select(i);
             break;
         }
     }
@@ -204,21 +234,112 @@ void LineWidthPopup::SetWidthSelect(tools::Long lValue, 
bool bValuable, MapUnit
     if (i >= 8)
     {
         m_bVSFocus = false;
-        m_xVSWidth->SetSelItem(0);
+        m_xIVWidth->unselect_all();
     }
-
-    m_xVSWidth->SetFormat();
-    m_xVSWidth->Invalidate();
 }
 
 void LineWidthPopup::GrabFocus()
 {
     if (m_bVSFocus)
-        m_xVSWidth->GrabFocus();
+        m_xIVWidth->grab_focus();
     else
         m_xMFWidth->grab_focus();
 }
 
+VclPtr<VirtualDevice> LineWidthPopup::CreateLinePreview(sal_uInt16 nLineWidth,
+                                                        const OUString& rText)
+{
+    VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create();
+    pVDev->SetOutputSizePixel(aPreviewSize);
+
+    // Set background
+    const StyleSettings& rStyleSettings = 
Application::GetSettings().GetStyleSettings();
+    pVDev->SetFillColor(rStyleSettings.GetWindowColor());
+
+    // Set font
+    vcl::Font aFont(OutputDevice::GetDefaultFont(DefaultFontType::UI_SANS,
+                                                 
MsLangId::getConfiguredSystemLanguage(),
+                                                 
GetDefaultFontFlags::OnlyOne));
+    Size aFontSize = aFont.GetFontSize();
+    aFontSize.setHeight(aPreviewSize.Height() * 3 / 5);
+    aFont.SetFontSize(aFontSize);
+    aFont.SetColor(rStyleSettings.GetFieldTextColor());
+    pVDev->SetFont(aFont);
+
+    // Draw text
+    Point aTextStart(aPreviewSize.Width() * 7 / 9, aPreviewSize.Height() / 6);
+    pVDev->DrawText(aTextStart, rText);
+
+    // Draw line with specified width
+    pVDev->SetLineColor(rStyleSettings.GetFieldTextColor());
+    Point aLineStart(5, (aPreviewSize.Height() - nLineWidth) / 2);
+    Point aLineEnd(aPreviewSize.Width() * 7 / 9 - 10, (aPreviewSize.Height() - 
nLineWidth) / 2);
+
+    for (sal_uInt16 i = 1; i <= nLineWidth; i++)
+    {
+        pVDev->DrawLine(aLineStart, aLineEnd);
+        aLineStart.AdjustY(1);
+        aLineEnd.AdjustY(1);
+    }
+
+    return pVDev;
+}
+
+VclPtr<VirtualDevice> LineWidthPopup::CreateCustomPreview(const Image& rImage,
+                                                          const OUString& 
rText, bool bEnabled)
+{
+    VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create();
+    pVDev->SetOutputSizePixel(aPreviewSize);
+
+    const StyleSettings& rStyleSettings = 
Application::GetSettings().GetStyleSettings();
+    pVDev->SetFillColor(rStyleSettings.GetWindowColor());
+
+    // Draw image
+    Point aImgStart(5, (aPreviewSize.Height() - 23) / 2);
+    pVDev->DrawImage(aImgStart, rImage);
+
+    // Set font and color
+    vcl::Font aFont(OutputDevice::GetDefaultFont(DefaultFontType::UI_SANS,
+                                                 
MsLangId::getConfiguredSystemLanguage(),
+                                                 
GetDefaultFontFlags::OnlyOne));
+    Size aFontSize = aFont.GetFontSize();
+    aFontSize.setHeight(aPreviewSize.Height() * 3 / 5);
+    aFont.SetFontSize(aFontSize);
+
+    if (bEnabled)
+        aFont.SetColor(rStyleSettings.GetFieldTextColor());
+    else
+        aFont.SetColor(rStyleSettings.GetDisableColor());
+
+    pVDev->SetFont(aFont);
+
+    // Draw text
+    tools::Rectangle aStrRect(Point(rImage.GetSizePixel().Width() + 20, 
aPreviewSize.Height() / 6),
+                              Size(aPreviewSize.Width() - 
rImage.GetSizePixel().Width() - 25,
+                                   aPreviewSize.Height() - 
aPreviewSize.Height() / 3));
+    pVDev->DrawText(aStrRect, rText, DrawTextFlags::EndEllipsis);
+
+    return pVDev;
+}
+
+void LineWidthPopup::PopulateIconView()
+{
+    m_xIVWidth->clear();
+
+    for (sal_uInt16 i = 1; i <= 8; ++i)
+    {
+        OUString sId = OUString::number(i);
+        VclPtr<VirtualDevice> aPreview = CreateLinePreview(i, maStrUnits[i - 
1]);
+        Bitmap aBmp = aPreview->GetBitmap(Point(), 
aPreview->GetOutputSizePixel());
+        m_xIVWidth->insert(-1, &maStrUnits[i - 1], &sId, &aBmp, nullptr);
+    }
+
+    OUString sCustomId = OUString::number(9);
+    VclPtr<VirtualDevice> aCustomPreview = CreateCustomPreview(m_aIMGCusGray, 
maStrUnits[8], false);
+    Bitmap aBmpCustom = aCustomPreview->GetBitmap(Point(), 
aCustomPreview->GetOutputSizePixel());
+    m_xIVWidth->insert(-1, &maStrUnits[8], &sCustomId, &aBmpCustom, nullptr);
+}
+
 } // end of namespace svx::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sidebar/line/LineWidthValueSet.cxx 
b/svx/source/sidebar/line/LineWidthValueSet.cxx
deleted file mode 100644
index 47f7e670279c..000000000000
--- a/svx/source/sidebar/line/LineWidthValueSet.cxx
+++ /dev/null
@@ -1,163 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#include "LineWidthValueSet.hxx"
-
-#include <i18nlangtag/mslangid.hxx>
-#include <vcl/event.hxx>
-#include <vcl/settings.hxx>
-#include <vcl/svapp.hxx>
-
-namespace svx::sidebar {
-
-LineWidthValueSet::LineWidthValueSet()
-    : ValueSet(nullptr)
-    , nSelItem(0)
-    , bCusEnable(false)
-{
-}
-
-void LineWidthValueSet::Resize()
-{
-    SetColCount();
-    SetLineCount(9);
-    ValueSet::Resize();
-}
-
-LineWidthValueSet::~LineWidthValueSet()
-{
-}
-
-void LineWidthValueSet::SetUnit(std::array<OUString,9> const & strUnits)
-{
-    maStrUnits = strUnits;
-}
-
-void LineWidthValueSet::SetSelItem(sal_uInt16 nSel)
-{
-    nSelItem = nSel;
-    if(nSel == 0)
-    {
-        SelectItem(1); // ,false); // 'false' nut supported by AOO
-        SetNoSelection();
-    }
-    else
-    {
-        SelectItem(nSelItem);
-        GrabFocus();
-    }
-}
-
-void LineWidthValueSet::SetImage(const Image& img)
-{
-    imgCus = img;
-}
-
-void LineWidthValueSet::SetCusEnable(bool bEnable)
-{
-    bCusEnable = bEnable;
-}
-
-void  LineWidthValueSet::UserDraw( const UserDrawEvent& rUDEvt )
-{
-    tools::Rectangle aRect = rUDEvt.GetRect();
-    vcl::RenderContext* pDev = rUDEvt.GetRenderContext();
-    sal_uInt16  nItemId = rUDEvt.GetItemId();
-
-    tools::Long nRectHeight = aRect.GetHeight();
-    tools::Long nRectWidth = aRect.GetWidth();
-    Point aBLPos = aRect.TopLeft();
-
-    //const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-    //Color aBackColor(0,0,200);
-    //const Color aTextColor = rStyleSettings.GetFieldTextColor();
-    auto popIt = pDev->ScopedPush(vcl::PushFlags::FONT | 
vcl::PushFlags::LINECOLOR | vcl::PushFlags::FILLCOLOR);
-
-    vcl::Font aFont(OutputDevice::GetDefaultFont(DefaultFontType::UI_SANS, 
MsLangId::getConfiguredSystemLanguage(), GetDefaultFontFlags::OnlyOne));
-    Size aSize = aFont.GetFontSize();
-    aSize.setHeight( nRectHeight*3/5 );
-    aFont.SetFontSize( aSize );
-
-    Point aLineStart(aBLPos.X() + 5,            aBLPos.Y() + ( nRectHeight - 
nItemId )/2);
-    Point aLineEnd(aBLPos.X() + nRectWidth * 7 / 9 - 10, aBLPos.Y() + ( 
nRectHeight - nItemId )/2);
-    if (nItemId == 9)
-    {
-        Point aImgStart(aBLPos.X() + 5,         aBLPos.Y() + ( nRectHeight - 
23 ) / 2);
-        pDev->DrawImage(aImgStart, imgCus);
-
-        tools::Rectangle aStrRect = aRect;
-        aStrRect.AdjustTop(nRectHeight/6 );
-        aStrRect.AdjustBottom( -(nRectHeight/6) );
-        aStrRect.AdjustLeft(imgCus.GetSizePixel().Width() + 20 );
-        if(bCusEnable)
-            
aFont.SetColor(Application::GetSettings().GetStyleSettings().GetFieldTextColor());
-        else
-            
aFont.SetColor(Application::GetSettings().GetStyleSettings().GetDisableColor());
-
-        pDev->SetFont(aFont);
-        pDev->DrawText(aStrRect, maStrUnits[ nItemId - 1 ], 
DrawTextFlags::EndEllipsis);
-    }
-    else
-    {
-        if( nSelItem ==  nItemId )
-        {
-            tools::Rectangle aBackRect = aRect;
-            aBackRect.AdjustTop(3 );
-            aBackRect.AdjustBottom( -2 );
-            pDev->SetFillColor(Color(50,107,197));
-            pDev->DrawRect(aBackRect);
-        }
-
-        //draw text
-        if(nSelItem ==  nItemId )
-            aFont.SetColor(COL_WHITE);
-        else
-            
aFont.SetColor(Application::GetSettings().GetStyleSettings().GetFieldTextColor());
-        pDev->SetFont(aFont);
-        Point aStart(aBLPos.X() + nRectWidth * 7 / 9 , aBLPos.Y() + 
nRectHeight/6);
-        pDev->DrawText(aStart, maStrUnits[ nItemId - 1 ]);  //can't set 
DrawTextFlags::EndEllipsis here ,or the text will disappear
-
-        //draw line
-        if( nSelItem ==  nItemId )
-            pDev->SetLineColor(COL_WHITE);
-        else
-            
pDev->SetLineColor(Application::GetSettings().GetStyleSettings().GetFieldTextColor());
-
-        for(sal_uInt16 i = 1; i <= nItemId; i++)
-        {
-            pDev->DrawLine(aLineStart,aLineEnd );
-            aLineStart.setY(aLineStart.getY() + 1);
-            aLineEnd.setY  (aLineEnd.getY() + 1);
-        }
-    }
-
-    Invalidate( aRect );
-}
-
-void LineWidthValueSet::SetDrawingArea(weld::DrawingArea* pDrawingArea)
-{
-    ValueSet::SetDrawingArea(pDrawingArea);
-    Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(80, 12 * 9), 
MapMode(MapUnit::MapAppFont)));
-    pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
-    SetOutputSizePixel(aSize);
-    
SetColor(Application::GetSettings().GetStyleSettings().GetListBoxWindowBackgroundColor());
-}
-
-} // end of namespace svx::sidebar
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sidebar/line/LineWidthValueSet.hxx 
b/svx/source/sidebar/line/LineWidthValueSet.hxx
deleted file mode 100644
index 225e706a6d6e..000000000000
--- a/svx/source/sidebar/line/LineWidthValueSet.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEWIDTHVALUESET_HXX
-#define INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEWIDTHVALUESET_HXX
-
-#include <svtools/valueset.hxx>
-#include <vcl/image.hxx>
-#include <array>
-
-namespace svx::sidebar {
-
-class LineWidthValueSet final : public ValueSet
-{
-public:
-    explicit LineWidthValueSet();
-    virtual ~LineWidthValueSet() override;
-
-    void SetUnit(std::array<OUString,9> const & strUnits);
-    void SetSelItem(sal_uInt16 nSel);
-    sal_uInt16 GetSelItem() const { return nSelItem;}
-    void SetImage(const Image& img);
-    void SetCusEnable(bool bEnable);
-
-    virtual void    UserDraw( const UserDrawEvent& rUDEvt ) override;
-    virtual void    Resize() override;
-    virtual void    SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
-
-private:
-    sal_uInt16          nSelItem;
-    std::array<OUString,9> maStrUnits;
-    Image           imgCus;
-    bool            bCusEnable;
-};
-
-} // end of namespace svx::sidebar
-
-#endif // INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEWIDTHVALUESET_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/uiconfig/ui/floatinglineproperty.ui 
b/svx/uiconfig/ui/floatinglineproperty.ui
index d005903ff34c..fc8ac7e48acd 100644
--- a/svx/uiconfig/ui/floatinglineproperty.ui
+++ b/svx/uiconfig/ui/floatinglineproperty.ui
@@ -2,6 +2,14 @@
 <!-- Generated with glade 3.22.1 -->
 <interface domain="svx">
   <requires lib="gtk+" version="3.24"/>
+  <object class="GtkTreeStore" id="liststore1">
+    <columns>
+      <!-- column-name pixbuf -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkPopover" id="FloatingLineProperty">
     <property name="can_focus">False</property>
     <property name="no_show_all">True</property>
@@ -16,27 +24,29 @@
         <property name="vexpand">True</property>
         <property name="row_spacing">6</property>
         <child>
-          <object class="GtkScrolledWindow" id="valuesetwin">
+          <object class="GtkScrolledWindow">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="hexpand">True</property>
             <property name="vexpand">True</property>
             <property name="hscrollbar_policy">never</property>
             <property name="vscrollbar_policy">never</property>
+            <property name="height-request">240</property>
             <property name="shadow_type">in</property>
             <child>
-              <object class="GtkViewport">
+              <object class="GtkIconView" id="line_iconview">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkDrawingArea" id="lineset">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="events">GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | 
GDK_STRUCTURE_MASK</property>
-                    <property name="hexpand">True</property>
-                    <property name="vexpand">True</property>
-                  </object>
-                </child>
+                <property name="can-focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="model">liststore1</property>
+                <property name="pixbuf-column">0</property>
+                <property name="selection-mode">single</property>
+                <property name="activate-on-single-click">True</property>
+                <property name="item-padding">2</property>
+                <property name="row-spacing">2</property>
+                <property name="column-spacing">2</property>
+                <property name="margin">2</property>
               </object>
             </child>
           </object>

Reply via email to