[Libreoffice-commits] core.git: Branch 'private/tml/opencl-default-1' - officecfg/registry sc/inc sc/source sc/uiconfig

Tor Lillqvist tml at collabora.com
Wed Nov 5 13:16:38 PST 2014


 officecfg/registry/schema/org/openoffice/Office/Calc.xcs |   14 
 sc/inc/calcconfig.hxx                                    |    3 
 sc/source/core/tool/calcconfig.cxx                       |   30 +
 sc/source/core/tool/formulaopt.cxx                       |   67 ++
 sc/source/ui/optdlg/calcoptionsdlg.cxx                   |   99 ++++
 sc/source/ui/optdlg/calcoptionsdlg.hxx                   |   28 +
 sc/uiconfig/scalc/ui/formulacalculationoptions.ui        |  346 ++++++++++++++-
 7 files changed, 571 insertions(+), 16 deletions(-)

New commits:
commit 35165f3e2e627521c6cc93ebed54c399b194f336
Author: Tor Lillqvist <tml at collabora.com>
Date:   Wed Nov 5 23:15:20 2014 +0200

    Intermediate commit: start on whitelist/blacklist of OpenCL implementations
    
    Change-Id: I5a6ef8f5e428ec4e62b3fdac8fe3e63f0ae58f1b

diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
index d0eb9d1..ba44e30 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
@@ -1389,6 +1389,20 @@
           </info>
           <value/>
         </prop>
+        <prop oor:name="OpenCLWhiteList" oor:type="oor:string-list" oor:nillable="false">
+          <!-- UIHints: Tools - Options  Spreadsheet  Formula -->
+          <info>
+            <desc>Combinations of (OS, OS version, OpenCL platform vendor, OpenCL device name, OpenCL driver version) that are known to be good. Has higher priority than OpenCLBlackList. Each entry is a string consisting of five parts separated by slashes. In case a slash occurs inside a part, it is prefixed by a backslash. And in case a backslash occurs inside a part, it is also prefixed by another backslash. Any part might contain a single asterisk as a wildcard, matching any value, but there is no more generic regexp support.</desc>
+          </info>
+          <value/>
+        </prop>
+        <prop oor:name="OpenCLBlackList" oor:type="oor:string-list" oor:nillable="false">
+          <!-- UIHints: Tools - Options  Spreadsheet  Formula -->
+          <info>
+            <desc>Like OpenCLWhiteList, but for combinations known to be bad.</desc>
+          </info>
+          <value separator=";">Windows/*/Intel(R) Corporation/9.17.10.2884;SuperOS/1.0/Big Corp, Inc./2.3\/beta</value>
+        </prop>
       </group>
       <group oor:name="Syntax">
         <info>
diff --git a/sc/inc/calcconfig.hxx b/sc/inc/calcconfig.hxx
index 3a54efd..aa286a0 100644
--- a/sc/inc/calcconfig.hxx
+++ b/sc/inc/calcconfig.hxx
@@ -52,6 +52,9 @@ struct SC_DLLPUBLIC ScCalcConfig
     sal_Int32 mnOpenCLMinimumFormulaGroupSize;
     std::set<OpCodeEnum> maOpenCLSubsetOpCodes;
 
+    std::set<OUString> maOpenCLWhiteList;
+    std::set<OUString> maOpenCLBlackList;
+
     ScCalcConfig();
 
     void setOpenCLConfigToDefault();
diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx
index 7d50d78..529f86d 100644
--- a/sc/source/core/tool/calcconfig.cxx
+++ b/sc/source/core/tool/calcconfig.cxx
@@ -38,6 +38,10 @@ void ScCalcConfig::setOpenCLConfigToDefault()
     mbOpenCLAutoSelect = true;
     mnOpenCLMinimumFormulaGroupSize = 20;
     maOpenCLSubsetOpCodes = {ocMin, ocMax, ocSum, ocAverage, ocSumIfs};
+    maOpenCLBlackList = {
+        "Windows/*/Intel(R) Corporation/9.17.10.2884",
+        "SuperOS/1.0/Big Corp, Inc./2.3\\/beta"
+    };
 }
 
 void ScCalcConfig::reset()
@@ -64,7 +68,9 @@ bool ScCalcConfig::operator== (const ScCalcConfig& r) const
            mbOpenCLAutoSelect == r.mbOpenCLAutoSelect &&
            maOpenCLDevice == r.maOpenCLDevice &&
            mnOpenCLMinimumFormulaGroupSize == r.mnOpenCLMinimumFormulaGroupSize &&
-           maOpenCLSubsetOpCodes == r.maOpenCLSubsetOpCodes;
+           maOpenCLSubsetOpCodes == r.maOpenCLSubsetOpCodes &&
+           maOpenCLWhiteList == r.maOpenCLWhiteList &&
+           maOpenCLBlackList == r.maOpenCLBlackList;
 }
 
 bool ScCalcConfig::operator!= (const ScCalcConfig& r) const
@@ -72,6 +78,20 @@ bool ScCalcConfig::operator!= (const ScCalcConfig& r) const
     return !operator==(r);
 }
 
+namespace {
+
+void writeStringSet(std::ostream& rStream, const std::set<OUString>& rSet)
+{
+    for (auto i = rSet.cbegin(); i != rSet.cend(); ++i)
+    {
+        if (i != rSet.cbegin())
+            rStream << ",";
+        rStream << (*i).replaceAll(",", "\\,");
+    }
+}
+
+} // anonymous namespace
+
 std::ostream& SC_DLLPUBLIC operator<<(std::ostream& rStream, const ScCalcConfig& rConfig)
 {
     rStream << "{"
@@ -83,7 +103,13 @@ std::ostream& SC_DLLPUBLIC operator<<(std::ostream& rStream, const ScCalcConfig&
         "OpenCLAutoSelect=" << (rConfig.mbOpenCLAutoSelect?"Y":"N") << ","
         "OpenCLDevice='" << rConfig.maOpenCLDevice << "',"
         "OpenCLMinimumFormulaGroupSize=" << rConfig.mnOpenCLMinimumFormulaGroupSize << ","
-        "OpenCLSubsetOpCodes={" << ScOpCodeSetToSymbolicString(rConfig.maOpenCLSubsetOpCodes) << "}"
+        "OpenCLSubsetOpCodes={" << ScOpCodeSetToSymbolicString(rConfig.maOpenCLSubsetOpCodes) << "},"
+        "OpenCLWhiteList={";
+    writeStringSet(rStream, rConfig.maOpenCLWhiteList);
+    rStream << "},"
+        "OpenCLBlackList={";
+    writeStringSet(rStream, rConfig.maOpenCLBlackList);
+    rStream << "}"
         "}";
     return rStream;
 }
diff --git a/sc/source/core/tool/formulaopt.cxx b/sc/source/core/tool/formulaopt.cxx
index 22bf452..aa2b7a1 100644
--- a/sc/source/core/tool/formulaopt.cxx
+++ b/sc/source/core/tool/formulaopt.cxx
@@ -203,7 +203,9 @@ SfxPoolItem* ScTpFormulaItem::Clone( SfxItemPool * ) const
 #define SCFORMULAOPT_OPENCL_SUBSET_ONLY  13
 #define SCFORMULAOPT_OPENCL_MIN_SIZE     14
 #define SCFORMULAOPT_OPENCL_SUBSET_OPS   15
-#define SCFORMULAOPT_COUNT               16
+#define SCFORMULAOPT_OPENCL_WHITELIST    16
+#define SCFORMULAOPT_OPENCL_BLACKLIST    17
+#define SCFORMULAOPT_COUNT               18
 
 Sequence<OUString> ScFormulaCfg::GetPropertyNames()
 {
@@ -225,6 +227,8 @@ Sequence<OUString> ScFormulaCfg::GetPropertyNames()
         "Calculation/OpenCLSubsetOnly",  // SCFORMULAOPT_OPENCL_SUBSET_ONLY
         "Calculation/OpenCLMinimumDataSize",  // SCFORMULAOPT_OPENCL_MIN_SIZE
         "Calculation/OpenCLSubsetOpCodes",    // SCFORMULAOPT_OPENCL_SUBSET_OPS
+        "Calculation/OpenCLWhiteList",    // SCFORMULAOPT_OPENCL_WHITELIST
+        "Calculation/OpenCLBlackList",    // SCFORMULAOPT_OPENCL_BLACKLIST
     };
     Sequence<OUString> aNames(SCFORMULAOPT_COUNT);
     OUString* pNames = aNames.getArray();
@@ -254,6 +258,8 @@ ScFormulaCfg::PropsToIds ScFormulaCfg::GetPropNamesToId()
         SCFORMULAOPT_OPENCL_SUBSET_ONLY,
         SCFORMULAOPT_OPENCL_MIN_SIZE,
         SCFORMULAOPT_OPENCL_SUBSET_OPS,
+        SCFORMULAOPT_OPENCL_WHITELIST,
+        SCFORMULAOPT_OPENCL_BLACKLIST,
     };
     OSL_ENSURE( SAL_N_ELEMENTS(aVals) == aPropNames.getLength(), "Properties and ids are out of Sync");
     PropsToIds aPropIdMap;
@@ -270,6 +276,35 @@ ScFormulaCfg::ScFormulaCfg() :
     EnableNotification( aNames );
 }
 
+namespace {
+
+css::uno::Sequence<OUString> StringSetToStringSequence(std::set<OUString>& rSet)
+{
+    css::uno::Sequence<OUString> result(rSet.size());
+
+    size_t n(0);
+    for (auto i = rSet.cbegin(); i != rSet.cend(); ++i)
+    {
+        result[n++] = *i;
+    }
+
+    return result;
+}
+
+std::set<OUString> StringSequenceToStringSet(css::uno::Sequence<OUString>& rSequence)
+{
+    std::set<OUString> result;
+
+    for (auto i = rSequence.begin(); i != rSequence.end(); ++i)
+    {
+        result.insert(*i);
+    }
+
+    return result;
+}
+
+} // anonymous namespace
+
 void ScFormulaCfg::UpdateFromProperties( const Sequence<OUString>& aNames )
 {
     Sequence<Any> aValues = GetProperties(aNames);
@@ -512,8 +547,20 @@ void ScFormulaCfg::UpdateFromProperties( const Sequence<OUString>& aNames )
                     GetCalcConfig().maOpenCLSubsetOpCodes = ScStringToOpCodeSet(sVal);
                 }
                 break;
-                default:
-                    ;
+                case SCFORMULAOPT_OPENCL_WHITELIST:
+                {
+                    css::uno::Sequence<OUString> sVal = StringSetToStringSequence(GetCalcConfig().maOpenCLWhiteList);
+                    pValues[nProp] >>= sVal;
+                    GetCalcConfig().maOpenCLWhiteList = StringSequenceToStringSet(sVal);
+                }
+                break;
+                case SCFORMULAOPT_OPENCL_BLACKLIST:
+                {
+                    css::uno::Sequence<OUString> sVal = StringSetToStringSequence(GetCalcConfig().maOpenCLBlackList);
+                    pValues[nProp] >>= sVal;
+                    GetCalcConfig().maOpenCLBlackList = StringSequenceToStringSet(sVal);
+                }
+                break;
                 }
             }
         }
@@ -667,8 +714,18 @@ void ScFormulaCfg::Commit()
                 pValues[nProp] <<= sVal;
             }
             break;
-            default:
-                ;
+            case SCFORMULAOPT_OPENCL_WHITELIST:
+            {
+                css::uno::Sequence<OUString> sVal = StringSetToStringSequence(GetCalcConfig().maOpenCLWhiteList);
+                pValues[nProp] <<= sVal;
+            }
+            break;
+            case SCFORMULAOPT_OPENCL_BLACKLIST:
+            {
+                css::uno::Sequence<OUString> sVal = StringSetToStringSequence(GetCalcConfig().maOpenCLBlackList);
+                pValues[nProp] <<= sVal;
+            }
+            break;
         }
     }
     if(bSetOpenCL)
diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx
index b479aa3..e1de436 100644
--- a/sc/source/ui/optdlg/calcoptionsdlg.cxx
+++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx
@@ -29,7 +29,9 @@ typedef enum {
     CALC_OPTION_ENABLE_OPENCL,
     CALC_OPTION_ENABLE_OPENCL_SUBSET,
     CALC_OPTION_OPENCL_MIN_SIZE,
-    CALC_OPTION_OPENCL_SUBSET_OPS
+    CALC_OPTION_OPENCL_SUBSET_OPS,
+    CALC_OPTION_OPENCL_WHITELIST,
+    CALC_OPTION_OPENCL_BLACKLIST,
 } CalcOptionOrder;
 
 class OptionString : public SvLBoxString
@@ -141,6 +143,11 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi
     get(mpBtnFalse, "false");
     get(mpSpinButton, "spinbutton");
     get(mpEditField, "entry");
+    get(mpListGrid, "listgrid");
+    get(mpListBox, "listbox");
+    get(mpListEditButton, "listbox-edit");
+    get(mpListNewButton, "listbox-new");
+    get(mpListDeleteButton, "listbox-delete");
     get(mpOpenclInfoList, "opencl_list");
     get(mpBtnAutomaticSelectionTrue, "automatic_select_true");
     get(mpBtnAutomaticSelectionFalse, "automatic_select_false");
@@ -151,6 +158,9 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi
     mpSpinButton->SetModifyHdl(LINK(this, ScCalcOptionsDialog, NumModifiedHdl));
     mpEditField->SetModifyHdl(LINK(this, ScCalcOptionsDialog, EditModifiedHdl));
 
+    mpListBox->set_height_request(4* mpListBox->GetTextHeight());
+    mpListBox->SetStyle(mpListBox->GetStyle() | WB_CLIPCHILDREN | WB_FORCE_MAKEVISIBLE);
+
     mpOpenclInfoList->set_height_request(4* mpOpenclInfoList->GetTextHeight());
     mpOpenclInfoList->SetStyle(mpOpenclInfoList->GetStyle() | WB_CLIPCHILDREN | WB_FORCE_MAKEVISIBLE);
     mpOpenclInfoList->SetHighlightRange();
@@ -185,6 +195,27 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi
     maCaptionOpenCLSubsetOpCodes = get<vcl::Window>("opencl_subset_opcodes")->GetText();
     maDescOpenCLSubsetOpCodes = get<vcl::Window>("opencl_subset_opcodes_desc")->GetText();
 
+    maCaptionOpenCLWhiteList = get<vcl::Window>("opencl_whitelist")->GetText();
+    maDescOpenCLWhiteList = get<vcl::Window>("opencl_whitelist_desc")->GetText();
+
+    maCaptionOpenCLBlackList = get<vcl::Window>("opencl_blacklist")->GetText();
+    maDescOpenCLBlackList = get<vcl::Window>("opencl_blacklist_desc")->GetText();
+
+    maCaptionOS = get<vcl::Window>("oslabel")->GetText();
+    maDescOS = get<vcl::Window>("os_desc")->GetText();
+
+    maCaptionOSVersion = get<vcl::Window>("osversionlabel")->GetText();
+    maDescOSVersion = get<vcl::Window>("osversion_desc")->GetText();
+
+    maCaptionOpenCLVendor = get<vcl::Window>("openclvendorlabel")->GetText();
+    maDescOpenCLVendor = get<vcl::Window>("openclvendor_desc")->GetText();
+
+    maCaptionOpenCLDevice = get<vcl::Window>("opencldevicelabel")->GetText();
+    maDescOpenCLDevice = get<vcl::Window>("opencldevice_desc")->GetText();
+
+    maCaptionOpenCLDriverVersion = get<vcl::Window>("opencldriverversionlabel")->GetText();
+    maDescOpenCLDriverVersion = get<vcl::Window>("opencldriverversion_desc")->GetText();
+
     maSoftware = get<vcl::Window>("software")->GetText();
 
     mpLbSettings->set_height_request(8 * mpLbSettings->GetTextHeight());
@@ -237,6 +268,16 @@ SvTreeListEntry *ScCalcOptionsDialog::createStringItem(const OUString &rCaption,
     return pEntry;
 }
 
+SvTreeListEntry *ScCalcOptionsDialog::createStringListItem(const OUString &rCaption) const
+{
+    SvTreeListEntry* pEntry = new SvTreeListEntry;
+    pEntry->AddItem(new SvLBoxString(pEntry, 0, OUString()));
+    pEntry->AddItem(new SvLBoxContextBmp(pEntry, 0, Image(), Image(), false));
+    OptionString* pItem = new OptionString(rCaption, "");
+    pEntry->AddItem(pItem);
+    return pEntry;
+}
+
 void ScCalcOptionsDialog::setValueAt(size_t nPos, const OUString &rValue)
 {
     SvTreeList *pModel = mpLbSettings->GetModel();
@@ -276,7 +317,7 @@ void ScCalcOptionsDialog::fillOpenCLList()
         for(std::vector<sc::OpenCLDeviceInfo>::iterator
                 itr = it->maDevices.begin(), itrEnd = it->maDevices.end(); itr != itrEnd; ++itr)
         {
-            OUString aDeviceId = it->maVendor + " " + itr->maName;
+            OUString aDeviceId = it->maVendor + " " + itr->maName + " " + itr->maDriver;
             SvTreeListEntry* pEntry = mpOpenclInfoList->InsertEntry(aDeviceId);
             if(aDeviceId == aStoredDevice)
             {
@@ -297,6 +338,23 @@ void ScCalcOptionsDialog::fillOpenCLList()
     SelectedDeviceChanged();
 }
 
+namespace {
+
+void fillListBox(ListBox* pListBox, const std::set<OUString>& rSet)
+{
+    pListBox->SetUpdateMode(false);
+    pListBox->Clear();
+
+    for (auto i = rSet.cbegin(); i != rSet.cend(); ++i)
+    {
+        pListBox->InsertEntry(*i, LISTBOX_APPEND);
+    }
+
+    pListBox->SetUpdateMode(true);
+}
+
+} // anonymous namespace
+
 #endif
 
 namespace {
@@ -338,6 +396,8 @@ void ScCalcOptionsDialog::FillOptionsList()
     pModel->Insert(createBoolItem(maCaptionOpenCLSubsetEnabled,maConfig.mbOpenCLSubsetOnly));
     pModel->Insert(createIntegerItem(maCaptionOpenCLMinimumFormulaSize,maConfig.mnOpenCLMinimumFormulaGroupSize));
     pModel->Insert(createStringItem(maCaptionOpenCLSubsetOpCodes,ScOpCodeSetToSymbolicString(maConfig.maOpenCLSubsetOpCodes)));
+    pModel->Insert(createStringListItem(maCaptionOpenCLWhiteList));
+    pModel->Insert(createStringListItem(maCaptionOpenCLBlackList));
 
     fillOpenCLList();
 
@@ -360,6 +420,7 @@ void ScCalcOptionsDialog::SelectionChanged()
             mpBtnFalse->Hide();
             mpSpinButton->Hide();
             mpEditField->Hide();
+            mpListGrid->Hide();
             mpLbOptionEdit->Show();
             mpOpenclInfoList->GetParent()->Hide();
 
@@ -394,6 +455,7 @@ void ScCalcOptionsDialog::SelectionChanged()
             mpBtnFalse->Hide();
             mpSpinButton->Hide();
             mpEditField->Hide();
+            mpListGrid->Hide();
             mpLbOptionEdit->Show();
             mpOpenclInfoList->GetParent()->Hide();
 
@@ -426,12 +488,12 @@ void ScCalcOptionsDialog::SelectionChanged()
         case CALC_OPTION_ENABLE_OPENCL:
         case CALC_OPTION_ENABLE_OPENCL_SUBSET:
         {
-            // Treat empty string as zero.
             mpLbOptionEdit->Hide();
             mpBtnTrue->Show();
             mpBtnFalse->Show();
             mpSpinButton->Hide();
             mpEditField->Hide();
+            mpListGrid->Hide();
 
             bool bValue = false;
             bool bEnable = true;
@@ -508,6 +570,7 @@ void ScCalcOptionsDialog::SelectionChanged()
             mpBtnFalse->Hide();
             mpSpinButton->Show();
             mpEditField->Hide();
+            mpListGrid->Hide();
             mpOpenclInfoList->GetParent()->Hide();
             mpFtAnnotation->SetText(maDescOpenCLMinimumFormulaSize);
             mpSpinButton->SetValue(nValue);
@@ -524,11 +587,37 @@ void ScCalcOptionsDialog::SelectionChanged()
             mpBtnFalse->Hide();
             mpSpinButton->Hide();
             mpEditField->Show();
+            mpListGrid->Hide();
             mpOpenclInfoList->GetParent()->Hide();
             mpFtAnnotation->SetText(maDescOpenCLSubsetOpCodes);
             mpEditField->SetText(sValue);
         }
         break;
+
+        // string lists
+        case CALC_OPTION_OPENCL_WHITELIST:
+        case CALC_OPTION_OPENCL_BLACKLIST:
+        {
+            // SAL _DEBUG(__FILE__ ":" << __LINE__ << ": " << maConfig);
+            mpLbOptionEdit->Hide();
+            mpBtnTrue->Hide();
+            mpBtnFalse->Hide();
+            mpSpinButton->Hide();
+            mpEditField->Hide();
+            mpListGrid->Show();
+            mpOpenclInfoList->GetParent()->Hide();
+            if ( nSelectedPos == CALC_OPTION_OPENCL_WHITELIST )
+            {
+                mpFtAnnotation->SetText(maDescOpenCLWhiteList);
+                fillListBox(mpListBox, maConfig.maOpenCLWhiteList);
+            }
+            else
+            {
+                mpFtAnnotation->SetText(maDescOpenCLBlackList);
+                fillListBox(mpListBox, maConfig.maOpenCLBlackList);
+            }
+        }
+        break;
     }
 }
 
@@ -582,7 +671,9 @@ void ScCalcOptionsDialog::ListOptionValueChanged()
         case CALC_OPTION_ENABLE_OPENCL_SUBSET:
         case CALC_OPTION_OPENCL_MIN_SIZE:
         case CALC_OPTION_OPENCL_SUBSET_OPS:
-            break;
+        case CALC_OPTION_OPENCL_WHITELIST:
+        case CALC_OPTION_OPENCL_BLACKLIST:
+        break;
     }
 }
 
diff --git a/sc/source/ui/optdlg/calcoptionsdlg.hxx b/sc/source/ui/optdlg/calcoptionsdlg.hxx
index 5676cfc..a4aa684 100644
--- a/sc/source/ui/optdlg/calcoptionsdlg.hxx
+++ b/sc/source/ui/optdlg/calcoptionsdlg.hxx
@@ -17,6 +17,7 @@
 #include <vcl/edit.hxx>
 #include <vcl/field.hxx>
 #include <vcl/fixed.hxx>
+#include <vcl/layout.hxx>
 #include <vcl/lstbox.hxx>
 #include <svx/checklbx.hxx>
 #include <svtools/treelistbox.hxx>
@@ -62,6 +63,7 @@ private:
     SvTreeListEntry *createBoolItem(const OUString &rCaption, bool bValue) const;
     SvTreeListEntry *createIntegerItem(const OUString &rCaption, sal_Int32 nValue) const;
     SvTreeListEntry *createStringItem(const OUString &rCaption, const OUString& sValue) const;
+    SvTreeListEntry *createStringListItem(const OUString &rCaption) const;
     void     setValueAt(size_t nPos, const OUString &rString);
 
 private:
@@ -72,6 +74,11 @@ private:
     RadioButton* mpBtnFalse;
     NumericField* mpSpinButton;
     Edit* mpEditField;
+    VclGrid* mpListGrid;
+    ListBox* mpListBox;
+    PushButton* mpListEditButton;
+    PushButton* mpListNewButton;
+    PushButton* mpListDeleteButton;
 
     FixedText* mpFtAnnotation;
     FixedText* mpFtFrequency;
@@ -116,6 +123,27 @@ private:
     OUString maCaptionOpenCLSubsetOpCodes;
     OUString maDescOpenCLSubsetOpCodes;
 
+    OUString maCaptionOpenCLWhiteList;
+    OUString maDescOpenCLWhiteList;
+
+    OUString maCaptionOpenCLBlackList;
+    OUString maDescOpenCLBlackList;
+
+    OUString maCaptionOS;
+    OUString maDescOS;
+
+    OUString maCaptionOSVersion;
+    OUString maDescOSVersion;
+
+    OUString maCaptionOpenCLVendor;
+    OUString maDescOpenCLVendor;
+
+    OUString maCaptionOpenCLDevice;
+    OUString maDescOpenCLDevice;
+
+    OUString maCaptionOpenCLDriverVersion;
+    OUString maDescOpenCLDriverVersion;
+
     OUString maSoftware;
 
     ScCalcConfig maConfig;
diff --git a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui
index 0aaef43..9a07859 100644
--- a/sc/uiconfig/scalc/ui/formulacalculationoptions.ui
+++ b/sc/uiconfig/scalc/ui/formulacalculationoptions.ui
@@ -184,6 +184,290 @@
                         <property name="top_attach">0</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="GtkGrid" id="listgrid">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <object class="GtkTreeView" id="listbox:border">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkGrid">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="orientation">vertical</property>
+                            <property name="vexpand">True</property>
+                            <property name="row_spacing">6</property>
+                            <child>
+                              <object class="GtkLabel" id="oslabel">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">_OS</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">os:border</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="os_desc">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="label" translatable="yes">Operating System, one of: Windows, Linux, OS X</property>
+                                <property name="wrap">True</property>
+                                <property name="max_width_chars">10</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkTextView" id="os:border">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="osversionlabel">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">OS _Version</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">osversion:border</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="osversion_desc">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="label" translatable="yes">Operating System Version, free form</property>
+                                <property name="wrap">True</property>
+                                <property name="max_width_chars">10</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">4</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkTextView" id="osversion:border">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">5</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="openclvendorlabel">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">OpenCL Platform Vendor</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">openclvendor:border</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">6</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="openclvendor_desc">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="label" translatable="yes">OpenCL Platform Vendor</property>
+                                <property name="wrap">True</property>
+                                <property name="max_width_chars">56</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">7</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkTextView" id="openclvendor:border">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">8</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="opencldevicelabel">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">OpenCL Device</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">opencldevice:border</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">9</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="opencldevice_desc">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="label" translatable="yes">OpenCL Device</property>
+                                <property name="wrap">True</property>
+                                <property name="max_width_chars">56</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">10</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkTextView" id="opencldevice:border">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">11</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="opencldriverversionlabel">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">OpenCL Driver Version</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">opencldriverversion:border</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">12</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="opencldriverversion_desc">
+                                <property name="can_focus">False</property>
+                                <property name="no_show_all">True</property>
+                                <property name="label" translatable="yes">OpenCL Driver Version</property>
+                                <property name="wrap">True</property>
+                                <property name="max_width_chars">56</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">13</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkTextView" id="opencldriverversion:border">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">14</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkButtonBox" id="listbox-action_area1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <property name="spacing">6</property>
+                            <property name="layout_style">start</property>
+                            <child>
+                              <object class="GtkButton" id="listbox-edit">
+                                <property name="label" translatable="yes">Edi_t...</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" id="listbox-new">
+                                <property name="label" translatable="yes">_New...</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" id="listbox-delete">
+                                <property name="label" translatable="yes">_Delete</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">2</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">5</property>
+                        <property name="top_attach">0</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -393,7 +677,6 @@
                 <property name="height">1</property>
               </packing>
             </child>
-
             <child>
               <object class="GtkLabel" id="opencl_subset_enabled">
                 <property name="can_focus">False</property>
@@ -422,7 +705,6 @@
                 <property name="height">1</property>
               </packing>
             </child>
-
             <child>
               <object class="GtkLabel" id="opencl_minimum_size">
                 <property name="can_focus">False</property>
@@ -451,7 +733,6 @@
                 <property name="height">1</property>
               </packing>
             </child>
-
             <child>
               <object class="GtkLabel" id="opencl_subset_opcodes">
                 <property name="can_focus">False</property>
@@ -480,7 +761,62 @@
                 <property name="height">1</property>
               </packing>
             </child>
-
+            <child>
+              <object class="GtkLabel" id="opencl_whitelist">
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="label" translatable="yes">List known-good OpenCL implementations</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">23</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="opencl_whitelist_desc">
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="label" translatable="yes">List of known-good OpenCL implementations.</property>
+                <property name="wrap">True</property>
+                <property name="max_width_chars">56</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">24</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="opencl_blacklist">
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="label" translatable="yes">List of known-bad OpenCL implementations</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">25</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="opencl_blacklist_desc">
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="label" translatable="yes">List of known-bad OpenCL implementations.</property>
+                <property name="wrap">True</property>
+                <property name="max_width_chars">56</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">26</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
             <child>
               <object class="GtkGrid" id="grid6">
                 <property name="can_focus">False</property>
@@ -673,7 +1009,7 @@
               </object>
               <packing>
                 <property name="left_attach">0</property>
-                <property name="top_attach">17</property>
+                <property name="top_attach">27</property>
                 <property name="width">1</property>
                 <property name="height">1</property>
               </packing>


More information about the Libreoffice-commits mailing list