svx/source/inc/StylesPreviewToolBoxControl.hxx      |    2 -
 svx/source/inc/StylesPreviewWindow.hxx              |   18 +++++----
 svx/source/tbxctrls/StylesPreviewToolBoxControl.cxx |   10 ++++-
 svx/source/tbxctrls/StylesPreviewWindow.cxx         |   39 +++++++++++---------
 sw/source/core/doc/DocumentStylePoolManager.cxx     |   11 +++++
 sw/source/core/edit/edfcol.cxx                      |   13 ++++++
 6 files changed, 65 insertions(+), 28 deletions(-)

New commits:
commit 10aac52bafc8a0430d1da3fe8f45832c64d6bf34
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Mon Aug 31 13:05:31 2020 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Sep 18 13:30:17 2020 +0200

    Styles preview widget language independent
    
    Use both english / universal and translated names
    to identify a style.
    
    Change-Id: Ibd8b23e678e8bea5773d1da97adf5201377b4453
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101832
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102963
    Tested-by: Jenkins

diff --git a/svx/source/inc/StylesPreviewToolBoxControl.hxx 
b/svx/source/inc/StylesPreviewToolBoxControl.hxx
index 7e2bd85da67e..c7ac3f9953b6 100644
--- a/svx/source/inc/StylesPreviewToolBoxControl.hxx
+++ b/svx/source/inc/StylesPreviewToolBoxControl.hxx
@@ -35,7 +35,7 @@ class StylesPreviewToolBoxControl final
 
     css::uno::Reference<css::frame::XDispatchProvider> m_xDispatchProvider;
 
-    std::vector<OUString> m_aDefaultStyles;
+    std::vector<std::pair<OUString, OUString>> m_aDefaultStyles;
 
 public:
     StylesPreviewToolBoxControl();
diff --git a/svx/source/inc/StylesPreviewWindow.hxx 
b/svx/source/inc/StylesPreviewWindow.hxx
index 5ae857210c6f..26ba93d7be79 100644
--- a/svx/source/inc/StylesPreviewWindow.hxx
+++ b/svx/source/inc/StylesPreviewWindow.hxx
@@ -44,19 +44,19 @@ class StyleItemController : public 
weld::CustomWidgetController
     static constexpr unsigned LEFT_MARGIN = 8;
 
     SfxStyleFamily m_eStyleFamily;
-    OUString m_aStyleName;
+    std::pair<OUString, OUString> m_aStyleName;
     bool m_bSelected;
     css::uno::Reference<css::frame::XDispatchProvider> m_xDispatchProvider;
 
 public:
-    StyleItemController(const OUString& aStyleName,
+    StyleItemController(const std::pair<OUString, OUString>& aStyleName,
                         css::uno::Reference<css::frame::XDispatchProvider>& 
xDispatchProvider);
 
     void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& 
rRect) override;
 
     bool MouseButtonDown(const MouseEvent&) override;
 
-    void SetStyle(const OUString& sStyleName);
+    void SetStyle(const std::pair<OUString, OUString>& sStyleName);
 
     void Select(bool bSelect);
 
@@ -83,8 +83,8 @@ protected:
     std::unique_ptr<weld::Toolbar> m_xUp;
     std::unique_ptr<weld::Toolbar> m_xDown;
 
-    std::vector<OUString> m_aDefaultStyles;
-    std::vector<OUString> m_aAllStyles;
+    std::vector<std::pair<OUString, OUString>> m_aDefaultStyles;
+    std::vector<std::pair<OUString, OUString>> m_aAllStyles;
 
     unsigned m_nStyleIterator;
     OUString m_sSelectedStyle;
@@ -93,7 +93,8 @@ protected:
     DECL_LINK(GoDown, const OString&, void);
 
 public:
-    StylesPreviewWindow_Base(weld::Builder& xBuilder, std::vector<OUString>& 
aDefaultStyles,
+    StylesPreviewWindow_Base(weld::Builder& xBuilder,
+                             std::vector<std::pair<OUString, OUString>>& 
aDefaultStyles,
                              
css::uno::Reference<css::frame::XDispatchProvider>& xDispatchProvider);
     ~StylesPreviewWindow_Base();
 
@@ -103,13 +104,14 @@ private:
     void Update();
     void UpdateStylesList();
     void MakeCurrentStyleVisible();
-    OUString GetVisibleStyle(unsigned nPosition);
+    std::pair<OUString, OUString> GetVisibleStyle(unsigned nPosition);
 };
 
 class StylesPreviewWindow_Impl : public InterimItemWindow, public 
StylesPreviewWindow_Base
 {
 public:
-    StylesPreviewWindow_Impl(vcl::Window* pParent, std::vector<OUString>& 
aDefaultStyles,
+    StylesPreviewWindow_Impl(vcl::Window* pParent,
+                             std::vector<std::pair<OUString, OUString>>& 
aDefaultStyles,
                              
css::uno::Reference<css::frame::XDispatchProvider>& xDispatchProvider);
     ~StylesPreviewWindow_Impl();
 
diff --git a/svx/source/tbxctrls/StylesPreviewToolBoxControl.cxx 
b/svx/source/tbxctrls/StylesPreviewToolBoxControl.cxx
index 7e4a0167b908..9b78a0e7aaf0 100644
--- a/svx/source/tbxctrls/StylesPreviewToolBoxControl.cxx
+++ b/svx/source/tbxctrls/StylesPreviewToolBoxControl.cxx
@@ -79,7 +79,10 @@ void StylesPreviewToolBoxControl::InitializeStyles(
                     OUString sName;
                     xStyle->getPropertyValue("DisplayName") >>= sName;
                     if (!sName.isEmpty())
-                        m_aDefaultStyles.push_back(sName);
+                        m_aDefaultStyles.push_back(std::pair<OUString, 
OUString>(aStyle, sName));
+                }
+                catch (const css::container::NoSuchElementException&)
+                {
                 }
                 catch (const css::uno::Exception&)
                 {
@@ -103,7 +106,10 @@ void StylesPreviewToolBoxControl::InitializeStyles(
                         OUString sName;
                         xStyle->getPropertyValue("DisplayName") >>= sName;
                         if (!sName.isEmpty())
-                            m_aDefaultStyles.push_back(sName);
+                        {
+                            m_aDefaultStyles.push_back(
+                                std::pair<OUString, OUString>(sStyleName, 
sName));
+                        }
                     }
                 }
                 catch (const css::uno::Exception&)
diff --git a/svx/source/tbxctrls/StylesPreviewWindow.cxx 
b/svx/source/tbxctrls/StylesPreviewWindow.cxx
index 992c601601a4..6bd4f54ecba8 100644
--- a/svx/source/tbxctrls/StylesPreviewWindow.cxx
+++ b/svx/source/tbxctrls/StylesPreviewWindow.cxx
@@ -71,7 +71,7 @@ void StyleStatusListener::StateChanged(SfxItemState 
/*eState*/, const SfxPoolIte
 }
 
 StyleItemController::StyleItemController(
-    const OUString& aStyleName,
+    const std::pair<OUString, OUString>& aStyleName,
     css::uno::Reference<css::frame::XDispatchProvider>& xDispatchProvider)
     : m_eStyleFamily(SfxStyleFamily::Para)
     , m_aStyleName(aStyleName)
@@ -90,7 +90,7 @@ void StyleItemController::Paint(vcl::RenderContext& 
rRenderContext,
     rRenderContext.Pop();
 }
 
-void StyleItemController::SetStyle(const OUString& sStyleName)
+void StyleItemController::SetStyle(const std::pair<OUString, OUString>& 
sStyleName)
 {
     m_aStyleName = sStyleName;
     Invalidate();
@@ -105,7 +105,7 @@ void StyleItemController::Select(bool bSelect)
 bool StyleItemController::MouseButtonDown(const MouseEvent&)
 {
     css::uno::Sequence<css::beans::PropertyValue> aArgs(2);
-    aArgs[0].Value <<= m_aStyleName;
+    aArgs[0].Value <<= m_aStyleName.second;
     aArgs[1].Name = "Family";
     aArgs[1].Value <<= sal_Int16(m_eStyleFamily);
 
@@ -217,7 +217,8 @@ void StyleItemController::DrawEntry(vcl::RenderContext& 
rRenderContext)
         return;
 
     pStyle = pPool->First(m_eStyleFamily);
-    while (pStyle && pStyle->GetName() != m_aStyleName)
+    while (pStyle && pStyle->GetName() != m_aStyleName.first
+           && pStyle->GetName() != m_aStyleName.second)
         pStyle = pPool->Next();
 
     if (!pStyle)
@@ -319,7 +320,7 @@ void StyleItemController::DrawSelection(vcl::RenderContext& 
rRenderContext)
 void StyleItemController::DrawHighlight(vcl::RenderContext& rRenderContext, 
Color aFontBack)
 {
     tools::Rectangle aTextRect;
-    rRenderContext.GetTextBoundRect(aTextRect, m_aStyleName);
+    rRenderContext.GetTextBoundRect(aTextRect, m_aStyleName.second);
 
     Size aSize = aTextRect.GetSize();
     aSize.AdjustHeight(aSize.getHeight());
@@ -339,17 +340,17 @@ void 
StyleItemController::DrawHighlight(vcl::RenderContext& rRenderContext, Colo
 void StyleItemController::DrawText(vcl::RenderContext& rRenderContext)
 {
     tools::Rectangle aTextRect;
-    rRenderContext.GetTextBoundRect(aTextRect, m_aStyleName);
+    rRenderContext.GetTextBoundRect(aTextRect, m_aStyleName.second);
 
     Point aPos(0, 0);
     aPos.AdjustX(LEFT_MARGIN);
     aPos.AdjustY((rRenderContext.GetOutputHeightPixel() - aTextRect.Bottom()) 
/ 2);
 
-    rRenderContext.DrawText(aPos, m_aStyleName);
+    rRenderContext.DrawText(aPos, m_aStyleName.second);
 }
 
 StylesPreviewWindow_Base::StylesPreviewWindow_Base(
-    weld::Builder& xBuilder, std::vector<OUString>& aDefaultStyles,
+    weld::Builder& xBuilder, std::vector<std::pair<OUString, OUString>>& 
aDefaultStyles,
     css::uno::Reference<css::frame::XDispatchProvider>& xDispatchProvider)
     : m_xUp(xBuilder.weld_toolbar("uptoolbar"))
     , m_xDown(xBuilder.weld_toolbar("downtoolbar"))
@@ -358,7 +359,9 @@ StylesPreviewWindow_Base::StylesPreviewWindow_Base(
 {
     for (unsigned int i = 0; i < STYLES_COUNT; i++)
     {
-        m_xStyleControllers[i].reset(new 
StyleItemController(aDefaultStyles[i], xDispatchProvider));
+        auto aStyle
+            = i < aDefaultStyles.size() ? aDefaultStyles[i] : 
std::pair<OUString, OUString>("", "");
+        m_xStyleControllers[i].reset(new StyleItemController(aStyle, 
xDispatchProvider));
 
         OUString sIdOUString = "style" + OUString::number(i + 1);
         OString sId = OUStringToOString(sIdOUString, 
RTL_TEXTENCODING_ASCII_US);
@@ -390,10 +393,10 @@ StylesPreviewWindow_Base::~StylesPreviewWindow_Base()
     m_pStatusListener = nullptr;
 }
 
-OUString StylesPreviewWindow_Base::GetVisibleStyle(unsigned nPosition)
+std::pair<OUString, OUString> 
StylesPreviewWindow_Base::GetVisibleStyle(unsigned nPosition)
 {
     if (nPosition >= STYLES_COUNT || !m_aAllStyles.size())
-        return "";
+        return std::make_pair<OUString, OUString>("", "");
 
     return m_aAllStyles[(m_nStyleIterator + nPosition) % m_aAllStyles.size()];
 }
@@ -413,7 +416,9 @@ void StylesPreviewWindow_Base::MakeCurrentStyleVisible()
         return;
 
     unsigned nNewIterator = m_nStyleIterator;
-    auto aFound = std::find(m_aAllStyles.begin(), m_aAllStyles.end(), 
m_sSelectedStyle);
+    auto aFound = std::find_if(m_aAllStyles.begin(), m_aAllStyles.end(), 
[this](auto it) {
+        return it.first == m_sSelectedStyle || it.second == m_sSelectedStyle;
+    });
     if (aFound != m_aAllStyles.end())
         nNewIterator = aFound - m_aAllStyles.begin();
 
@@ -430,11 +435,11 @@ void StylesPreviewWindow_Base::Update()
 
     for (unsigned int i = 0; i < STYLES_COUNT; i++)
     {
-        OUString sStyleName = GetVisibleStyle(i);
+        std::pair<OUString, OUString> sStyleName = GetVisibleStyle(i);
         m_xStyleControllers[i]->SetStyle(sStyleName);
-        m_xStyleControllersWeld[i]->set_tooltip_text(sStyleName);
+        m_xStyleControllersWeld[i]->set_tooltip_text(sStyleName.second);
 
-        if (sStyleName == m_sSelectedStyle)
+        if (sStyleName.first == m_sSelectedStyle || sStyleName.second == 
m_sSelectedStyle)
             m_xStyleControllers[i]->Select(true);
         else
             m_xStyleControllers[i]->Select(false);
@@ -460,7 +465,7 @@ void StylesPreviewWindow_Base::UpdateStylesList()
 
         while (pStyle)
         {
-            m_aAllStyles.push_back(pStyle->GetName());
+            m_aAllStyles.push_back(std::pair<OUString, OUString>("", 
pStyle->GetName()));
             pStyle = xIter->Next();
         }
     }
@@ -483,7 +488,7 @@ IMPL_LINK(StylesPreviewWindow_Base, GoDown, const OString&, 
/*rItem*/, void)
 }
 
 StylesPreviewWindow_Impl::StylesPreviewWindow_Impl(
-    vcl::Window* pParent, std::vector<OUString>& aDefaultStyles,
+    vcl::Window* pParent, std::vector<std::pair<OUString, OUString>>& 
aDefaultStyles,
     css::uno::Reference<css::frame::XDispatchProvider>& xDispatchProvider)
     : InterimItemWindow(pParent, "svx/ui/stylespreview.ui", "ApplyStyleBox",
                         reinterpret_cast<sal_uInt64>(SfxViewShell::Current()))
commit e046042865cd269b901fdf95c861f66b31fb4b0a
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Mon Aug 31 12:49:46 2020 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Sep 18 13:30:10 2020 +0200

    writer: handle styles in multiple languages for online
    
    Use translated name when style is applied and broadcasted.
    Avoid using style names created by the first view.
    
    Change-Id: I18abf3388e69f76ec99eda94e0b67782a52ab23f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101831
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102962
    Tested-by: Jenkins
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/sw/source/core/doc/DocumentStylePoolManager.cxx 
b/sw/source/core/doc/DocumentStylePoolManager.cxx
index a6ff35a87200..de8303491c6c 100644
--- a/sw/source/core/doc/DocumentStylePoolManager.cxx
+++ b/sw/source/core/doc/DocumentStylePoolManager.cxx
@@ -70,6 +70,7 @@
 #include <com/sun/star/text/HoriOrientation.hpp>
 #include <unotools/syslocale.hxx>
 #include <i18nlangtag/languagetag.hxx>
+#include <comphelper/lok.hxx>
 
 using namespace ::editeng;
 using namespace ::com::sun::star;
@@ -585,11 +586,21 @@ SwTextFormatColl* 
DocumentStylePoolManager::GetTextCollFromPool( sal_uInt16 nId,
 
     SwTextFormatColl* pNewColl;
     sal_uInt16 nOutLvlBits = 0;
+
     for (size_t n = 0, nSize = m_rDoc.GetTextFormatColls()->size(); n < nSize; 
++n)
     {
         pNewColl = (*m_rDoc.GetTextFormatColls())[ n ];
         if( nId == pNewColl->GetPoolFormatId() )
         {
+            // in online we can have multiple languages, use translated name
+            if (comphelper::LibreOfficeKit::isActive())
+            {
+                OUString aName;
+                SwStyleNameMapper::GetUIName(nId, aName);
+                if (!aName.isEmpty())
+                    pNewColl->SetName(aName);
+            }
+
             return pNewColl;
         }
 
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index d23a345a06ef..23988e1c4e12 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -91,6 +91,8 @@
 
 #include <tools/diagnose_ex.h>
 #include <IDocumentRedlineAccess.hxx>
+#include <SwStyleNameMapper.hxx>
+#include <comphelper/lok.hxx>
 
 #define WATERMARK_NAME "PowerPlusWaterMarkObject"
 #define WATERMARK_AUTO_SIZE sal_uInt32(1)
@@ -2186,6 +2188,17 @@ void SwEditShell::SetTextFormatColl(SwTextFormatColl 
*pFormat,
     RedlineFlags eRedlMode = 
GetDoc()->getIDocumentRedlineAccess().GetRedlineFlags(), eOldMode = eRedlMode;
 
     SwRewriter aRewriter;
+
+    // in online we can have multiple languages, use universal name then
+    if (comphelper::LibreOfficeKit::isActive())
+    {
+        OUString aName;
+        sal_uInt16 nId = 
SwStyleNameMapper::GetPoolIdFromUIName(pLocal->GetName(), 
SwGetPoolIdFromName::TxtColl);
+        SwStyleNameMapper::FillProgName(nId, aName);
+        if (!aName.isEmpty())
+            pLocal->SetName(aName);
+    }
+
     aRewriter.AddRule(UndoArg1, pLocal->GetName());
 
     GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::SETFMTCOLL, 
&aRewriter);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to