void RegTreeCtrl::OnEndEdit(wxTreeEvent& event) { bool ok; wxString name = event.GetLabel(); TreeNode *pNode = GetNode(event); if ( pNode->IsKey() ) { wxRegKey& key = pNode->Key(); ok = key.Rename(name); } else { pNode = pNode->Parent(); wxRegKey& key = pNode->Key(); ok = key.RenameValue(m_nameOld, name); } if ( !ok ) { wxLogError(wxT("Failed to rename '%s' to '%s'."), m_nameOld.c_str(), name.c_str()); } #if 0 // MSW tree ctrl doesn't like this at all, it hangs else { pNode->Refresh(); } #endif // 0 }
void RegTreeCtrl::DoRefresh() { wxTreeItemId lId = GetSelection(); if ( !lId ) return; TreeNode *pNode = (TreeNode *) GetItemData(lId); wxCHECK_RET( pNode != NULL, wxT("tree item without data?") ); pNode->Refresh(); }
void RegTreeCtrl::CreateNewBinaryValue(const wxString& strName) { wxTreeItemId lCurrent = GetSelection(); TreeNode *pCurrent = (TreeNode *)GetItemData(lCurrent); wxCHECK_RET( pCurrent != NULL, wxT("node without data?") ); wxASSERT( pCurrent->IsKey() ); // check must have been done before if ( pCurrent->IsRoot() ) { wxLogError(wxT("Can't create a new value under the root key.")); return; } if ( pCurrent->Key().SetValue(strName, 0) ) pCurrent->Refresh(); }
// test the key creation functions void RegTreeCtrl::OnMenuTest() { wxTreeItemId lId = GetSelection(); TreeNode *pNode = (TreeNode *)GetItemData(lId); wxCHECK_RET( pNode != NULL, wxT("tree item without data?") ); if ( pNode->IsRoot() ) { wxLogError(wxT("Can't create a subkey under the root key.")); return; } if ( !pNode->IsKey() ) { wxLogError(wxT("Can't create a subkey under a value!")); return; } wxRegKey key1(pNode->Key(), wxT("key1")); if ( key1.Create() ) { wxRegKey key2a(key1, wxT("key2a")), key2b(key1, wxT("key2b")); if ( key2a.Create() && key2b.Create() ) { // put some values under the newly created keys key1.SetValue(wxT("first_term"), wxT("10")); key1.SetValue(wxT("second_term"), wxT("7")); key2a = wxT("this is the unnamed value"); key2b.SetValue(wxT("sum"), 17); // refresh tree pNode->Refresh(); wxLogStatus(wxT("Test keys successfully added.")); return; } } wxLogError(wxT("Creation of test keys failed.")); }
void RegTreeCtrl::OnEndDrag(wxTreeEvent& event) { wxCHECK_RET( m_draggedItem, wxT("end drag without begin drag?") ); // clear the pointer anyhow TreeNode *src = m_draggedItem; m_draggedItem = NULL; // where are we going to drop it? TreeNode *dst = GetNode(event); if ( dst && !dst->IsKey() ) { // we need a parent key dst = dst->Parent(); } if ( !dst || dst->IsRoot() ) { wxLogError(wxT("Can't create a key here.")); return; } bool isKey = src->IsKey(); if ( (isKey && (src == dst)) || (!isKey && (dst->Parent() == src)) ) { wxLogStatus(wxT("Can't copy something on itself")); return; } // remove the "Registry Root\\" from the full name wxString nameSrc, nameDst; nameSrc << wxString(src->FullName()).AfterFirst('\\'); nameDst << wxString(dst->FullName()).AfterFirst('\\') << '\\' << wxString(src->FullName()).AfterLast('\\'); wxString verb = m_copyOnDrop ? wxT("copy") : wxT("move"); wxString what = isKey ? wxT("key") : wxT("value"); if ( wxMessageBox(wxString::Format ( wxT("Do you really want to %s the %s %s to %s?"), verb.c_str(), what.c_str(), nameSrc.c_str(), nameDst.c_str() ), wxT("RegTest Confirm"), wxICON_QUESTION | wxYES_NO | wxCANCEL, this) != wxYES ) { return; } bool ok; if ( isKey ) { wxRegKey& key = src->Key(); wxRegKey keyDst(dst->Key(), src->m_strName); ok = keyDst.Create(false); if ( !ok ) { wxLogError(wxT("Key '%s' already exists"), keyDst.GetName().c_str()); } else { ok = key.Copy(keyDst); } if ( ok && !m_copyOnDrop ) { // delete the old key ok = key.DeleteSelf(); if ( ok ) { src->Parent()->Refresh(); } } } else // value { wxRegKey& key = src->Parent()->Key(); ok = key.CopyValue(src->m_strName, dst->Key()); if ( ok && !m_copyOnDrop ) { // we moved it, so delete the old one ok = key.DeleteValue(src->m_strName); } } if ( !ok ) { wxLogError(wxT("Failed to %s registry %s."), verb.c_str(), what.c_str()); } else { dst->Refresh(); } }
void RegTreeCtrl::SetRegistryView(wxRegKey::WOW64ViewMode viewMode) { m_viewMode = viewMode; m_pRoot->SetRegistryView(viewMode); m_pRoot->Refresh(); }