Esempio n. 1
0
void PeepsWindow::AddPerson(const entry_ref &ref, bool highlight)
{
	// Check to see if it's actually a Person file
	if(!IsPerson(ref))
		return;
	
	GroupData *gdata;
	
	// Add person to data list
	PersonData *pdata=new PersonData(ref);
	gPeopleData.AddItem(pdata);
	
	// add group(s) and an item for each group
	
	if(strlen(pdata->Group())==0)
	{
		// Ungrouped case
		gdata=gGroupData.AddGroup(TRANSLATE("Ungrouped"));
		if(!fPeopleList->HasItem(gdata->GetInstance()))
			fPeopleList->AddItem(gdata->GetInstance());
		
		gdata->AddPerson(pdata);
		fPeopleList->AddUnder(pdata->CreateInstance(TRANSLATE("Ungrouped")),gdata->GetInstance());
		return;
	}
	
	GroupParser gp(pdata->Group());
	
	for(int32 i=0; i<gp.CountGroups(); i++)
	{
		gdata=gGroupData.AddGroup(gp.GroupAt(i));
		gdata->AddPerson(pdata);
		if(!fPeopleList->HasItem(gdata->GetInstance()))
			fPeopleList->AddItem(gdata->GetInstance());
		fPeopleList->AddUnder(pdata->CreateInstance(gp.GroupAt(i)),gdata->GetInstance());
	}
	if(highlight)
	{
		SelectPerson(pdata->Name());
	}
}
Esempio n. 2
0
void PeepsWindow::DeleteGroup(GroupItem *item)
{
	// We are going to delete the group. All items will be made ungrouped. Because
	// it cannot be undone, we will ask the user if it's ok to delete the group
	
	BString alertmsg=TRANSLATE("Are you sure you want to delete this group?");
	alertmsg+="\n\n";
	alertmsg+=TRANSLATE("All items will be removed from this group, but the items themselves will not"
		" be deleted. Once done, this cannot be undone.");
	BAlert *alert=new BAlert("Mr. Peeps!", alertmsg.String(), TRANSLATE("Delete Group"), 
		TRANSLATE("Cancel"));
	
	if(alert->Go()==1)
		return;

	if(!item)
		return;
	
	if(!item->IsExpanded())
		fPeopleList->Expand(item);

	// First, ensure that we have a group for all these items to go to
	
	GroupData 	*oldgdata=item->GetData(),
				*ungrouped=gGroupData.FindGroup(TRANSLATE("Ungrouped"));
	
	if(!ungrouped)
	{
		ungrouped=gGroupData.AddGroup(TRANSLATE("Ungrouped"));
		fPeopleList->AddItem(ungrouped->GetInstance());
	}

	if(!ungrouped->GetInstance()->IsExpanded())
		fPeopleList->Expand(ungrouped->GetInstance());

	int32 groupindex=fPeopleList->FullListIndexOf(ungrouped->GetInstance())+1;
	
	// Now, we iterate through each person in the group to remove the group name
	// from their group list strings
	for(int32 i=0; i<oldgdata->CountPeople(); i++)
	{
		PersonData *pdata=oldgdata->PersonAt(i);

		if(pdata->CountGroups()==1)
		{
			pdata->AddToGroup(ungrouped->GetInstance());
			fPeopleList->MoveItem(fPeopleList->FullListIndexOf(pdata->InstanceAt(0)),groupindex);
		}
		else
		{
			PersonItem *instance=pdata->InstanceForGroup(item->Name());
			fPeopleList->RemoveItem(instance);
			pdata->DestroyInstance(instance);
		}
		pdata->RemoveFromGroup((GroupItem*)item);
	}
	
	fPeopleList->RemoveItem((GroupItem*)item);
	gGroupData.RemoveGroup(item->Name());
	fPeopleList->SortItemsUnder(ungrouped->GetInstance(),true,compare_peeps);
	fPeopleList->Select(fPeopleList->IndexOf(ungrouped->GetInstance()));
}