// --- Groups -------------------------------------------------------------- // /// Starts a new undo group action. void UndoStack::beginGroup() { if(inGroup()){ endGroup(); } m_groupCommand = new UndoCommandGroup; }
/// Finishes the current undo group action. void UndoStack::endGroup() { if(!inGroup()){ return; } m_undoStack.push(m_groupCommand); m_groupCommand = 0; }
bool fixDevice( const char *device_path ) { struct stat stat_buf; if ( stat( device_path, &stat_buf ) < 0 ) { Error( "Can't stat %s: %s", device_path, strerror(errno)); return( false ); } uid_t uid = getuid(); gid_t gid = getgid(); int in_gid; if ( (in_gid = inGroup( stat_buf.st_gid )) < 0 ) { return( false ); } mode_t mask = 0; if ( uid == stat_buf.st_uid ) { // If we are the owner mask = 00600; } else if ( gid == stat_buf.st_gid || in_gid ) { // If we are in the owner group mask = 00060; } else { // We are neither the owner nor in the group mask = 00006; } mode_t mode = stat_buf.st_mode; if ( (mode & mask) == mask ) { Debug( 1, "Permissions on %s are ok at %o", device_path, mode ); return( true ); } mode |= mask; Info( "Resetting permissions on %s to %o", device_path, mode ); if ( chmod( device_path, mode ) < 0 ) { Error( "Can't chmod %s to %o: %s", device_path, mode, strerror(errno)); return( false ); } return( true ); }
/// Reverts the last command issued by undo(). void UndoStack::redo() { if(inGroup()){ endGroup(); } if(!canRedo()){ return; } UndoCommand *command = m_redoStack.top(); m_redoStack.pop(); command->redo(); m_undoStack.push(command); if(m_undoStack.size() == 1){ canUndoChanged(true); } if(m_redoStack.empty()){ canRedoChanged(false); } }
void LLCloudGroup::updatePuffOwnership() { U32 i = 0; while (i < mCloudPuffs.size()) { if (mCloudPuffs[i].getLifeState() == LL_PUFF_DYING) { i++; continue; } if (inGroup(mCloudPuffs[i])) { i++; continue; } //llinfos << "Cloud moving to new group" << llendl; LLCloudGroup *new_cgp = LLWorld::getInstance()->findCloudGroup(mCloudPuffs[i]); if (!new_cgp) { //llinfos << "Killing puff not in group" << llendl; mCloudPuffs[i].setLifeState(LL_PUFF_DYING); mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE; i++; continue; } //llinfos << "Puff handed off!" << llendl; LLCloudPuff puff; puff.mPositionGlobal = mCloudPuffs[i].mPositionGlobal; puff.mAlpha = mCloudPuffs[i].mAlpha; mCloudPuffs.erase(mCloudPuffs.begin() + i); new_cgp->mCloudPuffs.push_back(puff); } //llinfos << "Puff count: " << LLCloudPuff::sPuffCount << llendl; }
const LV2PortGroup& LV2Effect::GetPortGroups() { if (!mPortGroupsRetrieved) { // Find all port groups with ports in them. char portGroupQuery[] = "PREFIX : <http://lv2plug.in/ns/lv2core#>\n" "PREFIX pg: <http://ll-plugins.nongnu.org/lv2/ext/portgroups#>\n" "SELECT ?index, ?uri, ?label WHERE {\n" "<> :port ?port.\n" "?port :index ?index.\n" "?port pg:membership ?ms.\n" "?ms pg:group ?uri.\n" "?uri rdfs:label ?label.\n" "}"; SLV2Values portIndices = slv2_plugin_query_variable(mData, portGroupQuery, 0); SLV2Values groupUris = slv2_plugin_query_variable(mData, portGroupQuery, 1); SLV2Values groupLabels = slv2_plugin_query_variable(mData, portGroupQuery, 2); std::map<wxString, LV2PortGroup> portGroups; std::vector<bool> inGroup(mControlInputs.size(), false); size_t nMemberships = slv2_values_size(portIndices); for (size_t i = 0; i < nMemberships; ++i) { uint32_t idx = slv2_value_as_int(slv2_values_get_at(portIndices, i)); uint32_t p; for (p = 0; p < mControlInputs.size(); ++p) { if (mControlInputs[p].mIndex == idx) break; } if (p == mControlInputs.size()) continue; wxString uri = wxString::FromUTF8(slv2_value_as_string(slv2_values_get_at(groupUris, i))); wxString label = wxString::FromUTF8(slv2_value_as_string(slv2_values_get_at(groupLabels, i))); std::map<wxString, LV2PortGroup>::iterator iter = portGroups.find(uri); if (iter == portGroups.end()) portGroups[uri] = LV2PortGroup(label); portGroups[uri].AddParameter(p); inGroup[p] = true; } slv2_values_free(portIndices); slv2_values_free(groupUris); slv2_values_free(groupLabels); // Add all ports that aren't in any port groups to the root group. for (uint32_t p = 0; p < mControlInputs.size(); ++p) { if (!inGroup[p]) mRootGroup.AddParameter(p); } // Find all subgroup relationships. char subGroupQuery[] = "PREFIX : <http://lv2plug.in/ns/lv2core#>\n" "PREFIX pg: <http://ll-plugins.nongnu.org/lv2/ext/portgroups#>\n" "SELECT ?sub, ?parent WHERE {\n" "?sub pg:subgroupOf ?parent.\n" "}"; SLV2Values subs = slv2_plugin_query_variable(mData, subGroupQuery, 0); SLV2Values parents = slv2_plugin_query_variable(mData, subGroupQuery, 1); size_t nSubgroups = slv2_values_size(subs); for (size_t i = 0; i < nSubgroups; ++i) { wxString parent = wxString::FromUTF8(slv2_value_as_uri(slv2_values_get_at(parents, i))); wxString sub = wxString::FromUTF8(slv2_value_as_uri(slv2_values_get_at(subs, i))); std::map<wxString, LV2PortGroup>::iterator iter = portGroups.find(parent); std::map<wxString, LV2PortGroup>::iterator iter2 = portGroups.find(sub); if (iter != portGroups.end() && iter2 != portGroups.end()) { iter->second.AddSubGroup(iter2->second); } } slv2_values_free(subs); slv2_values_free(parents); // Make all groups subgroups of the root group. std::map<wxString, LV2PortGroup>::iterator iter; for (iter = portGroups.begin(); iter != portGroups.end(); ++iter) mRootGroup.AddSubGroup(iter->second); mPortGroupsRetrieved = true; } std::queue<const LV2PortGroup*> groups; groups.push(&mRootGroup); while (!groups.empty()) { const LV2PortGroup* g = groups.front(); groups.pop(); const std::vector<LV2PortGroup>& subs = g->GetSubGroups(); for (std::vector<LV2PortGroup>::const_iterator iter = subs.begin(); iter != subs.end(); ++iter) groups.push(&*iter); } return mRootGroup; }