diff options
author | Tor Lillqvist <tml@collabora.com> | 2014-11-05 23:15:20 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2014-11-06 11:49:25 +0200 |
commit | 97a74ee6b86532ac9c1f5c4b2d0d0a557e5ddb59 (patch) | |
tree | c9d2003dc7b16e1ebd44292360c36c85278fe687 | |
parent | ef809ce9480182ea5c4f77843f72d1d45bd48c35 (diff) |
Intermediate commit: start on whitelist/blacklist of OpenCL implementations
Change-Id: I5a6ef8f5e428ec4e62b3fdac8fe3e63f0ae58f1b
-rw-r--r-- | officecfg/registry/schema/org/openoffice/Office/Calc.xcs | 14 | ||||
-rw-r--r-- | sc/inc/calcconfig.hxx | 3 | ||||
-rw-r--r-- | sc/source/core/tool/calcconfig.cxx | 30 | ||||
-rw-r--r-- | sc/source/core/tool/formulaopt.cxx | 67 | ||||
-rw-r--r-- | sc/source/ui/optdlg/calcoptionsdlg.cxx | 99 | ||||
-rw-r--r-- | sc/source/ui/optdlg/calcoptionsdlg.hxx | 28 | ||||
-rw-r--r-- | sc/uiconfig/scalc/ui/formulacalculationoptions.ui | 346 |
7 files changed, 571 insertions, 16 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index d0eb9d12e026..ba44e306e7e6 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 3a54efd56a1d..aa286a05196c 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 7d50d784a954..529f86d741f1 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 22bf4520f484..aa2b7a181d37 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 b479aa3a0b6e..e1de4369c56e 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 5676cfc175b2..a4aa68441502 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 0aaef4320061..9a078592e23a 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> |