// --- 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;
}
Exemple #3
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;
}
Exemple #6
0
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;
}