wxTreeItemId SamplesTreeCtrl::getTreeItem( smp::Sample *sample, const wxTreeItemId &parent ) const { wxTreeItemIdValue cookie; wxTreeItemId speechtem = GetFirstChild( parent, cookie ); wxTreeItemId foundItem; while( speechtem.IsOk() ) { SamplesTreeData *data = (SamplesTreeData *)GetItemData( speechtem ); if ( data == NULL ) { speechtem = GetNextChild( parent, cookie ); continue; } if ( data->m_sample == sample ) return speechtem; // call recursively on my children getTreeItem( sample, speechtem ); // continue with my next sibling speechtem = GetNextChild( parent, cookie ); } return speechtem; }
void SamplesTreeCtrl::onRenameSample( char const *newSampleName, smp::Sample *sample ) { wxTreeItemId item = getTreeItem( sample ); if ( item.IsOk() ) SetItemText( item, newSampleName ); }
void SamplesTreeCtrl::onChangeSampleSpeaker( char const *speakerName, smp::Sample *sample ) { // Is there a speaker of this new name? wxTreeItemId speakerItem = getSpeaker( speakerName ); wxTreeItemId speechItem = getTreeItem( sample ); if ( speakerItem.IsOk() ) { // The speaker of this name already exists. // So I merge the item into that tree. wxTreeItemId currentSpeakerItem = getSpeaker( speechItem ); if ( currentSpeakerItem.IsOk() ) SelectItem( changeSpeaker( speechItem, currentSpeakerItem, speakerItem ) ); } else { // The speaker doesn't already exist. speakerItem = getSpeaker( speechItem ); // Do I have siblings? if ( GetChildrenCount( speakerItem ) == 1 ) // There's nobody else. I should change the speaker name in place. SetItemText( speakerItem, speakerName ); else { // I have a different name than my siblings, I should create a // new parent and move there. wxTreeItemId newSpeakerItem = AppendItem( GetRootItem(), speakerName ); SelectItem( changeSpeaker( speechItem, speakerItem, newSpeakerItem ) ); } } }
void NodeAnim::refreshVisibility() { AnimationModulePtr animModule = getModel(); QTreeWidgetItem *nodeItem = getTreeItem(); bool showNode = false; int nChildren = nodeItem->childCount(); // Refresh children, which will recursively refresh their children for (int i = 0; i < nChildren; ++i) { QTreeWidgetItem* child = nodeItem->child(i); AnimatedItemTypeEnum type; KnobAnimPtr isKnob; TableItemAnimPtr isTableItem; NodeAnimPtr isNodeItem; ViewSetSpec view; DimSpec dim; bool found = animModule->findItem(child, &type, &isKnob, &isTableItem, &isNodeItem, &view, &dim); if (!found) { continue; } if (isTableItem) { isTableItem->refreshVisibilityConditional(false /*refreshParent*/); } else if (isNodeItem) { isNodeItem->refreshVisibility(); } else if (isKnob) { isKnob->refreshVisibilityConditional(false /*refreshHolder*/); } if (!child->isHidden()) { showNode = true; } } if (!showNode) { // If so far none of the children should be displayed, still check if the node has a range if (isRangeDrawingEnabled()) { showNode = true; } } // If settings panel is not opened and the "Keep in Animation Module" knob is not checked, hide the node. NodeGuiPtr nodeGui = getNodeGui(); bool keepInAnimationModule = nodeGui->getNode()->isKeepInAnimationModuleButtonDown(); if (!keepInAnimationModule && !nodeGui->isSettingsPanelVisible()) { showNode = false; } refreshFrameRange(); nodeItem->setData(0, QT_ROLE_CONTEXT_IS_ANIMATED, showNode); nodeItem->setHidden(!showNode); } // refreshVisibility
wxTreeItemId SamplesTreeCtrl::getTreeItem( smp::Sample *sample ) const { wxTreeItemId root = GetRootItem(); wxTreeItemIdValue cookie; wxTreeItemId speakerItem = GetFirstChild( root, cookie ); wxTreeItemId foundItem; while( speakerItem.IsOk() ) { if ( (foundItem = getTreeItem( sample, speakerItem )).IsOk() ) return foundItem; speakerItem = GetNextChild( root, cookie ); } return foundItem; }