IFACEMETHODIMP CTriColorControlProvider::GetSelection(_Outptr_result_maybenull_ SAFEARRAY * *retVal) { *retVal = nullptr; HRESULT hr = CheckDisconnected(); if (SUCCEEDED(hr)) { TriColorValue controlValue; hr = m_control->get_ControlValue(&controlValue); if (SUCCEEDED(hr)) { ComPtr<IInspectable> spFragmentProvider; hr = m_control->GetTriColorFragmentProvider(controlValue, &spFragmentProvider); if (SUCCEEDED(hr)) { *retVal = SafeArrayCreateVector(VT_UNKNOWN, 0, 1); if (*retVal != nullptr) { long index = 0; hr = SafeArrayPutElement(*retVal, &index, spFragmentProvider.Get()); if (FAILED(hr)) { SafeArrayDestroy(*retVal); *retVal = nullptr; } } else { hr = E_OUTOFMEMORY; } } } } return hr; }
STDMETHODIMP CTriColorFragmentProvider::get_IsSelected(_Out_ BOOL *retVal) { *retVal = FALSE; HRESULT hr = CheckDisconnected(); if (SUCCEEDED(hr)) { // Is this fragment already selected? TriColorValue controlValue; hr = m_control->get_ControlValue(&controlValue); if (SUCCEEDED(hr)) { *retVal = (controlValue == m_value); } } return hr; }
IFACEMETHODIMP CTriColorControlProvider::get_Value(_Out_ BSTR *retVal) { *retVal = nullptr; HRESULT hr = CheckDisconnected(); if (SUCCEEDED(hr)) { TriColorValue controlValue; hr = m_control->get_ControlValue(&controlValue); if (SUCCEEDED(hr)) { hr = TriColorValueHelper::ValueToString(controlValue, retVal); } } return hr; }
STDMETHODIMP CTriColorFragmentProvider::RemoveFromSelection() { HRESULT hr = CheckDisconnected(); if (SUCCEEDED(hr)) { // Is this fragment already selected? TriColorValue controlValue; hr = m_control->get_ControlValue(&controlValue); if (SUCCEEDED(hr)) { if (controlValue == m_value) { // Cannot do multiple selection hr = UIA_E_INVALIDOPERATION; } else { // It's already unselected - operation succeeded. hr = S_OK; } } } return hr; }