Revert "Add support for reading multi string values to wxRegKey."
Reverts r78136 (see #15727) because the multi-string values in Windows registry are actually not "name=value" pairs at all but just NUL-separated strings and the API provided for reading them was inappropriate. Also see #16719. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78326 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -124,7 +124,6 @@ wxMSW:
 | 
				
			|||||||
- Implement wxListBox::EnsureVisible() (RIVDSL).
 | 
					- Implement wxListBox::EnsureVisible() (RIVDSL).
 | 
				
			||||||
- Drastically improve efficiency of selecting all items in wxDataViewCtrl.
 | 
					- Drastically improve efficiency of selecting all items in wxDataViewCtrl.
 | 
				
			||||||
- Fix wxMenuEvent::GetMenu() for wxEVT_MENU_{OPEN,CLOSE} in MDI frames.
 | 
					- Fix wxMenuEvent::GetMenu() for wxEVT_MENU_{OPEN,CLOSE} in MDI frames.
 | 
				
			||||||
- Added support for reading multi string values to wxRegKey (Carl Godkin).
 | 
					 | 
				
			||||||
- Fix updating wxSpinCtrlDouble tooltip text (Laurent Poujoulat).
 | 
					- Fix updating wxSpinCtrlDouble tooltip text (Laurent Poujoulat).
 | 
				
			||||||
- Fix appearance of checked disabled wxToolBar tools with custom images.
 | 
					- Fix appearance of checked disabled wxToolBar tools with custom images.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -205,10 +205,6 @@ public:
 | 
				
			|||||||
  bool  SetValue(const wxString& szValue, const wxMemoryBuffer& buf);
 | 
					  bool  SetValue(const wxString& szValue, const wxMemoryBuffer& buf);
 | 
				
			||||||
    // return the binary value
 | 
					    // return the binary value
 | 
				
			||||||
  bool  QueryValue(const wxString& szValue, wxMemoryBuffer& buf) const;
 | 
					  bool  QueryValue(const wxString& szValue, wxMemoryBuffer& buf) const;
 | 
				
			||||||
    // return multiple strings
 | 
					 | 
				
			||||||
  bool  QueryValue(const wxString& szValue,
 | 
					 | 
				
			||||||
                   wxArrayString& names,
 | 
					 | 
				
			||||||
                   wxArrayString& values) const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // query existence of a key/value
 | 
					  // query existence of a key/value
 | 
				
			||||||
    // return true if value exists
 | 
					    // return true if value exists
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -355,18 +355,6 @@ public:
 | 
				
			|||||||
    */
 | 
					    */
 | 
				
			||||||
    bool QueryValue(const wxString& szValue, wxMemoryBuffer& buf) const;
 | 
					    bool QueryValue(const wxString& szValue, wxMemoryBuffer& buf) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
        Retrieves a multiple string value.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        The @a szValue must exist and have @c REG_MULTI_SZ type. The names and
 | 
					 | 
				
			||||||
        the values of the pairs present in it are returned in the @a names and
 | 
					 | 
				
			||||||
        @a value arrays, which will have the same (possible 0) size.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @since 3.1.0
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    bool QueryValue(const wxString& szValue,
 | 
					 | 
				
			||||||
                    wxArrayString& names,
 | 
					 | 
				
			||||||
                    wxArrayString& values) const;
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
        Renames the key. Returns @true if successful.
 | 
					        Renames the key. Returns @true if successful.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,7 +105,6 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // information
 | 
					    // information
 | 
				
			||||||
    bool IsKeySelected() const;
 | 
					    bool IsKeySelected() const;
 | 
				
			||||||
    static const char *ValueTypeName(wxRegKey::ValueType type);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    // structure describing a registry key/value
 | 
					    // structure describing a registry key/value
 | 
				
			||||||
@@ -1055,6 +1054,7 @@ bool RegTreeCtrl::TreeNode::OnExpand()
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        case wxRegKey::Type_String:
 | 
					        case wxRegKey::Type_String:
 | 
				
			||||||
        case wxRegKey::Type_Expand_String:
 | 
					        case wxRegKey::Type_Expand_String:
 | 
				
			||||||
 | 
					        case wxRegKey::Type_Multi_String:
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            wxString strValue;
 | 
					            wxString strValue;
 | 
				
			||||||
            icon = RegImageList::TextValue;
 | 
					            icon = RegImageList::TextValue;
 | 
				
			||||||
@@ -1063,22 +1063,6 @@ bool RegTreeCtrl::TreeNode::OnExpand()
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case wxRegKey::Type_Multi_String:
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            wxArrayString names, values;
 | 
					 | 
				
			||||||
            m_pKey->QueryValue(str, names, values);
 | 
					 | 
				
			||||||
            strItem += "(multi string) ";
 | 
					 | 
				
			||||||
            for ( size_t i = 0; i < names.GetCount(); i++ )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if ( i > 0 )
 | 
					 | 
				
			||||||
                    strItem += wxT (", ");
 | 
					 | 
				
			||||||
                strItem += names[i] + wxT ("=") + values[i];
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            icon = RegImageList::TextValue;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        case wxRegKey::Type_None:
 | 
					        case wxRegKey::Type_None:
 | 
				
			||||||
            // @@ handle the error...
 | 
					            // @@ handle the error...
 | 
				
			||||||
            icon = RegImageList::BinaryValue;
 | 
					            icon = RegImageList::BinaryValue;
 | 
				
			||||||
@@ -1383,37 +1367,6 @@ void RegTreeCtrl::SetRegistryView(wxRegKey::WOW64ViewMode viewMode)
 | 
				
			|||||||
    m_pRoot->Refresh();
 | 
					    m_pRoot->Refresh();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *RegTreeCtrl::ValueTypeName(wxRegKey::ValueType type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    switch ( type )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        case wxRegKey::Type_None:
 | 
					 | 
				
			||||||
            return "none";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_String:
 | 
					 | 
				
			||||||
            return "string";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Expand_String:
 | 
					 | 
				
			||||||
            return "expand_string";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Binary:
 | 
					 | 
				
			||||||
            return "binary";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Dword:
 | 
					 | 
				
			||||||
            return "number";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Dword_big_endian:
 | 
					 | 
				
			||||||
            return "big endian number";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Link:
 | 
					 | 
				
			||||||
            return "symbolic link";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Multi_String:
 | 
					 | 
				
			||||||
            return "multiple strings";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Resource_list:
 | 
					 | 
				
			||||||
            return "resource list in the resource map";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Full_resource_descriptor:
 | 
					 | 
				
			||||||
            return "resource list in the hardware description";
 | 
					 | 
				
			||||||
        case wxRegKey::Type_Resource_requirements_list:
 | 
					 | 
				
			||||||
            return "resource requirements list";
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            return "unrecognized";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void RegTreeCtrl::ShowProperties()
 | 
					void RegTreeCtrl::ShowProperties()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxTreeItemId lCurrent = GetSelection();
 | 
					    wxTreeItemId lCurrent = GetSelection();
 | 
				
			||||||
@@ -1452,7 +1405,8 @@ void RegTreeCtrl::ShowProperties()
 | 
				
			|||||||
            value,
 | 
					            value,
 | 
				
			||||||
            parent->m_strName.c_str(),
 | 
					            parent->m_strName.c_str(),
 | 
				
			||||||
            key.GetValueType(value),
 | 
					            key.GetValueType(value),
 | 
				
			||||||
            ValueTypeName(key.GetValueType (value)));
 | 
					            key.IsNumericValue(value) ? wxT("numeric") : wxT("string"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -970,38 +970,7 @@ bool wxRegKey::QueryValue(const wxString& szValue, wxMemoryBuffer& buffer) const
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool wxRegKey::QueryValue(const wxString& szValue, wxArrayString &names,
 | 
					 | 
				
			||||||
                          wxArrayString &values) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // Make sure value is a multistring.
 | 
					 | 
				
			||||||
    wxASSERT_MSG(GetValueType (szValue) == Type_Multi_String,
 | 
					 | 
				
			||||||
                 wxT("Type mismatch in wxRegKey::QueryValue()."));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxMemoryBuffer buf;
 | 
					 | 
				
			||||||
    if ( !QueryValue (szValue, buf) )
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    wxChar * const data = static_cast<wxChar *>(buf.GetData());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Parse the list of NUL-separated strings of the form "name=value".
 | 
					 | 
				
			||||||
    size_t begin = 0;
 | 
					 | 
				
			||||||
    for ( size_t i = 0; i < buf.GetDataLen() - 1; i++ )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( data[i] == 0 )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if ( i > begin )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                wxString value;
 | 
					 | 
				
			||||||
                names.Add(wxString(&data[begin]).BeforeFirst('=', &value));
 | 
					 | 
				
			||||||
                values.Add(value);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            begin = i + 1;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool wxRegKey::QueryValue(const wxString& szValue,
 | 
					bool wxRegKey::QueryValue(const wxString& szValue,
 | 
				
			||||||
                          wxString& strValue,
 | 
					                          wxString& strValue,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user