sd/source/ui/table/TableDesignPane.cxx |   35 ++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

New commits:
commit 6d77d826c15807e80ccfff749908332e09c9f6f6
Author:     Maxim Monastirsky <momonas...@gmail.com>
AuthorDate: Wed Nov 30 22:47:04 2022 +0200
Commit:     Maxim Monastirsky <momonas...@gmail.com>
CommitDate: Thu Dec 1 10:59:54 2022 +0100

    sd: sensible naming for created cell styles
    
    Instead of "user1", "user2" etc. now we have
    <table-style-name>-<cell-role> e.g. magenta-dark-first-row,
    which makes them a lot easier to identify.
    
    Change-Id: I2db5e20f5f1d46d14034acb15b0f95c58a3f7611
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143514
    Tested-by: Jenkins
    Reviewed-by: Maxim Monastirsky <momonas...@gmail.com>

diff --git a/sd/source/ui/table/TableDesignPane.cxx 
b/sd/source/ui/table/TableDesignPane.cxx
index aa331c3dcda1..cab67aa87f4f 100644
--- a/sd/source/ui/table/TableDesignPane.cxx
+++ b/sd/source/ui/table/TableDesignPane.cxx
@@ -97,6 +97,8 @@ const std::string_view gPropNames[CB_COUNT] =
     "UseBandingColumnStyle"
 };
 
+constexpr std::u16string_view aTableStyleBaseName = u"table";
+
 TableDesignWidget::TableDesignWidget(weld::Builder& rBuilder, ViewShellBase& 
rBase)
     : mrBase(rBase)
     , m_xMenu(rBuilder.weld_menu("menu"))
@@ -207,15 +209,14 @@ IMPL_LINK(TableDesignWidget, implContextMenuHandler, 
const Point*, pPoint, void)
 
 namespace
 {
-    OUString getNewValidTableStyleName(const Reference<XNameContainer>& 
rTableFamily)
+    OUString getNewStyleName(const Reference<XNameContainer>& rFamily, 
std::u16string_view rBaseName)
     {
-        OUString aName;
+        OUString aName(rBaseName);
         sal_Int32 nIndex = 1;
-        do
+        while(rFamily->hasByName(aName))
         {
-            aName = "table" + OUString::number(nIndex++);
+            aName = rBaseName + OUString::number(nIndex++);
         }
-        while(rTableFamily->hasByName(aName));
 
         return aName;
     }
@@ -228,7 +229,7 @@ void TableDesignWidget::InsertStyle()
         Reference<XSingleServiceFactory> xFactory(mxTableFamily, 
UNO_QUERY_THROW);
         Reference<XNameContainer> xTableFamily(mxTableFamily, UNO_QUERY_THROW);
         Reference<XNameReplace> xTableStyle(xFactory->createInstance(), 
UNO_QUERY_THROW);
-        const OUString aName(getNewValidTableStyleName(xTableFamily));
+        const OUString aName(getNewStyleName(xTableFamily, 
aTableStyleBaseName));
         xTableFamily->insertByName(aName, Any(xTableStyle));
 
         Reference<XStyle> xCellStyle(mxCellFamily->getByName("default"), 
UNO_QUERY_THROW);
@@ -255,33 +256,35 @@ void TableDesignWidget::CloneStyle()
 {
     try
     {
-        Reference<XIndexAccess> 
xSrcTableStyle(mxTableFamily->getByIndex(m_xValueSet->GetSelectedItemId() - 1), 
UNO_QUERY_THROW);
+        Reference<XNameAccess> 
xSrcTableStyle(mxTableFamily->getByIndex(m_xValueSet->GetSelectedItemId() - 1), 
UNO_QUERY_THROW);
 
         Reference<XSingleServiceFactory> xFactory(mxTableFamily, 
UNO_QUERY_THROW);
         Reference<XNameContainer> xTableFamily(mxTableFamily, UNO_QUERY_THROW);
-        Reference<XIndexReplace> xDestTableStyle(xFactory->createInstance(), 
UNO_QUERY_THROW);
-        const OUString aName(getNewValidTableStyleName(xTableFamily));
+        Reference<XNameReplace> xDestTableStyle(xFactory->createInstance(), 
UNO_QUERY_THROW);
+        const OUString aName(getNewStyleName(xTableFamily, 
aTableStyleBaseName));
         xTableFamily->insertByName(aName, Any(xDestTableStyle));
 
-        for (sal_Int32 i = 0; i < xDestTableStyle->getCount(); ++i)
+        auto aNames(xSrcTableStyle->getElementNames());
+        for (const auto& name : aNames)
         {
-            Reference<XStyle> xSrcCellStyle(xSrcTableStyle->getByIndex(i), 
UNO_QUERY);
+            Reference<XStyle> xSrcCellStyle(xSrcTableStyle->getByName(name), 
UNO_QUERY);
             if (xSrcCellStyle && xSrcCellStyle->isUserDefined())
             {
                 Reference<XSingleServiceFactory> xCellFactory(mxCellFamily, 
UNO_QUERY_THROW);
                 Reference<XStyle> 
xDestCellStyle(xCellFactory->createInstance(), UNO_QUERY_THROW);
                 
xDestCellStyle->setParentStyle(xSrcCellStyle->getParentStyle());
-                mxCellFamily->insertByName(xDestCellStyle->getName(), 
Any(xDestCellStyle));
+                const OUString aStyleName(getNewStyleName(mxCellFamily, 
Concat2View(aName + "-" + name)));
+                mxCellFamily->insertByName(aStyleName, Any(xDestCellStyle));
 
                 rtl::Reference xSrcStyleSheet = 
static_cast<SdStyleSheet*>(xSrcCellStyle.get());
                 rtl::Reference xDestStyleSheet = 
static_cast<SdStyleSheet*>(xDestCellStyle.get());
 
                 
xDestStyleSheet->GetItemSet().Put(xSrcStyleSheet->GetItemSet());
 
-                xDestTableStyle->replaceByIndex(i, Any(xDestCellStyle));
+                xDestTableStyle->replaceByName(name, Any(xDestCellStyle));
             }
             else
-                xDestTableStyle->replaceByIndex(i, Any(xSrcCellStyle));
+                xDestTableStyle->replaceByName(name, Any(xSrcCellStyle));
         }
 
         updateControls();
@@ -386,7 +389,9 @@ void TableDesignWidget::EditStyle(std::string_view rCommand)
 
             if (!bUserDefined)
             {
-                mxCellFamily->insertByName(xCellStyle->getName(), 
Any(xCellStyle));
+                Reference<XNamed> xNamed(xTableStyle, UNO_QUERY_THROW);
+                const OUString aStyleName(getNewStyleName(mxCellFamily, 
Concat2View(xNamed->getName() + "-" + OUString::fromUtf8(rCommand))));
+                mxCellFamily->insertByName(aStyleName, Any(xCellStyle));
                 xTableStyle->replaceByName(OUString::fromUtf8(rCommand), 
Any(xCellStyle));
             }
 

Reply via email to