[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - oox/source sc/qa

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Sep 28 07:58:41 UTC 2018


 oox/source/ole/axcontrol.cxx                     |   12 +++++++-
 sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx |binary
 sc/qa/unit/subsequent_filters-test.cxx           |   32 +++++++++++++++++++++++
 3 files changed, 43 insertions(+), 1 deletion(-)

New commits:
commit 3df4131b3ce211a53eb2213f3c954aff1694878c
Author:     Justin Luth <justin.luth at collabora.com>
AuthorDate: Thu Sep 27 21:46:18 2018 +0300
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Sep 28 09:58:11 2018 +0200

    tdf#111980 oox: connect empty radio groups
    
    affects doc, docx, xls, xlsx (at least). Handling optionbutton
    groups is new since 2017, so incremental enhancements are OK.
    
    In LO, if an option button with an empty groupName (like any form
    control which has no groupName option), then it stands alone,
    which is a ridiculous position to be in for a radio button.
    So, lets put them all together into an automatic group.
    
    In MSO, buttons without any explicit group stick together,
    so the effective group is the entire document, or entire sheet.
    
    One complication is that ActiveX radio buttons don't
    interact with Form radio buttons, even if all of them
    have no group name. That situation is not handled by
    this patch (and not very likely to happen since ActiveX
    defaults the group name to the sheet name).
    
    (A Group Box can also be used, which automatically groups
    all buttons fully within its area. That will be much harder
    to implement since every object will need to first be
    categorized as groupbox or optionControl - meaning that everything
    must first be imported. That implies a function call from every
    application doing the import.)
    
    Change-Id: I204adaea75ce99999a16c0cc4e9c3b8b08da9433
    Reviewed-on: https://gerrit.libreoffice.org/61064
    Tested-by: Jenkins
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    (cherry picked from commit 9f969799629fe6bdf8b922d8cb922846aa646ece)
    Reviewed-on: https://gerrit.libreoffice.org/61072
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index 1e1b249e1bc7..bb6fdbc6b1c7 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -1554,7 +1554,17 @@ void AxMorphDataModelBase::convertProperties( PropertyMap& rPropMap, const Contr
     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
     rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
     if ( mnDisplayStyle == AX_DISPLAYSTYLE_OPTBUTTON )
-        rPropMap.setProperty( PROP_GroupName, maGroupName );
+    {
+        // Form Radio Controls (non-ActiveX) have no group name, but autoGroup
+        // with their group box, or frame, or sheet, or document.
+        // So ensure that SOME name is given for a group name
+        // TODO: ActiveX controls without a Group name shouldn't autogroup
+        //    with non-ActiveX option buttons.
+        // TODO: each application should test if control's area is fully inside
+        //    a GroupBox, and give those a separate group name.
+        OUString sGroupName = !maGroupName.isEmpty() ? maGroupName : "autoGroup_";
+        rPropMap.setProperty( PROP_GroupName, sGroupName );
+    }
     AxFontDataModel::convertProperties( rPropMap, rConv );
 }
 
diff --git a/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx b/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx
new file mode 100644
index 000000000000..9f97d9e00a48
Binary files /dev/null and b/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 798c24c09a25..ea212bc659cb 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -176,6 +176,7 @@ public:
 
     //test shape import
     void testControlImport();
+    void testActiveXOptionButtonGroup();
     void testChartImportODS();
 #if HAVE_MORE_FONTS
     void testChartImportXLS();
@@ -276,6 +277,7 @@ public:
     CPPUNIT_TEST(testCellValueXLSX);
     CPPUNIT_TEST(testRowIndex1BasedXLSX);
     CPPUNIT_TEST(testControlImport);
+    CPPUNIT_TEST(testActiveXOptionButtonGroup);
     CPPUNIT_TEST(testChartImportODS);
 #if HAVE_MORE_FONTS
     CPPUNIT_TEST(testChartImportXLS);
@@ -1651,6 +1653,36 @@ void ScFiltersTest::testControlImport()
     xDocSh->DoClose();
 }
 
+void ScFiltersTest::testActiveXOptionButtonGroup()
+{
+    ScDocShellRef xDocSh = loadDoc("tdf111980_radioButtons.", FORMAT_XLSX);
+    CPPUNIT_ASSERT_MESSAGE("Failed to load singlecontrol.xlsx", xDocSh.is());
+    uno::Reference< frame::XModel > xModel = xDocSh->GetModel();
+    uno::Reference< sheet::XSpreadsheetDocument > xDoc(xModel, UNO_QUERY_THROW);
+    uno::Reference< container::XIndexAccess > xIA(xDoc->getSheets(), UNO_QUERY_THROW);
+    uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupplier( xIA->getByIndex(0), UNO_QUERY_THROW);
+    uno::Reference< container::XIndexAccess > xIA_DrawPage(xDrawPageSupplier->getDrawPage(), UNO_QUERY_THROW);
+
+    OUString sGroupName;
+    uno::Reference< drawing::XControlShape > xControlShape(xIA_DrawPage->getByIndex(0), UNO_QUERY_THROW);
+    uno::Reference<beans::XPropertySet> xPropertySet(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+    xPropertySet->getPropertyValue("GroupName") >>= sGroupName;
+    CPPUNIT_ASSERT_EQUAL(OUString("Sheet1"), sGroupName);
+
+    // Form optionbuttons (without Group names) were not grouped.
+    // The two optionbuttons should have the same auto-generated group name.
+    xControlShape.set(xIA_DrawPage->getByIndex(4), uno::UNO_QUERY_THROW);
+    xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+    xPropertySet->getPropertyValue("GroupName") >>= sGroupName;
+    CPPUNIT_ASSERT_EQUAL(false, sGroupName.isEmpty());
+
+    OUString sGroupName5;
+    xControlShape.set(xIA_DrawPage->getByIndex(5), uno::UNO_QUERY_THROW);
+    xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+    xPropertySet->getPropertyValue("GroupName") >>= sGroupName5;
+    CPPUNIT_ASSERT_EQUAL(sGroupName, sGroupName5);
+}
+
 void ScFiltersTest::testChartImportODS()
 {
     ScDocShellRef xDocSh = loadDoc("chart-import-basic.", FORMAT_ODS);


More information about the Libreoffice-commits mailing list